@ptsecurity/mosaic 17.2.1 → 17.2.3

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 (121) hide show
  1. package/autocomplete/autocomplete.scss +0 -2
  2. package/button/_button-theme.scss +3 -3
  3. package/button-toggle/_button-toggle-theme.scss +2 -2
  4. package/checkbox/_checkbox-theme.scss +1 -1
  5. package/code-block/_code-block-theme.scss +2 -2
  6. package/core/form-field/form-field-ref.d.ts +13 -0
  7. package/core/form-field/index.d.ts +1 -0
  8. package/core/forms/_forms-theme.scss +2 -2
  9. package/core/locales/en-US.d.ts +17 -0
  10. package/core/locales/es-LA.d.ts +17 -0
  11. package/core/locales/fa-IR.d.ts +17 -0
  12. package/core/locales/index.d.ts +6 -0
  13. package/core/locales/locale-service.d.ts +102 -0
  14. package/core/locales/pt-BR.d.ts +17 -0
  15. package/core/locales/ru-RU.d.ts +17 -0
  16. package/core/locales/zh-CN.d.ts +17 -0
  17. package/core/option/_optgroup-theme.scss +1 -1
  18. package/core/option/_option-theme.scss +1 -1
  19. package/core/public-api.d.ts +1 -0
  20. package/core/select/common.d.ts +35 -0
  21. package/core/select/index.d.ts +1 -0
  22. package/core/styles/common/_tokens.scss +29 -20
  23. package/core/styles/theming/_alerts.scss +5 -5
  24. package/core/styles/theming/_badges.scss +6 -6
  25. package/core/styles/typography/_typography.scss +26 -26
  26. package/datepicker/_datepicker-theme.scss +4 -4
  27. package/dl/_dl-theme.scss +8 -8
  28. package/dropdown/_dropdown-theme.scss +4 -4
  29. package/esm2022/core/form-field/form-field-ref.mjs +8 -0
  30. package/esm2022/core/form-field/index.mjs +2 -0
  31. package/esm2022/core/locales/en-US.mjs +18 -1
  32. package/esm2022/core/locales/es-LA.mjs +18 -1
  33. package/esm2022/core/locales/fa-IR.mjs +18 -1
  34. package/esm2022/core/locales/index.mjs +7 -1
  35. package/esm2022/core/locales/pt-BR.mjs +18 -1
  36. package/esm2022/core/locales/ru-RU.mjs +18 -1
  37. package/esm2022/core/locales/zh-CN.mjs +18 -1
  38. package/esm2022/core/public-api.mjs +2 -1
  39. package/esm2022/core/select/common.mjs +119 -0
  40. package/esm2022/core/select/index.mjs +2 -1
  41. package/esm2022/core/version.mjs +2 -2
  42. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  43. package/esm2022/file-upload/multiple-file-upload.component.mjs +49 -26
  44. package/esm2022/file-upload/single-file-upload.component.mjs +38 -14
  45. package/esm2022/form-field/form-field.mjs +5 -11
  46. package/esm2022/form-field/password-hint.mjs +5 -4
  47. package/esm2022/form-field/validate.directive.mjs +5 -2
  48. package/esm2022/modal/modal.component.mjs +3 -3
  49. package/esm2022/modal/modal.directive.mjs +12 -6
  50. package/esm2022/progress-spinner/progress-spinner.component.mjs +2 -2
  51. package/esm2022/select/select.component.mjs +15 -111
  52. package/esm2022/select/select.module.mjs +17 -17
  53. package/esm2022/tags/tag-default-options.mjs +1 -1
  54. package/esm2022/tags/tag-input.mjs +17 -3
  55. package/esm2022/timepicker/timepicker.directive.mjs +10 -2
  56. package/esm2022/timezone/timezone-select.component.mjs +3 -3
  57. package/esm2022/toast/toast.service.mjs +17 -11
  58. package/esm2022/tree-select/tree-select.component.mjs +4 -5
  59. package/fesm2022/ptsecurity-mosaic-core.mjs +227 -4
  60. package/fesm2022/ptsecurity-mosaic-core.mjs.map +1 -1
  61. package/fesm2022/ptsecurity-mosaic-datepicker.mjs +1 -1
  62. package/fesm2022/ptsecurity-mosaic-datepicker.mjs.map +1 -1
  63. package/fesm2022/ptsecurity-mosaic-file-upload.mjs +80 -36
  64. package/fesm2022/ptsecurity-mosaic-file-upload.mjs.map +1 -1
  65. package/fesm2022/ptsecurity-mosaic-form-field.mjs +11 -14
  66. package/fesm2022/ptsecurity-mosaic-form-field.mjs.map +1 -1
  67. package/fesm2022/ptsecurity-mosaic-modal.mjs +11 -6
  68. package/fesm2022/ptsecurity-mosaic-modal.mjs.map +1 -1
  69. package/fesm2022/ptsecurity-mosaic-progress-spinner.mjs +2 -2
  70. package/fesm2022/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  71. package/fesm2022/ptsecurity-mosaic-select.mjs +34 -130
  72. package/fesm2022/ptsecurity-mosaic-select.mjs.map +1 -1
  73. package/fesm2022/ptsecurity-mosaic-tags.mjs +17 -4
  74. package/fesm2022/ptsecurity-mosaic-tags.mjs.map +1 -1
  75. package/fesm2022/ptsecurity-mosaic-timepicker.mjs +9 -1
  76. package/fesm2022/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  77. package/fesm2022/ptsecurity-mosaic-timezone.mjs +2 -2
  78. package/fesm2022/ptsecurity-mosaic-timezone.mjs.map +1 -1
  79. package/fesm2022/ptsecurity-mosaic-toast.mjs +15 -9
  80. package/fesm2022/ptsecurity-mosaic-toast.mjs.map +1 -1
  81. package/fesm2022/ptsecurity-mosaic-tree-select.mjs +4 -4
  82. package/fesm2022/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  83. package/file-upload/_file-upload-theme.scss +7 -7
  84. package/file-upload/multiple-file-upload.component.d.ts +17 -6
  85. package/file-upload/single-file-upload.component.d.ts +15 -6
  86. package/form-field/_form-field-theme.scss +7 -5
  87. package/form-field/form-field.d.ts +1 -7
  88. package/form-field/validate.directive.d.ts +5 -2
  89. package/input/_input-theme.scss +4 -4
  90. package/link/_link-theme.scss +2 -2
  91. package/list/_list-theme.scss +1 -1
  92. package/loader-overlay/_loader-overlay-theme.scss +2 -2
  93. package/markdown/_markdown-theme.scss +14 -14
  94. package/modal/_modal-theme.scss +2 -2
  95. package/modal/modal.directive.d.ts +1 -1
  96. package/navbar/_navbar-theme.scss +4 -4
  97. package/package.json +19 -19
  98. package/popover/_popover-theme.scss +3 -3
  99. package/prebuilt-themes/dark-theme.css +1 -1
  100. package/prebuilt-themes/default-theme.css +1 -1
  101. package/progress-spinner/progress-spinner.scss +1 -0
  102. package/radio/_radio-theme.scss +1 -1
  103. package/select/_select-theme.scss +2 -2
  104. package/select/select.component.d.ts +2 -32
  105. package/select/select.module.d.ts +1 -1
  106. package/sidepanel/_sidepanel-theme.scss +3 -3
  107. package/table/_table-theme.scss +2 -2
  108. package/tabs/_tabs-theme.scss +1 -1
  109. package/tags/_tag-theme.scss +5 -5
  110. package/tags/tag-default-options.d.ts +1 -0
  111. package/tags/tag-input.d.ts +7 -1
  112. package/textarea/_textarea-theme.scss +2 -2
  113. package/timezone/_timezone-option-theme.scss +3 -3
  114. package/timezone/timezone-select.component.d.ts +2 -1
  115. package/toast/_toast-theme.scss +3 -3
  116. package/toast/toast.service.d.ts +8 -4
  117. package/toggle/_toggle-theme.scss +2 -2
  118. package/tooltip/_tooltip-theme.scss +3 -3
  119. package/tree/_tree-theme.scss +1 -1
  120. package/tree-select/_tree-select-theme.scss +1 -1
  121. package/tree-select/tree-select.component.d.ts +1 -2
@@ -0,0 +1,119 @@
1
+ /* tslint:disable:no-empty */
2
+ import { Directive, Inject, Optional } from '@angular/core';
3
+ import { END, HOME, SPACE, ESCAPE } from '@ptsecurity/cdk/keycodes';
4
+ import { Subscription } from 'rxjs';
5
+ import { MC_FORM_FIELD_REF } from '../form-field';
6
+ import * as i0 from "@angular/core";
7
+ export class McSelectFooter {
8
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectFooter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.0", type: McSelectFooter, isStandalone: true, selector: "mc-select-footer, [mc-select-footer]", host: { classAttribute: "mc-select__footer" }, ngImport: i0 }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectFooter, decorators: [{
12
+ type: Directive,
13
+ args: [{
14
+ selector: 'mc-select-footer, [mc-select-footer]',
15
+ standalone: true,
16
+ host: { class: 'mc-select__footer' }
17
+ }]
18
+ }] });
19
+ export class McSelectSearch {
20
+ get ngControl() {
21
+ return this.formField.control.ngControl;
22
+ }
23
+ constructor(formField) {
24
+ this.formField = formField;
25
+ this.searchChangesSubscription = new Subscription();
26
+ this.isSearchChanged = false;
27
+ formField.canCleanerClearByEsc = false;
28
+ }
29
+ focus() {
30
+ this.formField.focusViaKeyboard();
31
+ }
32
+ reset() {
33
+ this.ngControl.reset();
34
+ }
35
+ value() {
36
+ return this.formField.control.value;
37
+ }
38
+ ngAfterContentInit() {
39
+ if (this.formField.control.controlType !== 'input') {
40
+ throw Error('McSelectSearch does not work without mcInput');
41
+ }
42
+ if (!this.ngControl) {
43
+ throw Error('McSelectSearch does not work without ngControl');
44
+ }
45
+ Promise.resolve().then(() => {
46
+ this.searchChangesSubscription = this.ngControl.valueChanges
47
+ .subscribe(() => this.isSearchChanged = true);
48
+ });
49
+ }
50
+ ngOnDestroy() {
51
+ this.searchChangesSubscription.unsubscribe();
52
+ }
53
+ handleKeydown(event) {
54
+ // tslint:disable-next-line:deprecation
55
+ if (event.keyCode === ESCAPE) {
56
+ if (this.value()) {
57
+ this.reset();
58
+ event.stopPropagation();
59
+ }
60
+ }
61
+ // tslint:disable-next-line:deprecation
62
+ if ([SPACE, HOME, END].includes(event.keyCode)) {
63
+ event.stopPropagation();
64
+ }
65
+ }
66
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectSearch, deps: [{ token: MC_FORM_FIELD_REF, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
67
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.0", type: McSelectSearch, isStandalone: true, selector: "[mcSelectSearch]", host: { listeners: { "keydown": "handleKeydown($event)" } }, exportAs: ["mcSelectSearch"], ngImport: i0 }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectSearch, decorators: [{
70
+ type: Directive,
71
+ args: [{
72
+ selector: '[mcSelectSearch]',
73
+ exportAs: 'mcSelectSearch',
74
+ standalone: true,
75
+ host: {
76
+ '(keydown)': 'handleKeydown($event)'
77
+ }
78
+ }]
79
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
80
+ type: Optional
81
+ }, {
82
+ type: Inject,
83
+ args: [MC_FORM_FIELD_REF]
84
+ }] }] });
85
+ export class McSelectSearchEmptyResult {
86
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectSearchEmptyResult, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
87
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.0", type: McSelectSearchEmptyResult, isStandalone: true, selector: "[mc-select-search-empty-result]", exportAs: ["mcSelectSearchEmptyResult"], ngImport: i0 }); }
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectSearchEmptyResult, decorators: [{
90
+ type: Directive,
91
+ args: [{
92
+ selector: '[mc-select-search-empty-result]',
93
+ exportAs: 'mcSelectSearchEmptyResult',
94
+ standalone: true
95
+ }]
96
+ }] });
97
+ export class McSelectTrigger {
98
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
99
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.0", type: McSelectTrigger, isStandalone: true, selector: "mc-select-trigger, [mc-select-trigger]", ngImport: i0 }); }
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectTrigger, decorators: [{
102
+ type: Directive,
103
+ args: [{
104
+ selector: 'mc-select-trigger, [mc-select-trigger]',
105
+ standalone: true
106
+ }]
107
+ }] });
108
+ export class McSelectMatcher {
109
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectMatcher, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
110
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.0", type: McSelectMatcher, isStandalone: true, selector: "mc-select-matcher, [mc-select-matcher]", ngImport: i0 }); }
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McSelectMatcher, decorators: [{
113
+ type: Directive,
114
+ args: [{
115
+ selector: 'mc-select-matcher, [mc-select-matcher]',
116
+ standalone: true
117
+ }]
118
+ }] });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL2NvcmUvc2VsZWN0L2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2QkFBNkI7QUFFN0IsT0FBTyxFQUVILFNBQVMsRUFDVCxNQUFNLEVBRU4sUUFBUSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxHQUFHLEVBQ0gsSUFBSSxFQUNKLEtBQUssRUFDTCxNQUFNLEVBQ1QsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0IsTUFBTSxlQUFlLENBQUM7O0FBUWxFLE1BQU0sT0FBTyxjQUFjO2lJQUFkLGNBQWM7cUhBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsc0NBQXNDO29CQUNoRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO2lCQUN2Qzs7QUFZRCxNQUFNLE9BQU8sY0FBYztJQUt2QixJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBNkQsU0FBeUI7UUFBekIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFSdEYsOEJBQXlCLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0Qsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFPN0IsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakQsTUFBTSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixNQUFNLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhO2lCQUN4RCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDOUIsdUNBQXVDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztpSUF6RFEsY0FBYyxrQkFTUyxpQkFBaUI7cUhBVHhDLGNBQWM7OzJGQUFkLGNBQWM7a0JBUjFCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixXQUFXLEVBQUUsdUJBQXVCO3FCQUN2QztpQkFDSjs7MEJBVWdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOztBQXlEckQsTUFBTSxPQUFPLHlCQUF5QjtpSUFBekIseUJBQXlCO3FIQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBTHJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlDQUFpQztvQkFDM0MsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsVUFBVSxFQUFFLElBQUk7aUJBQ25COztBQVFELE1BQU0sT0FBTyxlQUFlO2lJQUFmLGVBQWU7cUhBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0NBQXdDO29CQUNsRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7O0FBUUQsTUFBTSxPQUFPLGVBQWU7aUlBQWYsZUFBZTtxSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3Q0FBd0M7b0JBQ2xELFVBQVUsRUFBRSxJQUFJO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlOm5vLWVtcHR5ICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRU5ELFxuICAgIEhPTUUsXG4gICAgU1BBQ0UsXG4gICAgRVNDQVBFXG59IGZyb20gJ0BwdHNlY3VyaXR5L2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTUNfRk9STV9GSUVMRF9SRUYsIE1jRm9ybUZpZWxkUmVmIH0gZnJvbSAnLi4vZm9ybS1maWVsZCc7XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdtYy1zZWxlY3QtZm9vdGVyLCBbbWMtc2VsZWN0LWZvb3Rlcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDogeyBjbGFzczogJ21jLXNlbGVjdF9fZm9vdGVyJyB9XG59KVxuZXhwb3J0IGNsYXNzIE1jU2VsZWN0Rm9vdGVyIHt9XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbWNTZWxlY3RTZWFyY2hdJyxcbiAgICBleHBvcnRBczogJ21jU2VsZWN0U2VhcmNoJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhrZXlkb3duKSc6ICdoYW5kbGVLZXlkb3duKCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNY1NlbGVjdFNlYXJjaCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgc2VhcmNoQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgaXNTZWFyY2hDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBnZXQgbmdDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRmllbGQuY29udHJvbC5uZ0NvbnRyb2w7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChNQ19GT1JNX0ZJRUxEX1JFRikgcHJvdGVjdGVkIGZvcm1GaWVsZDogTWNGb3JtRmllbGRSZWYpIHtcbiAgICAgICAgZm9ybUZpZWxkLmNhbkNsZWFuZXJDbGVhckJ5RXNjID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkLmZvY3VzVmlhS2V5Ym9hcmQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wucmVzZXQoKTtcbiAgICB9XG5cbiAgICB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkLmNvbnRyb2wudmFsdWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtRmllbGQuY29udHJvbC5jb250cm9sVHlwZSAhPT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ01jU2VsZWN0U2VhcmNoIGRvZXMgbm90IHdvcmsgd2l0aG91dCBtY0lucHV0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTWNTZWxlY3RTZWFyY2ggZG9lcyBub3Qgd29yayB3aXRob3V0IG5nQ29udHJvbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMhXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzU2VhcmNoQ2hhbmdlZCA9IHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgICBpZiAoW1NQQUNFLCBIT01FLCBFTkRdLmluY2x1ZGVzKGV2ZW50LmtleUNvZGUpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttYy1zZWxlY3Qtc2VhcmNoLWVtcHR5LXJlc3VsdF0nLFxuICAgIGV4cG9ydEFzOiAnbWNTZWxlY3RTZWFyY2hFbXB0eVJlc3VsdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNY1NlbGVjdFNlYXJjaEVtcHR5UmVzdWx0IHt9XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdtYy1zZWxlY3QtdHJpZ2dlciwgW21jLXNlbGVjdC10cmlnZ2VyXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNY1NlbGVjdFRyaWdnZXIge31cblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ21jLXNlbGVjdC1tYXRjaGVyLCBbbWMtc2VsZWN0LW1hdGNoZXJdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE1jU2VsZWN0TWF0Y2hlciB7fVxuIl19
@@ -1,4 +1,5 @@
1
1
  export * from './events';
2
2
  export * from './errors';
3
3
  export * from './constants';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvY29yZS9zZWxlY3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG4iXX0=
4
+ export * from './common';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvY29yZS9zZWxlY3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbic7XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  import { Version } from '@angular/core';
2
- export const VERSION = new Version('17.2.1+sha-b044877');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlcnNpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNy4yLjErc2hhLWIwNDQ4NzcnKTtcbiJdfQ==
2
+ export const VERSION = new Version('17.2.3+sha-0b60e9f');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlcnNpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNy4yLjMrc2hhLTBiNjBlOWYnKTtcbiJdfQ==
@@ -112,7 +112,7 @@ export class McCalendarHeader {
112
112
  }
113
113
  }
114
114
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McCalendarHeader, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
115
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i5.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
115
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i1.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
116
116
  }
117
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McCalendarHeader, decorators: [{
118
118
  type: Component,
@@ -1,5 +1,6 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Inject, Input, Optional, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Inject, Input, Optional, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core';
2
+ import { MC_LOCALE_SERVICE, McLocaleService, ruRULocaleData } from '@ptsecurity/mosaic/core';
3
+ import { BehaviorSubject, Subscription } from 'rxjs';
3
4
  import { MC_FILE_UPLOAD_CONFIGURATION } from './file-upload';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
@@ -12,17 +13,7 @@ import * as i7 from "@ptsecurity/mosaic/link";
12
13
  import * as i8 from "./file-drop";
13
14
  import * as i9 from "@ptsecurity/mosaic/core";
14
15
  let nextMultipleFileUploadUniqueId = 0;
15
- export const MC_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION = {
16
- captionText: 'Перетащите сюда или',
17
- captionTextWhenSelected: 'Перетащите еще или',
18
- captionTextForCompactSize: 'Перетащите файлы или',
19
- browseLink: 'выберите',
20
- title: 'Загрузите файлы',
21
- gridHeaders: {
22
- file: 'Файл',
23
- size: 'Размер'
24
- }
25
- };
16
+ export const MC_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION = ruRULocaleData['ru-RU'].fileUpload.multiple;
26
17
  export class McMultipleFileUploadComponent {
27
18
  get acceptedFiles() {
28
19
  return this.accept && this.accept.length > 0 ? this.accept.map((ext) => `.${ext}`).join(',') : '*/*';
@@ -30,20 +21,33 @@ export class McMultipleFileUploadComponent {
30
21
  get hasErrors() {
31
22
  return this.errors && !!this.errors.length;
32
23
  }
33
- constructor(renderer, config) {
24
+ constructor(renderer, cdr, configuration, localeService) {
34
25
  this.renderer = renderer;
35
- this.config = config;
26
+ this.cdr = cdr;
27
+ this.configuration = configuration;
28
+ this.localeService = localeService;
36
29
  this.errors = [];
37
30
  this.files = [];
38
31
  this.size = 'default';
39
32
  this.inputId = `mc-multiple-file-upload-${nextMultipleFileUploadUniqueId++}`;
40
33
  this.fileQueueChanged = new EventEmitter();
41
- this.config = config || MC_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION;
42
- this.columnDefs = [
43
- { header: this.config.gridHeaders.file, cssClass: 'file' },
44
- { header: this.config.gridHeaders.size, cssClass: 'size' },
45
- { header: '', cssClass: 'action' }
46
- ];
34
+ this.updateLocaleParams = () => {
35
+ this.config = this.configuration || this.localeService?.getParams('fileUpload').multiple;
36
+ this.columnDefs = [
37
+ { header: this.config.gridHeaders.file, cssClass: 'file' },
38
+ { header: this.config.gridHeaders.size, cssClass: 'size' },
39
+ { header: '', cssClass: 'action' }
40
+ ];
41
+ this.makeCaptionText();
42
+ this.cdr.markForCheck();
43
+ };
44
+ this.localeSubscription = this.localeService?.changes.subscribe(this.updateLocaleParams) || Subscription.EMPTY;
45
+ if (!localeService) {
46
+ this.initDefaultParams();
47
+ }
48
+ }
49
+ ngOnDestroy() {
50
+ this.localeSubscription.unsubscribe();
47
51
  }
48
52
  onFileSelectedViaClick({ target }) {
49
53
  if (this.disabled) {
@@ -107,19 +111,38 @@ export class McMultipleFileUploadComponent {
107
111
  const fileExt = file.name.split('.').pop() || '';
108
112
  return this.acceptedFiles !== '*/*' && this.acceptedFiles.length > 0 ? this.acceptedFiles.includes(fileExt) : true;
109
113
  }
110
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McMultipleFileUploadComponent, deps: [{ token: i0.Renderer2 }, { token: MC_FILE_UPLOAD_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
111
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: McMultipleFileUploadComponent, selector: "mc-multiple-file-upload", inputs: { accept: "accept", disabled: "disabled", errors: "errors", files: "files", size: "size", inputId: "inputId", customValidation: "customValidation" }, outputs: { fileQueueChanged: "fileQueueChanged" }, host: { classAttribute: "mc-multiple-file-upload" }, queries: [{ propertyName: "customFileIcon", first: true, predicate: ["mcFileIcon"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"mc-file-upload\"\n mcFileDrop\n [class.disabled]=\"disabled\"\n [class.selected]=\"files && files.length\"\n [ngClass]=\"size\"\n (filesDropped)=\"onFileDropped($event)\"\n>\n <ng-container *ngIf=\"!files.length; else fileOutput\">\n <div class=\"dropzone\">\n <ng-container *ngIf=\"size === 'default' else compactCaption\">\n <i mc-icon=\"mc-upload-to-cloud_64\"></i>\n <div class=\"dropzone__text\">\n <span class=\"multiple__header\">{{ config.title }}</span>\n <div>\n <span class=\"multiple__caption\">\n {{ config.captionText }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n\n<div class=\"mc-file-upload__info-section\">\n <mc-hint class=\"mc-file-upload__hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </mc-hint>\n\n <ng-container *ngIf=\"hasErrors\">\n <mc-hint class=\"mc-file-upload__hint mc-error\"\n *ngFor=\"let error of errors\">\n {{ error }}\n </mc-hint>\n </ng-container>\n</div>\n\n<ng-template #fileOutput>\n <div class=\"file-upload__dropzone\">\n <div class=\"mc-file-upload__grid\">\n <div class=\"mc-file-multiple-uploaded__header\">\n <div class=\"mc-file-multiple-uploaded__header-inner\">\n <div [class]=\"'mc-file-upload__' + column.cssClass\" *ngFor=\"let column of columnDefs\">\n {{ column.header }}\n </div>\n </div>\n </div>\n\n <mc-list-selection [autoSelect]=\"false\" [disabled]=\"disabled\">\n <mc-list-option\n class=\"multiple__uploaded-item\"\n [value]=\"file.file.name\"\n (keydown.delete)=\"deleteFile(index)\"\n (keydown.backspace)=\"deleteFile(index)\"\n *ngFor=\"let file of files; let index = index;\">\n <div class=\"mc-file-upload__row\" [class.error]=\"file.hasError\">\n <div class=\"mc-file-upload__file\">\n <ng-container *ngIf=\"{ loading: file.loading | async, progress: file.progress | async } as asyncData\">\n <ng-container *ngIf=\"!asyncData.loading\"\n [ngTemplateOutlet]=\"$any(customFileIcon)\"\n [ngTemplateOutletContext]=\"{ $implicit: file }\"\n >\n </ng-container>\n\n <mc-progress-spinner\n class=\"pt-nat-file-upload-name-cell__icon\"\n [value]=\"asyncData.progress || 0\"\n *ngIf=\"asyncData.loading\"\n ></mc-progress-spinner>\n </ng-container>\n\n <span class=\"file-item__text\" [mcEllipsisCenter]=\"file.file.name\" [minVisibleLength]=\"10\"></span>\n </div>\n <div class=\"mc-file-upload__size\">\n {{ file.file.size | mcDataSize }}\n </div>\n <div class=\"mc-file-upload__action\">\n <i mc-icon=\"mc-close-circle_16\" (click)=\"deleteFile(index, $event)\"></i>\n </div>\n </div>\n </mc-list-option>\n </mc-list-selection>\n </div>\n\n <div class=\"btn-upload\">\n <div class=\"dropzone\">\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ config.captionTextWhenSelected }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #compactCaption>\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ config.captionText }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n</ng-template>\n\n<ng-template #inputTemplate>\n <input #input\n type=\"file\"\n class=\"cdk-visually-hidden\"\n multiple\n [id]=\"inputId\"\n [accept]=\"acceptedFiles\"\n [disabled]=\"disabled\"\n (change)=\"onFileSelectedViaClick($event)\">\n</ng-template>\n", styles: [".mc-file-upload{box-sizing:border-box;display:flex;align-items:center;position:relative}.mc-file-upload .dropzone,.mc-file-upload .file-item{display:flex;align-items:center}.mc-file-upload .mc-ellipsis-center{position:relative;display:flex}.mc-file-upload .mc-ellipsis-center .data-text-start{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:pre}.mc-file-upload .mc-ellipsis-center .data-text-end{flex:1 0 auto;overflow:hidden;white-space:pre}\n", "@keyframes mc-progress{0%{background-position:0 0}to{background-position:29px 0}}.mc-progress{position:relative}.mc-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,rgba(0,0,0,.05) 10px,transparent 10px,transparent 20px,rgba(0,0,0,.05) 20px,rgba(0,0,0,.05) 30px,transparent 30px) repeat;background-size:29px 29px;animation:mc-progress 1s linear infinite}.mc-group{display:flex;flex-direction:row}.mc-group .mc-group_justified>.mc-group-item{width:100%}.mc-group .mc-group-item+.mc-group-item{margin-left:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group{display:flex;flex-direction:column}.mc-vertical-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.mc-vertical-group>.mc-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group .mc-group-item+.mc-group-item{margin-top:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-no-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mc-file-upload{border-radius:var(--mc-file-upload-size-multiple-border-radius, 4px);border-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-style:var(--mc-file-upload-size-multiple-border-style, dashed)}.mc-file-upload .mc-list-option{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);height:36px}.mc-file-upload .mc-list-option .mc-icon{margin-right:0}.mc-file-upload .mc-file-upload__grid{min-height:142px}.mc-file-upload .mc-file-multiple-uploaded__header-inner,.mc-file-upload .mc-file-upload__row{display:flex;align-items:center}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{width:65%;max-width:65%}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__size{width:var(--mc-size-7xl, 64px);min-width:var(--mc-size-7xl, 64px);text-align:left;flex-grow:1}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__action{padding-left:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px);padding-right:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px)}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{display:flex;align-items:center}.mc-file-upload .mc-file-upload__row .mc-file-upload__file .file-item__text{margin-left:0;width:90%}.mc-file-upload .mc-file-multiple-uploaded__header{border-bottom-width:1px;border-bottom-style:solid}.mc-file-upload .mc-file-multiple-uploaded__header-inner{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);border:2px solid transparent;border-bottom:unset;box-sizing:border-box;height:var(--mc-size-3xl, 32px)}.mc-file-upload .btn-upload .dropzone{margin:0;border-top-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-top-style:var(--mc-file-upload-size-multiple-border-style, dashed);padding:3px var(--mc-size-m, 12px) var(--mc-size-xxs, 4px) var(--mc-size-m, 12px)}.mc-file-upload.compact:not(.selected){height:var(--mc-file-upload-size-single-height, 48px);padding-top:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-bottom:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-left:var(--mc-size-m, 12px)}.mc-file-upload.compact .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload.default{min-height:176px;justify-content:center}.mc-file-upload.default .dropzone .dropzone__text{margin-left:var(--mc-size-l, 16px)}.mc-file-upload.default .btn-upload .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload .file-upload__dropzone{width:100%;height:100%}.mc-hint{display:block}.mc-file-upload__hint{margin-top:var(--mc-form-field-hint-size-margin-top, 4px)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.McProgressSpinner, selector: "mc-progress-spinner", inputs: ["color", "id", "value", "mode", "size"] }, { kind: "component", type: i3.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i3.McIconCSSStyler, selector: "[mc-icon]" }, { kind: "component", type: i4.McListSelection, selector: "mc-list-selection", inputs: ["disabled", "autoSelect", "noUnselectLast", "horizontal", "tabIndex", "compareWith"], outputs: ["onSelectAll", "onCopy", "selectionChange"], exportAs: ["mcListSelection"] }, { kind: "component", type: i4.McListOption, selector: "mc-list-option", inputs: ["checkboxPosition", "value", "disabled", "showCheckbox", "selected"], exportAs: ["mcListOption"] }, { kind: "directive", type: i5.McHint, selector: "mc-hint", inputs: ["color", "id"] }, { kind: "directive", type: i6.McEllipsisCenterDirective, selector: "[mcEllipsisCenter]", inputs: ["mcEllipsisCenter", "minVisibleLength"] }, { kind: "directive", type: i7.McLink, selector: "[mc-link]", inputs: ["tabIndex", "disabled", "pseudo", "noUnderline", "caption", "useVisited", "print"], exportAs: ["mcLink"] }, { kind: "directive", type: i8.McFileDropDirective, selector: "[mcFileDrop]", outputs: ["filesDropped"], exportAs: ["mcFileDrop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.McDataSizePipe, name: "mcDataSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
114
+ initDefaultParams() {
115
+ this.config = MC_MULTIPLE_FILE_UPLOAD_DEFAULT_CONFIGURATION;
116
+ this.columnDefs = [
117
+ { header: this.config.gridHeaders.file, cssClass: 'file' },
118
+ { header: this.config.gridHeaders.size, cssClass: 'size' },
119
+ { header: '', cssClass: 'action' }
120
+ ];
121
+ this.makeCaptionText();
122
+ }
123
+ makeCaptionText() {
124
+ this.separatedCaptionText = this.config.captionText.split('{{ browseLink }}');
125
+ this.separatedCaptionTextWhenSelected = this.config.captionTextWhenSelected.split('{{ browseLink }}');
126
+ this.separatedCaptionTextForCompactSize = this.config.captionTextForCompactSize.split('{{ browseLink }}');
127
+ }
128
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McMultipleFileUploadComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: MC_FILE_UPLOAD_CONFIGURATION, optional: true }, { token: MC_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
129
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: McMultipleFileUploadComponent, selector: "mc-multiple-file-upload", inputs: { accept: "accept", disabled: "disabled", errors: "errors", files: "files", size: "size", inputId: "inputId", customValidation: "customValidation" }, outputs: { fileQueueChanged: "fileQueueChanged" }, host: { classAttribute: "mc-multiple-file-upload" }, queries: [{ propertyName: "customFileIcon", first: true, predicate: ["mcFileIcon"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"mc-file-upload\"\n mcFileDrop\n [class.disabled]=\"disabled\"\n [class.selected]=\"files && files.length\"\n [ngClass]=\"size\"\n (filesDropped)=\"onFileDropped($event)\"\n>\n <ng-container *ngIf=\"!files.length; else fileOutput\">\n <div class=\"dropzone\">\n <ng-container *ngIf=\"size === 'default' else compactCaption\">\n <i mc-icon=\"mc-upload-to-cloud_64\"></i>\n <div class=\"dropzone__text\">\n <span class=\"multiple__header\">{{ config.title }}</span>\n <div>\n <span class=\"multiple__caption\">\n {{ separatedCaptionText[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionText[1] }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n\n<div class=\"mc-file-upload__info-section\">\n <mc-hint class=\"mc-file-upload__hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </mc-hint>\n\n <ng-container *ngIf=\"hasErrors\">\n <mc-hint class=\"mc-file-upload__hint mc-error\"\n *ngFor=\"let error of errors\">\n {{ error }}\n </mc-hint>\n </ng-container>\n</div>\n\n<ng-template #fileOutput>\n <div class=\"file-upload__dropzone\">\n <div class=\"mc-file-upload__grid\">\n <div class=\"mc-file-multiple-uploaded__header\">\n <div class=\"mc-file-multiple-uploaded__header-inner\">\n <div [class]=\"'mc-file-upload__' + column.cssClass\" *ngFor=\"let column of columnDefs\">\n {{ column.header }}\n </div>\n </div>\n </div>\n\n <mc-list-selection [autoSelect]=\"false\" [disabled]=\"disabled\">\n <mc-list-option\n class=\"multiple__uploaded-item\"\n [value]=\"file.file.name\"\n (keydown.delete)=\"deleteFile(index)\"\n (keydown.backspace)=\"deleteFile(index)\"\n *ngFor=\"let file of files; let index = index;\">\n <div class=\"mc-file-upload__row\" [class.error]=\"file.hasError\">\n <div class=\"mc-file-upload__file\">\n <ng-container *ngIf=\"{ loading: file.loading | async, progress: file.progress | async } as asyncData\">\n <ng-container *ngIf=\"!asyncData.loading\"\n [ngTemplateOutlet]=\"$any(customFileIcon)\"\n [ngTemplateOutletContext]=\"{ $implicit: file }\"\n >\n </ng-container>\n\n <mc-progress-spinner\n class=\"pt-nat-file-upload-name-cell__icon\"\n [value]=\"asyncData.progress || 0\"\n *ngIf=\"asyncData.loading\"\n ></mc-progress-spinner>\n </ng-container>\n\n <span class=\"file-item__text\" [mcEllipsisCenter]=\"file.file.name\" [minVisibleLength]=\"10\"></span>\n </div>\n <div class=\"mc-file-upload__size\">\n {{ file.file.size | mcDataSize }}\n </div>\n <div class=\"mc-file-upload__action\">\n <i mc-icon=\"mc-close-circle_16\" (click)=\"deleteFile(index, $event)\"></i>\n </div>\n </div>\n </mc-list-option>\n </mc-list-selection>\n </div>\n\n <div class=\"btn-upload\">\n <div class=\"dropzone\">\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ separatedCaptionTextWhenSelected[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionTextWhenSelected[1] }}\n </span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #compactCaption>\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ separatedCaptionTextForCompactSize[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionTextForCompactSize[1] }}\n </span>\n</ng-template>\n\n<ng-template #inputTemplate>\n <input #input\n type=\"file\"\n class=\"cdk-visually-hidden\"\n multiple\n [id]=\"inputId\"\n [accept]=\"acceptedFiles\"\n [disabled]=\"disabled\"\n (change)=\"onFileSelectedViaClick($event)\">\n</ng-template>\n", styles: [".mc-file-upload{box-sizing:border-box;display:flex;align-items:center;position:relative}.mc-file-upload .dropzone,.mc-file-upload .file-item{display:flex;align-items:center}.mc-file-upload .mc-ellipsis-center{position:relative;display:flex}.mc-file-upload .mc-ellipsis-center .data-text-start{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:pre}.mc-file-upload .mc-ellipsis-center .data-text-end{flex:1 0 auto;overflow:hidden;white-space:pre}\n", "@keyframes mc-progress{0%{background-position:0 0}to{background-position:29px 0}}.mc-progress{position:relative}.mc-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,rgba(0,0,0,.05) 10px,transparent 10px,transparent 20px,rgba(0,0,0,.05) 20px,rgba(0,0,0,.05) 30px,transparent 30px) repeat;background-size:29px 29px;animation:mc-progress 1s linear infinite}.mc-group{display:flex;flex-direction:row}.mc-group .mc-group_justified>.mc-group-item{width:100%}.mc-group .mc-group-item+.mc-group-item{margin-left:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group{display:flex;flex-direction:column}.mc-vertical-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.mc-vertical-group>.mc-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group .mc-group-item+.mc-group-item{margin-top:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-no-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mc-file-upload{border-radius:var(--mc-file-upload-size-multiple-border-radius, 4px);border-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-style:var(--mc-file-upload-size-multiple-border-style, dashed)}.mc-file-upload .mc-list-option{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);height:36px}.mc-file-upload .mc-list-option .mc-icon{margin-right:0}.mc-file-upload .mc-file-upload__grid{min-height:142px}.mc-file-upload .mc-file-multiple-uploaded__header-inner,.mc-file-upload .mc-file-upload__row{display:flex;align-items:center}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{width:65%;max-width:65%}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__size{width:var(--mc-size-7xl, 64px);min-width:var(--mc-size-7xl, 64px);text-align:left;flex-grow:1}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__action{padding-left:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px);padding-right:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px)}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{display:flex;align-items:center}.mc-file-upload .mc-file-upload__row .mc-file-upload__file .file-item__text{margin-left:0;width:90%}.mc-file-upload .mc-file-multiple-uploaded__header{border-bottom-width:1px;border-bottom-style:solid}.mc-file-upload .mc-file-multiple-uploaded__header-inner{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);border:2px solid transparent;border-bottom:unset;box-sizing:border-box;height:var(--mc-size-3xl, 32px)}.mc-file-upload .btn-upload .dropzone{margin:0;border-top-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-top-style:var(--mc-file-upload-size-multiple-border-style, dashed);padding:3px var(--mc-size-m, 12px) var(--mc-size-xxs, 4px) var(--mc-size-m, 12px)}.mc-file-upload.compact:not(.selected){height:var(--mc-file-upload-size-single-height, 48px);padding-top:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-bottom:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-left:var(--mc-size-m, 12px)}.mc-file-upload.compact .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload.default{min-height:176px;justify-content:center}.mc-file-upload.default .dropzone .dropzone__text{margin-left:var(--mc-size-l, 16px)}.mc-file-upload.default .btn-upload .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload .file-upload__dropzone{width:100%;height:100%}.mc-hint{display:block}.mc-file-upload__hint{margin-top:var(--mc-form-field-hint-size-margin-top, 4px)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.McProgressSpinner, selector: "mc-progress-spinner", inputs: ["color", "id", "value", "mode", "size"] }, { kind: "component", type: i3.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i3.McIconCSSStyler, selector: "[mc-icon]" }, { kind: "component", type: i4.McListSelection, selector: "mc-list-selection", inputs: ["disabled", "autoSelect", "noUnselectLast", "horizontal", "tabIndex", "compareWith"], outputs: ["onSelectAll", "onCopy", "selectionChange"], exportAs: ["mcListSelection"] }, { kind: "component", type: i4.McListOption, selector: "mc-list-option", inputs: ["checkboxPosition", "value", "disabled", "showCheckbox", "selected"], exportAs: ["mcListOption"] }, { kind: "directive", type: i5.McHint, selector: "mc-hint", inputs: ["color", "id"] }, { kind: "directive", type: i6.McEllipsisCenterDirective, selector: "[mcEllipsisCenter]", inputs: ["mcEllipsisCenter", "minVisibleLength"] }, { kind: "directive", type: i7.McLink, selector: "[mc-link]", inputs: ["tabIndex", "disabled", "pseudo", "noUnderline", "caption", "useVisited", "print"], exportAs: ["mcLink"] }, { kind: "directive", type: i8.McFileDropDirective, selector: "[mcFileDrop]", outputs: ["filesDropped"], exportAs: ["mcFileDrop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.McDataSizePipe, name: "mcDataSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
112
130
  }
113
131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: McMultipleFileUploadComponent, decorators: [{
114
132
  type: Component,
115
133
  args: [{ selector: 'mc-multiple-file-upload', changeDetection: ChangeDetectionStrategy.OnPush, host: {
116
134
  class: 'mc-multiple-file-upload'
117
- }, template: "<div class=\"mc-file-upload\"\n mcFileDrop\n [class.disabled]=\"disabled\"\n [class.selected]=\"files && files.length\"\n [ngClass]=\"size\"\n (filesDropped)=\"onFileDropped($event)\"\n>\n <ng-container *ngIf=\"!files.length; else fileOutput\">\n <div class=\"dropzone\">\n <ng-container *ngIf=\"size === 'default' else compactCaption\">\n <i mc-icon=\"mc-upload-to-cloud_64\"></i>\n <div class=\"dropzone__text\">\n <span class=\"multiple__header\">{{ config.title }}</span>\n <div>\n <span class=\"multiple__caption\">\n {{ config.captionText }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n\n<div class=\"mc-file-upload__info-section\">\n <mc-hint class=\"mc-file-upload__hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </mc-hint>\n\n <ng-container *ngIf=\"hasErrors\">\n <mc-hint class=\"mc-file-upload__hint mc-error\"\n *ngFor=\"let error of errors\">\n {{ error }}\n </mc-hint>\n </ng-container>\n</div>\n\n<ng-template #fileOutput>\n <div class=\"file-upload__dropzone\">\n <div class=\"mc-file-upload__grid\">\n <div class=\"mc-file-multiple-uploaded__header\">\n <div class=\"mc-file-multiple-uploaded__header-inner\">\n <div [class]=\"'mc-file-upload__' + column.cssClass\" *ngFor=\"let column of columnDefs\">\n {{ column.header }}\n </div>\n </div>\n </div>\n\n <mc-list-selection [autoSelect]=\"false\" [disabled]=\"disabled\">\n <mc-list-option\n class=\"multiple__uploaded-item\"\n [value]=\"file.file.name\"\n (keydown.delete)=\"deleteFile(index)\"\n (keydown.backspace)=\"deleteFile(index)\"\n *ngFor=\"let file of files; let index = index;\">\n <div class=\"mc-file-upload__row\" [class.error]=\"file.hasError\">\n <div class=\"mc-file-upload__file\">\n <ng-container *ngIf=\"{ loading: file.loading | async, progress: file.progress | async } as asyncData\">\n <ng-container *ngIf=\"!asyncData.loading\"\n [ngTemplateOutlet]=\"$any(customFileIcon)\"\n [ngTemplateOutletContext]=\"{ $implicit: file }\"\n >\n </ng-container>\n\n <mc-progress-spinner\n class=\"pt-nat-file-upload-name-cell__icon\"\n [value]=\"asyncData.progress || 0\"\n *ngIf=\"asyncData.loading\"\n ></mc-progress-spinner>\n </ng-container>\n\n <span class=\"file-item__text\" [mcEllipsisCenter]=\"file.file.name\" [minVisibleLength]=\"10\"></span>\n </div>\n <div class=\"mc-file-upload__size\">\n {{ file.file.size | mcDataSize }}\n </div>\n <div class=\"mc-file-upload__action\">\n <i mc-icon=\"mc-close-circle_16\" (click)=\"deleteFile(index, $event)\"></i>\n </div>\n </div>\n </mc-list-option>\n </mc-list-selection>\n </div>\n\n <div class=\"btn-upload\">\n <div class=\"dropzone\">\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ config.captionTextWhenSelected }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #compactCaption>\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ config.captionText }}\n <label mc-link pseudo [tabIndex]=\"-1\" [for]=\"inputId\" [disabled]=\"disabled\">\n {{ config.browseLink }}\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </label>\n </span>\n</ng-template>\n\n<ng-template #inputTemplate>\n <input #input\n type=\"file\"\n class=\"cdk-visually-hidden\"\n multiple\n [id]=\"inputId\"\n [accept]=\"acceptedFiles\"\n [disabled]=\"disabled\"\n (change)=\"onFileSelectedViaClick($event)\">\n</ng-template>\n", styles: [".mc-file-upload{box-sizing:border-box;display:flex;align-items:center;position:relative}.mc-file-upload .dropzone,.mc-file-upload .file-item{display:flex;align-items:center}.mc-file-upload .mc-ellipsis-center{position:relative;display:flex}.mc-file-upload .mc-ellipsis-center .data-text-start{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:pre}.mc-file-upload .mc-ellipsis-center .data-text-end{flex:1 0 auto;overflow:hidden;white-space:pre}\n", "@keyframes mc-progress{0%{background-position:0 0}to{background-position:29px 0}}.mc-progress{position:relative}.mc-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,rgba(0,0,0,.05) 10px,transparent 10px,transparent 20px,rgba(0,0,0,.05) 20px,rgba(0,0,0,.05) 30px,transparent 30px) repeat;background-size:29px 29px;animation:mc-progress 1s linear infinite}.mc-group{display:flex;flex-direction:row}.mc-group .mc-group_justified>.mc-group-item{width:100%}.mc-group .mc-group-item+.mc-group-item{margin-left:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group{display:flex;flex-direction:column}.mc-vertical-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.mc-vertical-group>.mc-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group .mc-group-item+.mc-group-item{margin-top:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-no-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mc-file-upload{border-radius:var(--mc-file-upload-size-multiple-border-radius, 4px);border-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-style:var(--mc-file-upload-size-multiple-border-style, dashed)}.mc-file-upload .mc-list-option{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);height:36px}.mc-file-upload .mc-list-option .mc-icon{margin-right:0}.mc-file-upload .mc-file-upload__grid{min-height:142px}.mc-file-upload .mc-file-multiple-uploaded__header-inner,.mc-file-upload .mc-file-upload__row{display:flex;align-items:center}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{width:65%;max-width:65%}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__size{width:var(--mc-size-7xl, 64px);min-width:var(--mc-size-7xl, 64px);text-align:left;flex-grow:1}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__action{padding-left:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px);padding-right:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px)}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{display:flex;align-items:center}.mc-file-upload .mc-file-upload__row .mc-file-upload__file .file-item__text{margin-left:0;width:90%}.mc-file-upload .mc-file-multiple-uploaded__header{border-bottom-width:1px;border-bottom-style:solid}.mc-file-upload .mc-file-multiple-uploaded__header-inner{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);border:2px solid transparent;border-bottom:unset;box-sizing:border-box;height:var(--mc-size-3xl, 32px)}.mc-file-upload .btn-upload .dropzone{margin:0;border-top-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-top-style:var(--mc-file-upload-size-multiple-border-style, dashed);padding:3px var(--mc-size-m, 12px) var(--mc-size-xxs, 4px) var(--mc-size-m, 12px)}.mc-file-upload.compact:not(.selected){height:var(--mc-file-upload-size-single-height, 48px);padding-top:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-bottom:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-left:var(--mc-size-m, 12px)}.mc-file-upload.compact .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload.default{min-height:176px;justify-content:center}.mc-file-upload.default .dropzone .dropzone__text{margin-left:var(--mc-size-l, 16px)}.mc-file-upload.default .btn-upload .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload .file-upload__dropzone{width:100%;height:100%}.mc-hint{display:block}.mc-file-upload__hint{margin-top:var(--mc-form-field-hint-size-margin-top, 4px)}\n"] }]
118
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: undefined, decorators: [{
135
+ }, template: "<div class=\"mc-file-upload\"\n mcFileDrop\n [class.disabled]=\"disabled\"\n [class.selected]=\"files && files.length\"\n [ngClass]=\"size\"\n (filesDropped)=\"onFileDropped($event)\"\n>\n <ng-container *ngIf=\"!files.length; else fileOutput\">\n <div class=\"dropzone\">\n <ng-container *ngIf=\"size === 'default' else compactCaption\">\n <i mc-icon=\"mc-upload-to-cloud_64\"></i>\n <div class=\"dropzone__text\">\n <span class=\"multiple__header\">{{ config.title }}</span>\n <div>\n <span class=\"multiple__caption\">\n {{ separatedCaptionText[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionText[1] }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n</div>\n\n<div class=\"mc-file-upload__info-section\">\n <mc-hint class=\"mc-file-upload__hint\">\n <ng-content select=\"[hint]\"></ng-content>\n </mc-hint>\n\n <ng-container *ngIf=\"hasErrors\">\n <mc-hint class=\"mc-file-upload__hint mc-error\"\n *ngFor=\"let error of errors\">\n {{ error }}\n </mc-hint>\n </ng-container>\n</div>\n\n<ng-template #fileOutput>\n <div class=\"file-upload__dropzone\">\n <div class=\"mc-file-upload__grid\">\n <div class=\"mc-file-multiple-uploaded__header\">\n <div class=\"mc-file-multiple-uploaded__header-inner\">\n <div [class]=\"'mc-file-upload__' + column.cssClass\" *ngFor=\"let column of columnDefs\">\n {{ column.header }}\n </div>\n </div>\n </div>\n\n <mc-list-selection [autoSelect]=\"false\" [disabled]=\"disabled\">\n <mc-list-option\n class=\"multiple__uploaded-item\"\n [value]=\"file.file.name\"\n (keydown.delete)=\"deleteFile(index)\"\n (keydown.backspace)=\"deleteFile(index)\"\n *ngFor=\"let file of files; let index = index;\">\n <div class=\"mc-file-upload__row\" [class.error]=\"file.hasError\">\n <div class=\"mc-file-upload__file\">\n <ng-container *ngIf=\"{ loading: file.loading | async, progress: file.progress | async } as asyncData\">\n <ng-container *ngIf=\"!asyncData.loading\"\n [ngTemplateOutlet]=\"$any(customFileIcon)\"\n [ngTemplateOutletContext]=\"{ $implicit: file }\"\n >\n </ng-container>\n\n <mc-progress-spinner\n class=\"pt-nat-file-upload-name-cell__icon\"\n [value]=\"asyncData.progress || 0\"\n *ngIf=\"asyncData.loading\"\n ></mc-progress-spinner>\n </ng-container>\n\n <span class=\"file-item__text\" [mcEllipsisCenter]=\"file.file.name\" [minVisibleLength]=\"10\"></span>\n </div>\n <div class=\"mc-file-upload__size\">\n {{ file.file.size | mcDataSize }}\n </div>\n <div class=\"mc-file-upload__action\">\n <i mc-icon=\"mc-close-circle_16\" (click)=\"deleteFile(index, $event)\"></i>\n </div>\n </div>\n </mc-list-option>\n </mc-list-selection>\n </div>\n\n <div class=\"btn-upload\">\n <div class=\"dropzone\">\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ separatedCaptionTextWhenSelected[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionTextWhenSelected[1] }}\n </span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #compactCaption>\n <i mc-icon=\"mc-upload-to-cloud_24\"></i>\n <span class=\"dropzone__text multiple__caption\">\n {{ separatedCaptionTextForCompactSize[0] }}<label mc-link pseudo [disabled]=\"disabled\" [tabIndex]=\"-1\" [for]=\"inputId\">{{ config.browseLink }}<ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container></label>{{ separatedCaptionTextForCompactSize[1] }}\n </span>\n</ng-template>\n\n<ng-template #inputTemplate>\n <input #input\n type=\"file\"\n class=\"cdk-visually-hidden\"\n multiple\n [id]=\"inputId\"\n [accept]=\"acceptedFiles\"\n [disabled]=\"disabled\"\n (change)=\"onFileSelectedViaClick($event)\">\n</ng-template>\n", styles: [".mc-file-upload{box-sizing:border-box;display:flex;align-items:center;position:relative}.mc-file-upload .dropzone,.mc-file-upload .file-item{display:flex;align-items:center}.mc-file-upload .mc-ellipsis-center{position:relative;display:flex}.mc-file-upload .mc-ellipsis-center .data-text-start{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:pre}.mc-file-upload .mc-ellipsis-center .data-text-end{flex:1 0 auto;overflow:hidden;white-space:pre}\n", "@keyframes mc-progress{0%{background-position:0 0}to{background-position:29px 0}}.mc-progress{position:relative}.mc-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,rgba(0,0,0,.05) 10px,transparent 10px,transparent 20px,rgba(0,0,0,.05) 20px,rgba(0,0,0,.05) 30px,transparent 30px) repeat;background-size:29px 29px;animation:mc-progress 1s linear infinite}.mc-group{display:flex;flex-direction:row}.mc-group .mc-group_justified>.mc-group-item{width:100%}.mc-group .mc-group-item+.mc-group-item{margin-left:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group{display:flex;flex-direction:column}.mc-vertical-group>.mc-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:first-child:not(:last-child)>.mc-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.mc-vertical-group>.mc-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--mc-button-size-border-radius, 4px)}.mc-vertical-group>.mc-group-item:last-child:not(:first-child)>.mc-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child){border-radius:0}.mc-vertical-group>.mc-group-item:not(:first-child):not(:last-child)>.mc-form-field__container{border-radius:0}.mc-vertical-group .mc-group-item+.mc-group-item{margin-top:calc(-1 * var(--mc-button-size-border-width, 1px))}.mc-no-select{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mc-file-upload{border-radius:var(--mc-file-upload-size-multiple-border-radius, 4px);border-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-style:var(--mc-file-upload-size-multiple-border-style, dashed)}.mc-file-upload .mc-list-option{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);height:36px}.mc-file-upload .mc-list-option .mc-icon{margin-right:0}.mc-file-upload .mc-file-upload__grid{min-height:142px}.mc-file-upload .mc-file-multiple-uploaded__header-inner,.mc-file-upload .mc-file-upload__row{display:flex;align-items:center}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{width:65%;max-width:65%}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__size{width:var(--mc-size-7xl, 64px);min-width:var(--mc-size-7xl, 64px);text-align:left;flex-grow:1}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__file,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__size,.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file,.mc-file-upload .mc-file-upload__row .mc-file-upload__size,.mc-file-upload .mc-file-upload__row .mc-file-upload__action{padding-left:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px);padding-right:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px)}.mc-file-upload .mc-file-multiple-uploaded__header-inner .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__action,.mc-file-upload .mc-file-upload__row .mc-file-upload__file{display:flex;align-items:center}.mc-file-upload .mc-file-upload__row .mc-file-upload__file .file-item__text{margin-left:0;width:90%}.mc-file-upload .mc-file-multiple-uploaded__header{border-bottom-width:1px;border-bottom-style:solid}.mc-file-upload .mc-file-multiple-uploaded__header-inner{padding:var(--mc-file-upload-size-multiple-uploaded-item-horizontal-padding, 8px) var(--mc-file-upload-size-multiple-uploaded-item-vertical-padding, 8px);border:2px solid transparent;border-bottom:unset;box-sizing:border-box;height:var(--mc-size-3xl, 32px)}.mc-file-upload .btn-upload .dropzone{margin:0;border-top-width:var(--mc-file-upload-size-multiple-border-width, 1px);border-top-style:var(--mc-file-upload-size-multiple-border-style, dashed);padding:3px var(--mc-size-m, 12px) var(--mc-size-xxs, 4px) var(--mc-size-m, 12px)}.mc-file-upload.compact:not(.selected){height:var(--mc-file-upload-size-single-height, 48px);padding-top:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-bottom:var(--mc-file-upload-size-single-vertical-padding, 12px);padding-left:var(--mc-size-m, 12px)}.mc-file-upload.compact .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload.default{min-height:176px;justify-content:center}.mc-file-upload.default .dropzone .dropzone__text{margin-left:var(--mc-size-l, 16px)}.mc-file-upload.default .btn-upload .dropzone .dropzone__text{margin-left:var(--mc-size-xs, 6px)}.mc-file-upload .file-upload__dropzone{width:100%;height:100%}.mc-hint{display:block}.mc-file-upload__hint{margin-top:var(--mc-form-field-hint-size-margin-top, 4px)}\n"] }]
136
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
119
137
  type: Optional
120
138
  }, {
121
139
  type: Inject,
122
140
  args: [MC_FILE_UPLOAD_CONFIGURATION]
141
+ }] }, { type: i9.McLocaleService, decorators: [{
142
+ type: Optional
143
+ }, {
144
+ type: Inject,
145
+ args: [MC_LOCALE_SERVICE]
123
146
  }] }], propDecorators: { accept: [{
124
147
  type: Input
125
148
  }], disabled: [{
@@ -143,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
143
166
  type: ViewChild,
144
167
  args: ['input']
145
168
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL2ZpbGUtdXBsb2FkL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9maWxlLXVwbG9hZC9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFBRSxRQUFRLEVBQ2YsTUFBTSxFQUFFLFNBQVMsRUFDakIsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFDSCw0QkFBNEIsRUFNL0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0FBR3ZCLElBQUksOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBWXZDLE1BQU0sQ0FBQyxNQUFNLDZDQUE2QyxHQUE2QjtJQUNuRixXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLHVCQUF1QixFQUFFLG9CQUFvQjtJQUM3Qyx5QkFBeUIsRUFBRSxzQkFBc0I7SUFDakQsVUFBVSxFQUFFLFVBQVU7SUFDdEIsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixXQUFXLEVBQUU7UUFDVCxJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxRQUFRO0tBQ2pCO0NBQ0osQ0FBQztBQVlGLE1BQU0sT0FBTyw2QkFBNkI7SUFnQnRDLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFN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QU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZILENBQUM7aUlBeEdRLDZCQUE2QiwyQ0EwQmQsNEJBQTRCO3FIQTFCM0MsNkJBQTZCLDBaQVVhLFdBQVcsNkhDcEVsRSxvMktBNEhBOzsyRkRsRWEsNkJBQTZCO2tCQVR6QyxTQUFTOytCQUNJLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUseUJBQXlCO3FCQUNuQzs7MEJBNEJJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNEJBQTRCO3lDQXpCM0MsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRTJELGNBQWM7c0JBQS9FLFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUU1QyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsIEluamVjdCxcbiAgICBJbnB1dCwgT3B0aW9uYWwsXG4gICAgT3V0cHV0LCBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuRGlzYWJsZSB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIE1DX0ZJTEVfVVBMT0FEX0NPTkZJR1VSQVRJT04sXG4gICAgTWNGaWxlLFxuICAgIE1jRmlsZUl0ZW0sXG4gICAgTWNGaWxlVmFsaWRhdG9yRm4sXG4gICAgTWNJbnB1dEZpbGUsXG4gICAgTWNJbnB1dEZpbGVMYWJlbFxufSBmcm9tICcuL2ZpbGUtdXBsb2FkJztcblxuXG5sZXQgbmV4dE11bHRpcGxlRmlsZVVwbG9hZFVuaXF1ZUlkID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgTWNJbnB1dEZpbGVNdWx0aXBsZUxhYmVsIGV4dGVuZHMgTWNJbnB1dEZpbGVMYWJlbCB7XG4gICAgY2FwdGlvblRleHRXaGVuU2VsZWN0ZWQ6IHN0cmluZztcbiAgICBjYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplOiBzdHJpbmc7XG4gICAgZ3JpZEhlYWRlcnM6IHtcbiAgICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgICBzaXplOiBzdHJpbmc7XG4gICAgfTtcbiAgICBbazogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogdW5rbm93bjtcbn1cblxuXG5leHBvcnQgY29uc3QgTUNfTVVMVElQTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBNY0lucHV0RmlsZU11bHRpcGxlTGFiZWwgPSB7XG4gICAgY2FwdGlvblRleHQ6ICfQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDQuNC70LgnLFxuICAgIGNhcHRpb25UZXh0V2hlblNlbGVjdGVkOiAn0J/QtdGA0LXRgtCw0YnQuNGC0LUg0LXRidC1INC40LvQuCcsXG4gICAgY2FwdGlvblRleHRGb3JDb21wYWN0U2l6ZTogJ9Cf0LXRgNC10YLQsNGJ0LjRgtC1INGE0LDQudC70Ysg0LjQu9C4JyxcbiAgICBicm93c2VMaW5rOiAn0LLRi9Cx0LXRgNC40YLQtScsXG4gICAgdGl0bGU6ICfQl9Cw0LPRgNGD0LfQuNGC0LUg0YTQsNC50LvRiycsXG4gICAgZ3JpZEhlYWRlcnM6IHtcbiAgICAgICAgZmlsZTogJ9Ck0LDQudC7JyxcbiAgICAgICAgc2l6ZTogJ9Cg0LDQt9C80LXRgCdcbiAgICB9XG59O1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtbXVsdGlwbGUtZmlsZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuc2NzcycsICcuL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ21jLW11bHRpcGxlLWZpbGUtdXBsb2FkJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTWNNdWx0aXBsZUZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBNY0lucHV0RmlsZSwgQ2FuRGlzYWJsZSB7XG4gICAgQElucHV0KCkgYWNjZXB0Pzogc3RyaW5nW107XG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGZpbGVzOiBNY0ZpbGVJdGVtW10gPSBbXTtcbiAgICBASW5wdXQoKSBzaXplOiAnY29tcGFjdCcgfCAnZGVmYXVsdCcgPSAnZGVmYXVsdCc7XG4gICAgQElucHV0KCkgaW5wdXRJZDogc3RyaW5nID0gYG1jLW11bHRpcGxlLWZpbGUtdXBsb2FkLSR7bmV4dE11bHRpcGxlRmlsZVVwbG9hZFVuaXF1ZUlkKyt9YDtcbiAgICBASW5wdXQoKSBjdXN0b21WYWxpZGF0aW9uPzogTWNGaWxlVmFsaWRhdG9yRm5bXTtcbiAgICBAT3V0cHV0KCkgZmlsZVF1ZXVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPE1jRmlsZUl0ZW1bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1jRmlsZUl0ZW1bXT4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ21jRmlsZUljb24nLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGN1c3RvbUZpbGVJY29uOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgY29sdW1uRGVmczogeyBoZWFkZXI6IHN0cmluZzsgY3NzQ2xhc3M6IHN0cmluZyB9W107XG5cbiAgICBnZXQgYWNjZXB0ZWRGaWxlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHQgJiYgdGhpcy5hY2NlcHQubGVuZ3RoID4gMCA/IHRoaXMuYWNjZXB0Lm1hcCgoZXh0OiBzdHJpbmcpID0+IGAuJHtleHR9YCkuam9pbignLCcpIDogJyovKic7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzICYmICEhdGhpcy5lcnJvcnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUNfRklMRV9VUExPQURfQ09ORklHVVJBVElPTikgcHVibGljIGNvbmZpZzogTWNJbnB1dEZpbGVNdWx0aXBsZUxhYmVsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IE1DX01VTFRJUExFX0ZJTEVfVVBMT0FEX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW1xuICAgICAgICAgICAgeyBoZWFkZXI6IHRoaXMuY29uZmlnLmdyaWRIZWFkZXJzLmZpbGUsIGNzc0NsYXNzOiAnZmlsZScgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0aGlzLmNvbmZpZy5ncmlkSGVhZGVycy5zaXplLCBjc3NDbGFzczogJ3NpemUnIH0sXG4gICAgICAgICAgICB7IGhlYWRlcjogJycsIGNzc0NsYXNzOiAnYWN0aW9uJyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgb25GaWxlU2VsZWN0ZWRWaWFDbGljayh7IHRhcmdldCB9OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgdGhpcy5maWxlcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsZXMsXG4gICAgICAgICAgICAuLi50aGlzLm1hcFRvRmlsZUl0ZW0oKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcylcbiAgICAgICAgXTtcbiAgICAgICAgLyogZXZlbiBpZiB0aGUgdXNlciBzZWxlY3RzIHRoZSBzYW1lIGZpbGUsXG4gICAgICAgICB0aGUgb25jaGFuZ2UgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgZXZlcnkgdGltZSB1c2VyIGNsaWNrcyBvbiB0aGUgY29udHJvbC4qL1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgbnVsbCk7XG4gICAgICAgIHRoaXMub25GaWxlTGlzdENoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uRmlsZURyb3BwZWQoZmlsZXM6IEZpbGVMaXN0IHwgTWNGaWxlW10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRoaXMuZmlsZXMgPSBbLi4udGhpcy5maWxlcywgLi4udGhpcy5tYXBUb0ZpbGVJdGVtKGZpbGVzKV07XG5cbiAgICAgICAgdGhpcy5vbkZpbGVMaXN0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZShpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXNdO1xuXG4gICAgICAgIHRoaXMub25GaWxlTGlzdENoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uRmlsZUxpc3RDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZVF1ZXVlQ2hhbmdlZC5lbWl0KHRoaXMuZmlsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwVG9GaWxlSXRlbShmaWxlczogRmlsZUxpc3QgfCBNY0ZpbGVbXSB8IG51bGwpOiBNY0ZpbGVJdGVtW10ge1xuICAgICAgICBpZiAoIWZpbGVzKSB7IHJldHVybiBbXTsgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVzKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gdGhpcy5pc0NvcnJlY3RFeHRlbnNpb24oZmlsZSkpXG4gICAgICAgICAgICAubWFwKChmaWxlOiBGaWxlKSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgaGFzRXJyb3I6IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzOiBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbGlkYXRpb24gJiYgdGhpcy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzUGVyRmlsZSA9IHRoaXMuY3VzdG9tVmFsaWRhdGlvbi5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGVycm9yczogKHN0cmluZyB8IG51bGwpW10sIHZhbGlkYXRvckZuOiBNY0ZpbGVWYWxpZGF0b3JGbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0b3JGbihmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtdKS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZXJyb3JzLFxuICAgICAgICAgICAgICAgIC4uLmVycm9yc1BlckZpbGVcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHJldHVybiAhIWVycm9yc1BlckZpbGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvcnJlY3RFeHRlbnNpb24oZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSB8fCAnJztcblxuICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHRlZEZpbGVzICE9PSAnKi8qJyAmJiB0aGlzLmFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCA/IHRoaXMuYWNjZXB0ZWRGaWxlcy5pbmNsdWRlcyhmaWxlRXh0KSA6IHRydWU7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkXCJcbiAgICAgbWNGaWxlRHJvcFxuICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZmlsZXMgJiYgZmlsZXMubGVuZ3RoXCJcbiAgICAgW25nQ2xhc3NdPVwic2l6ZVwiXG4gICAgIChmaWxlc0Ryb3BwZWQpPVwib25GaWxlRHJvcHBlZCgkZXZlbnQpXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbGVzLmxlbmd0aDsgZWxzZSBmaWxlT3V0cHV0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJzaXplID09PSAnZGVmYXVsdCcgZWxzZSBjb21wYWN0Q2FwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy11cGxvYWQtdG8tY2xvdWRfNjRcIj48L2k+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGlwbGVfX2hlYWRlclwiPnt7IGNvbmZpZy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGlwbGVfX2NhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb25maWcuY2FwdGlvblRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgbWMtbGluayBwc2V1ZG8gW3RhYkluZGV4XT1cIi0xXCIgW2Zvcl09XCJpbnB1dElkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy5icm93c2VMaW5rIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkX19pbmZvLXNlY3Rpb25cIj5cbiAgICA8bWMtaGludCBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkX19oaW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8L21jLWhpbnQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXJyb3JzXCI+XG4gICAgICAgIDxtYy1oaW50IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX2hpbnQgbWMtZXJyb3JcIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXJyb3JzXCI+XG4gICAgICAgICAgICAgICAge3sgZXJyb3IgfX1cbiAgICAgICAgPC9tYy1oaW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsZU91dHB1dD5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWRfX2Ryb3B6b25lXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYy1maWxlLXVwbG9hZF9fZ3JpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWZpbGUtbXVsdGlwbGUtdXBsb2FkZWRfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1maWxlLW11bHRpcGxlLXVwbG9hZGVkX19oZWFkZXItaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ21jLWZpbGUtdXBsb2FkX18nICsgY29sdW1uLmNzc0NsYXNzXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5EZWZzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxtYy1saXN0LXNlbGVjdGlvbiBbYXV0b1NlbGVjdF09XCJmYWxzZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxtYy1saXN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm11bHRpcGxlX191cGxvYWRlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZpbGUuZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZGVsZXRlKT1cImRlbGV0ZUZpbGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImRlbGV0ZUZpbGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXM7IGxldCBpbmRleCA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX3Jvd1wiIFtjbGFzcy5lcnJvcl09XCJmaWxlLmhhc0Vycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX2ZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwieyBsb2FkaW5nOiBmaWxlLmxvYWRpbmcgfCBhc3luYywgcHJvZ3Jlc3M6IGZpbGUucHJvZ3Jlc3MgfCBhc3luYyB9IGFzIGFzeW5jRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFzeW5jRGF0YS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGN1c3RvbUZpbGVJY29uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWxlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYy1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB0LW5hdC1maWxlLXVwbG9hZC1uYW1lLWNlbGxfX2ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFzeW5jRGF0YS5wcm9ncmVzcyB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXN5bmNEYXRhLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9tYy1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLWl0ZW1fX3RleHRcIiBbbWNFbGxpcHNpc0NlbnRlcl09XCJmaWxlLmZpbGUubmFtZVwiIFttaW5WaXNpYmxlTGVuZ3RoXT1cIjEwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX3NpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWxlLmZpbGUuc2l6ZSB8IG1jRGF0YVNpemUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBtYy1pY29uPVwibWMtY2xvc2UtY2lyY2xlXzE2XCIgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaW5kZXgsICRldmVudClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYy1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWMtbGlzdC1zZWxlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tdXBsb2FkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmVcIj5cbiAgICAgICAgICAgICAgICA8aSBtYy1pY29uPVwibWMtdXBsb2FkLXRvLWNsb3VkXzI0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcHpvbmVfX3RleHQgbXVsdGlwbGVfX2NhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29uZmlnLmNhcHRpb25UZXh0V2hlblNlbGVjdGVkIH19XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBtYy1saW5rIHBzZXVkbyBbdGFiSW5kZXhdPVwiLTFcIiBbZm9yXT1cImlucHV0SWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbmZpZy5icm93c2VMaW5rIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGFjdENhcHRpb24+XG4gICAgPGkgbWMtaWNvbj1cIm1jLXVwbG9hZC10by1jbG91ZF8yNFwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cImRyb3B6b25lX190ZXh0IG11bHRpcGxlX19jYXB0aW9uXCI+XG4gICAgICAgIHt7IGNvbmZpZy5jYXB0aW9uVGV4dCB9fVxuICAgICAgICA8bGFiZWwgbWMtbGluayBwc2V1ZG8gW3RhYkluZGV4XT1cIi0xXCIgW2Zvcl09XCJpbnB1dElkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuYnJvd3NlTGluayB9fVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0VGVtcGxhdGU+XG4gICAgPGlucHV0ICNpbnB1dFxuICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRlZEZpbGVzXCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZFZpYUNsaWNrKCRldmVudClcIj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlwbGUtZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL2ZpbGUtdXBsb2FkL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9maWxlLXVwbG9hZC9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQzFDLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFBRSxNQUFNLEVBQ3BCLEtBQUssRUFBYSxRQUFRLEVBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQ0gsNEJBQTRCLEVBTS9CLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQUd2QixJQUFJLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQVl2QyxNQUFNLENBQUMsTUFBTSw2Q0FBNkMsR0FDdEQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFXaEQsTUFBTSxPQUFPLDZCQUE2QjtJQXNCdEMsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFF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Y2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLCBJbmplY3QsXG4gICAgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsXG4gICAgT3V0cHV0LCBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuRGlzYWJsZSwgTUNfTE9DQUxFX1NFUlZJQ0UsIE1jTG9jYWxlU2VydmljZSwgcnVSVUxvY2FsZURhdGEgfSBmcm9tICdAcHRzZWN1cml0eS9tb3NhaWMvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIE1DX0ZJTEVfVVBMT0FEX0NPTkZJR1VSQVRJT04sXG4gICAgTWNGaWxlLFxuICAgIE1jRmlsZUl0ZW0sXG4gICAgTWNGaWxlVmFsaWRhdG9yRm4sXG4gICAgTWNJbnB1dEZpbGUsXG4gICAgTWNJbnB1dEZpbGVMYWJlbFxufSBmcm9tICcuL2ZpbGUtdXBsb2FkJztcblxuXG5sZXQgbmV4dE11bHRpcGxlRmlsZVVwbG9hZFVuaXF1ZUlkID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgTWNJbnB1dEZpbGVNdWx0aXBsZUxhYmVsIGV4dGVuZHMgTWNJbnB1dEZpbGVMYWJlbCB7XG4gICAgY2FwdGlvblRleHRXaGVuU2VsZWN0ZWQ6IHN0cmluZztcbiAgICBjYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplOiBzdHJpbmc7XG4gICAgZ3JpZEhlYWRlcnM6IHtcbiAgICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgICBzaXplOiBzdHJpbmc7XG4gICAgfTtcbiAgICBbazogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogdW5rbm93bjtcbn1cblxuXG5leHBvcnQgY29uc3QgTUNfTVVMVElQTEVfRklMRV9VUExPQURfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBNY0lucHV0RmlsZU11bHRpcGxlTGFiZWwgPVxuICAgIHJ1UlVMb2NhbGVEYXRhWydydS1SVSddLmZpbGVVcGxvYWQubXVsdGlwbGU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtbXVsdGlwbGUtZmlsZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuc2NzcycsICcuL211bHRpcGxlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ21jLW11bHRpcGxlLWZpbGUtdXBsb2FkJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTWNNdWx0aXBsZUZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBNY0lucHV0RmlsZSwgQ2FuRGlzYWJsZSwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgQElucHV0KCkgZmlsZXM6IE1jRmlsZUl0ZW1bXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNpemU6ICdjb21wYWN0JyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgPSBgbWMtbXVsdGlwbGUtZmlsZS11cGxvYWQtJHtuZXh0TXVsdGlwbGVGaWxlVXBsb2FkVW5pcXVlSWQrK31gO1xuICAgIEBJbnB1dCgpIGN1c3RvbVZhbGlkYXRpb24/OiBNY0ZpbGVWYWxpZGF0b3JGbltdO1xuICAgIEBPdXRwdXQoKSBmaWxlUXVldWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8TWNGaWxlSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWNGaWxlSXRlbVtdPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnbWNGaWxlSWNvbicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVGVtcGxhdGVSZWYgfSkgY3VzdG9tRmlsZUljb246IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBjb2x1bW5EZWZzOiB7IGhlYWRlcjogc3RyaW5nOyBjc3NDbGFzczogc3RyaW5nIH1bXTtcblxuICAgIGNvbmZpZzogTWNJbnB1dEZpbGVNdWx0aXBsZUxhYmVsO1xuXG4gICAgc2VwYXJhdGVkQ2FwdGlvblRleHQ6IHN0cmluZ1tdO1xuICAgIHNlcGFyYXRlZENhcHRpb25UZXh0V2hlblNlbGVjdGVkOiBzdHJpbmdbXTtcbiAgICBzZXBhcmF0ZWRDYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplOiBzdHJpbmdbXTtcblxuICAgIGdldCBhY2NlcHRlZEZpbGVzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2VwdCAmJiB0aGlzLmFjY2VwdC5sZW5ndGggPiAwID8gdGhpcy5hY2NlcHQubWFwKChleHQ6IHN0cmluZykgPT4gYC4ke2V4dH1gKS5qb2luKCcsJykgOiAnKi8qJztcbiAgICB9XG5cbiAgICBnZXQgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcnMgJiYgISF0aGlzLmVycm9ycy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2NhbGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChNQ19GSUxFX1VQTE9BRF9DT05GSUdVUkFUSU9OKSByZWFkb25seSBjb25maWd1cmF0aW9uOiBNY0lucHV0RmlsZU11bHRpcGxlTGFiZWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUNfTE9DQUxFX1NFUlZJQ0UpIHByaXZhdGUgbG9jYWxlU2VydmljZT86IE1jTG9jYWxlU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmxvY2FsZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxlU2VydmljZT8uY2hhbmdlcy5zdWJzY3JpYmUodGhpcy51cGRhdGVMb2NhbGVQYXJhbXMpIHx8IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAgICAgICBpZiAoIWxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxvY2FsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG9uRmlsZVNlbGVjdGVkVmlhQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRoaXMuZmlsZXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLmZpbGVzLFxuICAgICAgICAgICAgLi4udGhpcy5tYXBUb0ZpbGVJdGVtKCh0YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXMpXG4gICAgICAgIF07XG4gICAgICAgIC8qIGV2ZW4gaWYgdGhlIHVzZXIgc2VsZWN0cyB0aGUgc2FtZSBmaWxlLFxuICAgICAgICAgdGhlIG9uY2hhbmdlIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgdXNlciBjbGlja3Mgb24gdGhlIGNvbnRyb2wuKi9cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIG51bGwpO1xuICAgICAgICB0aGlzLm9uRmlsZUxpc3RDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvbkZpbGVEcm9wcGVkKGZpbGVzOiBGaWxlTGlzdCB8IE1jRmlsZVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuICAgICAgICB0aGlzLmZpbGVzID0gWy4uLnRoaXMuZmlsZXMsIC4uLnRoaXMubWFwVG9GaWxlSXRlbShmaWxlcyldO1xuXG4gICAgICAgIHRoaXMub25GaWxlTGlzdENoYW5nZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZUZpbGUoaW5kZXg6IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5maWxlcyA9IFsuLi50aGlzLmZpbGVzXTtcblxuICAgICAgICB0aGlzLm9uRmlsZUxpc3RDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvbkZpbGVMaXN0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVRdWV1ZUNoYW5nZWQuZW1pdCh0aGlzLmZpbGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24gfHwgdGhpcy5sb2NhbGVTZXJ2aWNlPy5nZXRQYXJhbXMoJ2ZpbGVVcGxvYWQnKS5tdWx0aXBsZTtcblxuICAgICAgICB0aGlzLmNvbHVtbkRlZnMgPSBbXG4gICAgICAgICAgICB7IGhlYWRlcjogdGhpcy5jb25maWcuZ3JpZEhlYWRlcnMuZmlsZSwgY3NzQ2xhc3M6ICdmaWxlJyB9LFxuICAgICAgICAgICAgeyBoZWFkZXI6IHRoaXMuY29uZmlnLmdyaWRIZWFkZXJzLnNpemUsIGNzc0NsYXNzOiAnc2l6ZScgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnJywgY3NzQ2xhc3M6ICdhY3Rpb24nIH1cbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLm1ha2VDYXB0aW9uVGV4dCgpO1xuXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwVG9GaWxlSXRlbShmaWxlczogRmlsZUxpc3QgfCBNY0ZpbGVbXSB8IG51bGwpOiBNY0ZpbGVJdGVtW10ge1xuICAgICAgICBpZiAoIWZpbGVzKSB7IHJldHVybiBbXTsgfVxuXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVzKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gdGhpcy5pc0NvcnJlY3RFeHRlbnNpb24oZmlsZSkpXG4gICAgICAgICAgICAubWFwKChmaWxlOiBGaWxlKSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgaGFzRXJyb3I6IHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzOiBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRmlsZShmaWxlOiBGaWxlKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbGlkYXRpb24gJiYgdGhpcy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzUGVyRmlsZSA9IHRoaXMuY3VzdG9tVmFsaWRhdGlvbi5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGVycm9yczogKHN0cmluZyB8IG51bGwpW10sIHZhbGlkYXRvckZuOiBNY0ZpbGVWYWxpZGF0b3JGbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0b3JGbihmaWxlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtdKS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZXJyb3JzLFxuICAgICAgICAgICAgICAgIC4uLmVycm9yc1BlckZpbGVcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHJldHVybiAhIWVycm9yc1BlckZpbGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvcnJlY3RFeHRlbnNpb24oZmlsZTogRmlsZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSB8fCAnJztcblxuICAgICAgICByZXR1cm4gdGhpcy5hY2NlcHRlZEZpbGVzICE9PSAnKi8qJyAmJiB0aGlzLmFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCA/IHRoaXMuYWNjZXB0ZWRGaWxlcy5pbmNsdWRlcyhmaWxlRXh0KSA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBNQ19NVUxUSVBMRV9GSUxFX1VQTE9BRF9ERUZBVUxUX0NPTkZJR1VSQVRJT047XG5cbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW1xuICAgICAgICAgICAgeyBoZWFkZXI6IHRoaXMuY29uZmlnLmdyaWRIZWFkZXJzLmZpbGUsIGNzc0NsYXNzOiAnZmlsZScgfSxcbiAgICAgICAgICAgIHsgaGVhZGVyOiB0aGlzLmNvbmZpZy5ncmlkSGVhZGVycy5zaXplLCBjc3NDbGFzczogJ3NpemUnIH0sXG4gICAgICAgICAgICB7IGhlYWRlcjogJycsIGNzc0NsYXNzOiAnYWN0aW9uJyB9XG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5tYWtlQ2FwdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VDYXB0aW9uVGV4dCgpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0ZWRDYXB0aW9uVGV4dCA9IHRoaXMuY29uZmlnLmNhcHRpb25UZXh0LnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgICAgIHRoaXMuc2VwYXJhdGVkQ2FwdGlvblRleHRXaGVuU2VsZWN0ZWQgPSB0aGlzLmNvbmZpZy5jYXB0aW9uVGV4dFdoZW5TZWxlY3RlZC5zcGxpdCgne3sgYnJvd3NlTGluayB9fScpO1xuICAgICAgICB0aGlzLnNlcGFyYXRlZENhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemUgPSB0aGlzLmNvbmZpZy5jYXB0aW9uVGV4dEZvckNvbXBhY3RTaXplLnNwbGl0KCd7eyBicm93c2VMaW5rIH19Jyk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkXCJcbiAgICAgbWNGaWxlRHJvcFxuICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZmlsZXMgJiYgZmlsZXMubGVuZ3RoXCJcbiAgICAgW25nQ2xhc3NdPVwic2l6ZVwiXG4gICAgIChmaWxlc0Ryb3BwZWQpPVwib25GaWxlRHJvcHBlZCgkZXZlbnQpXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbGVzLmxlbmd0aDsgZWxzZSBmaWxlT3V0cHV0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJzaXplID09PSAnZGVmYXVsdCcgZWxzZSBjb21wYWN0Q2FwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy11cGxvYWQtdG8tY2xvdWRfNjRcIj48L2k+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGlwbGVfX2hlYWRlclwiPnt7IGNvbmZpZy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXVsdGlwbGVfX2NhcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFswXSB9fTxsYWJlbCBtYy1saW5rIHBzZXVkbyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdGFiSW5kZXhdPVwiLTFcIiBbZm9yXT1cImlucHV0SWRcIj57eyBjb25maWcuYnJvd3NlTGluayB9fTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9sYWJlbD57eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFsxXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX2luZm8tc2VjdGlvblwiPlxuICAgIDxtYy1oaW50IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX2hpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWMtaGludD5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFcnJvcnNcIj5cbiAgICAgICAgPG1jLWhpbnQgY2xhc3M9XCJtYy1maWxlLXVwbG9hZF9faGludCBtYy1lcnJvclwiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIj5cbiAgICAgICAgICAgICAgICB7eyBlcnJvciB9fVxuICAgICAgICA8L21jLWhpbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWxlT3V0cHV0PlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZF9fZHJvcHpvbmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWZpbGUtdXBsb2FkX19ncmlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtZmlsZS1tdWx0aXBsZS11cGxvYWRlZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWZpbGUtbXVsdGlwbGUtdXBsb2FkZWRfX2hlYWRlci1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInbWMtZmlsZS11cGxvYWRfXycgKyBjb2x1bW4uY3NzQ2xhc3NcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbkRlZnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG1jLWxpc3Qtc2VsZWN0aW9uIFthdXRvU2VsZWN0XT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG1jLWxpc3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXVsdGlwbGVfX3VwbG9hZGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsZS5maWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5kZWxldGUpPVwiZGVsZXRlRmlsZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiZGVsZXRlRmlsZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlczsgbGV0IGluZGV4ID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1maWxlLXVwbG9hZF9fcm93XCIgW2NsYXNzLmVycm9yXT1cImZpbGUuaGFzRXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1maWxlLXVwbG9hZF9fZmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7IGxvYWRpbmc6IGZpbGUubG9hZGluZyB8IGFzeW5jLCBwcm9ncmVzczogZmlsZS5wcm9ncmVzcyB8IGFzeW5jIH0gYXMgYXN5bmNEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYXN5bmNEYXRhLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkoY3VzdG9tRmlsZUljb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbGUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1jLXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHQtbmF0LWZpbGUtdXBsb2FkLW5hbWUtY2VsbF9faWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYXN5bmNEYXRhLnByb2dyZXNzIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhc3luY0RhdGEubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L21jLXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtaXRlbV9fdGV4dFwiIFttY0VsbGlwc2lzQ2VudGVyXT1cImZpbGUuZmlsZS5uYW1lXCIgW21pblZpc2libGVMZW5ndGhdPVwiMTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1maWxlLXVwbG9hZF9fc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbGUuZmlsZS5zaXplIHwgbWNEYXRhU2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtZmlsZS11cGxvYWRfX2FjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy1jbG9zZS1jaXJjbGVfMTZcIiAoY2xpY2spPVwiZGVsZXRlRmlsZShpbmRleCwgJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21jLWxpc3Qtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYy1saXN0LXNlbGVjdGlvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi11cGxvYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZVwiPlxuICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy11cGxvYWQtdG8tY2xvdWRfMjRcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wem9uZV9fdGV4dCBtdWx0aXBsZV9fY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZFswXSB9fTxsYWJlbCBtYy1saW5rIHBzZXVkbyBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdGFiSW5kZXhdPVwiLTFcIiBbZm9yXT1cImlucHV0SWRcIj57eyBjb25maWcuYnJvd3NlTGluayB9fTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9sYWJlbD57eyBzZXBhcmF0ZWRDYXB0aW9uVGV4dFdoZW5TZWxlY3RlZFsxXSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGFjdENhcHRpb24+XG4gICAgPGkgbWMtaWNvbj1cIm1jLXVwbG9hZC10by1jbG91ZF8yNFwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cImRyb3B6b25lX190ZXh0IG11bHRpcGxlX19jYXB0aW9uXCI+XG4gICAgICAgIHt7IHNlcGFyYXRlZENhcHRpb25UZXh0Rm9yQ29tcGFjdFNpemVbMF0gfX08bGFiZWwgbWMtbGluayBwc2V1ZG8gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCIgW2Zvcl09XCJpbnB1dElkXCI+e3sgY29uZmlnLmJyb3dzZUxpbmsgfX08bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvbGFiZWw+e3sgc2VwYXJhdGVkQ2FwdGlvblRleHRGb3JDb21wYWN0U2l6ZVsxXSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRUZW1wbGF0ZT5cbiAgICA8aW5wdXQgI2lucHV0XG4gICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkVmlhQ2xpY2soJGV2ZW50KVwiPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==