@rlucan/ui 14.2.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 (78) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/action-button/action-button.component.mjs +96 -0
  3. package/esm2020/lib/action-icon/action-icon.component.mjs +37 -0
  4. package/esm2020/lib/autocomplete/autocomplete.component.mjs +391 -0
  5. package/esm2020/lib/avatar/avatar.component.mjs +34 -0
  6. package/esm2020/lib/base/ui-base-layout.component.mjs +22 -0
  7. package/esm2020/lib/base/ui-base.component.mjs +74 -0
  8. package/esm2020/lib/button/button.component.mjs +57 -0
  9. package/esm2020/lib/checkbox/checkbox.component.mjs +39 -0
  10. package/esm2020/lib/checkbox-group/checkbox-group.component.mjs +91 -0
  11. package/esm2020/lib/currency/currency.component.mjs +148 -0
  12. package/esm2020/lib/date/date.component.mjs +64 -0
  13. package/esm2020/lib/dialog/dialog.component.mjs +37 -0
  14. package/esm2020/lib/directives/force-visibility/force-visibility.directive.mjs +96 -0
  15. package/esm2020/lib/elements/burger/burger.component.mjs +21 -0
  16. package/esm2020/lib/elements/expander/expander.component.mjs +28 -0
  17. package/esm2020/lib/elements/validation-message/validation-message.component.mjs +47 -0
  18. package/esm2020/lib/file/file.component.mjs +88 -0
  19. package/esm2020/lib/file-uploader/ui-file-uploader.component.mjs +394 -0
  20. package/esm2020/lib/input/input.component.mjs +258 -0
  21. package/esm2020/lib/radio/radio.component.mjs +21 -0
  22. package/esm2020/lib/radio-group/radio-group.component.mjs +53 -0
  23. package/esm2020/lib/select/select.component.mjs +91 -0
  24. package/esm2020/lib/services/message-box.service.mjs +113 -0
  25. package/esm2020/lib/services/toast.service.mjs +23 -0
  26. package/esm2020/lib/services/ui-file.service.mjs +71 -0
  27. package/esm2020/lib/services/ui-translate.service.mjs +32 -0
  28. package/esm2020/lib/simple/ui-simple-layout.component.mjs +15 -0
  29. package/esm2020/lib/simple/ui-simple.component.mjs +154 -0
  30. package/esm2020/lib/submit-button/submit-button.component.mjs +72 -0
  31. package/esm2020/lib/table/table.component.mjs +97 -0
  32. package/esm2020/lib/text-area/text-area.component.mjs +46 -0
  33. package/esm2020/lib/ui.model.mjs +2 -0
  34. package/esm2020/lib/ui.module.mjs +255 -0
  35. package/esm2020/public-api.mjs +33 -0
  36. package/esm2020/rlucan-ui.mjs +5 -0
  37. package/fesm2015/rlucan-ui.mjs +2918 -0
  38. package/fesm2015/rlucan-ui.mjs.map +1 -0
  39. package/fesm2020/rlucan-ui.mjs +2886 -0
  40. package/fesm2020/rlucan-ui.mjs.map +1 -0
  41. package/index.d.ts +5 -0
  42. package/lib/action-button/action-button.component.d.ts +33 -0
  43. package/lib/action-icon/action-icon.component.d.ts +15 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +57 -0
  45. package/lib/avatar/avatar.component.d.ts +14 -0
  46. package/lib/base/ui-base-layout.component.d.ts +8 -0
  47. package/lib/base/ui-base.component.d.ts +23 -0
  48. package/lib/button/button.component.d.ts +18 -0
  49. package/lib/checkbox/checkbox.component.d.ts +15 -0
  50. package/lib/checkbox-group/checkbox-group.component.d.ts +18 -0
  51. package/lib/currency/currency.component.d.ts +30 -0
  52. package/lib/date/date.component.d.ts +23 -0
  53. package/lib/dialog/dialog.component.d.ts +13 -0
  54. package/lib/directives/force-visibility/force-visibility.directive.d.ts +20 -0
  55. package/lib/elements/burger/burger.component.d.ts +9 -0
  56. package/lib/elements/expander/expander.component.d.ts +10 -0
  57. package/lib/elements/validation-message/validation-message.component.d.ts +12 -0
  58. package/lib/file/file.component.d.ts +29 -0
  59. package/lib/file-uploader/ui-file-uploader.component.d.ts +102 -0
  60. package/lib/input/input.component.d.ts +29 -0
  61. package/lib/radio/radio.component.d.ts +8 -0
  62. package/lib/radio-group/radio-group.component.d.ts +18 -0
  63. package/lib/select/select.component.d.ts +33 -0
  64. package/lib/services/message-box.service.d.ts +42 -0
  65. package/lib/services/toast.service.d.ts +13 -0
  66. package/lib/services/ui-file.service.d.ts +33 -0
  67. package/lib/services/ui-translate.service.d.ts +11 -0
  68. package/lib/simple/ui-simple-layout.component.d.ts +7 -0
  69. package/lib/simple/ui-simple.component.d.ts +39 -0
  70. package/lib/submit-button/submit-button.component.d.ts +21 -0
  71. package/lib/table/table.component.d.ts +36 -0
  72. package/lib/text-area/text-area.component.d.ts +18 -0
  73. package/lib/ui.model.d.ts +2 -0
  74. package/lib/ui.module.d.ts +56 -0
  75. package/package.json +44 -0
  76. package/public-api.d.ts +27 -0
  77. package/scss/ui-defaults.scss +339 -0
  78. package/ui.scss +911 -0
@@ -0,0 +1,258 @@
1
+ import { Component, EventEmitter, Host, Input, Optional, Output, SkipSelf, ViewChild } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { UiSimpleComponent } from '../simple/ui-simple.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "../simple/ui-simple-layout.component";
8
+ export class InputComponent extends UiSimpleComponent {
9
+ constructor(controlContainer) {
10
+ super(null, controlContainer);
11
+ this.controlContainer = controlContainer;
12
+ // UiSimpleComponent = InputComponent;
13
+ // @Input() placeholder = '';
14
+ // @Input() label: string | undefined;
15
+ // @Input() useInputMessages: 'never' | 'always' | 'ondemand' = 'always';
16
+ // @Input() hint: string | undefined;
17
+ // @Input() validators: UiValidators | undefined;
18
+ // @Input() size: 'small' | 'smaller' | 'normal' | 'larger' | 'large' = 'normal';
19
+ // @Input() formControlName;
20
+ // componentFormControl: UntypedFormControl;
21
+ //
22
+ // ngControl: NgControl;
23
+ //
24
+ // @Input() validators: UiValidators | undefined;
25
+ // @Input() formControlName;
26
+ //
27
+ // @Input() placeholder = '';
28
+ // @Input() label: string | undefined;
29
+ // @Input() useInputMessages: 'never' | 'always' | 'ondemand' = 'always';
30
+ // @Input() hint?: string;
31
+ // @Input() size: 'small' | 'smaller' | 'normal' | 'larger' | 'large' = 'normal';
32
+ this.prefix = '';
33
+ this.suffix = '';
34
+ this.type = 'text';
35
+ this.clearButton = false;
36
+ this.disableUserInput = false;
37
+ // @HostBinding('class.centered')
38
+ this.centered = false;
39
+ this.focusChanged = new EventEmitter();
40
+ this.keyPressed = new EventEmitter();
41
+ // control = new FormControl();
42
+ this.required = false;
43
+ // this.componentFormControl = new FormControl();
44
+ // super();
45
+ // super(undefined, /*ngControl*/ translateService);
46
+ // super(control);
47
+ // console.log(control);
48
+ // if (control) {
49
+ // control.valueAccessor = this;
50
+ // }
51
+ // if (ngControl != null) {
52
+ // // Setting the value accessor directly (instead of using
53
+ // // the providers) to avoid running into a circular import.
54
+ // ngControl.valueAccessor = this;
55
+ // }
56
+ }
57
+ // control;
58
+ // onTouched = () => {};
59
+ // onChange = (value) => {};
60
+ // get showInvalid(): boolean {
61
+ // return true;
62
+ // // return this.control.touched && !!this.control.errors;
63
+ // }
64
+ // get validationMessage(): string {
65
+ // // console.log(this.control?.errors);
66
+ // let e: any = {code: 'Neznámá chyba'};
67
+ // const errors = this.control?.errors || {};
68
+ // Object.keys(errors).find(a => {
69
+ // e = {code: a, data: errors[a]};
70
+ // return true;
71
+ // });
72
+ // switch (e.code) {
73
+ // case 'required':
74
+ // return this.translateService.instant('ui.controls.validation.required');
75
+ // case 'email':
76
+ // return this.translateService.instant('ui.controls.validation.email');
77
+ // case 'matDatepickerParse':
78
+ // return this.translateService.instant('ui.controls.validation.matDatepickerParse');
79
+ // case 'maxlength':
80
+ // return this.translateService.instant('ui.controls.validation.maxlength', e.data);
81
+ // case 'minlength':
82
+ // return this.translateService.instant('ui.controls.validation.minlength', e.data);
83
+ // case 'positive':
84
+ // return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
85
+ // case 'custom':
86
+ // return this.translateService.instant(e.data);
87
+ // default:
88
+ // return this.translateService.instant(e.code);
89
+ // }
90
+ // }
91
+ get maxLenRequired() {
92
+ return true;
93
+ // return this.control.value && (this.control.value.length > (this.validators?.maxLength || 0));
94
+ }
95
+ get showClearButton() {
96
+ return false;
97
+ // return this.clearButton && this.control?.value !== '';
98
+ }
99
+ ngOnInit() {
100
+ super.ngOnInit();
101
+ // console.log('probiha vubec oninit?');
102
+ // if (this.ngControl) {
103
+ // console.log('from ngControl....??');
104
+ // if (this.formControl) {
105
+ // this.componentFormControl = this.formControl;
106
+ // } else {
107
+ // this.componentFormControl = this.ngControl.control as UntypedFormControl;
108
+ // }
109
+ // setTimeout(() => {
110
+ // this.applyValidators();
111
+ // });
112
+ // } else {
113
+ // const control = this.formControlName ?
114
+ // (this.controlContainer as FormGroupDirective).control.get(this.formControlName) : this.formControl;
115
+ // this.componentFormControl.setValidators(control.validator);
116
+ // this.componentFormControl.valueChanges.subscribe(v => console.log('onitin sub', v));
117
+ // control._componentFormControl = this.componentFormControl;
118
+ // if (control._markAsTouched === undefined) {
119
+ // // control._componentFormControl = this.componentFormControl;
120
+ // console.log('overriding markAsTouched for', this.formControlName);
121
+ // control._markAsTouched = control.markAsTouched;
122
+ // control.markAsTouched = ({onlySelf}: { onlySelf?: boolean } = {}): void => {
123
+ // console.log('marking as touched', this.componentFormControl.value, control.value, this.xxx.value, control._componentFormControl.value);
124
+ // control._markAsTouched({onlySelf});
125
+ // setTimeout(() => control._componentFormControl.markAsTouched(), 1000);
126
+ // }
127
+ // }
128
+ // }
129
+ }
130
+ clearValue() {
131
+ // this.control?.setValue('');
132
+ this.input?.nativeElement.focus();
133
+ }
134
+ focus() {
135
+ this.input?.nativeElement.focus();
136
+ }
137
+ onFocus(focus) {
138
+ this.focusChanged.emit(focus);
139
+ }
140
+ onKeypressed($event) {
141
+ this.keyPressed.emit($event);
142
+ }
143
+ // registerOnChange(onChange: any): void {
144
+ // this.onChange = onChange;
145
+ // }
146
+ //
147
+ // registerOnTouched(onTouched: any): void {
148
+ // this.onTouched = onTouched;
149
+ // }
150
+ // registerOnValidatorChange(fn: () => void): void {
151
+ // }
152
+ // setDisabledState(isDisabled: boolean): void {
153
+ // // isDisabled ? this.control.disable() : this.control.enable();
154
+ // }
155
+ // validate(control: AbstractControl): ValidationErrors | null {
156
+ // // this.control = control;
157
+ // // console.log(control, control.value, control.errors);
158
+ // if (this.value === 'error') {
159
+ // return { customError: 'muj error'}
160
+ // } else {
161
+ // return null;
162
+ // }
163
+ // // console.log('custom validate');
164
+ // // return null;
165
+ // }
166
+ //
167
+ // writeValue(obj: any): void {
168
+ // console.log('writevalue: ', obj);
169
+ // this.componentFormControl.setValue(obj);
170
+ // // this.value = obj;
171
+ // // this.control.setValue(obj);
172
+ // }
173
+ //
174
+ // registerOnChange(fn: any): void {
175
+ // }
176
+ //
177
+ // registerOnTouched(fn: any): void {
178
+ // }
179
+ //
180
+ // setDisabledState(isDisabled: boolean): void {
181
+ // }
182
+ // modelChange($event: any) {
183
+ // console.log($event);
184
+ // this.onTouched();
185
+ // this.onChange($event)
186
+ // }
187
+ // validate(control: AbstractControl): ValidationErrors | null {
188
+ // console.log(this.label, 'validate');
189
+ // return this.componentFormControl.errors;
190
+ // // return undefined;
191
+ // }
192
+ validate(control) {
193
+ if (this.parentFormControl) {
194
+ return this.parentFormControl._componentFormControl.errors;
195
+ }
196
+ // console.log('validate', this.componentFormControl.errors);
197
+ // // this.componentFormControl.setErrors( { custom: 'xxx' });
198
+ // this.componentFormControl.setErrors( this.componentFormControl.errors);
199
+ // console.log('validate 2', this.componentFormControl.errors);
200
+ // return this.componentFormControl.errors;
201
+ // console.log(this.componentFormControl.errors, control.errors, this.parentFormControl.errors, this);
202
+ // return this.componentFormControl.errors;
203
+ }
204
+ }
205
+ InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: InputComponent, deps: [{ token: i1.ControlContainer, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
206
+ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: InputComponent, selector: "ui-input", inputs: { prefix: "prefix", suffix: "suffix", type: "type", clearButton: "clearButton", disableUserInput: "disableUserInput", centered: "centered" }, outputs: { focusChanged: "focusChanged", keyPressed: "keyPressed" }, providers: [
207
+ {
208
+ provide: NG_VALUE_ACCESSOR,
209
+ multi: true,
210
+ useExisting: InputComponent
211
+ },
212
+ {
213
+ provide: NG_VALIDATORS,
214
+ multi: true,
215
+ useExisting: InputComponent
216
+ }
217
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\">\r\n <input #input [ngClass]=\"{centered: centered}\" [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <ng-content select=\"[slot=prefix]\"></ng-content>\r\n <ng-content select=\"[slot=suffix]\"></ng-content>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{width:100%}:host .control-container{width:100%;position:relative}:host ::ng-deep [slot=suffix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep input.has-suffix,:host ::ng-deep textarea.has-suffix,:host ::ng-deep ::ng-deep .mat-select-trigger.has-suffix,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.has-suffix{padding-right:1.8em}:host ::ng-deep input.centered,:host ::ng-deep textarea.centered,:host ::ng-deep ::ng-deep .mat-select-trigger.centered,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.centered{text-align:center}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }] });
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: InputComponent, decorators: [{
219
+ type: Component,
220
+ args: [{ selector: 'ui-input', providers: [
221
+ {
222
+ provide: NG_VALUE_ACCESSOR,
223
+ multi: true,
224
+ useExisting: InputComponent
225
+ },
226
+ {
227
+ provide: NG_VALIDATORS,
228
+ multi: true,
229
+ useExisting: InputComponent
230
+ }
231
+ ], template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<div class=\"control-container\">\r\n <input #input [ngClass]=\"{centered: centered}\" [type]=\"type\" [formControl]=\"componentFormControl\" [placeholder]=\"placeholder\" (keydown)=\"onKeypressed($event)\" (focus)=\"onFocus(true)\" (blur)=\"onFocus(false)\" />\r\n <ng-content select=\"[slot=prefix]\"></ng-content>\r\n <ng-content select=\"[slot=suffix]\"></ng-content>\r\n</div>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{width:100%}:host .control-container{width:100%;position:relative}:host ::ng-deep [slot=suffix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep input.has-suffix,:host ::ng-deep textarea.has-suffix,:host ::ng-deep ::ng-deep .mat-select-trigger.has-suffix,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.has-suffix{padding-right:1.8em}:host ::ng-deep input.centered,:host ::ng-deep textarea.centered,:host ::ng-deep ::ng-deep .mat-select-trigger.centered,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.centered{text-align:center}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n"] }]
232
+ }], ctorParameters: function () { return [{ type: i1.ControlContainer, decorators: [{
233
+ type: Optional
234
+ }, {
235
+ type: Host
236
+ }, {
237
+ type: SkipSelf
238
+ }] }]; }, propDecorators: { prefix: [{
239
+ type: Input
240
+ }], suffix: [{
241
+ type: Input
242
+ }], type: [{
243
+ type: Input
244
+ }], clearButton: [{
245
+ type: Input
246
+ }], disableUserInput: [{
247
+ type: Input
248
+ }], centered: [{
249
+ type: Input
250
+ }], input: [{
251
+ type: ViewChild,
252
+ args: ['input']
253
+ }], focusChanged: [{
254
+ type: Output
255
+ }], keyPressed: [{
256
+ type: Output
257
+ }] } });
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsYUFBYSxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQXFCbEUsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUI7SUEyRm5ELFlBQXNELGdCQUFrQztRQVV0RixLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFWc0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXhGeEYsc0NBQXNDO1FBRXRDLDZCQUE2QjtRQUM3QixzQ0FBc0M7UUFDdEMseUVBQXlFO1FBQ3pFLHFDQUFxQztRQUNyQyxpREFBaUQ7UUFDakQsaUZBQWlGO1FBQ2pGLDRCQUE0QjtRQUU1Qiw0Q0FBNEM7UUFDNUMsRUFBRTtRQUNGLHdCQUF3QjtRQUN4QixFQUFFO1FBQ0YsaURBQWlEO1FBQ2pELDRCQUE0QjtRQUM1QixFQUFFO1FBQ0YsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0Qyx5RUFBeUU7UUFDekUsMEJBQTBCO1FBQzFCLGlGQUFpRjtRQUV4RSxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFNBQUksR0FBbUMsTUFBTSxDQUFDO1FBQzlDLGdC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SyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxnQkFBZ0I7eUJBQzVCO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLGdCQUFnQjt5QkFDNUI7cUJBQ0E7OzBCQTZGWSxRQUFROzswQkFBSSxJQUFJOzswQkFBSSxRQUFROzRDQWpFaEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFFYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBRVIsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFNraXBTZWxmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktaW5wdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbi8vICAgc3R5bGVVcmxzOiBbICcuL2lucHV0LmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gIHN0eWxlVXJsczogWyAnLi4vc2ltcGxlL3VpLXNpbXBsZS1sYXlvdXQuY29tcG9uZW50LnNjc3MnIF0sXHJcblxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIHVzZUV4aXN0aW5nOiBJbnB1dENvbXBvbmVudFxyXG4gIH0sXHJcbiAge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgIG11bHRpOiB0cnVlLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0Q29tcG9uZW50XHJcbiAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGV4dGVuZHMgVWlTaW1wbGVDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCB7IC8vIH0sIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHsgLy8gfSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7IC8vIH0sIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvLyBVaVNpbXBsZUNvbXBvbmVudCA9IElucHV0Q29tcG9uZW50O1xyXG5cclxuICAvLyBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgdXNlSW5wdXRNZXNzYWdlczogJ25ldmVyJyB8ICdhbHdheXMnIHwgJ29uZGVtYW5kJyA9ICdhbHdheXMnO1xyXG4gIC8vIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBASW5wdXQoKSB2YWxpZGF0b3JzOiBVaVZhbGlkYXRvcnMgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgc2l6ZTogJ3NtYWxsJyB8ICdzbWFsbGVyJyB8ICdub3JtYWwnIHwgJ2xhcmdlcicgfCAnbGFyZ2UnID0gJ25vcm1hbCc7XHJcbiAgLy8gQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lO1xyXG5cclxuICAvLyBjb21wb25lbnRGb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIC8vXHJcbiAgLy8gbmdDb250cm9sOiBOZ0NvbnRyb2w7XHJcbiAgLy9cclxuICAvLyBASW5wdXQoKSB2YWxpZGF0b3JzOiBVaVZhbGlkYXRvcnMgfCB1bmRlZmluZWQ7XHJcbiAgLy8gQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lO1xyXG4gIC8vXHJcbiAgLy8gQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAvLyBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIEBJbnB1dCgpIHVzZUlucHV0TWVzc2FnZXM6ICduZXZlcicgfCAnYWx3YXlzJyB8ICdvbmRlbWFuZCcgPSAnYWx3YXlzJztcclxuICAvLyBASW5wdXQoKSBoaW50Pzogc3RyaW5nO1xyXG4gIC8vIEBJbnB1dCgpIHNpemU6ICdzbWFsbCcgfCAnc21hbGxlcicgfCAnbm9ybWFsJyB8ICdsYXJnZXInIHwgJ2xhcmdlJyA9ICdub3JtYWwnO1xyXG5cclxuICBASW5wdXQoKSBwcmVmaXggPSAnJztcclxuICBASW5wdXQoKSBzdWZmaXggPSAnJztcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgY2xlYXJCdXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaXNhYmxlVXNlcklucHV0ID0gZmFsc2U7XHJcblxyXG4gIC8vIEBIb3N0QmluZGluZygnY2xhc3MuY2VudGVyZWQnKVxyXG4gIEBJbnB1dCgpIGNlbnRlcmVkID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGtleVByZXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcblxyXG4gIC8vIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgLy8gY29udHJvbDtcclxuXHJcblxyXG4gIC8vIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG4gIC8vIG9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7fTtcclxuXHJcbiAgLy8gZ2V0IHNob3dJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gIC8vICAgcmV0dXJuIHRydWU7XHJcbiAgLy8gICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnRvdWNoZWQgJiYgISF0aGlzLmNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2w/LmVycm9ycyk7XHJcbiAgLy8gICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAvLyAgIGNvbnN0IGVycm9ycyA9IHRoaXMuY29udHJvbD8uZXJyb3JzIHx8IHt9O1xyXG4gIC8vICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gIC8vICAgICBlID0ge2NvZGU6IGEsIGRhdGE6IGVycm9yc1thXX07XHJcbiAgLy8gICAgIHJldHVybiB0cnVlO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBzd2l0Y2ggKGUuY29kZSkge1xyXG4gIC8vICAgICBjYXNlICdyZXF1aXJlZCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLnJlcXVpcmVkJyk7XHJcbiAgLy8gICAgIGNhc2UgJ2VtYWlsJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uZW1haWwnKTtcclxuICAvLyAgICAgY2FzZSAnbWF0RGF0ZXBpY2tlclBhcnNlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ubWF0RGF0ZXBpY2tlclBhcnNlJyk7XHJcbiAgLy8gICAgIGNhc2UgJ21heGxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1heGxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ21pbmxlbmd0aCc6XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLm1pbmxlbmd0aCcsIGUuZGF0YSk7XHJcbiAgLy8gICAgIGNhc2UgJ3Bvc2l0aXZlJzpcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaXNOYU4oTnVtYmVyKGUuZGF0YSkpID8gJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24uaW52YWxpZE51bWJlcicgOiAndWkuY29udHJvbHMudmFsaWRhdGlvbi5wb3NpdGl2ZScpO1xyXG4gIC8vICAgICBjYXNlICdjdXN0b20nOlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmRhdGEpO1xyXG4gIC8vICAgICBkZWZhdWx0OlxyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IG1heExlblJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb250cm9sLnZhbHVlICYmICh0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID4gKHRoaXMudmFsaWRhdG9ycz8ubWF4TGVuZ3RoIHx8IDApKTtcclxuICB9XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgLypcclxuICAgIGJ1ZCBwcmVzIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCBhIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXMgPT4genRyYXRpbWUgYWxlIGN1c3RvbSB2YWxpZGFjaVxyXG4gICAgYW5lYm8gcHJlcyBESSBqYWtvIHByb3ZpZGVycyBhIHBhayB0aGlzLmNvbnRyb2wgPSB2aXogbmdPbkluaXQgLSBwb2t1ZCBqZWogdnViZWMgcG90cmVidWplbVxyXG5cclxuICAgICAqL1xyXG4gICAgLy8gcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgIC8vIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIC8vIEBTZWxmKCkgcHJpdmF0ZSBjb250cm9sRGlyZWN0aXZlOiBOZ0NvbnRyb2wsXHJcbiAgICkge1xyXG4gICAgc3VwZXIobnVsbCwgY29udHJvbENvbnRhaW5lcik7XHJcblxyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgLy8gc3VwZXIoKTtcclxuICAvLyAgc3VwZXIodW5kZWZpbmVkLCAvKm5nQ29udHJvbCovIHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgLy8gc3VwZXIoY29udHJvbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjb250cm9sKTtcclxuICAgIC8vIGlmIChjb250cm9sKSB7XHJcbiAgICAvLyAgIGNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKG5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAvLyAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAvLyAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgIC8vICAgbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dDbGVhckJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmIHRoaXMuY29udHJvbD8udmFsdWUgIT09ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdwcm9iaWhhIHZ1YmVjIG9uaW5pdD8nKTtcclxuICAgIC8vIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZygnZnJvbSBuZ0NvbnRyb2wuLi4uPz8nKTtcclxuICAgIC8vICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgIC8vICAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5hcHBseVZhbGlkYXRvcnMoKTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbE5hbWUgP1xyXG4gICAgLy8gICAgICh0aGlzLmNvbnRyb2xDb250YWluZXIgYXMgRm9ybUdyb3VwRGlyZWN0aXZlKS5jb250cm9sLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgOiB0aGlzLmZvcm1Db250cm9sO1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoY29udHJvbC52YWxpZGF0b3IpO1xyXG4gICAgLy8gICB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiBjb25zb2xlLmxvZygnb25pdGluIHN1YicsIHYpKTtcclxuICAgIC8vICAgY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sO1xyXG4gICAgLy8gICBpZiAoY29udHJvbC5fbWFya0FzVG91Y2hlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgLy8gY29udHJvbC5fY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKCdvdmVycmlkaW5nIG1hcmtBc1RvdWNoZWQgZm9yJywgdGhpcy5mb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgLy8gICAgIGNvbnRyb2wuX21hcmtBc1RvdWNoZWQgPSBjb250cm9sLm1hcmtBc1RvdWNoZWQ7XHJcbiAgICAvLyAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkID0gKHtvbmx5U2VsZn06IHsgb25seVNlbGY/OiBib29sZWFuIH0gPSB7fSk6IHZvaWQgPT4ge1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coJ21hcmtpbmcgYXMgdG91Y2hlZCcsIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wudmFsdWUsIGNvbnRyb2wudmFsdWUsIHRoaXMueHh4LnZhbHVlLCBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAvLyAgICAgICBjb250cm9sLl9tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZn0pO1xyXG4gICAgLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiBjb250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCksIDEwMDApO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKGZvY3VzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvY3VzQ2hhbmdlZC5lbWl0KGZvY3VzKTtcclxuICB9XHJcblxyXG4gIG9uS2V5cHJlc3NlZCgkZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5rZXlQcmVzc2VkLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8vIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcclxuICAvLyB9XHJcblxyXG4gIC8vIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gIC8vICAgLy8gaXNEaXNhYmxlZCA/IHRoaXMuY29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgLy8gICAvLyB0aGlzLmNvbnRyb2wgPSBjb250cm9sO1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coY29udHJvbCwgY29udHJvbC52YWx1ZSwgY29udHJvbC5lcnJvcnMpO1xyXG4gIC8vICAgaWYgKHRoaXMudmFsdWUgPT09ICdlcnJvcicpIHtcclxuICAvLyAgICAgcmV0dXJuIHsgY3VzdG9tRXJyb3I6ICdtdWogZXJyb3InfVxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygnY3VzdG9tIHZhbGlkYXRlJyk7XHJcbiAgLy8gICAvLyByZXR1cm4gbnVsbDtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZygnd3JpdGV2YWx1ZTogJywgb2JqKTtcclxuICAvLyAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsdWUob2JqKTtcclxuICAvLyAgIC8vIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgLy8gICAvLyB0aGlzLmNvbnRyb2wuc2V0VmFsdWUob2JqKTtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBtb2RlbENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgY29uc29sZS5sb2coJGV2ZW50KTtcclxuICAvLyAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlKCRldmVudClcclxuICAvLyB9XHJcblxyXG4gIC8vIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMubGFiZWwsICd2YWxpZGF0ZScpO1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gIC8vICAgLy8gcmV0dXJuIHVuZGVmaW5lZDtcclxuICAvLyB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBhcmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudEZvcm1Db250cm9sLl9jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLmVycm9ycyk7XHJcbiAgICAvLyAvLyB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnNldEVycm9ycyggeyBjdXN0b206ICd4eHgnIH0pO1xyXG4gICAgLy8gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZSAyJywgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuZXJyb3JzO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnMsIGNvbnRyb2wuZXJyb3JzLCB0aGlzLnBhcmVudEZvcm1Db250cm9sLmVycm9ycywgdGhpcyk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5lcnJvcnM7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8dWktc2ltcGxlLWxheW91dCBbY3R4XT1cInRoaXNcIj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250cm9sLWNvbnRhaW5lclwiPlxyXG4gIDxpbnB1dCAjaW5wdXQgW25nQ2xhc3NdPVwie2NlbnRlcmVkOiBjZW50ZXJlZH1cIiBbdHlwZV09XCJ0eXBlXCIgW2Zvcm1Db250cm9sXT1cImNvbXBvbmVudEZvcm1Db250cm9sXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgKGtleWRvd24pPVwib25LZXlwcmVzc2VkKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cyh0cnVlKVwiIChibHVyKT1cIm9uRm9jdXMoZmFsc2UpXCIgLz5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1wcmVmaXhdXCI+PC9uZy1jb250ZW50PlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG5cclxuPC91aS1zaW1wbGUtbGF5b3V0PlxyXG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/radio";
4
+ export class RadioComponent {
5
+ constructor() {
6
+ this.color = 'primary';
7
+ }
8
+ }
9
+ RadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: RadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ RadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: RadioComponent, selector: "ui-radio", inputs: { value: "value", label: "label", color: "color" }, ngImport: i0, template: "<mat-radio-button [value]=\"value\" [color]=\"color\">\r\n {{label}}\r\n</mat-radio-button>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: RadioComponent, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: 'ui-radio', template: "<mat-radio-button [value]=\"value\" [color]=\"color\">\r\n {{label}}\r\n</mat-radio-button>\r\n" }]
14
+ }], propDecorators: { value: [{
15
+ type: Input
16
+ }], label: [{
17
+ type: Input
18
+ }], color: [{
19
+ type: Input
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLGNBQWM7SUFMM0I7UUFTVyxVQUFLLEdBQWtDLFNBQVMsQ0FBQTtLQUsxRDs7MkdBVFksY0FBYzsrRkFBZCxjQUFjLDRHQ1AzQixrR0FHQTsyRkRJYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFVBQVU7OEJBTVgsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLXJhZGlvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhZGlvLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvQ29tcG9uZW50IHsgLy8gZXh0ZW5kcyBVaVNpbXBsZUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHZhbHVlO1xyXG4gIEBJbnB1dCgpIGxhYmVsO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyA9ICdwcmltYXJ5J1xyXG5cclxuICAvLyBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xyXG4gIC8vICAgc3VwZXIobmdDb250cm9sKTtcclxuICAvLyB9XHJcbn1cclxuIiwiPG1hdC1yYWRpby1idXR0b24gW3ZhbHVlXT1cInZhbHVlXCIgW2NvbG9yXT1cImNvbG9yXCI+XHJcbiAge3tsYWJlbH19XHJcbjwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuIl19
@@ -0,0 +1,53 @@
1
+ import { Component, Input, Optional, Self } from '@angular/core';
2
+ import { UiSimpleComponent } from '../simple/ui-simple.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/radio";
7
+ import * as i4 from "../simple/ui-simple-layout.component";
8
+ export class RadioGroupComponent extends UiSimpleComponent {
9
+ constructor(control) {
10
+ super(control);
11
+ this.control = control;
12
+ this.id = Math.round(Math.random() * 999999);
13
+ this.displayAttribute = 'name';
14
+ this.groupName = 'radio-' + this.id;
15
+ this.optionEnabled = (option) => true;
16
+ }
17
+ // ngOnInit(): void {
18
+ // super.ngOnInit();
19
+ // }
20
+ ngOnChanges(changes) {
21
+ super.ngOnChanges(changes);
22
+ if (changes.options) {
23
+ this.cbxs = [];
24
+ changes.options.currentValue.forEach(cv => {
25
+ this.cbxs.push({
26
+ value: this.valueAttribute ? cv[this.valueAttribute] : cv,
27
+ label: cv[this.displayAttribute]
28
+ });
29
+ });
30
+ }
31
+ }
32
+ }
33
+ RadioGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: RadioGroupComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
34
+ RadioGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: RadioGroupComponent, selector: "ui-radio-group", inputs: { options: "options", displayAttribute: "displayAttribute", valueAttribute: "valueAttribute", groupName: "groupName", optionEnabled: "optionEnabled" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n <mat-radio-group [formControl]=\"componentFormControl\" [name]=\"groupName\" [class]=\"size\">\r\n\r\n <mat-radio-button *ngFor=\"let cbx of cbxs\" [value]=\"cbx.value\" >{{cbx.label}}</mat-radio-button>\r\n\r\n </mat-radio-group>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host mat-radio-group{display:flex;flex-direction:column}:host mat-radio-button{margin-top:.2em;margin-bottom:.2em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: i3.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i4.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }] });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: RadioGroupComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'ui-radio-group', template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n <mat-radio-group [formControl]=\"componentFormControl\" [name]=\"groupName\" [class]=\"size\">\r\n\r\n <mat-radio-button *ngFor=\"let cbx of cbxs\" [value]=\"cbx.value\" >{{cbx.label}}</mat-radio-button>\r\n\r\n </mat-radio-group>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host mat-radio-group{display:flex;flex-direction:column}:host mat-radio-button{margin-top:.2em;margin-bottom:.2em}\n"] }]
38
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
39
+ type: Optional
40
+ }, {
41
+ type: Self
42
+ }] }]; }, propDecorators: { options: [{
43
+ type: Input
44
+ }], displayAttribute: [{
45
+ type: Input
46
+ }], valueAttribute: [{
47
+ type: Input
48
+ }], groupName: [{
49
+ type: Input
50
+ }], optionEnabled: [{
51
+ type: Input
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9yYWRpby1ncm91cC9yYWRpby1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBZWxFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFheEQsWUFBdUMsT0FBa0I7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRHNCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFWekQsT0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRy9CLHFCQUFnQixHQUFHLE1BQU0sQ0FBQztRQUcxQixjQUFTLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFL0Isa0JBQWEsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBSS9DLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLElBQUk7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6RCxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDakMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O2dIQWhDVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixrUUNoQmhDLHNUQVNBOzJGRE9hLG1CQUFtQjtrQkFaL0IsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQXdCYixRQUFROzswQkFBSSxJQUFJOzRDQVJwQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktcmFkaW8tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICAvLyBwcm92aWRlcnM6IFtcbiAgLy8gICB7XG4gIC8vICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAvLyAgICAgbXVsdGk6IHRydWUsXG4gIC8vICAgICB1c2VFeGlzdGluZzogQ2hlY2tib3hHcm91cENvbXBvbmVudFxuICAvLyAgIH1cbiAgLy8gXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0dyb3VwQ29tcG9uZW50IGV4dGVuZHMgVWlTaW1wbGVDb21wb25lbnQgaW1wbGVtZW50cyAvKk9uSW5pdCwgKi9PbkNoYW5nZXMge1xuXG4gIGNieHM6IGFueTtcbiAgaWQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiA5OTk5OTkpO1xuXG4gIEBJbnB1dCgpIG9wdGlvbnM7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGUgPSAnbmFtZSc7XG4gIEBJbnB1dCgpIHZhbHVlQXR0cmlidXRlO1xuXG4gIEBJbnB1dCgpIGdyb3VwTmFtZSA9ICdyYWRpby0nICsgdGhpcy5pZDtcblxuICBASW5wdXQoKSBvcHRpb25FbmFibGVkID0gKG9wdGlvbjogYW55KSA9PiB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2w6IE5nQ29udHJvbCkge1xuICAgIHN1cGVyKGNvbnRyb2wpO1xuICB9XG5cbiAgLy8gbmdPbkluaXQoKTogdm9pZCB7XG4gIC8vICAgc3VwZXIubmdPbkluaXQoKTtcbiAgLy8gfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmNieHMgPSBbXTtcbiAgICAgIGNoYW5nZXMub3B0aW9ucy5jdXJyZW50VmFsdWUuZm9yRWFjaChjdiA9PiB7XG4gICAgICAgIHRoaXMuY2J4cy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZUF0dHJpYnV0ZSA/IGN2W3RoaXMudmFsdWVBdHRyaWJ1dGVdIDogY3YsXG4gICAgICAgICAgbGFiZWw6IGN2W3RoaXMuZGlzcGxheUF0dHJpYnV0ZV1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy5jb21wb25lbnRGb3JtQ29udHJvbCkge1xuICAvLyAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWx1ZShvYmopO1xuICAvLyAgIH1cbiAgLy8gfVxufVxuIiwiPHVpLXNpbXBsZS1sYXlvdXQgW2N0eF09XCJ0aGlzXCI+XHJcblxyXG4gIDxtYXQtcmFkaW8tZ3JvdXAgW2Zvcm1Db250cm9sXT1cImNvbXBvbmVudEZvcm1Db250cm9sXCIgW25hbWVdPVwiZ3JvdXBOYW1lXCIgW2NsYXNzXT1cInNpemVcIj5cclxuXHJcbiAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgY2J4IG9mIGNieHNcIiBbdmFsdWVdPVwiY2J4LnZhbHVlXCIgPnt7Y2J4LmxhYmVsfX08L21hdC1yYWRpby1idXR0b24+XHJcblxyXG4gIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuPC91aS1zaW1wbGUtbGF5b3V0PlxyXG4iXX0=
@@ -0,0 +1,91 @@
1
+ import { Component, Inject, Input, Optional, Self, ViewChild } from '@angular/core';
2
+ import { UiSimpleComponent } from '../simple/ui-simple.component';
3
+ import { UI_TRANSLATESERVICE } from '../services/ui-translate.service';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/material/icon";
8
+ import * as i4 from "@angular/material/select";
9
+ import * as i5 from "@angular/material/core";
10
+ import * as i6 from "../button/button.component";
11
+ import * as i7 from "../simple/ui-simple-layout.component";
12
+ export class SelectComponent extends UiSimpleComponent {
13
+ constructor(ngControl, translateService) {
14
+ super(ngControl);
15
+ this.ngControl = ngControl;
16
+ this.translateService = translateService;
17
+ this.multiple = false;
18
+ this.options = [];
19
+ this.allowEmptySelection = false;
20
+ this.lastCount = -1;
21
+ this.overoption = false;
22
+ this.optionToValue = (o) => this.valueAttribute ? o[this.valueAttribute] : o;
23
+ }
24
+ ngOnInit() {
25
+ super.ngOnInit();
26
+ if (this.optionFormatter === undefined) {
27
+ this.optionFormatter = o => this.displayAttribute ? o[this.displayAttribute] : o;
28
+ }
29
+ if (this.multiple && this.componentFormControl) {
30
+ this.lastCount = this.componentFormControl.value.length;
31
+ this.componentFormControl.valueChanges.subscribe(v => {
32
+ if (v.length === 1 && this.lastCount === 0 && this.overoption) {
33
+ this.select.selectionChange.emit(this.optionToValue(v));
34
+ this.select.close();
35
+ }
36
+ this.lastCount = v.length;
37
+ });
38
+ }
39
+ }
40
+ selectOption(o, select) {
41
+ select.selectionChange.emit(this.optionToValue(o));
42
+ select.close();
43
+ }
44
+ selectAll() {
45
+ this.componentFormControl.setValue(this.options.map(o => this.optionToValue(o)));
46
+ }
47
+ clearAll() {
48
+ this.componentFormControl.setValue([]);
49
+ }
50
+ setDisabledState(isDisabled) {
51
+ }
52
+ }
53
+ SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SelectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: UI_TRANSLATESERVICE }], target: i0.ɵɵFactoryTarget.Component });
54
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: SelectComponent, selector: "ui-select", inputs: { multiple: "multiple", triggerFormatter: "triggerFormatter", valueAttribute: "valueAttribute", resetText: "resetText", displayAttribute: "displayAttribute", options: "options", optionFormatter: "optionFormatter", optionTemplateRef: "optionTemplateRef", triggerTemplateRef: "triggerTemplateRef", panelClass: "panelClass", allowEmptySelection: "allowEmptySelection" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<mat-select class=\"control-container\" #select [panelClass]=\"panelClass\" [placeholder]=\"placeholder\" [formControl]=\"componentFormControl\" [multiple]=\"multiple\">\r\n\r\n <mat-select-trigger *ngIf=\"triggerTemplateRef\">\r\n <ng-template [ngTemplateOutlet]=\"triggerTemplateRef\" [ngTemplateOutletContext]=\"{option:componentFormControl?.value}\" ></ng-template>\r\n </mat-select-trigger>\r\n\r\n <mat-select-trigger *ngIf=\"triggerFormatter\">{{componentFormControl?.value ? triggerFormatter(componentFormControl?.value) : ''}}</mat-select-trigger>\r\n\r\n <mat-option *ngIf=\"resetText\">{{resetText}}</mat-option>\r\n\r\n <mat-option *ngFor=\"let o of options\" [value]=\"optionToValue(o)\" >\r\n\r\n <div class=\"option-container\" (mouseenter)=\"overoption = true;\" (mouseleave)=\"overoption = false\">\r\n\r\n <ng-container *ngIf=\"optionTemplateRef\">\r\n <ng-template [ngTemplateOutlet]=\"optionTemplateRef\" [ngTemplateOutletContext]=\"{option:o}\" ></ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!optionTemplateRef\">\r\n {{optionFormatter(o)}}\r\n </ng-container>\r\n\r\n <mat-icon class=\"select-one\" *ngIf=\"multiple && componentFormControl?.value?.length === 0\" (click)=\"selectOption(o, select)\">north_west</mat-icon>\r\n </div>\r\n\r\n </mat-option>\r\n\r\n <div class=\"buttons\" *ngIf=\"multiple\">\r\n <ui-button style=\"margin-right: auto;\" [kind]=\"'basic'\" [size]=\"'smaller'\" [label]=\"translateService.instant('ui.controls.ui-select.clear-selection')\" (click)=\"clearAll()\"></ui-button>\r\n <ui-button [size]=\"'smaller'\" [label]=\"translateService.instant('ui.controls.ui-select.all')\" (click)=\"selectAll()\"></ui-button>\r\n <ui-button [size]=\"'smaller'\" style=\"padding-left: 0.2em;\" [disabled]=\"componentFormControl?.value?.length === 0 && !allowEmptySelection\" [label]=\"translateService.instant('ui.controls.ui-select.apply-selection') + (componentFormControl?.value?.length > 0 ? ' (' + componentFormControl.value.length + ')' : '')\" (click)=\"select.close()\"></ui-button>\r\n </div>\r\n\r\n</mat-select>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{width:100%}:host .control-container{width:100%;position:relative}:host ::ng-deep [slot=suffix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep input.has-suffix,:host ::ng-deep textarea.has-suffix,:host ::ng-deep ::ng-deep .mat-select-trigger.has-suffix,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.has-suffix{padding-right:1.8em}:host ::ng-deep input.centered,:host ::ng-deep textarea.centered,:host ::ng-deep ::ng-deep .mat-select-trigger.centered,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.centered{text-align:center}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", "::ng-deep .mat-mdc-select-panel{padding:0!important}::ng-deep .mat-mdc-select-arrow-wrapper{height:1px!important}::ng-deep .mat-select-panel .select-one,::ng-deep .mat-mdc-select-panel .select-one{position:absolute;right:0;top:.3em;display:none}::ng-deep .mat-select-panel .mat-option-text:hover .select-one,::ng-deep .mat-select-panel .mat-mdc-option:hover .select-one,::ng-deep .mat-mdc-select-panel .mat-option-text:hover .select-one,::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover .select-one{display:block}::ng-deep .mat-select-panel .buttons,::ng-deep .mat-mdc-select-panel .buttons{padding:.2em;background-color:#fff;display:flex;position:sticky;bottom:0}\n"], dependencies: [{ 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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.ButtonComponent, selector: "ui-button", inputs: ["type", "matIconPrefix", "label", "disabled", "busy", "kind", "color", "size", "formInvalid"] }, { kind: "component", type: i7.UiSimpleLayoutComponent, selector: "ui-simple-layout", inputs: ["ctx"] }] });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SelectComponent, decorators: [{
56
+ type: Component,
57
+ args: [{ selector: 'ui-select', template: "<ui-simple-layout [ctx]=\"this\">\r\n\r\n<mat-select class=\"control-container\" #select [panelClass]=\"panelClass\" [placeholder]=\"placeholder\" [formControl]=\"componentFormControl\" [multiple]=\"multiple\">\r\n\r\n <mat-select-trigger *ngIf=\"triggerTemplateRef\">\r\n <ng-template [ngTemplateOutlet]=\"triggerTemplateRef\" [ngTemplateOutletContext]=\"{option:componentFormControl?.value}\" ></ng-template>\r\n </mat-select-trigger>\r\n\r\n <mat-select-trigger *ngIf=\"triggerFormatter\">{{componentFormControl?.value ? triggerFormatter(componentFormControl?.value) : ''}}</mat-select-trigger>\r\n\r\n <mat-option *ngIf=\"resetText\">{{resetText}}</mat-option>\r\n\r\n <mat-option *ngFor=\"let o of options\" [value]=\"optionToValue(o)\" >\r\n\r\n <div class=\"option-container\" (mouseenter)=\"overoption = true;\" (mouseleave)=\"overoption = false\">\r\n\r\n <ng-container *ngIf=\"optionTemplateRef\">\r\n <ng-template [ngTemplateOutlet]=\"optionTemplateRef\" [ngTemplateOutletContext]=\"{option:o}\" ></ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!optionTemplateRef\">\r\n {{optionFormatter(o)}}\r\n </ng-container>\r\n\r\n <mat-icon class=\"select-one\" *ngIf=\"multiple && componentFormControl?.value?.length === 0\" (click)=\"selectOption(o, select)\">north_west</mat-icon>\r\n </div>\r\n\r\n </mat-option>\r\n\r\n <div class=\"buttons\" *ngIf=\"multiple\">\r\n <ui-button style=\"margin-right: auto;\" [kind]=\"'basic'\" [size]=\"'smaller'\" [label]=\"translateService.instant('ui.controls.ui-select.clear-selection')\" (click)=\"clearAll()\"></ui-button>\r\n <ui-button [size]=\"'smaller'\" [label]=\"translateService.instant('ui.controls.ui-select.all')\" (click)=\"selectAll()\"></ui-button>\r\n <ui-button [size]=\"'smaller'\" style=\"padding-left: 0.2em;\" [disabled]=\"componentFormControl?.value?.length === 0 && !allowEmptySelection\" [label]=\"translateService.instant('ui.controls.ui-select.apply-selection') + (componentFormControl?.value?.length > 0 ? ' (' + componentFormControl.value.length + ')' : '')\" (click)=\"select.close()\"></ui-button>\r\n </div>\r\n\r\n</mat-select>\r\n\r\n</ui-simple-layout>\r\n", styles: [":host{width:100%}:host .control-container{width:100%;position:relative}:host ::ng-deep [slot=suffix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);right:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep [slot=prefix]{position:absolute;cursor:pointer;user-select:none;transition:color .25s;top:calc(50% - .5em);left:.2em;width:1em;height:1em;font-size:1.5em}:host ::ng-deep input,:host ::ng-deep textarea,:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{resize:none;width:100%;line-height:1.2em;font-size:1em;outline:none;border-style:solid;transition:border-color 333ms}:host ::ng-deep input.has-suffix,:host ::ng-deep textarea.has-suffix,:host ::ng-deep ::ng-deep .mat-select-trigger.has-suffix,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.has-suffix{padding-right:1.8em}:host ::ng-deep input.centered,:host ::ng-deep textarea.centered,:host ::ng-deep ::ng-deep .mat-select-trigger.centered,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger.centered{text-align:center}:host ::ng-deep textarea.autoresize{box-sizing:content-box;width:calc(100% - 1.4em)}:host ::ng-deep ::ng-deep .mat-select-trigger,:host ::ng-deep ::ng-deep .mat-mdc-select-trigger{height:100%}:host ::ng-deep ::ng-deep .mat-select-value,:host ::ng-deep ::ng-deep .mat-mdc-select-value{vertical-align:middle}::ng-deep ui-input{display:block}\n", "::ng-deep .mat-mdc-select-panel{padding:0!important}::ng-deep .mat-mdc-select-arrow-wrapper{height:1px!important}::ng-deep .mat-select-panel .select-one,::ng-deep .mat-mdc-select-panel .select-one{position:absolute;right:0;top:.3em;display:none}::ng-deep .mat-select-panel .mat-option-text:hover .select-one,::ng-deep .mat-select-panel .mat-mdc-option:hover .select-one,::ng-deep .mat-mdc-select-panel .mat-option-text:hover .select-one,::ng-deep .mat-mdc-select-panel .mat-mdc-option:hover .select-one{display:block}::ng-deep .mat-select-panel .buttons,::ng-deep .mat-mdc-select-panel .buttons{padding:.2em;background-color:#fff;display:flex;position:sticky;bottom:0}\n"] }]
58
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
59
+ type: Optional
60
+ }, {
61
+ type: Self
62
+ }] }, { type: undefined, decorators: [{
63
+ type: Inject,
64
+ args: [UI_TRANSLATESERVICE]
65
+ }] }]; }, propDecorators: { multiple: [{
66
+ type: Input
67
+ }], triggerFormatter: [{
68
+ type: Input
69
+ }], valueAttribute: [{
70
+ type: Input
71
+ }], resetText: [{
72
+ type: Input
73
+ }], displayAttribute: [{
74
+ type: Input
75
+ }], options: [{
76
+ type: Input
77
+ }], optionFormatter: [{
78
+ type: Input
79
+ }], optionTemplateRef: [{
80
+ type: Input
81
+ }], triggerTemplateRef: [{
82
+ type: Input
83
+ }], panelClass: [{
84
+ type: Input
85
+ }], allowEmptySelection: [{
86
+ type: Input
87
+ }], select: [{
88
+ type: ViewChild,
89
+ args: ['select']
90
+ }] } });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxJQUFJLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE9BQU8sRUFBdUIsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7O0FBUTVGLE1BQU0sT0FBTyxlQUFnQixTQUFRLGlCQUFpQjtJQW9CcEQsWUFBdUMsU0FBb0IsRUFDWCxnQkFBcUM7UUFDbkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRm9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDWCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBbkI1RSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBTWpCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLcEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBSXJDLGNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUF3Qm5CLGtCQUFhLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQW5CN0UsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFJRCxZQUFZLENBQUMsQ0FBTSxFQUFFLE1BQWlCO1FBQ3BDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtJQUNwQyxDQUFDOzs0R0ExRFUsZUFBZSx1RUFxQk4sbUJBQW1CO2dHQXJCNUIsZUFBZSxraUJDWjVCLDBxRUFzQ0E7MkZEMUJhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsV0FBVzs7MEJBeUJSLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixNQUFNOzJCQUFDLG1CQUFtQjs0Q0FuQjlCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFZSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFNlbGYsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVaVNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uL3NpbXBsZS91aS1zaW1wbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgSVVpVHJhbnNsYXRlU2VydmljZSwgVUlfVFJBTlNMQVRFU0VSVklDRSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4uL3NpbXBsZS91aS1zaW1wbGUtbGF5b3V0LmNvbXBvbmVudC5zY3NzJywgJy4vc2VsZWN0LmNvbXBvbmVudC5zY3NzJyBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgVWlTaW1wbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRyaWdnZXJGb3JtYXR0ZXI6IGFueTtcclxuICBASW5wdXQoKSB2YWx1ZUF0dHJpYnV0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHJlc2V0VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBvcHRpb25Gb3JtYXR0ZXI6ICgoYXJnOiBhbnkpID0+IHN0cmluZyB8IHVuZGVmaW5lZCkgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uVGVtcGxhdGVSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHRyaWdnZXJUZW1wbGF0ZVJlZj86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcGFuZWxDbGFzcztcclxuICBASW5wdXQoKSBhbGxvd0VtcHR5U2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdCcpIHNlbGVjdDogTWF0U2VsZWN0O1xyXG5cclxuICBsYXN0Q291bnQgPSAtMTtcclxuICBvdmVyb3B0aW9uID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoVUlfVFJBTlNMQVRFU0VSVklDRSkgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IElVaVRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHN1cGVyKG5nQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25Gb3JtYXR0ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbkZvcm1hdHRlciA9IG8gPT4gdGhpcy5kaXNwbGF5QXR0cmlidXRlID8gb1t0aGlzLmRpc3BsYXlBdHRyaWJ1dGVdIDogbztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5sYXN0Q291bnQgPSB0aGlzLmNvbXBvbmVudEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIGlmICh2Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxhc3RDb3VudCA9PT0gMCAmJiB0aGlzLm92ZXJvcHRpb24pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0LnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMub3B0aW9uVG9WYWx1ZSh2KSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RDb3VudCA9IHYubGVuZ3RoO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wdGlvblRvVmFsdWUgPSAobzogYW55KSA9PiB0aGlzLnZhbHVlQXR0cmlidXRlID8gb1t0aGlzLnZhbHVlQXR0cmlidXRlXSA6IG87XHJcblxyXG4gIHNlbGVjdE9wdGlvbihvOiBhbnksIHNlbGVjdDogTWF0U2VsZWN0KSB7XHJcbiAgICBzZWxlY3Quc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5vcHRpb25Ub1ZhbHVlKG8pKTtcclxuICAgIHNlbGVjdC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsKCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMubWFwKG8gPT4gdGhpcy5vcHRpb25Ub1ZhbHVlKG8pKSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50Rm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgfVxyXG59XHJcbiIsIjx1aS1zaW1wbGUtbGF5b3V0IFtjdHhdPVwidGhpc1wiPlxyXG5cclxuPG1hdC1zZWxlY3QgY2xhc3M9XCJjb250cm9sLWNvbnRhaW5lclwiICNzZWxlY3QgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtmb3JtQ29udHJvbF09XCJjb21wb25lbnRGb3JtQ29udHJvbFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiPlxyXG5cclxuICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlUmVmXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlclRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntvcHRpb246Y29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlfVwiID48L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG5cclxuICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPVwidHJpZ2dlckZvcm1hdHRlclwiPnt7Y29tcG9uZW50Rm9ybUNvbnRyb2w/LnZhbHVlID8gdHJpZ2dlckZvcm1hdHRlcihjb21wb25lbnRGb3JtQ29udHJvbD8udmFsdWUpIDogJyd9fTwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG5cclxuICA8bWF0LW9wdGlvbiAqbmdJZj1cInJlc2V0VGV4dFwiPnt7cmVzZXRUZXh0fX08L21hdC1vcHRpb24+XHJcblxyXG4gIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvIG9mIG9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uVG9WYWx1ZShvKVwiID5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cIm92ZXJvcHRpb24gPSB0cnVlO1wiIChtb3VzZWxlYXZlKT1cIm92ZXJvcHRpb24gPSBmYWxzZVwiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntvcHRpb246b31cIiA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW9wdGlvblRlbXBsYXRlUmVmXCI+XHJcbiAgICAgICAge3tvcHRpb25Gb3JtYXR0ZXIobyl9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNlbGVjdC1vbmVcIiAqbmdJZj1cIm11bHRpcGxlICYmIGNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZT8ubGVuZ3RoID09PSAwXCIgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvLCBzZWxlY3QpXCI+bm9ydGhfd2VzdDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiICpuZ0lmPVwibXVsdGlwbGVcIj5cclxuICAgIDx1aS1idXR0b24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IGF1dG87XCIgW2tpbmRdPVwiJ2Jhc2ljJ1wiIFtzaXplXT1cIidzbWFsbGVyJ1wiIFtsYWJlbF09XCJ0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLXNlbGVjdC5jbGVhci1zZWxlY3Rpb24nKVwiIChjbGljayk9XCJjbGVhckFsbCgpXCI+PC91aS1idXR0b24+XHJcbiAgICA8dWktYnV0dG9uIFtzaXplXT1cIidzbWFsbGVyJ1wiIFtsYWJlbF09XCJ0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3VpLmNvbnRyb2xzLnVpLXNlbGVjdC5hbGwnKVwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiPjwvdWktYnV0dG9uPlxyXG4gICAgPHVpLWJ1dHRvbiBbc2l6ZV09XCInc21hbGxlcidcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMC4yZW07XCIgW2Rpc2FibGVkXT1cImNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZT8ubGVuZ3RoID09PSAwICYmICFhbGxvd0VtcHR5U2VsZWN0aW9uXCIgW2xhYmVsXT1cInRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgndWkuY29udHJvbHMudWktc2VsZWN0LmFwcGx5LXNlbGVjdGlvbicpICsgKGNvbXBvbmVudEZvcm1Db250cm9sPy52YWx1ZT8ubGVuZ3RoID4gMCA/ICcgKCcgKyBjb21wb25lbnRGb3JtQ29udHJvbC52YWx1ZS5sZW5ndGggKyAnKScgOiAnJylcIiAoY2xpY2spPVwic2VsZWN0LmNsb3NlKClcIj48L3VpLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbjwvbWF0LXNlbGVjdD5cclxuXHJcbjwvdWktc2ltcGxlLWxheW91dD5cclxuIl19