@js-smart/ng-kit 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 (72) hide show
  1. package/README.md +297 -0
  2. package/esm2022/js-smart-ng-kit.mjs +5 -0
  3. package/esm2022/lib/components/alert/alert.component.mjs +95 -0
  4. package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +172 -0
  5. package/esm2022/lib/components/buttons/base-button/base-button.component.mjs +72 -0
  6. package/esm2022/lib/components/buttons/bs-link-button/bs-link-button.component.mjs +52 -0
  7. package/esm2022/lib/components/buttons/delete-button/delete-button.component.mjs +62 -0
  8. package/esm2022/lib/components/buttons/edit-bs-button/edit-bs-button.component.mjs +55 -0
  9. package/esm2022/lib/components/buttons/edit-button/edit-button.component.mjs +49 -0
  10. package/esm2022/lib/components/buttons/edit-svg-icon-button/edit-svg-icon-button.component.mjs +51 -0
  11. package/esm2022/lib/components/buttons/excel-export-button/excel-export-button.component.mjs +14 -0
  12. package/esm2022/lib/components/buttons/manage-button/manage-button.component.mjs +49 -0
  13. package/esm2022/lib/components/buttons/pdf-export-button/pdf-export-button.component.mjs +13 -0
  14. package/esm2022/lib/components/buttons/primary-button/primary-button.component.mjs +61 -0
  15. package/esm2022/lib/components/buttons/save-primary-button/save-primary-button.component.mjs +60 -0
  16. package/esm2022/lib/components/buttons/search-button/search-button.component.mjs +52 -0
  17. package/esm2022/lib/components/buttons/success-button/success-button.component.mjs +65 -0
  18. package/esm2022/lib/components/buttons/view-button/view-button.component.mjs +41 -0
  19. package/esm2022/lib/components/buttons/view-primary-button/view-primary-button.component.mjs +49 -0
  20. package/esm2022/lib/components/confirm-dialog/confirm-dialog.component.mjs +63 -0
  21. package/esm2022/lib/components/ngx-spinner/ngx-spinner.component.mjs +195 -0
  22. package/esm2022/lib/components/ngx-spinner/ngx-spinner.enum.mjs +16 -0
  23. package/esm2022/lib/components/ngx-spinner/ngx-spinner.service.mjs +71 -0
  24. package/esm2022/lib/components/ngx-spinner/safe-html.pipe.mjs +24 -0
  25. package/esm2022/lib/components/snack-bar/error-snack-bar/error-snack-bar.component.mjs +50 -0
  26. package/esm2022/lib/components/snack-bar/success-snack-bar/success-snack-bar.component.mjs +50 -0
  27. package/esm2022/lib/components/spinner/spinner.component.mjs +31 -0
  28. package/esm2022/lib/directives/ngx-print.directive.mjs +255 -0
  29. package/esm2022/lib/directives/prevent-multiple-clicks.directive.mjs +44 -0
  30. package/esm2022/lib/pipes/type-of.pipe.mjs +17 -0
  31. package/esm2022/lib/services/mat-snack-bar.service.mjs +82 -0
  32. package/esm2022/lib/svg-icons/edit-solid-svg/edit-solid-svg.component.mjs +22 -0
  33. package/esm2022/lib/types/progress-state.mjs +2 -0
  34. package/esm2022/lib/util/progress-util.mjs +80 -0
  35. package/esm2022/public-api.mjs +33 -0
  36. package/fesm2022/js-smart-ng-kit.mjs +1872 -0
  37. package/fesm2022/js-smart-ng-kit.mjs.map +1 -0
  38. package/index.d.ts +5 -0
  39. package/lib/components/alert/alert.component.d.ts +73 -0
  40. package/lib/components/autocomplete/autocomplete.component.d.ts +115 -0
  41. package/lib/components/buttons/base-button/base-button.component.d.ts +63 -0
  42. package/lib/components/buttons/bs-link-button/bs-link-button.component.d.ts +10 -0
  43. package/lib/components/buttons/delete-button/delete-button.component.d.ts +11 -0
  44. package/lib/components/buttons/edit-bs-button/edit-bs-button.component.d.ts +9 -0
  45. package/lib/components/buttons/edit-button/edit-button.component.d.ts +10 -0
  46. package/lib/components/buttons/edit-svg-icon-button/edit-svg-icon-button.component.d.ts +10 -0
  47. package/lib/components/buttons/excel-export-button/excel-export-button.component.d.ts +5 -0
  48. package/lib/components/buttons/manage-button/manage-button.component.d.ts +10 -0
  49. package/lib/components/buttons/pdf-export-button/pdf-export-button.component.d.ts +5 -0
  50. package/lib/components/buttons/primary-button/primary-button.component.d.ts +12 -0
  51. package/lib/components/buttons/save-primary-button/save-primary-button.component.d.ts +11 -0
  52. package/lib/components/buttons/search-button/search-button.component.d.ts +11 -0
  53. package/lib/components/buttons/success-button/success-button.component.d.ts +11 -0
  54. package/lib/components/buttons/view-button/view-button.component.d.ts +9 -0
  55. package/lib/components/buttons/view-primary-button/view-primary-button.component.d.ts +10 -0
  56. package/lib/components/confirm-dialog/confirm-dialog.component.d.ts +20 -0
  57. package/lib/components/ngx-spinner/ngx-spinner.component.d.ts +109 -0
  58. package/lib/components/ngx-spinner/ngx-spinner.enum.d.ts +37 -0
  59. package/lib/components/ngx-spinner/ngx-spinner.service.d.ts +34 -0
  60. package/lib/components/ngx-spinner/safe-html.pipe.d.ts +10 -0
  61. package/lib/components/snack-bar/error-snack-bar/error-snack-bar.component.d.ts +22 -0
  62. package/lib/components/snack-bar/success-snack-bar/success-snack-bar.component.d.ts +22 -0
  63. package/lib/components/spinner/spinner.component.d.ts +22 -0
  64. package/lib/directives/ngx-print.directive.d.ts +157 -0
  65. package/lib/directives/prevent-multiple-clicks.directive.d.ts +21 -0
  66. package/lib/pipes/type-of.pipe.d.ts +7 -0
  67. package/lib/services/mat-snack-bar.service.d.ts +61 -0
  68. package/lib/svg-icons/edit-solid-svg/edit-solid-svg.component.d.ts +8 -0
  69. package/lib/types/progress-state.d.ts +7 -0
  70. package/lib/util/progress-util.d.ts +45 -0
  71. package/package.json +47 -0
  72. package/public-api.d.ts +25 -0
@@ -0,0 +1,60 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { BaseButtonComponent } from '../base-button/base-button.component';
3
+ import { NgStyle } from '@angular/common';
4
+ import { MatIcon } from '@angular/material/icon';
5
+ import { MatButton } from '@angular/material/button';
6
+ import * as i0 from "@angular/core";
7
+ export class SavePrimaryButtonComponent extends BaseButtonComponent {
8
+ constructor() {
9
+ super();
10
+ this.loadingLabel = input('Saving...');
11
+ this.label = input('Save');
12
+ this.icon = input('save');
13
+ this.classes = input('btn-primary primary-button');
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SavePrimaryButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: SavePrimaryButtonComponent, isStandalone: true, selector: "save-primary-button", inputs: { loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
17
+ <button
18
+ mat-raised-button
19
+ class="btn {{ classes() }}"
20
+ (click)="onClick.emit($event)"
21
+ (focus)="onFocus.emit($event)"
22
+ (blur)="onBlur.emit($event)"
23
+ [disabled]="disabled() || loading()"
24
+ [type]="type()"
25
+ [ngStyle]="style()"
26
+ [attr.data-cy]="'save-primary-button'">
27
+ @if (loading()) {
28
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
29
+ }
30
+ @if (!loading()) {
31
+ <mat-icon>{{ icon() }}</mat-icon>
32
+ }
33
+ {{ loading() ? loadingLabel() : label() }}
34
+ </button>
35
+ `, isInline: true, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SavePrimaryButtonComponent, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: 'save-primary-button', standalone: true, imports: [MatButton, MatIcon, NgStyle], template: `
40
+ <button
41
+ mat-raised-button
42
+ class="btn {{ classes() }}"
43
+ (click)="onClick.emit($event)"
44
+ (focus)="onFocus.emit($event)"
45
+ (blur)="onBlur.emit($event)"
46
+ [disabled]="disabled() || loading()"
47
+ [type]="type()"
48
+ [ngStyle]="style()"
49
+ [attr.data-cy]="'save-primary-button'">
50
+ @if (loading()) {
51
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
52
+ }
53
+ @if (!loading()) {
54
+ <mat-icon>{{ icon() }}</mat-icon>
55
+ }
56
+ {{ loading() ? loadingLabel() : label() }}
57
+ </button>
58
+ `, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"] }]
59
+ }], ctorParameters: () => [] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1wcmltYXJ5LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raXQvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbnMvc2F2ZS1wcmltYXJ5LWJ1dHRvbi9zYXZlLXByaW1hcnktYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUE0QnJELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxtQkFBbUI7SUFNbEU7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQU5BLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLFVBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFJdkQsQ0FBQzs4R0FSVywwQkFBMEI7a0dBQTFCLDBCQUEwQiwwbUJBdEI1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCwwckJBcEJTLFNBQVMsaUxBQUUsT0FBTywySUFBRSxPQUFPOzsyRkF1QnpCLDBCQUEwQjtrQkExQnRDLFNBQVM7K0JBQ0MscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFlBQzVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtYnV0dG9uL2Jhc2UtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3NhdmUtcHJpbWFyeS1idXR0b24nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbTWF0QnV0dG9uLCBNYXRJY29uLCBOZ1N0eWxlXSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8YnV0dG9uXG5cdFx0XHRtYXQtcmFpc2VkLWJ1dHRvblxuXHRcdFx0Y2xhc3M9XCJidG4ge3sgY2xhc3NlcygpIH19XCJcblx0XHRcdChjbGljayk9XCJvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG5cdFx0XHQoZm9jdXMpPVwib25Gb2N1cy5lbWl0KCRldmVudClcIlxuXHRcdFx0KGJsdXIpPVwib25CbHVyLmVtaXQoJGV2ZW50KVwiXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKSB8fCBsb2FkaW5nKClcIlxuXHRcdFx0W3R5cGVdPVwidHlwZSgpXCJcblx0XHRcdFtuZ1N0eWxlXT1cInN0eWxlKClcIlxuXHRcdFx0W2F0dHIuZGF0YS1jeV09XCInc2F2ZS1wcmltYXJ5LWJ1dHRvbidcIj5cblx0XHRcdEBpZiAobG9hZGluZygpKSB7XG5cdFx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCI+PC9zcGFuPlxuXHRcdFx0fVxuXHRcdFx0QGlmICghbG9hZGluZygpKSB7XG5cdFx0XHRcdDxtYXQtaWNvbj57eyBpY29uKCkgfX08L21hdC1pY29uPlxuXHRcdFx0fVxuXHRcdFx0e3sgbG9hZGluZygpID8gbG9hZGluZ0xhYmVsKCkgOiBsYWJlbCgpIH19XG5cdFx0PC9idXR0b24+XG5cdGAsXG5cdHN0eWxlVXJsczogWycuLi8uLi8uLi8uLi9hc3NldHMvYXBwLWJ1dHRvbnMuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNhdmVQcmltYXJ5QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUJ1dHRvbkNvbXBvbmVudCB7XG5cdG92ZXJyaWRlIGxvYWRpbmdMYWJlbCA9IGlucHV0KCdTYXZpbmcuLi4nKTtcblx0b3ZlcnJpZGUgbGFiZWwgPSBpbnB1dCgnU2F2ZScpO1xuXHRvdmVycmlkZSBpY29uID0gaW5wdXQoJ3NhdmUnKTtcblx0b3ZlcnJpZGUgY2xhc3NlcyA9IGlucHV0KCdidG4tcHJpbWFyeSBwcmltYXJ5LWJ1dHRvbicpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,52 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatIconModule } from '@angular/material/icon';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { BaseButtonComponent } from '../base-button/base-button.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/button";
8
+ import * as i2 from "@angular/material/icon";
9
+ export class SearchButtonComponent extends BaseButtonComponent {
10
+ constructor() {
11
+ super();
12
+ this.loadingLabel = input('Searching...');
13
+ this.label = input('Search');
14
+ this.icon = input('search');
15
+ this.classes = input('btn-primary primary-button');
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SearchButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: SearchButtonComponent, isStandalone: true, selector: "search-button", inputs: { loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
19
+ <button
20
+ class="btn btn-primary primary-button {{ loading() || disabled() ? 'disabled' : '' }}"
21
+ mat-raised-button
22
+ type="{{ type() }}"
23
+ data-cy="primary-button">
24
+ @if (loading()) {
25
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
26
+ }
27
+ @if (!loading()) {
28
+ <mat-icon>{{ icon() }}</mat-icon>
29
+ }
30
+ {{ loading() ? loadingLabel() : label() }}
31
+ </button>
32
+ `, isInline: true, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SearchButtonComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'search-button', standalone: true, imports: [CommonModule, MatButtonModule, MatIconModule], template: `
37
+ <button
38
+ class="btn btn-primary primary-button {{ loading() || disabled() ? 'disabled' : '' }}"
39
+ mat-raised-button
40
+ type="{{ type() }}"
41
+ data-cy="primary-button">
42
+ @if (loading()) {
43
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
44
+ }
45
+ @if (!loading()) {
46
+ <mat-icon>{{ icon() }}</mat-icon>
47
+ }
48
+ {{ loading() ? loadingLabel() : label() }}
49
+ </button>
50
+ `, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"] }]
51
+ }], ctorParameters: () => [] });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raXQvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbnMvc2VhcmNoLWJ1dHRvbi9zZWFyY2gtYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQXVCM0UsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQU03RDtRQUNDLEtBQUssRUFBRSxDQUFDO1FBTkEsaUJBQVksR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUl2RCxDQUFDOzhHQVJXLHFCQUFxQjtrR0FBckIscUJBQXFCLG9tQkFqQnZCOzs7Ozs7Ozs7Ozs7OztFQWNULHlyQkFmUyxZQUFZLDhCQUFFLGVBQWUsMk5BQUUsYUFBYTs7MkZBa0IxQyxxQkFBcUI7a0JBckJqQyxTQUFTOytCQUNDLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxZQUM3Qzs7Ozs7Ozs7Ozs7Ozs7RUFjVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgQmFzZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtYnV0dG9uL2Jhc2UtYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3NlYXJjaC1idXR0b24nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxidXR0b25cblx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHByaW1hcnktYnV0dG9uIHt7IGxvYWRpbmcoKSB8fCBkaXNhYmxlZCgpID8gJ2Rpc2FibGVkJyA6ICcnIH19XCJcblx0XHRcdG1hdC1yYWlzZWQtYnV0dG9uXG5cdFx0XHR0eXBlPVwie3sgdHlwZSgpIH19XCJcblx0XHRcdGRhdGEtY3k9XCJwcmltYXJ5LWJ1dHRvblwiPlxuXHRcdFx0QGlmIChsb2FkaW5nKCkpIHtcblx0XHRcdFx0PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+XG5cdFx0XHR9XG5cdFx0XHRAaWYgKCFsb2FkaW5nKCkpIHtcblx0XHRcdFx0PG1hdC1pY29uPnt7IGljb24oKSB9fTwvbWF0LWljb24+XG5cdFx0XHR9XG5cdFx0XHR7eyBsb2FkaW5nKCkgPyBsb2FkaW5nTGFiZWwoKSA6IGxhYmVsKCkgfX1cblx0XHQ8L2J1dHRvbj5cblx0YCxcblx0c3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uL2Fzc2V0cy9hcHAtYnV0dG9ucy5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUJ1dHRvbkNvbXBvbmVudCB7XG5cdG92ZXJyaWRlIGxvYWRpbmdMYWJlbCA9IGlucHV0KCdTZWFyY2hpbmcuLi4nKTtcblx0b3ZlcnJpZGUgbGFiZWwgPSBpbnB1dCgnU2VhcmNoJyk7XG5cdG92ZXJyaWRlIGljb24gPSBpbnB1dCgnc2VhcmNoJyk7XG5cdG92ZXJyaWRlIGNsYXNzZXMgPSBpbnB1dCgnYnRuLXByaW1hcnkgcHJpbWFyeS1idXR0b24nKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,65 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { BaseButtonComponent } from '../base-button/base-button.component';
3
+ import { NgStyle } from '@angular/common';
4
+ import { MatButton } from '@angular/material/button';
5
+ import { MatIcon } from '@angular/material/icon';
6
+ import * as i0 from "@angular/core";
7
+ export class SuccessButtonComponent extends BaseButtonComponent {
8
+ constructor() {
9
+ super();
10
+ this.loadingLabel = input('Updating...');
11
+ this.label = input('Update');
12
+ this.icon = input('save');
13
+ this.classes = input('success-button');
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SuccessButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: SuccessButtonComponent, isStandalone: true, selector: "success-button", inputs: { loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
17
+ <button
18
+ mat-raised-button
19
+ class="btn {{ classes() }}"
20
+ (click)="onClick.emit($event)"
21
+ (focus)="onFocus.emit($event)"
22
+ (blur)="onBlur.emit($event)"
23
+ [disabled]="disabled() || loading()"
24
+ [type]="type()"
25
+ [ngStyle]="style()"
26
+ [attr.data-cy]="'success-button'">
27
+ @if (loading()) {
28
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
29
+ }
30
+ @if (!loading()) {
31
+ <mat-icon>{{ icon() }}</mat-icon>
32
+ }
33
+ {{ loading() ? loadingLabel() : label() }}
34
+ </button>
35
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SuccessButtonComponent, decorators: [{
38
+ type: Component,
39
+ args: [{
40
+ selector: 'success-button',
41
+ standalone: true,
42
+ imports: [NgStyle, MatButton, MatIcon],
43
+ template: `
44
+ <button
45
+ mat-raised-button
46
+ class="btn {{ classes() }}"
47
+ (click)="onClick.emit($event)"
48
+ (focus)="onFocus.emit($event)"
49
+ (blur)="onBlur.emit($event)"
50
+ [disabled]="disabled() || loading()"
51
+ [type]="type()"
52
+ [ngStyle]="style()"
53
+ [attr.data-cy]="'success-button'">
54
+ @if (loading()) {
55
+ <span aria-hidden="true" class="spinner-border spinner-border-sm" role="status"></span>
56
+ }
57
+ @if (!loading()) {
58
+ <mat-icon>{{ icon() }}</mat-icon>
59
+ }
60
+ {{ loading() ? loadingLabel() : label() }}
61
+ </button>
62
+ `,
63
+ }]
64
+ }], ctorParameters: () => [] });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VjY2Vzcy1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2l0L3NyYy9saWIvY29tcG9uZW50cy9idXR0b25zL3N1Y2Nlc3MtYnV0dG9uL3N1Y2Nlc3MtYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUEyQmpELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxtQkFBbUI7SUFNOUQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQU5BLGlCQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEIsU0FBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFJM0MsQ0FBQzs4R0FSVyxzQkFBc0I7a0dBQXRCLHNCQUFzQixxbUJBckJ4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVCw0REFwQlMsT0FBTywyRUFBRSxTQUFTLGlMQUFFLE9BQU87OzJGQXNCekIsc0JBQXNCO2tCQXpCbEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7b0JBQ3RDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWJ1dHRvbi9iYXNlLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdzdWNjZXNzLWJ1dHRvbicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtOZ1N0eWxlLCBNYXRCdXR0b24sIE1hdEljb25dLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxidXR0b25cblx0XHRcdG1hdC1yYWlzZWQtYnV0dG9uXG5cdFx0XHRjbGFzcz1cImJ0biB7eyBjbGFzc2VzKCkgfX1cIlxuXHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcblx0XHRcdChmb2N1cyk9XCJvbkZvY3VzLmVtaXQoJGV2ZW50KVwiXG5cdFx0XHQoYmx1cik9XCJvbkJsdXIuZW1pdCgkZXZlbnQpXCJcblx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGxvYWRpbmcoKVwiXG5cdFx0XHRbdHlwZV09XCJ0eXBlKClcIlxuXHRcdFx0W25nU3R5bGVdPVwic3R5bGUoKVwiXG5cdFx0XHRbYXR0ci5kYXRhLWN5XT1cIidzdWNjZXNzLWJ1dHRvbidcIj5cblx0XHRcdEBpZiAobG9hZGluZygpKSB7XG5cdFx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCI+PC9zcGFuPlxuXHRcdFx0fVxuXHRcdFx0QGlmICghbG9hZGluZygpKSB7XG5cdFx0XHRcdDxtYXQtaWNvbj57eyBpY29uKCkgfX08L21hdC1pY29uPlxuXHRcdFx0fVxuXHRcdFx0e3sgbG9hZGluZygpID8gbG9hZGluZ0xhYmVsKCkgOiBsYWJlbCgpIH19XG5cdFx0PC9idXR0b24+XG5cdGAsXG59KVxuZXhwb3J0IGNsYXNzIFN1Y2Nlc3NCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQnV0dG9uQ29tcG9uZW50IHtcblx0b3ZlcnJpZGUgbG9hZGluZ0xhYmVsID0gaW5wdXQoJ1VwZGF0aW5nLi4uJyk7XG5cdG92ZXJyaWRlIGxhYmVsID0gaW5wdXQoJ1VwZGF0ZScpO1xuXHRvdmVycmlkZSBpY29uID0gaW5wdXQoJ3NhdmUnKTtcblx0b3ZlcnJpZGUgY2xhc3NlcyA9IGlucHV0KCdzdWNjZXNzLWJ1dHRvbicpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { MatIcon } from '@angular/material/icon';
3
+ import { MatButton } from '@angular/material/button';
4
+ import { BaseButtonComponent } from '../base-button/base-button.component';
5
+ import * as i0 from "@angular/core";
6
+ export class ViewButtonComponent extends BaseButtonComponent {
7
+ constructor() {
8
+ super();
9
+ this.label = input('View');
10
+ this.icon = input('visibility');
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ViewButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.0", type: ViewButtonComponent, isStandalone: true, selector: "view-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
14
+ <button
15
+ color="primary"
16
+ (click)="onClick.emit($event)"
17
+ (focus)="onFocus.emit($event)"
18
+ (blur)="onBlur.emit($event)"
19
+ [disabled]="disabled()"
20
+ mat-button>
21
+ <mat-icon>{{ icon() }}</mat-icon>
22
+ {{ label() }}
23
+ </button>
24
+ `, isInline: true, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ViewButtonComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'view-button', standalone: true, imports: [MatButton, MatIcon], template: `
29
+ <button
30
+ color="primary"
31
+ (click)="onClick.emit($event)"
32
+ (focus)="onFocus.emit($event)"
33
+ (blur)="onBlur.emit($event)"
34
+ [disabled]="disabled()"
35
+ mat-button>
36
+ <mat-icon>{{ icon() }}</mat-icon>
37
+ {{ label() }}
38
+ </button>
39
+ `, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"] }]
40
+ }], ctorParameters: () => [] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2l0L3NyYy9saWIvY29tcG9uZW50cy9idXR0b25zL3ZpZXctYnV0dG9uL3ZpZXctYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQW9CM0UsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG1CQUFtQjtJQUkzRDtRQUNDLEtBQUssRUFBRSxDQUFDO1FBSkEsVUFBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixTQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBSXBDLENBQUM7OEdBTlcsbUJBQW1CO2tHQUFuQixtQkFBbUIsdVZBZHJCOzs7Ozs7Ozs7OztFQVdULDByQkFaUyxTQUFTLGlMQUFFLE9BQU87OzJGQWVoQixtQkFBbUI7a0JBbEIvQixTQUFTOytCQUNDLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQ25COzs7Ozs7Ozs7OztFQVdUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IEJhc2VCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWJ1dHRvbi9iYXNlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICd2aWV3LWJ1dHRvbicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtNYXRCdXR0b24sIE1hdEljb25dLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxidXR0b25cblx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXG5cdFx0XHQoY2xpY2spPVwib25DbGljay5lbWl0KCRldmVudClcIlxuXHRcdFx0KGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgkZXZlbnQpXCJcblx0XHRcdChibHVyKT1cIm9uQmx1ci5lbWl0KCRldmVudClcIlxuXHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuXHRcdFx0bWF0LWJ1dHRvbj5cblx0XHRcdDxtYXQtaWNvbj57eyBpY29uKCkgfX08L21hdC1pY29uPlxuXHRcdFx0e3sgbGFiZWwoKSB9fVxuXHRcdDwvYnV0dG9uPlxuXHRgLFxuXHRzdHlsZVVybHM6IFsnLi4vLi4vLi4vLi4vYXNzZXRzL2FwcC1idXR0b25zLmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUJ1dHRvbkNvbXBvbmVudCB7XG5cdG92ZXJyaWRlIGxhYmVsID0gaW5wdXQoJ1ZpZXcnKTtcblx0b3ZlcnJpZGUgaWNvbiA9IGlucHV0KCd2aXNpYmlsaXR5Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxufVxuIl19
@@ -0,0 +1,49 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { NgStyle } from '@angular/common';
3
+ import { MatButton } from '@angular/material/button';
4
+ import { MatIcon } from '@angular/material/icon';
5
+ import { BaseButtonComponent } from '../base-button/base-button.component';
6
+ import * as i0 from "@angular/core";
7
+ export class ViewPrimaryButtonComponent extends BaseButtonComponent {
8
+ constructor() {
9
+ super();
10
+ this.label = input('View');
11
+ this.icon = input('visibility');
12
+ this.classes = input('btn-primary primary-button');
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ViewPrimaryButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.0", type: ViewPrimaryButtonComponent, isStandalone: true, selector: "view-primary-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, classes: { classPropertyName: "classes", publicName: "classes", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
16
+ <button
17
+ mat-raised-button
18
+ class="btn {{ classes() }}"
19
+ (click)="onClick.emit($event)"
20
+ (focus)="onFocus.emit($event)"
21
+ (blur)="onBlur.emit($event)"
22
+ [disabled]="disabled()"
23
+ [type]="type()"
24
+ [ngStyle]="style()"
25
+ [attr.data-cy]="'view-button'">
26
+ <mat-icon>{{ icon() }}</mat-icon>
27
+ {{ label() }}
28
+ </button>
29
+ `, isInline: true, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ViewPrimaryButtonComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'view-primary-button', standalone: true, imports: [MatButton, MatIcon, NgStyle], template: `
34
+ <button
35
+ mat-raised-button
36
+ class="btn {{ classes() }}"
37
+ (click)="onClick.emit($event)"
38
+ (focus)="onFocus.emit($event)"
39
+ (blur)="onBlur.emit($event)"
40
+ [disabled]="disabled()"
41
+ [type]="type()"
42
+ [ngStyle]="style()"
43
+ [attr.data-cy]="'view-button'">
44
+ <mat-icon>{{ icon() }}</mat-icon>
45
+ {{ label() }}
46
+ </button>
47
+ `, styles: [".primary-button,.primary-button:hover,.primary-button:active,.primary-button:visited{color:#fff!important;background-color:var(--primary-color)!important}.secondary-button,.secondary-button:hover,.secondary-button:active,.secondary-button:visited{color:#fff!important;background-color:var(--secondary-color)!important}.success-button,.success-button:hover,.success-button:active,.success-button:visited{color:#fff!important;background-color:var(--success-color)!important}.delete-button,.delete-button:hover,.delete-button:active,.success-button:visited{color:#fff!important;background-color:var(--delete-color)!important}\n"] }]
48
+ }], ctorParameters: () => [] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1wcmltYXJ5LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raXQvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbnMvdmlldy1wcmltYXJ5LWJ1dHRvbi92aWV3LXByaW1hcnktYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUF1QjNFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxtQkFBbUI7SUFLbEU7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQUxBLFVBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBSSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFJdkQsQ0FBQzs4R0FQVywwQkFBMEI7a0dBQTFCLDBCQUEwQiw2ZEFqQjVCOzs7Ozs7Ozs7Ozs7OztFQWNULDByQkFmUyxTQUFTLGlMQUFFLE9BQU8sMklBQUUsT0FBTzs7MkZBa0J6QiwwQkFBMEI7a0JBckJ0QyxTQUFTOytCQUNDLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxZQUM1Qjs7Ozs7Ozs7Ozs7Ozs7RUFjVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEJhc2VCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWJ1dHRvbi9iYXNlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICd2aWV3LXByaW1hcnktYnV0dG9uJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW01hdEJ1dHRvbiwgTWF0SWNvbiwgTmdTdHlsZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGJ1dHRvblxuXHRcdFx0bWF0LXJhaXNlZC1idXR0b25cblx0XHRcdGNsYXNzPVwiYnRuIHt7IGNsYXNzZXMoKSB9fVwiXG5cdFx0XHQoY2xpY2spPVwib25DbGljay5lbWl0KCRldmVudClcIlxuXHRcdFx0KGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgkZXZlbnQpXCJcblx0XHRcdChibHVyKT1cIm9uQmx1ci5lbWl0KCRldmVudClcIlxuXHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuXHRcdFx0W3R5cGVdPVwidHlwZSgpXCJcblx0XHRcdFtuZ1N0eWxlXT1cInN0eWxlKClcIlxuXHRcdFx0W2F0dHIuZGF0YS1jeV09XCIndmlldy1idXR0b24nXCI+XG5cdFx0XHQ8bWF0LWljb24+e3sgaWNvbigpIH19PC9tYXQtaWNvbj5cblx0XHRcdHt7IGxhYmVsKCkgfX1cblx0XHQ8L2J1dHRvbj5cblx0YCxcblx0c3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uL2Fzc2V0cy9hcHAtYnV0dG9ucy5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVmlld1ByaW1hcnlCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQnV0dG9uQ29tcG9uZW50IHtcblx0b3ZlcnJpZGUgbGFiZWwgPSBpbnB1dCgnVmlldycpO1xuXHRvdmVycmlkZSBpY29uID0gaW5wdXQoJ3Zpc2liaWxpdHknKTtcblx0b3ZlcnJpZGUgY2xhc3NlcyA9IGlucHV0KCdidG4tcHJpbWFyeSBwcmltYXJ5LWJ1dHRvbicpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,63 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MatDividerModule } from '@angular/material/divider';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/dialog";
7
+ import * as i2 from "@angular/material/button";
8
+ import * as i3 from "@angular/material/divider";
9
+ export class ConfirmDialogComponent {
10
+ constructor(data, dialogRef) {
11
+ this.data = data;
12
+ this.dialogRef = dialogRef;
13
+ // Update view with given values
14
+ this.title = data.title;
15
+ this.message = data.message;
16
+ }
17
+ onDismiss() {
18
+ // Close the dialog, return true
19
+ this.dialogRef.close(false);
20
+ }
21
+ onConfirm() {
22
+ // Close the dialog, return true
23
+ this.dialogRef.close(true);
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: ConfirmDialogComponent, isStandalone: true, selector: "app-confirm-dialog", ngImport: i0, template: `
27
+ <div class="mat-dialog-title" style="text-align: center">
28
+ <h3 class="m-3 mat-headline-5 ">{{ title }}</h3>
29
+ </div>
30
+
31
+ <mat-divider></mat-divider>
32
+ <div mat-dialog-content style="margin: 20px">
33
+ <p>{{ message }}</p>
34
+ </div>
35
+
36
+ <div align="end" class="modal-footer" mat-dialog-actions>
37
+ <button (click)="onDismiss()" mat-raised-button>No</button>
38
+ <button (click)="onConfirm()" class="primary-button" mat-raised-button>Yes</button>
39
+ </div>
40
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'app-confirm-dialog', standalone: true, imports: [MatButtonModule, MatDividerModule, MatDialogModule], template: `
45
+ <div class="mat-dialog-title" style="text-align: center">
46
+ <h3 class="m-3 mat-headline-5 ">{{ title }}</h3>
47
+ </div>
48
+
49
+ <mat-divider></mat-divider>
50
+ <div mat-dialog-content style="margin: 20px">
51
+ <p>{{ message }}</p>
52
+ </div>
53
+
54
+ <div align="end" class="modal-footer" mat-dialog-actions>
55
+ <button (click)="onDismiss()" mat-raised-button>No</button>
56
+ <button (click)="onConfirm()" class="primary-button" mat-raised-button>Yes</button>
57
+ </div>
58
+ ` }]
59
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
60
+ type: Inject,
61
+ args: [MAT_DIALOG_DATA]
62
+ }] }, { type: i1.MatDialogRef }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQXVCN0QsTUFBTSxPQUFPLHNCQUFzQjtJQUlsQyxZQUNpQyxJQUF1QixFQUNoRCxTQUErQztRQUR0QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUNoRCxjQUFTLEdBQVQsU0FBUyxDQUFzQztRQUV0RCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNSLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUNSLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQXJCVyxzQkFBc0Isa0JBS3pCLGVBQWU7a0dBTFosc0JBQXNCLDhFQWpCeEI7Ozs7Ozs7Ozs7Ozs7O0VBY1QsMkRBZlMsZUFBZSwyTkFBRSxnQkFBZ0Isa0lBQUUsZUFBZTs7MkZBa0JoRCxzQkFBc0I7a0JBckJsQyxTQUFTOytCQUNDLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLFlBQ25EOzs7Ozs7Ozs7Ozs7OztFQWNUOzswQkFRQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtY29uZmlybS1kaWFsb2cnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbTWF0QnV0dG9uTW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBNYXREaWFsb2dNb2R1bGVdLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgY2xhc3M9XCJtYXQtZGlhbG9nLXRpdGxlXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj5cblx0XHRcdDxoMyBjbGFzcz1cIm0tMyBtYXQtaGVhZGxpbmUtNVx0XCI+e3sgdGl0bGUgfX08L2gzPlxuXHRcdDwvZGl2PlxuXG5cdFx0PG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cdFx0PGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgc3R5bGU9XCJtYXJnaW46IDIwcHhcIj5cblx0XHRcdDxwPnt7IG1lc3NhZ2UgfX08L3A+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGFsaWduPVwiZW5kXCIgY2xhc3M9XCJtb2RhbC1mb290ZXJcIiBtYXQtZGlhbG9nLWFjdGlvbnM+XG5cdFx0XHQ8YnV0dG9uIChjbGljayk9XCJvbkRpc21pc3MoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPk5vPC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uIChjbGljayk9XCJvbkNvbmZpcm0oKVwiIGNsYXNzPVwicHJpbWFyeS1idXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbj5ZZXM8L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0YCxcblx0c3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IENvbmZpcm1EaWFsb2dEYXRhLFxuXHRcdHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtRGlhbG9nQ29tcG9uZW50Pixcblx0KSB7XG5cdFx0Ly8gVXBkYXRlIHZpZXcgd2l0aCBnaXZlbiB2YWx1ZXNcblx0XHR0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcblx0XHR0aGlzLm1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2U7XG5cdH1cblxuXHRvbkRpc21pc3MoKSB7XG5cdFx0Ly8gQ2xvc2UgdGhlIGRpYWxvZywgcmV0dXJuIHRydWVcblx0XHR0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XG5cdH1cblxuXHRvbkNvbmZpcm0oKSB7XG5cdFx0Ly8gQ2xvc2UgdGhlIGRpYWxvZywgcmV0dXJuIHRydWVcblx0XHR0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIENsYXNzIHRvIHJlcHJlc2VudCBjb25maXJtIGRpYWxvZyBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maXJtRGlhbG9nRGF0YSB7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdG1lc3NhZ2U6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,195 @@
1
+ import { Component, HostListener, Input, ViewChild } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { DEFAULTS, LOADERS, NgxSpinner, PRIMARY_SPINNER } from './ngx-spinner.enum';
5
+ import { animate, state, style, transition, trigger } from '@angular/animations';
6
+ import { SafeHtmlPipe } from './safe-html.pipe';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./ngx-spinner.service";
9
+ export class NgxSpinnerComponent {
10
+ /**
11
+ * Creates an instance of NgxSpinnerComponent.
12
+ */
13
+ constructor(spinnerService, changeDetector) {
14
+ this.spinnerService = spinnerService;
15
+ this.changeDetector = changeDetector;
16
+ /**
17
+ * To enable/disable animation
18
+ */
19
+ this.disableAnimation = false;
20
+ /**
21
+ * Spinner Object
22
+ */
23
+ this.spinner = new NgxSpinner();
24
+ /**
25
+ * Unsubscribe from spinner's observable
26
+ **/
27
+ this.ngUnsubscribe = new Subject();
28
+ /**
29
+ * To set default ngx-spinner options
30
+ */
31
+ this.setDefaultOptions = () => {
32
+ this.spinner = new NgxSpinner({
33
+ name: this.name,
34
+ bdColor: this.bdColor,
35
+ size: this.size,
36
+ color: this.color,
37
+ type: this.type,
38
+ fullScreen: this.fullScreen,
39
+ divArray: this.divArray,
40
+ divCount: this.divCount,
41
+ show: this.show,
42
+ zIndex: this.zIndex,
43
+ template: this.template,
44
+ showSpinner: this.showSpinner,
45
+ });
46
+ };
47
+ this.bdColor = DEFAULTS.BD_COLOR;
48
+ this.zIndex = DEFAULTS.Z_INDEX;
49
+ this.color = DEFAULTS.SPINNER_COLOR;
50
+ this.type = DEFAULTS.SPINNER_TYPE;
51
+ this.size = 'large';
52
+ this.fullScreen = true;
53
+ this.name = PRIMARY_SPINNER;
54
+ // @ts-ignore
55
+ this.template = null;
56
+ this.showSpinner = false;
57
+ this.divArray = [];
58
+ this.divCount = 0;
59
+ this.show = false;
60
+ }
61
+ handleKeyboardEvent(event) {
62
+ if (this.spinnerDOM && this.spinnerDOM.nativeElement) {
63
+ event.returnValue = false;
64
+ event.preventDefault();
65
+ }
66
+ }
67
+ /**
68
+ * Initialization method
69
+
70
+ */
71
+ ngOnInit() {
72
+ this.setDefaultOptions();
73
+ this.spinnerService
74
+ .getSpinner(this.name)
75
+ .pipe(takeUntil(this.ngUnsubscribe))
76
+ .subscribe((spinner) => {
77
+ this.setDefaultOptions();
78
+ Object.assign(this.spinner, spinner);
79
+ if (spinner.show) {
80
+ this.onInputChange();
81
+ }
82
+ this.changeDetector.detectChanges();
83
+ });
84
+ }
85
+ /**
86
+ * On changes event for input variables
87
+ */
88
+ ngOnChanges(changes) {
89
+ for (const propName in changes) {
90
+ if (propName) {
91
+ const changedProp = changes[propName];
92
+ if (changedProp.isFirstChange()) {
93
+ return;
94
+ }
95
+ else if (typeof changedProp.currentValue !== 'undefined' && changedProp.currentValue !== changedProp.previousValue) {
96
+ if (changedProp.currentValue !== '') {
97
+ // @ts-ignore
98
+ this.spinner[propName] = changedProp.currentValue;
99
+ if (propName === 'showSpinner') {
100
+ if (changedProp.currentValue) {
101
+ this.spinnerService.show(this.spinner.name, this.spinner);
102
+ }
103
+ else {
104
+ this.spinnerService.hide(this.spinner.name);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * To get class for spinner
114
+ */
115
+ getClass(type, size) {
116
+ // @ts-ignore
117
+ this.spinner.divCount = LOADERS[type];
118
+ this.spinner.divArray = Array(this.spinner.divCount)
119
+ .fill(0)
120
+ .map((x, i) => i);
121
+ let sizeClass = '';
122
+ switch (size.toLowerCase()) {
123
+ case 'small':
124
+ sizeClass = 'la-sm';
125
+ break;
126
+ case 'medium':
127
+ sizeClass = 'la-2x';
128
+ break;
129
+ case 'large':
130
+ sizeClass = 'la-3x';
131
+ break;
132
+ default:
133
+ break;
134
+ }
135
+ return 'la-' + type + ' ' + sizeClass;
136
+ }
137
+ /**
138
+ * Check if input variables have changed
139
+ */
140
+ onInputChange() {
141
+ this.spinner.class = this.getClass(this.spinner.type ?? DEFAULTS.SPINNER_TYPE, this.spinner.size ?? 'default');
142
+ }
143
+ /**
144
+ * Component destroy event
145
+ */
146
+ ngOnDestroy() {
147
+ this.ngUnsubscribe.next();
148
+ this.ngUnsubscribe.complete();
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgxSpinnerComponent, deps: [{ token: i1.NgxSpinnerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: NgxSpinnerComponent, isStandalone: true, selector: "ngx-spinner", inputs: { bdColor: "bdColor", size: "size", color: "color", type: "type", fullScreen: "fullScreen", name: "name", zIndex: "zIndex", template: "template", showSpinner: "showSpinner", disableAnimation: "disableAnimation" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "spinnerDOM", first: true, predicate: ["overlay"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (spinner.show) {\n\t<div\n\t\t#overlay\n\t\t[@.disabled]=\"disableAnimation\"\n\t\t[@fadeIn]=\"'in'\"\n\t\t[style.background-color]=\"spinner.bdColor\"\n\t\t[style.position]=\"spinner.fullScreen ? 'fixed' : 'absolute'\"\n\t\t[style.z-index]=\"spinner.zIndex\"\n\t\tclass=\"ngx-spinner-overlay\">\n\t\t@if (spinner.show) {\n\t\t\t<div [class]=\"spinner.class\" [style.color]=\"spinner.color\">\n\t\t\t\t@for (index of spinner.divArray; track index) {\n\t\t\t\t\t<div></div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (template) {\n\t\t\t<div [innerHTML]=\"template | safeHtml\"></div>\n\t\t}\n\t\t<div [style.z-index]=\"spinner.zIndex\" class=\"loading-text\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n}\n", styles: [".la-ball-clip-rotate,.la-ball-clip-rotate>div{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.la-ball-clip-rotate{display:block;font-size:0;color:#fff}.la-ball-clip-rotate.la-dark{color:#333}.la-ball-clip-rotate>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.la-ball-clip-rotate{width:32px;height:32px}.la-ball-clip-rotate>div{width:32px;height:32px;background:transparent;border-width:2px;border-bottom-color:transparent;border-radius:100%;-webkit-animation:ball-clip-rotate .75s linear infinite;-moz-animation:ball-clip-rotate .75s linear infinite;-o-animation:ball-clip-rotate .75s linear infinite;animation:ball-clip-rotate .75s linear infinite}.la-ball-clip-rotate.la-sm{width:16px;height:16px}.la-ball-clip-rotate.la-sm>div{width:16px;height:16px;border-width:1px}.la-ball-clip-rotate.la-2x{width:64px;height:64px}.la-ball-clip-rotate.la-2x>div{width:64px;height:64px;border-width:4px}.la-ball-clip-rotate.la-3x{width:96px;height:96px}.la-ball-clip-rotate.la-3x>div{width:96px;height:96px;border-width:6px}@-webkit-keyframes ball-clip-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes ball-clip-rotate{0%{-moz-transform:rotate(0deg);transform:rotate(0)}50%{-moz-transform:rotate(180deg);transform:rotate(180deg)}to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes ball-clip-rotate{0%{-o-transform:rotate(0deg);transform:rotate(0)}50%{-o-transform:rotate(180deg);transform:rotate(180deg)}to{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ball-clip-rotate{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ngx-spinner-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ngx-spinner-overlay>div:not(.loading-text){top:50%;left:50%;margin:0;position:absolute;transform:translate(-50%,-50%)}.loading-text{position:absolute;top:60%;left:50%;transform:translate(-50%,-60%)}\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n"], dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], animations: [
152
+ trigger('fadeIn', [
153
+ state('in', style({ opacity: 1 })),
154
+ transition(':enter', [style({ opacity: 0 }), animate(300)]),
155
+ transition(':leave', animate(200, style({ opacity: 0 }))),
156
+ ]),
157
+ ] }); }
158
+ }
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgxSpinnerComponent, decorators: [{
160
+ type: Component,
161
+ args: [{ selector: 'ngx-spinner', standalone: true, imports: [SafeHtmlPipe], animations: [
162
+ trigger('fadeIn', [
163
+ state('in', style({ opacity: 1 })),
164
+ transition(':enter', [style({ opacity: 0 }), animate(300)]),
165
+ transition(':leave', animate(200, style({ opacity: 0 }))),
166
+ ]),
167
+ ], template: "@if (spinner.show) {\n\t<div\n\t\t#overlay\n\t\t[@.disabled]=\"disableAnimation\"\n\t\t[@fadeIn]=\"'in'\"\n\t\t[style.background-color]=\"spinner.bdColor\"\n\t\t[style.position]=\"spinner.fullScreen ? 'fixed' : 'absolute'\"\n\t\t[style.z-index]=\"spinner.zIndex\"\n\t\tclass=\"ngx-spinner-overlay\">\n\t\t@if (spinner.show) {\n\t\t\t<div [class]=\"spinner.class\" [style.color]=\"spinner.color\">\n\t\t\t\t@for (index of spinner.divArray; track index) {\n\t\t\t\t\t<div></div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (template) {\n\t\t\t<div [innerHTML]=\"template | safeHtml\"></div>\n\t\t}\n\t\t<div [style.z-index]=\"spinner.zIndex\" class=\"loading-text\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t</div>\n}\n", styles: [".la-ball-clip-rotate,.la-ball-clip-rotate>div{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.la-ball-clip-rotate{display:block;font-size:0;color:#fff}.la-ball-clip-rotate.la-dark{color:#333}.la-ball-clip-rotate>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.la-ball-clip-rotate{width:32px;height:32px}.la-ball-clip-rotate>div{width:32px;height:32px;background:transparent;border-width:2px;border-bottom-color:transparent;border-radius:100%;-webkit-animation:ball-clip-rotate .75s linear infinite;-moz-animation:ball-clip-rotate .75s linear infinite;-o-animation:ball-clip-rotate .75s linear infinite;animation:ball-clip-rotate .75s linear infinite}.la-ball-clip-rotate.la-sm{width:16px;height:16px}.la-ball-clip-rotate.la-sm>div{width:16px;height:16px;border-width:1px}.la-ball-clip-rotate.la-2x{width:64px;height:64px}.la-ball-clip-rotate.la-2x>div{width:64px;height:64px;border-width:4px}.la-ball-clip-rotate.la-3x{width:96px;height:96px}.la-ball-clip-rotate.la-3x>div{width:96px;height:96px;border-width:6px}@-webkit-keyframes ball-clip-rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes ball-clip-rotate{0%{-moz-transform:rotate(0deg);transform:rotate(0)}50%{-moz-transform:rotate(180deg);transform:rotate(180deg)}to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes ball-clip-rotate{0%{-o-transform:rotate(0deg);transform:rotate(0)}50%{-o-transform:rotate(180deg);transform:rotate(180deg)}to{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes ball-clip-rotate{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0)}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ngx-spinner-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ngx-spinner-overlay>div:not(.loading-text){top:50%;left:50%;margin:0;position:absolute;transform:translate(-50%,-50%)}.loading-text{position:absolute;top:60%;left:50%;transform:translate(-50%,-60%)}\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n"] }]
168
+ }], ctorParameters: () => [{ type: i1.NgxSpinnerService }, { type: i0.ChangeDetectorRef }], propDecorators: { bdColor: [{
169
+ type: Input
170
+ }], size: [{
171
+ type: Input
172
+ }], color: [{
173
+ type: Input
174
+ }], type: [{
175
+ type: Input
176
+ }], fullScreen: [{
177
+ type: Input
178
+ }], name: [{
179
+ type: Input
180
+ }], zIndex: [{
181
+ type: Input
182
+ }], template: [{
183
+ type: Input
184
+ }], showSpinner: [{
185
+ type: Input
186
+ }], disableAnimation: [{
187
+ type: Input
188
+ }], spinnerDOM: [{
189
+ type: ViewChild,
190
+ args: ['overlay']
191
+ }], handleKeyboardEvent: [{
192
+ type: HostListener,
193
+ args: ['document:keydown', ['$event']]
194
+ }] } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNwaW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcta2l0L3NyYy9saWIvY29tcG9uZW50cy9uZ3gtc3Bpbm5lci9uZ3gtc3Bpbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1raXQvc3JjL2xpYi9jb21wb25lbnRzL25neC1zcGlubmVyL25neC1zcGlubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQThDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6SSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQWdCaEQsTUFBTSxPQUFPLG1CQUFtQjtJQThFL0I7O09BRUc7SUFDSCxZQUNTLGNBQWlDLEVBQ2pDLGNBQWlDO1FBRGpDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFyQzFDOztXQUVHO1FBQ00scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDOztXQUVHO1FBRUgsWUFBTyxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFjdkM7O1lBRUk7UUFDSixrQkFBYSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FB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LENBQUMsQ0FBQyxDQUFDO2FBQ3pELENBQUM7U0FDRjs7MkZBRVcsbUJBQW1CO2tCQWQvQixTQUFTOytCQUNDLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsY0FHWDt3QkFDWCxPQUFPLENBQUMsUUFBUSxFQUFFOzRCQUNqQixLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNsQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBQzNELFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUN6RCxDQUFDO3FCQUNGO3NIQU9RLE9BQU87c0JBQWYsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkEyQmdCLFVBQVU7c0JBQS9CLFNBQVM7dUJBQUMsU0FBUztnQkF5QnBCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gJy4vbmd4LXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBERUZBVUxUUywgTE9BREVSUywgTmd4U3Bpbm5lciwgUFJJTUFSWV9TUElOTkVSLCBTaXplIH0gZnJvbSAnLi9uZ3gtc3Bpbm5lci5lbnVtJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi9zYWZlLWh0bWwucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25neC1zcGlubmVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1NhZmVIdG1sUGlwZV0sXG5cdHRlbXBsYXRlVXJsOiAnbmd4LXNwaW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnbmd4LXNwaW5uZXIuY29tcG9uZW50LmNzcyddLFxuXHRhbmltYXRpb25zOiBbXG5cdFx0dHJpZ2dlcignZmFkZUluJywgW1xuXHRcdFx0c3RhdGUoJ2luJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcblx0XHRcdHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7IG9wYWNpdHk6IDAgfSksIGFuaW1hdGUoMzAwKV0pLFxuXHRcdFx0dHJhbnNpdGlvbignOmxlYXZlJywgYW5pbWF0ZSgyMDAsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSkpLFxuXHRcdF0pLFxuXHRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cdC8qKlxuXHQgKiBUbyBzZXQgYmFja2Ryb3AgY29sb3Jcblx0ICogT25seSBzdXBwb3J0cyBSR0JBIGNvbG9yIGZvcm1hdFxuXHQgKi9cblx0QElucHV0KCkgYmRDb2xvcjogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUbyBzZXQgc3Bpbm5lciBzaXplXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBTaXplO1xuXG5cdC8qKlxuXHQgKiBUbyBzZXQgc3Bpbm5lciBjb2xvcihERUZBVUxUUy5TUElOTkVSX0NPTE9SKVxuXHQgKi9cblx0QElucHV0KCkgY29sb3I6IHN0cmluZztcblxuXHQvKipcblx0ICogVG8gc2V0IHR5cGUgb2Ygc3Bpbm5lclxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUbyB0b2dnbGUgZnVsbHNjcmVlbiBtb2RlXG5cdCAqL1xuXHRASW5wdXQoKSBmdWxsU2NyZWVuOiBib29sZWFuO1xuXHQvKipcblx0ICogU3Bpbm5lciBuYW1lXG5cdCAqL1xuXHRASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiB6LWluZGV4IHZhbHVlXG5cdCAqL1xuXG5cdEBJbnB1dCgpIHpJbmRleDogbnVtYmVyO1xuXHQvKipcblx0ICogQ3VzdG9tIHRlbXBsYXRlIGZvciBzcGlubmVyL2xvYWRlclxuXHQgKi9cblxuXHRASW5wdXQoKSB0ZW1wbGF0ZTogc3RyaW5nO1xuXHQvKipcblx0ICogU2hvdy9IaWRlIHRoZSBzcGlubmVyXG5cdCAqIEB0eXBlIHtib29sZWFufVxuXHQgKi9cblx0QElucHV0KCkgc2hvd1NwaW5uZXI6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRvIGVuYWJsZS9kaXNhYmxlIGFuaW1hdGlvblxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogU3Bpbm5lciBPYmplY3Rcblx0ICovXG5cblx0c3Bpbm5lcjogTmd4U3Bpbm5lciA9IG5ldyBOZ3hTcGlubmVyKCk7XG5cdC8qKlxuXHQgKiBBcnJheSBmb3Igc3Bpbm5lcidzIGRpdlxuXHQgKi9cblx0ZGl2QXJyYXk6IEFycmF5PG51bWJlcj47XG5cdC8qKlxuXHQgKiBDb3VudGVyIGZvciBkaXZcblx0ICovXG5cdGRpdkNvdW50OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBTaG93IHNwaW5uZXJcblx0ICoqL1xuXHRzaG93OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBVbnN1YnNjcmliZSBmcm9tIHNwaW5uZXIncyBvYnNlcnZhYmxlXG5cdCAqKi9cblx0bmdVbnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cdC8qKlxuXHQgKiBFbGVtZW50IFJlZmVyZW5jZVxuXHQgKi9cblx0Ly8gQHRzLWlnbm9yZVxuXHRAVmlld0NoaWxkKCdvdmVybGF5Jykgc3Bpbm5lckRPTTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBOZ3hTcGlubmVyQ29tcG9uZW50LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBzcGlubmVyU2VydmljZTogTmd4U3Bpbm5lclNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdCkge1xuXHRcdHRoaXMuYmRDb2xvciA9IERFRkFVTFRTLkJEX0NPTE9SO1xuXHRcdHRoaXMuekluZGV4ID0gREVGQVVMVFMuWl9JTkRFWDtcblx0XHR0aGlzLmNvbG9yID0gREVGQVVMVFMuU1BJTk5FUl9DT0xPUjtcblx0XHR0aGlzLnR5cGUgPSBERUZBVUxUUy5TUElOTkVSX1RZUEU7XG5cdFx0dGhpcy5zaXplID0gJ2xhcmdlJztcblx0XHR0aGlzLmZ1bGxTY3JlZW4gPSB0cnVlO1xuXHRcdHRoaXMubmFtZSA9IFBSSU1BUllfU1BJTk5FUjtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy50ZW1wbGF0ZSA9IG51bGw7XG5cdFx0dGhpcy5zaG93U3Bpbm5lciA9IGZhbHNlO1xuXHRcdHRoaXMuZGl2QXJyYXkgPSBbXTtcblx0XHR0aGlzLmRpdkNvdW50ID0gMDtcblx0XHR0aGlzLnNob3cgPSBmYWxzZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuXHRoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuc3Bpbm5lckRPTSAmJiB0aGlzLnNwaW5uZXJET00ubmF0aXZlRWxlbWVudCkge1xuXHRcdFx0ZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICAqIEluaXRpYWxpemF0aW9uIG1ldGhvZFxuXG4gICAqL1xuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLnNldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0dGhpcy5zcGlubmVyU2VydmljZVxuXHRcdFx0LmdldFNwaW5uZXIodGhpcy5uYW1lKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG5cdFx0XHQuc3Vic2NyaWJlKChzcGlubmVyOiBOZ3hTcGlubmVyKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0RGVmYXVsdE9wdGlvbnMoKTtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnNwaW5uZXIsIHNwaW5uZXIpO1xuXHRcdFx0XHRpZiAoc3Bpbm5lci5zaG93KSB7XG5cdFx0XHRcdFx0dGhpcy5vbklucHV0Q2hhbmdlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgZGVmYXVsdCBuZ3gtc3Bpbm5lciBvcHRpb25zXG5cdCAqL1xuXHRzZXREZWZhdWx0T3B0aW9ucyA9ICgpID0+IHtcblx0XHR0aGlzLnNwaW5uZXIgPSBuZXcgTmd4U3Bpbm5lcih7XG5cdFx0XHRuYW1lOiB0aGlzLm5hbWUsXG5cdFx0XHRiZENvbG9yOiB0aGlzLmJkQ29sb3IsXG5cdFx0XHRzaXplOiB0aGlzLnNpemUsXG5cdFx0XHRjb2xvcjogdGhpcy5jb2xvcixcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcblx0XHRcdGZ1bGxTY3JlZW46IHRoaXMuZnVsbFNjcmVlbixcblx0XHRcdGRpdkFycmF5OiB0aGlzLmRpdkFycmF5LFxuXHRcdFx0ZGl2Q291bnQ6IHRoaXMuZGl2Q291bnQsXG5cdFx0XHRzaG93OiB0aGlzLnNob3csXG5cdFx0XHR6SW5kZXg6IHRoaXMuekluZGV4LFxuXHRcdFx0dGVtcGxhdGU6IHRoaXMudGVtcGxhdGUsXG5cdFx0XHRzaG93U3Bpbm5lcjogdGhpcy5zaG93U3Bpbm5lcixcblx0XHR9KTtcblx0fTtcblxuXHQvKipcblx0ICogT24gY2hhbmdlcyBldmVudCBmb3IgaW5wdXQgdmFyaWFibGVzXG5cdCAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wS2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuXHRcdGZvciAoY29uc3QgcHJvcE5hbWUgaW4gY2hhbmdlcykge1xuXHRcdFx0aWYgKHByb3BOYW1lKSB7XG5cdFx0XHRcdGNvbnN0IGNoYW5nZWRQcm9wID0gY2hhbmdlc1twcm9wTmFtZV07XG5cdFx0XHRcdGlmIChjaGFuZ2VkUHJvcC5pc0ZpcnN0Q2hhbmdlKCkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY2hhbmdlZFByb3AuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VkUHJvcC5wcmV2aW91c1ZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZSAhPT0gJycpIHtcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdHRoaXMuc3Bpbm5lcltwcm9wTmFtZV0gPSBjaGFuZ2VkUHJvcC5jdXJyZW50VmFsdWU7XG5cdFx0XHRcdFx0XHRpZiAocHJvcE5hbWUgPT09ICdzaG93U3Bpbm5lcicpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdyh0aGlzLnNwaW5uZXIubmFtZSwgdGhpcy5zcGlubmVyKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUodGhpcy5zcGlubmVyLm5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRvIGdldCBjbGFzcyBmb3Igc3Bpbm5lclxuXHQgKi9cblx0Z2V0Q2xhc3ModHlwZTogc3RyaW5nLCBzaXplOiBTaXplKTogc3RyaW5nIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy5zcGlubmVyLmRpdkNvdW50ID0gTE9BREVSU1t0eXBlXTtcblx0XHR0aGlzLnNwaW5uZXIuZGl2QXJyYXkgPSBBcnJheSh0aGlzLnNwaW5uZXIuZGl2Q291bnQpXG5cdFx0XHQuZmlsbCgwKVxuXHRcdFx0Lm1hcCgoeCwgaSkgPT4gaSk7XG5cdFx0bGV0IHNpemVDbGFzcyA9ICcnO1xuXHRcdHN3aXRjaCAoc2l6ZS50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRjYXNlICdzbWFsbCc6XG5cdFx0XHRcdHNpemVDbGFzcyA9ICdsYS1zbSc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnbWVkaXVtJzpcblx0XHRcdFx0c2l6ZUNsYXNzID0gJ2xhLTJ4Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdsYXJnZSc6XG5cdFx0XHRcdHNpemVDbGFzcyA9ICdsYS0zeCc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiAnbGEtJyArIHR5cGUgKyAnICcgKyBzaXplQ2xhc3M7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgaW5wdXQgdmFyaWFibGVzIGhhdmUgY2hhbmdlZFxuXHQgKi9cblx0b25JbnB1dENoYW5nZSgpIHtcblx0XHR0aGlzLnNwaW5uZXIuY2xhc3MgPSB0aGlzLmdldENsYXNzKHRoaXMuc3Bpbm5lci50eXBlID8/IERFRkFVTFRTLlNQSU5ORVJfVFlQRSwgdGhpcy5zcGlubmVyLnNpemUgPz8gJ2RlZmF1bHQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb21wb25lbnQgZGVzdHJveSBldmVudFxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcblx0XHR0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblx0fVxufVxuIiwiQGlmIChzcGlubmVyLnNob3cpIHtcblx0PGRpdlxuXHRcdCNvdmVybGF5XG5cdFx0W0AuZGlzYWJsZWRdPVwiZGlzYWJsZUFuaW1hdGlvblwiXG5cdFx0W0BmYWRlSW5dPVwiJ2luJ1wiXG5cdFx0W3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic3Bpbm5lci5iZENvbG9yXCJcblx0XHRbc3R5bGUucG9zaXRpb25dPVwic3Bpbm5lci5mdWxsU2NyZWVuID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZSdcIlxuXHRcdFtzdHlsZS56LWluZGV4XT1cInNwaW5uZXIuekluZGV4XCJcblx0XHRjbGFzcz1cIm5neC1zcGlubmVyLW92ZXJsYXlcIj5cblx0XHRAaWYgKHNwaW5uZXIuc2hvdykge1xuXHRcdFx0PGRpdiBbY2xhc3NdPVwic3Bpbm5lci5jbGFzc1wiIFtzdHlsZS5jb2xvcl09XCJzcGlubmVyLmNvbG9yXCI+XG5cdFx0XHRcdEBmb3IgKGluZGV4IG9mIHNwaW5uZXIuZGl2QXJyYXk7IHRyYWNrIGluZGV4KSB7XG5cdFx0XHRcdFx0PGRpdj48L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXHRcdEBpZiAodGVtcGxhdGUpIHtcblx0XHRcdDxkaXYgW2lubmVySFRNTF09XCJ0ZW1wbGF0ZSB8IHNhZmVIdG1sXCI+PC9kaXY+XG5cdFx0fVxuXHRcdDxkaXYgW3N0eWxlLnotaW5kZXhdPVwic3Bpbm5lci56SW5kZXhcIiBjbGFzcz1cImxvYWRpbmctdGV4dFwiPlxuXHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbn1cbiJdfQ==