tnx-shared 5.2.24 → 5.2.25

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 (102) hide show
  1. package/classes/public-function.d.ts +70 -17
  2. package/classes/public-function.d.ts.map +1 -1
  3. package/esm2020/classes/public-function.mjs +2 -72
  4. package/esm2020/components/add-news/add-news.component.mjs +3 -3
  5. package/esm2020/components/autocomplete-datasource/autocomplete-datasource.component.mjs +1 -1
  6. package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +1 -1
  7. package/esm2020/components/avatar-uploader/avatar-uploader.component.mjs +1 -1
  8. package/esm2020/components/chat/chat-box/chat-box.component.mjs +1 -1
  9. package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +1 -1
  10. package/esm2020/components/check-box-list/check-box-list.component.mjs +1 -1
  11. package/esm2020/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.mjs +1 -1
  12. package/esm2020/components/common-app-component/app-topbar-v1/app-topbar-v1.component.mjs +1 -1
  13. package/esm2020/components/common-app-component/app-topbar-v2/app-topbar-v2.component.mjs +1 -1
  14. package/esm2020/components/common-app-component/app.menu.component.mjs +2 -2
  15. package/esm2020/components/common-app-component/app.topbar.component.mjs +1 -1
  16. package/esm2020/components/common-app-component/common-app-component.mjs +1 -1
  17. package/esm2020/components/common-app-component/default-setting-form/default-data-settings.component.mjs +1 -1
  18. package/esm2020/components/crud/advance-search/advance-search.component.mjs +1 -1
  19. package/esm2020/components/crud/crud-form/crud-form.component.mjs +1 -1
  20. package/esm2020/components/crud/crud-list/crud-list.component.mjs +1 -1
  21. package/esm2020/components/crud/table-detail-form/table-detail-form.component.mjs +1 -1
  22. package/esm2020/components/crud/tree-table/tree-table.component.mjs +1 -1
  23. package/esm2020/components/datetime-picker/datetime-picker.component.mjs +1 -1
  24. package/esm2020/components/dropdown/dropdown-setting-form/dropdown-setting-form.component.mjs +1 -1
  25. package/esm2020/components/dropdown/dropdown.component.mjs +4 -4
  26. package/esm2020/components/dropdown/quick-add-form/quick-add-form.component.mjs +1 -1
  27. package/esm2020/components/entity-permission/entity-permission.component.mjs +1 -1
  28. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.mjs +1 -1
  29. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.mjs +1 -1
  30. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-data/entity-picker-tree-data.component.mjs +1 -1
  31. package/esm2020/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-selected/entity-picker-tree-selected.component.mjs +1 -1
  32. package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +1 -1
  33. package/esm2020/components/entity-picker/entity-picker.component.mjs +1 -1
  34. package/esm2020/components/file-explorer/file-explorer.component.mjs +1 -1
  35. package/esm2020/components/file-explorer/file-form/file-form.component.mjs +1 -1
  36. package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +1 -1
  37. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +1 -1
  38. package/esm2020/components/file-explorer/file-picker-dialog/file-picker-dialog.component.mjs +1 -1
  39. package/esm2020/components/file-explorer/file-tai-lieu/file-tai-lieu.component.mjs +1 -1
  40. package/esm2020/components/file-explorer/file-version-list/file-version-list.component.mjs +1 -1
  41. package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +1 -1
  42. package/esm2020/components/file-explorer/folder-form/folder-form.component.mjs +1 -1
  43. package/esm2020/components/file-explorer/ky-so-sim-danh-sach-chu-ky/ky-so-sim-danh-sach-chu-ky.component.mjs +1 -1
  44. package/esm2020/components/file-explorer/signature-detail/signature-detail.component.mjs +1 -1
  45. package/esm2020/components/file-upload/file-upload.component.mjs +1 -1
  46. package/esm2020/components/image-uploader/image-uploader.component.mjs +1 -1
  47. package/esm2020/components/paging-next-back-only/paging-next-back-only.component.mjs +1 -1
  48. package/esm2020/components/permission-utils/permission-utils.component.mjs +1 -1
  49. package/esm2020/components/qr-code-generator/qr-code-generator.component.mjs +1 -1
  50. package/esm2020/components/query-builders/query-builder/query-builder.component.mjs +1 -1
  51. package/esm2020/components/query-builders/query-builder-group/query-builder-group.component.mjs +2 -2
  52. package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +3 -3
  53. package/esm2020/components/radio-button-list/radio-button-list.component.mjs +1 -1
  54. package/esm2020/components/report-queue/report-queue.component.mjs +1 -1
  55. package/esm2020/components/service-file-upload/service-file-upload.component.mjs +1 -1
  56. package/esm2020/components/settings/settings-row/settings-row.component.mjs +1 -1
  57. package/esm2020/components/settings/settings-workflow/settings-workflow.component.mjs +1 -1
  58. package/esm2020/components/settings/settings.component.mjs +1 -1
  59. package/esm2020/components/share-link-by-permission/share-link-by-permission.component.mjs +1 -1
  60. package/esm2020/components/statemachines/state/state.component.mjs +1 -1
  61. package/esm2020/components/statemachines/state-metadata/state-metadata.component.mjs +1 -1
  62. package/esm2020/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.mjs +1 -1
  63. package/esm2020/components/statemachines/statemachines-designer/statemachines-designer.component.mjs +1 -1
  64. package/esm2020/components/tn-app-help/helper-current-page/helper-current-page.component.mjs +1 -1
  65. package/esm2020/components/tn-app-help/tn-app-help.component.mjs +1 -1
  66. package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +1 -1
  67. package/esm2020/components/tn-checkbox/tn-checkbox.component.mjs +1 -1
  68. package/esm2020/components/tn-color-picker/tn-color-picker.component.mjs +1 -1
  69. package/esm2020/components/tn-dialog/tn-dialog.component.mjs +1 -1
  70. package/esm2020/components/tn-tabview/tn-tabview.component.mjs +1 -1
  71. package/esm2020/components/tn-template/tn-template.component.mjs +1 -1
  72. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +1 -1
  73. package/esm2020/components/tn-tree/tn-tree.component.mjs +1 -1
  74. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +1 -1
  75. package/esm2020/components/user-picker/user-picker.component.mjs +1 -1
  76. package/esm2020/components/usmart/chuoi-phan-tiet/chuoi-phan-tiet.component.mjs +1 -1
  77. package/esm2020/components/vanban-picker/vanban-den-picker/vanban-den-picker.component.mjs +2 -2
  78. package/esm2020/components/vanban-picker/vanban-di-picker/vanban-di-picker.component.mjs +2 -2
  79. package/esm2020/components/vanban-picker/vanban-picker-dialog/vanban-picker-dialog.component.mjs +1 -1
  80. package/esm2020/components/vanban-picker/vanban-picker.component.mjs +1 -1
  81. package/esm2020/components/workflow/cho-y-kien-form/cho-y-kien-form.component.mjs +1 -1
  82. package/esm2020/components/workflow/permission-sharing/permission-sharing.component.mjs +1 -1
  83. package/esm2020/components/workflow/process-workflow-form/process-workflow-form.component.mjs +1 -1
  84. package/esm2020/components/workflow/start-workflow/start-workflow.component.mjs +1 -1
  85. package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +1 -1
  86. package/esm2020/components/workflow/workflow-permission-form/workflow-permission-form.component.mjs +1 -1
  87. package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +1 -1
  88. package/esm2020/components/workflow/workflow-setting-new/workflow-setting-new.component.mjs +1 -1
  89. package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +1 -1
  90. package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +1 -1
  91. package/esm2020/congviec/congviec/congviec.component.mjs +2 -2
  92. package/esm2020/congviec/dm-linhvuc-congviec/dm-linhvuc-congviec-form/dm-linhvuc-congviec-form.component.mjs +1 -1
  93. package/esm2020/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.mjs +1 -1
  94. package/esm2020/congviec/dm-priority/dm-priority-form/dm-priority-form.component.mjs +1 -1
  95. package/esm2020/tnx-shared.module.mjs +1 -1
  96. package/fesm2015/tnx-shared.mjs +104 -171
  97. package/fesm2015/tnx-shared.mjs.map +1 -1
  98. package/fesm2020/tnx-shared.mjs +104 -171
  99. package/fesm2020/tnx-shared.mjs.map +1 -1
  100. package/package.json +3 -3
  101. package/tnx-shared.module.d.ts +2 -1
  102. package/tnx-shared.module.d.ts.map +1 -1
@@ -397,7 +397,7 @@ export class AppTopBarV1Component extends ComponentBase {
397
397
  }
398
398
  }
399
399
  AppTopBarV1Component.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AppTopBarV1Component, deps: [{ token: i1.CustomRouterService }, { token: i2.Router }, { token: i3.CommonService }, { token: i4.AuthenService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i5.PermissionService }, { token: i6.EnvironmentService }, { token: i7.UserService }, { token: i8.NotifierService }, { token: i9.TranslateService }, { token: i10.CustomizeUiService }], target: i0.ɵɵFactoryTarget.Component });
400
- AppTopBarV1Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: AppTopBarV1Component, selector: "app-topbar-v1", providers: [ComponentContextService], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "notify", first: true, predicate: ["notify"], descendants: true, static: true }, { propertyName: "messages", first: true, predicate: ["messages"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"showDefaultSettingForm()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"showDefaultSettingForm()\">\r\n {{defaultSettingModel.data.text}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\" #profile\r\n class=\"profile-item tn-l-top-bar-menu-item\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-inbox\"></i>\r\n <span>Th\u01B0 m\u1EE5c c\u00E1 nh\u00E2n</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-user-edit\"></i>\r\n <span>C\u1EADp nh\u1EADt th\u00F4ng tin</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<tn-dialog *ngIf=\"defaultSettingModel.showEditForm\" [header]=\"defaultSettingModel.header | translate\"\r\n [popupSize]=\"defaultSettingModel.popupSize\" (onHide)=\"defaultSettingModel.showEditForm = false\">\r\n <default-data-settings #formBase (onHide)=\"defaultSettingModel.showEditForm = false;\"></default-data-settings>\r\n</tn-dialog>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v1 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v1 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "tooltipDisabled", "pTooltip", "positionStyle", "tooltipStyleClass", "showDelay", "hideDelay", "life"] }, { kind: "directive", type: i13.ImgFallbackDirective, selector: "[src-fallback]", inputs: ["src-fallback"], outputs: ["loaded"] }, { kind: "component", type: i14.DefaultDataSettingsComponent, selector: "default-data-settings", inputs: ["settingKey"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i16.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i17.TnAppHelpComponent, selector: "li[tn-app-help]" }, { kind: "component", type: i18.TnAppNotificationComponent, selector: "li[tn-app-notification]", outputs: ["openMenu"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
400
+ AppTopBarV1Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: AppTopBarV1Component, selector: "app-topbar-v1", providers: [ComponentContextService], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "notify", first: true, predicate: ["notify"], descendants: true, static: true }, { propertyName: "messages", first: true, predicate: ["messages"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"showDefaultSettingForm()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"showDefaultSettingForm()\">\r\n {{defaultSettingModel.data.text}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\" #profile\r\n class=\"profile-item tn-l-top-bar-menu-item\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-inbox\"></i>\r\n <span>Th\u01B0 m\u1EE5c c\u00E1 nh\u00E2n</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-user-edit\"></i>\r\n <span>C\u1EADp nh\u1EADt th\u00F4ng tin</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<tn-dialog *ngIf=\"defaultSettingModel.showEditForm\" [header]=\"defaultSettingModel.header | translate\"\r\n [popupSize]=\"defaultSettingModel.popupSize\" (onHide)=\"defaultSettingModel.showEditForm = false\">\r\n <default-data-settings #formBase (onHide)=\"defaultSettingModel.showEditForm = false;\"></default-data-settings>\r\n</tn-dialog>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v1 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v1 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i13.ImgFallbackDirective, selector: "[src-fallback]", inputs: ["src-fallback"], outputs: ["loaded"] }, { kind: "component", type: i14.DefaultDataSettingsComponent, selector: "default-data-settings", inputs: ["settingKey"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.TnDialogComponent, selector: "tn-dialog", inputs: ["maskClass", "styleClass", "scrollBarStyleClass", "useDefaultScrollBar", "visible", "disabledButton", "modal", "header", "popupSize", "closeOnEscape", "showFooter", "positionTop", "minY", "hiddenSave", "maximizable"], outputs: ["onSave", "onCancel", "onShow", "onHide"] }, { kind: "component", type: i16.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i17.TnAppHelpComponent, selector: "li[tn-app-help]" }, { kind: "component", type: i18.TnAppNotificationComponent, selector: "li[tn-app-notification]", outputs: ["openMenu"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
401
401
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AppTopBarV1Component, decorators: [{
402
402
  type: Component,
403
403
  args: [{ selector: 'app-topbar-v1', providers: [ComponentContextService], template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"showDefaultSettingForm()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"showDefaultSettingForm()\">\r\n {{defaultSettingModel.data.text}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\" #profile\r\n class=\"profile-item tn-l-top-bar-menu-item\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-inbox\"></i>\r\n <span>Th\u01B0 m\u1EE5c c\u00E1 nh\u00E2n</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"#\" (click)=\"onEditInfo($event)\">\r\n <i class=\"pi pi-user-edit\"></i>\r\n <span>C\u1EADp nh\u1EADt th\u00F4ng tin</span>\r\n </a>\r\n </li>\r\n <li role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<tn-dialog *ngIf=\"defaultSettingModel.showEditForm\" [header]=\"defaultSettingModel.header | translate\"\r\n [popupSize]=\"defaultSettingModel.popupSize\" (onHide)=\"defaultSettingModel.showEditForm = false\">\r\n <default-data-settings #formBase (onHide)=\"defaultSettingModel.showEditForm = false;\"></default-data-settings>\r\n</tn-dialog>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v1 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v1 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v1 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"] }]
@@ -391,7 +391,7 @@ export class AppTopBarV2Component extends ComponentBase {
391
391
  }
392
392
  }
393
393
  AppTopBarV2Component.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AppTopBarV2Component, deps: [{ token: i1.CustomRouterService }, { token: i2.Router }, { token: i3.CommonService }, { token: i4.AuthenService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i5.PermissionService }, { token: i6.EnvironmentService }, { token: i7.UserService }, { token: i8.NotifierService }, { token: i9.TranslateService }, { token: i10.CustomizeUiService }], target: i0.ɵɵFactoryTarget.Component });
394
- AppTopBarV2Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: AppTopBarV2Component, selector: "app-topbar-v2", providers: [ComponentContextService], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "notify", first: true, predicate: ["notify"], descendants: true, static: true }, { propertyName: "messages", first: true, predicate: ["messages"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "tooltipDisabled", "pTooltip", "positionStyle", "tooltipStyleClass", "showDelay", "hideDelay", "life"] }, { kind: "directive", type: i13.ImgFallbackDirective, selector: "[src-fallback]", inputs: ["src-fallback"], outputs: ["loaded"] }, { kind: "component", type: i14.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i15.TnAppHelpComponent, selector: "li[tn-app-help]" }, { kind: "component", type: i16.TnAppNotificationComponent, selector: "li[tn-app-notification]", outputs: ["openMenu"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
394
+ AppTopBarV2Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: AppTopBarV2Component, selector: "app-topbar-v2", providers: [ComponentContextService], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "notify", first: true, predicate: ["notify"], descendants: true, static: true }, { propertyName: "messages", first: true, predicate: ["messages"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i13.ImgFallbackDirective, selector: "[src-fallback]", inputs: ["src-fallback"], outputs: ["loaded"] }, { kind: "component", type: i14.TnCustomScrollbarComponent, selector: "tn-custom-scrollbar", inputs: ["style", "useDefaultScrollBar", "autoMode", "class", "config", "whiteBackGround", "showScrollHorizontal"], outputs: ["scrollY", "scrollUp", "scrollDown", "scrollLeft", "scrollRight", "scrollYReachEnd", "scrollYReachStart", "scrollXReachEnd", "scrollXReachStart"] }, { kind: "component", type: i15.TnAppHelpComponent, selector: "li[tn-app-help]" }, { kind: "component", type: i16.TnAppNotificationComponent, selector: "li[tn-app-notification]", outputs: ["openMenu"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
395
395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: AppTopBarV2Component, decorators: [{
396
396
  type: Component,
397
397
  args: [{ selector: 'app-topbar-v2', providers: [ComponentContextService], template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !config.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"config.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{config.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{config.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !config.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages && messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowHelp()\" #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help>\r\n </li>\r\n <li *ngIf=\"_customizeUiService.isShowNotification()\" id=\"li-notifications\"\r\n class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>", styles: [".topBarSearchButton:disabled{opacity:1;background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important}::ng-deep app-topbar a{outline:none}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{margin-top:0;float:none}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;justify-content:center;order:0;text-align:right;float:none}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{align-self:stretch;display:flex;align-items:center;box-shadow:0 0 5px #00000060}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{width:auto;height:40px;margin:0}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{margin:0;font-size:0;width:auto;height:auto;padding-left:8px;padding-right:8px}.tn-l-top-bar{display:flex}.topbar-owner,.topbar-description{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{float:none;width:auto;display:flex}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{width:30px;height:28px;margin:auto;display:block}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{display:flex;align-items:center;justify-content:center;margin-left:30px}.notify-message{flex:1 1;overflow:hidden;margin-left:30px;display:flex;align-items:center}.notify-message>marquee{white-space:nowrap;color:#ff0;font-size:500}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{text-shadow:none;color:#52abff;text-align:center}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{font-size:38px;margin:5px auto;text-shadow:none;color:#52abff}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset;margin-top:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{text-align:center;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}@media (max-width: 1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width: 1025px){.tn-l-top-bar-right{display:flex;justify-content:space-between;align-items:center}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{margin:0;display:flex;justify-content:flex-start;flex-direction:row-reverse;align-items:center}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width: 1025px) and (max-width: 1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width: 1024px){.tn-l-m-default-setting{display:flex;align-items:center;justify-content:center;height:36px;font-size:28px;width:36px;color:#fff}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{display:flex;align-items:center;width:36px;justify-content:center}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-top-bar-left,.tn-l-logo-title-block,.topbar-owner,.topbar-description{overflow:hidden}.topbar-owner,.topbar-description{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{display:flex;padding:0 .5em;align-items:center;justify-content:flex-end}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{position:relative;margin-left:.5em;top:0;right:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{width:220px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{display:flex;justify-content:center;align-items:center}.tn-l-topbar-item-role-wrapper{display:none}}\n"] }]
@@ -109,7 +109,7 @@ AppSubMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
109
109
  </ul>
110
110
  </li>
111
111
  </ng-template>
112
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "tooltipZIndex", "escape", "tooltipDisabled", "pTooltip", "positionStyle", "tooltipStyleClass", "showDelay", "hideDelay", "life"] }, { kind: "component", type: AppSubMenuComponent, selector: "[app-submenu]", inputs: ["item", "root", "visible", "level"] }], animations: [
112
+ `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: AppSubMenuComponent, selector: "[app-submenu]", inputs: ["item", "root", "visible", "level"] }], animations: [
113
113
  trigger('children', [
114
114
  state('hiddenAnimated', style({
115
115
  height: '0px'
@@ -336,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
336
336
  }], autoRenderMenu: [{
337
337
  type: Input
338
338
  }] } });
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9hcHAubWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7OztBQTBEM0UsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFRbEQ7SUFDSSw0QkFBNEI7SUFDcEIsT0FBZSxFQUNoQixjQUE2QixFQUNwQyxRQUFrQixFQUNWLG9CQUF5QztRQUVqRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFMUixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBRTVCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFQckQsZ0JBQVcsR0FBVyxDQUFDLENBQUMsQ0FBQztJQVV6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVksRUFBRSxJQUFTO1FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLDhDQUE4QztZQUM5QyxNQUFNLENBQUMsSUFB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QyxJQUFJLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3JFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQzdFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO0lBRUwsQ0FBQzs7NkdBdkpRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDhHQVJmOztLQUVULDBFQXJGUSxtQkFBbUI7MkZBMkZuQixnQkFBZ0I7a0JBVjVCLFNBQVM7K0JBQ0ksVUFBVSxZQUNWOztLQUVUO2dSQVFRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ1thcHAtc3VibWVudV0nLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNoaWxkIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCIocm9vdCA/IGl0ZW0gOiBpdGVtLml0ZW1zKVwiPlxyXG4gICAgICAgIDxsaSAqbmdJZj1cImNoaWxkLnZpc2libGUgIT09IGZhbHNlXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtbWVudWl0ZW0nOiBjaGlsZC5hY3RpdmF0ZWQsICdhY3RpdmUtbWVudWl0ZW0tMic6ICFyb290fVwiPlxyXG4gICAgICAgICAgICA8YSBbaHJlZl09XCJjaGlsZC5ocmVmXCIgY2xhc3M9XCJyaXBwbGVsaW5rXCIgW2F0dHIudGFiaW5kZXhdPVwiIXZpc2libGUgPyAnLTEnIDogbnVsbFwiIFthdHRyLmxldmVsXT1cImNoaWxkLmxldmVsXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW1lbnVpdGVtLXJvdXRlcmxpbmsnOiBjaGlsZC5hY3RpdmF0ZWR9XCIgKGNsaWNrKT1cIml0ZW1DbGljaygkZXZlbnQsY2hpbGQpXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGNoaWxkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibGV2ZWwgPT0gMFwiIFtuZ0NsYXNzXT1cIidwaSBwaS10aC1sYXJnZSdcIiBbYXR0ci5sZXZlbF09XCJsZXZlbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibGV2ZWwgPT0gMVwiIFtuZ0NsYXNzXT1cIidwaSBwaS1zdGFyLW8nXCIgW2F0dHIubGV2ZWxdPVwibGV2ZWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImxldmVsID4gMVwiIFtuZ0NsYXNzXT1cIidwaSBwaS1jaXJjbGUtb24nXCIgW2F0dHIubGV2ZWxdPVwibGV2ZWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNoaWxkLmZ1bGxMYWJlbFwiIGNsYXNzPVwibWVudS1sYWJlbFwiIFtwVG9vbHRpcF09XCJjaGlsZC5mdWxsTGFiZWxcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NoaWxkLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8YiAqbmdJZj1cImNoaWxkLmNvdW50XCIgY2xhc3M9XCJjb3VudC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjaGlsZC5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNoaWxkLmZ1bGxMYWJlbFwiIGNsYXNzPVwibWVudS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y2hpbGQubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxiICpuZ0lmPVwiY2hpbGQuY291bnRcIiBjbGFzcz1cImNvdW50LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2NoaWxkLmNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjaGlsZC5pdGVtc1wiIGNsYXNzPVwicGkgcGktYW5nbGUtZG93biBtZW51aXRlbS10b2dnbGUtaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8dWwgKm5nSWY9XCJjaGlsZC5pdGVtc1wiIGFwcC1zdWJtZW51IFtpdGVtXT1cImNoaWxkXCIgW2xldmVsXT1cImxldmVsICsgMVwiIFt2aXNpYmxlXT1cImNoaWxkLmFjdGl2YXRlZFwiXHJcbiAgICAgICAgICAgIFtAY2hpbGRyZW5dPVwiKChfY29tbW9uU2VydmljZS5pc1NsaW0oKXx8X2NvbW1vblNlcnZpY2UuaXNIb3Jpem9udGFsKCkpICYmIHJvb3QgPyAoY2hpbGQuYWN0aXZhdGVkID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpIDogY2hpbGQuYWN0aXZhdGVkKSA/ICd2aXNpYmxlQW5pbWF0ZWQnIDogJ2hpZGRlbkFuaW1hdGVkJ1wiPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgYCxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdjaGlsZHJlbicsIFtcclxuICAgICAgICAgICAgc3RhdGUoJ2hpZGRlbkFuaW1hdGVkJywgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMHB4J1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlQW5pbWF0ZWQnLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJ1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCdoaWRkZW4nLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlQW5pbWF0ZWQgPT4gaGlkZGVuQW5pbWF0ZWQnLCBhbmltYXRlKCc0MDBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSknKSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2hpZGRlbkFuaW1hdGVkID0+IHZpc2libGVBbmltYXRlZCcsIGFuaW1hdGUoJzQwMG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKScpKVxyXG4gICAgICAgIF0pXHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXBwU3ViTWVudUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xyXG4gICAgQElucHV0KCkgaXRlbTogYW55O1xyXG4gICAgQElucHV0KCkgcm9vdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBsZXZlbDogbnVtYmVyO1xyXG5cclxuICAgIGFjdGl2ZUluZGV4OiBudW1iZXIgPSAtMjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBwdWJsaWMgYXBwOiBBcHBDb21wb25lbnQsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaXRlbUNsaWNrKGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgIC8vIGdvIHRvIGV4dGVybmFsIHVybCwgZGVmYXVsdCB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLnVybCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlID0gIXRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXZvaWQgcHJvY2Vzc2luZyBkaXNhYmxlZCBpdGVtc1xyXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWN0aXZhdGUgY3VycmVudCBpdGVtIGFuZCBkZWFjdGl2YXRlIGFjdGl2ZSBzaWJsaW5nIGlmIGFueVxyXG4gICAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpdGVtLmFjdGl2YXRlZCA9ICFpdGVtLmFjdGl2YXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGV4ZWN1dGUgY29tbWFuZFxyXG4gICAgICAgIGlmIChpdGVtLmNvbW1hbmQpIHtcclxuICAgICAgICAgICAgaXRlbS5jb21tYW5kKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW06IGl0ZW0gfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoaWRlIG1lbnVcclxuICAgICAgICBpZiAoIWl0ZW0uaXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbW1vblNlcnZpY2UuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5fY29tbW9uU2VydmljZS5pc1NsaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZXNldE1lbnUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZXNldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yb3RhdGVNZW51QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2Uub3ZlcmxheU1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlID0gIXRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VFbnRlcihpdGVtOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlICYmICh0aGlzLl9jb21tb25TZXJ2aWNlLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTbGltKCkpXHJcbiAgICAgICAgICAgICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzTW9iaWxlKCkgJiYgIXRoaXMuX2NvbW1vblNlcnZpY2UuaXNUYWJsZXQoKSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gIWl0ZW0uYWN0aXZhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hY3RpdmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8dWwgYXBwLXN1Ym1lbnUgW2l0ZW1dPVwibW9kZWxcIiBbbGV2ZWxdPVwiMFwiIFtyb290XT1cInRydWVcIiBjbGFzcz1cImxheW91dC1tZW51IGxheW91dC1tYWluLW1lbnUgY2xlYXJmaXhcIiB2aXNpYmxlPVwidHJ1ZVwiPjwvdWw+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG5cclxuICAgIGBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgcmVzZXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBhdXRvUmVuZGVyTWVudSA9IHRydWU7XHJcblxyXG4gICAgbW9kZWw6IGFueVtdID0gW107XHJcblxyXG4gICAgdGhlbWUgPSAnYmx1ZSc7XHJcbiAgICBsYXlvdXQgPSAnYmx1ZSc7XHJcbiAgICB2ZXJzaW9uID0gJ3YzJztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9tZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIF9hcHBsaWNhdGlvbkNvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RpdGxlOiBUaXRsZSxcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGFwcENvZGUgPSBfZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwcENvZGUoKTtcclxuICAgICAgICBjb25zdCBhcHBDb2RlTG93ZXJDYXNlID0gYXBwQ29kZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGxldCBmdW5jU2V0TmV3VGFiTGluayA9IGxpbmsgPT4gbGluaztcclxuICAgICAgICBpZiAoX2Vudmlyb25tZW50U2VydmljZS5nZXRFbmFibGVCYXNlSHJlZigpKSB7XHJcbiAgICAgICAgICAgIC8vIE7hur91IGzDoCBtw7RpIHRyxrDhu51uZyB0cmnhu4NuIGtoYWkgdGjDrCBj4buZbmcgdGjDqm0gdGnhu4FuIHThu5EgcGjDom4gaOG7hyB2w6BvIHJvdXRlciBsaW5rIMSR4buDIGPDsyB0aOG7gyBjaHXhu5l0IHBo4bqjaSBt4bufIHRhYiBt4bubaVxyXG4gICAgICAgICAgICBmdW5jU2V0TmV3VGFiTGluayA9IGxpbmsgPT4gYC8ke2FwcENvZGVMb3dlckNhc2V9JHtsaW5rfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX21lbnVTZXJ2aWNlLnJlbmRlck1lbnVCeUFwcENvZGUoYXBwQ29kZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbShpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVudVNlcnZpY2UubWVudUNoYW5nZWQuc3Vic2NyaWJlKHJhd01lbnVzID0+IHtcclxuICAgICAgICAgICAgLy8gcmVmb3JtYXQgbOG6oWkgdG/DoG4gYuG7mSBtZW51XHJcbiAgICAgICAgICAgIHRoaXMuZGVRdXlTZXROZXdUYWJMaW5rKHRoaXMubW9kZWwsIGZ1bmNTZXROZXdUYWJMaW5rLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULk1FTlVfUkVMT0FEKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZVF1eVNldE5ld1RhYkxpbmsobWVudXMsIGZ1bmMsIGxldmVsKSB7XHJcbiAgICAgICAgaWYgKCFtZW51cyB8fCBtZW51cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lbnVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghaXRlbS5pc1Jvb3RNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5uZXdUYWJMaW5rID0gZnVuYyhpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaHJlZiA9IGl0ZW0ubmV3VGFiTGluaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaHJlZiA9ICcjJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRlUXV5U2V0TmV3VGFiTGluayhpdGVtLml0ZW1zLCBmdW5jLCBsZXZlbCArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGl2ZUl0ZW0oaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpdGVtLml0ZW1zLmZvckVhY2goY2hpbGRJdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0oY2hpbGRJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmFjdGl2YXRlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy50cmltTGluayh0aGlzLl9yb3V0ZXIudXJsKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlckxpbmsgPSB0aGlzLnRyaW1MaW5rKGl0ZW0ucm91dGVyTGluayk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFVybCA9PT0gY3VycmVudFJvdXRlckxpbmsgfHwgdGhpcy5fbWVudVNlcnZpY2UuY2hlY2tNYXBwaW5nUm91dGVyTGluayhjdXJyZW50Um91dGVyTGluaywgY3VycmVudFVybCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKGAke2l0ZW0ubGFiZWx9IC0gJHt0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0VGl0bGUoKX1gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGl0ZW0uYWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtLmFjdGl2YXRlZDtcclxuICAgIH1cclxuXHJcbiAgICB0cmltTGluayhvbGRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFvbGRVcmwpIHJldHVybiBvbGRVcmw7XHJcbiAgICAgICAgbGV0IHVybCA9IG9sZFVybDtcclxuICAgICAgICBsZXQgaSA9IHVybC5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIGkgPSB1cmwuaW5kZXhPZignPycpO1xyXG4gICAgICAgIGlmIChpID4gMCkgdXJsID0gdXJsLnN1YnN0cmluZygwLCBpKTtcclxuICAgICAgICByZXR1cm4gdXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGhlbWUodGhlbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lTGluazogSFRNTExpbmtFbGVtZW50ID0gPEhUTUxMaW5rRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlbWUtY3NzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICd2MycpIHtcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmhyZWYgPSAnYXNzZXRzL3RoZW1lL3RoZW1lLScgKyB0aGVtZSArICcuY3NzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5ocmVmID0gJ2Fzc2V0cy90aGVtZS90aGVtZS0nICsgdGhlbWUgKyAnLXY0JyArICcuY3NzJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlTGF5b3V0KGxheW91dDogc3RyaW5nLCBzcGVjaWFsPzogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGxheW91dExpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jc3MnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJ3YzJykge1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyBsYXlvdXQgKyAnLmNzcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyBsYXlvdXQgKyAnLXY0JyArICcuY3NzJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xyXG5cclxuICAgICAgICBpZiAoc3BlY2lhbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmRhcmtNZW51ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB0aGVtZUxpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lLWNzcycpO1xyXG4gICAgICAgIGNvbnN0IGxheW91dExpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jc3MnKTtcclxuXHJcbiAgICAgICAgaWYgKHZlcnNpb24gPT09ICd2MycpIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJzaW9uID0gJ3YzJztcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmhyZWYgPSAnYXNzZXRzL3RoZW1lL3RoZW1lLScgKyB0aGlzLnRoZW1lICsgJy5jc3MnO1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyB0aGlzLmxheW91dCArICcuY3NzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5ocmVmID0gJ2Fzc2V0cy90aGVtZS90aGVtZS0nICsgdGhpcy50aGVtZSArICctdjQnICsgJy5jc3MnO1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyB0aGlzLmxheW91dCArICctdjQnICsgJy5jc3MnO1xyXG4gICAgICAgICAgICB0aGlzLnZlcnNpb24gPSAnLXY0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59XHJcbiJdfQ==
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9hcHAubWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7OztBQTBEM0UsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFRbEQ7SUFDSSw0QkFBNEI7SUFDcEIsT0FBZSxFQUNoQixjQUE2QixFQUNwQyxRQUFrQixFQUNWLG9CQUF5QztRQUVqRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFMUixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBRTVCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFQckQsZ0JBQVcsR0FBVyxDQUFDLENBQUMsQ0FBQztJQVV6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVksRUFBRSxJQUFTO1FBQzdCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLDhDQUE4QztZQUM5QyxNQUFNLENBQUMsSUFB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QyxJQUFJLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3JFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQzdFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO0lBRUwsQ0FBQzs7NkdBdkpRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDhHQVJmOztLQUVULDBFQXJGUSxtQkFBbUI7MkZBMkZuQixnQkFBZ0I7a0JBVjVCLFNBQVM7K0JBQ0ksVUFBVSxZQUNWOztLQUVUO2dSQVFRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ1thcHAtc3VibWVudV0nLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNoaWxkIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCIocm9vdCA/IGl0ZW0gOiBpdGVtLml0ZW1zKVwiPlxyXG4gICAgICAgIDxsaSAqbmdJZj1cImNoaWxkLnZpc2libGUgIT09IGZhbHNlXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtbWVudWl0ZW0nOiBjaGlsZC5hY3RpdmF0ZWQsICdhY3RpdmUtbWVudWl0ZW0tMic6ICFyb290fVwiPlxyXG4gICAgICAgICAgICA8YSBbaHJlZl09XCJjaGlsZC5ocmVmXCIgY2xhc3M9XCJyaXBwbGVsaW5rXCIgW2F0dHIudGFiaW5kZXhdPVwiIXZpc2libGUgPyAnLTEnIDogbnVsbFwiIFthdHRyLmxldmVsXT1cImNoaWxkLmxldmVsXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW1lbnVpdGVtLXJvdXRlcmxpbmsnOiBjaGlsZC5hY3RpdmF0ZWR9XCIgKGNsaWNrKT1cIml0ZW1DbGljaygkZXZlbnQsY2hpbGQpXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGNoaWxkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibGV2ZWwgPT0gMFwiIFtuZ0NsYXNzXT1cIidwaSBwaS10aC1sYXJnZSdcIiBbYXR0ci5sZXZlbF09XCJsZXZlbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibGV2ZWwgPT0gMVwiIFtuZ0NsYXNzXT1cIidwaSBwaS1zdGFyLW8nXCIgW2F0dHIubGV2ZWxdPVwibGV2ZWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImxldmVsID4gMVwiIFtuZ0NsYXNzXT1cIidwaSBwaS1jaXJjbGUtb24nXCIgW2F0dHIubGV2ZWxdPVwibGV2ZWxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNoaWxkLmZ1bGxMYWJlbFwiIGNsYXNzPVwibWVudS1sYWJlbFwiIFtwVG9vbHRpcF09XCJjaGlsZC5mdWxsTGFiZWxcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NoaWxkLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8YiAqbmdJZj1cImNoaWxkLmNvdW50XCIgY2xhc3M9XCJjb3VudC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjaGlsZC5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNoaWxkLmZ1bGxMYWJlbFwiIGNsYXNzPVwibWVudS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y2hpbGQubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxiICpuZ0lmPVwiY2hpbGQuY291bnRcIiBjbGFzcz1cImNvdW50LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2NoaWxkLmNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjaGlsZC5pdGVtc1wiIGNsYXNzPVwicGkgcGktYW5nbGUtZG93biBtZW51aXRlbS10b2dnbGUtaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8dWwgKm5nSWY9XCJjaGlsZC5pdGVtc1wiIGFwcC1zdWJtZW51IFtpdGVtXT1cImNoaWxkXCIgW2xldmVsXT1cImxldmVsICsgMVwiIFt2aXNpYmxlXT1cImNoaWxkLmFjdGl2YXRlZFwiXHJcbiAgICAgICAgICAgIFtAY2hpbGRyZW5dPVwiKChfY29tbW9uU2VydmljZS5pc1NsaW0oKXx8X2NvbW1vblNlcnZpY2UuaXNIb3Jpem9udGFsKCkpICYmIHJvb3QgPyAoY2hpbGQuYWN0aXZhdGVkID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpIDogY2hpbGQuYWN0aXZhdGVkKSA/ICd2aXNpYmxlQW5pbWF0ZWQnIDogJ2hpZGRlbkFuaW1hdGVkJ1wiPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgYCxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdjaGlsZHJlbicsIFtcclxuICAgICAgICAgICAgc3RhdGUoJ2hpZGRlbkFuaW1hdGVkJywgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMHB4J1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlQW5pbWF0ZWQnLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJ1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCdoaWRkZW4nLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlQW5pbWF0ZWQgPT4gaGlkZGVuQW5pbWF0ZWQnLCBhbmltYXRlKCc0MDBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSknKSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2hpZGRlbkFuaW1hdGVkID0+IHZpc2libGVBbmltYXRlZCcsIGFuaW1hdGUoJzQwMG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKScpKVxyXG4gICAgICAgIF0pXHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXBwU3ViTWVudUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xyXG4gICAgQElucHV0KCkgaXRlbTogYW55O1xyXG4gICAgQElucHV0KCkgcm9vdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBsZXZlbDogbnVtYmVyO1xyXG5cclxuICAgIGFjdGl2ZUluZGV4OiBudW1iZXIgPSAtMjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBwdWJsaWMgYXBwOiBBcHBDb21wb25lbnQsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaXRlbUNsaWNrKGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgIC8vIGdvIHRvIGV4dGVybmFsIHVybCwgZGVmYXVsdCB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLnVybCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlID0gIXRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXZvaWQgcHJvY2Vzc2luZyBkaXNhYmxlZCBpdGVtc1xyXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWN0aXZhdGUgY3VycmVudCBpdGVtIGFuZCBkZWFjdGl2YXRlIGFjdGl2ZSBzaWJsaW5nIGlmIGFueVxyXG4gICAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpdGVtLmFjdGl2YXRlZCA9ICFpdGVtLmFjdGl2YXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGV4ZWN1dGUgY29tbWFuZFxyXG4gICAgICAgIGlmIChpdGVtLmNvbW1hbmQpIHtcclxuICAgICAgICAgICAgaXRlbS5jb21tYW5kKHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGl0ZW06IGl0ZW0gfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBoaWRlIG1lbnVcclxuICAgICAgICBpZiAoIWl0ZW0uaXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbW1vblNlcnZpY2UuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5fY29tbW9uU2VydmljZS5pc1NsaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZXNldE1lbnUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZXNldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yb3RhdGVNZW51QnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2Uub3ZlcmxheU1lbnVBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlID0gIXRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybChpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VFbnRlcihpdGVtOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuX2NvbW1vblNlcnZpY2UubWVudUhvdmVyQWN0aXZlICYmICh0aGlzLl9jb21tb25TZXJ2aWNlLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTbGltKCkpXHJcbiAgICAgICAgICAgICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzTW9iaWxlKCkgJiYgIXRoaXMuX2NvbW1vblNlcnZpY2UuaXNUYWJsZXQoKSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gIWl0ZW0uYWN0aXZhdGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5hY3RpdmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8dWwgYXBwLXN1Ym1lbnUgW2l0ZW1dPVwibW9kZWxcIiBbbGV2ZWxdPVwiMFwiIFtyb290XT1cInRydWVcIiBjbGFzcz1cImxheW91dC1tZW51IGxheW91dC1tYWluLW1lbnUgY2xlYXJmaXhcIiB2aXNpYmxlPVwidHJ1ZVwiPjwvdWw+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG5cclxuICAgIGBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQElucHV0KCkgcmVzZXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBhdXRvUmVuZGVyTWVudSA9IHRydWU7XHJcblxyXG4gICAgbW9kZWw6IGFueVtdID0gW107XHJcblxyXG4gICAgdGhlbWUgPSAnYmx1ZSc7XHJcbiAgICBsYXlvdXQgPSAnYmx1ZSc7XHJcbiAgICB2ZXJzaW9uID0gJ3YzJztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9tZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIF9hcHBsaWNhdGlvbkNvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RpdGxlOiBUaXRsZSxcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGFwcENvZGUgPSBfZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwcENvZGUoKTtcclxuICAgICAgICBjb25zdCBhcHBDb2RlTG93ZXJDYXNlID0gYXBwQ29kZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGxldCBmdW5jU2V0TmV3VGFiTGluayA9IGxpbmsgPT4gbGluaztcclxuICAgICAgICBpZiAoX2Vudmlyb25tZW50U2VydmljZS5nZXRFbmFibGVCYXNlSHJlZigpKSB7XHJcbiAgICAgICAgICAgIC8vIE7hur91IGzDoCBtw7RpIHRyxrDhu51uZyB0cmnhu4NuIGtoYWkgdGjDrCBj4buZbmcgdGjDqm0gdGnhu4FuIHThu5EgcGjDom4gaOG7hyB2w6BvIHJvdXRlciBsaW5rIMSR4buDIGPDsyB0aOG7gyBjaHXhu5l0IHBo4bqjaSBt4bufIHRhYiBt4bubaVxyXG4gICAgICAgICAgICBmdW5jU2V0TmV3VGFiTGluayA9IGxpbmsgPT4gYC8ke2FwcENvZGVMb3dlckNhc2V9JHtsaW5rfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX21lbnVTZXJ2aWNlLnJlbmRlck1lbnVCeUFwcENvZGUoYXBwQ29kZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbShpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVudVNlcnZpY2UubWVudUNoYW5nZWQuc3Vic2NyaWJlKHJhd01lbnVzID0+IHtcclxuICAgICAgICAgICAgLy8gcmVmb3JtYXQgbOG6oWkgdG/DoG4gYuG7mSBtZW51XHJcbiAgICAgICAgICAgIHRoaXMuZGVRdXlTZXROZXdUYWJMaW5rKHRoaXMubW9kZWwsIGZ1bmNTZXROZXdUYWJMaW5rLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULk1FTlVfUkVMT0FEKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZVF1eVNldE5ld1RhYkxpbmsobWVudXMsIGZ1bmMsIGxldmVsKSB7XHJcbiAgICAgICAgaWYgKCFtZW51cyB8fCBtZW51cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lbnVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghaXRlbS5pc1Jvb3RNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5uZXdUYWJMaW5rID0gZnVuYyhpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaHJlZiA9IGl0ZW0ubmV3VGFiTGluaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaHJlZiA9ICcjJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0ubGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRlUXV5U2V0TmV3VGFiTGluayhpdGVtLml0ZW1zLCBmdW5jLCBsZXZlbCArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGl2ZUl0ZW0oaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpdGVtLml0ZW1zLmZvckVhY2goY2hpbGRJdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0oY2hpbGRJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmFjdGl2YXRlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy50cmltTGluayh0aGlzLl9yb3V0ZXIudXJsKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlckxpbmsgPSB0aGlzLnRyaW1MaW5rKGl0ZW0ucm91dGVyTGluayk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFVybCA9PT0gY3VycmVudFJvdXRlckxpbmsgfHwgdGhpcy5fbWVudVNlcnZpY2UuY2hlY2tNYXBwaW5nUm91dGVyTGluayhjdXJyZW50Um91dGVyTGluaywgY3VycmVudFVybCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKGAke2l0ZW0ubGFiZWx9IC0gJHt0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0VGl0bGUoKX1gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWN0aXZhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGl0ZW0uYWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtLmFjdGl2YXRlZDtcclxuICAgIH1cclxuXHJcbiAgICB0cmltTGluayhvbGRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFvbGRVcmwpIHJldHVybiBvbGRVcmw7XHJcbiAgICAgICAgbGV0IHVybCA9IG9sZFVybDtcclxuICAgICAgICBsZXQgaSA9IHVybC5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgaWYgKGkgPiAwKSB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgICAgIGkgPSB1cmwuaW5kZXhPZignPycpO1xyXG4gICAgICAgIGlmIChpID4gMCkgdXJsID0gdXJsLnN1YnN0cmluZygwLCBpKTtcclxuICAgICAgICByZXR1cm4gdXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGhlbWUodGhlbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lTGluazogSFRNTExpbmtFbGVtZW50ID0gPEhUTUxMaW5rRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhlbWUtY3NzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICd2MycpIHtcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmhyZWYgPSAnYXNzZXRzL3RoZW1lL3RoZW1lLScgKyB0aGVtZSArICcuY3NzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5ocmVmID0gJ2Fzc2V0cy90aGVtZS90aGVtZS0nICsgdGhlbWUgKyAnLXY0JyArICcuY3NzJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlTGF5b3V0KGxheW91dDogc3RyaW5nLCBzcGVjaWFsPzogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGxheW91dExpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jc3MnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJ3YzJykge1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyBsYXlvdXQgKyAnLmNzcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyBsYXlvdXQgKyAnLXY0JyArICcuY3NzJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xyXG5cclxuICAgICAgICBpZiAoc3BlY2lhbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmRhcmtNZW51ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB0aGVtZUxpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lLWNzcycpO1xyXG4gICAgICAgIGNvbnN0IGxheW91dExpbms6IEhUTUxMaW5rRWxlbWVudCA9IDxIVE1MTGlua0VsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheW91dC1jc3MnKTtcclxuXHJcbiAgICAgICAgaWYgKHZlcnNpb24gPT09ICd2MycpIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJzaW9uID0gJ3YzJztcclxuICAgICAgICAgICAgdGhlbWVMaW5rLmhyZWYgPSAnYXNzZXRzL3RoZW1lL3RoZW1lLScgKyB0aGlzLnRoZW1lICsgJy5jc3MnO1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyB0aGlzLmxheW91dCArICcuY3NzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5ocmVmID0gJ2Fzc2V0cy90aGVtZS90aGVtZS0nICsgdGhpcy50aGVtZSArICctdjQnICsgJy5jc3MnO1xyXG4gICAgICAgICAgICBsYXlvdXRMaW5rLmhyZWYgPSAnYXNzZXRzL2xheW91dC9jc3MvbGF5b3V0LScgKyB0aGlzLmxheW91dCArICctdjQnICsgJy5jc3MnO1xyXG4gICAgICAgICAgICB0aGlzLnZlcnNpb24gPSAnLXY0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59XHJcbiJdfQ==