@unipin/angular-applet 17.3.1 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +3 -3
  2. package/esm2022/lib/components/approval/form/approval-form.component.mjs +3 -3
  3. package/esm2022/lib/components/approval/list/approval-list.component.mjs +3 -3
  4. package/esm2022/lib/components/approval/services/approval.service.mjs +3 -3
  5. package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +3 -3
  6. package/esm2022/lib/components/audit/list/audit-list.component.mjs +3 -3
  7. package/esm2022/lib/components/audit/service/audit.service.mjs +3 -3
  8. package/esm2022/lib/components/buttons/group/btn-group.component.mjs +5 -5
  9. package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +3 -3
  10. package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +21 -8
  11. package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +5 -5
  12. package/esm2022/lib/components/containers/column-container/column-container.component.mjs +25 -9
  13. package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +3 -3
  14. package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +1 -1
  15. package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +8 -7
  16. package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +8 -7
  17. package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +9 -8
  18. package/esm2022/lib/components/filter/filter.component.mjs +5 -5
  19. package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +153 -0
  20. package/esm2022/lib/components/forms/date/form-date.component.mjs +6 -6
  21. package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +3 -3
  22. package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +3 -3
  23. package/esm2022/lib/components/forms/index.mjs +2 -1
  24. package/esm2022/lib/components/forms/input/form-input.component.mjs +3 -3
  25. package/esm2022/lib/components/forms/number/form-number.component.mjs +3 -3
  26. package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +3 -3
  27. package/esm2022/lib/components/forms/password/form-password.component.mjs +3 -3
  28. package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +3 -3
  29. package/esm2022/lib/components/forms/select/form-select.component.mjs +3 -3
  30. package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +3 -3
  31. package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +3 -3
  32. package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +3 -3
  33. package/esm2022/lib/components/grids/services/grid.service.mjs +9 -5
  34. package/esm2022/lib/components/index.mjs +2 -2
  35. package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +3 -3
  36. package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +3 -3
  37. package/esm2022/lib/components/tabs/tabs.component.module.mjs +4 -4
  38. package/esm2022/lib/interceptors/header/header.interceptor.mjs +3 -3
  39. package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +3 -3
  40. package/esm2022/lib/modules/permission/directive/permission.directive.mjs +3 -3
  41. package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +3 -3
  42. package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +3 -3
  43. package/esm2022/lib/modules/permission/permission.module.mjs +4 -4
  44. package/esm2022/lib/modules/permission/services/permission.service.mjs +3 -3
  45. package/esm2022/lib/resolvers/auth/auth.resolver.mjs +3 -3
  46. package/esm2022/lib/services/auth/auth.service.mjs +11 -9
  47. package/esm2022/lib/services/country/country.service.mjs +3 -3
  48. package/esm2022/lib/services/currency/currency.service.mjs +9 -13
  49. package/esm2022/lib/services/profile/profile.service.mjs +3 -3
  50. package/esm2022/public-api.mjs +2 -2
  51. package/fesm2022/unipin-angular-applet.mjs +1509 -1334
  52. package/fesm2022/unipin-angular-applet.mjs.map +1 -1
  53. package/lib/components/containers/applet-container/applet-container.component.d.ts +6 -2
  54. package/lib/components/containers/column-container/column-container.component.d.ts +2 -0
  55. package/lib/components/containers/list-container/interfaces/list-container-config.interface.d.ts +2 -3
  56. package/lib/components/containers/modal-container/modal-container.component.d.ts +2 -1
  57. package/lib/components/forms/currency-input/form-currency-input.component.d.ts +55 -0
  58. package/lib/components/forms/index.d.ts +1 -0
  59. package/lib/components/grids/services/grid.service.d.ts +1 -1
  60. package/lib/components/index.d.ts +1 -1
  61. package/lib/services/currency/currency.service.d.ts +1 -1
  62. package/package.json +4 -4
  63. package/public-api.d.ts +1 -1
  64. package/src/assets/scss/grid.scss +9 -0
@@ -57,10 +57,10 @@ export class ApprovalDetailComponent {
57
57
  setChildGuid(guid) {
58
58
  this.formComponent?.setGuid(this.guids ?? [guid], this.isApprove);
59
59
  }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ApprovalDetailComponent, isStandalone: true, selector: "up-approval-detail", host: { classAttribute: "d-block h-100" }, viewQueries: [{ propertyName: "formComponent", first: true, predicate: ApprovalFormComponent, descendants: true }], ngImport: i0, template: "<up-column-header-container header=\"Approval Detail\" prevUrl=\"/approval\" class=\"bg-white\">\n <up-btn-group id=\"button\" *ngIf=\"!formComponent?.isLoading; else loading\" [config]=\"btnConfig\" />\n\n <ng-template #loading>\n <ion-skeleton-text id=\"button\" class=\"m-0 sk-btn\" />\n </ng-template>\n\n <up-tab-group class=\"h-100\" (onChange)=\"changeTab($event)\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n <up-approval-form />\n </up-tab-content>\n </up-tab-group>\n</up-column-header-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TabsComponentModule }, { kind: "component", type: i4.TabGroupComponent, selector: "up-tab-group", outputs: ["onChange"] }, { kind: "component", type: i5.TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: ColumnHeaderContainerComponent, selector: "up-column-header-container", inputs: ["header", "prevUrl"] }, { kind: "component", type: ApprovalFormComponent, selector: "up-approval-form", inputs: ["isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ApprovalDetailComponent, isStandalone: true, selector: "up-approval-detail", host: { classAttribute: "d-block h-100" }, viewQueries: [{ propertyName: "formComponent", first: true, predicate: ApprovalFormComponent, descendants: true }], ngImport: i0, template: "<up-column-header-container header=\"Approval Detail\" prevUrl=\"/approval\" class=\"bg-white\">\n <up-btn-group id=\"button\" *ngIf=\"!formComponent?.isLoading; else loading\" [config]=\"btnConfig\" />\n\n <ng-template #loading>\n <ion-skeleton-text id=\"button\" class=\"m-0 sk-btn\" />\n </ng-template>\n\n <up-tab-group class=\"h-100\" (onChange)=\"changeTab($event)\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n <up-approval-form />\n </up-tab-content>\n </up-tab-group>\n</up-column-header-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TabsComponentModule }, { kind: "component", type: i4.TabGroupComponent, selector: "up-tab-group", outputs: ["onChange"] }, { kind: "component", type: i5.TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: ColumnHeaderContainerComponent, selector: "up-column-header-container", inputs: ["header", "prevUrl"] }, { kind: "component", type: ApprovalFormComponent, selector: "up-approval-form", inputs: ["isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalDetailComponent, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalDetailComponent, decorators: [{
64
64
  type: Component,
65
65
  args: [{ standalone: true, selector: 'up-approval-detail', changeDetection: ChangeDetectionStrategy.OnPush, host: {
66
66
  class: 'd-block h-100'
@@ -98,10 +98,10 @@ export class ApprovalFormComponent {
98
98
  this.ch.markForCheck();
99
99
  }
100
100
  async showAlert(header, message, buttons = ['OK'], inputs = []) { (await this.alertCtrl.create({ header, message, buttons, inputs })).present(); }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalFormComponent, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i2.ApprovalService }, { token: i3.GridService }, { token: i4.AlertController }, { token: i5.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { isLoading: "isLoading" }, host: { classAttribute: "px-4 d-block" }, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading; else loading\">\n <div *ngFor=\"let d of data, let i = index\">\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\" *ngIf=\"data.length > 1\">\n <ion-icon name=\"document\" />\n <h5 class=\"m-0\">Approval {{ i + 1 }}</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Entity\" [disabled]=\"true\" [value]=\"d.entity\" />\n <up-input class=\"mb-4\" label=\"Remark\" [disabled]=\"true\" [value]=\"d.remark\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Created At\" [disabled]=\"true\" [value]=\"d.createdAt | date:'dd MMM yyyy HH:mm'\" />\n <up-input class=\"mb-4\" label=\"Status\" [disabled]=\"true\" [value]=\"d.status\" />\n </div>\n </div>\n\n <up-textarea class=\"mb-4\" label=\"Reason\" [disabled]=\"true\" [value]=\"d.reason\" *ngIf=\"d.status !== 'PENDING'\" />\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalFormComponent, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i2.ApprovalService }, { token: i3.GridService }, { token: i4.AlertController }, { token: i5.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ApprovalFormComponent, isStandalone: true, selector: "up-approval-form", inputs: { isLoading: "isLoading" }, host: { classAttribute: "px-4 d-block" }, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading; else loading\">\n <div *ngFor=\"let d of data, let i = index\">\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\" *ngIf=\"data.length > 1\">\n <ion-icon name=\"document\" />\n <h5 class=\"m-0\">Approval {{ i + 1 }}</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Entity\" [disabled]=\"true\" [value]=\"d.entity\" />\n <up-input class=\"mb-4\" label=\"Remark\" [disabled]=\"true\" [value]=\"d.remark\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Created At\" [disabled]=\"true\" [value]=\"d.createdAt | date:'dd MMM yyyy HH:mm'\" />\n <up-input class=\"mb-4\" label=\"Status\" [disabled]=\"true\" [value]=\"d.status\" />\n </div>\n </div>\n\n <up-textarea class=\"mb-4\" label=\"Reason\" [disabled]=\"true\" [value]=\"d.reason\" *ngIf=\"d.status !== 'PENDING'\" />\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n <ion-skeleton-text class=\"m-0 mb-4 sk-input\" />\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
103
103
  }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalFormComponent, decorators: [{
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalFormComponent, decorators: [{
105
105
  type: Component,
106
106
  args: [{ standalone: true, selector: 'up-approval-form', changeDetection: ChangeDetectionStrategy.OnPush, host: {
107
107
  class: 'px-4 d-block'
@@ -77,10 +77,10 @@ export class ApprovalListComponent {
77
77
  }
78
78
  });
79
79
  }
80
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalListComponent, deps: [{ token: 'ENTITIES' }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ApprovalService }, { token: i3.AlertController }], target: i0.ɵɵFactoryTarget.Component }); }
81
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ApprovalListComponent, isStandalone: true, selector: "up-approval-list", host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">Approval</h3>\n\n <up-btn-group id=\"approval-list\" [config]=\"btnConfig\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\">\n <up-filter placeholder=\"Type to search\" id=\"filter-approval-list\" [config]=\"filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-pagination-grid [config]=\"gridConfig\" id=\"grid-approval-list\" rowSelection=\"multiple\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" (onSelectionChanged)=\"selectApprovals()\" />\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalListComponent, deps: [{ token: 'ENTITIES' }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ApprovalService }, { token: i3.AlertController }], target: i0.ɵɵFactoryTarget.Component }); }
81
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ApprovalListComponent, isStandalone: true, selector: "up-approval-list", host: { classAttribute: "d-flex flex-column h-100 w-100" }, ngImport: i0, template: "<div class=\"d-flex align-items-center justify-content-between gap-4 p-4 flex-shrink-0 flex-wrap\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-3\">\n <h3 class=\"m-0\">Approval</h3>\n\n <up-btn-group id=\"approval-list\" [config]=\"btnConfig\" />\n </div>\n\n <div class=\"flex-shrink-0 flex-grow-1\">\n <up-filter placeholder=\"Type to search\" id=\"filter-approval-list\" [config]=\"filterConfig\" (onSearch)=\"search($event)\" />\n </div>\n</div>\n\n<div class=\"flex-grow-1 px-1 pb-1\">\n <up-pagination-grid [config]=\"gridConfig\" id=\"grid-approval-list\" rowSelection=\"multiple\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"openDetail($event)\" (onSelectionChanged)=\"selectApprovals()\" />\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: ButtonGroupComponent, selector: "up-btn-group", inputs: ["config"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
82
82
  }
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalListComponent, decorators: [{
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalListComponent, decorators: [{
84
84
  type: Component,
85
85
  args: [{ standalone: true, selector: 'up-approval-list', host: {
86
86
  class: 'd-flex flex-column h-100 w-100'
@@ -34,10 +34,10 @@ export class ApprovalService {
34
34
  `
35
35
  });
36
36
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable }); }
38
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalService, providedIn: 'root' }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalService, providedIn: 'root' }); }
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApprovalService, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ApprovalService, decorators: [{
41
41
  type: Injectable,
42
42
  args: [{
43
43
  providedIn: 'root'
@@ -106,10 +106,10 @@ export class AuditDetailComponent {
106
106
  }));
107
107
  this.gridApi.setGridOption('rowData', changedData);
108
108
  }
109
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditDetailComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AuditService }, { token: i3.ActivatedRoute }, { token: i4.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
110
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: AuditDetailComponent, isStandalone: true, selector: "up-audit-detail", ngImport: i0, template: "<up-tab-group class=\"h-100\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n <form [formGroup]=\"form\" class=\"px-4 pb-4\" *ngIf=\"!isLoading; else loading\">\n <div class=\"d-flex align-items-center gap-2 pb-3\">\n <ion-icon name=\"information-circle\" />\n <h5 class=\"m-0\">Information</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-lg-4\" label=\"Action\" formControlName=\"action\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Source IP\" formControlName=\"sourceIp\" />\n </div>\n </div>\n \n <up-input class=\"mb-4\" label=\"User Name\" formControlName=\"userName\" />\n <up-textarea class=\"mb-4\" label=\"Description\" formControlName=\"description\" />\n\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"laptop\" />\n <h5 class=\"m-0\">System Information</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Action Date\" formControlName=\"createdAt\" />\n <up-input class=\"mb-lg-4\" label=\"Source Platform\" formControlName=\"sourcePlatform\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"MS Source\" formControlName=\"msSource\" />\n <up-input class=\"mb-4\" label=\"Function\" formControlName=\"function\" />\n </div>\n </div>\n </form>\n\n <ng-template #loading>\n <ion-skeleton-text class=\"sk-input mx-4 mb-4\" *ngFor=\"let i of [0,1,2,3,4,5,6]\" />\n </ng-template> \n </up-tab-content>\n\n <up-tab-content header=\"Attributes\" fragment=\"attributes\">\n <up-pagination-grid id=\"grid-audit-detail\" rowModelType=\"clientSide\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" />\n </up-tab-content>\n</up-tab-group>\n", styles: ["ion-icon{font-size:24px;margin-right:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }, { kind: "ngmodule", type: TabsComponentModule }, { kind: "component", type: i6.TabGroupComponent, selector: "up-tab-group", outputs: ["onChange"] }, { kind: "component", type: i7.TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditDetailComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AuditService }, { token: i3.ActivatedRoute }, { token: i4.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: AuditDetailComponent, isStandalone: true, selector: "up-audit-detail", ngImport: i0, template: "<up-tab-group class=\"h-100\">\n <up-tab-content header=\"Detail\" fragment=\"detail\">\n <form [formGroup]=\"form\" class=\"px-4 pb-4\" *ngIf=\"!isLoading; else loading\">\n <div class=\"d-flex align-items-center gap-2 pb-3\">\n <ion-icon name=\"information-circle\" />\n <h5 class=\"m-0\">Information</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-lg-4\" label=\"Action\" formControlName=\"action\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Source IP\" formControlName=\"sourceIp\" />\n </div>\n </div>\n \n <up-input class=\"mb-4\" label=\"User Name\" formControlName=\"userName\" />\n <up-textarea class=\"mb-4\" label=\"Description\" formControlName=\"description\" />\n\n <div class=\"d-flex align-items-center gap-2 pb-3 pt-2\">\n <ion-icon name=\"laptop\" />\n <h5 class=\"m-0\">System Information</h5>\n </div>\n\n <div class=\"d-flex flex-column flex-lg-row gap-4\">\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"Action Date\" formControlName=\"createdAt\" />\n <up-input class=\"mb-lg-4\" label=\"Source Platform\" formControlName=\"sourcePlatform\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <up-input class=\"mb-4\" label=\"MS Source\" formControlName=\"msSource\" />\n <up-input class=\"mb-4\" label=\"Function\" formControlName=\"function\" />\n </div>\n </div>\n </form>\n\n <ng-template #loading>\n <ion-skeleton-text class=\"sk-input mx-4 mb-4\" *ngFor=\"let i of [0,1,2,3,4,5,6]\" />\n </ng-template> \n </up-tab-content>\n\n <up-tab-content header=\"Attributes\" fragment=\"attributes\">\n <up-pagination-grid id=\"grid-audit-detail\" rowModelType=\"clientSide\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" />\n </up-tab-content>\n</up-tab-group>\n", styles: ["ion-icon{font-size:24px;margin-right:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }, { kind: "ngmodule", type: TabsComponentModule }, { kind: "component", type: i6.TabGroupComponent, selector: "up-tab-group", outputs: ["onChange"] }, { kind: "component", type: i7.TabContentComponent, selector: "up-tab-content", inputs: ["header"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "component", type: FormTextareaComponent, selector: "up-textarea", inputs: ["value", "required", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
111
111
  }
112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditDetailComponent, decorators: [{
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditDetailComponent, decorators: [{
113
113
  type: Component,
114
114
  args: [{ standalone: true, selector: 'up-audit-detail', imports: [
115
115
  CommonModule,
@@ -52,10 +52,10 @@ export class AuditListComponent {
52
52
  this.criteria.tagValues = [guid];
53
53
  this.gridComponent.reset();
54
54
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditListComponent, deps: [{ token: 'id', attribute: true }, { token: 'mainUrl', attribute: true }, { token: i1.Router }, { token: i2.AuditService }], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: AuditListComponent, isStandalone: true, selector: "up-audit-list", inputs: { relatedEntities: "relatedEntities", tagKeys: "tagKeys" }, host: { classAttribute: "d-flex flex-column h-100" }, viewQueries: [{ propertyName: "gridComponent", first: true, predicate: GridPaginationComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex justify-content-end px-4 pb-4 flex-shrink-0\">\n <up-filter class=\"w-100\" id=\"audit-filter\" placeholder=\"Type to search\" [config]=\"filterConfig\" (onSearch)=\"search($event);\" />\n</div>\n \n<up-pagination-grid id=\"grid-audit\" class=\"flex-grow-1\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"rowClicked($event)\" />\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditListComponent, deps: [{ token: 'id', attribute: true }, { token: 'mainUrl', attribute: true }, { token: i1.Router }, { token: i2.AuditService }], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: AuditListComponent, isStandalone: true, selector: "up-audit-list", inputs: { relatedEntities: "relatedEntities", tagKeys: "tagKeys" }, host: { classAttribute: "d-flex flex-column h-100" }, viewQueries: [{ propertyName: "gridComponent", first: true, predicate: GridPaginationComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex justify-content-end px-4 pb-4 flex-shrink-0\">\n <up-filter class=\"w-100\" id=\"audit-filter\" placeholder=\"Type to search\" [config]=\"filterConfig\" (onSearch)=\"search($event);\" />\n</div>\n \n<up-pagination-grid id=\"grid-audit\" class=\"flex-grow-1\" [config]=\"gridConfig\" (onGridReady)=\"setGridApi($event)\" (onRowClick)=\"rowClicked($event)\" />\n", styles: [""], dependencies: [{ kind: "component", type: FilterComponent, selector: "up-filter", inputs: ["id", "config"], outputs: ["onSearch"] }, { kind: "component", type: GridPaginationComponent, selector: "up-pagination-grid", inputs: ["config", "rowData", "id", "rowModelType", "rowSelection"], outputs: ["onRowClick", "onGridReady", "onSelectionChanged"] }] }); }
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditListComponent, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditListComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ standalone: true, selector: 'up-audit-list', host: {
61
61
  class: 'd-flex flex-column h-100'
@@ -37,10 +37,10 @@ export class AuditService {
37
37
  `
38
38
  });
39
39
  }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditService, providedIn: 'root' }); }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditService, deps: [{ token: i1.Apollo }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditService, providedIn: 'root' }); }
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AuditService, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AuditService, decorators: [{
44
44
  type: Injectable,
45
45
  args: [{
46
46
  providedIn: 'root'
@@ -25,16 +25,16 @@ export class ButtonGroupComponent {
25
25
  this.activeIndex = i;
26
26
  this.popoverCtrl.dismiss();
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonGroupComponent, deps: [{ token: 'id', attribute: true }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ButtonGroupComponent, isStandalone: true, selector: "up-btn-group", inputs: { config: "config" }, host: { properties: { "class.d-none": "this.isHidden" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"config.length > 0\">\n <up-btn-loading class=\"flex-grow-1\" [type]=\"config[activeIndex].type\" [disabled]=\"config[activeIndex].disabled\" [form]=\"config[activeIndex].form\" [color]=\"config[activeIndex].color\" (onClick)=\"clickBtn($event);\">\n <ion-icon class=\"me-2\" name=\"{{ config[activeIndex].icon }}\" *ngIf=\"config[activeIndex].icon\" />\n {{ config[activeIndex].label }}\n </up-btn-loading>\n\n <ion-button class=\"flex-shrink-0\" id=\"btn-{{ id }}\" [color]=\"config[activeIndex].color\" [disabled]=\"config.length < 2\">\n <ion-icon name=\"caret-down-outline\" />\n </ion-button>\n\n <ion-popover trigger=\"btn-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"item px-2 py-3 cursor-pointer border-bottom d-flex gap-2\" *ngFor=\"let c of config; let i = index\" (click)=\"change(i);\">\n <div class=\"icon flex-shrink-0\">\n <ion-icon name=\"checkmark\" *ngIf=\"i === activeIndex\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"fw-medium\">{{ c.label }}</div>\n <div class=\"f12 pt-1\" *ngIf=\"c.description\">\n {{ c.description }}\n </div>\n </div>\n </div>\n </ng-template>\n </ion-popover>\n</ng-container>\n", styles: [":host{display:flex}up-btn-loading ::ng-deep ion-button{--border-radius: 4px 0 0 4px}ion-button::part(native){border-radius:0 4px 4px 0;border-left:1px solid rgba(255,255,255,.3)}.item:hover{color:#ed6b26;background:#fef3ee}.item ion-icon{--ionicon-stroke-width: 64px}.item .icon{width:14px}.item .f12{color:#616161}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonLoadingComponent, selector: "up-btn-loading", inputs: ["disabled", "form", "type", "fill", "color"], outputs: ["onClick"] }] }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ButtonGroupComponent, deps: [{ token: 'id', attribute: true }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ButtonGroupComponent, isStandalone: true, selector: "up-btn-group", inputs: { config: "config" }, host: { properties: { "class.d-none": "this.isHidden" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"config.length > 0\">\n <up-btn-loading class=\"flex-grow-1\" [class.multi]=\"config.length > 1\" [type]=\"config[activeIndex].type\" [disabled]=\"config[activeIndex].disabled\" [form]=\"config[activeIndex].form\" [color]=\"config[activeIndex].color\" (onClick)=\"clickBtn($event);\">\n <ion-icon class=\"me-2\" name=\"{{ config[activeIndex].icon }}\" *ngIf=\"config[activeIndex].icon\" />\n {{ config[activeIndex].label }}\n </up-btn-loading>\n\n <ng-container *ngIf=\"config.length > 1\" >\n <ion-button class=\"flex-shrink-0\" id=\"btn-{{ id }}\" [color]=\"config[activeIndex].color\">\n <ion-icon name=\"caret-down-outline\" />\n </ion-button>\n \n <ion-popover trigger=\"btn-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"item px-2 py-3 cursor-pointer border-bottom d-flex gap-2\" *ngFor=\"let c of config; let i = index\" (click)=\"change(i);\">\n <div class=\"icon flex-shrink-0\">\n <ion-icon name=\"checkmark\" *ngIf=\"i === activeIndex\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <div class=\"fw-medium\">{{ c.label }}</div>\n <div class=\"f12 pt-1\" *ngIf=\"c.description\">\n {{ c.description }}\n </div>\n </div>\n </div>\n </ng-template>\n </ion-popover>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex}up-btn-loading.multi ::ng-deep ion-button{--border-radius: 4px 0 0 4px}ion-button::part(native){border-radius:0 4px 4px 0;border-left:1px solid rgba(255,255,255,.3)}.item:hover{color:#ed6b26;background:#fef3ee}.item ion-icon{--ionicon-stroke-width: 64px}.item .icon{width:14px}.item .f12{color:#616161}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonLoadingComponent, selector: "up-btn-loading", inputs: ["disabled", "form", "type", "fill", "color"], outputs: ["onClick"] }] }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonGroupComponent, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ButtonGroupComponent, decorators: [{
32
32
  type: Component,
33
33
  args: [{ standalone: true, selector: 'up-btn-group', imports: [
34
34
  IonicModule,
35
35
  CommonModule,
36
36
  ButtonLoadingComponent
37
- ], template: "<ng-container *ngIf=\"config.length > 0\">\n <up-btn-loading class=\"flex-grow-1\" [type]=\"config[activeIndex].type\" [disabled]=\"config[activeIndex].disabled\" [form]=\"config[activeIndex].form\" [color]=\"config[activeIndex].color\" (onClick)=\"clickBtn($event);\">\n <ion-icon class=\"me-2\" name=\"{{ config[activeIndex].icon }}\" *ngIf=\"config[activeIndex].icon\" />\n {{ config[activeIndex].label }}\n </up-btn-loading>\n\n <ion-button class=\"flex-shrink-0\" id=\"btn-{{ id }}\" [color]=\"config[activeIndex].color\" [disabled]=\"config.length < 2\">\n <ion-icon name=\"caret-down-outline\" />\n </ion-button>\n\n <ion-popover trigger=\"btn-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"item px-2 py-3 cursor-pointer border-bottom d-flex gap-2\" *ngFor=\"let c of config; let i = index\" (click)=\"change(i);\">\n <div class=\"icon flex-shrink-0\">\n <ion-icon name=\"checkmark\" *ngIf=\"i === activeIndex\" />\n </div>\n\n <div class=\"flex-grow-1\">\n <div class=\"fw-medium\">{{ c.label }}</div>\n <div class=\"f12 pt-1\" *ngIf=\"c.description\">\n {{ c.description }}\n </div>\n </div>\n </div>\n </ng-template>\n </ion-popover>\n</ng-container>\n", styles: [":host{display:flex}up-btn-loading ::ng-deep ion-button{--border-radius: 4px 0 0 4px}ion-button::part(native){border-radius:0 4px 4px 0;border-left:1px solid rgba(255,255,255,.3)}.item:hover{color:#ed6b26;background:#fef3ee}.item ion-icon{--ionicon-stroke-width: 64px}.item .icon{width:14px}.item .f12{color:#616161}\n"] }]
37
+ ], template: "<ng-container *ngIf=\"config.length > 0\">\n <up-btn-loading class=\"flex-grow-1\" [class.multi]=\"config.length > 1\" [type]=\"config[activeIndex].type\" [disabled]=\"config[activeIndex].disabled\" [form]=\"config[activeIndex].form\" [color]=\"config[activeIndex].color\" (onClick)=\"clickBtn($event);\">\n <ion-icon class=\"me-2\" name=\"{{ config[activeIndex].icon }}\" *ngIf=\"config[activeIndex].icon\" />\n {{ config[activeIndex].label }}\n </up-btn-loading>\n\n <ng-container *ngIf=\"config.length > 1\" >\n <ion-button class=\"flex-shrink-0\" id=\"btn-{{ id }}\" [color]=\"config[activeIndex].color\">\n <ion-icon name=\"caret-down-outline\" />\n </ion-button>\n \n <ion-popover trigger=\"btn-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"item px-2 py-3 cursor-pointer border-bottom d-flex gap-2\" *ngFor=\"let c of config; let i = index\" (click)=\"change(i);\">\n <div class=\"icon flex-shrink-0\">\n <ion-icon name=\"checkmark\" *ngIf=\"i === activeIndex\" />\n </div>\n \n <div class=\"flex-grow-1\">\n <div class=\"fw-medium\">{{ c.label }}</div>\n <div class=\"f12 pt-1\" *ngIf=\"c.description\">\n {{ c.description }}\n </div>\n </div>\n </div>\n </ng-template>\n </ion-popover>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex}up-btn-loading.multi ::ng-deep ion-button{--border-radius: 4px 0 0 4px}ion-button::part(native){border-radius:0 4px 4px 0;border-left:1px solid rgba(255,255,255,.3)}.item:hover{color:#ed6b26;background:#fef3ee}.item ion-icon{--ionicon-stroke-width: 64px}.item .icon{width:14px}.item .f12{color:#616161}\n"] }]
38
38
  }], ctorParameters: () => [{ type: undefined, decorators: [{
39
39
  type: Attribute,
40
40
  args: ['id']
@@ -45,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
45
45
  type: HostBinding,
46
46
  args: ['class.d-none']
47
47
  }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRuLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9idXR0b25zL2dyb3VwL2J0bi1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9ucy9ncm91cC9idG4tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFhMUUsTUFBTSxPQUFPLG9CQUFvQjtJQWtCL0IsWUFNMEIsRUFBVSxFQUNmLFdBQThCO1FBRHpCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFoQlosYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xRCxnQkFBVyxHQUFXLENBQUMsQ0FBQztJQVUzQixDQUFDO0lBRUUsV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFRTSxRQUFRLENBQUMsQ0FBeUI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFRTSxNQUFNLENBQUMsQ0FBUztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBdERVLG9CQUFvQixrQkF3QmxCLElBQUk7a0dBeEJOLG9CQUFvQixzTENqQmpDLDA0Q0EyQkEsc1hEZkksV0FBVyx3Z0JBQ1gsWUFBWSxnUUFDWixzQkFBc0I7OzJGQUdiLG9CQUFvQjtrQkFYaEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sY0FBYyxXQUdmO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixzQkFBc0I7cUJBQ3ZCOzswQkEwQkUsU0FBUzsyQkFBQyxJQUFJO3lFQWhCaUIsTUFBTTtzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2MsUUFBUTtzQkFBOUMsV0FBVzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElvbmljTW9kdWxlLCBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2J0bi1ncm91cC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1dHRvbkxvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nL2J0bi1sb2FkaW5nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLWJ0bi1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9idG4tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idG4tZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIElvbmljTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBCdXR0b25Mb2FkaW5nQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXBDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGN1c3RvbWl6aW5nIGJ1dHRvbiBncm91cCBwcm9wZXJ0aWVzLiBUaGlzXG4gICAqIG9iamVjdCBkZWZpbmVkIGJ5IEJ1dHRvbkdyb3VwQ29uZmlnIGludGVyZmFjZSBhbGxvd3Mgc3BlY2lmeWluZyBidXR0b24gc3VjaCBhcyBpY29uLFxuICAgKiBjb2xvciwgZGVzY3JpcHRpb24sIGRpc2FibGVkLCBmb3JtLCBsYWJlbCwgYW5kIHR5cGVcbiAgICogQHR5cGUge0J1dHRvbkdyb3VwQ29uZmlnW119XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29uZmlnITogQnV0dG9uR3JvdXBDb25maWdbXTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kLW5vbmUnKSBwcm90ZWN0ZWQgaXNIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmbGFnIHZhcmlhYmxlIHRoYXQgdXNlZCB0byBjb250cm9sIHNob3dlZCBidXR0b24uIFdoZW4gc2V0IGEgbmV3IHZhbHVlLCBjdXJyZW50IGJ1dHRvblxuICAgKiBpcyBoaWRkZW4gYW5kIGFuZCBhIG5ldyBidXR0b24gaXMgc2hvd24uIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIHB1YmxpYyBhY3RpdmVJbmRleDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBBbiBpZGVudGlmaWVyIHRoYXQgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhbiBIVE1MIGVsZW1lbnQgc3VjaCBhcyBhIGlvbi1idXR0b24gYW5kXG4gICAgICogYSBpb24tcG9wb3Zlci5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIEBBdHRyaWJ1dGUoJ2lkJykgcHVibGljIGlkOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBvcG92ZXJDdHJsOiBQb3BvdmVyQ29udHJvbGxlclxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmNvbmZpZy5sZW5ndGggPD0gMDtcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwO1xuICAgIH0gXG4gIH1cblxuICAvKipcbiAgICogQSBtZXRob2QgdGhhdCBleGVjdXRlcyBhbm90aGVyIG1ldGhvZCBpbnNpZGUgYWN0aXZlIGJ1dHRvbiBkZWZpbmVkIHdpdGhpbiBCdXR0b25Hcm91cENvbmZpZ1xuICAgKiBpbnRlcmZhY2UgYWZ0ZXIgYSBidXR0b24gaXMgY2xpY2tlZC4gSXQgcmVjZWl2ZXMgYSBCdXR0b25Mb2FkaW5nQ29tcG9uZW50IGFzIGEgcGFyYW1ldGVyXG4gICAqIGFsbG93aW5nIG1vZGlmaWNhdGlvbiBvZiB0aGUgYWN0aXZlIGJ1dHRvbi5cbiAgICogQHBhcmFtIHtCdXR0b25Mb2FkaW5nQ29tcG9uZW50fSBiIC0gQ29udGFpbiB2YWx1ZXMgZnJvbSBjdXJyZW50IGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBjbGlja0J0bihiOiBCdXR0b25Mb2FkaW5nQ29tcG9uZW50KTogdm9pZHtcbiAgICB0aGlzLmNvbmZpZ1t0aGlzLmFjdGl2ZUluZGV4XS5vbkNsaWNrKGIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgbWV0aG9kIHRoYXQgY2hhbmdlIHZhcmlhYmxlIGFjdGl2ZUluZGV4IHZhbHVlIHRvIGN1cnJlbnQgaW5kZXggb2YgdGhlIGFjdGl2ZSBidXR0b24gYW5kIGRpc21pc3NcbiAgICogcG9wb3Zlci4gSXQgcmVjZWl2ZXMgYSBudW1iZXIgdmFyaWFibGUgYXMgYSBwYXJhbWV0ZXIgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIHdpbGwgYmUgc2V0XG4gICAqIHRvIHZhcmlhYmxlIGFjdGl2ZUluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAtIE5ldyBpbmRleCBvZiB0aGUgYWN0aXZlIGJ1dHRvbi5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2UoaTogbnVtYmVyKTogdm9pZHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaTtcbiAgICB0aGlzLnBvcG92ZXJDdHJsLmRpc21pc3MoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5sZW5ndGggPiAwXCI+XG4gICAgPHVwLWJ0bi1sb2FkaW5nIGNsYXNzPVwiZmxleC1ncm93LTFcIiBbdHlwZV09XCJjb25maWdbYWN0aXZlSW5kZXhdLnR5cGVcIiBbZGlzYWJsZWRdPVwiY29uZmlnW2FjdGl2ZUluZGV4XS5kaXNhYmxlZFwiIFtmb3JtXT1cImNvbmZpZ1thY3RpdmVJbmRleF0uZm9ybVwiIFtjb2xvcl09XCJjb25maWdbYWN0aXZlSW5kZXhdLmNvbG9yXCIgKG9uQ2xpY2spPVwiY2xpY2tCdG4oJGV2ZW50KTtcIj5cbiAgICAgICAgPGlvbi1pY29uIGNsYXNzPVwibWUtMlwiIG5hbWU9XCJ7eyBjb25maWdbYWN0aXZlSW5kZXhdLmljb24gfX1cIiAqbmdJZj1cImNvbmZpZ1thY3RpdmVJbmRleF0uaWNvblwiIC8+XG4gICAgICAgIHt7IGNvbmZpZ1thY3RpdmVJbmRleF0ubGFiZWwgfX1cbiAgICA8L3VwLWJ0bi1sb2FkaW5nPlxuXG4gICAgPGlvbi1idXR0b24gY2xhc3M9XCJmbGV4LXNocmluay0wXCIgaWQ9XCJidG4te3sgaWQgfX1cIiBbY29sb3JdPVwiY29uZmlnW2FjdGl2ZUluZGV4XS5jb2xvclwiIFtkaXNhYmxlZF09XCJjb25maWcubGVuZ3RoIDwgMlwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNhcmV0LWRvd24tb3V0bGluZVwiIC8+XG4gICAgPC9pb24tYnV0dG9uPlxuXG4gICAgPGlvbi1wb3BvdmVyIHRyaWdnZXI9XCJidG4te3sgaWQgfX1cIiB0cmlnZ2VyQWN0aW9uPVwiY2xpY2tcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHgtMiBweS0zIGN1cnNvci1wb2ludGVyIGJvcmRlci1ib3R0b20gZC1mbGV4IGdhcC0yXCIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cImNoYW5nZShpKTtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbiBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrXCIgKm5nSWY9XCJpID09PSBhY3RpdmVJbmRleFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LW1lZGl1bVwiPnt7IGMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImYxMiBwdC0xXCIgKm5nSWY9XCJjLmRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24tcG9wb3Zlcj5cbjwvbmctY29udGFpbmVyPlxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRuLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9idXR0b25zL2dyb3VwL2J0bi1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9ucy9ncm91cC9idG4tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFhMUUsTUFBTSxPQUFPLG9CQUFvQjtJQWtCL0IsWUFNMEIsRUFBVSxFQUNmLFdBQThCO1FBRHpCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFoQlosYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xRCxnQkFBVyxHQUFXLENBQUMsQ0FBQztJQVUzQixDQUFDO0lBRUUsV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFRTSxRQUFRLENBQUMsQ0FBeUI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFRTSxNQUFNLENBQUMsQ0FBUztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBdERVLG9CQUFvQixrQkF3QmxCLElBQUk7a0dBeEJOLG9CQUFvQixzTENqQmpDLG1pREE2QkEsNFhEakJJLFdBQVcsd2dCQUNYLFlBQVksZ1FBQ1osc0JBQXNCOzsyRkFHYixvQkFBb0I7a0JBWGhDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGNBQWMsV0FHZjt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osc0JBQXNCO3FCQUN2Qjs7MEJBMEJFLFNBQVM7MkJBQUMsSUFBSTt5RUFoQmlCLE1BQU07c0JBQXZDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNjLFFBQVE7c0JBQTlDLFdBQVc7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25pY01vZHVsZSwgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9idG4tZ3JvdXAtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCdXR0b25Mb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGluZy9idG4tbG9hZGluZy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1idG4tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vYnRuLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnRuLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQnV0dG9uTG9hZGluZ0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwQ29tcG9uZW50IHtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBjdXN0b21pemluZyBidXR0b24gZ3JvdXAgcHJvcGVydGllcy4gVGhpc1xuICAgKiBvYmplY3QgZGVmaW5lZCBieSBCdXR0b25Hcm91cENvbmZpZyBpbnRlcmZhY2UgYWxsb3dzIHNwZWNpZnlpbmcgYnV0dG9uIHN1Y2ggYXMgaWNvbixcbiAgICogY29sb3IsIGRlc2NyaXB0aW9uLCBkaXNhYmxlZCwgZm9ybSwgbGFiZWwsIGFuZCB0eXBlXG4gICAqIEB0eXBlIHtCdXR0b25Hcm91cENvbmZpZ1tdfVxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGNvbmZpZyE6IEJ1dHRvbkdyb3VwQ29uZmlnW107XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1ub25lJykgcHJvdGVjdGVkIGlzSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29udHJvbCBzaG93ZWQgYnV0dG9uLiBXaGVuIHNldCBhIG5ldyB2YWx1ZSwgY3VycmVudCBidXR0b25cbiAgICogaXMgaGlkZGVuIGFuZCBhbmQgYSBuZXcgYnV0dG9uIGlzIHNob3duLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBwdWJsaWMgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogQW4gaWRlbnRpZmllciB0aGF0IHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gSFRNTCBlbGVtZW50IHN1Y2ggYXMgYSBpb24tYnV0dG9uIGFuZFxuICAgICAqIGEgaW9uLXBvcG92ZXIuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBAQXR0cmlidXRlKCdpZCcpIHB1YmxpYyBpZDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwb3BvdmVyQ3RybDogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWR7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XG4gICAgICB0aGlzLmlzSGlkZGVuID0gdGhpcy5jb25maWcubGVuZ3RoIDw9IDA7XG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICB9IFxuICB9XG5cbiAgLyoqXG4gICAqIEEgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgYW5vdGhlciBtZXRob2QgaW5zaWRlIGFjdGl2ZSBidXR0b24gZGVmaW5lZCB3aXRoaW4gQnV0dG9uR3JvdXBDb25maWdcbiAgICogaW50ZXJmYWNlIGFmdGVyIGEgYnV0dG9uIGlzIGNsaWNrZWQuIEl0IHJlY2VpdmVzIGEgQnV0dG9uTG9hZGluZ0NvbXBvbmVudCBhcyBhIHBhcmFtZXRlclxuICAgKiBhbGxvd2luZyBtb2RpZmljYXRpb24gb2YgdGhlIGFjdGl2ZSBidXR0b24uXG4gICAqIEBwYXJhbSB7QnV0dG9uTG9hZGluZ0NvbXBvbmVudH0gYiAtIENvbnRhaW4gdmFsdWVzIGZyb20gY3VycmVudCBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgY2xpY2tCdG4oYjogQnV0dG9uTG9hZGluZ0NvbXBvbmVudCk6IHZvaWR7XG4gICAgdGhpcy5jb25maWdbdGhpcy5hY3RpdmVJbmRleF0ub25DbGljayhiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1ldGhvZCB0aGF0IGNoYW5nZSB2YXJpYWJsZSBhY3RpdmVJbmRleCB2YWx1ZSB0byBjdXJyZW50IGluZGV4IG9mIHRoZSBhY3RpdmUgYnV0dG9uIGFuZCBkaXNtaXNzXG4gICAqIHBvcG92ZXIuIEl0IHJlY2VpdmVzIGEgbnVtYmVyIHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyIGFuZCB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciB3aWxsIGJlIHNldFxuICAgKiB0byB2YXJpYWJsZSBhY3RpdmVJbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgLSBOZXcgaW5kZXggb2YgdGhlIGFjdGl2ZSBidXR0b24uXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlKGk6IG51bWJlcik6IHZvaWR7XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IGk7XG4gICAgdGhpcy5wb3BvdmVyQ3RybC5kaXNtaXNzKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcubGVuZ3RoID4gMFwiPlxuICAgIDx1cC1idG4tbG9hZGluZyBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgW2NsYXNzLm11bHRpXT1cImNvbmZpZy5sZW5ndGggPiAxXCIgW3R5cGVdPVwiY29uZmlnW2FjdGl2ZUluZGV4XS50eXBlXCIgW2Rpc2FibGVkXT1cImNvbmZpZ1thY3RpdmVJbmRleF0uZGlzYWJsZWRcIiBbZm9ybV09XCJjb25maWdbYWN0aXZlSW5kZXhdLmZvcm1cIiBbY29sb3JdPVwiY29uZmlnW2FjdGl2ZUluZGV4XS5jb2xvclwiIChvbkNsaWNrKT1cImNsaWNrQnRuKCRldmVudCk7XCI+XG4gICAgICAgIDxpb24taWNvbiBjbGFzcz1cIm1lLTJcIiBuYW1lPVwie3sgY29uZmlnW2FjdGl2ZUluZGV4XS5pY29uIH19XCIgKm5nSWY9XCJjb25maWdbYWN0aXZlSW5kZXhdLmljb25cIiAvPlxuICAgICAgICB7eyBjb25maWdbYWN0aXZlSW5kZXhdLmxhYmVsIH19XG4gICAgPC91cC1idG4tbG9hZGluZz5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcubGVuZ3RoID4gMVwiID5cbiAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJmbGV4LXNocmluay0wXCIgaWQ9XCJidG4te3sgaWQgfX1cIiBbY29sb3JdPVwiY29uZmlnW2FjdGl2ZUluZGV4XS5jb2xvclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjYXJldC1kb3duLW91dGxpbmVcIiAvPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgXG4gICAgICAgIDxpb24tcG9wb3ZlciB0cmlnZ2VyPVwiYnRuLXt7IGlkIH19XCIgdHJpZ2dlckFjdGlvbj1cImNsaWNrXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHgtMiBweS0zIGN1cnNvci1wb2ludGVyIGJvcmRlci1ib3R0b20gZC1mbGV4IGdhcC0yXCIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cImNoYW5nZShpKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24gZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmtcIiAqbmdJZj1cImkgPT09IGFjdGl2ZUluZGV4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LW1lZGl1bVwiPnt7IGMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmMTIgcHQtMVwiICpuZ0lmPVwiYy5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvaW9uLXBvcG92ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -23,10 +23,10 @@ export class ButtonLoadingComponent {
23
23
  this.btn.disabled = !this.btn.disabled;
24
24
  this.ch.markForCheck();
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonLoadingComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ButtonLoadingComponent, isStandalone: true, selector: "up-btn-loading", inputs: { disabled: "disabled", form: "form", type: "type", fill: "fill", color: "color" }, outputs: { onClick: "onClick" }, viewQueries: [{ propertyName: "btn", first: true, predicate: IonButton, descendants: true }], ngImport: i0, template: "<ion-button type=\"{{ type }}\" fill=\"{{ fill }}\" color=\"{{ color }}\" expand=\"block\" mode=\"md\" [disabled]=\"disabled\" [form]=\"form\" (click)=\"clickBtn()\">\n <ion-spinner *ngIf=\"isLoading;else showIcon\" />\n \n <ng-template #showIcon>\n <ng-content select=\"ion-icon\" />\n </ng-template>\n\n <ng-content />\n</ion-button>\n", styles: ["ion-spinner{width:14px;height:14px;margin-right:8px}circle{stroke-width:8}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ButtonLoadingComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ButtonLoadingComponent, isStandalone: true, selector: "up-btn-loading", inputs: { disabled: "disabled", form: "form", type: "type", fill: "fill", color: "color" }, outputs: { onClick: "onClick" }, viewQueries: [{ propertyName: "btn", first: true, predicate: IonButton, descendants: true }], ngImport: i0, template: "<ion-button type=\"{{ type }}\" fill=\"{{ fill }}\" color=\"{{ color }}\" expand=\"block\" mode=\"md\" [disabled]=\"disabled\" [form]=\"form\" (click)=\"clickBtn()\">\n <ion-spinner *ngIf=\"isLoading;else showIcon\" />\n \n <ng-template #showIcon>\n <ng-content select=\"ion-icon\" />\n </ng-template>\n\n <ng-content />\n</ion-button>\n", styles: ["ion-spinner{width:14px;height:14px;margin-right:8px}circle{stroke-width:8}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ButtonLoadingComponent, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ButtonLoadingComponent, decorators: [{
30
30
  type: Component,
31
31
  args: [{ standalone: true, selector: 'up-btn-loading', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
32
32
  IonicModule,
@@ -2,29 +2,42 @@ import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { RouterModule } from '@angular/router';
4
4
  import { IonicModule } from '@ionic/angular';
5
+ import { fromEvent } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "../../../modules";
7
8
  import * as i2 from "@ionic/angular";
8
9
  import * as i3 from "@angular/router";
9
10
  import * as i4 from "@angular/common";
10
11
  export class AppletContainerComponent {
11
- constructor(config, permissionService) {
12
+ constructor(config, ch, permissionService) {
12
13
  this.config = config;
14
+ this.ch = ch;
13
15
  this.permissionService = permissionService;
14
16
  this.isCollapsed = false;
15
17
  this.isHidden = Array(this.config.containers.length).fill(true);
18
+ this.isMenuActive = false;
16
19
  }
17
20
  ngOnInit() {
18
21
  this.sub = this.permissionService.permModules.subscribe((permModules) => {
19
22
  this.isHidden = this.config.containers.map(({ permModule }) => !permModules.includes(permModule));
20
23
  });
24
+ this.subEvent = fromEvent(window, 'menuEvent').subscribe((event) => {
25
+ this.isMenuActive = event.detail.isActive;
26
+ this.ch.markForCheck();
27
+ });
28
+ }
29
+ ngOnDestroy() {
30
+ this.sub.unsubscribe();
31
+ this.subEvent.unsubscribe();
21
32
  }
22
- ngOnDestroy() { this.sub.unsubscribe(); }
23
33
  toggleSidenav() { this.isCollapsed = !this.isCollapsed; }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AppletContainerComponent, deps: [{ token: 'APPLET_CONFIG' }, { token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top\" *ngIf=\"config.enabledSetting\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ selectMenu() {
35
+ dispatchEvent(new CustomEvent('menuEvent', { detail: { isActive: false } }));
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AppletContainerComponent, deps: [{ token: 'APPLET_CONFIG' }, { token: i0.ChangeDetectorRef }, { token: i1.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: AppletContainerComponent, isStandalone: true, selector: "up-applet-container", host: { classAttribute: "d-flex h-100 w-100" }, ngImport: i0, template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
39
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: AppletContainerComponent, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AppletContainerComponent, decorators: [{
28
41
  type: Component,
29
42
  args: [{ standalone: true, selector: 'up-applet-container', changeDetection: ChangeDetectionStrategy.OnPush, host: {
30
43
  class: 'd-flex h-100 w-100'
@@ -32,9 +45,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
32
45
  IonicModule,
33
46
  RouterModule,
34
47
  CommonModule
35
- ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top\" *ngIf=\"config.enabledSetting\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}\n"] }]
48
+ ], template: "<div class=\"sidenav flex-shrink-0 h-100 py-4 d-flex flex-column\" [class.collapsed]=\"isCollapsed\" [class.show]=\"isMenuActive\">\n <div class=\"logo-container px-3 pb-3 border-bottom flex-shrink-0 position-relative d-flex align-items-center gap-3 d-none d-md-flex\">\n <img alt=\"Applet Icon\" width=\"44px\" height=\"44px\" class=\"rounded\" [src]=\"config.icon\" />\n\n <div class=\"info w-75 pe-2\">\n <div class=\"name fw-medium text-truncate\">{{ config.name }}</div>\n <div class=\"tenant pt-1 fw-medium\">v{{ config.version }}</div>\n </div>\n\n <button class=\"btn-close cursor-pointer position-absolute border-0 rounded-circle d-none d-md-block\" (click)=\"toggleSidenav()\">\n <ion-icon name=\"chevron-forward\" class=\"mt-1\" />\n </button>\n </div>\n\n <div class=\"flex-grow-1 px-3 pt-3 overflow-y-auto d-none d-md-block\" (click)=\"selectMenu()\">\n <a class=\"nav align-items-center text-decoration-none gap-2 rounded mb-1 {{ isHidden[i]? 'd-none' : 'd-flex' }}\" title=\"{{ c.label }}\" [routerLink]=\"c.path\" routerLinkActive=\"fw-medium\" *ngFor=\"let c of config.containers; let i = index\">\n <ion-icon name=\"{{ c.icon }}\" />\n <div class=\"text-truncate\">{{ c.label }}</div>\n </a>\n </div>\n\n <div class=\"flex-shrink-0 px-3 pt-3 border-top d-none d-md-block\" *ngIf=\"config.enabledSetting\" (click)=\"selectMenu()\">\n <a class=\"nav d-flex align-items-center text-decoration-none gap-2 rounded\" title=\"Setting\" routerLink=\"setting\" routerLinkActive=\"fw-medium\">\n <ion-icon name=\"settings\" />\n <div class=\"text-truncate\">Setting</div>\n </a>\n </div>\n</div>\n\n<div class=\"flex-grow-1 overflow-y-auto\">\n <ng-content />\n</div>\n", styles: [".info{display:none}.name{font-size:16px}.tenant{color:#757575}.sidenav{width:73px;background:#f8f9fb;transition:all .2s ease;border-right:1px solid #D1D1D1}.sidenav.collapsed{width:250px}.sidenav.collapsed .btn-close{transform:rotate(180deg)}.sidenav.collapsed .nav div,.sidenav.collapsed .info{display:block}.sidenav.show{width:250px}.sidenav.show .logo-container{display:flex!important}.sidenav.show div:not(.logo-container),.sidenav.show img,.sidenav.show .info{display:block!important}.btn-close{width:35px;height:35px;bottom:23px;right:-17px;z-index:999;transition:all .3s ease;background-color:#f8f9fb;box-shadow:0 0 .15rem #616161}.btn-close ion-icon{color:#616161;font-size:16px}@media (max-width: 768px){.btn-close{right:-18px}.btn-close ion-icon{position:absolute;right:9px;bottom:10px}}.nav{padding:12px;color:#616161;transition:all .3s ease}.nav.fw-medium,.nav:hover{background-color:#fef3ee;color:#ed6b26!important}.nav ion-icon{font-size:20px}.nav div{display:none;font-size:16px}@media (max-width: 767px){.sidenav{width:0;z-index:2;position:absolute!important}}\n"] }]
36
49
  }], ctorParameters: () => [{ type: undefined, decorators: [{
37
50
  type: Inject,
38
51
  args: ['APPLET_CONFIG']
39
- }] }, { type: i1.PermissionService }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGV0LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9hcHBsZXQtY29udGFpbmVyL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvYXBwbGV0LWNvbnRhaW5lci9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBbUI3QyxNQUFNLE9BQU8sd0JBQXdCO0lBaUJuQyxZQUMyQyxNQU94QyxFQUNrQixpQkFBb0M7UUFSZCxXQUFNLEdBQU4sTUFBTSxDQU85QztRQUNrQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbkJsRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQU83QixhQUFRLEdBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQWF6RSxDQUFDO0lBRUUsUUFBUTtRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFxQixFQUFFLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLEtBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFPL0MsYUFBYSxLQUFVLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs4R0ExQzFELHdCQUF3QixrQkFrQnpCLGVBQWU7a0dBbEJkLHdCQUF3QiwrSEN0QnJDLHlwREFnQ0EseTJCRGZJLFdBQVcsMlNBQ1gsWUFBWSxnZkFDWixZQUFZOzsyRkFHSCx3QkFBd0I7a0JBZnBDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7OzBCQW9CRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL21vZHVsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1hcHBsZXQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWZsZXggaC0xMDAgdy0xMDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGV0Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBBIGZsYWcgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGNvbnRyb2wgc2lkZWJhci4gV2hlbiBzZXQgdGhlIHRoZSB2YWx1ZSB0byB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgb3BlbiB0aGUgc2lkZWJhci5cbiAgICogd2hlbiBzZXQgdGhlIHZhbHVlIHRvIGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgY2xvc2UgdGhlIHNpZGViYXIuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29udHJvbCBzaWRlYmFyIG1lbnUuIFdoZW4gc2V0IHZhbHVlIHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBoaWRlIHRoZSBzaWRlYmFyIG1lbnUuXG4gICAqIFdoZW4gc2V0IGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hvdyB0aGUgc2lkZWJhciBtZW51LlxuICAgKiBAdHlwZSB7Ym9vbGVhbltdfVxuICAgKi9cbiAgcHVibGljIGlzSGlkZGVuOiBib29sZWFuW10gPSBBcnJheSh0aGlzLmNvbmZpZy5jb250YWluZXJzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgcHJvdGVjdGVkIHN1YiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdBUFBMRVRfQ09ORklHJykgcHVibGljIHJlYWRvbmx5IGNvbmZpZzoge1xuICAgICAgaWNvbjogc3RyaW5nLFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdGVuYW50TmFtZTogc3RyaW5nLFxuICAgICAgZW5hYmxlZFNldHRpbmc6IGJvb2xlYW4sXG4gICAgICBjb250YWluZXJzOiB7IGljb246IHN0cmluZywgbGFiZWw6IHN0cmluZywgcGF0aDogYC8keyBzdHJpbmcgfWAsIHBlcm1Nb2R1bGU6IHN0cmluZyB9W10sXG4gICAgICB2ZXJzaW9uOiBzdHJpbmdcbiAgICB9LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWIgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnBlcm1Nb2R1bGVzLnN1YnNjcmliZSgocGVybU1vZHVsZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICB0aGlzLmlzSGlkZGVuID0gdGhpcy5jb25maWcuY29udGFpbmVycy5tYXAoKHsgcGVybU1vZHVsZSB9KSA9PiAhcGVybU1vZHVsZXMuaW5jbHVkZXMocGVybU1vZHVsZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQgeyB0aGlzLnN1Yi51bnN1YnNjcmliZSgpOyB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIGl0IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZSBvZiBpc0NvbGxhcHNlZCB0byBpdHMgb3Bwb3NpdGUgdmFsdWUuIFxuICAgKiBJZiBpc0NvbGxhcHNlZCBpcyBjdXJyZW50bHkgdHJ1ZSwgaXQgd2lsbCBiZSBzZXQgdG8gZmFsc2UsIGFuZCBpZiBpdCBpcyBjdXJyZW50bHkgZmFsc2UsIGl0IHdpbGwgYmUgc2V0IHRvIHRydWUuIFxuICAgKiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCB0byB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgYSBzaWRlIG5hdmlnYXRpb24gbWVudS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVTaWRlbmF2KCk6IHZvaWR7IHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDsgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNpZGVuYXYgZmxleC1zaHJpbmstMCBoLTEwMCBweS00IGQtZmxleCBmbGV4LWNvbHVtblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXIgcHgtMyBwYi0zIGJvcmRlci1ib3R0b20gZmxleC1zaHJpbmstMCBwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDxpbWcgYWx0PVwiQXBwbGV0IEljb25cIiB3aWR0aD1cIjQ0cHhcIiBoZWlnaHQ9XCI0NHB4XCIgY2xhc3M9XCJyb3VuZGVkXCIgW3NyY109XCJjb25maWcuaWNvblwiIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8gdy03NSBwZS0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSBmdy1tZWRpdW0gdGV4dC10cnVuY2F0ZVwiPnt7IGNvbmZpZy5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVuYW50IHB0LTEgZnctbWVkaXVtXCI+dnt7IGNvbmZpZy52ZXJzaW9uIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2xvc2UgY3Vyc29yLXBvaW50ZXIgcG9zaXRpb24tYWJzb2x1dGUgYm9yZGVyLTAgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwidG9nZ2xlU2lkZW5hdigpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tZm9yd2FyZFwiIGNsYXNzPVwibXQtMVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHB4LTMgcHQtMyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYgYWxpZ24taXRlbXMtY2VudGVyIHRleHQtZGVjb3JhdGlvbi1ub25lIGdhcC0yIHJvdW5kZWQgbWItMSB7eyBpc0hpZGRlbltpXT8gJ2Qtbm9uZScgOiAnZC1mbGV4JyB9fVwiIHRpdGxlPVwie3sgYy5sYWJlbCB9fVwiIFtyb3V0ZXJMaW5rXT1cImMucGF0aFwiIHJvdXRlckxpbmtBY3RpdmU9XCJmdy1tZWRpdW1cIiAqbmdGb3I9XCJsZXQgYyBvZiBjb25maWcuY29udGFpbmVyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ7eyBjLmljb24gfX1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjLmxhYmVsIH19PC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB4LTMgcHQtMyBib3JkZXItdG9wXCIgKm5nSWY9XCJjb25maWcuZW5hYmxlZFNldHRpbmdcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LWRlY29yYXRpb24tbm9uZSBnYXAtMiByb3VuZGVkXCIgdGl0bGU9XCJTZXR0aW5nXCIgcm91dGVyTGluaz1cInNldHRpbmdcIiByb3V0ZXJMaW5rQWN0aXZlPVwiZnctbWVkaXVtXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNldHRpbmdzXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+U2V0dGluZzwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cbiJdfQ==
52
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.PermissionService }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGV0LWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9hcHBsZXQtY29udGFpbmVyL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvYXBwbGV0LWNvbnRhaW5lci9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQWtCL0MsTUFBTSxPQUFPLHdCQUF3QjtJQXlCbkMsWUFDMkMsTUFPeEMsRUFDa0IsRUFBcUIsRUFDckIsaUJBQW9DO1FBVGQsV0FBTSxHQUFOLE1BQU0sQ0FPOUM7UUFDa0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTVCbEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFPN0IsYUFBUSxHQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFPdEUsaUJBQVksR0FBWSxLQUFLLENBQUM7SUFlakMsQ0FBQztJQU1FLFFBQVE7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBcUIsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDdEUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQU1NLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFPTSxhQUFhLEtBQVUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBUTlELFVBQVU7UUFDZixhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7OEdBN0VVLHdCQUF3QixrQkEwQnpCLGVBQWU7a0dBMUJkLHdCQUF3QiwrSEN0QnJDLGd6REFnQ0EsK21DRGZJLFdBQVcsMlNBQ1gsWUFBWSxnZkFDWixZQUFZOzsyRkFHSCx3QkFBd0I7a0JBZnBDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7OzBCQTRCRSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL21vZHVsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1hcHBsZXQtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxldC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsZXQtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWZsZXggaC0xMDAgdy0xMDAnXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGV0Q29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBBIGZsYWcgdmFyaWFibGUgdGhhdCB1c2VkIHRvIGNvbnRyb2wgc2lkZWJhci4gV2hlbiBzZXQgdGhlIHRoZSB2YWx1ZSB0byB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgb3BlbiB0aGUgc2lkZWJhci5cbiAgICogd2hlbiBzZXQgdGhlIHZhbHVlIHRvIGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgY2xvc2UgdGhlIHNpZGViYXIuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGlzQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgZmxhZyB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gY29udHJvbCBzaWRlYmFyIG1lbnUuIFdoZW4gc2V0IHZhbHVlIHRvIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCBoaWRlIHRoZSBzaWRlYmFyIG1lbnUuXG4gICAqIFdoZW4gc2V0IGZhbHNlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hvdyB0aGUgc2lkZWJhciBtZW51LlxuICAgKiBAdHlwZSB7Ym9vbGVhbltdfVxuICAgKi9cbiAgcHVibGljIGlzSGlkZGVuOiBib29sZWFuW10gPSBBcnJheSh0aGlzLmNvbmZpZy5jb250YWluZXJzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgXG4gIC8qKlxuICAgKiBBIGZsYWcgdmFyaWFibGUgZm9yIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzaWRlYmFyIG1lbnUgaXMgYWN0aXZlIG9yIG5vdCBpbiBtb2JpbGUgdmlldy5cbiAgICogV2hlbiBzZXQgZmFsc2UgdGhlIHNpZGViYXIgbWVudSB3aWxsIGJlIGhpZGRlblxuICAgKiBAdHlwZSB7Ym9vbGVhbltdfVxuICAgKi9cbiAgcHVibGljIGlzTWVudUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc3ViITogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgc3ViRXZlbnQhOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnQVBQTEVUX0NPTkZJRycpIHB1YmxpYyByZWFkb25seSBjb25maWc6IHtcbiAgICAgIGljb246IHN0cmluZyxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHRlbmFudE5hbWU6IHN0cmluZyxcbiAgICAgIGVuYWJsZWRTZXR0aW5nOiBib29sZWFuLFxuICAgICAgY29udGFpbmVyczogeyBpY29uOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIHBhdGg6IGAvJHsgc3RyaW5nIH1gLCBwZXJtTW9kdWxlOiBzdHJpbmcgfVtdLFxuICAgICAgdmVyc2lvbjogc3RyaW5nXG4gICAgfSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7IH1cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgdG8gaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50cy5cbiAgICogU3Vic2NyaWJlcyB0byBwZXJtaXNzaW9uIGNoYW5nZXMgYW5kIHdpbmRvdyBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZHtcbiAgICB0aGlzLnN1YiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UucGVybU1vZHVsZXMuc3Vic2NyaWJlKChwZXJtTW9kdWxlczogc3RyaW5nW10pID0+IHtcbiAgICAgIHRoaXMuaXNIaWRkZW4gPSB0aGlzLmNvbmZpZy5jb250YWluZXJzLm1hcCgoeyBwZXJtTW9kdWxlIH0pID0+ICFwZXJtTW9kdWxlcy5pbmNsdWRlcyhwZXJtTW9kdWxlKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YkV2ZW50ID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lbnVFdmVudCcpLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5pc01lbnVBY3RpdmUgPSBldmVudC5kZXRhaWwuaXNBY3RpdmU7XG4gICAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpZmVjeWNsZSBob29rIHRvIGhhbmRsZSBjb21wb25lbnQgZGVzdHJ1Y3Rpb24uXG4gICAqIENsZWFucyB1cCBzdWJzY3JpcHRpb25zIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZHsgXG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YkV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgaXQgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGlzQ29sbGFwc2VkIHRvIGl0cyBvcHBvc2l0ZSB2YWx1ZS4gXG4gICAqIElmIGlzQ29sbGFwc2VkIGlzIGN1cnJlbnRseSB0cnVlLCBpdCB3aWxsIGJlIHNldCB0byBmYWxzZSwgYW5kIGlmIGl0IGlzIGN1cnJlbnRseSBmYWxzZSwgaXQgd2lsbCBiZSBzZXQgdG8gdHJ1ZS4gXG4gICAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIHRvIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBhIHNpZGUgbmF2aWdhdGlvbiBtZW51LlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNpZGVuYXYoKTogdm9pZHsgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkOyB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbWVudSBzZWxlY3Rpb24gYnkgZGlzcGF0Y2hpbmcgYSBjdXN0b20gZXZlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGEgc2lkZWJhciBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqIEl0IGRpc3BhdGNoZXMgYSBjdXN0b20gJ21lbnVFdmVudCcgd2l0aCBkZXRhaWwgaW5kaWNhdGluZyB0aGUgbWVudSBpcyBpbmFjdGl2ZS5cbiAgICogVGhpcyBldmVudCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjbG9zZSB0aGUgc2lkZWJhciBtZW51LlxuICAgKi9cbiAgcHVibGljIHNlbGVjdE1lbnUoKTogdm9pZHtcbiAgICBkaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWVudUV2ZW50JywgeyBkZXRhaWw6IHsgaXNBY3RpdmU6IGZhbHNlIH0gfSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2lkZW5hdiBmbGV4LXNocmluay0wIGgtMTAwIHB5LTQgZC1mbGV4IGZsZXgtY29sdW1uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiIFtjbGFzcy5zaG93XT1cImlzTWVudUFjdGl2ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lciBweC0zIHBiLTMgYm9yZGVyLWJvdHRvbSBmbGV4LXNocmluay0wIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICA8aW1nIGFsdD1cIkFwcGxldCBJY29uXCIgd2lkdGg9XCI0NHB4XCIgaGVpZ2h0PVwiNDRweFwiIGNsYXNzPVwicm91bmRlZFwiIFtzcmNdPVwiY29uZmlnLmljb25cIiAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvIHctNzUgcGUtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUgZnctbWVkaXVtIHRleHQtdHJ1bmNhdGVcIj57eyBjb25maWcubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRlbmFudCBwdC0xIGZ3LW1lZGl1bVwiPnZ7eyBjb25maWcudmVyc2lvbiB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNsb3NlIGN1cnNvci1wb2ludGVyIHBvc2l0aW9uLWFic29sdXRlIGJvcmRlci0wIHJvdW5kZWQtY2lyY2xlIGQtbm9uZSBkLW1kLWJsb2NrXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGVuYXYoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmRcIiBjbGFzcz1cIm10LTFcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBweC0zIHB0LTMgb3ZlcmZsb3cteS1hdXRvIGQtbm9uZSBkLW1kLWJsb2NrXCIgKGNsaWNrKT1cInNlbGVjdE1lbnUoKVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZ2FwLTIgcm91bmRlZCBtYi0xIHt7IGlzSGlkZGVuW2ldPyAnZC1ub25lJyA6ICdkLWZsZXgnIH19XCIgdGl0bGU9XCJ7eyBjLmxhYmVsIH19XCIgW3JvdXRlckxpbmtdPVwiYy5wYXRoXCIgcm91dGVyTGlua0FjdGl2ZT1cImZ3LW1lZGl1bVwiICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZy5jb250YWluZXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInt7IGMuaWNvbiB9fVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7IGMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgcHgtMyBwdC0zIGJvcmRlci10b3AgZC1ub25lIGQtbWQtYmxvY2tcIiAqbmdJZj1cImNvbmZpZy5lbmFibGVkU2V0dGluZ1wiIChjbGljayk9XCJzZWxlY3RNZW51KClcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJuYXYgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LWRlY29yYXRpb24tbm9uZSBnYXAtMiByb3VuZGVkXCIgdGl0bGU9XCJTZXR0aW5nXCIgcm91dGVyTGluaz1cInNldHRpbmdcIiByb3V0ZXJMaW5rQWN0aXZlPVwiZnctbWVkaXVtXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNldHRpbmdzXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+U2V0dGluZzwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cbiJdfQ==
@@ -5,20 +5,20 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "@ionic/angular";
6
6
  import * as i2 from "@angular/router";
7
7
  export class ColumnHeaderContainerComponent {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ColumnHeaderContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: ColumnHeaderContainerComponent, isStandalone: true, selector: "up-column-header-container", inputs: { header: "header", prevUrl: "prevUrl" }, host: { classAttribute: "d-flex flex-column h-100" }, ngImport: i0, template: "<div class=\"d-flex justify-content-between align-items-center border-bottom py-1 ps-1 pe-4 flex-shrink-0\">\n\t<div class=\"flex-grow-1 d-flex align-items-center pe-3\">\n\t\t<ion-buttons>\n\t\t\t<ion-button routerLink=\"{{ prevUrl }}\">\n\t\t\t\t<ion-icon slot=\"icon-only\" name=\"close\" />\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\n\t\t<div class=\"f20 fw-medium\">{{ header }}</div>\n\t</div>\n\n\t<ng-content select=\"[button]\" />\n</div>\n\n<div class=\"p-1 flex-grow-1 overflow-auto\">\n\t<ng-content/>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i1.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ColumnHeaderContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: ColumnHeaderContainerComponent, isStandalone: true, selector: "up-column-header-container", inputs: { header: "header", prevUrl: "prevUrl" }, host: { classAttribute: "d-flex flex-column h-100" }, ngImport: i0, template: "<div class=\"d-flex justify-content-between align-items-center border-bottom py-1 ps-1 pe-4 flex-shrink-0\">\n\t<div class=\"flex-grow-1 d-flex align-items-center pe-3\">\n\t\t<ion-buttons class=\"flex-shrink-0\">\n\t\t\t<ion-button routerLink=\"{{ prevUrl }}\">\n\t\t\t\t<ion-icon slot=\"icon-only\" name=\"close\" />\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\n\t\t<div class=\"f20 fw-medium flex-grow-1 text-truncate\">{{ header }}</div>\n\t</div>\n\n\t<ng-content select=\"[button]\" />\n</div>\n\n<div class=\"p-1 flex-grow-1 overflow-auto\">\n\t<ng-content/>\n</div>\n", styles: ["ion-buttons{z-index:0}.flex-grow-1{min-width:0}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i1.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ColumnHeaderContainerComponent, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ColumnHeaderContainerComponent, decorators: [{
12
12
  type: Component,
13
13
  args: [{ standalone: true, selector: 'up-column-header-container', changeDetection: ChangeDetectionStrategy.OnPush, host: {
14
14
  class: 'd-flex flex-column h-100'
15
15
  }, imports: [
16
16
  IonicModule,
17
17
  RouterModule
18
- ], template: "<div class=\"d-flex justify-content-between align-items-center border-bottom py-1 ps-1 pe-4 flex-shrink-0\">\n\t<div class=\"flex-grow-1 d-flex align-items-center pe-3\">\n\t\t<ion-buttons>\n\t\t\t<ion-button routerLink=\"{{ prevUrl }}\">\n\t\t\t\t<ion-icon slot=\"icon-only\" name=\"close\" />\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\n\t\t<div class=\"f20 fw-medium\">{{ header }}</div>\n\t</div>\n\n\t<ng-content select=\"[button]\" />\n</div>\n\n<div class=\"p-1 flex-grow-1 overflow-auto\">\n\t<ng-content/>\n</div>\n" }]
18
+ ], template: "<div class=\"d-flex justify-content-between align-items-center border-bottom py-1 ps-1 pe-4 flex-shrink-0\">\n\t<div class=\"flex-grow-1 d-flex align-items-center pe-3\">\n\t\t<ion-buttons class=\"flex-shrink-0\">\n\t\t\t<ion-button routerLink=\"{{ prevUrl }}\">\n\t\t\t\t<ion-icon slot=\"icon-only\" name=\"close\" />\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\n\t\t<div class=\"f20 fw-medium flex-grow-1 text-truncate\">{{ header }}</div>\n\t</div>\n\n\t<ng-content select=\"[button]\" />\n</div>\n\n<div class=\"p-1 flex-grow-1 overflow-auto\">\n\t<ng-content/>\n</div>\n", styles: ["ion-buttons{z-index:0}.flex-grow-1{min-width:0}\n"] }]
19
19
  }], propDecorators: { header: [{
20
20
  type: Input
21
21
  }], prevUrl: [{
22
22
  type: Input
23
23
  }] } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlYWRlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvY29sdW0taGVhZGVyLWNvbnRhaW5lci9jb2x1bW4taGVhZGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9jb2x1bS1oZWFkZXItY29udGFpbmVyL2NvbHVtbi1oZWFkZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFnQjdDLE1BQU0sT0FBTyw4QkFBOEI7OEdBQTlCLDhCQUE4QjtrR0FBOUIsOEJBQThCLDhMQ2xCM0MsOGdCQWlCQSx5RERISSxXQUFXLDZuQkFDWCxZQUFZOzsyRkFHSCw4QkFBOEI7a0JBZDFDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsMEJBQTBCO3FCQUNsQyxXQUNRO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTtxQkFDYjs4QkFRZSxNQUFNO3NCQUFyQixLQUFLO2dCQU1VLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1jb2x1bW4taGVhZGVyLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4taGVhZGVyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbHVtbi1oZWFkZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IFxuICAgIGNsYXNzOiAnZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwJyBcbiAgfSxcbiAgaW1wb3J0czogWyBcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5IZWFkZXJDb250YWluZXJDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gc2V0IGhlYWRlciB0ZXh0LlxuICAgKkB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gc2V0IHByZXZVcmwuXG4gICAqQHR5cGUge3N0cmluZ31cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBwcmV2VXJsITogc3RyaW5nO1xufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLWJvdHRvbSBweS0xIHBzLTEgcGUtNCBmbGV4LXNocmluay0wXCI+XG5cdDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cblx0XHQ8aW9uLWJ1dHRvbnM+XG5cdFx0XHQ8aW9uLWJ1dHRvbiByb3V0ZXJMaW5rPVwie3sgcHJldlVybCB9fVwiPlxuXHRcdFx0XHQ8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG5cdFx0XHQ8L2lvbi1idXR0b24+XG5cdFx0PC9pb24tYnV0dG9ucz5cblxuXHRcdDxkaXYgY2xhc3M9XCJmMjAgZnctbWVkaXVtXCI+e3sgaGVhZGVyIH19PC9kaXY+XG5cdDwvZGl2PlxuXG5cdDxuZy1jb250ZW50IHNlbGVjdD1cIltidXR0b25dXCIgLz5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicC0xIGZsZXgtZ3Jvdy0xIG92ZXJmbG93LWF1dG9cIj5cblx0PG5nLWNvbnRlbnQvPlxuPC9kaXY+XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhlYWRlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcnMvY29sdW0taGVhZGVyLWNvbnRhaW5lci9jb2x1bW4taGVhZGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVycy9jb2x1bS1oZWFkZXItY29udGFpbmVyL2NvbHVtbi1oZWFkZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFnQjdDLE1BQU0sT0FBTyw4QkFBOEI7OEdBQTlCLDhCQUE4QjtrR0FBOUIsOEJBQThCLDhMQ2xCM0MsZ2tCQWlCQSwwR0RISSxXQUFXLDZuQkFDWCxZQUFZOzsyRkFHSCw4QkFBOEI7a0JBZDFDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsMEJBQTBCO3FCQUNsQyxXQUNRO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTtxQkFDYjs4QkFRZSxNQUFNO3NCQUFyQixLQUFLO2dCQU1VLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbmljTW9kdWxlIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1jb2x1bW4taGVhZGVyLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4taGVhZGVyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbHVtbi1oZWFkZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IFxuICAgIGNsYXNzOiAnZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwJyBcbiAgfSxcbiAgaW1wb3J0czogWyBcbiAgICBJb25pY01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5IZWFkZXJDb250YWluZXJDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gc2V0IGhlYWRlciB0ZXh0LlxuICAgKkB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBpbnB1dCB2YXJpYWJsZSB0aGF0IHVzZWQgdG8gc2V0IHByZXZVcmwuXG4gICAqQHR5cGUge3N0cmluZ31cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBwcmV2VXJsITogc3RyaW5nO1xufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLWJvdHRvbSBweS0xIHBzLTEgcGUtNCBmbGV4LXNocmluay0wXCI+XG5cdDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cblx0XHQ8aW9uLWJ1dHRvbnMgY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XG5cdFx0XHQ8aW9uLWJ1dHRvbiByb3V0ZXJMaW5rPVwie3sgcHJldlVybCB9fVwiPlxuXHRcdFx0XHQ8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG5cdFx0XHQ8L2lvbi1idXR0b24+XG5cdFx0PC9pb24tYnV0dG9ucz5cblxuXHRcdDxkaXYgY2xhc3M9XCJmMjAgZnctbWVkaXVtIGZsZXgtZ3Jvdy0xIHRleHQtdHJ1bmNhdGVcIj57eyBoZWFkZXIgfX08L2Rpdj5cblx0PC9kaXY+XG5cblx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2J1dHRvbl1cIiAvPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwLTEgZmxleC1ncm93LTEgb3ZlcmZsb3ctYXV0b1wiPlxuXHQ8bmctY29udGVudC8+XG48L2Rpdj5cbiJdfQ==