@rlucan/ui 18.2.3 → 19.0.2

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 (41) hide show
  1. package/fesm2022/rlucan-ui.mjs +144 -140
  2. package/fesm2022/rlucan-ui.mjs.map +1 -1
  3. package/package.json +11 -13
  4. package/esm2022/lib/action-button/action-button.component.mjs +0 -99
  5. package/esm2022/lib/action-icon/action-icon.component.mjs +0 -37
  6. package/esm2022/lib/auto-complete/auto-complete.component.mjs +0 -405
  7. package/esm2022/lib/autocomplete/autocomplete.component.mjs +0 -391
  8. package/esm2022/lib/avatar/avatar.component.mjs +0 -34
  9. package/esm2022/lib/button/button.component.mjs +0 -57
  10. package/esm2022/lib/checkbox/checkbox.component.mjs +0 -39
  11. package/esm2022/lib/checkbox-group/checkbox-group.component.mjs +0 -91
  12. package/esm2022/lib/currency/currency.component.mjs +0 -151
  13. package/esm2022/lib/date/date.component.mjs +0 -68
  14. package/esm2022/lib/dialog/dialog.component.mjs +0 -37
  15. package/esm2022/lib/directives/force-visibility/force-visibility.directive.mjs +0 -104
  16. package/esm2022/lib/editor/editor.component.mjs +0 -119
  17. package/esm2022/lib/elements/burger/burger.component.mjs +0 -21
  18. package/esm2022/lib/elements/expander/expander.component.mjs +0 -28
  19. package/esm2022/lib/elements/validation-message/validation-message.component.mjs +0 -47
  20. package/esm2022/lib/file/file.component.mjs +0 -177
  21. package/esm2022/lib/file-uploader/ui-file-uploader.component.mjs +0 -424
  22. package/esm2022/lib/input/input.component.mjs +0 -265
  23. package/esm2022/lib/input-autocomplete/input-autocomplete.component.mjs +0 -277
  24. package/esm2022/lib/layouts/base/ui-base-layout.component.mjs +0 -22
  25. package/esm2022/lib/layouts/base/ui-base.component.mjs +0 -74
  26. package/esm2022/lib/layouts/simple/ui-simple-layout.component.mjs +0 -18
  27. package/esm2022/lib/layouts/simple/ui-simple.component.mjs +0 -166
  28. package/esm2022/lib/radio/radio.component.mjs +0 -21
  29. package/esm2022/lib/radio-group/radio-group.component.mjs +0 -58
  30. package/esm2022/lib/select/select.component.mjs +0 -126
  31. package/esm2022/lib/services/message-box.service.mjs +0 -149
  32. package/esm2022/lib/services/toast.service.mjs +0 -23
  33. package/esm2022/lib/services/ui-file.service.mjs +0 -72
  34. package/esm2022/lib/services/ui-translate.service.mjs +0 -32
  35. package/esm2022/lib/submit-button/submit-button.component.mjs +0 -72
  36. package/esm2022/lib/table/table.component.mjs +0 -97
  37. package/esm2022/lib/text-area/text-area.component.mjs +0 -46
  38. package/esm2022/lib/ui.model.mjs +0 -2
  39. package/esm2022/lib/ui.module.mjs +0 -274
  40. package/esm2022/public-api.mjs +0 -36
  41. package/esm2022/rlucan-ui.mjs +0 -5
@@ -1,391 +0,0 @@
1
- import { Component, Host, Input, Optional, SkipSelf, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';
3
- import { debounceTime } from 'rxjs/operators';
4
- import { UiBaseComponent } from '../layouts/base/ui-base.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/material/icon";
9
- import * as i4 from "@angular/material/checkbox";
10
- import * as i5 from "@angular/cdk/overlay";
11
- import * as i6 from "../button/button.component";
12
- import * as i7 from "../input/input.component";
13
- import * as i8 from "../directives/force-visibility/force-visibility.directive";
14
- export class AutocompleteComponent extends UiBaseComponent {
15
- constructor(controlContainer,
16
- // @Optional() @Self() public ngControl: NgControl,
17
- cdr) {
18
- super();
19
- this.controlContainer = controlContainer;
20
- this.cdr = cdr;
21
- this.SHOWN_USERS_DELTA = 10;
22
- this.multiple = true;
23
- this.allowNew = false;
24
- this.displayAttribute = 'name';
25
- this.idAttribute = 'id';
26
- this.filteredOptions = [];
27
- this.filteredMaxItemsShown = this.SHOWN_USERS_DELTA;
28
- // skipBlur = false;
29
- // typingStarted = false;
30
- this.messageShown = false;
31
- this.alreadyAdded = false;
32
- this.optionsVisible = false;
33
- this.inputFocused = false;
34
- this.inputControl = new UntypedFormControl('');
35
- this.checkboxSelection = new Set();
36
- this.optionDisabled = () => false;
37
- this.optionFormatter = (o) => o[this.displayAttribute];
38
- }
39
- buildSearchableOptions() {
40
- return this.options.map(o => ({
41
- ...o,
42
- unselectable: this.optionDisabled(o),
43
- searchString: `${this.optionFormatter(o)}`.toLowerCase()
44
- }));
45
- }
46
- filterOptions(text) {
47
- this.filteredMaxItemsShown = this.SHOWN_USERS_DELTA;
48
- return this.searchableOptions.filter(u => u.searchString.includes(text));
49
- }
50
- ngOnInit() {
51
- // console.log('ngoninit');
52
- super.ngOnInit();
53
- // if (this.formControlName && this.controlContainer.control) {
54
- // this.control = this.controlContainer.control.get(this.formControlName) as FormControl;
55
- // }
56
- //
57
- // this.user = this.control.value;
58
- // this.value = this.control.value;
59
- this.searchableOptions = this.buildSearchableOptions();
60
- // if (this.control.disabled) {
61
- // this.inputControl.disable();
62
- // }
63
- // this.control.statusChanges.subscribe(v => {
64
- // if (v === 'DISABLED') {
65
- // this.inputControl.disable();
66
- // }
67
- // if (v === 'VALID') {
68
- // this.inputControl.enable();
69
- // }
70
- // });
71
- this.inputControl.valueChanges.pipe(debounceTime(200)).subscribe(v => {
72
- const lcv = v.toLowerCase();
73
- this.filteredOptions = this.filterOptions(lcv);
74
- if (this.filteredOptions.length > 0) {
75
- this.focusedOption = this.filteredOptions[0];
76
- }
77
- else {
78
- this.focusedOption = undefined;
79
- }
80
- if (v === '') {
81
- this.focusedOption = undefined;
82
- this.selectedOption = undefined;
83
- }
84
- // if (v !== '') {
85
- // if (this.newUsername === v) {
86
- // this.selectedUser = {id: null, fullName: v};
87
- // this.initialUser = this.selectedUser;
88
- // } else {
89
- // if (this.filteredGroupsAndUsers.length > 0) {
90
- // this.focusedGroup = this.filteredGroupsAndUsers[0];
91
- // this.focusedUser = this.focusedGroup.filteredUsers[0];
92
- // } else {
93
- // this.focusedGroup = null;
94
- // this.focusedUser = null;
95
- // }
96
- // if ((this.focusedUser && !this.focusedUser.unselectable) || this.focusedUser === this.initialUser) {
97
- // this.selectedUser = this.focusedUser;
98
- // } else {
99
- // this.selectedUser = null;
100
- // }
101
- // }
102
- // } else {
103
- // this.selectedUser = null;
104
- // this.focusedUser = null;
105
- // this.focusedGroup = null;
106
- // }
107
- // this.onChange(v);
108
- });
109
- // if (this.user !== null) {
110
- // let selectedUser = null;
111
- // this.groupsAndUsers.find(g => g.users.find(u => {
112
- // if (u.id === this.user.id) {
113
- // selectedUser = u;
114
- // return true;
115
- // } else {
116
- // return false;
117
- // }
118
- // }));
119
- //
120
- // if (selectedUser) {
121
- // this.inputControl.setValue(selectedUser.fullName);
122
- // this.selectedUser = selectedUser;
123
- // } else {
124
- // this.newUsername = this.user.fullName;
125
- // this.inputControl.setValue(this.user.fullName);
126
- // this.selectedUser = { id: null, fullName: this.newUsername };
127
- // }
128
- // } else {
129
- // this.selectedUser = null;
130
- // this.inputControl.setValue('');
131
- // }
132
- // this.initialUser = this.selectedUser;
133
- // }
134
- }
135
- inputFocusChanged(focused) {
136
- if (focused) {
137
- this.optionsVisible = true;
138
- }
139
- }
140
- // setTimeout(() => {
141
- // if (!focused && this.skipBlur) {
142
- // this.skipBlur = false;
143
- // return;
144
- // }
145
- // if (!this.typingStarted && focused) {
146
- // this.inputControl.setValue(this.inputControl.value);
147
- // this.typingStarted = true;
148
- // }
149
- // if (!this.messageShown) {
150
- // this.inputFocused = focused;
151
- // if (!focused) {
152
- // this.emitSelection('focus lost');
153
- // }
154
- // }
155
- // }, 250);
156
- // }
157
- get hasCheckboxSelected() {
158
- return this.checkboxSelection.size > 0;
159
- }
160
- optionChecked(u) {
161
- return this.checkboxSelection.has(u[this.idAttribute]);
162
- }
163
- select(u) {
164
- if (this.hasCheckboxSelected || u.unselectable) {
165
- return;
166
- }
167
- if (!u.unselectable) {
168
- this.selectedOption = u;
169
- this.initialOption = u;
170
- this.toggleDropdown();
171
- }
172
- }
173
- toggleOptionCheckboxed(u) {
174
- if (!u.unselectable) {
175
- this.checkboxSelection.has(u[this.idAttribute]) ?
176
- this.checkboxSelection.delete(u[this.idAttribute]) : this.checkboxSelection.add(u[this.idAttribute]);
177
- }
178
- this.input?.focus();
179
- }
180
- // get optionsVisible(): boolean {
181
- // return this.inputFocused && this.typingStarted;
182
- // }
183
- keyPressed(keyEvent) {
184
- this.lastEmittedId = -1;
185
- this.optionsVisible = true;
186
- // this.typingStarted = keyEvent.key !== 'Tab' && keyEvent.key !== 'Escape';
187
- if (keyEvent.key === 'Escape') {
188
- keyEvent.stopPropagation();
189
- keyEvent.preventDefault();
190
- this.optionsVisible = false;
191
- return;
192
- }
193
- if (keyEvent.key === 'Enter' && this.hasCheckboxSelected) {
194
- if (this.focusedOption && !this.focusedOption.unselectable) {
195
- this.toggleOptionCheckboxed(this.focusedOption);
196
- }
197
- keyEvent.stopPropagation();
198
- keyEvent.preventDefault();
199
- return;
200
- }
201
- // if (keyEvent.key === 'Enter' && this.filteredGroupsAndUsers.length === 0 && this.focusedUser === null && !this.alreadyAdded) {
202
- // this.newUser();
203
- // keyEvent.stopPropagation();
204
- // keyEvent.preventDefault();
205
- // return;
206
- // }
207
- if (keyEvent.key === 'Enter') {
208
- this.selectedOption = this.focusedOption;
209
- keyEvent.stopPropagation();
210
- keyEvent.preventDefault();
211
- this.toggleDropdown();
212
- return;
213
- }
214
- if ((keyEvent.key === 'ArrowDown' || keyEvent.key === 'ArrowUp') && !this.focusedOption) {
215
- if (this.filteredOptions.length > 0) {
216
- this.focusedOption = this.filteredOptions[0];
217
- // if (!this.focusedUser.unselectable || this.focusedUser === this.initialUser) {
218
- // this.selectedUser = this.focusedUser;
219
- // }
220
- this.selectedOption = this.focusedOption;
221
- return;
222
- }
223
- }
224
- if (keyEvent.key === 'ArrowDown' && this.focusedOption) {
225
- const idx = this.filteredOptions.indexOf(this.focusedOption);
226
- if (idx === this.filteredMaxItemsShown - 1) {
227
- this.filteredMaxItemsShown += this.SHOWN_USERS_DELTA;
228
- }
229
- if (idx < this.filteredOptions.length - 1) {
230
- this.focusedOption = this.filteredOptions[idx + 1];
231
- this.selectedOption = this.focusedOption;
232
- }
233
- }
234
- if (keyEvent.key === 'ArrowUp' && this.focusedOption) {
235
- const idx = this.filteredOptions.indexOf(this.focusedOption);
236
- if (idx > 0) {
237
- this.focusedOption = this.filteredOptions[idx - 1];
238
- this.selectedOption = this.focusedOption;
239
- }
240
- }
241
- this.cdr.detectChanges();
242
- }
243
- toggleDropdown() {
244
- this.optionsVisible = false;
245
- this.emitSelection('toggle');
246
- }
247
- emitSelection(src) {
248
- this.initialOption = this.selectedOption;
249
- if (this.selectedOption) {
250
- const checkId = this.selectedOption.id === null ? 0 : this.selectedOption.id;
251
- if (this.lastEmittedId !== checkId) {
252
- this.lastEmittedId = checkId;
253
- this.onChange(this.options.find(o => o[this.idAttribute] === this.selectedOption[this.idAttribute]));
254
- this.inputControl.setValue(this.selectedOption[this.displayAttribute]);
255
- }
256
- }
257
- else {
258
- // this.control.setValue(null);
259
- this.onChange(null);
260
- this.inputControl.setValue('', { emitEvent: false });
261
- }
262
- // if (this.selectedOption) {
263
- // const checkId = this.selectedUser.id === null ? 0 : this.selectedUser.id;
264
- // if (this.lastEmittedId !== checkId) {
265
- // this.inputControl.setValue(this.selectedUser.fullName, {emitEvent: false});
266
- // if (this.selectedUser.id) {
267
- // this.groupsAndUsers.find(g => g.users.find(u => {
268
- // if (u.id === this.selectedUser.id) {
269
- // this.control.setValue(u);
270
- // return true;
271
- // } else {
272
- // return false;
273
- // }
274
- // }));
275
- // } else {
276
- // this.control.setValue(this.selectedUser);
277
- // }
278
- // this.lastEmittedId = checkId;
279
- // }
280
- // } else {
281
- // if (this.lastEmittedId !== null || this.lastEmittedId === -1/* || this.selectedUser?.unselectable*/) {
282
- // this.control?.setValue(null);
283
- // this.inputControl.setValue('', {emitEvent: false});
284
- // this.lastEmittedId = null;
285
- // }
286
- // }
287
- // this.typingStarted = false;
288
- }
289
- cancelCheckboxSelection() {
290
- this.checkboxSelection.clear();
291
- // this.skipBlur = true;
292
- // this.input?.focus();
293
- }
294
- useCheckboxSelection() {
295
- // this.newUsername = '';
296
- // const users = [];
297
- // this.groupsAndUsers.forEach(g => g.users.forEach(u => {
298
- // if (!users.includes(u) && this.checkboxSelection.has(u.id)) {
299
- // users.push(u);
300
- // }
301
- // }));
302
- const outputOptions = this.options.filter(o => this.checkboxSelection.has(o[this.idAttribute]) && !this.optionDisabled(o));
303
- if (outputOptions.length > 0) {
304
- this.selectedOption = outputOptions[0];
305
- this.inputControl.setValue(this.selectedOption[this.displayAttribute], { emitEvent: false });
306
- this.onChange(outputOptions);
307
- this.toggleDropdown();
308
- // this.control?.setValue(outputOptions);
309
- // this.typingStarted = false;
310
- // this.skipBlur = true;
311
- }
312
- this.checkboxSelection.clear();
313
- }
314
- newOption() {
315
- }
316
- loadMore(visible) {
317
- if (visible) {
318
- this.filteredMaxItemsShown += this.SHOWN_USERS_DELTA;
319
- }
320
- }
321
- focus() {
322
- this.input?.focus();
323
- }
324
- registerOnChange(fn) {
325
- this.onChange = fn;
326
- }
327
- registerOnTouched(fn) {
328
- }
329
- setDisabledState(isDisabled) {
330
- isDisabled ? this.inputControl.disable() : this.inputControl.enable();
331
- }
332
- writeValue(obj) {
333
- if (obj) {
334
- if (obj.id) {
335
- this.filteredOptions = this.searchableOptions.filter(so => so.id === obj.id);
336
- }
337
- else {
338
- this.filteredOptions = this.filterOptions(obj[this.displayAttribute].toLowerCase());
339
- }
340
- if (this.filteredOptions.length === 1) {
341
- this.selectedOption = this.filteredOptions[0];
342
- this.focusedOption = this.filteredOptions[0];
343
- }
344
- this.inputControl.setValue(obj[this.displayAttribute]);
345
- }
346
- else {
347
- this.filteredOptions = this.filterOptions('');
348
- }
349
- }
350
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
351
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: AutocompleteComponent, selector: "ui-autocomplete", inputs: { options: "options", multiple: "multiple", allowNew: "allowNew", displayAttribute: "displayAttribute", idAttribute: "idAttribute", optionDisabled: "optionDisabled", optionFormatter: "optionFormatter" }, providers: [{
352
- provide: NG_VALUE_ACCESSOR,
353
- multi: true,
354
- useExisting: AutocompleteComponent
355
- }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "optionsTrigger", first: true, predicate: ["trigger"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" #wrapper>\r\n <div *ngIf=\"optionsVisible\" (click)=\"toggleDropdown()\" class=\"overlay\"></div>\r\n <ui-input [formControl]=\"inputControl\" #input #trigger=\"cdkOverlayOrigin\" cdkOverlayOrigin (focusChanged)=\"inputFocusChanged($event)\" (keyPressed)=\"keyPressed($event)\" [placeholder]=\"placeholder\" [useInputMessages]=\"'never'\">\r\n <div slot=\"prefix\"><ng-content select=\"[slot=acprefix]\"></ng-content></div>\r\n </ui-input>\r\n\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"optionsVisible\">\r\n <div class=\"options-box\" style=\"display: flex; flex-direction: column\" [ngStyle]=\"{width: wrapper.offsetWidth + 'px'}\">\r\n <div class=\"options\" #options>\r\n\r\n <ng-container *ngFor=\"let option of filteredOptions; index as i\">\r\n <div *ngIf=\"i < filteredMaxItemsShown\" class=\"option-container\" [ngClass]=\"{selected: focusedOption === option}\">\r\n <mat-checkbox [checked]=\"optionChecked(option) || option.unselectable\" [disabled]=\"option.unselectable\" (change)=\"toggleOptionCheckboxed(option)\">\r\n <div class=\"option-container-inner\" (click)=\"select(option)\">\r\n <div class=\"option-option\" uiForceVisibility [visibilityWithin]=\"options\" [visibilityPadding]=\"4\" *ngIf=\"focusedOption === option\" [ngClass]=\"{unselectable: option.unselectable}\">\r\n {{optionFormatter(option)}}\r\n </div>\r\n <div class=\"option-option\" *ngIf=\"focusedOption !== option\" [ngClass]=\"{unselectable: option.unselectable}\">\r\n {{optionFormatter(option)}}\r\n </div>\r\n <mat-icon *ngIf=\"!hasCheckboxSelected && !option.unselectable\">north_west</mat-icon>\r\n </div>\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"filteredOptions.length >= filteredMaxItemsShown\" class=\"option-container\" uiForceVisibility [visibilityWithin]=\"options\" [visibilityEmitChange]=\"true\" (visibilityChanged)=\"loadMore($event)\">\r\n &nbsp;\r\n </div>\r\n\r\n\r\n <div *ngIf=\"filteredOptions.length === 0 && !focusedOption\" class=\"new-user\">\r\n <ng-container *ngIf=\"alreadyAdded\">\r\n <div style=\"text-align: center\">U\u017Eivatel {{inputControl.value}} u\u017E je mezi dlu\u017En\u00EDky</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!alreadyAdded\">\r\n <div style=\"text-align: center; padding: 1em 0\">U\u017Eivatele <strong>{{inputControl.value}}</strong> nezn\u00E1me</div>\r\n <ui-button *ngIf=\"allowNew\" style=\"margin-top: 6px;\" [size]=\"'small'\" [label]=\"'P\u0159idat jej?'\" (click)=\"newOption()\"></ui-button>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"filteredOptions.length === 0 && focusedOption\" class=\"new-user\">\r\n <div style=\"text-align: center\">Nezn\u00E1m\u00FD u\u017Eivatel {{inputControl.value}}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"hasCheckboxSelected && filteredOptions.length > 0\" class=\"checkbox-buttons\">\r\n <ui-button [size]=\"'small'\" [kind]=\"'basic'\" [label]=\"'Zru\u0161it v\u00FDb\u011Br'\" (click)=\"cancelCheckboxSelection()\"></ui-button>\r\n <ui-button [size]=\"'small'\" [label]=\"'Pou\u017E\u00EDt v\u00FDb\u011Br (' + checkboxSelection.size + ')'\" (click)=\"useCheckboxSelection()\"></ui-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n", styles: [":host .wrapper{position:relative;outline:none;display:flex}:host .overlay{position:fixed;inset:0}.options-box{max-height:248px;min-width:310px;box-shadow:0 2px 4px -1px #07254833,0 4px 5px #07254824,0 1px 10px #0725481f}.options-box .checkbox-buttons{display:flex;padding:8px 4px 4px;justify-content:space-between}.options-box .options{padding:4px;overflow:auto;scroll-behavior:smooth;display:flex;flex-direction:column}.options-box .options .option-container{padding:0 0 0 12px;display:flex;align-items:center}.options-box .options .option-container:hover{cursor:pointer}.options-box .options .option-container mat-checkbox{width:100%}.options-box .options .option-container mat-checkbox ::ng-deep .mdc-form-field{width:100%}.options-box .options .option-container mat-checkbox ::ng-deep .mdc-form-field label{display:flex;width:100%}.options-box .options .option-container-inner{flex:1 1 100%;display:flex;align-items:center}.options-box .options .option-container-inner .option-option{flex:1 1 100%;padding:10px 0 10px 8px}.options-box .options .option-container-inner mat-icon{display:none;font-size:20px;height:20px;margin-right:8px}.options-box .options .option-container-inner:hover mat-icon{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i6.ButtonComponent, selector: "ui-button", inputs: ["type", "matIconPrefix", "label", "disabled", "busy", "kind", "color", "size", "formInvalid"] }, { kind: "component", type: i7.InputComponent, selector: "ui-input", inputs: ["prefixIcon", "suffixIcon", "type", "clearButton", "activeIcons", "forceHasPrefix", "forceHasSuffix", "textAlign"], outputs: ["focusChanged", "keyPressed"] }, { kind: "directive", type: i8.ForceVisibilityDirective, selector: "[uiForceVisibility]", inputs: ["visibilityWithin", "visibilityPadding", "visibilityOnRequestOnly", "visibilityEmitChange", "visibilityFromTop", "visibilityCheckEnabled"], outputs: ["visibilityChanged"], exportAs: ["ForceVisibilityDirective"] }] }); }
356
- }
357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AutocompleteComponent, decorators: [{
358
- type: Component,
359
- args: [{ selector: 'ui-autocomplete', providers: [{
360
- provide: NG_VALUE_ACCESSOR,
361
- multi: true,
362
- useExisting: AutocompleteComponent
363
- }], template: "<div class=\"wrapper\" #wrapper>\r\n <div *ngIf=\"optionsVisible\" (click)=\"toggleDropdown()\" class=\"overlay\"></div>\r\n <ui-input [formControl]=\"inputControl\" #input #trigger=\"cdkOverlayOrigin\" cdkOverlayOrigin (focusChanged)=\"inputFocusChanged($event)\" (keyPressed)=\"keyPressed($event)\" [placeholder]=\"placeholder\" [useInputMessages]=\"'never'\">\r\n <div slot=\"prefix\"><ng-content select=\"[slot=acprefix]\"></ng-content></div>\r\n </ui-input>\r\n\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"optionsVisible\">\r\n <div class=\"options-box\" style=\"display: flex; flex-direction: column\" [ngStyle]=\"{width: wrapper.offsetWidth + 'px'}\">\r\n <div class=\"options\" #options>\r\n\r\n <ng-container *ngFor=\"let option of filteredOptions; index as i\">\r\n <div *ngIf=\"i < filteredMaxItemsShown\" class=\"option-container\" [ngClass]=\"{selected: focusedOption === option}\">\r\n <mat-checkbox [checked]=\"optionChecked(option) || option.unselectable\" [disabled]=\"option.unselectable\" (change)=\"toggleOptionCheckboxed(option)\">\r\n <div class=\"option-container-inner\" (click)=\"select(option)\">\r\n <div class=\"option-option\" uiForceVisibility [visibilityWithin]=\"options\" [visibilityPadding]=\"4\" *ngIf=\"focusedOption === option\" [ngClass]=\"{unselectable: option.unselectable}\">\r\n {{optionFormatter(option)}}\r\n </div>\r\n <div class=\"option-option\" *ngIf=\"focusedOption !== option\" [ngClass]=\"{unselectable: option.unselectable}\">\r\n {{optionFormatter(option)}}\r\n </div>\r\n <mat-icon *ngIf=\"!hasCheckboxSelected && !option.unselectable\">north_west</mat-icon>\r\n </div>\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"filteredOptions.length >= filteredMaxItemsShown\" class=\"option-container\" uiForceVisibility [visibilityWithin]=\"options\" [visibilityEmitChange]=\"true\" (visibilityChanged)=\"loadMore($event)\">\r\n &nbsp;\r\n </div>\r\n\r\n\r\n <div *ngIf=\"filteredOptions.length === 0 && !focusedOption\" class=\"new-user\">\r\n <ng-container *ngIf=\"alreadyAdded\">\r\n <div style=\"text-align: center\">U\u017Eivatel {{inputControl.value}} u\u017E je mezi dlu\u017En\u00EDky</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!alreadyAdded\">\r\n <div style=\"text-align: center; padding: 1em 0\">U\u017Eivatele <strong>{{inputControl.value}}</strong> nezn\u00E1me</div>\r\n <ui-button *ngIf=\"allowNew\" style=\"margin-top: 6px;\" [size]=\"'small'\" [label]=\"'P\u0159idat jej?'\" (click)=\"newOption()\"></ui-button>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"filteredOptions.length === 0 && focusedOption\" class=\"new-user\">\r\n <div style=\"text-align: center\">Nezn\u00E1m\u00FD u\u017Eivatel {{inputControl.value}}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"hasCheckboxSelected && filteredOptions.length > 0\" class=\"checkbox-buttons\">\r\n <ui-button [size]=\"'small'\" [kind]=\"'basic'\" [label]=\"'Zru\u0161it v\u00FDb\u011Br'\" (click)=\"cancelCheckboxSelection()\"></ui-button>\r\n <ui-button [size]=\"'small'\" [label]=\"'Pou\u017E\u00EDt v\u00FDb\u011Br (' + checkboxSelection.size + ')'\" (click)=\"useCheckboxSelection()\"></ui-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n", styles: [":host .wrapper{position:relative;outline:none;display:flex}:host .overlay{position:fixed;inset:0}.options-box{max-height:248px;min-width:310px;box-shadow:0 2px 4px -1px #07254833,0 4px 5px #07254824,0 1px 10px #0725481f}.options-box .checkbox-buttons{display:flex;padding:8px 4px 4px;justify-content:space-between}.options-box .options{padding:4px;overflow:auto;scroll-behavior:smooth;display:flex;flex-direction:column}.options-box .options .option-container{padding:0 0 0 12px;display:flex;align-items:center}.options-box .options .option-container:hover{cursor:pointer}.options-box .options .option-container mat-checkbox{width:100%}.options-box .options .option-container mat-checkbox ::ng-deep .mdc-form-field{width:100%}.options-box .options .option-container mat-checkbox ::ng-deep .mdc-form-field label{display:flex;width:100%}.options-box .options .option-container-inner{flex:1 1 100%;display:flex;align-items:center}.options-box .options .option-container-inner .option-option{flex:1 1 100%;padding:10px 0 10px 8px}.options-box .options .option-container-inner mat-icon{display:none;font-size:20px;height:20px;margin-right:8px}.options-box .options .option-container-inner:hover mat-icon{display:block}\n"] }]
364
- }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
365
- type: Optional
366
- }, {
367
- type: Host
368
- }, {
369
- type: SkipSelf
370
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { options: [{
371
- type: Input
372
- }], multiple: [{
373
- type: Input
374
- }], allowNew: [{
375
- type: Input
376
- }], displayAttribute: [{
377
- type: Input
378
- }], idAttribute: [{
379
- type: Input
380
- }], input: [{
381
- type: ViewChild,
382
- args: ['input']
383
- }], optionsTrigger: [{
384
- type: ViewChild,
385
- args: ['trigger']
386
- }], optionDisabled: [{
387
- type: Input
388
- }], optionFormatter: [{
389
- type: Input
390
- }] } });
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQTBDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQWNwRSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUl4RCxZQUFzRCxnQkFBa0M7SUFDNUUsbURBQW1EO0lBQzNDLEdBQXNCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBSDRDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFcEUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFKbEMsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBU3RCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixxQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFJNUIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRS9DLG9CQUFvQjtRQUNwQix5QkFBeUI7UUFDekIsaUJBQVksR0FBRyxL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ImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3QsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBTa2lwU2VsZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFVpQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dHMvYmFzZS91aS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktYXV0b2NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IEF1dG9jb21wbGV0ZUNvbXBvbmVudFxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVDb21wb25lbnQgZXh0ZW5kcyBVaUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgcHJpdmF0ZSBTSE9XTl9VU0VSU19ERUxUQSA9IDEwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgIC8vIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBhbnlbXTtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgYWxsb3dOZXcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlID0gJ25hbWUnO1xyXG4gIEBJbnB1dCgpIGlkQXR0cmlidXRlID0gJ2lkJztcclxuXHJcbiAgLy8gdmFsdWU/OiBhbnk7XHJcbiAgc2VhcmNoYWJsZU9wdGlvbnM/OiBhbnlbXTtcclxuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgZmlsdGVyZWRNYXhJdGVtc1Nob3duID0gdGhpcy5TSE9XTl9VU0VSU19ERUxUQTtcclxuXHJcbiAgLy8gc2tpcEJsdXIgPSBmYWxzZTtcclxuICAvLyB0eXBpbmdTdGFydGVkID0gZmFsc2U7XHJcbiAgbWVzc2FnZVNob3duID0gZmFsc2U7XHJcbiAgaW5pdGlhbE9wdGlvbj86IGFueTtcclxuICBzZWxlY3RlZE9wdGlvbj86IGFueTtcclxuICBsYXN0RW1pdHRlZElkPzogYW55O1xyXG4gIGZvY3VzZWRPcHRpb24/OiBhbnk7XHJcbiAgYWxyZWFkeUFkZGVkID0gZmFsc2U7XHJcbiAgb3B0aW9uc1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dD86IElucHV0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInKSBvcHRpb25zVHJpZ2dlcjogQ2RrT3ZlcmxheU9yaWdpbjtcclxuXHJcbiAgaW5wdXRGb2N1c2VkID0gZmFsc2U7XHJcbiAgaW5wdXRDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyk7XHJcbiAgY2hlY2tib3hTZWxlY3Rpb246IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XHJcblxyXG4gIG9uQ2hhbmdlOiAodmFsdWUpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIG9wdGlvbkRpc2FibGVkOiAoYW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XHJcbiAgQElucHV0KCkgb3B0aW9uRm9ybWF0dGVyOiAoYW55KSA9PiBzdHJpbmcgPSAobykgPT4gb1t0aGlzLmRpc3BsYXlBdHRyaWJ1dGVdO1xyXG5cclxuICBwcm90ZWN0ZWQgYnVpbGRTZWFyY2hhYmxlT3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWFwKG8gPT4gKHtcclxuICAgICAgLi4ubyxcclxuICAgICAgdW5zZWxlY3RhYmxlOiB0aGlzLm9wdGlvbkRpc2FibGVkKG8pLFxyXG4gICAgICBzZWFyY2hTdHJpbmc6IGAke3RoaXMub3B0aW9uRm9ybWF0dGVyKG8pfWAudG9Mb3dlckNhc2UoKVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlck9wdGlvbnModGV4dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkTWF4SXRlbXNTaG93biA9IHRoaXMuU0hPV05fVVNFUlNfREVMVEE7XHJcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hhYmxlT3B0aW9ucy5maWx0ZXIodSA9PiB1LnNlYXJjaFN0cmluZy5pbmNsdWRlcyh0ZXh0KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZygnbmdvbmluaXQnKTtcclxuXHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCkge1xyXG4gICAgLy8gICB0aGlzLmNvbnRyb2wgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIHRoaXMudXNlciA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICAvLyB0aGlzLnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoYWJsZU9wdGlvbnMgPSB0aGlzLmJ1aWxkU2VhcmNoYWJsZU9wdGlvbnMoKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XHJcbiAgICAvLyAgIHRoaXMuaW5wdXRDb250cm9sLmRpc2FibGUoKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyB0aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAvLyAgIGlmICh2ID09PSAnRElTQUJMRUQnKSB7XHJcbiAgICAvLyAgICAgdGhpcy5pbnB1dENvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGlmICh2ID09PSAnVkFMSUQnKSB7XHJcbiAgICAvLyAgICAgdGhpcy5pbnB1dENvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgY29uc3QgbGN2ID0gdi50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlck9wdGlvbnMobGN2KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uID0gdGhpcy5maWx0ZXJlZE9wdGlvbnNbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodiA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgKHYgIT09ICcnKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMubmV3VXNlcm5hbWUgPT09IHYpIHtcclxuICAgICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRVc2VyID0ge2lkOiBudWxsLCBmdWxsTmFtZTogdn07XHJcbiAgICAgIC8vICAgICB0aGlzLmluaXRpYWxVc2VyID0gdGhpcy5zZWxlY3RlZFVzZXI7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGlmICh0aGlzLmZpbHRlcmVkR3JvdXBzQW5kVXNlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgICB0aGlzLmZvY3VzZWRHcm91cCA9IHRoaXMuZmlsdGVyZWRHcm91cHNBbmRVc2Vyc1swXTtcclxuICAgICAgLy8gICAgICAgdGhpcy5mb2N1c2VkVXNlciA9IHRoaXMuZm9jdXNlZEdyb3VwLmZpbHRlcmVkVXNlcnNbMF07XHJcbiAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgICB0aGlzLmZvY3VzZWRHcm91cCA9IG51bGw7XHJcbiAgICAgIC8vICAgICAgIHRoaXMuZm9jdXNlZFVzZXIgPSBudWxsO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgaWYgKCh0aGlzLmZvY3VzZWRVc2VyICYmICF0aGlzLmZvY3VzZWRVc2VyLnVuc2VsZWN0YWJsZSkgfHwgdGhpcy5mb2N1c2VkVXNlciA9PT0gdGhpcy5pbml0aWFsVXNlcikge1xyXG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkVXNlciA9IHRoaXMuZm9jdXNlZFVzZXI7XHJcbiAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkVXNlciA9IG51bGw7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIHRoaXMuc2VsZWN0ZWRVc2VyID0gbnVsbDtcclxuICAgICAgLy8gICB0aGlzLmZvY3VzZWRVc2VyID0gbnVsbDtcclxuICAgICAgLy8gICB0aGlzLmZvY3VzZWRHcm91cCA9IG51bGw7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIC8vIHRoaXMub25DaGFuZ2Uodik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAgIGlmICh0aGlzLnVzZXIgIT09IG51bGwpIHtcclxuICAgIC8vICAgICBsZXQgc2VsZWN0ZWRVc2VyID0gbnVsbDtcclxuICAgIC8vICAgICB0aGlzLmdyb3Vwc0FuZFVzZXJzLmZpbmQoZyA9PiBnLnVzZXJzLmZpbmQodSA9PiB7XHJcbiAgICAvLyAgICAgICBpZiAodS5pZCA9PT0gdGhpcy51c2VyLmlkKSB7XHJcbiAgICAvLyAgICAgICAgIHNlbGVjdGVkVXNlciA9IHU7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgLy8gICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH0pKTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgaWYgKHNlbGVjdGVkVXNlcikge1xyXG4gICAgLy8gICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoc2VsZWN0ZWRVc2VyLmZ1bGxOYW1lKTtcclxuICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyID0gc2VsZWN0ZWRVc2VyO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICB0aGlzLm5ld1VzZXJuYW1lID0gdGhpcy51c2VyLmZ1bGxOYW1lO1xyXG4gICAgLy8gICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyLmZ1bGxOYW1lKTtcclxuICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyID0geyBpZDogbnVsbCwgZnVsbE5hbWU6IHRoaXMubmV3VXNlcm5hbWUgfTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgdGhpcy5zZWxlY3RlZFVzZXIgPSBudWxsO1xyXG4gICAgLy8gICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICB0aGlzLmluaXRpYWxVc2VyID0gdGhpcy5zZWxlY3RlZFVzZXI7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBpbnB1dEZvY3VzQ2hhbmdlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAvLyAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuc2tpcEJsdXIpIHtcclxuICAvLyAgICAgICB0aGlzLnNraXBCbHVyID0gZmFsc2U7XHJcbiAgLy8gICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmICghdGhpcy50eXBpbmdTdGFydGVkICYmIGZvY3VzZWQpIHtcclxuICAvLyAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh0aGlzLmlucHV0Q29udHJvbC52YWx1ZSk7XHJcbiAgLy8gICAgICAgdGhpcy50eXBpbmdTdGFydGVkID0gdHJ1ZTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAoIXRoaXMubWVzc2FnZVNob3duKSB7XHJcbiAgLy8gICAgICAgdGhpcy5pbnB1dEZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIC8vICAgICAgIGlmICghZm9jdXNlZCkge1xyXG4gIC8vICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uKCdmb2N1cyBsb3N0Jyk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9LCAyNTApO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IGhhc0NoZWNrYm94U2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja2JveFNlbGVjdGlvbi5zaXplID4gMDtcclxuICB9XHJcblxyXG4gIG9wdGlvbkNoZWNrZWQodTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja2JveFNlbGVjdGlvbi5oYXModVt0aGlzLmlkQXR0cmlidXRlXSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3QodTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNDaGVja2JveFNlbGVjdGVkIHx8IHUudW5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdS51bnNlbGVjdGFibGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHU7XHJcbiAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbiA9IHU7XHJcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZU9wdGlvbkNoZWNrYm94ZWQodTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXUudW5zZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3Rpb24uaGFzKHVbdGhpcy5pZEF0dHJpYnV0ZV0pID9cclxuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0aW9uLmRlbGV0ZSh1W3RoaXMuaWRBdHRyaWJ1dGVdKSA6IHRoaXMuY2hlY2tib3hTZWxlY3Rpb24uYWRkKHVbdGhpcy5pZEF0dHJpYnV0ZV0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnB1dD8uZm9jdXMoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBnZXQgb3B0aW9uc1Zpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgJiYgdGhpcy50eXBpbmdTdGFydGVkO1xyXG4gIC8vIH1cclxuXHJcbiAga2V5UHJlc3NlZChrZXlFdmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0RW1pdHRlZElkID0gLTE7XHJcbiAgICB0aGlzLm9wdGlvbnNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMudHlwaW5nU3RhcnRlZCA9IGtleUV2ZW50LmtleSAhPT0gJ1RhYicgJiYga2V5RXZlbnQua2V5ICE9PSAnRXNjYXBlJztcclxuICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wdGlvbnNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFbnRlcicgJiYgdGhpcy5oYXNDaGVja2JveFNlbGVjdGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb24gJiYgIXRoaXMuZm9jdXNlZE9wdGlvbi51bnNlbGVjdGFibGUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZU9wdGlvbkNoZWNrYm94ZWQodGhpcy5mb2N1c2VkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiB0aGlzLmZpbHRlcmVkR3JvdXBzQW5kVXNlcnMubGVuZ3RoID09PSAwICYmIHRoaXMuZm9jdXNlZFVzZXIgPT09IG51bGwgJiYgIXRoaXMuYWxyZWFkeUFkZGVkKSB7XHJcbiAgICAvLyAgIHRoaXMubmV3VXNlcigpO1xyXG4gICAgLy8gICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5mb2N1c2VkT3B0aW9uO1xyXG4gICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoKGtleUV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwga2V5RXZlbnQua2V5ID09PSAnQXJyb3dVcCcpICYmICF0aGlzLmZvY3VzZWRPcHRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1swXTtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuZm9jdXNlZFVzZXIudW5zZWxlY3RhYmxlIHx8IHRoaXMuZm9jdXNlZFVzZXIgPT09IHRoaXMuaW5pdGlhbFVzZXIpIHtcclxuICAgICAgICAvLyAgIHRoaXMuc2VsZWN0ZWRVc2VyID0gdGhpcy5mb2N1c2VkVXNlcjtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuZm9jdXNlZE9wdGlvbjtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuZm9jdXNlZE9wdGlvbikge1xyXG4gICAgICBjb25zdCBpZHggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5pbmRleE9mKHRoaXMuZm9jdXNlZE9wdGlvbik7XHJcbiAgICAgIGlmIChpZHggPT09IHRoaXMuZmlsdGVyZWRNYXhJdGVtc1Nob3duIC0gMSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRNYXhJdGVtc1Nob3duICs9IHRoaXMuU0hPV05fVVNFUlNfREVMVEE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlkeCA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tpZHggKyAxXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5mb2N1c2VkT3B0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnQXJyb3dVcCcgJiYgdGhpcy5mb2N1c2VkT3B0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmluZGV4T2YodGhpcy5mb2N1c2VkT3B0aW9uKTtcclxuICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tpZHggLSAxXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5mb2N1c2VkT3B0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLm9wdGlvbnNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oJ3RvZ2dsZScpO1xyXG4gIH1cclxuXHJcbiAgZW1pdFNlbGVjdGlvbihzcmM/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbE9wdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcHRpb247XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgY29uc3QgY2hlY2tJZCA9IHRoaXMuc2VsZWN0ZWRPcHRpb24uaWQgPT09IG51bGwgPyAwIDogdGhpcy5zZWxlY3RlZE9wdGlvbi5pZDtcclxuICAgICAgaWYgKHRoaXMubGFzdEVtaXR0ZWRJZCAhPT0gY2hlY2tJZCkge1xyXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IGNoZWNrSWQ7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLm9wdGlvbnMuZmluZChvID0+IG9bdGhpcy5pZEF0dHJpYnV0ZV0gPT09IHRoaXMuc2VsZWN0ZWRPcHRpb25bdGhpcy5pZEF0dHJpYnV0ZV0pKTtcclxuICAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZGlzcGxheUF0dHJpYnV0ZV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgIC8vICAgY29uc3QgY2hlY2tJZCA9IHRoaXMuc2VsZWN0ZWRVc2VyLmlkID09PSBudWxsID8gMCA6IHRoaXMuc2VsZWN0ZWRVc2VyLmlkO1xyXG4gICAgLy8gICBpZiAodGhpcy5sYXN0RW1pdHRlZElkICE9PSBjaGVja0lkKSB7XHJcbiAgICAvLyAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZFVzZXIuZnVsbE5hbWUsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VyLmlkKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLmdyb3Vwc0FuZFVzZXJzLmZpbmQoZyA9PiBnLnVzZXJzLmZpbmQodSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmICh1LmlkID09PSB0aGlzLnNlbGVjdGVkVXNlci5pZCkge1xyXG4gICAgLy8gICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh1KTtcclxuICAgIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH0pKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2VyKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhpcy5sYXN0RW1pdHRlZElkID0gY2hlY2tJZDtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgaWYgKHRoaXMubGFzdEVtaXR0ZWRJZCAhPT0gbnVsbCB8fCB0aGlzLmxhc3RFbWl0dGVkSWQgPT09IC0xLyogfHwgdGhpcy5zZWxlY3RlZFVzZXI/LnVuc2VsZWN0YWJsZSovKSB7XHJcbiAgICAvLyAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZShudWxsKTtcclxuICAgIC8vICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgIC8vICAgICB0aGlzLmxhc3RFbWl0dGVkSWQgPSBudWxsO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLnR5cGluZ1N0YXJ0ZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNhbmNlbENoZWNrYm94U2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGVja2JveFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgLy8gdGhpcy5za2lwQmx1ciA9IHRydWU7XHJcbiAgICAvLyB0aGlzLmlucHV0Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgdXNlQ2hlY2tib3hTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLm5ld1VzZXJuYW1lID0gJyc7XHJcbiAgICAvLyBjb25zdCB1c2VycyA9IFtdO1xyXG4gICAgLy8gdGhpcy5ncm91cHNBbmRVc2Vycy5mb3JFYWNoKGcgPT4gZy51c2Vycy5mb3JFYWNoKHUgPT4ge1xyXG4gICAgLy8gICBpZiAoIXVzZXJzLmluY2x1ZGVzKHUpICYmIHRoaXMuY2hlY2tib3hTZWxlY3Rpb24uaGFzKHUuaWQpKSB7XHJcbiAgICAvLyAgICAgdXNlcnMucHVzaCh1KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSkpO1xyXG4gICAgY29uc3Qgb3V0cHV0T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIobyA9PiB0aGlzLmNoZWNrYm94U2VsZWN0aW9uLmhhcyhvW3RoaXMuaWRBdHRyaWJ1dGVdKSAmJiAhdGhpcy5vcHRpb25EaXNhYmxlZChvKSk7XHJcbiAgICBpZiAob3V0cHV0T3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvdXRwdXRPcHRpb25zWzBdO1xyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZGlzcGxheUF0dHJpYnV0ZV0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2Uob3V0cHV0T3B0aW9ucyk7XHJcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcclxuICAgICAgLy8gdGhpcy5jb250cm9sPy5zZXRWYWx1ZShvdXRwdXRPcHRpb25zKTtcclxuICAgICAgLy8gdGhpcy50eXBpbmdTdGFydGVkID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMuc2tpcEJsdXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja2JveFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgbmV3T3B0aW9uKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGxvYWRNb3JlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRNYXhJdGVtc1Nob3duICs9IHRoaXMuU0hPV05fVVNFUlNfREVMVEE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICB0aGlzLmlucHV0Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmlucHV0Q29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmlucHV0Q29udHJvbC5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChvYmopIHtcclxuICAgICAgaWYgKG9iai5pZCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWFyY2hhYmxlT3B0aW9ucy5maWx0ZXIoc28gPT4gc28uaWQgPT09IG9iai5pZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlck9wdGlvbnMob2JqW3RoaXMuZGlzcGxheUF0dHJpYnV0ZV0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1swXTtcclxuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1swXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZShvYmpbdGhpcy5kaXNwbGF5QXR0cmlidXRlXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyT3B0aW9ucygnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3cmFwcGVyXCIgI3dyYXBwZXI+XHJcbiAgPGRpdiAqbmdJZj1cIm9wdGlvbnNWaXNpYmxlXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cclxuICA8dWktaW5wdXQgW2Zvcm1Db250cm9sXT1cImlucHV0Q29udHJvbFwiICNpbnB1dCAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIiBjZGtPdmVybGF5T3JpZ2luIChmb2N1c0NoYW5nZWQpPVwiaW5wdXRGb2N1c0NoYW5nZWQoJGV2ZW50KVwiIChrZXlQcmVzc2VkKT1cImtleVByZXNzZWQoJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFt1c2VJbnB1dE1lc3NhZ2VzXT1cIiduZXZlcidcIj5cclxuICAgIDxkaXYgc2xvdD1cInByZWZpeFwiPjxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWFjcHJlZml4XVwiPjwvbmctY29udGVudD48L2Rpdj5cclxuICA8L3VpLWlucHV0PlxyXG5cclxuICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCIgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm9wdGlvbnNWaXNpYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1ib3hcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW5cIiBbbmdTdHlsZV09XCJ7d2lkdGg6IHdyYXBwZXIub2Zmc2V0V2lkdGggKyAncHgnfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiICNvcHRpb25zPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGZpbHRlcmVkTWF4SXRlbXNTaG93blwiIGNsYXNzPVwib3B0aW9uLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogZm9jdXNlZE9wdGlvbiA9PT0gb3B0aW9ufVwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cIm9wdGlvbkNoZWNrZWQob3B0aW9uKSB8fCBvcHRpb24udW5zZWxlY3RhYmxlXCIgW2Rpc2FibGVkXT1cIm9wdGlvbi51bnNlbGVjdGFibGVcIiAoY2hhbmdlKT1cInRvZ2dsZU9wdGlvbkNoZWNrYm94ZWQob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGFpbmVyLWlubmVyXCIgKGNsaWNrKT1cInNlbGVjdChvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLW9wdGlvblwiIHVpRm9yY2VWaXNpYmlsaXR5IFt2aXNpYmlsaXR5V2l0aGluXT1cIm9wdGlvbnNcIiBbdmlzaWJpbGl0eVBhZGRpbmddPVwiNFwiICpuZ0lmPVwiZm9jdXNlZE9wdGlvbiA9PT0gb3B0aW9uXCIgW25nQ2xhc3NdPVwie3Vuc2VsZWN0YWJsZTogb3B0aW9uLnVuc2VsZWN0YWJsZX1cIj5cclxuICAgICAgICAgICAgICAgICAge3tvcHRpb25Gb3JtYXR0ZXIob3B0aW9uKX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tb3B0aW9uXCIgKm5nSWY9XCJmb2N1c2VkT3B0aW9uICE9PSBvcHRpb25cIiBbbmdDbGFzc109XCJ7dW5zZWxlY3RhYmxlOiBvcHRpb24udW5zZWxlY3RhYmxlfVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e29wdGlvbkZvcm1hdHRlcihvcHRpb24pfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWhhc0NoZWNrYm94U2VsZWN0ZWQgJiYgIW9wdGlvbi51bnNlbGVjdGFibGVcIj5ub3J0aF93ZXN0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPj0gZmlsdGVyZWRNYXhJdGVtc1Nob3duXCIgY2xhc3M9XCJvcHRpb24tY29udGFpbmVyXCIgdWlGb3JjZVZpc2liaWxpdHkgW3Zpc2liaWxpdHlXaXRoaW5dPVwib3B0aW9uc1wiIFt2aXNpYmlsaXR5RW1pdENoYW5nZV09XCJ0cnVlXCIgKHZpc2liaWxpdHlDaGFuZ2VkKT1cImxvYWRNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgIWZvY3VzZWRPcHRpb25cIiBjbGFzcz1cIm5ldy11c2VyXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxyZWFkeUFkZGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj5Vxb5pdmF0ZWwge3tpbnB1dENvbnRyb2wudmFsdWV9fSB1xb4gamUgbWV6aSBkbHXFvm7DrWt5PC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWxyZWFkeUFkZGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDFlbSAwXCI+VcW+aXZhdGVsZSA8c3Ryb25nPnt7aW5wdXRDb250cm9sLnZhbHVlfX08L3N0cm9uZz4gbmV6bsOhbWU8L2Rpdj5cclxuICAgICAgICAgICAgPHVpLWJ1dHRvbiAqbmdJZj1cImFsbG93TmV3XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA2cHg7XCIgW3NpemVdPVwiJ3NtYWxsJ1wiIFtsYWJlbF09XCInUMWZaWRhdCBqZWo/J1wiIChjbGljayk9XCJuZXdPcHRpb24oKVwiPjwvdWktYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgZm9jdXNlZE9wdGlvblwiIGNsYXNzPVwibmV3LXVzZXJcIj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj5OZXpuw6Ftw70gdcW+aXZhdGVsIHt7aW5wdXRDb250cm9sLnZhbHVlfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hlY2tib3hTZWxlY3RlZCAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY2hlY2tib3gtYnV0dG9uc1wiPlxyXG4gICAgICAgIDx1aS1idXR0b24gW3NpemVdPVwiJ3NtYWxsJ1wiIFtraW5kXT1cIidiYXNpYydcIiBbbGFiZWxdPVwiJ1pydcWhaXQgdsO9YsSbcidcIiAoY2xpY2spPVwiY2FuY2VsQ2hlY2tib3hTZWxlY3Rpb24oKVwiPjwvdWktYnV0dG9uPlxyXG4gICAgICAgIDx1aS1idXR0b24gW3NpemVdPVwiJ3NtYWxsJ1wiIFtsYWJlbF09XCInUG91xb7DrXQgdsO9YsSbciAoJyArIGNoZWNrYm94U2VsZWN0aW9uLnNpemUgKyAnKSdcIiAoY2xpY2spPVwidXNlQ2hlY2tib3hTZWxlY3Rpb24oKVwiPjwvdWktYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuIl19
@@ -1,34 +0,0 @@
1
- import { Component, HostBinding, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "../file/file.component";
5
- export class AvatarComponent {
6
- get contrast() {
7
- const hexCode = this.user.shortColour.substring(1, 7);
8
- const hexR = parseInt(hexCode.substring(0, 2), 16);
9
- const hexG = parseInt(hexCode.substring(2, 4), 16);
10
- const hexB = parseInt(hexCode.substring(4, 6), 16);
11
- const contrastRatio = hexR * 0.299 + hexG * 0.587 + hexB * 0.114;
12
- return contrastRatio >= 200 ? 'black' : 'white';
13
- }
14
- constructor() {
15
- this.user = {};
16
- this.size = 'normal';
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: AvatarComponent, selector: "ui-avatar", inputs: { user: "user", srcOptions: "srcOptions", size: "size" }, host: { properties: { "class": "this.size" } }, ngImport: i0, template: "<ui-file *ngIf=\"user.avatar || (!user.avatar && !user.shortName)\" [fileSize]=\"'avatar-' + size\" [srcData]=\"user.avatar || { mimeType: 'image/png'}\" [srcOptions]=\"srcOptions\" ></ui-file>\r\n<div *ngIf=\"!user.avatar && user.shortName\" [ngStyle]=\"{backgroundColor: user.shortColour, color: contrast}\">\r\n {{ user.shortName }}\r\n</div>\r\n", styles: [":host{display:block;flex:0 0 auto}:host.mini{height:16px;width:16px}:host.mini div{font-size:10px}:host.small{height:24px;width:24px}:host.small div{font-size:13px}:host.smaller{height:50px;width:50px}:host.smaller div{font-size:1.5em}:host.normal{height:74px;width:74px}:host.normal div{font-size:37px}:host.bigger{height:100px;width:100px}:host.bigger div{font-size:50px}:host.big{height:150px;width:150px}:host.big div{font-size:75px}:host ui-file ::ng-deep img{border-radius:50%}:host div{display:flex;align-items:center;justify-content:center;width:100%;font-weight:700;color:#fff;background-size:cover;height:100%;border-radius:50%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.FileComponent, selector: "ui-file", inputs: ["fileSize", "srcOptions", "srcData", "srcUrl"] }] }); }
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AvatarComponent, decorators: [{
22
- type: Component,
23
- args: [{ selector: 'ui-avatar', template: "<ui-file *ngIf=\"user.avatar || (!user.avatar && !user.shortName)\" [fileSize]=\"'avatar-' + size\" [srcData]=\"user.avatar || { mimeType: 'image/png'}\" [srcOptions]=\"srcOptions\" ></ui-file>\r\n<div *ngIf=\"!user.avatar && user.shortName\" [ngStyle]=\"{backgroundColor: user.shortColour, color: contrast}\">\r\n {{ user.shortName }}\r\n</div>\r\n", styles: [":host{display:block;flex:0 0 auto}:host.mini{height:16px;width:16px}:host.mini div{font-size:10px}:host.small{height:24px;width:24px}:host.small div{font-size:13px}:host.smaller{height:50px;width:50px}:host.smaller div{font-size:1.5em}:host.normal{height:74px;width:74px}:host.normal div{font-size:37px}:host.bigger{height:100px;width:100px}:host.bigger div{font-size:50px}:host.big{height:150px;width:150px}:host.big div{font-size:75px}:host ui-file ::ng-deep img{border-radius:50%}:host div{display:flex;align-items:center;justify-content:center;width:100%;font-weight:700;color:#fff;background-size:cover;height:100%;border-radius:50%}\n"] }]
24
- }], ctorParameters: () => [], propDecorators: { user: [{
25
- type: Input
26
- }], srcOptions: [{
27
- type: Input
28
- }], size: [{
29
- type: HostBinding,
30
- args: ['class']
31
- }, {
32
- type: Input
33
- }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2F2YXRhci9hdmF0YXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBTzlELE1BQU0sT0FBTyxlQUFlO0lBUzFCLElBQUksUUFBUTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdEQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7UUFFakUsT0FBTyxhQUFhLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7UUFsQlMsU0FBSSxHQUFxRSxFQUFFLENBQUM7UUFLNUUsU0FBSSxHQUErRCxRQUFRLENBQUM7SUFhckUsQ0FBQzs4R0FwQk4sZUFBZTtrR0FBZixlQUFlLG1LQ1A1QixnV0FJQTs7MkZER2EsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXO3dEQU1aLElBQUk7c0JBQVosS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLElBQUk7c0JBRFosV0FBVzt1QkFBQyxPQUFPOztzQkFDbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWF2YXRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF2YXRhckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHVzZXI6IFBhcnRpYWw8eyBhdmF0YXI6IGFueSwgc2hvcnROYW1lOiBzdHJpbmcsIHNob3J0Q29sb3VyOiBzdHJpbmcgfT4gPSB7fTtcclxuXHJcbiAgQElucHV0KCkgc3JjT3B0aW9ucztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgQElucHV0KCkgc2l6ZTogJ2JpZycgfCAnYmlnZ2VyJyB8ICdub3JtYWwnIHwgJ3NtYWxsZXInIHwgJ3NtYWxsJyB8ICdtaW5pJyA9ICdub3JtYWwnO1xyXG5cclxuICBnZXQgY29udHJhc3QoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGhleENvZGUgPSB0aGlzLnVzZXIuc2hvcnRDb2xvdXIuc3Vic3RyaW5nKDEsIDcpO1xyXG5cclxuICAgIGNvbnN0IGhleFIgPSBwYXJzZUludChoZXhDb2RlLnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgaGV4RyA9IHBhcnNlSW50KGhleENvZGUuc3Vic3RyaW5nKDIsIDQpLCAxNik7XHJcbiAgICBjb25zdCBoZXhCID0gcGFyc2VJbnQoaGV4Q29kZS5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuICAgIGNvbnN0IGNvbnRyYXN0UmF0aW8gPSBoZXhSICogMC4yOTkgKyBoZXhHICogMC41ODcgKyBoZXhCICogMC4xMTQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8gPj0gMjAwID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxufVxyXG4iLCI8dWktZmlsZSAqbmdJZj1cInVzZXIuYXZhdGFyIHx8ICghdXNlci5hdmF0YXIgJiYgIXVzZXIuc2hvcnROYW1lKVwiIFtmaWxlU2l6ZV09XCInYXZhdGFyLScgKyBzaXplXCIgW3NyY0RhdGFdPVwidXNlci5hdmF0YXIgfHwgeyBtaW1lVHlwZTogJ2ltYWdlL3BuZyd9XCIgW3NyY09wdGlvbnNdPVwic3JjT3B0aW9uc1wiID48L3VpLWZpbGU+XHJcbjxkaXYgKm5nSWY9XCIhdXNlci5hdmF0YXIgJiYgdXNlci5zaG9ydE5hbWVcIiBbbmdTdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiB1c2VyLnNob3J0Q29sb3VyLCBjb2xvcjogY29udHJhc3R9XCI+XHJcbiAge3sgdXNlci5zaG9ydE5hbWUgfX1cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,57 +0,0 @@
1
- import { Component, HostBinding, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/material/icon";
5
- import * as i3 from "@angular/material/progress-bar";
6
- import * as i4 from "@angular/material/core";
7
- export class ButtonComponent {
8
- get class() {
9
- return this.kind +
10
- (this.color ? ' ' + this.color : '') +
11
- (this.size ? ' ' + this.size : '') +
12
- ((this.disabled || this.busy) ? ' disabled' : '');
13
- }
14
- constructor() {
15
- this.type = 'button';
16
- this.disabled = false;
17
- this.busy = false;
18
- this.kind = 'flat';
19
- this.color = 'primary';
20
- this.size = 'normal';
21
- this.formInvalid = false;
22
- }
23
- get isDisabled() {
24
- return this.disabled || this.busy;
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.1", type: ButtonComponent, selector: "ui-button", inputs: { type: "type", matIconPrefix: "matIconPrefix", label: "label", disabled: "disabled", busy: "busy", kind: "kind", color: "color", size: "size", formInvalid: "formInvalid" }, host: { properties: { "class": "this.class", "class.formInvalid": "this.formInvalid" } }, ngImport: i0, template: "<button matRipple [type]=\"type\" [disabled]=\"isDisabled || busy\" [ngClass]=\"{busy: busy}\" [class]=\"class\">\r\n <mat-icon *ngIf=\"matIconPrefix\">{{matIconPrefix}}</mat-icon>\r\n {{label}}\r\n <mat-progress-bar *ngIf=\"busy\" mode=\"indeterminate\" [color]=\"color\"></mat-progress-bar>\r\n</button>\r\n", styles: [":host{display:flex;align-items:center}:host button{font-size:1em;width:100%;cursor:pointer;outline:none;position:relative;display:flex;align-items:center;justify-content:center;border:1px solid transparent;transition:all .15s ease-in-out}:host button mat-progress-bar{position:absolute;bottom:1px;height:2px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}:host button mat-icon{margin-right:4px;height:16px;width:16px;font-size:16px}:host.small button mat-icon{width:14px;height:14px;font-size:14px;margin-right:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i4.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ButtonComponent, decorators: [{
30
- type: Component,
31
- args: [{ selector: 'ui-button', template: "<button matRipple [type]=\"type\" [disabled]=\"isDisabled || busy\" [ngClass]=\"{busy: busy}\" [class]=\"class\">\r\n <mat-icon *ngIf=\"matIconPrefix\">{{matIconPrefix}}</mat-icon>\r\n {{label}}\r\n <mat-progress-bar *ngIf=\"busy\" mode=\"indeterminate\" [color]=\"color\"></mat-progress-bar>\r\n</button>\r\n", styles: [":host{display:flex;align-items:center}:host button{font-size:1em;width:100%;cursor:pointer;outline:none;position:relative;display:flex;align-items:center;justify-content:center;border:1px solid transparent;transition:all .15s ease-in-out}:host button mat-progress-bar{position:absolute;bottom:1px;height:2px;border-bottom-left-radius:10px;border-bottom-right-radius:10px}:host button mat-icon{margin-right:4px;height:16px;width:16px;font-size:16px}:host.small button mat-icon{width:14px;height:14px;font-size:14px;margin-right:2px}\n"] }]
32
- }], ctorParameters: () => [], propDecorators: { type: [{
33
- type: Input
34
- }], matIconPrefix: [{
35
- type: Input
36
- }], label: [{
37
- type: Input
38
- }], disabled: [{
39
- type: Input
40
- }], busy: [{
41
- type: Input
42
- }], kind: [{
43
- type: Input
44
- }], color: [{
45
- type: Input
46
- }], size: [{
47
- type: Input
48
- }], class: [{
49
- type: HostBinding,
50
- args: ['class']
51
- }], formInvalid: [{
52
- type: HostBinding,
53
- args: ['class.formInvalid']
54
- }, {
55
- type: Input
56
- }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFROUQsTUFBTSxPQUFPLGVBQWU7SUFXMUIsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSTtZQUNkLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFLRDtRQXBCUyxTQUFJLEdBQXdCLFFBQVEsQ0FBQztRQUdyQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixTQUFJLEdBQWlDLE1BQU0sQ0FBQztRQUM1QyxVQUFLLEdBQWlCLFNBQVMsQ0FBQztRQUNoQyxTQUFJLEdBQWdCLFFBQVEsQ0FBQztRQVc3QixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQUViLENBQUM7SUFFakIsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQzs4R0ExQlUsZUFBZTtrR0FBZixlQUFlLGlVQ1I1QiwwVEFLQTs7MkZER2EsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXO3dEQU1aLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHRixLQUFLO3NCQURSLFdBQVc7dUJBQUMsT0FBTztnQkFTWCxXQUFXO3NCQURuQixXQUFXO3VCQUFDLG1CQUFtQjs7c0JBQy9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sQ29sb3IsIENvbnRyb2xTaXplIH0gZnJvbSAnLi4vdWkubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlOiAnc3VibWl0JyB8ICdidXR0b24nID0gJ2J1dHRvbic7XHJcbiAgQElucHV0KCkgbWF0SWNvblByZWZpeDogYW55O1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBidXN5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkga2luZDogJ2Jhc2ljJyB8ICdmbGF0JyB8ICdzdHJva2VkJyA9ICdmbGF0JztcclxuICBASW5wdXQoKSBjb2xvcjogQ29udHJvbENvbG9yID0gJ3ByaW1hcnknO1xyXG4gIEBJbnB1dCgpIHNpemU6IENvbnRyb2xTaXplID0gJ25vcm1hbCc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGdldCBjbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMua2luZCArXHJcbiAgICAgICh0aGlzLmNvbG9yID8gJyAnICsgdGhpcy5jb2xvciA6ICcnKSArXHJcbiAgICAgICh0aGlzLnNpemUgPyAnICcgKyB0aGlzLnNpemUgOiAnJykgK1xyXG4gICAgICAoKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5idXN5KSA/ICcgZGlzYWJsZWQnIDogJycpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtSW52YWxpZCcpXHJcbiAgQElucHV0KCkgZm9ybUludmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmJ1c3k7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YnV0dG9uIG1hdFJpcHBsZSBbdHlwZV09XCJ0eXBlXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQgfHwgYnVzeVwiIFtuZ0NsYXNzXT1cIntidXN5OiBidXN5fVwiIFtjbGFzc109XCJjbGFzc1wiPlxyXG4gIDxtYXQtaWNvbiAqbmdJZj1cIm1hdEljb25QcmVmaXhcIj57e21hdEljb25QcmVmaXh9fTwvbWF0LWljb24+XHJcbiAge3tsYWJlbH19XHJcbiAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJidXN5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBbY29sb3JdPVwiY29sb3JcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbjwvYnV0dG9uPlxyXG4iXX0=