@skysoftware-co/bayan-core-widgets-ui 0.0.1

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.
Files changed (32) hide show
  1. package/README.md +336 -0
  2. package/fesm2022/skysoftware-co-bayan-core-widgets-ui.mjs +966 -0
  3. package/fesm2022/skysoftware-co-bayan-core-widgets-ui.mjs.map +1 -0
  4. package/index.d.ts +6 -0
  5. package/lib/shared/common-methods/navigation.utils.d.ts +4 -0
  6. package/lib/shared/common-methods/navigation.utils.d.ts.map +1 -0
  7. package/lib/shared/menu.dtos.d.ts +91 -0
  8. package/lib/shared/menu.dtos.d.ts.map +1 -0
  9. package/lib/shared/menu.service.d.ts +24 -0
  10. package/lib/shared/menu.service.d.ts.map +1 -0
  11. package/lib/top-menu-widget/components/about-dialog-widget/about-dialog-widget.component.d.ts +18 -0
  12. package/lib/top-menu-widget/components/about-dialog-widget/about-dialog-widget.component.d.ts.map +1 -0
  13. package/lib/top-menu-widget/components/change-password-widget/change-password-widget.component.d.ts +30 -0
  14. package/lib/top-menu-widget/components/change-password-widget/change-password-widget.component.d.ts.map +1 -0
  15. package/lib/top-menu-widget/components/global-search-widget/global-search-widget.component.d.ts +47 -0
  16. package/lib/top-menu-widget/components/global-search-widget/global-search-widget.component.d.ts.map +1 -0
  17. package/lib/top-menu-widget/components/item-widget/item-widget.component.d.ts +22 -0
  18. package/lib/top-menu-widget/components/item-widget/item-widget.component.d.ts.map +1 -0
  19. package/lib/top-menu-widget/components/notifications-widget/notifications-widget.component.d.ts +24 -0
  20. package/lib/top-menu-widget/components/notifications-widget/notifications-widget.component.d.ts.map +1 -0
  21. package/lib/top-menu-widget/components/settings-widget/settings-widget.component.d.ts +35 -0
  22. package/lib/top-menu-widget/components/settings-widget/settings-widget.component.d.ts.map +1 -0
  23. package/lib/top-menu-widget/components/user-panel-widget/user-panel-widget.component.d.ts +29 -0
  24. package/lib/top-menu-widget/components/user-panel-widget/user-panel-widget.component.d.ts.map +1 -0
  25. package/lib/top-menu-widget/top-menu-widget.component.d.ts +72 -0
  26. package/lib/top-menu-widget/top-menu-widget.component.d.ts.map +1 -0
  27. package/lib/top-menu-widget/top-menu-widget.models.d.ts +63 -0
  28. package/lib/top-menu-widget/top-menu-widget.models.d.ts.map +1 -0
  29. package/package.json +47 -0
  30. package/public-api.d.ts +4 -0
  31. package/public-api.d.ts.map +1 -0
  32. package/skysoftware-co-bayan-core-widgets-ui.d.ts.map +1 -0
@@ -0,0 +1,966 @@
1
+ import { CommonModule, DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { EventEmitter, Output, Input, ChangeDetectionStrategy, Component, signal, ViewChild, inject, HostListener, Injectable, computed } from '@angular/core';
4
+ import * as i1 from '@fortawesome/angular-fontawesome';
5
+ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
6
+ import { faCheckCircle, faTools, faGrid, faDollar, faUsers, faRightLeft, faMedal, faGraduationCap, faBell, faCheck, faCog, faInfoCircle, faPersonRunning, faQuestionCircle } from '@fortawesome/pro-solid-svg-icons';
7
+ import { Router } from '@angular/router';
8
+ import * as i1$1 from 'devextreme-angular';
9
+ import { DxPopupModule, DxFormModule, DxAutocompleteModule, DxToolbarModule } from 'devextreme-angular';
10
+ import { TranslatePipe, SkyFooterActionsComponent } from '@skysoftware-co/sky-components-ui';
11
+ import * as i2 from 'devextreme-angular/core';
12
+ import * as i3 from 'devextreme-angular/ui/nested';
13
+ import { faClock } from '@fortawesome/pro-light-svg-icons';
14
+ import { HttpClient, HttpParams } from '@angular/common/http';
15
+ import { map, catchError, throwError } from 'rxjs';
16
+ import { BayanEmployeeBadgeComponent } from '@skysoftware-co/bayan-components-ui';
17
+
18
+ function resolveUrl(baseUrl, url) {
19
+ if (!url) {
20
+ return null;
21
+ }
22
+ return baseUrl ? joinUrl(baseUrl, url) : url;
23
+ }
24
+ function isExternalNavigation(baseUrl, url) {
25
+ return isAbsoluteUrl(url) || (!!baseUrl && isAbsoluteUrl(baseUrl));
26
+ }
27
+ function joinUrl(baseUrl, url) {
28
+ const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
29
+ const normalizedUrl = url.startsWith('/') ? url : `/${url}`;
30
+ return `${normalizedBaseUrl}${normalizedUrl}`;
31
+ }
32
+ function isAbsoluteUrl(url) {
33
+ return /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i.test(url);
34
+ }
35
+
36
+ class BayanCoreAboutDialogWidgetComponent {
37
+ baseUrl = '';
38
+ visible = false;
39
+ config;
40
+ visibleChange = new EventEmitter();
41
+ licenseClick = new EventEmitter();
42
+ releaseNotesClick = new EventEmitter();
43
+ supportClick = new EventEmitter();
44
+ checkCircleIcon = faCheckCircle;
45
+ onBackdropClick(event) {
46
+ if (event.target.classList.contains('about-backdrop')) {
47
+ this.closeDialog();
48
+ }
49
+ }
50
+ closeDialog() {
51
+ this.visibleChange.emit(false);
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreAboutDialogWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreAboutDialogWidgetComponent, isStandalone: true, selector: "bayan-core-about-dialog-widget", inputs: { baseUrl: "baseUrl", visible: "visible", config: "config" }, outputs: { visibleChange: "visibleChange", licenseClick: "licenseClick", releaseNotesClick: "releaseNotesClick", supportClick: "supportClick" }, ngImport: i0, template: "@if (visible) {\r\n <div class=\"about-backdrop\" (click)=\"onBackdropClick($event)\">\r\n <div class=\"about-modal\" role=\"dialog\" aria-labelledby=\"topMenuAboutDialogTitle\" aria-modal=\"true\">\r\n <div class=\"about-modal-header\">\r\n <h4 class=\"about-modal-title\" id=\"topMenuAboutDialogTitle\">{{ config.title || 'AboutSkyBayan' | translate }}</h4>\r\n <button type=\"button\" class=\"about-close-btn\" (click)=\"closeDialog()\" [attr.aria-label]=\"(config.closeButtonLabel || 'Close') | translate\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"about-modal-body\">\r\n <div class=\"row align-items-start\">\r\n <div class=\"col-4\">\r\n @if (config.logoUrl) {\r\n <img [src]=\"config.logoUrl\" alt=\"Logo\" class=\"img-fluid about-logo\">\r\n }\r\n </div>\r\n <div class=\"col-8\">\r\n <h3 class=\"about-product-name\">{{ config.title || 'AboutSkyBayan' | translate }}</h3>\r\n <p class=\"about-version-text mb-1\">{{ (config.versionLabel || 'Version') | translate }} {{ config.version || '' }}</p>\r\n <p class=\"about-up-to-date mb-2\">\r\n <fa-icon [icon]=\"checkCircleIcon\" class=\"text-info me-1\"></fa-icon>\r\n <small class=\"text-muted\">{{ (config.statusLabel || 'SkyBayanUpToDate') | translate }}</small>\r\n </p>\r\n <p class=\"about-copyright mb-0\">{{ config.copyright || '' }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"about-modal-actions\">\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"licenseClick.emit()\">{{ (config.licenseButtonLabel || 'LicenseInformation') | translate }}</button>\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"releaseNotesClick.emit()\">{{ (config.releaseNotesButtonLabel || 'ReleaseNotes') | translate }}</button>\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"supportClick.emit()\">{{ (config.supportButtonLabel || 'TechnicalSupport') | translate }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreAboutDialogWidgetComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'bayan-core-about-dialog-widget', standalone: true, imports: [CommonModule, FontAwesomeModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (visible) {\r\n <div class=\"about-backdrop\" (click)=\"onBackdropClick($event)\">\r\n <div class=\"about-modal\" role=\"dialog\" aria-labelledby=\"topMenuAboutDialogTitle\" aria-modal=\"true\">\r\n <div class=\"about-modal-header\">\r\n <h4 class=\"about-modal-title\" id=\"topMenuAboutDialogTitle\">{{ config.title || 'AboutSkyBayan' | translate }}</h4>\r\n <button type=\"button\" class=\"about-close-btn\" (click)=\"closeDialog()\" [attr.aria-label]=\"(config.closeButtonLabel || 'Close') | translate\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"about-modal-body\">\r\n <div class=\"row align-items-start\">\r\n <div class=\"col-4\">\r\n @if (config.logoUrl) {\r\n <img [src]=\"config.logoUrl\" alt=\"Logo\" class=\"img-fluid about-logo\">\r\n }\r\n </div>\r\n <div class=\"col-8\">\r\n <h3 class=\"about-product-name\">{{ config.title || 'AboutSkyBayan' | translate }}</h3>\r\n <p class=\"about-version-text mb-1\">{{ (config.versionLabel || 'Version') | translate }} {{ config.version || '' }}</p>\r\n <p class=\"about-up-to-date mb-2\">\r\n <fa-icon [icon]=\"checkCircleIcon\" class=\"text-info me-1\"></fa-icon>\r\n <small class=\"text-muted\">{{ (config.statusLabel || 'SkyBayanUpToDate') | translate }}</small>\r\n </p>\r\n <p class=\"about-copyright mb-0\">{{ config.copyright || '' }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"about-modal-actions\">\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"licenseClick.emit()\">{{ (config.licenseButtonLabel || 'LicenseInformation') | translate }}</button>\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"releaseNotesClick.emit()\">{{ (config.releaseNotesButtonLabel || 'ReleaseNotes') | translate }}</button>\r\n <button type=\"button\" class=\"about-action-btn\" (click)=\"supportClick.emit()\">{{ (config.supportButtonLabel || 'TechnicalSupport') | translate }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
59
+ }], propDecorators: { baseUrl: [{
60
+ type: Input
61
+ }], visible: [{
62
+ type: Input
63
+ }], config: [{
64
+ type: Input,
65
+ args: [{ required: true }]
66
+ }], visibleChange: [{
67
+ type: Output
68
+ }], licenseClick: [{
69
+ type: Output
70
+ }], releaseNotesClick: [{
71
+ type: Output
72
+ }], supportClick: [{
73
+ type: Output
74
+ }] } });
75
+
76
+ class BayanCoreChangePasswordWidgetComponent {
77
+ baseUrl = '';
78
+ visible = false;
79
+ config;
80
+ isSubmitting = false;
81
+ visibleChange = new EventEmitter();
82
+ submitPasswordChange = new EventEmitter();
83
+ changePasswordForm;
84
+ currentPasswordMode = signal('password');
85
+ newPasswordMode = signal('password');
86
+ confirmNewPasswordMode = signal('password');
87
+ formData = {
88
+ currentPassword: '',
89
+ newPassword: '',
90
+ confirmNewPassword: '',
91
+ };
92
+ closeDialog() {
93
+ this.visible = false;
94
+ this.visibleChange.emit(false);
95
+ this.resetForm();
96
+ }
97
+ resetForm() {
98
+ this.formData = {
99
+ currentPassword: '',
100
+ newPassword: '',
101
+ confirmNewPassword: '',
102
+ };
103
+ }
104
+ onSaveButtonClick() {
105
+ const isValid = this.changePasswordForm?.instance.validate().isValid ?? false;
106
+ if (!isValid) {
107
+ return;
108
+ }
109
+ this.submitPasswordChange.emit({ ...this.formData });
110
+ }
111
+ togglePasswordMode(field) {
112
+ const current = this[field]();
113
+ this[field].set(current === 'text' ? 'password' : 'text');
114
+ }
115
+ updateField(field, value) {
116
+ this.formData = {
117
+ ...this.formData,
118
+ [field]: value,
119
+ };
120
+ }
121
+ isChangePasswordValid() {
122
+ return !!this.formData.currentPassword && !!this.formData.newPassword && !!this.formData.confirmNewPassword && this.formData.newPassword === this.formData.confirmNewPassword;
123
+ }
124
+ getCurrentPasswordEditorOptions() {
125
+ return {
126
+ maxLength: 256,
127
+ disabled: this.isSubmitting,
128
+ mode: this.currentPasswordMode(),
129
+ onValueChanged: (event) => this.updateField('currentPassword', event.value ?? ''),
130
+ buttons: [{
131
+ name: 'password',
132
+ location: 'after',
133
+ options: {
134
+ stylingMode: 'text',
135
+ icon: this.currentPasswordMode() === 'text' ? 'eyeopen' : 'eyeclose',
136
+ onClick: () => this.togglePasswordMode('currentPasswordMode'),
137
+ },
138
+ }],
139
+ };
140
+ }
141
+ getNewPasswordEditorOptions() {
142
+ return {
143
+ maxLength: 256,
144
+ disabled: this.isSubmitting,
145
+ mode: this.newPasswordMode(),
146
+ onValueChanged: (event) => this.updateField('newPassword', event.value ?? ''),
147
+ buttons: [{
148
+ name: 'password',
149
+ location: 'after',
150
+ options: {
151
+ stylingMode: 'text',
152
+ icon: this.newPasswordMode() === 'text' ? 'eyeopen' : 'eyeclose',
153
+ onClick: () => this.togglePasswordMode('newPasswordMode'),
154
+ },
155
+ }],
156
+ };
157
+ }
158
+ getConfirmPasswordEditorOptions() {
159
+ return {
160
+ maxLength: 256,
161
+ disabled: this.isSubmitting,
162
+ mode: this.confirmNewPasswordMode(),
163
+ onValueChanged: (event) => this.updateField('confirmNewPassword', event.value ?? ''),
164
+ buttons: [{
165
+ name: 'password',
166
+ location: 'after',
167
+ options: {
168
+ stylingMode: 'text',
169
+ icon: this.confirmNewPasswordMode() === 'text' ? 'eyeopen' : 'eyeclose',
170
+ onClick: () => this.togglePasswordMode('confirmNewPasswordMode'),
171
+ },
172
+ }],
173
+ };
174
+ }
175
+ passwordComparison = () => this.formData.newPassword;
176
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreChangePasswordWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
177
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.21", type: BayanCoreChangePasswordWidgetComponent, isStandalone: true, selector: "bayan-core-change-password-widget", inputs: { baseUrl: "baseUrl", visible: "visible", config: "config", isSubmitting: "isSubmitting" }, outputs: { visibleChange: "visibleChange", submitPasswordChange: "submitPasswordChange" }, viewQueries: [{ propertyName: "changePasswordForm", first: true, predicate: ["changePasswordForm"], descendants: true }], ngImport: i0, template: "<dx-popup\r\n [visible]=\"visible\"\r\n (onHiding)=\"closeDialog()\"\r\n [title]=\"config.title | translate\"\r\n [showCloseButton]=\"true\"\r\n [width]=\"450\"\r\n [height]=\"'auto'\"\r\n [dragEnabled]=\"false\"\r\n [shading]=\"true\"\r\n shadingColor=\"rgba(0,0,0,0.4)\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-form\r\n #changePasswordForm\r\n [formData]=\"formData\"\r\n labelLocation=\"top\"\r\n [showColonAfterLabel]=\"false\"\r\n class=\"mb-3 mx-2\">\r\n <dxi-item\r\n dataField=\"currentPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getCurrentPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.currentPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n </dxi-item>\r\n\r\n <dxi-item\r\n dataField=\"newPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getNewPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.newPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n </dxi-item>\r\n\r\n <dxi-item\r\n dataField=\"confirmNewPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getConfirmPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.confirmNewPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"compare\"\r\n [comparisonTarget]=\"passwordComparison\">\r\n </dxi-validation-rule>\r\n </dxi-item>\r\n </dx-form>\r\n\r\n <sky-footer-actions\r\n [primaryButtonText]=\"config.primaryButtonText | translate\"\r\n [showSecondaryButton]=\"false\"\r\n [isLoading]=\"isSubmitting\"\r\n [disabledPrimaryButton]=\"isSubmitting || !isChangePasswordValid()\"\r\n (PrimaryButtonClick)=\"onSaveButtonClick()\">\r\n </sky-footer-actions>\r\n </div>\r\n</dx-popup>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxPopupModule }, { kind: "component", type: i1$1.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "enableBodyScroll", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "enableBodyScrollChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "directive", type: i2.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "ngmodule", type: DxFormModule }, { kind: "component", type: i1$1.DxFormComponent, selector: "dx-form", inputs: ["accessKey", "activeStateEnabled", "alignItemLabels", "alignItemLabelsInAllGroups", "colCount", "colCountByScreen", "customizeItem", "disabled", "elementAttr", "focusStateEnabled", "formData", "height", "hint", "hoverStateEnabled", "isDirty", "items", "labelLocation", "labelMode", "minColWidth", "optionalMark", "readOnly", "requiredMark", "requiredMessage", "rtlEnabled", "screenByWidth", "scrollingEnabled", "showColonAfterLabel", "showOptionalMark", "showRequiredMark", "showValidationSummary", "tabIndex", "validationGroup", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onEditorEnterKey", "onFieldDataChanged", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "alignItemLabelsChange", "alignItemLabelsInAllGroupsChange", "colCountChange", "colCountByScreenChange", "customizeItemChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formDataChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isDirtyChange", "itemsChange", "labelLocationChange", "labelModeChange", "minColWidthChange", "optionalMarkChange", "readOnlyChange", "requiredMarkChange", "requiredMessageChange", "rtlEnabledChange", "screenByWidthChange", "scrollingEnabledChange", "showColonAfterLabelChange", "showOptionalMarkChange", "showRequiredMarkChange", "showValidationSummaryChange", "tabIndexChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i3.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "author", "id", "timestamp", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "captionTemplate", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "linkAttr", "url", "collapsed", "collapsedSize", "collapsible", "maxSize", "minSize", "resizable", "size", "splitter", "heightRatio", "widthRatio", "expanded", "hasItems", "parentId"] }, { kind: "component", type: i3.DxoLabelComponent, selector: "dxo-label", inputs: ["connectorColor", "connectorWidth", "customizeText", "font", "format", "indent", "visible", "horizontalAlignment", "position", "text", "verticalAlignment", "alignment", "customizeHint", "displayMode", "indentFromAxis", "overlappingBehavior", "rotationAngle", "staggeringSpacing", "template", "textOverflow", "wordWrap", "argumentFormat", "backgroundColor", "border", "connector", "displayFormat", "horizontalOffset", "showForZeroValues", "verticalOffset", "hideFirstOrLast", "indentFromTick", "useRangeColors", "location", "showColon", "radialOffset", "topIndent", "shadow", "useNodeColors", "dataField", "enabled"] }, { kind: "component", type: i3.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: SkyFooterActionsComponent, selector: "sky-footer-actions", inputs: ["primaryButtonText", "extraButtonText", "secondaryButtonText", "primaryButtonWidth", "secondaryButtonWidth", "extraButtonWidth", "isFillRowWidth", "primaryButtonHeight", "secondaryButtonHeight", "extraButtonHeight", "showPrimaryButton", "showSecondaryButton", "showExtraButton", "primaryButtonType", "secondaryButtonType", "extraButtonType", "disabledPrimaryButton", "disabledSecondaryButton", "disabledExtraButton", "primarySubmitBehavior", "secondarySubmitBehavior", "extraSubmitBehavior", "primaryButtonClass", "secondaryButtonClass", "extraButtonClass", "formValidationGroup", "isLoading", "loadingText", "disabled", "EditMode", "validatePrimaryAction", "validateExtraAction", "showErrorLabel", "errorMessage", "errorLabel", "closeButtonClass", "marginClass", "successMessage"], outputs: ["PrimaryButtonClick", "SecondaryButtonClick", "ExtraButtonClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
178
+ }
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreChangePasswordWidgetComponent, decorators: [{
180
+ type: Component,
181
+ args: [{ selector: 'bayan-core-change-password-widget', standalone: true, imports: [CommonModule, DxPopupModule, DxFormModule, SkyFooterActionsComponent, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dx-popup\r\n [visible]=\"visible\"\r\n (onHiding)=\"closeDialog()\"\r\n [title]=\"config.title | translate\"\r\n [showCloseButton]=\"true\"\r\n [width]=\"450\"\r\n [height]=\"'auto'\"\r\n [dragEnabled]=\"false\"\r\n [shading]=\"true\"\r\n shadingColor=\"rgba(0,0,0,0.4)\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-form\r\n #changePasswordForm\r\n [formData]=\"formData\"\r\n labelLocation=\"top\"\r\n [showColonAfterLabel]=\"false\"\r\n class=\"mb-3 mx-2\">\r\n <dxi-item\r\n dataField=\"currentPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getCurrentPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.currentPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n </dxi-item>\r\n\r\n <dxi-item\r\n dataField=\"newPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getNewPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.newPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n </dxi-item>\r\n\r\n <dxi-item\r\n dataField=\"confirmNewPassword\"\r\n editorType=\"dxTextBox\"\r\n [editorOptions]=\"getConfirmPasswordEditorOptions()\">\r\n <dxo-label [text]=\"config.confirmNewPasswordLabel | translate\"></dxo-label>\r\n <dxi-validation-rule type=\"required\"></dxi-validation-rule>\r\n <dxi-validation-rule\r\n type=\"compare\"\r\n [comparisonTarget]=\"passwordComparison\">\r\n </dxi-validation-rule>\r\n </dxi-item>\r\n </dx-form>\r\n\r\n <sky-footer-actions\r\n [primaryButtonText]=\"config.primaryButtonText | translate\"\r\n [showSecondaryButton]=\"false\"\r\n [isLoading]=\"isSubmitting\"\r\n [disabledPrimaryButton]=\"isSubmitting || !isChangePasswordValid()\"\r\n (PrimaryButtonClick)=\"onSaveButtonClick()\">\r\n </sky-footer-actions>\r\n </div>\r\n</dx-popup>\r\n" }]
182
+ }], propDecorators: { baseUrl: [{
183
+ type: Input
184
+ }], visible: [{
185
+ type: Input
186
+ }], config: [{
187
+ type: Input,
188
+ args: [{ required: true }]
189
+ }], isSubmitting: [{
190
+ type: Input
191
+ }], visibleChange: [{
192
+ type: Output
193
+ }], submitPasswordChange: [{
194
+ type: Output
195
+ }], changePasswordForm: [{
196
+ type: ViewChild,
197
+ args: ['changePasswordForm']
198
+ }] } });
199
+
200
+ class BayanCoreGlobalSearchWidgetComponent {
201
+ document = inject(DOCUMENT);
202
+ router = inject(Router);
203
+ searchAutoComplete;
204
+ baseUrl = '';
205
+ placeholder = 'TopMenu.SearchPlaceholder';
206
+ dataSource = [];
207
+ search = new EventEmitter();
208
+ itemNavigate = new EventEmitter();
209
+ toolsIcon = faTools;
210
+ gridIcon = faGrid;
211
+ creditIcon = faDollar;
212
+ usersIcon = faUsers;
213
+ clockIcon = faClock;
214
+ swapIcon = faRightLeft;
215
+ medalIcon = faMedal;
216
+ graduateIcon = faGraduationCap;
217
+ onInput(event) {
218
+ const searchTerm = event.event?.target?.value;
219
+ if (typeof searchTerm === 'string' && searchTerm.startsWith(' ')) {
220
+ event.component?.option('value', searchTerm.trim());
221
+ }
222
+ }
223
+ onEnterKey(event) {
224
+ const searchTerm = (event.event?.target?.value ?? '').toString().trim();
225
+ if (!searchTerm) {
226
+ return;
227
+ }
228
+ const match = this.dataSource.find((item) => item.menuSubTitle.toLowerCase().trim() === searchTerm.toLowerCase().trim());
229
+ if (match) {
230
+ this.itemNavigate.emit(match);
231
+ return;
232
+ }
233
+ this.search.emit(searchTerm);
234
+ }
235
+ onItemSelected(event, item) {
236
+ event.preventDefault();
237
+ event.stopPropagation();
238
+ this.itemNavigate.emit(item);
239
+ this.navigateToUrl(item.menuUrl);
240
+ }
241
+ reset() {
242
+ this.searchAutoComplete?.instance?.option('value', '');
243
+ }
244
+ getText(text, isTranslatable = false) {
245
+ return isTranslatable ? text : text;
246
+ }
247
+ hasNavigationUrl(url) {
248
+ return !!resolveUrl(this.baseUrl, url);
249
+ }
250
+ navigateToUrl(url) {
251
+ if (!url) {
252
+ return;
253
+ }
254
+ const resolvedUrl = resolveUrl(this.baseUrl, url);
255
+ if (!resolvedUrl) {
256
+ return;
257
+ }
258
+ if (isExternalNavigation(this.baseUrl, url)) {
259
+ this.document.location.assign(resolvedUrl);
260
+ return;
261
+ }
262
+ void this.router.navigateByUrl(resolvedUrl);
263
+ }
264
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreGlobalSearchWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
265
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreGlobalSearchWidgetComponent, isStandalone: true, selector: "bayan-core-global-search-widget", inputs: { baseUrl: "baseUrl", placeholder: "placeholder", dataSource: "dataSource" }, outputs: { search: "search", itemNavigate: "itemNavigate" }, viewQueries: [{ propertyName: "searchAutoComplete", first: true, predicate: ["searchAutoComplete"], descendants: true }], ngImport: i0, template: "<div class=\"top-menu-widget__search\">\r\n <dx-autocomplete\r\n #searchAutoComplete\r\n [placeholder]=\"placeholder | translate\"\r\n [dataSource]=\"dataSource\"\r\n valueExpr=\"menuSubTitle\"\r\n [searchExpr]=\"['menuSubTitle']\"\r\n [showClearButton]=\"false\"\r\n [showDropDownButton]=\"false\"\r\n searchMode=\"contains\"\r\n [width]=\"'100%'\"\r\n stylingMode=\"filled\"\r\n [wrapItemText]=\"true\"\r\n [searchTimeout]=\"100\"\r\n (onInput)=\"onInput($event)\"\r\n (onEnterKey)=\"onEnterKey($event)\">\r\n <div class=\"w-100\" *dxTemplate=\"let item of 'item'\">\r\n @if (hasNavigationUrl(item.menuUrl)) {\r\n <a\r\n class=\"top-menu-widget__search-item\"\r\n (click)=\"onItemSelected($event, item)\">\r\n <div class=\"top-menu-widget__search-item-title\">\r\n @if (item.iconClass === 'icon icon-tools') {\r\n <fa-icon [icon]=\"toolsIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-grid') {\r\n <fa-icon [icon]=\"gridIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-credit') {\r\n <fa-icon [icon]=\"creditIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-users') {\r\n <fa-icon [icon]=\"usersIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-clock') {\r\n <fa-icon [icon]=\"clockIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-swap') {\r\n <fa-icon [icon]=\"swapIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-medal') {\r\n <fa-icon [icon]=\"medalIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-graduation-cap') {\r\n <fa-icon [icon]=\"graduateIcon\"></fa-icon>\r\n }\r\n\r\n @if (item.isTranslatable) {\r\n {{ item.menuTitle | translate }}\r\n } @else {\r\n {{ item.menuTitle }}\r\n }\r\n </div>\r\n\r\n <div class=\"top-menu-widget__search-item-subtitle\">\r\n @if (item.isTranslatable) {\r\n {{ item.menuSubTitle | translate }}\r\n } @else {\r\n {{ item.menuSubTitle }}\r\n }\r\n </div>\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"top-menu-widget__search-item\"\r\n (click)=\"onItemSelected($event, item)\">\r\n <div class=\"top-menu-widget__search-item-title\">\r\n @if (item.iconClass === 'icon icon-tools') {\r\n <fa-icon [icon]=\"toolsIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-grid') {\r\n <fa-icon [icon]=\"gridIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-credit') {\r\n <fa-icon [icon]=\"creditIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-users') {\r\n <fa-icon [icon]=\"usersIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-clock') {\r\n <fa-icon [icon]=\"clockIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-swap') {\r\n <fa-icon [icon]=\"swapIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-medal') {\r\n <fa-icon [icon]=\"medalIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-graduation-cap') {\r\n <fa-icon [icon]=\"graduateIcon\"></fa-icon>\r\n }\r\n\r\n @if (item.isTranslatable) {\r\n {{ item.menuTitle | translate }}\r\n } @else {\r\n {{ item.menuTitle }}\r\n }\r\n </div>\r\n\r\n <div class=\"top-menu-widget__search-item-subtitle\">\r\n @if (item.isTranslatable) {\r\n {{ item.menuSubTitle | translate }}\r\n } @else {\r\n {{ item.menuSubTitle }}\r\n }\r\n </div>\r\n </button>\r\n }\r\n </div>\r\n </dx-autocomplete>\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxAutocompleteModule }, { kind: "component", type: i1$1.DxAutocompleteComponent, selector: "dx-autocomplete", inputs: ["accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxItemCount", "maxLength", "minSearchLength", "name", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxItemCountChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "directive", type: i2.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
266
+ }
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreGlobalSearchWidgetComponent, decorators: [{
268
+ type: Component,
269
+ args: [{ selector: 'bayan-core-global-search-widget', standalone: true, imports: [CommonModule, DxAutocompleteModule, FontAwesomeModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"top-menu-widget__search\">\r\n <dx-autocomplete\r\n #searchAutoComplete\r\n [placeholder]=\"placeholder | translate\"\r\n [dataSource]=\"dataSource\"\r\n valueExpr=\"menuSubTitle\"\r\n [searchExpr]=\"['menuSubTitle']\"\r\n [showClearButton]=\"false\"\r\n [showDropDownButton]=\"false\"\r\n searchMode=\"contains\"\r\n [width]=\"'100%'\"\r\n stylingMode=\"filled\"\r\n [wrapItemText]=\"true\"\r\n [searchTimeout]=\"100\"\r\n (onInput)=\"onInput($event)\"\r\n (onEnterKey)=\"onEnterKey($event)\">\r\n <div class=\"w-100\" *dxTemplate=\"let item of 'item'\">\r\n @if (hasNavigationUrl(item.menuUrl)) {\r\n <a\r\n class=\"top-menu-widget__search-item\"\r\n (click)=\"onItemSelected($event, item)\">\r\n <div class=\"top-menu-widget__search-item-title\">\r\n @if (item.iconClass === 'icon icon-tools') {\r\n <fa-icon [icon]=\"toolsIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-grid') {\r\n <fa-icon [icon]=\"gridIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-credit') {\r\n <fa-icon [icon]=\"creditIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-users') {\r\n <fa-icon [icon]=\"usersIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-clock') {\r\n <fa-icon [icon]=\"clockIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-swap') {\r\n <fa-icon [icon]=\"swapIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-medal') {\r\n <fa-icon [icon]=\"medalIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-graduation-cap') {\r\n <fa-icon [icon]=\"graduateIcon\"></fa-icon>\r\n }\r\n\r\n @if (item.isTranslatable) {\r\n {{ item.menuTitle | translate }}\r\n } @else {\r\n {{ item.menuTitle }}\r\n }\r\n </div>\r\n\r\n <div class=\"top-menu-widget__search-item-subtitle\">\r\n @if (item.isTranslatable) {\r\n {{ item.menuSubTitle | translate }}\r\n } @else {\r\n {{ item.menuSubTitle }}\r\n }\r\n </div>\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"top-menu-widget__search-item\"\r\n (click)=\"onItemSelected($event, item)\">\r\n <div class=\"top-menu-widget__search-item-title\">\r\n @if (item.iconClass === 'icon icon-tools') {\r\n <fa-icon [icon]=\"toolsIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-grid') {\r\n <fa-icon [icon]=\"gridIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-credit') {\r\n <fa-icon [icon]=\"creditIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-users') {\r\n <fa-icon [icon]=\"usersIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-clock') {\r\n <fa-icon [icon]=\"clockIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-swap') {\r\n <fa-icon [icon]=\"swapIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-medal') {\r\n <fa-icon [icon]=\"medalIcon\"></fa-icon>\r\n }\r\n @if (item.iconClass === 'icon icon-graduation-cap') {\r\n <fa-icon [icon]=\"graduateIcon\"></fa-icon>\r\n }\r\n\r\n @if (item.isTranslatable) {\r\n {{ item.menuTitle | translate }}\r\n } @else {\r\n {{ item.menuTitle }}\r\n }\r\n </div>\r\n\r\n <div class=\"top-menu-widget__search-item-subtitle\">\r\n @if (item.isTranslatable) {\r\n {{ item.menuSubTitle | translate }}\r\n } @else {\r\n {{ item.menuSubTitle }}\r\n }\r\n </div>\r\n </button>\r\n }\r\n </div>\r\n </dx-autocomplete>\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
270
+ }], propDecorators: { searchAutoComplete: [{
271
+ type: ViewChild,
272
+ args: ['searchAutoComplete']
273
+ }], baseUrl: [{
274
+ type: Input
275
+ }], placeholder: [{
276
+ type: Input
277
+ }], dataSource: [{
278
+ type: Input
279
+ }], search: [{
280
+ type: Output
281
+ }], itemNavigate: [{
282
+ type: Output
283
+ }] } });
284
+
285
+ class BayanCoreItemWidgetComponent {
286
+ elementRef;
287
+ document = inject(DOCUMENT);
288
+ router = inject(Router);
289
+ baseUrl = '';
290
+ item;
291
+ itemClick = new EventEmitter();
292
+ open = signal(false);
293
+ constructor(elementRef) {
294
+ this.elementRef = elementRef;
295
+ }
296
+ onDocumentClick(event) {
297
+ const target = event.target;
298
+ if (target && !this.elementRef.nativeElement.contains(target)) {
299
+ this.open.set(false);
300
+ }
301
+ }
302
+ hasChildren() {
303
+ return (this.item.children ?? []).length > 0;
304
+ }
305
+ hasNavigationUrl(url) {
306
+ return !!resolveUrl(this.baseUrl, url);
307
+ }
308
+ onItemActivated(event) {
309
+ event.preventDefault();
310
+ if (this.hasChildren()) {
311
+ event.stopPropagation();
312
+ this.open.update((value) => !value);
313
+ return;
314
+ }
315
+ this.itemClick.emit(this.item);
316
+ this.navigateToUrl(this.item.menuUrl);
317
+ }
318
+ onChildItemClick(item) {
319
+ this.open.set(false);
320
+ this.itemClick.emit(item);
321
+ }
322
+ navigateToUrl(url) {
323
+ if (!url) {
324
+ return;
325
+ }
326
+ const resolvedUrl = resolveUrl(this.baseUrl, url);
327
+ if (!resolvedUrl) {
328
+ return;
329
+ }
330
+ if (isExternalNavigation(this.baseUrl, url)) {
331
+ this.document.location.assign(resolvedUrl);
332
+ return;
333
+ }
334
+ void this.router.navigateByUrl(resolvedUrl);
335
+ }
336
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreItemWidgetComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
337
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreItemWidgetComponent, isStandalone: true, selector: "bayan-core-item-widget", inputs: { baseUrl: "baseUrl", item: "item" }, outputs: { itemClick: "itemClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "@if (!hasChildren()) {\r\n <li class=\"nav-item\">\r\n @if (hasNavigationUrl(item.menuUrl)) {\r\n <a\r\n class=\"nav-link\"\r\n (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }}\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"nav-link\"\r\n (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }}\r\n </button>\r\n }\r\n </li>\r\n}\r\n\r\n@if (hasChildren()) {\r\n <li class=\"nav-item dropdown\" [class.open]=\"open()\">\r\n <button type=\"button\" class=\"nav-link dropdown-toggle\" (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }} <span class=\"caret\"></span>\r\n </button>\r\n\r\n @if (open()) {\r\n <ul class=\"dropdown-menu menu-dropdown-panel\">\r\n @for (child of item.children; track child.id ?? child.menuName) {\r\n <bayan-core-item-widget\r\n [baseUrl]=\"baseUrl\"\r\n [item]=\"child\"\r\n (itemClick)=\"onChildItemClick($event)\">\r\n </bayan-core-item-widget>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "component", type: BayanCoreItemWidgetComponent, selector: "bayan-core-item-widget", inputs: ["baseUrl", "item"], outputs: ["itemClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
338
+ }
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreItemWidgetComponent, decorators: [{
340
+ type: Component,
341
+ args: [{ selector: 'bayan-core-item-widget', standalone: true, imports: [CommonModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hasChildren()) {\r\n <li class=\"nav-item\">\r\n @if (hasNavigationUrl(item.menuUrl)) {\r\n <a\r\n class=\"nav-link\"\r\n (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }}\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"nav-link\"\r\n (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }}\r\n </button>\r\n }\r\n </li>\r\n}\r\n\r\n@if (hasChildren()) {\r\n <li class=\"nav-item dropdown\" [class.open]=\"open()\">\r\n <button type=\"button\" class=\"nav-link dropdown-toggle\" (click)=\"onItemActivated($event)\">\r\n {{ item.menuName | translate }} <span class=\"caret\"></span>\r\n </button>\r\n\r\n @if (open()) {\r\n <ul class=\"dropdown-menu menu-dropdown-panel\">\r\n @for (child of item.children; track child.id ?? child.menuName) {\r\n <bayan-core-item-widget\r\n [baseUrl]=\"baseUrl\"\r\n [item]=\"child\"\r\n (itemClick)=\"onChildItemClick($event)\">\r\n </bayan-core-item-widget>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
342
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { baseUrl: [{
343
+ type: Input
344
+ }], item: [{
345
+ type: Input,
346
+ args: [{ required: true }]
347
+ }], itemClick: [{
348
+ type: Output
349
+ }], onDocumentClick: [{
350
+ type: HostListener,
351
+ args: ['document:click', ['$event']]
352
+ }] } });
353
+
354
+ class BayanCoreTopMenuService {
355
+ http = inject(HttpClient);
356
+ unwrap(obs) {
357
+ return obs.pipe(map((env) => {
358
+ if (!env.ResponseData) {
359
+ throw new Error('No data received');
360
+ }
361
+ return env.ResponseData;
362
+ }), catchError((error) => throwError(() => error)));
363
+ }
364
+ getBaseUrl(baseUrl) {
365
+ return `${baseUrl.replace(/\/$/, '')}/api/app-frame`;
366
+ }
367
+ getMicroserviceMenusByProperty(baseUrl, propertyId, systemModule) {
368
+ const params = new HttpParams()
369
+ .set('PropertyId', propertyId)
370
+ .set('SystemModule', systemModule);
371
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/left-menu`, { params }));
372
+ }
373
+ getMicroserviceTopMenusShortcut(baseUrl, propertyId, systemModule) {
374
+ const params = new HttpParams()
375
+ .set('PropertyId', propertyId)
376
+ .set('SystemModule', systemModule);
377
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/top-shortcuts`, {
378
+ params,
379
+ }));
380
+ }
381
+ getGlobalSearchMenus(baseUrl, propertyId) {
382
+ let params = new HttpParams();
383
+ if (propertyId != null) {
384
+ params = params.set('PropertyId', propertyId);
385
+ }
386
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/global-search-menu`, { params }));
387
+ }
388
+ getUserPanel(baseUrl) {
389
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/user-panel`));
390
+ }
391
+ switchProperty(baseUrl, request) {
392
+ return this.unwrap(this.http.post(`${this.getBaseUrl(baseUrl)}/switch-property`, request));
393
+ }
394
+ getPreferences(baseUrl) {
395
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/preferences`));
396
+ }
397
+ setDisplayAlternateNames(baseUrl, request) {
398
+ return this.http.post(`${this.getBaseUrl(baseUrl)}/preferences/alternate-names`, request);
399
+ }
400
+ setEmployeeNamesMode(baseUrl, request) {
401
+ return this.http.post(`${this.getBaseUrl(baseUrl)}/preferences/employee-names-mode`, request);
402
+ }
403
+ getModuleBlockState(baseUrl, systemModule) {
404
+ const params = new HttpParams().set('SystemModule', systemModule);
405
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/module-block-state`, {
406
+ params,
407
+ }));
408
+ }
409
+ blockModule(baseUrl, request) {
410
+ return this.http.post(`${this.getBaseUrl(baseUrl)}/block-module`, request);
411
+ }
412
+ releaseModule(baseUrl, request) {
413
+ return this.http.post(`${this.getBaseUrl(baseUrl)}/release-module`, request);
414
+ }
415
+ getNotificationsSummary(baseUrl) {
416
+ return this.unwrap(this.http.get(`${this.getBaseUrl(baseUrl)}/notifications-summary`));
417
+ }
418
+ changePassword(baseUrl, request) {
419
+ return this.http.post(`${this.getBaseUrl(baseUrl)}/change-password`, request);
420
+ }
421
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreTopMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
422
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreTopMenuService, providedIn: 'root' });
423
+ }
424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreTopMenuService, decorators: [{
425
+ type: Injectable,
426
+ args: [{
427
+ providedIn: 'root',
428
+ }]
429
+ }] });
430
+
431
+ class BayanCoreNotificationsWidgetComponent {
432
+ document = inject(DOCUMENT);
433
+ router = inject(Router);
434
+ topMenuService = inject(BayanCoreTopMenuService);
435
+ baseUrl = '';
436
+ title = 'Notifications';
437
+ wrapperClass = 'notifications-icon-wrap menu-dropdown-host';
438
+ linkClass = 'menu-icon-btn cursor-pointer top-menu-widget__notification-btn';
439
+ iconClass = 'fs-6';
440
+ badgeClass = 'top-menu-widget__notification-badge';
441
+ bellIcon = faBell;
442
+ notificationsSummary = signal({
443
+ NotificationsUrl: '',
444
+ TotalNotificationsCount: 0,
445
+ });
446
+ ngOnInit() {
447
+ this.loadNotificationsSummary();
448
+ }
449
+ ngOnChanges(changes) {
450
+ if (changes['baseUrl'] && !changes['baseUrl'].firstChange) {
451
+ this.loadNotificationsSummary();
452
+ }
453
+ }
454
+ onNotificationClick(event) {
455
+ event?.preventDefault();
456
+ const rawNotificationUrl = this.notificationsSummary().NotificationsUrl;
457
+ const notificationUrl = resolveUrl(this.baseUrl, rawNotificationUrl);
458
+ if (notificationUrl) {
459
+ if (rawNotificationUrl && isExternalNavigation(this.baseUrl, rawNotificationUrl)) {
460
+ this.document.location.assign(notificationUrl);
461
+ }
462
+ else {
463
+ void this.router.navigateByUrl(notificationUrl);
464
+ }
465
+ }
466
+ }
467
+ loadNotificationsSummary() {
468
+ if (!this.baseUrl) {
469
+ this.resetNotificationsData();
470
+ return;
471
+ }
472
+ this.topMenuService.getNotificationsSummary(this.baseUrl).subscribe({
473
+ next: (summary) => {
474
+ this.notificationsSummary.set({
475
+ NotificationsUrl: summary.NotificationsUrl,
476
+ TotalNotificationsCount: summary.TotalNotificationsCount,
477
+ });
478
+ },
479
+ error: () => {
480
+ this.resetNotificationsData();
481
+ },
482
+ });
483
+ }
484
+ resetNotificationsData() {
485
+ this.notificationsSummary.set({
486
+ NotificationsUrl: '',
487
+ TotalNotificationsCount: 0,
488
+ });
489
+ }
490
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreNotificationsWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
491
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreNotificationsWidgetComponent, isStandalone: true, selector: "bayan-core-notifications-widget", inputs: { baseUrl: "baseUrl", title: "title", wrapperClass: "wrapperClass", linkClass: "linkClass", iconClass: "iconClass", badgeClass: "badgeClass" }, usesOnChanges: true, ngImport: i0, template: "<div [class]=\"wrapperClass\">\r\n <a [class]=\"linkClass\"\r\n [title]=\"title | translate\"\r\n (click)=\"onNotificationClick($event)\">\r\n <fa-icon [class]=\"iconClass\" [icon]=\"bellIcon\"></fa-icon>\r\n @if ((notificationsSummary().TotalNotificationsCount || 0) > 0) {\r\n <span [class]=\"badgeClass\">{{ notificationsSummary().TotalNotificationsCount }}</span>\r\n }\r\n </a>\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
492
+ }
493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreNotificationsWidgetComponent, decorators: [{
494
+ type: Component,
495
+ args: [{ selector: 'bayan-core-notifications-widget', standalone: true, imports: [CommonModule, FontAwesomeModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"wrapperClass\">\r\n <a [class]=\"linkClass\"\r\n [title]=\"title | translate\"\r\n (click)=\"onNotificationClick($event)\">\r\n <fa-icon [class]=\"iconClass\" [icon]=\"bellIcon\"></fa-icon>\r\n @if ((notificationsSummary().TotalNotificationsCount || 0) > 0) {\r\n <span [class]=\"badgeClass\">{{ notificationsSummary().TotalNotificationsCount }}</span>\r\n }\r\n </a>\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
496
+ }], propDecorators: { baseUrl: [{
497
+ type: Input
498
+ }], title: [{
499
+ type: Input
500
+ }], wrapperClass: [{
501
+ type: Input
502
+ }], linkClass: [{
503
+ type: Input
504
+ }], iconClass: [{
505
+ type: Input
506
+ }], badgeClass: [{
507
+ type: Input
508
+ }] } });
509
+
510
+ class BayanCoreSettingsWidgetComponent {
511
+ elementRef;
512
+ useAlternateNames = false;
513
+ displayAlternateNames = false;
514
+ hrBlocked = false;
515
+ hrCanBlock = false;
516
+ tkBlocked = false;
517
+ tkCanBlock = false;
518
+ nameModeItems = [];
519
+ settingsEnabled = true;
520
+ alternateNamesChange = new EventEmitter();
521
+ nameModeChange = new EventEmitter();
522
+ blockHrClick = new EventEmitter();
523
+ releaseHrClick = new EventEmitter();
524
+ blockTkClick = new EventEmitter();
525
+ releaseTkClick = new EventEmitter();
526
+ changePasswordClick = new EventEmitter();
527
+ openAboutClick = new EventEmitter();
528
+ checkIcon = faCheck;
529
+ cogIcon = faCog;
530
+ infoIcon = faInfoCircle;
531
+ dropdownOpen = signal(false);
532
+ constructor(elementRef) {
533
+ this.elementRef = elementRef;
534
+ }
535
+ onDocumentClick(event) {
536
+ const target = event.target;
537
+ if (target && !this.elementRef.nativeElement.contains(target)) {
538
+ this.dropdownOpen.set(false);
539
+ }
540
+ }
541
+ toggleDropdown(event) {
542
+ event.preventDefault();
543
+ this.dropdownOpen.update((value) => !value);
544
+ }
545
+ onAlternateNamesClick(event) {
546
+ event.preventDefault();
547
+ if (!this.settingsEnabled) {
548
+ return;
549
+ }
550
+ this.alternateNamesChange.emit();
551
+ }
552
+ onNameModeClick(index, event) {
553
+ event.preventDefault();
554
+ if (!this.settingsEnabled) {
555
+ return;
556
+ }
557
+ this.dropdownOpen.set(false);
558
+ this.nameModeChange.emit(index);
559
+ }
560
+ emitAndClose(event, emitter) {
561
+ event.preventDefault();
562
+ this.dropdownOpen.set(false);
563
+ emitter.emit();
564
+ }
565
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreSettingsWidgetComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
566
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreSettingsWidgetComponent, isStandalone: true, selector: "bayan-core-settings-widget", inputs: { useAlternateNames: "useAlternateNames", displayAlternateNames: "displayAlternateNames", hrBlocked: "hrBlocked", hrCanBlock: "hrCanBlock", tkBlocked: "tkBlocked", tkCanBlock: "tkCanBlock", nameModeItems: "nameModeItems", settingsEnabled: "settingsEnabled" }, outputs: { alternateNamesChange: "alternateNamesChange", nameModeChange: "nameModeChange", blockHrClick: "blockHrClick", releaseHrClick: "releaseHrClick", blockTkClick: "blockTkClick", releaseTkClick: "releaseTkClick", changePasswordClick: "changePasswordClick", openAboutClick: "openAboutClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"dropdown menu-dropdown-host\" [class.open]=\"dropdownOpen()\">\r\n <button type=\"button\" class=\"settings-toggle menu-icon-btn\" (click)=\"toggleDropdown($event)\" [title]=\"'Settings' | translate\">\r\n <fa-icon [icon]=\"cogIcon\" class=\"fs-6\"></fa-icon>\r\n </button>\r\n\r\n @if (dropdownOpen()) {\r\n <ul class=\"settings-menu menu-dropdown-panel\">\r\n @if (useAlternateNames) {\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" [disabled]=\"!settingsEnabled\" [class.disabled]=\"!settingsEnabled\" (click)=\"onAlternateNamesClick($event)\">\r\n @if (displayAlternateNames) {\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n } @else {\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n }\r\n {{ 'DisplayAlternateNames' | translate }}\r\n </button>\r\n </li>\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n @if (hrCanBlock) {\r\n <li>\r\n @if (hrBlocked) {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, releaseHrClick)\">\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'ReleaseHR' | translate }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, blockHrClick)\">\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'BlockHR' | translate }}\r\n </button>\r\n }\r\n </li>\r\n }\r\n\r\n @if (tkCanBlock) {\r\n <li>\r\n @if (tkBlocked) {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, releaseTkClick)\">\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'ReleaseTK' | translate }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, blockTkClick)\">\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'BlockTK' | translate }}\r\n </button>\r\n }\r\n </li>\r\n }\r\n\r\n @if (hrCanBlock || tkCanBlock) {\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n @if (nameModeItems.length > 0) {\r\n <li>\r\n <span class=\"menu-section-label\">{{ 'EmployeeNamesMode' | translate }}</span>\r\n </li>\r\n\r\n @for (item of nameModeItems; track item.id; let index = $index) {\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" [disabled]=\"!settingsEnabled\" [class.disabled]=\"!settingsEnabled\" (click)=\"onNameModeClick(index, $event)\">\r\n @if (item.selected) {\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n } @else {\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n }\r\n {{ item.text }}\r\n </button>\r\n </li>\r\n }\r\n\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, changePasswordClick)\">\r\n <span class=\"menu-indicator\"></span>\r\n {{ 'ChangePassword' | translate }}\r\n </button>\r\n </li>\r\n\r\n <li><hr class=\"dropdown-divider\"></li>\r\n\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, openAboutClick)\">\r\n <fa-icon class=\"menu-indicator\" [icon]=\"infoIcon\"></fa-icon>\r\n {{ 'About' | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n }\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
567
+ }
568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreSettingsWidgetComponent, decorators: [{
569
+ type: Component,
570
+ args: [{ selector: 'bayan-core-settings-widget', standalone: true, imports: [CommonModule, FontAwesomeModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropdown menu-dropdown-host\" [class.open]=\"dropdownOpen()\">\r\n <button type=\"button\" class=\"settings-toggle menu-icon-btn\" (click)=\"toggleDropdown($event)\" [title]=\"'Settings' | translate\">\r\n <fa-icon [icon]=\"cogIcon\" class=\"fs-6\"></fa-icon>\r\n </button>\r\n\r\n @if (dropdownOpen()) {\r\n <ul class=\"settings-menu menu-dropdown-panel\">\r\n @if (useAlternateNames) {\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" [disabled]=\"!settingsEnabled\" [class.disabled]=\"!settingsEnabled\" (click)=\"onAlternateNamesClick($event)\">\r\n @if (displayAlternateNames) {\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n } @else {\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n }\r\n {{ 'DisplayAlternateNames' | translate }}\r\n </button>\r\n </li>\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n @if (hrCanBlock) {\r\n <li>\r\n @if (hrBlocked) {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, releaseHrClick)\">\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'ReleaseHR' | translate }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, blockHrClick)\">\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'BlockHR' | translate }}\r\n </button>\r\n }\r\n </li>\r\n }\r\n\r\n @if (tkCanBlock) {\r\n <li>\r\n @if (tkBlocked) {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, releaseTkClick)\">\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'ReleaseTK' | translate }}\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, blockTkClick)\">\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n {{ 'BlockTK' | translate }}\r\n </button>\r\n }\r\n </li>\r\n }\r\n\r\n @if (hrCanBlock || tkCanBlock) {\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n @if (nameModeItems.length > 0) {\r\n <li>\r\n <span class=\"menu-section-label\">{{ 'EmployeeNamesMode' | translate }}</span>\r\n </li>\r\n\r\n @for (item of nameModeItems; track item.id; let index = $index) {\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" [disabled]=\"!settingsEnabled\" [class.disabled]=\"!settingsEnabled\" (click)=\"onNameModeClick(index, $event)\">\r\n @if (item.selected) {\r\n <fa-icon class=\"menu-indicator menu-indicator-active\" [icon]=\"checkIcon\"></fa-icon>\r\n } @else {\r\n <fa-icon class=\"menu-indicator invisible\" [icon]=\"checkIcon\"></fa-icon>\r\n }\r\n {{ item.text }}\r\n </button>\r\n </li>\r\n }\r\n\r\n <li><hr class=\"dropdown-divider\"></li>\r\n }\r\n\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, changePasswordClick)\">\r\n <span class=\"menu-indicator\"></span>\r\n {{ 'ChangePassword' | translate }}\r\n </button>\r\n </li>\r\n\r\n <li><hr class=\"dropdown-divider\"></li>\r\n\r\n <li>\r\n <button type=\"button\" class=\"header-dropdown-item menu-row\" (click)=\"emitAndClose($event, openAboutClick)\">\r\n <fa-icon class=\"menu-indicator\" [icon]=\"infoIcon\"></fa-icon>\r\n {{ 'About' | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n }\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
571
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { useAlternateNames: [{
572
+ type: Input
573
+ }], displayAlternateNames: [{
574
+ type: Input
575
+ }], hrBlocked: [{
576
+ type: Input
577
+ }], hrCanBlock: [{
578
+ type: Input
579
+ }], tkBlocked: [{
580
+ type: Input
581
+ }], tkCanBlock: [{
582
+ type: Input
583
+ }], nameModeItems: [{
584
+ type: Input
585
+ }], settingsEnabled: [{
586
+ type: Input
587
+ }], alternateNamesChange: [{
588
+ type: Output
589
+ }], nameModeChange: [{
590
+ type: Output
591
+ }], blockHrClick: [{
592
+ type: Output
593
+ }], releaseHrClick: [{
594
+ type: Output
595
+ }], blockTkClick: [{
596
+ type: Output
597
+ }], releaseTkClick: [{
598
+ type: Output
599
+ }], changePasswordClick: [{
600
+ type: Output
601
+ }], openAboutClick: [{
602
+ type: Output
603
+ }], onDocumentClick: [{
604
+ type: HostListener,
605
+ args: ['document:click', ['$event']]
606
+ }] } });
607
+
608
+ class BayanCoreUserPanelWidgetComponent {
609
+ elementRef;
610
+ baseUrl = '';
611
+ set userPanel(value) {
612
+ this.userPanelState.set(value);
613
+ }
614
+ isSsoLogin = false;
615
+ propertyChange = new EventEmitter();
616
+ signOutClick = new EventEmitter();
617
+ signOutIcon = faPersonRunning;
618
+ dropdownOpen = signal(false);
619
+ userPanelState = signal(null);
620
+ badge = computed(() => ({
621
+ EmployeePhotoKey: this.userPanelState()?.photoPath ?? null,
622
+ EmployeePhotoFailed: false,
623
+ EmployeeNameInitials: this.userPanelState()?.nameInitials ?? '',
624
+ }));
625
+ constructor(elementRef) {
626
+ this.elementRef = elementRef;
627
+ }
628
+ onDocumentClick(event) {
629
+ const target = event.target;
630
+ if (target && !this.elementRef.nativeElement.contains(target)) {
631
+ this.dropdownOpen.set(false);
632
+ }
633
+ }
634
+ displayName() {
635
+ return this.userPanelState()?.userDisplayName ?? '';
636
+ }
637
+ activePropertyName() {
638
+ return this.userPanelState()?.activePropertyName ?? '';
639
+ }
640
+ activePropertyId() {
641
+ return this.userPanelState()?.activePropertyId ?? null;
642
+ }
643
+ propertyList() {
644
+ return this.userPanelState()?.properties ?? [];
645
+ }
646
+ showSignOut() {
647
+ return !(this.userPanelState()?.isSsoLogin ?? this.isSsoLogin);
648
+ }
649
+ toggleDropdown(event) {
650
+ event.preventDefault();
651
+ this.dropdownOpen.update((value) => !value);
652
+ }
653
+ selectProperty(event, property) {
654
+ event.preventDefault();
655
+ if (property.propertyId === this.activePropertyId()) {
656
+ this.dropdownOpen.set(false);
657
+ return;
658
+ }
659
+ this.dropdownOpen.set(false);
660
+ this.propertyChange.emit(property);
661
+ }
662
+ signOut(event) {
663
+ event.preventDefault();
664
+ this.dropdownOpen.set(false);
665
+ this.signOutClick.emit();
666
+ }
667
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreUserPanelWidgetComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
668
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreUserPanelWidgetComponent, isStandalone: true, selector: "bayan-core-user-panel-widget", inputs: { baseUrl: "baseUrl", userPanel: "userPanel", isSsoLogin: "isSsoLogin" }, outputs: { propertyChange: "propertyChange", signOutClick: "signOutClick" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"menu-dropdown-host\" [class.open]=\"dropdownOpen()\">\r\n <button type=\"button\" class=\"employee-toggle\" (click)=\"toggleDropdown($event)\">\r\n <bayan-employee-badge [badge]=\"badge()\" width=\"34px\" height=\"34px\"></bayan-employee-badge>\r\n\r\n <div class=\"employee-info\">\r\n <span class=\"user-name\">{{ displayName() }}</span>\r\n\r\n @if (activePropertyName()) {\r\n <span class=\"property-name\">{{ activePropertyName() }}</span>\r\n }\r\n </div>\r\n\r\n <span class=\"employee-caret\">&#9660;</span>\r\n </button>\r\n\r\n @if (dropdownOpen()) {\r\n <ul class=\"employee-menu menu-dropdown-panel\">\r\n @if (propertyList().length > 0) {\r\n <li class=\"menu-section-label\">{{ 'Properties' | translate }}</li>\r\n\r\n @for (property of propertyList(); track property.propertyId) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n class=\"menu-item\"\r\n [class.menu-item-active]=\"property.propertyId === activePropertyId()\"\r\n (click)=\"selectProperty($event, property)\">\r\n @if (property.propertyId === activePropertyId()) {\r\n <span class=\"menu-indicator\">&#9658;</span>\r\n } @else {\r\n <span class=\"menu-indicator invisible\"></span>\r\n }\r\n\r\n {{ property.propertyName }}\r\n </button>\r\n </li>\r\n }\r\n\r\n <li><hr class=\"menu-divider\"></li>\r\n }\r\n\r\n @if (showSignOut()) {\r\n <li>\r\n <button type=\"button\" class=\"menu-item menu-item-signout\" (click)=\"signOut($event)\">\r\n <fa-icon class=\"mx-2\" [icon]=\"signOutIcon\"></fa-icon>{{ 'SignOut' | translate }}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: BayanEmployeeBadgeComponent, selector: "bayan-employee-badge", inputs: ["badge", "width", "height", "imageClass", "badgeClass"], outputs: ["employeePhotoError"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
669
+ }
670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreUserPanelWidgetComponent, decorators: [{
671
+ type: Component,
672
+ args: [{ selector: 'bayan-core-user-panel-widget', standalone: true, imports: [CommonModule, FontAwesomeModule, BayanEmployeeBadgeComponent, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"menu-dropdown-host\" [class.open]=\"dropdownOpen()\">\r\n <button type=\"button\" class=\"employee-toggle\" (click)=\"toggleDropdown($event)\">\r\n <bayan-employee-badge [badge]=\"badge()\" width=\"34px\" height=\"34px\"></bayan-employee-badge>\r\n\r\n <div class=\"employee-info\">\r\n <span class=\"user-name\">{{ displayName() }}</span>\r\n\r\n @if (activePropertyName()) {\r\n <span class=\"property-name\">{{ activePropertyName() }}</span>\r\n }\r\n </div>\r\n\r\n <span class=\"employee-caret\">&#9660;</span>\r\n </button>\r\n\r\n @if (dropdownOpen()) {\r\n <ul class=\"employee-menu menu-dropdown-panel\">\r\n @if (propertyList().length > 0) {\r\n <li class=\"menu-section-label\">{{ 'Properties' | translate }}</li>\r\n\r\n @for (property of propertyList(); track property.propertyId) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n class=\"menu-item\"\r\n [class.menu-item-active]=\"property.propertyId === activePropertyId()\"\r\n (click)=\"selectProperty($event, property)\">\r\n @if (property.propertyId === activePropertyId()) {\r\n <span class=\"menu-indicator\">&#9658;</span>\r\n } @else {\r\n <span class=\"menu-indicator invisible\"></span>\r\n }\r\n\r\n {{ property.propertyName }}\r\n </button>\r\n </li>\r\n }\r\n\r\n <li><hr class=\"menu-divider\"></li>\r\n }\r\n\r\n @if (showSignOut()) {\r\n <li>\r\n <button type=\"button\" class=\"menu-item menu-item-signout\" (click)=\"signOut($event)\">\r\n <fa-icon class=\"mx-2\" [icon]=\"signOutIcon\"></fa-icon>{{ 'SignOut' | translate }}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n</div>\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
673
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { baseUrl: [{
674
+ type: Input
675
+ }], userPanel: [{
676
+ type: Input
677
+ }], isSsoLogin: [{
678
+ type: Input
679
+ }], propertyChange: [{
680
+ type: Output
681
+ }], signOutClick: [{
682
+ type: Output
683
+ }], onDocumentClick: [{
684
+ type: HostListener,
685
+ args: ['document:click', ['$event']]
686
+ }] } });
687
+
688
+ class BayanCoreTopMenuWidgetComponent {
689
+ document = inject(DOCUMENT);
690
+ router = inject(Router);
691
+ baseUrl = '';
692
+ sidebarCollapsed = false;
693
+ homeUrl = null;
694
+ logoUrl = 'https://cdn-dev.skysoftware.cloud/bayan/images/logo-enterprise-dark.png';
695
+ collapsedLogoUrl = 'https://cdn-dev.skysoftware.cloud/bayan/images/logo-collapsed.png';
696
+ logoClick = new EventEmitter();
697
+ searchPlaceholder = 'TopMenu.SearchPlaceholder';
698
+ menuItems = [];
699
+ searchItems = [];
700
+ userPanel = null;
701
+ isSsoLogin = false;
702
+ useAlternateNames = false;
703
+ displayAlternateNames = false;
704
+ hrBlocked = false;
705
+ hrCanBlock = false;
706
+ tkBlocked = false;
707
+ tkCanBlock = false;
708
+ nameModeItems = [];
709
+ settingsEnabled = true;
710
+ useInternalDialogs = false;
711
+ changePasswordLoading = false;
712
+ changePasswordDialog = {
713
+ title: 'ChangePassword',
714
+ currentPasswordLabel: 'CurrentPassword',
715
+ newPasswordLabel: 'NewPassword',
716
+ confirmNewPasswordLabel: 'ConfirmPassword',
717
+ primaryButtonText: 'Change',
718
+ };
719
+ aboutDialog = {
720
+ title: 'Sky Bayan Human Resources Management',
721
+ logoUrl: '',
722
+ version: '',
723
+ versionLabel: 'Version',
724
+ copyright: `Copyright 2026, Sky Software Co LLC All Rights Reserved
725
+ Sky Bayan and Sky Bayan Logo are registered trademarks of Sky Software`,
726
+ statusLabel: 'SkyBayanUpToDate',
727
+ licenseButtonLabel: 'LicenseInformation',
728
+ releaseNotesButtonLabel: 'ReleaseNotes',
729
+ supportButtonLabel: 'TechnicalSupport',
730
+ closeButtonLabel: 'Close',
731
+ };
732
+ showGlobalSearch = false;
733
+ showUserPanel = false;
734
+ showSettings = false;
735
+ showNotifications = true;
736
+ notificationsTitle = 'Notifications';
737
+ showHelp = true;
738
+ helpTitle = 'Help';
739
+ helpUrl = null;
740
+ helpIcon = faQuestionCircle;
741
+ helpAnchorClass = 'menu-icon-btn top-menu-widget__help-link';
742
+ helpUrlTarget = '_blank';
743
+ helpClick = new EventEmitter();
744
+ menuItemClick = new EventEmitter();
745
+ searchSubmit = new EventEmitter();
746
+ searchItemNavigate = new EventEmitter();
747
+ propertyChange = new EventEmitter();
748
+ signOutClick = new EventEmitter();
749
+ alternateNamesChange = new EventEmitter();
750
+ nameModeChange = new EventEmitter();
751
+ blockHrClick = new EventEmitter();
752
+ releaseHrClick = new EventEmitter();
753
+ blockTkClick = new EventEmitter();
754
+ releaseTkClick = new EventEmitter();
755
+ changePasswordClick = new EventEmitter();
756
+ openAboutClick = new EventEmitter();
757
+ aboutLicenseClick = new EventEmitter();
758
+ aboutReleaseNotesClick = new EventEmitter();
759
+ aboutSupportClick = new EventEmitter();
760
+ submitPasswordChange = new EventEmitter();
761
+ aboutVisible = signal(false);
762
+ changePasswordVisible = signal(false);
763
+ hasNavigationUrl(url) {
764
+ return !!resolveUrl(this.baseUrl, url);
765
+ }
766
+ getLogoSrc() {
767
+ if (this.sidebarCollapsed) {
768
+ return this.collapsedLogoUrl || null;
769
+ }
770
+ return this.logoUrl || null;
771
+ }
772
+ onLogoClicked(event) {
773
+ event?.preventDefault();
774
+ this.logoClick.emit();
775
+ this.navigateToUrl(this.homeUrl);
776
+ }
777
+ onHelpClicked(event) {
778
+ event?.preventDefault();
779
+ this.helpClick.emit();
780
+ this.navigateToUrl(this.helpUrl);
781
+ }
782
+ onChangePasswordRequested() {
783
+ this.changePasswordClick.emit();
784
+ if (this.useInternalDialogs) {
785
+ this.changePasswordVisible.set(true);
786
+ }
787
+ }
788
+ onAboutRequested() {
789
+ this.openAboutClick.emit();
790
+ if (this.useInternalDialogs) {
791
+ this.aboutVisible.set(true);
792
+ }
793
+ }
794
+ navigateToUrl(url) {
795
+ if (!url) {
796
+ return;
797
+ }
798
+ const resolvedUrl = resolveUrl(this.baseUrl, url);
799
+ if (!resolvedUrl) {
800
+ return;
801
+ }
802
+ if (isExternalNavigation(this.baseUrl, url)) {
803
+ this.document.location.assign(resolvedUrl);
804
+ return;
805
+ }
806
+ void this.router.navigateByUrl(resolvedUrl);
807
+ }
808
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreTopMenuWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
809
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: BayanCoreTopMenuWidgetComponent, isStandalone: true, selector: "bayan-core-top-menu-widget", inputs: { baseUrl: "baseUrl", sidebarCollapsed: "sidebarCollapsed", homeUrl: "homeUrl", logoUrl: "logoUrl", collapsedLogoUrl: "collapsedLogoUrl", searchPlaceholder: "searchPlaceholder", menuItems: "menuItems", searchItems: "searchItems", userPanel: "userPanel", isSsoLogin: "isSsoLogin", useAlternateNames: "useAlternateNames", displayAlternateNames: "displayAlternateNames", hrBlocked: "hrBlocked", hrCanBlock: "hrCanBlock", tkBlocked: "tkBlocked", tkCanBlock: "tkCanBlock", nameModeItems: "nameModeItems", settingsEnabled: "settingsEnabled", useInternalDialogs: "useInternalDialogs", changePasswordLoading: "changePasswordLoading", changePasswordDialog: "changePasswordDialog", aboutDialog: "aboutDialog", showGlobalSearch: "showGlobalSearch", showUserPanel: "showUserPanel", showSettings: "showSettings", showNotifications: "showNotifications", notificationsTitle: "notificationsTitle", showHelp: "showHelp", helpTitle: "helpTitle", helpUrl: "helpUrl", helpIcon: "helpIcon", helpAnchorClass: "helpAnchorClass", helpUrlTarget: "helpUrlTarget" }, outputs: { logoClick: "logoClick", helpClick: "helpClick", menuItemClick: "menuItemClick", searchSubmit: "searchSubmit", searchItemNavigate: "searchItemNavigate", propertyChange: "propertyChange", signOutClick: "signOutClick", alternateNamesChange: "alternateNamesChange", nameModeChange: "nameModeChange", blockHrClick: "blockHrClick", releaseHrClick: "releaseHrClick", blockTkClick: "blockTkClick", releaseTkClick: "releaseTkClick", changePasswordClick: "changePasswordClick", openAboutClick: "openAboutClick", aboutLicenseClick: "aboutLicenseClick", aboutReleaseNotesClick: "aboutReleaseNotesClick", aboutSupportClick: "aboutSupportClick", submitPasswordChange: "submitPasswordChange" }, ngImport: i0, template: "<header class=\"top-menu-widget__header shadow-sm w-100 sticky-top\">\r\n <dx-toolbar class=\"top-menu-widget__toolbar px-4\">\r\n <dxi-item location=\"before\">\r\n <div *dxTemplate>\r\n <a\r\n class=\"top-menu-widget__brand\"\r\n [class.top-menu-widget__brand--collapsed]=\"sidebarCollapsed\"\r\n (click)=\"onLogoClicked($event)\">\r\n <img\r\n [src]=\"getLogoSrc()\"\r\n alt=\"\"\r\n class=\"top-menu-widget__logo\"\r\n [class.top-menu-widget__logo--collapsed]=\"sidebarCollapsed && !!collapsedLogoUrl\">\r\n </a>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item location=\"before\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <ul class=\"top-menu-widget__nav\">\r\n @for (item of menuItems; track item.id ?? item.menuName) {\r\n <bayan-core-item-widget [item]=\"item\" [baseUrl]=\"baseUrl\" (itemClick)=\"menuItemClick.emit($event)\"></bayan-core-item-widget>\r\n }\r\n </ul>\r\n </div>\r\n </dxi-item>\r\n\r\n @if (showGlobalSearch) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-global-search-widget\r\n [baseUrl]=\"baseUrl\"\r\n [placeholder]=\"searchPlaceholder\"\r\n [dataSource]=\"searchItems\"\r\n (search)=\"searchSubmit.emit($event)\"\r\n (itemNavigate)=\"searchItemNavigate.emit($event)\">\r\n </bayan-core-global-search-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showUserPanel) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-user-panel-widget\r\n [baseUrl]=\"baseUrl\"\r\n [userPanel]=\"userPanel\"\r\n [isSsoLogin]=\"isSsoLogin\"\r\n (propertyChange)=\"propertyChange.emit($event)\"\r\n (signOutClick)=\"signOutClick.emit()\">\r\n </bayan-core-user-panel-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showSettings) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-settings-widget\r\n [useAlternateNames]=\"useAlternateNames\"\r\n [displayAlternateNames]=\"displayAlternateNames\"\r\n [hrBlocked]=\"hrBlocked\"\r\n [hrCanBlock]=\"hrCanBlock\"\r\n [tkBlocked]=\"tkBlocked\"\r\n [tkCanBlock]=\"tkCanBlock\"\r\n [nameModeItems]=\"nameModeItems\"\r\n [settingsEnabled]=\"settingsEnabled\"\r\n (alternateNamesChange)=\"alternateNamesChange.emit()\"\r\n (nameModeChange)=\"nameModeChange.emit($event)\"\r\n (blockHrClick)=\"blockHrClick.emit()\"\r\n (releaseHrClick)=\"releaseHrClick.emit()\"\r\n (blockTkClick)=\"blockTkClick.emit()\"\r\n (releaseTkClick)=\"releaseTkClick.emit()\"\r\n (changePasswordClick)=\"onChangePasswordRequested()\"\r\n (openAboutClick)=\"onAboutRequested()\">\r\n </bayan-core-settings-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showNotifications) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-notifications-widget [baseUrl]=\"baseUrl\"\r\n [title]=\"notificationsTitle | translate\" >\r\n </bayan-core-notifications-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showHelp) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <a\r\n [class]=\"helpAnchorClass\"\r\n [title]=\"helpTitle | translate\"\r\n [target]=\"helpUrlTarget\"\r\n (click)=\"onHelpClicked($event)\">\r\n <fa-icon [icon]=\"helpIcon\" class=\"fs-6\"></fa-icon>\r\n </a>\r\n </div>\r\n </dxi-item>\r\n }\r\n </dx-toolbar>\r\n</header>\r\n\r\n@if (useInternalDialogs) {\r\n <bayan-core-about-dialog-widget\r\n [baseUrl]=\"baseUrl\"\r\n [visible]=\"aboutVisible()\"\r\n [config]=\"aboutDialog\"\r\n (visibleChange)=\"aboutVisible.set($event)\"\r\n (licenseClick)=\"aboutLicenseClick.emit()\"\r\n (releaseNotesClick)=\"aboutReleaseNotesClick.emit()\"\r\n (supportClick)=\"aboutSupportClick.emit()\">\r\n </bayan-core-about-dialog-widget>\r\n\r\n <bayan-core-change-password-widget\r\n [baseUrl]=\"baseUrl\"\r\n [visible]=\"changePasswordVisible()\"\r\n [config]=\"changePasswordDialog\"\r\n [isSubmitting]=\"changePasswordLoading\"\r\n (visibleChange)=\"changePasswordVisible.set($event)\"\r\n (submitPasswordChange)=\"submitPasswordChange.emit($event)\">\r\n </bayan-core-change-password-widget>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxToolbarModule }, { kind: "component", type: i1$1.DxToolbarComponent, selector: "dx-toolbar", inputs: ["dataSource", "disabled", "elementAttr", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemTemplate", "menuItemTemplate", "multiline", "noDataText", "rtlEnabled", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemContextMenu", "onItemHold", "onItemRendered", "onOptionChanged", "dataSourceChange", "disabledChange", "elementAttrChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemTemplateChange", "menuItemTemplateChange", "multilineChange", "noDataTextChange", "rtlEnabledChange", "visibleChange", "widthChange"] }, { kind: "component", type: i3.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "author", "id", "timestamp", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "captionTemplate", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "linkAttr", "url", "collapsed", "collapsedSize", "collapsible", "maxSize", "minSize", "resizable", "size", "splitter", "heightRatio", "widthRatio", "expanded", "hasItems", "parentId"] }, { kind: "directive", type: i2.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i1.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: BayanCoreItemWidgetComponent, selector: "bayan-core-item-widget", inputs: ["baseUrl", "item"], outputs: ["itemClick"] }, { kind: "component", type: BayanCoreGlobalSearchWidgetComponent, selector: "bayan-core-global-search-widget", inputs: ["baseUrl", "placeholder", "dataSource"], outputs: ["search", "itemNavigate"] }, { kind: "component", type: BayanCoreUserPanelWidgetComponent, selector: "bayan-core-user-panel-widget", inputs: ["baseUrl", "userPanel", "isSsoLogin"], outputs: ["propertyChange", "signOutClick"] }, { kind: "component", type: BayanCoreSettingsWidgetComponent, selector: "bayan-core-settings-widget", inputs: ["useAlternateNames", "displayAlternateNames", "hrBlocked", "hrCanBlock", "tkBlocked", "tkCanBlock", "nameModeItems", "settingsEnabled"], outputs: ["alternateNamesChange", "nameModeChange", "blockHrClick", "releaseHrClick", "blockTkClick", "releaseTkClick", "changePasswordClick", "openAboutClick"] }, { kind: "component", type: BayanCoreAboutDialogWidgetComponent, selector: "bayan-core-about-dialog-widget", inputs: ["baseUrl", "visible", "config"], outputs: ["visibleChange", "licenseClick", "releaseNotesClick", "supportClick"] }, { kind: "component", type: BayanCoreChangePasswordWidgetComponent, selector: "bayan-core-change-password-widget", inputs: ["baseUrl", "visible", "config", "isSubmitting"], outputs: ["visibleChange", "submitPasswordChange"] }, { kind: "component", type: BayanCoreNotificationsWidgetComponent, selector: "bayan-core-notifications-widget", inputs: ["baseUrl", "title", "wrapperClass", "linkClass", "iconClass", "badgeClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
810
+ }
811
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: BayanCoreTopMenuWidgetComponent, decorators: [{
812
+ type: Component,
813
+ args: [{ selector: 'bayan-core-top-menu-widget', standalone: true, imports: [
814
+ CommonModule,
815
+ DxToolbarModule,
816
+ FontAwesomeModule,
817
+ TranslatePipe,
818
+ BayanCoreItemWidgetComponent,
819
+ BayanCoreGlobalSearchWidgetComponent,
820
+ BayanCoreUserPanelWidgetComponent,
821
+ BayanCoreSettingsWidgetComponent,
822
+ BayanCoreAboutDialogWidgetComponent,
823
+ BayanCoreChangePasswordWidgetComponent,
824
+ BayanCoreNotificationsWidgetComponent,
825
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"top-menu-widget__header shadow-sm w-100 sticky-top\">\r\n <dx-toolbar class=\"top-menu-widget__toolbar px-4\">\r\n <dxi-item location=\"before\">\r\n <div *dxTemplate>\r\n <a\r\n class=\"top-menu-widget__brand\"\r\n [class.top-menu-widget__brand--collapsed]=\"sidebarCollapsed\"\r\n (click)=\"onLogoClicked($event)\">\r\n <img\r\n [src]=\"getLogoSrc()\"\r\n alt=\"\"\r\n class=\"top-menu-widget__logo\"\r\n [class.top-menu-widget__logo--collapsed]=\"sidebarCollapsed && !!collapsedLogoUrl\">\r\n </a>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item location=\"before\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <ul class=\"top-menu-widget__nav\">\r\n @for (item of menuItems; track item.id ?? item.menuName) {\r\n <bayan-core-item-widget [item]=\"item\" [baseUrl]=\"baseUrl\" (itemClick)=\"menuItemClick.emit($event)\"></bayan-core-item-widget>\r\n }\r\n </ul>\r\n </div>\r\n </dxi-item>\r\n\r\n @if (showGlobalSearch) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-global-search-widget\r\n [baseUrl]=\"baseUrl\"\r\n [placeholder]=\"searchPlaceholder\"\r\n [dataSource]=\"searchItems\"\r\n (search)=\"searchSubmit.emit($event)\"\r\n (itemNavigate)=\"searchItemNavigate.emit($event)\">\r\n </bayan-core-global-search-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showUserPanel) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-user-panel-widget\r\n [baseUrl]=\"baseUrl\"\r\n [userPanel]=\"userPanel\"\r\n [isSsoLogin]=\"isSsoLogin\"\r\n (propertyChange)=\"propertyChange.emit($event)\"\r\n (signOutClick)=\"signOutClick.emit()\">\r\n </bayan-core-user-panel-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showSettings) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-settings-widget\r\n [useAlternateNames]=\"useAlternateNames\"\r\n [displayAlternateNames]=\"displayAlternateNames\"\r\n [hrBlocked]=\"hrBlocked\"\r\n [hrCanBlock]=\"hrCanBlock\"\r\n [tkBlocked]=\"tkBlocked\"\r\n [tkCanBlock]=\"tkCanBlock\"\r\n [nameModeItems]=\"nameModeItems\"\r\n [settingsEnabled]=\"settingsEnabled\"\r\n (alternateNamesChange)=\"alternateNamesChange.emit()\"\r\n (nameModeChange)=\"nameModeChange.emit($event)\"\r\n (blockHrClick)=\"blockHrClick.emit()\"\r\n (releaseHrClick)=\"releaseHrClick.emit()\"\r\n (blockTkClick)=\"blockTkClick.emit()\"\r\n (releaseTkClick)=\"releaseTkClick.emit()\"\r\n (changePasswordClick)=\"onChangePasswordRequested()\"\r\n (openAboutClick)=\"onAboutRequested()\">\r\n </bayan-core-settings-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showNotifications) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <bayan-core-notifications-widget [baseUrl]=\"baseUrl\"\r\n [title]=\"notificationsTitle | translate\" >\r\n </bayan-core-notifications-widget>\r\n </div>\r\n </dxi-item>\r\n }\r\n\r\n @if (showHelp) {\r\n <dxi-item location=\"after\" locateInMenu=\"never\">\r\n <div *dxTemplate>\r\n <a\r\n [class]=\"helpAnchorClass\"\r\n [title]=\"helpTitle | translate\"\r\n [target]=\"helpUrlTarget\"\r\n (click)=\"onHelpClicked($event)\">\r\n <fa-icon [icon]=\"helpIcon\" class=\"fs-6\"></fa-icon>\r\n </a>\r\n </div>\r\n </dxi-item>\r\n }\r\n </dx-toolbar>\r\n</header>\r\n\r\n@if (useInternalDialogs) {\r\n <bayan-core-about-dialog-widget\r\n [baseUrl]=\"baseUrl\"\r\n [visible]=\"aboutVisible()\"\r\n [config]=\"aboutDialog\"\r\n (visibleChange)=\"aboutVisible.set($event)\"\r\n (licenseClick)=\"aboutLicenseClick.emit()\"\r\n (releaseNotesClick)=\"aboutReleaseNotesClick.emit()\"\r\n (supportClick)=\"aboutSupportClick.emit()\">\r\n </bayan-core-about-dialog-widget>\r\n\r\n <bayan-core-change-password-widget\r\n [baseUrl]=\"baseUrl\"\r\n [visible]=\"changePasswordVisible()\"\r\n [config]=\"changePasswordDialog\"\r\n [isSubmitting]=\"changePasswordLoading\"\r\n (visibleChange)=\"changePasswordVisible.set($event)\"\r\n (submitPasswordChange)=\"submitPasswordChange.emit($event)\">\r\n </bayan-core-change-password-widget>\r\n}\r\n", styles: [":host{display:flex}.top-menu-widget__header{width:100%;background:#222;color:#fff}.top-menu-widget__toolbar{width:100%}::ng-deep .top-menu-widget__header .dx-toolbar{padding:0!important;height:56px!important;background:#222}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-items-container,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-before,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-center,::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item.dx-toolbar-item,::ng-deep .top-menu-widget__header .dx-toolbar .dx-item-content.dx-toolbar-item-content{height:56px!important;display:flex!important;align-items:center!important}::ng-deep .top-menu-widget__header .dx-toolbar .dx-toolbar-after{padding:0 20px!important;gap:4px}.top-menu-widget__brand{display:flex;align-items:center;text-decoration:none;background:transparent;border:0;cursor:pointer;font:inherit;width:235px;min-width:235px;overflow:hidden;transition:width .3s ease,min-width .3s ease}.top-menu-widget__brand--collapsed{width:60px;min-width:60px}.top-menu-widget__logo{height:38px;object-fit:contain}.top-menu-widget__logo--collapsed{height:32px;object-fit:contain}.top-menu-widget__nav{display:flex;align-items:center;gap:4px;list-style:none;padding:0;margin:0}.menu-dropdown-host{position:relative;display:flex;align-items:center}.menu-icon-btn,.employee-toggle,.nav-link{background:transparent;border:0;color:#999!important;font:inherit;text-align:inherit;text-decoration:none;transition:color .2s ease,background .2s ease}.menu-icon-btn:hover,.employee-toggle:hover,.nav-link:hover,.nav-item.dropdown.open>.nav-link{color:#fff!important}.menu-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:56px;cursor:pointer}.menu-dropdown-panel{position:absolute;top:100%;background:#fff;color:#333;border:1px solid #dee2e6;box-shadow:0 4px 12px #0000001f;z-index:1050;padding:4px 0;list-style:none;border-radius:4px;margin:0}.menu-section-label{font-size:12px;color:#888;padding:4px 16px 6px;letter-spacing:.03em;display:block}.menu-row{display:flex;align-items:center;gap:6px}.menu-divider,.dropdown-divider{border:none;border-top:1px solid rgba(0,0,0,.15);margin:4px 0}.menu-indicator{display:inline-flex;align-items:center;justify-content:center;width:16px;flex-shrink:0;font-size:12px;padding-top:2px}.menu-indicator-active{color:#f18206}.employee-toggle{display:flex;align-items:center;height:56px;padding:0 6px;cursor:pointer}.employee-info{display:flex;flex-direction:column;justify-content:center;margin-left:8px;margin-right:4px}.user-name{font-size:13px;font-weight:500;color:#fff;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.property-name,.employee-caret{font-size:11px;color:#999}.employee-menu,.settings-menu,.notifications-menu{right:0}.employee-menu{min-width:200px}.settings-menu{min-width:240px}.menu-item,.header-dropdown-item{display:flex;align-items:center;width:100%;background:transparent;border:0;padding:7px 16px;font-size:14px;font:inherit;color:#333;text-align:left;text-decoration:none;cursor:pointer}.menu-item:hover,.menu-item:focus,.header-dropdown-item:hover,.header-dropdown-item:focus{background:#f5f5f5;color:#333!important}.menu-item-active{font-weight:600}.menu-item-signout:hover,.menu-item-signout:focus{background:#6c757d!important;color:#fff!important}.nav-item{position:relative}.nav-link{display:flex;align-items:center;justify-content:flex-start;height:56px;padding:0 14px;font-size:13px;font-weight:500;white-space:nowrap;background:#222}.caret{margin-left:4px;font-size:10px}.dropdown-menu{left:0;min-width:220px;padding:0;overflow:hidden}.dropdown-menu .nav-link{height:44px;padding:0 22px;background:#fff;color:#333!important;font-weight:400}.dropdown-menu .nav-link:hover,.dropdown-menu .nav-item.dropdown.open>.nav-link{background:#f5f6f8;color:#222!important}.top-menu-widget__search{width:280px;display:flex;align-items:center}::ng-deep .top-menu-widget__search .dx-texteditor{border-radius:6px}::ng-deep .top-menu-widget__search .dx-texteditor-input{color:#333}.top-menu-widget__search-item{display:flex;flex-direction:column;text-decoration:none}.top-menu-widget__search-item-title{display:flex;align-items:center;gap:4px;color:#666;font-size:11px;margin-bottom:4px}.top-menu-widget__search-item-subtitle{color:#222;font-size:13px;margin-left:18px}.top-menu-widget__notification-btn{position:relative}.top-menu-widget__notification-badge{position:absolute;top:8px;right:4px;min-width:18px;height:18px;border-radius:999px;padding:0 5px;font-size:10px;line-height:18px;text-align:center;background:#f18206;color:#fff}.top-menu-widget__help-link{display:inline-flex}.invisible{visibility:hidden}.disabled{opacity:.5;pointer-events:none}.about-backdrop{position:fixed;inset:0;background:#00000073;z-index:2000;display:flex;align-items:center;justify-content:center}.about-modal{background:#fff;border-radius:6px;width:560px;max-width:95vw;box-shadow:0 5px 30px #00000040;overflow:hidden}.about-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #e5e5e5}.about-modal-title{margin:0;font-size:18px;font-weight:600}.about-close-btn{border:0;background:transparent;font-size:24px;line-height:1;color:#666}.about-modal-body{padding:20px}.about-logo{max-height:80px;object-fit:contain}.about-product-name{font-size:20px;font-weight:600;margin-bottom:8px}.about-version-text,.about-copyright{color:#555}.about-modal-actions{display:flex;gap:8px;justify-content:flex-end;padding:0 20px 20px}.about-action-btn{border:1px solid #d0d0d0;border-radius:6px;background:#fff;color:#333;padding:8px 12px}\n"] }]
826
+ }], propDecorators: { baseUrl: [{
827
+ type: Input
828
+ }], sidebarCollapsed: [{
829
+ type: Input
830
+ }], homeUrl: [{
831
+ type: Input
832
+ }], logoUrl: [{
833
+ type: Input
834
+ }], collapsedLogoUrl: [{
835
+ type: Input
836
+ }], logoClick: [{
837
+ type: Output
838
+ }], searchPlaceholder: [{
839
+ type: Input
840
+ }], menuItems: [{
841
+ type: Input
842
+ }], searchItems: [{
843
+ type: Input
844
+ }], userPanel: [{
845
+ type: Input
846
+ }], isSsoLogin: [{
847
+ type: Input
848
+ }], useAlternateNames: [{
849
+ type: Input
850
+ }], displayAlternateNames: [{
851
+ type: Input
852
+ }], hrBlocked: [{
853
+ type: Input
854
+ }], hrCanBlock: [{
855
+ type: Input
856
+ }], tkBlocked: [{
857
+ type: Input
858
+ }], tkCanBlock: [{
859
+ type: Input
860
+ }], nameModeItems: [{
861
+ type: Input
862
+ }], settingsEnabled: [{
863
+ type: Input
864
+ }], useInternalDialogs: [{
865
+ type: Input
866
+ }], changePasswordLoading: [{
867
+ type: Input
868
+ }], changePasswordDialog: [{
869
+ type: Input
870
+ }], aboutDialog: [{
871
+ type: Input
872
+ }], showGlobalSearch: [{
873
+ type: Input
874
+ }], showUserPanel: [{
875
+ type: Input
876
+ }], showSettings: [{
877
+ type: Input
878
+ }], showNotifications: [{
879
+ type: Input
880
+ }], notificationsTitle: [{
881
+ type: Input
882
+ }], showHelp: [{
883
+ type: Input
884
+ }], helpTitle: [{
885
+ type: Input
886
+ }], helpUrl: [{
887
+ type: Input
888
+ }], helpIcon: [{
889
+ type: Input
890
+ }], helpAnchorClass: [{
891
+ type: Input
892
+ }], helpUrlTarget: [{
893
+ type: Input
894
+ }], helpClick: [{
895
+ type: Output
896
+ }], menuItemClick: [{
897
+ type: Output
898
+ }], searchSubmit: [{
899
+ type: Output
900
+ }], searchItemNavigate: [{
901
+ type: Output
902
+ }], propertyChange: [{
903
+ type: Output
904
+ }], signOutClick: [{
905
+ type: Output
906
+ }], alternateNamesChange: [{
907
+ type: Output
908
+ }], nameModeChange: [{
909
+ type: Output
910
+ }], blockHrClick: [{
911
+ type: Output
912
+ }], releaseHrClick: [{
913
+ type: Output
914
+ }], blockTkClick: [{
915
+ type: Output
916
+ }], releaseTkClick: [{
917
+ type: Output
918
+ }], changePasswordClick: [{
919
+ type: Output
920
+ }], openAboutClick: [{
921
+ type: Output
922
+ }], aboutLicenseClick: [{
923
+ type: Output
924
+ }], aboutReleaseNotesClick: [{
925
+ type: Output
926
+ }], aboutSupportClick: [{
927
+ type: Output
928
+ }], submitPasswordChange: [{
929
+ type: Output
930
+ }] } });
931
+
932
+ var EmployeeNamesModeOption;
933
+ (function (EmployeeNamesModeOption) {
934
+ EmployeeNamesModeOption[EmployeeNamesModeOption["ShortNames"] = 1] = "ShortNames";
935
+ EmployeeNamesModeOption[EmployeeNamesModeOption["StandardNames"] = 2] = "StandardNames";
936
+ EmployeeNamesModeOption[EmployeeNamesModeOption["FullNames"] = 3] = "FullNames";
937
+ })(EmployeeNamesModeOption || (EmployeeNamesModeOption = {}));
938
+ var BlockableModule;
939
+ (function (BlockableModule) {
940
+ BlockableModule[BlockableModule["HumanResources"] = 4] = "HumanResources";
941
+ BlockableModule[BlockableModule["Timekeeping"] = 5] = "Timekeeping";
942
+ })(BlockableModule || (BlockableModule = {}));
943
+ var SystemModule;
944
+ (function (SystemModule) {
945
+ SystemModule[SystemModule["Corporate"] = 1] = "Corporate";
946
+ SystemModule[SystemModule["Cluster"] = 2] = "Cluster";
947
+ SystemModule[SystemModule["Setup"] = 3] = "Setup";
948
+ SystemModule[SystemModule["HumanResources"] = 4] = "HumanResources";
949
+ SystemModule[SystemModule["Timekeeping"] = 5] = "Timekeeping";
950
+ SystemModule[SystemModule["Payroll"] = 6] = "Payroll";
951
+ SystemModule[SystemModule["Training"] = 7] = "Training";
952
+ SystemModule[SystemModule["Workflow"] = 8] = "Workflow";
953
+ SystemModule[SystemModule["Appraisal"] = 9] = "Appraisal";
954
+ SystemModule[SystemModule["BusinessIntelligence"] = 10] = "BusinessIntelligence";
955
+ })(SystemModule || (SystemModule = {}));
956
+
957
+ /*
958
+ * Public API Surface of bayan-core-ui
959
+ */
960
+
961
+ /**
962
+ * Generated bundle index. Do not edit.
963
+ */
964
+
965
+ export { BayanCoreTopMenuService, BayanCoreTopMenuWidgetComponent, BlockableModule, EmployeeNamesModeOption, SystemModule };
966
+ //# sourceMappingURL=skysoftware-co-bayan-core-widgets-ui.mjs.map