@enigmatry/entry-components 18.1.0 → 19.0.1-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +2 -1
  2. package/date-time-picker/README.md +17 -3
  3. package/date-time-picker/date-time-picker-config.model.d.ts +20 -0
  4. package/date-time-picker/date-time-picker.component.d.ts +3 -1
  5. package/date-time-picker/public-api.d.ts +1 -0
  6. package/fesm2022/enigmatry-entry-components-button.mjs +9 -8
  7. package/fesm2022/enigmatry-entry-components-button.mjs.map +1 -1
  8. package/fesm2022/enigmatry-entry-components-common.mjs +36 -36
  9. package/fesm2022/enigmatry-entry-components-common.mjs.map +1 -1
  10. package/fesm2022/enigmatry-entry-components-date-time-picker.mjs +38 -14
  11. package/fesm2022/enigmatry-entry-components-date-time-picker.mjs.map +1 -1
  12. package/fesm2022/enigmatry-entry-components-dialog.mjs +23 -23
  13. package/fesm2022/enigmatry-entry-components-dialog.mjs.map +1 -1
  14. package/fesm2022/enigmatry-entry-components-file-input.mjs +8 -8
  15. package/fesm2022/enigmatry-entry-components-file-input.mjs.map +1 -1
  16. package/fesm2022/enigmatry-entry-components-permissions.mjs +14 -12
  17. package/fesm2022/enigmatry-entry-components-permissions.mjs.map +1 -1
  18. package/fesm2022/enigmatry-entry-components-search-filter.mjs +29 -29
  19. package/fesm2022/enigmatry-entry-components-search-filter.mjs.map +1 -1
  20. package/fesm2022/enigmatry-entry-components-spinner.mjs +11 -11
  21. package/fesm2022/enigmatry-entry-components-spinner.mjs.map +1 -1
  22. package/fesm2022/enigmatry-entry-components-table.mjs +20 -20
  23. package/fesm2022/enigmatry-entry-components-table.mjs.map +1 -1
  24. package/fesm2022/enigmatry-entry-components-validation.mjs +14 -12
  25. package/fesm2022/enigmatry-entry-components-validation.mjs.map +1 -1
  26. package/fesm2022/enigmatry-entry-components.mjs +4 -4
  27. package/fesm2022/enigmatry-entry-components.mjs.map +1 -1
  28. package/package.json +8 -30
  29. package/esm2022/button/enigmatry-entry-components-button.mjs +0 -5
  30. package/esm2022/button/entry-button-config.mjs +0 -25
  31. package/esm2022/button/entry-button.directive.mjs +0 -56
  32. package/esm2022/button/entry-button.module.mjs +0 -28
  33. package/esm2022/button/public-api.mjs +0 -4
  34. package/esm2022/common/common.module.mjs +0 -58
  35. package/esm2022/common/constants.mjs +0 -3
  36. package/esm2022/common/date-time/entry-date-time-adapter.mjs +0 -119
  37. package/esm2022/common/date-time/entry-date-time-formats.mjs +0 -14
  38. package/esm2022/common/date-time/entry-time-adapter.mjs +0 -10
  39. package/esm2022/common/date-time/index.mjs +0 -5
  40. package/esm2022/common/date-time/native-time-adapter.mjs +0 -31
  41. package/esm2022/common/directives/auto-disable-button.directive.mjs +0 -75
  42. package/esm2022/common/directives/index.mjs +0 -5
  43. package/esm2022/common/directives/ng-control-accessor.directive.mjs +0 -46
  44. package/esm2022/common/directives/noop-control-value-accessor.mjs +0 -32
  45. package/esm2022/common/directives/scroll-to-invalid-control.directive.mjs +0 -51
  46. package/esm2022/common/enigmatry-entry-components-common.mjs +0 -5
  47. package/esm2022/common/event-plugins/abstract.plugin.mjs +0 -35
  48. package/esm2022/common/event-plugins/debounce.plugin.mjs +0 -34
  49. package/esm2022/common/event-plugins/index.mjs +0 -3
  50. package/esm2022/common/event-plugins/throttle.plugin.mjs +0 -34
  51. package/esm2022/common/interceptors/accept-language.interceptor.mjs +0 -32
  52. package/esm2022/common/interceptors/index.mjs +0 -2
  53. package/esm2022/common/public-api.mjs +0 -7
  54. package/esm2022/common/utils/index.mjs +0 -2
  55. package/esm2022/common/utils/provide-config.mjs +0 -14
  56. package/esm2022/date-time-picker/date-time-picker.component.mjs +0 -139
  57. package/esm2022/date-time-picker/date-time-picker.module.mjs +0 -62
  58. package/esm2022/date-time-picker/enigmatry-entry-components-date-time-picker.mjs +0 -5
  59. package/esm2022/date-time-picker/public-api.mjs +0 -3
  60. package/esm2022/date-time-picker/time-picker.component.mjs +0 -80
  61. package/esm2022/dialog/dialogs/alert/entry-alert-dialog-data.interface.mjs +0 -2
  62. package/esm2022/dialog/dialogs/alert/entry-alert-dialog.component.mjs +0 -29
  63. package/esm2022/dialog/dialogs/confirm/entry-confirm-dialog-data.interface.mjs +0 -2
  64. package/esm2022/dialog/dialogs/confirm/entry-confirm-dialog.component.mjs +0 -29
  65. package/esm2022/dialog/dialogs/entry-dialog.component.mjs +0 -74
  66. package/esm2022/dialog/dialogs/error/entry-error-dialog-data.interface.mjs +0 -2
  67. package/esm2022/dialog/dialogs/error/entry-error-dialog.component.mjs +0 -46
  68. package/esm2022/dialog/enigmatry-entry-components-dialog.mjs +0 -5
  69. package/esm2022/dialog/entry-dialog-buttons-alignment.type.mjs +0 -2
  70. package/esm2022/dialog/entry-dialog-config.model.mjs +0 -31
  71. package/esm2022/dialog/entry-dialog.module.mjs +0 -57
  72. package/esm2022/dialog/entry-dialog.service.mjs +0 -86
  73. package/esm2022/dialog/public-api.mjs +0 -8
  74. package/esm2022/enigmatry-entry-components.mjs +0 -5
  75. package/esm2022/file-input/enigmatry-entry-components-file-input.mjs +0 -5
  76. package/esm2022/file-input/entry-file-input.component.mjs +0 -201
  77. package/esm2022/file-input/entry-file-input.module.mjs +0 -40
  78. package/esm2022/file-input/public-api.mjs +0 -3
  79. package/esm2022/modules/entry-components.module.mjs +0 -67
  80. package/esm2022/permissions/enigmatry-entry-components-permissions.mjs +0 -5
  81. package/esm2022/permissions/permission-type.mjs +0 -2
  82. package/esm2022/permissions/permission.directive.mjs +0 -35
  83. package/esm2022/permissions/permission.guard.mjs +0 -14
  84. package/esm2022/permissions/permission.module.mjs +0 -29
  85. package/esm2022/permissions/permission.pipe.mjs +0 -20
  86. package/esm2022/permissions/permission.service.mjs +0 -3
  87. package/esm2022/permissions/public-api.mjs +0 -6
  88. package/esm2022/public-api.mjs +0 -14
  89. package/esm2022/search-filter/autocomplete/autocomplete-search-filter.component.mjs +0 -56
  90. package/esm2022/search-filter/autocomplete/autocomplete-search-filter.model.mjs +0 -19
  91. package/esm2022/search-filter/control-type.mjs +0 -9
  92. package/esm2022/search-filter/date/date-search-filter.component.mjs +0 -20
  93. package/esm2022/search-filter/date/date-search-filter.model.mjs +0 -12
  94. package/esm2022/search-filter/date-time/date-time-search-filter.component.mjs +0 -28
  95. package/esm2022/search-filter/date-time/date-time-search-filter.model.mjs +0 -12
  96. package/esm2022/search-filter/enigmatry-entry-components-search-filter.mjs +0 -5
  97. package/esm2022/search-filter/entry-search-filter.component.mjs +0 -76
  98. package/esm2022/search-filter/entry-search-filter.module.mjs +0 -78
  99. package/esm2022/search-filter/public-api.mjs +0 -11
  100. package/esm2022/search-filter/search-filter-base.model.mjs +0 -26
  101. package/esm2022/search-filter/search-filter-config.model.mjs +0 -18
  102. package/esm2022/search-filter/search-filter-params.type.mjs +0 -2
  103. package/esm2022/search-filter/select/select-search-filter.component.mjs +0 -29
  104. package/esm2022/search-filter/select/select-search-filter.model.mjs +0 -23
  105. package/esm2022/search-filter/select-option.model.mjs +0 -12
  106. package/esm2022/search-filter/text/text-search-filter.component.mjs +0 -19
  107. package/esm2022/search-filter/text/text-search-filter.model.mjs +0 -12
  108. package/esm2022/spinner/enigmatry-entry-components-spinner.mjs +0 -5
  109. package/esm2022/spinner/entry-spinner/spinner.component.mjs +0 -81
  110. package/esm2022/spinner/public-api.mjs +0 -3
  111. package/esm2022/spinner/spinner-overlay-container.mjs +0 -42
  112. package/esm2022/spinner/spinner.module.mjs +0 -32
  113. package/esm2022/table/components/entry-cell/entry-cell.component.mjs +0 -23
  114. package/esm2022/table/components/entry-cell-context-menu/entry-cell-context-menu.component.mjs +0 -42
  115. package/esm2022/table/components/entry-cell-formatted-value/entry-cell-formatted-value.component.mjs +0 -25
  116. package/esm2022/table/components/entry-table/entry-table.component.mjs +0 -251
  117. package/esm2022/table/components/index.mjs +0 -5
  118. package/esm2022/table/enigmatry-entry-components-table.mjs +0 -5
  119. package/esm2022/table/entry-table.module.mjs +0 -84
  120. package/esm2022/table/interfaces/cell-template.mjs +0 -2
  121. package/esm2022/table/interfaces/column-def.mjs +0 -2
  122. package/esm2022/table/interfaces/column-sort-prop.mjs +0 -2
  123. package/esm2022/table/interfaces/column-type-parameter.mjs +0 -2
  124. package/esm2022/table/interfaces/column-type.mjs +0 -2
  125. package/esm2022/table/interfaces/context-menu-item.mjs +0 -2
  126. package/esm2022/table/interfaces/entry-table-config.mjs +0 -45
  127. package/esm2022/table/interfaces/index.mjs +0 -13
  128. package/esm2022/table/interfaces/paged-query.mjs +0 -37
  129. package/esm2022/table/interfaces/pagination.mjs +0 -2
  130. package/esm2022/table/interfaces/row-class-formatter.mjs +0 -2
  131. package/esm2022/table/interfaces/row-context-menu-formatter.mjs +0 -2
  132. package/esm2022/table/interfaces/row-selection-formatter.mjs +0 -2
  133. package/esm2022/table/public-api.mjs +0 -4
  134. package/esm2022/validation/enigmatry-entry-components-validation.mjs +0 -5
  135. package/esm2022/validation/entry-display-control-validation.directive.mjs +0 -63
  136. package/esm2022/validation/entry-form-errors.component.mjs +0 -41
  137. package/esm2022/validation/entry-validation-config.model.mjs +0 -24
  138. package/esm2022/validation/entry-validation.mjs +0 -51
  139. package/esm2022/validation/entry-validation.module.mjs +0 -40
  140. package/esm2022/validation/public-api.mjs +0 -6
  141. package/esm2022/validation/validation-problem-details.interface.mjs +0 -2
@@ -1,201 +0,0 @@
1
- /* eslint-disable @typescript-eslint/member-ordering */
2
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
- import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, forwardRef } from '@angular/core';
4
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { Subject, fromEvent } from 'rxjs';
6
- import { takeUntil } from 'rxjs/operators';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/material/icon";
10
- import * as i3 from "@angular/material/button";
11
- import * as i4 from "@enigmatry/entry-components/button";
12
- const providers = [
13
- {
14
- provide: NG_VALUE_ACCESSOR,
15
- useExisting: forwardRef(() => EntryFileInputComponent),
16
- multi: true
17
- },
18
- {
19
- provide: NG_VALIDATORS,
20
- useExisting: forwardRef(() => EntryFileInputComponent),
21
- multi: true
22
- }
23
- ];
24
- export class EntryFileInputComponent {
25
- /**
26
- * Same as 'multiple' attribute in <input/> element.
27
- */
28
- set multiple(multiple) {
29
- this._multiple = coerceBooleanProperty(multiple);
30
- }
31
- get multiple() {
32
- return this._multiple;
33
- }
34
- /**
35
- * Same as 'disabled' attribute in <input/> element.
36
- */
37
- set disabled(disabled) {
38
- this._disabled = coerceBooleanProperty(disabled);
39
- }
40
- get disabled() {
41
- return this._disabled;
42
- }
43
- /**
44
- * Same as 'readonly' attribute in <input/> element.
45
- */
46
- set readonly(readonly) {
47
- this._readonly = coerceBooleanProperty(readonly);
48
- }
49
- get readonly() {
50
- return this._readonly;
51
- }
52
- constructor(_ngZone, _renderer) {
53
- this._ngZone = _ngZone;
54
- this._renderer = _renderer;
55
- /**
56
- * Label for the select file button. Defaults to 'Choose file...'
57
- */
58
- this.label = 'Choose file...';
59
- /**
60
- * MatIcon for the select file button. Defaults to 'insert_drive_file' (optional)
61
- */
62
- this.matIcon = 'insert_drive_file';
63
- this._multiple = false;
64
- this._disabled = false;
65
- this._readonly = false;
66
- /**
67
- * Size limit per file in KB (kilobytes)
68
- */
69
- this.maxFileSizeInKb = undefined;
70
- /**
71
- * Number of files allowed when multiple=true
72
- */
73
- this.maxFileCount = undefined;
74
- /**
75
- * Event emitted when a file is selected. Emits a [File | FileList] object.
76
- */
77
- this.selectedFile = new EventEmitter();
78
- this._destroy$ = new Subject();
79
- // implements ControlValueAccessor interface
80
- this.onChange = (_) => {
81
- // set by registerOnChange
82
- };
83
- this.onTouched = () => {
84
- // set by registerOnTouched
85
- };
86
- }
87
- get fileNames() {
88
- if (this.value instanceof File) {
89
- return this.value.name;
90
- }
91
- if (this.value instanceof FileList) {
92
- return `${this.value.length} files`;
93
- }
94
- return '';
95
- }
96
- ngOnInit() {
97
- // Handle click event on custom file button and trigger click on native file input
98
- this._ngZone.runOutsideAngular(() => {
99
- fromEvent(this._fileButton.nativeElement, 'click')
100
- .pipe(takeUntil(this._destroy$))
101
- .subscribe(() => {
102
- this._fileInput.nativeElement.click();
103
- });
104
- });
105
- }
106
- ngOnDestroy() {
107
- this._destroy$.next();
108
- }
109
- onFileSelect(event) {
110
- const fileInputEl = event.target;
111
- const files = fileInputEl.files;
112
- const value = this._multiple
113
- ? files?.length > 1 ? files : files[0]
114
- : files[0];
115
- this.value = value;
116
- this.onChange(value);
117
- this.onTouched();
118
- if (value) {
119
- this.selectedFile.emit(value);
120
- }
121
- }
122
- clear() {
123
- this.value = undefined;
124
- this.onChange(undefined);
125
- this._renderer.setProperty(this._fileInput.nativeElement, 'value', '');
126
- }
127
- writeValue(value) {
128
- this.value = value;
129
- }
130
- registerOnChange(fn) {
131
- this.onChange = fn;
132
- }
133
- registerOnTouched(fn) {
134
- this.onTouched = fn;
135
- }
136
- setDisabledState(isDisabled) {
137
- this._disabled = isDisabled;
138
- }
139
- // implements Validator interface
140
- validate(control) {
141
- const isSizeLimitExceeded = this.isFileSizeLimitExceeded(control.value);
142
- const isCountLimitExceeded = this.isFileCountLimitExceeded(control.value);
143
- if (!isSizeLimitExceeded && !isCountLimitExceeded) {
144
- return null;
145
- }
146
- return {
147
- ...(isSizeLimitExceeded ? { maxFileSize: true } : {}),
148
- ...(isCountLimitExceeded ? { maxFileCount: true } : {})
149
- };
150
- }
151
- isFileCountLimitExceeded(files) {
152
- const isMultiple = this.multiple && files instanceof FileList;
153
- const maxFileCount = this.maxFileCount;
154
- const actualFileCount = files?.length;
155
- return isMultiple && maxFileCount && actualFileCount > maxFileCount;
156
- }
157
- isFileSizeLimitExceeded(files) {
158
- if (!this.maxFileSizeInKb) {
159
- return false;
160
- }
161
- const maxFileSizeInBytes = this.maxFileSizeInKb * 1024;
162
- if (files instanceof File) {
163
- return files.size > maxFileSizeInBytes;
164
- }
165
- if (files instanceof FileList) {
166
- return Array.from(files).some(file => file.size > maxFileSizeInBytes);
167
- }
168
- return false;
169
- }
170
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
171
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EntryFileInputComponent, selector: "entry-file-input", inputs: { label: "label", matIcon: "matIcon", accept: "accept", multiple: "multiple", disabled: "disabled", readonly: "readonly", maxFileSizeInKb: "maxFileSizeInKb", maxFileCount: "maxFileCount" }, outputs: { selectedFile: "selectedFile" }, providers: providers, viewQueries: [{ propertyName: "_fileButton", first: true, predicate: ["fileButton"], descendants: true, read: ElementRef, static: true }, { propertyName: "_fileInput", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: "<button\r\n #fileButton\r\n mat-button\r\n entry-submit-button\r\n type=\"button\"\r\n [disabled]=\"disabled || readonly\"\r\n aria-controls=\"fileInput\"\r\n aria-label=\"Upload Files\">\r\n <mat-icon *ngIf=\"matIcon\">{{matIcon}}</mat-icon>\r\n <span>{{label}}</span>\r\n</button>\r\n<ng-container *ngIf=\"value\">\r\n {{fileNames}}\r\n</ng-container>\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"file-input-hidden\"\r\n [accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (change)=\"onFileSelect($event)\"\r\n aria-label=\"File Upload\"\r\n id=\"fileInput\"\r\n/>", styles: [".file-input-hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i4.EntryButtonDirective, selector: "[mat-button][entry-submit-button],[mat-button][entry-cancel-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
172
- }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputComponent, decorators: [{
174
- type: Component,
175
- args: [{ selector: 'entry-file-input', changeDetection: ChangeDetectionStrategy.OnPush, providers: providers, template: "<button\r\n #fileButton\r\n mat-button\r\n entry-submit-button\r\n type=\"button\"\r\n [disabled]=\"disabled || readonly\"\r\n aria-controls=\"fileInput\"\r\n aria-label=\"Upload Files\">\r\n <mat-icon *ngIf=\"matIcon\">{{matIcon}}</mat-icon>\r\n <span>{{label}}</span>\r\n</button>\r\n<ng-container *ngIf=\"value\">\r\n {{fileNames}}\r\n</ng-container>\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"file-input-hidden\"\r\n [accept]=\"accept\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n (change)=\"onFileSelect($event)\"\r\n aria-label=\"File Upload\"\r\n id=\"fileInput\"\r\n/>", styles: [".file-input-hidden{display:none}\n"] }]
176
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Renderer2 }], propDecorators: { label: [{
177
- type: Input
178
- }], matIcon: [{
179
- type: Input
180
- }], accept: [{
181
- type: Input
182
- }], multiple: [{
183
- type: Input
184
- }], disabled: [{
185
- type: Input
186
- }], readonly: [{
187
- type: Input
188
- }], maxFileSizeInKb: [{
189
- type: Input
190
- }], maxFileCount: [{
191
- type: Input
192
- }], selectedFile: [{
193
- type: Output
194
- }], _fileButton: [{
195
- type: ViewChild,
196
- args: ['fileButton', { static: true, read: ElementRef }]
197
- }], _fileInput: [{
198
- type: ViewChild,
199
- args: ['fileInput', { static: true }]
200
- }] } });
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvZmlsZS1pbnB1dC9lbnRyeS1maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9maWxlLWlucHV0L2VudHJ5LWZpbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFDdkIsTUFBTSxFQUFhLFNBQVMsRUFBRSxVQUFVLEVBQzVELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDa0MsYUFBYSxFQUNwRCxpQkFBaUIsRUFDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUUzQyxNQUFNLFNBQVMsR0FBRztJQUNoQjtRQUNFLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUN0RCxLQUFLLEVBQUUsSUFBSTtLQUNaO0lBQ0Q7UUFDRSxPQUFPLEVBQUUsYUFBYTtRQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ3RELEtBQUssRUFBRSxJQUFJO0tBQ1o7Q0FDRixDQUFDO0FBU0YsTUFBTSxPQUFPLHVCQUF1QjtJQWlCbEM7O09BRUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxRQUFzQjtR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QUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrR0FyTVUsdUJBQXVCO21HQUF2Qix1QkFBdUIsNFJBRmxDLFNBQVMsZ0hBNEVzQyxVQUFVLG1KQzVHM0QsNm5CQXlCRTs7NEZEU1csdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGFBQy9DLFNBQVM7bUdBT0EsS0FBSztzQkFBYixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBTUYsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLFFBQVE7c0JBRFgsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBWUcsZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQVVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBSVAsV0FBVztzQkFEVixTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0QsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsXG4gIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgcHJvdmlkZXJzID0gW1xuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRW50cnlGaWxlSW5wdXRDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVudHJ5RmlsZUlucHV0Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbnRyeS1maWxlLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VudHJ5LWZpbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRyeS1maWxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnNcbn0pXG5leHBvcnQgY2xhc3MgRW50cnlGaWxlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG5cbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGUgc2VsZWN0IGZpbGUgYnV0dG9uLiBEZWZhdWx0cyB0byAnQ2hvb3NlIGZpbGUuLi4nXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbCA9ICdDaG9vc2UgZmlsZS4uLic7XG5cbiAgLyoqXG4gICAqIE1hdEljb24gZm9yIHRoZSBzZWxlY3QgZmlsZSBidXR0b24uIERlZmF1bHRzIHRvICdpbnNlcnRfZHJpdmVfZmlsZScgKG9wdGlvbmFsKVxuICAgKi9cbiAgQElucHV0KCkgbWF0SWNvbj89ICdpbnNlcnRfZHJpdmVfZmlsZSc7XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgJ2FjY2VwdCcgYXR0cmlidXRlIGluIDxpbnB1dC8+IGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgJ211bHRpcGxlJyBhdHRyaWJ1dGUgaW4gPGlucHV0Lz4gZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBtdWx0aXBsZShtdWx0aXBsZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobXVsdGlwbGUpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gIH1cbiAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2FtZSBhcyAnZGlzYWJsZWQnIGF0dHJpYnV0ZSBpbiA8aW5wdXQvPiBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXNhYmxlZCk7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTYW1lIGFzICdyZWFkb25seScgYXR0cmlidXRlIGluIDxpbnB1dC8+IGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcmVhZG9ubHkocmVhZG9ubHk6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlYWRvbmx5KTtcbiAgfVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG4gIHByaXZhdGUgX3JlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNpemUgbGltaXQgcGVyIGZpbGUgaW4gS0IgKGtpbG9ieXRlcylcbiAgICovXG4gIEBJbnB1dCgpIG1heEZpbGVTaXplSW5LYj86IG51bWJlciA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGZpbGVzIGFsbG93ZWQgd2hlbiBtdWx0aXBsZT10cnVlXG4gICAqL1xuICBASW5wdXQoKSBtYXhGaWxlQ291bnQ/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc2VsZWN0ZWQgW0ZpbGUgfCBGaWxlTGlzdF0gb2JqZWN0LlxuICAgKi9cbiAgdmFsdWU6IEZpbGUgfCBGaWxlTGlzdCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgZmlsZSBpcyBzZWxlY3RlZC4gRW1pdHMgYSBbRmlsZSB8IEZpbGVMaXN0XSBvYmplY3QuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlIHwgRmlsZUxpc3Q+KCk7XG5cblxuICBAVmlld0NoaWxkKCdmaWxlQnV0dG9uJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgX2ZpbGVCdXR0b24hOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBfZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICB9XG5cbiAgZ2V0IGZpbGVOYW1lcygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUubmFtZTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBGaWxlTGlzdCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlc2A7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBjbGljayBldmVudCBvbiBjdXN0b20gZmlsZSBidXR0b24gYW5kIHRyaWdnZXIgY2xpY2sgb24gbmF0aXZlIGZpbGUgaW5wdXRcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHRoaXMuX2ZpbGVCdXR0b24ubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZUlucHV0RWwgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlczogRmlsZUxpc3QgPSBmaWxlSW5wdXRFbC5maWxlcztcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fbXVsdGlwbGVcbiAgICAgID8gZmlsZXM/Lmxlbmd0aCA+IDEgPyBmaWxlcyA6IGZpbGVzWzBdXG4gICAgICA6IGZpbGVzWzBdO1xuXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2ZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCAnJyk7XG4gIH1cblxuICAvLyBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuXG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyBcbiAgICAvLyBzZXQgYnkgcmVnaXN0ZXJPbkNoYW5nZVxuICB9O1xuXG4gIG9uVG91Y2hlZCA9ICgpID0+IHtcbiAgICAvLyBzZXQgYnkgcmVnaXN0ZXJPblRvdWNoZWRcbiAgfTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBpbXBsZW1lbnRzIFZhbGlkYXRvciBpbnRlcmZhY2VcblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8RmlsZSB8IEZpbGVMaXN0IHwgdW5kZWZpbmVkPik6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGlzU2l6ZUxpbWl0RXhjZWVkZWQgPSB0aGlzLmlzRmlsZVNpemVMaW1pdEV4Y2VlZGVkKGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGlzQ291bnRMaW1pdEV4Y2VlZGVkID0gdGhpcy5pc0ZpbGVDb3VudExpbWl0RXhjZWVkZWQoY29udHJvbC52YWx1ZSk7XG5cbiAgICBpZiAoIWlzU2l6ZUxpbWl0RXhjZWVkZWQgJiYgIWlzQ291bnRMaW1pdEV4Y2VlZGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihpc1NpemVMaW1pdEV4Y2VlZGVkID8geyBtYXhGaWxlU2l6ZTogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKGlzQ291bnRMaW1pdEV4Y2VlZGVkID8geyBtYXhGaWxlQ291bnQ6IHRydWUgfSA6IHt9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZUNvdW50TGltaXRFeGNlZWRlZChmaWxlczogRmlsZSB8IEZpbGVMaXN0KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUgJiYgZmlsZXMgaW5zdGFuY2VvZiBGaWxlTGlzdDtcbiAgICBjb25zdCBtYXhGaWxlQ291bnQgPSB0aGlzLm1heEZpbGVDb3VudDtcbiAgICBjb25zdCBhY3R1YWxGaWxlQ291bnQgPSAoZmlsZXMgYXMgRmlsZUxpc3QpPy5sZW5ndGg7XG5cbiAgICByZXR1cm4gaXNNdWx0aXBsZSAmJiBtYXhGaWxlQ291bnQgJiYgYWN0dWFsRmlsZUNvdW50ID4gbWF4RmlsZUNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVTaXplTGltaXRFeGNlZWRlZChmaWxlczogRmlsZSB8IEZpbGVMaXN0KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1heEZpbGVTaXplSW5LYikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtYXhGaWxlU2l6ZUluQnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplSW5LYiAqIDEwMjQ7XG5cbiAgICBpZiAoZmlsZXMgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICByZXR1cm4gZmlsZXMuc2l6ZSA+IG1heEZpbGVTaXplSW5CeXRlcztcbiAgICB9XG4gICAgaWYgKGZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVzKS5zb21lKGZpbGUgPT4gZmlsZS5zaXplID4gbWF4RmlsZVNpemVJbkJ5dGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8YnV0dG9uXHJcbiAjZmlsZUJ1dHRvblxyXG4gbWF0LWJ1dHRvblxyXG4gZW50cnktc3VibWl0LWJ1dHRvblxyXG4gdHlwZT1cImJ1dHRvblwiXHJcbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxyXG4gYXJpYS1jb250cm9scz1cImZpbGVJbnB1dFwiXHJcbiBhcmlhLWxhYmVsPVwiVXBsb2FkIEZpbGVzXCI+XHJcbiAgPG1hdC1pY29uICpuZ0lmPVwibWF0SWNvblwiPnt7bWF0SWNvbn19PC9tYXQtaWNvbj5cclxuICA8c3Bhbj57e2xhYmVsfX08L3NwYW4+XHJcbjwvYnV0dG9uPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVcIj5cclxuICB7e2ZpbGVOYW1lc319XHJcbjwvbmctY29udGFpbmVyPlxyXG48aW5wdXRcclxuICNmaWxlSW5wdXRcclxuIHR5cGU9XCJmaWxlXCJcclxuIGNsYXNzPVwiZmlsZS1pbnB1dC1oaWRkZW5cIlxyXG4gW2FjY2VwdF09XCJhY2NlcHRcIlxyXG4gW211bHRpcGxlXT1cIm11bHRpcGxlXCJcclxuIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50KVwiXHJcbiBhcmlhLWxhYmVsPVwiRmlsZSBVcGxvYWRcIlxyXG4gaWQ9XCJmaWxlSW5wdXRcIlxyXG4vPiJdfQ==
@@ -1,40 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { EntryFileInputComponent } from './entry-file-input.component';
4
- import { MatIconModule } from '@angular/material/icon';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { FormsModule } from '@angular/forms';
7
- import { EntryButtonModule } from '@enigmatry/entry-components/button';
8
- import * as i0 from "@angular/core";
9
- export class EntryFileInputModule {
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputModule, declarations: [EntryFileInputComponent], imports: [CommonModule,
12
- FormsModule,
13
- MatIconModule,
14
- MatButtonModule,
15
- EntryButtonModule], exports: [EntryFileInputComponent] }); }
16
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputModule, imports: [CommonModule,
17
- FormsModule,
18
- MatIconModule,
19
- MatButtonModule,
20
- EntryButtonModule] }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryFileInputModule, decorators: [{
23
- type: NgModule,
24
- args: [{
25
- declarations: [
26
- EntryFileInputComponent
27
- ],
28
- imports: [
29
- CommonModule,
30
- FormsModule,
31
- MatIconModule,
32
- MatButtonModule,
33
- EntryButtonModule
34
- ],
35
- exports: [
36
- EntryFileInputComponent
37
- ]
38
- }]
39
- }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktZmlsZS1pbnB1dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvZmlsZS1pbnB1dC9lbnRyeS1maWxlLWlucHV0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFpQnZFLE1BQU0sT0FBTyxvQkFBb0I7K0dBQXBCLG9CQUFvQjtnSEFBcEIsb0JBQW9CLGlCQWI3Qix1QkFBdUIsYUFHdkIsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2IsZUFBZTtZQUNmLGlCQUFpQixhQUdqQix1QkFBdUI7Z0hBR2Qsb0JBQW9CLFlBVjdCLFlBQVk7WUFDWixXQUFXO1lBQ1gsYUFBYTtZQUNiLGVBQWU7WUFDZixpQkFBaUI7OzRGQU1SLG9CQUFvQjtrQkFmaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixpQkFBaUI7cUJBQ2xCO29CQUNELE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7cUJBQ3hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFbnRyeUZpbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZW50cnktZmlsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRW50cnlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvYnV0dG9uJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRW50cnlGaWxlSW5wdXRDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBFbnRyeUJ1dHRvbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRW50cnlGaWxlSW5wdXRDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbnRyeUZpbGVJbnB1dE1vZHVsZSB7IH1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export { EntryFileInputModule } from './entry-file-input.module';
2
- export { EntryFileInputComponent } from './entry-file-input.component';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9maWxlLWlucHV0L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBFbnRyeUZpbGVJbnB1dE1vZHVsZSB9IGZyb20gJy4vZW50cnktZmlsZS1pbnB1dC5tb2R1bGUnO1xuZXhwb3J0IHsgRW50cnlGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2VudHJ5LWZpbGUtaW5wdXQuY29tcG9uZW50JztcbiJdfQ==
@@ -1,67 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { EntryButtonModule } from '@enigmatry/entry-components/button';
3
- import { EntryDialogModule } from '@enigmatry/entry-components/dialog';
4
- import { EntryPermissionModule, EntryPermissionService } from '@enigmatry/entry-components/permissions';
5
- import { EntrySearchFilterModule } from '@enigmatry/entry-components/search-filter';
6
- import { EntryValidationModule } from '@enigmatry/entry-components/validation';
7
- import { EntryFileInputModule } from '@enigmatry/entry-components/file-input';
8
- import { EntryTableModule } from '@enigmatry/entry-components/table';
9
- import { EntryCommonModule, NG_EVENT_PLUGINS } from '@enigmatry/entry-components/common';
10
- import { EntrySpinnerModule } from '@enigmatry/entry-components/spinner';
11
- import * as i0 from "@angular/core";
12
- /**
13
- * Exports all entry components.
14
- *
15
- * Usage
16
- * import EntryComponentsModule in shared.module.ts to have access to all components, directives, pipes.
17
- * import EntryComponentsModule.forRoot() in app.module.ts to register root module providers.
18
- */
19
- export class EntryComponentsModule {
20
- static forRoot(options = {}) {
21
- const permissionServiceProvider = options.permissionService
22
- ? [{ provide: EntryPermissionService, useClass: options.permissionService }]
23
- : [];
24
- const providers = [...permissionServiceProvider, ...NG_EVENT_PLUGINS];
25
- return {
26
- ngModule: EntryComponentsModule,
27
- providers
28
- };
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
31
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: EntryComponentsModule, exports: [EntryButtonModule,
32
- EntryCommonModule,
33
- EntryDialogModule,
34
- EntryFileInputModule,
35
- EntryValidationModule,
36
- EntryPermissionModule,
37
- EntrySearchFilterModule,
38
- EntrySpinnerModule,
39
- EntryTableModule] }); }
40
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryComponentsModule, imports: [EntryButtonModule,
41
- EntryCommonModule,
42
- EntryDialogModule,
43
- EntryFileInputModule,
44
- EntryValidationModule,
45
- EntryPermissionModule,
46
- EntrySearchFilterModule,
47
- EntrySpinnerModule,
48
- EntryTableModule] }); }
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryComponentsModule, decorators: [{
51
- type: NgModule,
52
- args: [{
53
- declarations: [],
54
- exports: [
55
- EntryButtonModule,
56
- EntryCommonModule,
57
- EntryDialogModule,
58
- EntryFileInputModule,
59
- EntryValidationModule,
60
- EntryPermissionModule,
61
- EntrySearchFilterModule,
62
- EntrySpinnerModule,
63
- EntryTableModule
64
- ]
65
- }]
66
- }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvbW9kdWxlcy9lbnRyeS1jb21wb25lbnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTXpFOzs7Ozs7R0FNRztBQWVILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUF3QyxFQUFFO1FBRXZELE1BQU0seUJBQXlCLEdBQWUsT0FBTyxDQUFDLGlCQUFpQjtZQUNyRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLE1BQU0sU0FBUyxHQUFlLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDbEYsT0FBTztZQUNMLFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsU0FBUztTQUNWLENBQUM7SUFDSixDQUFDOytHQVpVLHFCQUFxQjtnSEFBckIscUJBQXFCLFlBWDlCLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixrQkFBa0I7WUFDbEIsZ0JBQWdCO2dIQUdQLHFCQUFxQixZQVg5QixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLHFCQUFxQjtZQUNyQix1QkFBdUI7WUFDdkIsa0JBQWtCO1lBQ2xCLGdCQUFnQjs7NEZBR1AscUJBQXFCO2tCQWRqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLGdCQUFnQjtxQkFDakI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRW50cnlCdXR0b25Nb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvYnV0dG9uJztcclxuaW1wb3J0IHsgRW50cnlEaWFsb2dNb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvZGlhbG9nJztcclxuaW1wb3J0IHsgRW50cnlQZXJtaXNzaW9uTW9kdWxlLCBFbnRyeVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL3Blcm1pc3Npb25zJztcclxuaW1wb3J0IHsgRW50cnlTZWFyY2hGaWx0ZXJNb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvc2VhcmNoLWZpbHRlcic7XHJcbmltcG9ydCB7IEVudHJ5VmFsaWRhdGlvbk1vZHVsZSB9IGZyb20gJ0BlbmlnbWF0cnkvZW50cnktY29tcG9uZW50cy92YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgRW50cnlGaWxlSW5wdXRNb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvZmlsZS1pbnB1dCc7XHJcbmltcG9ydCB7IEVudHJ5VGFibGVNb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvdGFibGUnO1xyXG5pbXBvcnQgeyBFbnRyeUNvbW1vbk1vZHVsZSwgTkdfRVZFTlRfUExVR0lOUyB9IGZyb20gJ0BlbmlnbWF0cnkvZW50cnktY29tcG9uZW50cy9jb21tb24nO1xyXG5pbXBvcnQgeyBFbnRyeVNwaW5uZXJNb2R1bGUgfSBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvc3Bpbm5lcic7XHJcblxyXG5pbnRlcmZhY2UgRW50cnlDb21wb25lbnRzTW9kdWxlT3B0aW9ucyB7XHJcbiAgcGVybWlzc2lvblNlcnZpY2U/OiBUeXBlPGFueT47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHBvcnRzIGFsbCBlbnRyeSBjb21wb25lbnRzLlxyXG4gKlxyXG4gKiBVc2FnZVxyXG4gKiBpbXBvcnQgRW50cnlDb21wb25lbnRzTW9kdWxlIGluIHNoYXJlZC5tb2R1bGUudHMgdG8gaGF2ZSBhY2Nlc3MgdG8gYWxsIGNvbXBvbmVudHMsIGRpcmVjdGl2ZXMsIHBpcGVzLlxyXG4gKiBpbXBvcnQgRW50cnlDb21wb25lbnRzTW9kdWxlLmZvclJvb3QoKSBpbiBhcHAubW9kdWxlLnRzIHRvIHJlZ2lzdGVyIHJvb3QgbW9kdWxlIHByb3ZpZGVycy5cclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBFbnRyeUJ1dHRvbk1vZHVsZSxcclxuICAgIEVudHJ5Q29tbW9uTW9kdWxlLFxyXG4gICAgRW50cnlEaWFsb2dNb2R1bGUsXHJcbiAgICBFbnRyeUZpbGVJbnB1dE1vZHVsZSxcclxuICAgIEVudHJ5VmFsaWRhdGlvbk1vZHVsZSxcclxuICAgIEVudHJ5UGVybWlzc2lvbk1vZHVsZSxcclxuICAgIEVudHJ5U2VhcmNoRmlsdGVyTW9kdWxlLFxyXG4gICAgRW50cnlTcGlubmVyTW9kdWxlLFxyXG4gICAgRW50cnlUYWJsZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudHJ5Q29tcG9uZW50c01vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3Qob3B0aW9uczogRW50cnlDb21wb25lbnRzTW9kdWxlT3B0aW9ucyA9IHt9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxFbnRyeUNvbXBvbmVudHNNb2R1bGU+IHtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9uU2VydmljZVByb3ZpZGVyOiBQcm92aWRlcltdID0gb3B0aW9ucy5wZXJtaXNzaW9uU2VydmljZVxyXG4gICAgICA/IFt7IHByb3ZpZGU6IEVudHJ5UGVybWlzc2lvblNlcnZpY2UsIHVzZUNsYXNzOiBvcHRpb25zLnBlcm1pc3Npb25TZXJ2aWNlIH1dXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgY29uc3QgcHJvdmlkZXJzOiBQcm92aWRlcltdID0gWy4uLnBlcm1pc3Npb25TZXJ2aWNlUHJvdmlkZXIsIC4uLk5HX0VWRU5UX1BMVUdJTlNdO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEVudHJ5Q29tcG9uZW50c01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5pZ21hdHJ5LWVudHJ5LWNvbXBvbmVudHMtcGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvcGVybWlzc2lvbnMvZW5pZ21hdHJ5LWVudHJ5LWNvbXBvbmVudHMtcGVybWlzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb24tdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUGVybWlzc2lvblR5cGUgPSBudW1iZXIgfCBzdHJpbmcgfCB7IGlkOiBudW1iZXIgfCBzdHJpbmcgfTtcbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { NgIf } from '@angular/common';
2
- import { Directive, Input, inject } from '@angular/core';
3
- import { EntryPermissionService } from './permission.service';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- export class EntryPermissionDirective {
7
- constructor() {
8
- this.ngIfDirective = inject(NgIf);
9
- this.permissionService = inject((EntryPermissionService));
10
- }
11
- set only(permissions) {
12
- this.ngIfDirective.ngIf = this.permissionService.hasPermissions(permissions);
13
- }
14
- set except(permissions) {
15
- this.ngIfDirective.ngIf = !this.permissionService.hasPermissions(permissions);
16
- }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
18
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: EntryPermissionDirective, selector: "[entryPermissionsOnly],[entryPermissionsExcept]", inputs: { only: ["entryPermissionsOnly", "only"], except: ["entryPermissionsExcept", "except"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 }); }
19
- }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionDirective, decorators: [{
21
- type: Directive,
22
- args: [{
23
- selector: '[entryPermissionsOnly],[entryPermissionsExcept]',
24
- hostDirectives: [{
25
- directive: NgIf
26
- }]
27
- }]
28
- }], propDecorators: { only: [{
29
- type: Input,
30
- args: ['entryPermissionsOnly']
31
- }], except: [{
32
- type: Input,
33
- args: ['entryPermissionsExcept']
34
- }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFPVSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixzQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQSxzQkFBeUIsQ0FBQSxDQUFDLENBQUM7S0FTL0Q7SUFQQyxJQUFtQyxJQUFJLENBQUMsV0FBZ0I7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBcUMsTUFBTSxDQUFDLFdBQWdCO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRixDQUFDOytHQVZVLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpREFBaUQ7b0JBQzNELGNBQWMsRUFBRSxDQUFDOzRCQUNmLFNBQVMsRUFBRSxJQUFJO3lCQUNoQixDQUFDO2lCQUNIOzhCQUtvQyxJQUFJO3NCQUF0QyxLQUFLO3VCQUFDLHNCQUFzQjtnQkFJUSxNQUFNO3NCQUExQyxLQUFLO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4vcGVybWlzc2lvbi10eXBlJztcbmltcG9ydCB7IEVudHJ5UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb24uc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbnRyeVBlcm1pc3Npb25zT25seV0sW2VudHJ5UGVybWlzc2lvbnNFeGNlcHRdJyxcbiAgaG9zdERpcmVjdGl2ZXM6IFt7XG4gICAgZGlyZWN0aXZlOiBOZ0lmXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIEVudHJ5UGVybWlzc2lvbkRpcmVjdGl2ZTxUIGV4dGVuZHMgUGVybWlzc2lvblR5cGU+IHtcbiAgcHJpdmF0ZSBuZ0lmRGlyZWN0aXZlID0gaW5qZWN0KE5nSWYpO1xuICBwcml2YXRlIHBlcm1pc3Npb25TZXJ2aWNlID0gaW5qZWN0KEVudHJ5UGVybWlzc2lvblNlcnZpY2U8VD4pO1xuXG4gIEBJbnB1dCgnZW50cnlQZXJtaXNzaW9uc09ubHknKSBzZXQgb25seShwZXJtaXNzaW9uczogVFtdKSB7XG4gICAgdGhpcy5uZ0lmRGlyZWN0aXZlLm5nSWYgPSB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zKTtcbiAgfVxuXG4gIEBJbnB1dCgnZW50cnlQZXJtaXNzaW9uc0V4Y2VwdCcpIHNldCBleGNlcHQocGVybWlzc2lvbnM6IFRbXSkge1xuICAgIHRoaXMubmdJZkRpcmVjdGl2ZS5uZ0lmID0gIXRoaXMucGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbnMocGVybWlzc2lvbnMpO1xuICB9XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { inject } from '@angular/core';
2
- import { EntryPermissionService } from './permission.service';
3
- export const entryPermissionGuard = (route, _state) => {
4
- const permissionService = inject(EntryPermissionService);
5
- const routePermissions = route.data.permissions ?? {};
6
- if (routePermissions.only) {
7
- return permissionService.hasPermissions(routePermissions.only);
8
- }
9
- if (routePermissions.except) {
10
- return !permissionService.hasPermissions(routePermissions.except);
11
- }
12
- return false;
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9uLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPOUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQ2pDLENBQTRCLEtBQTZCLEVBQUUsTUFBMkIsRUFBRSxFQUFFO0lBQ3hGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQXVDLElBQUksRUFBRSxDQUFDO0lBRWxGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsT0FBTyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FuQWN0aXZhdGVGbiwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRyeVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIFJvdXRlUGVybWlzc2lvbkNvbmZpZzxUIGV4dGVuZHMgUGVybWlzc2lvblR5cGU+IHtcclxuICBvbmx5PzogVFtdO1xyXG4gIGV4Y2VwdD86IFRbXTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudHJ5UGVybWlzc2lvbkd1YXJkOiBDYW5BY3RpdmF0ZUZuID1cclxuPFQgZXh0ZW5kcyBQZXJtaXNzaW9uVHlwZT4gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBfc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpID0+IHtcclxuICBjb25zdCBwZXJtaXNzaW9uU2VydmljZSA9IGluamVjdChFbnRyeVBlcm1pc3Npb25TZXJ2aWNlKTtcclxuICBjb25zdCByb3V0ZVBlcm1pc3Npb25zID0gcm91dGUuZGF0YS5wZXJtaXNzaW9ucyBhcyBSb3V0ZVBlcm1pc3Npb25Db25maWc8VD4gPz8ge307XHJcblxyXG4gIGlmIChyb3V0ZVBlcm1pc3Npb25zLm9ubHkpIHtcclxuICAgIHJldHVybiBwZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9ucyhyb3V0ZVBlcm1pc3Npb25zLm9ubHkpO1xyXG4gIH1cclxuICBpZiAocm91dGVQZXJtaXNzaW9ucy5leGNlcHQpIHtcclxuICAgIHJldHVybiAhcGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbnMocm91dGVQZXJtaXNzaW9ucy5leGNlcHQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG4iXX0=
@@ -1,29 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { EntryPermissionDirective } from './permission.directive';
4
- import { EntryPermissionPipe } from './permission.pipe';
5
- import * as i0 from "@angular/core";
6
- export class EntryPermissionModule {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionModule, declarations: [EntryPermissionDirective,
9
- EntryPermissionPipe], imports: [CommonModule], exports: [EntryPermissionDirective,
10
- EntryPermissionPipe] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionModule, imports: [CommonModule] }); }
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- declarations: [
17
- EntryPermissionDirective,
18
- EntryPermissionPipe
19
- ],
20
- imports: [
21
- CommonModule
22
- ],
23
- exports: [
24
- EntryPermissionDirective,
25
- EntryPermissionPipe
26
- ]
27
- }]
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2VudHJ5LWNvbXBvbmVudHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBZXhELE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQVg5Qix3QkFBd0I7WUFDeEIsbUJBQW1CLGFBR25CLFlBQVksYUFHWix3QkFBd0I7WUFDeEIsbUJBQW1CO2dIQUdWLHFCQUFxQixZQVA5QixZQUFZOzs0RkFPSCxxQkFBcUI7a0JBYmpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asd0JBQXdCO3dCQUN4QixtQkFBbUI7cUJBQ3BCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFbnRyeVBlcm1pc3Npb25EaXJlY3RpdmUgfSBmcm9tICcuL3Blcm1pc3Npb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEVudHJ5UGVybWlzc2lvblBpcGUgfSBmcm9tICcuL3Blcm1pc3Npb24ucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEVudHJ5UGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBFbnRyeVBlcm1pc3Npb25QaXBlXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEVudHJ5UGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBFbnRyeVBlcm1pc3Npb25QaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRW50cnlQZXJtaXNzaW9uTW9kdWxlIHsgfVxuIl19
@@ -1,20 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "./permission.service";
4
- export class EntryPermissionPipe {
5
- constructor(permissionsService) {
6
- this.permissionsService = permissionsService;
7
- }
8
- transform(permissions) {
9
- return this.permissionsService.hasPermissions(permissions);
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionPipe, deps: [{ token: i1.EntryPermissionService }], target: i0.ɵɵFactoryTarget.Pipe }); }
12
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionPipe, name: "entryHasPermissions" }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EntryPermissionPipe, decorators: [{
15
- type: Pipe,
16
- args: [{
17
- name: 'entryHasPermissions'
18
- }]
19
- }], ctorParameters: () => [{ type: i1.EntryPermissionService }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb24ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7O0FBT3BELE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0Isa0JBQTZDO1FBQTdDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMkI7SUFBSSxDQUFDO0lBRXRFLFNBQVMsQ0FBQyxXQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQzsrR0FMVSxtQkFBbUI7NkdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFIL0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUscUJBQXFCO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUnO1xuaW1wb3J0IHsgRW50cnlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZW50cnlIYXNQZXJtaXNzaW9ucydcbn0pXG5leHBvcnQgY2xhc3MgRW50cnlQZXJtaXNzaW9uUGlwZTxUIGV4dGVuZHMgUGVybWlzc2lvblR5cGU+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvbnNTZXJ2aWNlOiBFbnRyeVBlcm1pc3Npb25TZXJ2aWNlPFQ+KSB7IH1cblxuICB0cmFuc2Zvcm0ocGVybWlzc2lvbnM6IFRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5oYXNQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export class EntryPermissionService {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQWdCLHNCQUFzQjtDQUUzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudHJ5UGVybWlzc2lvblNlcnZpY2U8VCBleHRlbmRzIFBlcm1pc3Npb25UeXBlPiB7XHJcbiAgcHVibGljIGFic3RyYWN0IGhhc1Blcm1pc3Npb25zKHBlcm1pc3Npb25zOiBUW10pOiBib29sZWFuO1xyXG59XHJcbiJdfQ==
@@ -1,6 +0,0 @@
1
- export { EntryPermissionPipe } from './permission.pipe';
2
- export { EntryPermissionDirective } from './permission.directive';
3
- export { entryPermissionGuard } from './permission.guard';
4
- export { EntryPermissionService } from './permission.service';
5
- export { EntryPermissionModule } from './permission.module';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRW50cnlQZXJtaXNzaW9uUGlwZSB9IGZyb20gJy4vcGVybWlzc2lvbi5waXBlJztcbmV4cG9ydCB7IEVudHJ5UGVybWlzc2lvbkRpcmVjdGl2ZSB9IGZyb20gJy4vcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgZW50cnlQZXJtaXNzaW9uR3VhcmQgfSBmcm9tICcuL3Blcm1pc3Npb24uZ3VhcmQnO1xuZXhwb3J0IHsgRW50cnlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuZXhwb3J0IHsgRW50cnlQZXJtaXNzaW9uTW9kdWxlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLm1vZHVsZSc7XG4iXX0=
@@ -1,14 +0,0 @@
1
- /*
2
- * Public API Surface of entry-components
3
- */
4
- export * from '@enigmatry/entry-components/button';
5
- export * from '@enigmatry/entry-components/common';
6
- export * from '@enigmatry/entry-components/dialog';
7
- export * from '@enigmatry/entry-components/file-input';
8
- export * from '@enigmatry/entry-components/permissions';
9
- export * from '@enigmatry/entry-components/search-filter';
10
- export * from '@enigmatry/entry-components/spinner';
11
- export * from '@enigmatry/entry-components/validation';
12
- export * from '@enigmatry/entry-components/table';
13
- export { EntryComponentsModule } from './modules/entry-components.module';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOztHQUVHO0FBQ0gsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZW50cnktY29tcG9uZW50c1xuICovXG5leHBvcnQgKiBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvYnV0dG9uJztcbmV4cG9ydCAqIGZyb20gJ0BlbmlnbWF0cnkvZW50cnktY29tcG9uZW50cy9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL2RpYWxvZyc7XG5leHBvcnQgKiBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvZmlsZS1pbnB1dCc7XG5leHBvcnQgKiBmcm9tICdAZW5pZ21hdHJ5L2VudHJ5LWNvbXBvbmVudHMvcGVybWlzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL3NlYXJjaC1maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL3NwaW5uZXInO1xuZXhwb3J0ICogZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL3ZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnQGVuaWdtYXRyeS9lbnRyeS1jb21wb25lbnRzL3RhYmxlJztcblxuZXhwb3J0IHsgRW50cnlDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2VudHJ5LWNvbXBvbmVudHMubW9kdWxlJztcbiJdfQ==
@@ -1,56 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import { Subject, of } from 'rxjs';
4
- import { filter, tap, takeUntil, debounceTime } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@angular/material/input";
9
- import * as i4 from "@angular/material/form-field";
10
- import * as i5 from "@angular/material/core";
11
- import * as i6 from "@angular/material/autocomplete";
12
- import * as i7 from "@enigmatry/entry-components/validation";
13
- export class AutocompleteSearchFilterComponent {
14
- constructor(cdr) {
15
- this.cdr = cdr;
16
- this.searchField = new FormControl('');
17
- this.options$ = of([]);
18
- this.destroy$ = new Subject();
19
- this.displayFn = (_selectedValue) => this.searchFilter.formControl.value?.label;
20
- this.onSelected = (event) => {
21
- this.searchFilter.formControl.patchValue(event.option.value);
22
- this.searchField.patchValue(event.option.value.label, { emitEvent: false });
23
- };
24
- }
25
- ngAfterViewInit() {
26
- this.searchField
27
- .valueChanges
28
- .pipe(takeUntil(this.destroy$), tap(value => this.clearFilterIfLabelMismatch(value)), filter(value => value?.length >= this.searchFilter.minimumCharacters), debounceTime(this.searchFilter.debounceTime))
29
- .subscribe(searchValue => {
30
- // call search and retrieve options
31
- this.options$ = this.searchFilter.search(searchValue);
32
- // mark for check because of the debounce
33
- this.cdr.markForCheck();
34
- });
35
- }
36
- ngOnDestroy() {
37
- this.destroy$.next();
38
- this.destroy$.complete();
39
- }
40
- clearFilterIfLabelMismatch(value) {
41
- const label = this.searchFilter.formControl.value?.label;
42
- if (label && label !== value) {
43
- this.searchFilter.formControl.patchValue(undefined);
44
- this.searchField.patchValue(null, { emitEvent: false });
45
- }
46
- }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteSearchFilterComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AutocompleteSearchFilterComponent, selector: "entry-autocomplete-search-filter", inputs: { searchFilter: "searchFilter" }, ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{searchFilter.label}}</mat-label>\n <input type=\"text\" matInput [placeholder]=\"searchFilter.placeholder\"\n [formControl]=\"searchField\" [id]=\"searchFilter.key\" [matAutocomplete]=\"auto\">\n <mat-autocomplete [displayWith]=\"displayFn\" #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n <mat-option *ngFor=\"let option of options$ | async\" [value]=\"option\">\n {{option.label}}\n </mat-option>\n </mat-autocomplete>\n <mat-error entryDisplayControlValidation [control]=\"searchField\"></mat-error>\n</mat-form-field>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i7.EntryDisplayControlValidationDirective, selector: "[entryDisplayControlValidation]", inputs: ["control"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
- }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteSearchFilterComponent, decorators: [{
51
- type: Component,
52
- args: [{ selector: 'entry-autocomplete-search-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{searchFilter.label}}</mat-label>\n <input type=\"text\" matInput [placeholder]=\"searchFilter.placeholder\"\n [formControl]=\"searchField\" [id]=\"searchFilter.key\" [matAutocomplete]=\"auto\">\n <mat-autocomplete [displayWith]=\"displayFn\" #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n <mat-option *ngFor=\"let option of options$ | async\" [value]=\"option\">\n {{option.label}}\n </mat-option>\n </mat-autocomplete>\n <mat-error entryDisplayControlValidation [control]=\"searchField\"></mat-error>\n</mat-form-field>" }]
53
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { searchFilter: [{
54
- type: Input
55
- }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXNlYXJjaC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9lbnRyeS1jb21wb25lbnRzL3NlYXJjaC1maWx0ZXIvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZW50cnktY29tcG9uZW50cy9zZWFyY2gtZmlsdGVyL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQVV0RSxNQUFNLE9BQU8saUNBQWlDO0lBUzVDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTjFDLGdCQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEMsYUFBUSxHQUFrQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUEwQi9CLGNBQVMsR0FBRyxDQUFDLGNBQStCLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7UUFFcEcsZUFBVSxHQUFHLENBQUMsS0FBbUMsRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQztJQTdCNEMsQ0FBQztJQUUvQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVc7YUFDYixZQUFZO2FBQ1osSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsRUFDckUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQzdDO2FBQ0EsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZCLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELHlDQUF5QztZQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVNPLDBCQUEwQixDQUFDLEtBQWE7UUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUN6RCxJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDOytHQTlDVSxpQ0FBaUM7bUdBQWpDLGlDQUFpQyxrSENiOUMsMm9CQVVpQjs7NEZER0osaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGtDQUFrQyxtQkFFM0IsdUJBQXVCLENBQUMsTUFBTTtzRkFHdEMsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRhcCwgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZVNlYXJjaEZpbHRlciB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLXNlYXJjaC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VudHJ5LWF1dG9jb21wbGV0ZS1zZWFyY2gtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS1zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlU2VhcmNoRmlsdGVyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2VhcmNoRmlsdGVyOiBBdXRvY29tcGxldGVTZWFyY2hGaWx0ZXI8VD47XG5cbiAgc2VhcmNoRmllbGQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPFNlbGVjdE9wdGlvbjxUPltdPiA9IG9mKFtdKTtcblxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZFxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgdGFwKHZhbHVlID0+IHRoaXMuY2xlYXJGaWx0ZXJJZkxhYmVsTWlzbWF0Y2godmFsdWUpKSxcbiAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlPy5sZW5ndGggPj0gdGhpcy5zZWFyY2hGaWx0ZXIubWluaW11bUNoYXJhY3RlcnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hGaWx0ZXIuZGVib3VuY2VUaW1lKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzZWFyY2hWYWx1ZSA9PiB7XG4gICAgICAgIC8vIGNhbGwgc2VhcmNoIGFuZCByZXRyaWV2ZSBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLnNlYXJjaEZpbHRlci5zZWFyY2goc2VhcmNoVmFsdWUpO1xuICAgICAgICAvLyBtYXJrIGZvciBjaGVjayBiZWNhdXNlIG9mIHRoZSBkZWJvdW5jZVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZGlzcGxheUZuID0gKF9zZWxlY3RlZFZhbHVlOiBTZWxlY3RPcHRpb248VD4pOiBzdHJpbmcgPT4gdGhpcy5zZWFyY2hGaWx0ZXIuZm9ybUNvbnRyb2wudmFsdWU/LmxhYmVsO1xuXG4gIG9uU2VsZWN0ZWQgPSAoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpID0+IHtcbiAgICB0aGlzLnNlYXJjaEZpbHRlci5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKGV2ZW50Lm9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy5zZWFyY2hGaWVsZC5wYXRjaFZhbHVlKGV2ZW50Lm9wdGlvbi52YWx1ZS5sYWJlbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXJJZkxhYmVsTWlzbWF0Y2godmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5zZWFyY2hGaWx0ZXIuZm9ybUNvbnRyb2wudmFsdWU/LmxhYmVsO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuc2VhcmNoRmlsdGVyLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuc2VhcmNoRmllbGQucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgIDxtYXQtbGFiZWw+e3tzZWFyY2hGaWx0ZXIubGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCJzZWFyY2hGaWx0ZXIucGxhY2Vob2xkZXJcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRmllbGRcIiBbaWRdPVwic2VhcmNoRmlsdGVyLmtleVwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvblNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zJCB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxuICAgICAgICAgICAge3tvcHRpb24ubGFiZWx9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgIDxtYXQtZXJyb3IgZW50cnlEaXNwbGF5Q29udHJvbFZhbGlkYXRpb24gW2NvbnRyb2xdPVwic2VhcmNoRmllbGRcIj48L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+Il19