@skyux/forms 5.0.0 → 5.5.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/bundles/skyux-forms-testing.umd.js +7 -4
- package/bundles/skyux-forms.umd.js +343 -367
- package/documentation.json +1700 -1244
- package/esm2015/index.js +43 -0
- package/esm2015/index.js.map +1 -0
- package/esm2015/lib/modules/character-counter/character-counter-indicator.component.js +37 -0
- package/esm2015/lib/modules/character-counter/character-counter-indicator.component.js.map +1 -0
- package/esm2015/lib/modules/character-counter/character-counter.directive.js +83 -0
- package/esm2015/lib/modules/character-counter/character-counter.directive.js.map +1 -0
- package/esm2015/lib/modules/character-counter/character-counter.module.js +46 -0
- package/esm2015/lib/modules/character-counter/character-counter.module.js.map +1 -0
- package/esm2015/lib/modules/checkbox/checkbox-change.js +6 -0
- package/esm2015/lib/modules/checkbox/checkbox-change.js.map +1 -0
- package/esm2015/lib/modules/checkbox/checkbox-label.component.js +17 -0
- package/esm2015/lib/modules/checkbox/checkbox-label.component.js.map +1 -0
- package/esm2015/lib/modules/checkbox/checkbox-required-validator.directive.js +32 -0
- package/esm2015/lib/modules/checkbox/checkbox-required-validator.directive.js.map +1 -0
- package/esm2015/lib/modules/checkbox/checkbox.component.js +240 -0
- package/esm2015/lib/modules/checkbox/checkbox.component.js.map +1 -0
- package/esm2015/lib/modules/checkbox/checkbox.module.js +34 -0
- package/esm2015/lib/modules/checkbox/checkbox.module.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-attachment-label.component.js +19 -0
- package/esm2015/lib/modules/file-attachment/file-attachment-label.component.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-attachment.component.js +331 -0
- package/esm2015/lib/modules/file-attachment/file-attachment.component.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-attachment.service.js +94 -0
- package/esm2015/lib/modules/file-attachment/file-attachment.service.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-attachments.module.js +68 -0
- package/esm2015/lib/modules/file-attachment/file-attachments.module.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-drop.component.js +223 -0
- package/esm2015/lib/modules/file-attachment/file-drop.component.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-item-error-type.js +2 -0
- package/esm2015/lib/modules/file-attachment/file-item-error-type.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-item.component.js +114 -0
- package/esm2015/lib/modules/file-attachment/file-item.component.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-item.js +2 -0
- package/esm2015/lib/modules/file-attachment/file-item.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-item.service.js +72 -0
- package/esm2015/lib/modules/file-attachment/file-item.service.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-link.js +2 -0
- package/esm2015/lib/modules/file-attachment/file-link.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/file-size.pipe.js +61 -0
- package/esm2015/lib/modules/file-attachment/file-size.pipe.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/types/file-attachment-change.js +2 -0
- package/esm2015/lib/modules/file-attachment/types/file-attachment-change.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/types/file-attachment-click.js +2 -0
- package/esm2015/lib/modules/file-attachment/types/file-attachment-click.js.map +1 -0
- package/esm2015/lib/modules/file-attachment/types/file-drop-change.js +2 -0
- package/esm2015/lib/modules/file-attachment/types/file-drop-change.js.map +1 -0
- package/esm2015/lib/modules/input-box/input-box-adapter.service.js +35 -0
- package/esm2015/lib/modules/input-box/input-box-adapter.service.js.map +1 -0
- package/esm2015/lib/modules/input-box/input-box-host.service.js +19 -0
- package/esm2015/lib/modules/input-box/input-box-host.service.js.map +1 -0
- package/esm2015/lib/modules/input-box/input-box-populate-args.js +2 -0
- package/esm2015/lib/modules/input-box/input-box-populate-args.js.map +1 -0
- package/esm2015/lib/modules/input-box/input-box.component.js +97 -0
- package/esm2015/lib/modules/input-box/input-box.component.js.map +1 -0
- package/esm2015/lib/modules/input-box/input-box.module.js +19 -0
- package/esm2015/lib/modules/input-box/input-box.module.js.map +1 -0
- package/esm2015/lib/modules/radio/radio-group.component.js +223 -0
- package/esm2015/lib/modules/radio/radio-group.component.js.map +1 -0
- package/esm2015/lib/modules/radio/radio-label.component.js +26 -0
- package/esm2015/lib/modules/radio/radio-label.component.js.map +1 -0
- package/esm2015/lib/modules/radio/radio.component.js +262 -0
- package/esm2015/lib/modules/radio/radio.component.js.map +1 -0
- package/esm2015/lib/modules/radio/radio.module.js +28 -0
- package/esm2015/lib/modules/radio/radio.module.js.map +1 -0
- package/esm2015/lib/modules/radio/types/radio-change.js +2 -0
- package/esm2015/lib/modules/radio/types/radio-change.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box-adapter.service.js +124 -0
- package/esm2015/lib/modules/selection-box/selection-box-adapter.service.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box-description.component.js +17 -0
- package/esm2015/lib/modules/selection-box/selection-box-description.component.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box-grid.component.js +132 -0
- package/esm2015/lib/modules/selection-box/selection-box-grid.component.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box-header.component.js +17 -0
- package/esm2015/lib/modules/selection-box/selection-box-header.component.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box.component.js +107 -0
- package/esm2015/lib/modules/selection-box/selection-box.component.js.map +1 -0
- package/esm2015/lib/modules/selection-box/selection-box.module.js +40 -0
- package/esm2015/lib/modules/selection-box/selection-box.module.js.map +1 -0
- package/esm2015/lib/modules/selection-box/types/selection-box-grid-align-items-type.js +2 -0
- package/esm2015/lib/modules/selection-box/types/selection-box-grid-align-items-type.js.map +1 -0
- package/esm2015/lib/modules/selection-box/types/selection-box-grid-align-items.js +2 -0
- package/esm2015/lib/modules/selection-box/types/selection-box-grid-align-items.js.map +1 -0
- package/esm2015/lib/modules/shared/forms-utility.js +26 -0
- package/esm2015/lib/modules/shared/forms-utility.js.map +1 -0
- package/esm2015/lib/modules/shared/sky-forms-resources.module.js +89 -0
- package/esm2015/lib/modules/shared/sky-forms-resources.module.js.map +1 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch-label.component.js +18 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch-label.component.js.map +1 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch.component.js +158 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch.component.js.map +1 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch.module.js +20 -0
- package/esm2015/lib/modules/toggle-switch/toggle-switch.module.js.map +1 -0
- package/esm2015/lib/modules/toggle-switch/types/toggle-switch-change.js +2 -0
- package/esm2015/lib/modules/toggle-switch/types/toggle-switch-change.js.map +1 -0
- package/esm2015/skyux-forms.js +2 -2
- package/esm2015/skyux-forms.js.map +1 -0
- package/esm2015/testing/checkbox-fixture.js +6 -3
- package/esm2015/testing/checkbox-fixture.js.map +1 -0
- package/esm2015/testing/public-api.js +1 -1
- package/esm2015/testing/public-api.js.map +1 -0
- package/esm2015/testing/skyux-forms-testing.js +1 -1
- package/esm2015/testing/skyux-forms-testing.js.map +1 -0
- package/fesm2015/skyux-forms-testing.js +5 -2
- package/fesm2015/skyux-forms-testing.js.map +1 -1
- package/fesm2015/skyux-forms.js +333 -355
- package/fesm2015/skyux-forms.js.map +1 -1
- package/index.d.ts +40 -0
- package/{modules → lib/modules}/character-counter/character-counter-indicator.component.d.ts +0 -0
- package/{modules → lib/modules}/character-counter/character-counter.directive.d.ts +0 -0
- package/{modules → lib/modules}/character-counter/character-counter.module.d.ts +0 -0
- package/{modules → lib/modules}/checkbox/checkbox-change.d.ts +0 -0
- package/{modules → lib/modules}/checkbox/checkbox-label.component.d.ts +0 -0
- package/{modules → lib/modules}/checkbox/checkbox-required-validator.directive.d.ts +0 -0
- package/{modules → lib/modules}/checkbox/checkbox.component.d.ts +3 -3
- package/{modules → lib/modules}/checkbox/checkbox.module.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-attachment-label.component.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-attachment.component.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-attachment.service.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-attachments.module.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-drop.component.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-item-error-type.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-item.component.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-item.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-item.service.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-link.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/file-size.pipe.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/types/file-attachment-change.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/types/file-attachment-click.d.ts +0 -0
- package/{modules → lib/modules}/file-attachment/types/file-drop-change.d.ts +0 -0
- package/{modules → lib/modules}/input-box/input-box-adapter.service.d.ts +0 -0
- package/{modules → lib/modules}/input-box/input-box-host.service.d.ts +0 -0
- package/{modules → lib/modules}/input-box/input-box-populate-args.d.ts +0 -0
- package/{modules → lib/modules}/input-box/input-box.component.d.ts +0 -0
- package/{modules → lib/modules}/input-box/input-box.module.d.ts +0 -0
- package/{modules → lib/modules}/radio/radio-group.component.d.ts +2 -2
- package/{modules → lib/modules}/radio/radio-label.component.d.ts +0 -0
- package/{modules → lib/modules}/radio/radio.component.d.ts +0 -0
- package/{modules → lib/modules}/radio/radio.module.d.ts +0 -0
- package/{modules → lib/modules}/radio/types/radio-change.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box-adapter.service.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box-description.component.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box-grid.component.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box-header.component.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box.component.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/selection-box.module.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/types/selection-box-grid-align-items-type.d.ts +0 -0
- package/{modules → lib/modules}/selection-box/types/selection-box-grid-align-items.d.ts +0 -0
- package/{modules → lib/modules}/shared/forms-utility.d.ts +0 -0
- package/{modules → lib/modules}/shared/sky-forms-resources.module.d.ts +0 -0
- package/{modules → lib/modules}/toggle-switch/toggle-switch-label.component.d.ts +0 -0
- package/{modules → lib/modules}/toggle-switch/toggle-switch.component.d.ts +0 -0
- package/{modules → lib/modules}/toggle-switch/toggle-switch.module.d.ts +0 -0
- package/{modules → lib/modules}/toggle-switch/types/toggle-switch-change.d.ts +0 -0
- package/package.json +8 -8
- package/skyux-forms.d.ts +1 -1
- package/LICENSE +0 -21
- package/bundles/skyux-forms-testing.umd.js.map +0 -1
- package/bundles/skyux-forms.umd.js.map +0 -1
- package/esm2015/modules/character-counter/character-counter-indicator.component.js +0 -37
- package/esm2015/modules/character-counter/character-counter.directive.js +0 -80
- package/esm2015/modules/character-counter/character-counter.module.js +0 -46
- package/esm2015/modules/checkbox/checkbox-change.js +0 -6
- package/esm2015/modules/checkbox/checkbox-label.component.js +0 -17
- package/esm2015/modules/checkbox/checkbox-required-validator.directive.js +0 -31
- package/esm2015/modules/checkbox/checkbox.component.js +0 -238
- package/esm2015/modules/checkbox/checkbox.module.js +0 -44
- package/esm2015/modules/file-attachment/file-attachment-label.component.js +0 -21
- package/esm2015/modules/file-attachment/file-attachment.component.js +0 -324
- package/esm2015/modules/file-attachment/file-attachment.service.js +0 -92
- package/esm2015/modules/file-attachment/file-attachments.module.js +0 -74
- package/esm2015/modules/file-attachment/file-drop.component.js +0 -226
- package/esm2015/modules/file-attachment/file-item-error-type.js +0 -2
- package/esm2015/modules/file-attachment/file-item.component.js +0 -113
- package/esm2015/modules/file-attachment/file-item.js +0 -2
- package/esm2015/modules/file-attachment/file-item.service.js +0 -69
- package/esm2015/modules/file-attachment/file-link.js +0 -2
- package/esm2015/modules/file-attachment/file-size.pipe.js +0 -58
- package/esm2015/modules/file-attachment/types/file-attachment-change.js +0 -2
- package/esm2015/modules/file-attachment/types/file-attachment-click.js +0 -2
- package/esm2015/modules/file-attachment/types/file-drop-change.js +0 -2
- package/esm2015/modules/input-box/input-box-adapter.service.js +0 -35
- package/esm2015/modules/input-box/input-box-host.service.js +0 -19
- package/esm2015/modules/input-box/input-box-populate-args.js +0 -2
- package/esm2015/modules/input-box/input-box.component.js +0 -103
- package/esm2015/modules/input-box/input-box.module.js +0 -30
- package/esm2015/modules/radio/radio-group.component.js +0 -225
- package/esm2015/modules/radio/radio-label.component.js +0 -26
- package/esm2015/modules/radio/radio.component.js +0 -266
- package/esm2015/modules/radio/radio.module.js +0 -44
- package/esm2015/modules/radio/types/radio-change.js +0 -2
- package/esm2015/modules/selection-box/selection-box-adapter.service.js +0 -122
- package/esm2015/modules/selection-box/selection-box-description.component.js +0 -17
- package/esm2015/modules/selection-box/selection-box-grid.component.js +0 -130
- package/esm2015/modules/selection-box/selection-box-header.component.js +0 -17
- package/esm2015/modules/selection-box/selection-box.component.js +0 -104
- package/esm2015/modules/selection-box/selection-box.module.js +0 -51
- package/esm2015/modules/selection-box/types/selection-box-grid-align-items-type.js +0 -2
- package/esm2015/modules/selection-box/types/selection-box-grid-align-items.js +0 -2
- package/esm2015/modules/shared/forms-utility.js +0 -26
- package/esm2015/modules/shared/sky-forms-resources.module.js +0 -41
- package/esm2015/modules/toggle-switch/toggle-switch-label.component.js +0 -18
- package/esm2015/modules/toggle-switch/toggle-switch.component.js +0 -158
- package/esm2015/modules/toggle-switch/toggle-switch.module.js +0 -35
- package/esm2015/modules/toggle-switch/types/toggle-switch-change.js +0 -2
- package/esm2015/public-api.js +0 -43
- package/public-api.d.ts +0 -40
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { SkyFormsUtility } from '../shared/forms-utility';
|
|
5
|
-
import { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';
|
|
6
|
-
import { SkyFileAttachmentService } from './file-attachment.service';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@skyux/theme";
|
|
9
|
-
import * as i2 from "./file-attachment.service";
|
|
10
|
-
import * as i3 from "./file-item.service";
|
|
11
|
-
import * as i4 from "@angular/forms";
|
|
12
|
-
import * as i5 from "@skyux/indicators";
|
|
13
|
-
import * as i6 from "@angular/common";
|
|
14
|
-
import * as i7 from "@skyux/i18n";
|
|
15
|
-
let uniqueId = 0;
|
|
16
|
-
/**
|
|
17
|
-
* Provides an element to attach a single local file.
|
|
18
|
-
*/
|
|
19
|
-
export class SkyFileAttachmentComponent {
|
|
20
|
-
constructor(themeSvc, changeDetector, fileAttachmentService, fileItemService, ngControl) {
|
|
21
|
-
this.themeSvc = themeSvc;
|
|
22
|
-
this.changeDetector = changeDetector;
|
|
23
|
-
this.fileAttachmentService = fileAttachmentService;
|
|
24
|
-
this.fileItemService = fileItemService;
|
|
25
|
-
this.ngControl = ngControl;
|
|
26
|
-
/**
|
|
27
|
-
* Specifies the maximum size in bytes for valid files.
|
|
28
|
-
*/
|
|
29
|
-
this.maxFileSize = 500000;
|
|
30
|
-
/**
|
|
31
|
-
* Specifies the minimum size in bytes for valid files.
|
|
32
|
-
*/
|
|
33
|
-
this.minFileSize = 0;
|
|
34
|
-
/**
|
|
35
|
-
* Fires when users add or remove files.
|
|
36
|
-
*/
|
|
37
|
-
this.fileChange = new EventEmitter();
|
|
38
|
-
/**
|
|
39
|
-
* Fires when users select the file name link. Make sure to bind the event.
|
|
40
|
-
* If you do not, the file name link will be a dead link.
|
|
41
|
-
*/
|
|
42
|
-
this.fileClick = new EventEmitter();
|
|
43
|
-
this.acceptedOver = false;
|
|
44
|
-
this.rejectedOver = false;
|
|
45
|
-
/**
|
|
46
|
-
* Indicates whether the input is required for form validation.
|
|
47
|
-
* When you set this property to `true`, the component adds `aria-required` and `required`
|
|
48
|
-
* attributes to the input element so that forms display an invalid state until the input element
|
|
49
|
-
* is complete.
|
|
50
|
-
*/
|
|
51
|
-
this.required = false;
|
|
52
|
-
this.fileAttachmentId = uniqueId++;
|
|
53
|
-
this.ngUnsubscribe = new Subject();
|
|
54
|
-
this._disabled = false;
|
|
55
|
-
/*istanbul ignore next */
|
|
56
|
-
this._onChange = (_) => { };
|
|
57
|
-
/*istanbul ignore next */
|
|
58
|
-
this._onTouched = () => { };
|
|
59
|
-
this.labelElementId = `sky-file-attachment-label-${this.fileAttachmentId}`;
|
|
60
|
-
this.fileDropDescriptionElementId = `sky-file-attachment-drop-description-${this.fileAttachmentId}`;
|
|
61
|
-
if (this.ngControl) {
|
|
62
|
-
this.ngControl.valueAccessor = this;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Indicates whether to disable the input.
|
|
67
|
-
* @default false
|
|
68
|
-
*/
|
|
69
|
-
set disabled(value) {
|
|
70
|
-
const newDisabledState = SkyFormsUtility.coerceBooleanProperty(value);
|
|
71
|
-
if (this._disabled !== newDisabledState) {
|
|
72
|
-
this._disabled = newDisabledState;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
get disabled() {
|
|
76
|
-
return this._disabled;
|
|
77
|
-
}
|
|
78
|
-
get hasLabelComponent() {
|
|
79
|
-
return this.labelComponents.length > 0;
|
|
80
|
-
}
|
|
81
|
-
set value(value) {
|
|
82
|
-
// The null check is needed to address a bug in Angular 4.
|
|
83
|
-
// writeValue is being called twice, first time with a phantom null value
|
|
84
|
-
// See: https://github.com/angular/angular/issues/14988
|
|
85
|
-
// tslint:disable-next-line:no-null-keyword
|
|
86
|
-
const isNewValue = value !== this.value && value !== null;
|
|
87
|
-
if (isNewValue) {
|
|
88
|
-
this._value = value;
|
|
89
|
-
this._onChange(value);
|
|
90
|
-
this.updateFileAttachmentButton();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
get value() {
|
|
94
|
-
return this._value;
|
|
95
|
-
}
|
|
96
|
-
ngOnInit() {
|
|
97
|
-
this.themeSvc.settingsChange
|
|
98
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
99
|
-
.subscribe((themeSettings) => {
|
|
100
|
-
this.currentThemeName = themeSettings.currentSettings.theme.name;
|
|
101
|
-
this.updateFileAttachmentButton();
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
ngAfterViewInit() {
|
|
105
|
-
// This is needed to address a bug in Angular 7.
|
|
106
|
-
// When a control value is set intially, its value is not represented on the view.
|
|
107
|
-
// See: https://github.com/angular/angular/issues/13792
|
|
108
|
-
// Of note is the parent check which allows us to determine if the form is reactive.
|
|
109
|
-
// Without this check there is a changed before checked error
|
|
110
|
-
/* istanbul ignore else */
|
|
111
|
-
if (this.ngControl) {
|
|
112
|
-
setTimeout(() => {
|
|
113
|
-
this.ngControl.control.setValue(this.value, {
|
|
114
|
-
emitEvent: false
|
|
115
|
-
});
|
|
116
|
-
this.changeDetector.markForCheck();
|
|
117
|
-
});
|
|
118
|
-
// Backwards compatibility support for anyone still using Validators.Required.
|
|
119
|
-
this.required = this.required || SkyFormsUtility.hasRequiredValidation(this.ngControl);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
ngAfterContentInit() {
|
|
123
|
-
// Handles updating classes when label changes
|
|
124
|
-
this.labelComponents.changes
|
|
125
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
126
|
-
.subscribe(() => {
|
|
127
|
-
this.changeDetector.detectChanges();
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
isImage() {
|
|
131
|
-
return this.fileItemService.isImage(this.value);
|
|
132
|
-
}
|
|
133
|
-
onDropClicked() {
|
|
134
|
-
this._onTouched();
|
|
135
|
-
this.inputEl.nativeElement.click();
|
|
136
|
-
}
|
|
137
|
-
fileChangeEvent(fileChangeEvent) {
|
|
138
|
-
this.handleFiles(fileChangeEvent.target.files);
|
|
139
|
-
}
|
|
140
|
-
fileDragEnter(dragEnterEvent) {
|
|
141
|
-
// Save this target to know when the drag event leaves
|
|
142
|
-
this.enterEventTarget = dragEnterEvent.target;
|
|
143
|
-
dragEnterEvent.stopPropagation();
|
|
144
|
-
dragEnterEvent.preventDefault();
|
|
145
|
-
}
|
|
146
|
-
fileDragOver(dragOverEvent) {
|
|
147
|
-
const transfer = dragOverEvent.dataTransfer;
|
|
148
|
-
dragOverEvent.stopPropagation();
|
|
149
|
-
dragOverEvent.preventDefault();
|
|
150
|
-
if (transfer) {
|
|
151
|
-
if (transfer.items) {
|
|
152
|
-
const files = transfer.items;
|
|
153
|
-
for (let index = 0; index < files.length; index++) {
|
|
154
|
-
const file = files[index];
|
|
155
|
-
if (file.type && this.fileAttachmentService.fileTypeRejected(file.type, this.acceptedTypes)) {
|
|
156
|
-
this.rejectedOver = true;
|
|
157
|
-
this.acceptedOver = false;
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (files.length > 0 && !this.acceptedOver) {
|
|
162
|
-
this.rejectedOver = false;
|
|
163
|
-
this.acceptedOver = true;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
else if (transfer.files) {
|
|
167
|
-
// If the browser does not support DataTransfer.items,
|
|
168
|
-
// defer file-type checking to drop handler.
|
|
169
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility
|
|
170
|
-
this.rejectedOver = false;
|
|
171
|
-
this.acceptedOver = true;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
fileDrop(dropEvent) {
|
|
176
|
-
dropEvent.stopPropagation();
|
|
177
|
-
dropEvent.preventDefault();
|
|
178
|
-
this.enterEventTarget = undefined;
|
|
179
|
-
this.rejectedOver = false;
|
|
180
|
-
this.acceptedOver = false;
|
|
181
|
-
if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {
|
|
182
|
-
if (dropEvent.dataTransfer.files.length > 1) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
if (this.fileAttachmentService.hasDirectory(dropEvent.dataTransfer.files)) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
this.handleFiles(dropEvent.dataTransfer.files);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
fileDragLeave(dragLeaveEvent) {
|
|
192
|
-
if (this.enterEventTarget === dragLeaveEvent.target) {
|
|
193
|
-
this.rejectedOver = false;
|
|
194
|
-
this.acceptedOver = false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
deleteFileAttachment() {
|
|
198
|
-
this.value = undefined;
|
|
199
|
-
this.changeDetector.markForCheck();
|
|
200
|
-
this.emitFileChangeEvent(this.value);
|
|
201
|
-
}
|
|
202
|
-
getFileName(truncate = true) {
|
|
203
|
-
if (this.value) {
|
|
204
|
-
// tslint:disable-next-line: max-line-length
|
|
205
|
-
let dropName = this.fileItemService.isFile(this.value) && this.value.file.name ? this.value.file.name : this.value.url;
|
|
206
|
-
if (truncate && dropName.length > 26) {
|
|
207
|
-
return dropName.slice(0, 26) + '...';
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
return dropName;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return undefined;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
ngOnDestroy() {
|
|
218
|
-
this.fileChange.complete();
|
|
219
|
-
this.ngUnsubscribe.next();
|
|
220
|
-
this.ngUnsubscribe.complete();
|
|
221
|
-
}
|
|
222
|
-
registerOnChange(fn) { this._onChange = fn; }
|
|
223
|
-
registerOnTouched(fn) { this._onTouched = fn; }
|
|
224
|
-
writeValue(value) {
|
|
225
|
-
this.value = value;
|
|
226
|
-
this.changeDetector.markForCheck();
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* @internal
|
|
230
|
-
* Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.
|
|
231
|
-
* @param isDisabled Whether the control should be disabled.
|
|
232
|
-
*/
|
|
233
|
-
setDisabledState(isDisabled) {
|
|
234
|
-
this.disabled = isDisabled;
|
|
235
|
-
this.changeDetector.markForCheck();
|
|
236
|
-
}
|
|
237
|
-
emitClick() {
|
|
238
|
-
this.fileClick.emit({
|
|
239
|
-
file: this.value
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
emitFileChangeEvent(currentFile) {
|
|
243
|
-
if (currentFile && !currentFile.errorType) {
|
|
244
|
-
this.writeValue(currentFile);
|
|
245
|
-
}
|
|
246
|
-
this.fileChange.emit({
|
|
247
|
-
file: currentFile
|
|
248
|
-
});
|
|
249
|
-
this.inputEl.nativeElement.value = '';
|
|
250
|
-
}
|
|
251
|
-
loadFile(file) {
|
|
252
|
-
const reader = new FileReader();
|
|
253
|
-
reader.addEventListener('load', (event) => {
|
|
254
|
-
file.url = event.target.result;
|
|
255
|
-
this.emitFileChangeEvent(file);
|
|
256
|
-
});
|
|
257
|
-
reader.addEventListener('error', (event) => {
|
|
258
|
-
this.emitFileChangeEvent(file);
|
|
259
|
-
});
|
|
260
|
-
reader.addEventListener('abort', (event) => {
|
|
261
|
-
this.emitFileChangeEvent(file);
|
|
262
|
-
});
|
|
263
|
-
reader.readAsDataURL(file.file);
|
|
264
|
-
}
|
|
265
|
-
handleFiles(files) {
|
|
266
|
-
// tslint:disable-next-line: max-line-length
|
|
267
|
-
let processedFiles = this.fileAttachmentService.checkFiles(files, this.minFileSize, this.maxFileSize, this.acceptedTypes, this.validateFn);
|
|
268
|
-
for (let file of processedFiles) {
|
|
269
|
-
if (file.errorType) {
|
|
270
|
-
this.emitFileChangeEvent(file);
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
this.loadFile(file);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
updateFileAttachmentButton() {
|
|
278
|
-
this.showFileAttachmentButton = !(this.value && this.currentThemeName === 'modern');
|
|
279
|
-
this.changeDetector.markForCheck();
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
SkyFileAttachmentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentComponent, deps: [{ token: i1.SkyThemeService }, { token: i0.ChangeDetectorRef }, { token: i2.SkyFileAttachmentService }, { token: i3.SkyFileItemService }, { token: i4.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
283
|
-
SkyFileAttachmentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.7", type: SkyFileAttachmentComponent, selector: "sky-file-attachment", inputs: { acceptedTypes: "acceptedTypes", disabled: "disabled", maxFileSize: "maxFileSize", minFileSize: "minFileSize", validateFn: "validateFn", required: "required" }, outputs: { fileChange: "fileChange", fileClick: "fileClick" }, providers: [
|
|
284
|
-
SkyFileAttachmentService
|
|
285
|
-
], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\n class=\"sky-file-attachment-wrapper\"\n>\n <div\n class=\"sky-file-attachment-label-wrapper\"\n [attr.aria-required]=\"(required) ? true : null\"\n [attr.id]=\"labelElementId\"\n [ngClass]=\"{ 'sky-control-label-required': required && hasLabelComponent }\"\n >\n <ng-container *ngTemplateOutlet=\"labelContent\"\n ></ng-container>\n </div>\n <div\n class=\"sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\"\n [ngClass]=\"{ 'sky-file-attachment-accept': acceptedOver, 'sky-file-attachment-reject': rejectedOver }\"\n (dragenter)=\"fileDragEnter($event)\"\n (dragover)=\"fileDragOver($event)\"\n (dragleave)=\"fileDragLeave($event)\"\n (drop)=\"fileDrop($event)\"\n >\n <div\n aria-hidden=\"true\"\n class=\"sky-file-attachment-drop-description\"\n role=\"tooltip\"\n [attr.id]=\"fileDropDescriptionElementId\"\n >\n {{ 'skyux_file_attachment_file_upload_drag_or_click' | skyLibResources }}\n </div>\n <input\n hidden\n tabindex=\"-1\"\n type=\"file\"\n [attr.accept]=\"acceptedTypes || null\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (change)=\"fileChangeEvent($event)\"\n #fileInput\n >\n <button *ngIf=\"showFileAttachmentButton\"\n class=\"sky-file-attachment-btn sky-btn sky-btn-default\"\n type=\"button\"\n [attr.aria-describedby]=\"fileDropDescriptionElementId\"\n [disabled]=\"disabled\"\n (click)=\"onDropClicked()\"\n >\n <sky-icon\n icon=\"folder-open-o\"\n ></sky-icon>\n {{ value ?\n ('skyux_file_attachment_button_label_replace_file' | skyLibResources) :\n ('skyux_file_attachment_button_label_choose_file' | skyLibResources)\n }}\n </button>\n <sky-icon *ngIf=\"value && !isImage() && currentThemeName === 'modern'\"\n class=\"sky-file-attachment-icon sky-deemphasized\"\n icon=\"file-o\"\n size=\"2x\"\n >\n </sky-icon>\n <span *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a *ngIf=\"value; else noFile\"\n [attr.title]=\"getFileName(false)\"\n (click)=\"emitClick()\"\n >\n {{ getFileName() }}\n </a>\n </span>\n <ng-template #noFile>\n <span\n class=\"sky-file-attachment-none sky-deemphasized\"\n >\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_file_attachment_file_item_delete' | skyLibResources\"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon\n icon=\"trash-o\"\n size=\"md\"\n >\n </sky-icon>\n </button>\n </div>\n\n <img *ngIf=\"value && isImage()\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"'skyux_file_attachment_file_upload_image_preview_alt_text' | skyLibResources\"\n [src]=\"value.url\"\n />\n</div>\n\n<ng-template\n #labelContent\n>\n <ng-content\n select=\"sky-file-attachment-label\"\n ></ng-content>\n</ng-template>\n", styles: [".sky-file-attachment-wrapper{display:inline-block}.sky-file-attachment-upload{padding-right:8px;display:block;border:1px solid transparent}.sky-file-attachment-accept{border-color:#72bf44;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}.sky-file-attachment-reject{border-color:#ef4044;border-style:dashed;border-width:1px;border-radius:5px;color:#212327}:host(.ng-invalid.ng-dirty) .sky-file-attachment-btn{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044}.sky-file-attachment-name{padding:0 5px}.sky-file-attachment-name a{cursor:pointer}.sky-file-attachment-delete{border:none;color:#cdcfd2;cursor:pointer;padding:0}.sky-file-attachment-delete:hover{color:#979ba2;transition:color .15s}.sky-file-attachment-preview-img{max-width:25%;height:auto;box-shadow:0 0 5px #666;margin:10px}.sky-file-attachment-drop-description{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}:host-context(.sky-theme-modern) .sky-file-attachment-none{font-size:13px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}:host-context(.sky-theme-modern) .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}.sky-theme-modern .sky-file-attachment-none{font-size:13px}.sky-theme-modern .sky-file-attachment-wrapper{display:flex;flex-wrap:wrap}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-label-wrapper{width:100%}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-preview-img{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;box-shadow:none;margin:0 10px 0 0;width:100px;flex:0;order:1}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-btn{margin:0 10px 0 0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-icon{margin:5px 10px 5px 5px}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload{flex:1;order:2;display:flex;align-items:flex-start}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-upload .sky-file-attachment-name{margin:10px 10px 0 0;padding:0}.sky-theme-modern .sky-file-attachment-wrapper .sky-file-attachment-delete{width:40px;height:40px;color:#686c73!important}\n"], components: [{ type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }], pipes: { "skyLibResources": i7.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
286
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentComponent, decorators: [{
|
|
287
|
-
type: Component,
|
|
288
|
-
args: [{
|
|
289
|
-
selector: 'sky-file-attachment',
|
|
290
|
-
templateUrl: './file-attachment.component.html',
|
|
291
|
-
styleUrls: ['./file-attachment.component.scss'],
|
|
292
|
-
providers: [
|
|
293
|
-
SkyFileAttachmentService
|
|
294
|
-
],
|
|
295
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
296
|
-
}]
|
|
297
|
-
}], ctorParameters: function () { return [{ type: i1.SkyThemeService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyFileAttachmentService }, { type: i3.SkyFileItemService }, { type: i4.NgControl, decorators: [{
|
|
298
|
-
type: Self
|
|
299
|
-
}, {
|
|
300
|
-
type: Optional
|
|
301
|
-
}] }]; }, propDecorators: { acceptedTypes: [{
|
|
302
|
-
type: Input
|
|
303
|
-
}], disabled: [{
|
|
304
|
-
type: Input
|
|
305
|
-
}], maxFileSize: [{
|
|
306
|
-
type: Input
|
|
307
|
-
}], minFileSize: [{
|
|
308
|
-
type: Input
|
|
309
|
-
}], validateFn: [{
|
|
310
|
-
type: Input
|
|
311
|
-
}], fileChange: [{
|
|
312
|
-
type: Output
|
|
313
|
-
}], fileClick: [{
|
|
314
|
-
type: Output
|
|
315
|
-
}], required: [{
|
|
316
|
-
type: Input
|
|
317
|
-
}], inputEl: [{
|
|
318
|
-
type: ViewChild,
|
|
319
|
-
args: ['fileInput']
|
|
320
|
-
}], labelComponents: [{
|
|
321
|
-
type: ContentChildren,
|
|
322
|
-
args: [SkyFileAttachmentLabelComponent]
|
|
323
|
-
}] } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zL3NyYy9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMvc3JjL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFVdkIsT0FBTyxFQUNMLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBVWpDLE9BQU8sRUFDTCwrQkFBK0IsRUFDaEMsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3pCLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQVVuQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFVSCxNQUFNLE9BQU8sMEJBQTBCO0lBcUhyQyxZQUNTLFFBQXlCLEVBQ3hCLGNBQWlDLEVBQ2pDLHFCQUErQyxFQUMvQyxlQUFtQyxFQUNmLFNBQW9CO1FBSnpDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQywwQkFBcUIsR0FBckIscUJBQXFCLENBQTBCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNmLGNBQVMsR0FBVCxTQUFTLENB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QUs7Z0JBT0MsV0FBVztzQkFEakIsS0FBSztnQkFRQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLE1BQU07Z0JBUUEsU0FBUztzQkFEZixNQUFNO2dCQXNCQSxRQUFRO3NCQURkLEtBQUs7Z0JBMEJFLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxXQUFXO2dCQUlkLGVBQWU7c0JBRHRCLGVBQWU7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBOZ0NvbnRyb2xcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuICBTa3lUaGVtZVNlcnZpY2Vcbn0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHtcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgU2t5Rm9ybXNVdGlsaXR5XG59IGZyb20gJy4uL3NoYXJlZC9mb3Jtcy11dGlsaXR5JztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZUF0dGFjaG1lbnRDaGFuZ2Vcbn0gZnJvbSAnLi90eXBlcy9maWxlLWF0dGFjaG1lbnQtY2hhbmdlJztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZUF0dGFjaG1lbnRDbGlja1xufSBmcm9tICcuL3R5cGVzL2ZpbGUtYXR0YWNobWVudC1jbGljayc7XG5cbmltcG9ydCB7XG4gIFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnRcbn0gZnJvbSAnLi9maWxlLWF0dGFjaG1lbnQtbGFiZWwuY29tcG9uZW50JztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlXG59IGZyb20gJy4vZmlsZS1hdHRhY2htZW50LnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBTa3lGaWxlSXRlbVxufSBmcm9tICcuL2ZpbGUtaXRlbSc7XG5cbmltcG9ydCB7XG4gIFNreUZpbGVJdGVtU2VydmljZVxufSBmcm9tICcuL2ZpbGUtaXRlbS5zZXJ2aWNlJztcblxubGV0IHVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBQcm92aWRlcyBhbiBlbGVtZW50IHRvIGF0dGFjaCBhIHNpbmdsZSBsb2NhbCBmaWxlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZmlsZS1hdHRhY2htZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lGaWxlQXR0YWNobWVudFNlcnZpY2VcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcgbGl0ZXJhbCBvZiBNSU1FIHR5cGVzIHRoYXQgdXNlcnMgY2FuIGF0dGFjaC5cbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGUgdHlwZXMgYXJlIGFsbG93ZWQuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFjY2VwdGVkVHlwZXM6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV3RGlzYWJsZWRTdGF0ZSA9IFNreUZvcm1zVXRpbGl0eS5jb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gbmV3RGlzYWJsZWRTdGF0ZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdEaXNhYmxlZFN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIGZvciB2YWxpZCBmaWxlcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhGaWxlU2l6ZTogbnVtYmVyID0gNTAwMDAwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluRmlsZVNpemU6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBUaGlzIHZhbGlkYXRpb24gcnVucyBhbG9uZ3NpZGUgdGhlIGludGVybmFsXG4gICAqIGZpbGUgdmFsaWRhdGlvbi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGBTa3lGaWxlSXRlbWAgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHZhbGlkYXRlRm46IEZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGFkZCBvciByZW1vdmUgZmlsZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUZpbGVBdHRhY2htZW50Q2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCB0aGUgZmlsZSBuYW1lIGxpbmsuIE1ha2Ugc3VyZSB0byBiaW5kIHRoZSBldmVudC5cbiAgICogSWYgeW91IGRvIG5vdCwgdGhlIGZpbGUgbmFtZSBsaW5rIHdpbGwgYmUgYSBkZWFkIGxpbmsuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZpbGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5RmlsZUF0dGFjaG1lbnRDbGljaz4oKTtcblxuICBwdWJsaWMgYWNjZXB0ZWRPdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCBoYXNMYWJlbENvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbENvbXBvbmVudHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJvcERlc2NyaXB0aW9uRWxlbWVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIGxhYmVsRWxlbWVudElkOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlamVjdGVkT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5wdXQgaXMgcmVxdWlyZWQgZm9yIGZvcm0gdmFsaWRhdGlvbi5cbiAgICogV2hlbiB5b3Ugc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLCB0aGUgY29tcG9uZW50IGFkZHMgYGFyaWEtcmVxdWlyZWRgIGFuZCBgcmVxdWlyZWRgXG4gICAqIGF0dHJpYnV0ZXMgdG8gdGhlIGlucHV0IGVsZW1lbnQgc28gdGhhdCBmb3JtcyBkaXNwbGF5IGFuIGludmFsaWQgc3RhdGUgdW50aWwgdGhlwqBpbnB1dMKgZWxlbWVudFxuICAgKiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFNreUZpbGVJdGVtKSB7XG4gICAgLy8gVGhlIG51bGwgY2hlY2sgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIHdyaXRlVmFsdWUgaXMgYmVpbmcgY2FsbGVkIHR3aWNlLCBmaXJzdCB0aW1lIHdpdGggYSBwaGFudG9tIG51bGwgdmFsdWVcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE0OTg4XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW51bGwta2V5d29yZFxuICAgIGNvbnN0IGlzTmV3VmFsdWUgPSB2YWx1ZSAhPT0gdGhpcy52YWx1ZSAmJiB2YWx1ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodmFsdWUpO1xuICAgICAgdGhpcy51cGRhdGVGaWxlQXR0YWNobWVudEJ1dHRvbigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogU2t5RmlsZUl0ZW0ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50VGhlbWVOYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIHNob3dGaWxlQXR0YWNobWVudEJ1dHRvbjogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKVxuICBwcml2YXRlIGlucHV0RWw6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lGaWxlQXR0YWNobWVudExhYmVsQ29tcG9uZW50KVxuICBwcml2YXRlIGxhYmVsQ29tcG9uZW50czogUXVlcnlMaXN0PFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQ+O1xuXG4gIHByaXZhdGUgZW50ZXJFdmVudFRhcmdldDogYW55O1xuXG4gIHByaXZhdGUgZmlsZUF0dGFjaG1lbnRJZCA9IHVuaXF1ZUlkKys7XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRoZW1lU3ZjOiBTa3lUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmaWxlQXR0YWNobWVudFNlcnZpY2U6IFNreUZpbGVBdHRhY2htZW50U2VydmljZSxcbiAgICBwcml2YXRlIGZpbGVJdGVtU2VydmljZTogU2t5RmlsZUl0ZW1TZXJ2aWNlLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHtcbiAgICB0aGlzLmxhYmVsRWxlbWVudElkID0gYHNreS1maWxlLWF0dGFjaG1lbnQtbGFiZWwtJHt0aGlzLmZpbGVBdHRhY2htZW50SWR9YDtcbiAgICB0aGlzLmZpbGVEcm9wRGVzY3JpcHRpb25FbGVtZW50SWQgPSBgc2t5LWZpbGUtYXR0YWNobWVudC1kcm9wLWRlc2NyaXB0aW9uLSR7dGhpcy5maWxlQXR0YWNobWVudElkfWA7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50aGVtZVN2Yy5zZXR0aW5nc0NoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh0aGVtZVNldHRpbmdzKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFRoZW1lTmFtZSA9IHRoZW1lU2V0dGluZ3MuY3VycmVudFNldHRpbmdzLnRoZW1lLm5hbWU7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZUF0dGFjaG1lbnRCdXR0b24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNy5cbiAgICAvLyBXaGVuIGEgY29udHJvbCB2YWx1ZSBpcyBzZXQgaW50aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgYW55b25lIHN0aWxsIHVzaW5nIFZhbGlkYXRvcnMuUmVxdWlyZWQuXG4gICAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZCB8fCBTa3lGb3Jtc1V0aWxpdHkuaGFzUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMubmdDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8vIEhhbmRsZXMgdXBkYXRpbmcgY2xhc3NlcyB3aGVuIGxhYmVsIGNoYW5nZXNcbiAgICB0aGlzLmxhYmVsQ29tcG9uZW50cy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlzSW1hZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUl0ZW1TZXJ2aWNlLmlzSW1hZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Ecm9wQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGZpbGVDaGFuZ2VFdmVudChmaWxlQ2hhbmdlRXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRmlsZXMoZmlsZUNoYW5nZUV2ZW50LnRhcmdldC5maWxlcyk7XG4gIH1cblxuICBwdWJsaWMgZmlsZURyYWdFbnRlcihkcmFnRW50ZXJFdmVudDogYW55KTogdm9pZCB7XG4gICAgLy8gU2F2ZSB0aGlzIHRhcmdldCB0byBrbm93IHdoZW4gdGhlIGRyYWcgZXZlbnQgbGVhdmVzXG4gICAgdGhpcy5lbnRlckV2ZW50VGFyZ2V0ID0gZHJhZ0VudGVyRXZlbnQudGFyZ2V0O1xuICAgIGRyYWdFbnRlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRyYWdFbnRlckV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZmlsZURyYWdPdmVyKGRyYWdPdmVyRXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZmVyID0gZHJhZ092ZXJFdmVudC5kYXRhVHJhbnNmZXI7XG5cbiAgICBkcmFnT3ZlckV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRyYWdPdmVyRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0cmFuc2Zlcikge1xuICAgICAgaWYgKHRyYW5zZmVyLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gdHJhbnNmZXIuaXRlbXM7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGZpbGU6IGFueSA9IGZpbGVzW2luZGV4XTtcblxuICAgICAgICAgIGlmIChmaWxlLnR5cGUgJiYgdGhpcy5maWxlQXR0YWNobWVudFNlcnZpY2UuZmlsZVR5cGVSZWplY3RlZChmaWxlLnR5cGUsIHRoaXMuYWNjZXB0ZWRUeXBlcykpIHtcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWNjZXB0ZWRPdmVyKSB7XG4gICAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFjY2VwdGVkT3ZlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmICh0cmFuc2Zlci5maWxlcykge1xuICAgICAgICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IERhdGFUcmFuc2Zlci5pdGVtcyxcbiAgICAgICAgLy8gZGVmZXIgZmlsZS10eXBlIGNoZWNraW5nIHRvIGRyb3AgaGFuZGxlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci9pdGVtcyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJvcChkcm9wRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGRyb3BFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkcm9wRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuZW50ZXJFdmVudFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG5cbiAgICBpZiAoZHJvcEV2ZW50LmRhdGFUcmFuc2ZlciAmJiBkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICBpZiAoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmlsZUF0dGFjaG1lbnRTZXJ2aWNlLmhhc0RpcmVjdG9yeShkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZXMoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnTGVhdmUoZHJhZ0xlYXZlRXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudGVyRXZlbnRUYXJnZXQgPT09IGRyYWdMZWF2ZUV2ZW50LnRhcmdldCkge1xuICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZpbGVBdHRhY2htZW50KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRGaWxlQ2hhbmdlRXZlbnQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsZU5hbWUodHJ1bmNhdGUgPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgIGxldCBkcm9wTmFtZSA9IHRoaXMuZmlsZUl0ZW1TZXJ2aWNlLmlzRmlsZSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmZpbGUubmFtZSA/IHRoaXMudmFsdWUuZmlsZS5uYW1lIDogdGhpcy52YWx1ZS51cmw7XG5cbiAgICAgIGlmICh0cnVuY2F0ZSAmJiBkcm9wTmFtZS5sZW5ndGggPiAyNikge1xuICAgICAgICByZXR1cm4gZHJvcE5hbWUuc2xpY2UoMCwgMjYpICsgJy4uLic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZHJvcE5hbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQgeyB0aGlzLl9vbkNoYW5nZSA9IGZuOyB9XG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7IHRoaXMuX29uVG91Y2hlZCA9IGZuOyB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29udHJvbC4gSW1wbGVtZW50ZWQgYXMgYSBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKiBAcGFyYW0gaXNEaXNhYmxlZCBXaGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGVtaXRDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVDbGljay5lbWl0KHtcbiAgICAgIGZpbGU6IHRoaXMudmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbGVDaGFuZ2VFdmVudChjdXJyZW50RmlsZTogU2t5RmlsZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoY3VycmVudEZpbGUgJiYgIWN1cnJlbnRGaWxlLmVycm9yVHlwZSkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKGN1cnJlbnRGaWxlKTtcbiAgICB9XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoe1xuICAgICAgZmlsZTogY3VycmVudEZpbGVcbiAgICB9IGFzIFNreUZpbGVBdHRhY2htZW50Q2hhbmdlKTtcblxuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGxvYWRGaWxlKGZpbGU6IFNreUZpbGVJdGVtKTogdm9pZCB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKGV2ZW50OiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGZpbGUudXJsID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIHRoaXMuZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICB9KTtcblxuICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChldmVudDogYW55KTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmVtaXRGaWxlQ2hhbmdlRXZlbnQoZmlsZSk7XG4gICAgfSk7XG5cbiAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoZXZlbnQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5lbWl0RmlsZUNoYW5nZUV2ZW50KGZpbGUpO1xuICAgIH0pO1xuXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5maWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmlsZXMoZmlsZXM6IEZpbGVMaXN0KTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICBsZXQgcHJvY2Vzc2VkRmlsZXMgPSB0aGlzLmZpbGVBdHRhY2htZW50U2VydmljZS5jaGVja0ZpbGVzKGZpbGVzLCB0aGlzLm1pbkZpbGVTaXplLCB0aGlzLm1heEZpbGVTaXplLCB0aGlzLmFjY2VwdGVkVHlwZXMsIHRoaXMudmFsaWRhdGVGbik7XG5cbiAgICBmb3IgKGxldCBmaWxlIG9mIHByb2Nlc3NlZEZpbGVzKSB7XG4gICAgICBpZiAoZmlsZS5lcnJvclR5cGUpIHtcbiAgICAgICAgdGhpcy5lbWl0RmlsZUNoYW5nZUV2ZW50KGZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkRmlsZShmaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGVBdHRhY2htZW50QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbGVBdHRhY2htZW50QnV0dG9uID0gISh0aGlzLnZhbHVlICYmIHRoaXMuY3VycmVudFRoZW1lTmFtZSA9PT0gJ21vZGVybicpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKmlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuICAvKmlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHsgfTtcbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LXdyYXBwZXJcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LWxhYmVsLXdyYXBwZXJcIlxuICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiKHJlcXVpcmVkKSA/IHRydWUgOiBudWxsXCJcbiAgICBbYXR0ci5pZF09XCJsYWJlbEVsZW1lbnRJZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnc2t5LWNvbnRyb2wtbGFiZWwtcmVxdWlyZWQnOiByZXF1aXJlZCAmJiBoYXNMYWJlbENvbXBvbmVudCB9XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbENvbnRlbnRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtdXBsb2FkIHNreS1maWxlLWF0dGFjaG1lbnQgc2t5LWZpbGUtYXR0YWNobWVudC10YXJnZXRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3NreS1maWxlLWF0dGFjaG1lbnQtYWNjZXB0JzogYWNjZXB0ZWRPdmVyLCAnc2t5LWZpbGUtYXR0YWNobWVudC1yZWplY3QnOiByZWplY3RlZE92ZXIgfVwiXG4gICAgKGRyYWdlbnRlcik9XCJmaWxlRHJhZ0VudGVyKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJmaWxlRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJmaWxlRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cImZpbGVEcm9wKCRldmVudClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1kcm9wLWRlc2NyaXB0aW9uXCJcbiAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgIFthdHRyLmlkXT1cImZpbGVEcm9wRGVzY3JpcHRpb25FbGVtZW50SWRcIlxuICAgID5cbiAgICAgIHt7ICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZHJhZ19vcl9jbGljaycgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2Rpdj5cbiAgICA8aW5wdXRcbiAgICAgIGhpZGRlblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICBbYXR0ci5hY2NlcHRdPVwiYWNjZXB0ZWRUeXBlcyB8fCBudWxsXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAjZmlsZUlucHV0XG4gICAgPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93RmlsZUF0dGFjaG1lbnRCdXR0b25cIlxuICAgICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LWJ0biBza3ktYnRuIHNreS1idG4tZGVmYXVsdFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIm9uRHJvcENsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPHNreS1pY29uXG4gICAgICAgIGljb249XCJmb2xkZXItb3Blbi1vXCJcbiAgICAgID48L3NreS1pY29uPlxuICAgICAge3sgdmFsdWUgP1xuICAgICAgICAoJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9idXR0b25fbGFiZWxfcmVwbGFjZV9maWxlJyB8IHNreUxpYlJlc291cmNlcykgOlxuICAgICAgICAoJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9idXR0b25fbGFiZWxfY2hvb3NlX2ZpbGUnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8c2t5LWljb24gKm5nSWY9XCJ2YWx1ZSAmJiAhaXNJbWFnZSgpICYmIGN1cnJlbnRUaGVtZU5hbWUgPT09ICdtb2Rlcm4nXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1pY29uIHNreS1kZWVtcGhhc2l6ZWRcIlxuICAgICAgaWNvbj1cImZpbGUtb1wiXG4gICAgICBzaXplPVwiMnhcIlxuICAgID5cbiAgICA8L3NreS1pY29uPlxuICAgIDxzcGFuICpuZ0lmPVwidmFsdWUgfHwgY3VycmVudFRoZW1lTmFtZSA9PT0gJ2RlZmF1bHQnXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1uYW1lXCJcbiAgICA+XG4gICAgICA8YSAqbmdJZj1cInZhbHVlOyBlbHNlIG5vRmlsZVwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cImdldEZpbGVOYW1lKGZhbHNlKVwiXG4gICAgICAgIChjbGljayk9XCJlbWl0Q2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGdldEZpbGVOYW1lKCkgfX1cbiAgICAgIDwvYT5cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNub0ZpbGU+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtbm9uZSBza3ktZGVlbXBoYXNpemVkXCJcbiAgICAgID5cbiAgICAgICAge3sgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9sYWJlbF9ub19maWxlX2Nob3NlbicgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b24gKm5nSWY9XCJ2YWx1ZVwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1ib3JkZXJsZXNzIHNreS1maWxlLWF0dGFjaG1lbnQtZGVsZXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfaXRlbV9kZWxldGUnIHwgc2t5TGliUmVzb3VyY2VzXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICdza3ktYnRuLWljb24tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVGaWxlQXR0YWNobWVudCgpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb25cbiAgICAgICAgaWNvbj1cInRyYXNoLW9cIlxuICAgICAgICBzaXplPVwibWRcIlxuICAgICAgPlxuICAgICAgPC9za3ktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGltZyAqbmdJZj1cInZhbHVlICYmIGlzSW1hZ2UoKVwiXG4gICAgY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LXByZXZpZXctaW1nXCJcbiAgICBbYWx0XT1cIidza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfaW1hZ2VfcHJldmlld19hbHRfdGV4dCcgfCBza3lMaWJSZXNvdXJjZXNcIlxuICAgIFtzcmNdPVwidmFsdWUudXJsXCJcbiAgLz5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgI2xhYmVsQ29udGVudFxuPlxuICAgIDxuZy1jb250ZW50XG4gICAgICBzZWxlY3Q9XCJza3ktZmlsZS1hdHRhY2htZW50LWxhYmVsXCJcbiAgICA+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* @internal
|
|
5
|
-
*/
|
|
6
|
-
export class SkyFileAttachmentService {
|
|
7
|
-
checkFiles(files, minFileSize, maxFileSize, acceptedTypes, validateFn) {
|
|
8
|
-
let fileResults = [];
|
|
9
|
-
for (let index = 0; index < files.length; index++) {
|
|
10
|
-
let fileItem = {
|
|
11
|
-
file: files.item(index)
|
|
12
|
-
};
|
|
13
|
-
if (fileItem.file.size < minFileSize) {
|
|
14
|
-
fileItem.errorType = 'minFileSize';
|
|
15
|
-
fileItem.errorParam = minFileSize.toString();
|
|
16
|
-
fileResults.push(fileItem);
|
|
17
|
-
}
|
|
18
|
-
else if (fileItem.file.size > maxFileSize) {
|
|
19
|
-
fileItem.errorType = 'maxFileSize';
|
|
20
|
-
fileItem.errorParam = maxFileSize.toString();
|
|
21
|
-
fileResults.push(fileItem);
|
|
22
|
-
}
|
|
23
|
-
else if (this.fileTypeRejected(fileItem.file.type, acceptedTypes)) {
|
|
24
|
-
fileItem.errorType = 'fileType';
|
|
25
|
-
fileItem.errorParam = acceptedTypes;
|
|
26
|
-
fileResults.push(fileItem);
|
|
27
|
-
}
|
|
28
|
-
else if (validateFn) {
|
|
29
|
-
let errorParam = validateFn(fileItem);
|
|
30
|
-
if (!!errorParam) {
|
|
31
|
-
fileItem.errorType = 'validate';
|
|
32
|
-
fileItem.errorParam = errorParam;
|
|
33
|
-
}
|
|
34
|
-
fileResults.push(fileItem);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
fileResults.push(fileItem);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return fileResults;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns `true` if a directory is found in the provided `files` parameter.
|
|
44
|
-
*/
|
|
45
|
-
hasDirectory(files) {
|
|
46
|
-
for (let index = 0; index < files.length; index++) {
|
|
47
|
-
const file = files.item(index);
|
|
48
|
-
if (file.webkitGetAsEntry && file.webkitGetAsEntry() && file.webkitGetAsEntry().isDirectory) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
fileTypeRejected(fileType, acceptedTypes) {
|
|
55
|
-
if (!acceptedTypes) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
if (!fileType) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
let acceptedTypesUpper = acceptedTypes.toUpperCase();
|
|
62
|
-
let typeArray = acceptedTypesUpper.split(',');
|
|
63
|
-
return !this.fileTypeInArray(typeArray, fileType.toUpperCase());
|
|
64
|
-
}
|
|
65
|
-
fileTypeInArray(typeArray, fileType) {
|
|
66
|
-
if (typeArray.indexOf(fileType) !== -1) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
for (let index = 0; index < typeArray.length; index++) {
|
|
70
|
-
const type = typeArray[index];
|
|
71
|
-
const validSubtype = this.getMimeSubtype(type);
|
|
72
|
-
if (validSubtype === '*') {
|
|
73
|
-
if (this.getMimeMainType(type) === this.getMimeMainType(fileType)) {
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
getMimeSubtype(type) {
|
|
81
|
-
return type.substr(type.indexOf('/') + 1, type.length);
|
|
82
|
-
}
|
|
83
|
-
getMimeMainType(type) {
|
|
84
|
-
return type.substr(0, type.indexOf('/'));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
SkyFileAttachmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
88
|
-
SkyFileAttachmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentService });
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentService, decorators: [{
|
|
90
|
-
type: Injectable
|
|
91
|
-
}] });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy9zcmMvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1hdHRhY2htZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQzs7QUFNdkI7O0dBRUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBRTVCLFVBQVUsQ0FBQyxLQUFlLEVBQUUsV0FBbUIsRUFBRSxXQUFtQixFQUFFLGFBQXFCLEVBQUUsVUFBb0I7UUFDdEgsSUFBSSxXQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUVwQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqRCxJQUFJLFFBQVEsR0FBRztnQkFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDVCxDQUFDO1lBRWpCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUFFO2dCQUNwQyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFFNUI7aUJBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7Z0JBQzNDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUU1QjtpQkFBTSxJ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QUNsQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDOztxSEEvRlUsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIFNreUZpbGVJdGVtXG59IGZyb20gJy4vZmlsZS1pdGVtJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreUZpbGVBdHRhY2htZW50U2VydmljZSB7XG5cbiAgcHVibGljIGNoZWNrRmlsZXMoZmlsZXM6IEZpbGVMaXN0LCBtaW5GaWxlU2l6ZTogbnVtYmVyLCBtYXhGaWxlU2l6ZTogbnVtYmVyLCBhY2NlcHRlZFR5cGVzOiBzdHJpbmcsIHZhbGlkYXRlRm46IEZ1bmN0aW9uKTogU2t5RmlsZUl0ZW1bXSB7XG4gICAgbGV0IGZpbGVSZXN1bHRzOiBTa3lGaWxlSXRlbVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBsZXQgZmlsZUl0ZW0gPSB7XG4gICAgICAgIGZpbGU6IGZpbGVzLml0ZW0oaW5kZXgpXG4gICAgICB9IGFzIFNreUZpbGVJdGVtO1xuXG4gICAgICBpZiAoZmlsZUl0ZW0uZmlsZS5zaXplIDwgbWluRmlsZVNpemUpIHtcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JUeXBlID0gJ21pbkZpbGVTaXplJztcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JQYXJhbSA9IG1pbkZpbGVTaXplLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuXG4gICAgICB9IGVsc2UgaWYgKGZpbGVJdGVtLmZpbGUuc2l6ZSA+IG1heEZpbGVTaXplKSB7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yVHlwZSA9ICdtYXhGaWxlU2l6ZSc7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBtYXhGaWxlU2l6ZS50b1N0cmluZygpO1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcblxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUeXBlUmVqZWN0ZWQoZmlsZUl0ZW0uZmlsZS50eXBlLCBhY2NlcHRlZFR5cGVzKSkge1xuICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAnZmlsZVR5cGUnO1xuICAgICAgICBmaWxlSXRlbS5lcnJvclBhcmFtID0gYWNjZXB0ZWRUeXBlcztcbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG5cbiAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVGbikge1xuICAgICAgICBsZXQgZXJyb3JQYXJhbSA9IHZhbGlkYXRlRm4oZmlsZUl0ZW0pO1xuXG4gICAgICAgIGlmICghIWVycm9yUGFyYW0pIHtcbiAgICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAndmFsaWRhdGUnO1xuICAgICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBlcnJvclBhcmFtO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGVSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgZGlyZWN0b3J5IGlzIGZvdW5kIGluIHRoZSBwcm92aWRlZCBgZmlsZXNgIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBoYXNEaXJlY3RvcnkoZmlsZXM6IEZpbGVMaXN0KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZmlsZTogYW55ID0gZmlsZXMuaXRlbShpbmRleCk7XG4gICAgICBpZiAoZmlsZS53ZWJraXRHZXRBc0VudHJ5ICYmIGZpbGUud2Via2l0R2V0QXNFbnRyeSgpICYmIGZpbGUud2Via2l0R2V0QXNFbnRyeSgpLmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlVHlwZVJlamVjdGVkKGZpbGVUeXBlOiBzdHJpbmcsIGFjY2VwdGVkVHlwZXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghYWNjZXB0ZWRUeXBlcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZmlsZVR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhY2NlcHRlZFR5cGVzVXBwZXIgPSBhY2NlcHRlZFR5cGVzLnRvVXBwZXJDYXNlKCk7XG4gICAgbGV0IHR5cGVBcnJheSA9IGFjY2VwdGVkVHlwZXNVcHBlci5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuICF0aGlzLmZpbGVUeXBlSW5BcnJheSh0eXBlQXJyYXksIGZpbGVUeXBlLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxlVHlwZUluQXJyYXkodHlwZUFycmF5OiBzdHJpbmdbXSwgZmlsZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlQXJyYXkuaW5kZXhPZihmaWxlVHlwZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZUFycmF5Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVBcnJheVtpbmRleF07XG4gICAgICBjb25zdCB2YWxpZFN1YnR5cGUgPSB0aGlzLmdldE1pbWVTdWJ0eXBlKHR5cGUpO1xuXG4gICAgICBpZiAodmFsaWRTdWJ0eXBlID09PSAnKicpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0TWltZU1haW5UeXBlKHR5cGUpID09PSB0aGlzLmdldE1pbWVNYWluVHlwZShmaWxlVHlwZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZVN1YnR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZS5zdWJzdHIodHlwZS5pbmRleE9mKCcvJykgKyAxLCB0eXBlLmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pbWVNYWluVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cigwLCB0eXBlLmluZGV4T2YoJy8nKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { CommonModule, DecimalPipe } from '@angular/common';
|
|
2
|
-
import { FormsModule } from '@angular/forms';
|
|
3
|
-
import { NgModule } from '@angular/core';
|
|
4
|
-
import { SkyI18nModule } from '@skyux/i18n';
|
|
5
|
-
import { SkyIconModule } from '@skyux/indicators';
|
|
6
|
-
import { SkyThemeModule } from '@skyux/theme';
|
|
7
|
-
import { SkyFileAttachmentComponent } from './file-attachment.component';
|
|
8
|
-
import { SkyFileAttachmentLabelComponent } from './file-attachment-label.component';
|
|
9
|
-
import { SkyFileDropComponent } from './file-drop.component';
|
|
10
|
-
import { SkyFileItemComponent } from './file-item.component';
|
|
11
|
-
import { SkyFileItemService } from './file-item.service';
|
|
12
|
-
import { SkyFileSizePipe } from './file-size.pipe';
|
|
13
|
-
import { SkyFormsResourcesModule } from '../shared/sky-forms-resources.module';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
export class SkyFileAttachmentsModule {
|
|
16
|
-
}
|
|
17
|
-
SkyFileAttachmentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
18
|
-
SkyFileAttachmentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentsModule, declarations: [SkyFileAttachmentComponent,
|
|
19
|
-
SkyFileAttachmentLabelComponent,
|
|
20
|
-
SkyFileDropComponent,
|
|
21
|
-
SkyFileItemComponent,
|
|
22
|
-
SkyFileSizePipe], imports: [CommonModule,
|
|
23
|
-
FormsModule,
|
|
24
|
-
SkyFormsResourcesModule,
|
|
25
|
-
SkyI18nModule,
|
|
26
|
-
SkyIconModule,
|
|
27
|
-
SkyThemeModule], exports: [SkyFileAttachmentComponent,
|
|
28
|
-
SkyFileAttachmentLabelComponent,
|
|
29
|
-
SkyFileDropComponent,
|
|
30
|
-
SkyFileItemComponent,
|
|
31
|
-
SkyFileSizePipe] });
|
|
32
|
-
SkyFileAttachmentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentsModule, providers: [
|
|
33
|
-
DecimalPipe,
|
|
34
|
-
SkyFileItemService
|
|
35
|
-
], imports: [[
|
|
36
|
-
CommonModule,
|
|
37
|
-
FormsModule,
|
|
38
|
-
SkyFormsResourcesModule,
|
|
39
|
-
SkyI18nModule,
|
|
40
|
-
SkyIconModule,
|
|
41
|
-
SkyThemeModule
|
|
42
|
-
]] });
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyFileAttachmentsModule, decorators: [{
|
|
44
|
-
type: NgModule,
|
|
45
|
-
args: [{
|
|
46
|
-
declarations: [
|
|
47
|
-
SkyFileAttachmentComponent,
|
|
48
|
-
SkyFileAttachmentLabelComponent,
|
|
49
|
-
SkyFileDropComponent,
|
|
50
|
-
SkyFileItemComponent,
|
|
51
|
-
SkyFileSizePipe
|
|
52
|
-
],
|
|
53
|
-
imports: [
|
|
54
|
-
CommonModule,
|
|
55
|
-
FormsModule,
|
|
56
|
-
SkyFormsResourcesModule,
|
|
57
|
-
SkyI18nModule,
|
|
58
|
-
SkyIconModule,
|
|
59
|
-
SkyThemeModule
|
|
60
|
-
],
|
|
61
|
-
exports: [
|
|
62
|
-
SkyFileAttachmentComponent,
|
|
63
|
-
SkyFileAttachmentLabelComponent,
|
|
64
|
-
SkyFileDropComponent,
|
|
65
|
-
SkyFileItemComponent,
|
|
66
|
-
SkyFileSizePipe
|
|
67
|
-
],
|
|
68
|
-
providers: [
|
|
69
|
-
DecimalPipe,
|
|
70
|
-
SkyFileItemService
|
|
71
|
-
]
|
|
72
|
-
}]
|
|
73
|
-
}] });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy9zcmMvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1hdHRhY2htZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1osTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQ0wsV0FBVyxFQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFDTCxhQUFhLEVBQ2QsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQ0wsY0FBYyxFQUNmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFDTCwwQkFBMEIsRUFDM0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQ0wsK0JBQStCLEVBQ2hDLE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsT0FBTyxFQUNMLG9CQUFvQixFQUNyQixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFDTCxvQkFBb0IsRUFDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3hCLE1BQU0sc0NBQXNDLENBQUM7O0FBOEI5QyxNQUFNLE9BQU8sd0JBQXdCOztxSEFBeEIsd0JBQXdCO3NIQUF4Qix3QkFBd0IsaUJBMUJqQywwQkFBMEI7UUFDMUIsK0JBQStCO1FBQy9CLG9CQUFvQjtRQUNwQixvQkFBb0I7UUFDcEIsZUFBZSxhQUdmLFlBQVk7UUFDWixXQUFXO1FBQ1gsdUJBQXVCO1FBQ3ZCLGFBQWE7UUFDYixhQUFhO1FBQ2IsY0FBYyxhQUdkLDBCQUEwQjtRQUMxQiwrQkFBK0I7UUFDL0Isb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixlQUFlO3NIQU9OLHdCQUF3QixhQUx4QjtRQUNULFdBQVc7UUFDWCxrQkFBa0I7S0FDbkIsWUFsQlE7WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLHVCQUF1QjtZQUN2QixhQUFhO1lBQ2IsYUFBYTtZQUNiLGNBQWM7U0FDZjsyRkFhVSx3QkFBd0I7a0JBNUJwQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWiwwQkFBMEI7d0JBQzFCLCtCQUErQjt3QkFDL0Isb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsdUJBQXVCO3dCQUN2QixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMEJBQTBCO3dCQUMxQiwrQkFBK0I7d0JBQy9CLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixlQUFlO3FCQUNoQjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsV0FBVzt3QkFDWCxrQkFBa0I7cUJBQ25CO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tbW9uTW9kdWxlLFxuICBEZWNpbWFsUGlwZVxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge1xuICBGb3Jtc01vZHVsZVxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gIE5nTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBTa3lJMThuTW9kdWxlXG59IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHtcbiAgU2t5SWNvbk1vZHVsZVxufSBmcm9tICdAc2t5dXgvaW5kaWNhdG9ycyc7XG5cbmltcG9ydCB7XG4gIFNreVRoZW1lTW9kdWxlXG59IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7XG4gIFNreUZpbGVBdHRhY2htZW50Q29tcG9uZW50XG59IGZyb20gJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7XG4gIFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnRcbn0gZnJvbSAnLi9maWxlLWF0dGFjaG1lbnQtbGFiZWwuY29tcG9uZW50JztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZURyb3BDb21wb25lbnRcbn0gZnJvbSAnLi9maWxlLWRyb3AuY29tcG9uZW50JztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZUl0ZW1Db21wb25lbnRcbn0gZnJvbSAnLi9maWxlLWl0ZW0uY29tcG9uZW50JztcblxuaW1wb3J0IHtcbiAgU2t5RmlsZUl0ZW1TZXJ2aWNlXG59IGZyb20gJy4vZmlsZS1pdGVtLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBTa3lGaWxlU2l6ZVBpcGVcbn0gZnJvbSAnLi9maWxlLXNpemUucGlwZSc7XG5cbmltcG9ydCB7XG4gIFNreUZvcm1zUmVzb3VyY2VzTW9kdWxlXG59IGZyb20gJy4uL3NoYXJlZC9za3ktZm9ybXMtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNreUZpbGVBdHRhY2htZW50Q29tcG9uZW50LFxuICAgIFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQsXG4gICAgU2t5RmlsZURyb3BDb21wb25lbnQsXG4gICAgU2t5RmlsZUl0ZW1Db21wb25lbnQsXG4gICAgU2t5RmlsZVNpemVQaXBlXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU2t5Rm9ybXNSZXNvdXJjZXNNb2R1bGUsXG4gICAgU2t5STE4bk1vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTa3lGaWxlQXR0YWNobWVudENvbXBvbmVudCxcbiAgICBTa3lGaWxlQXR0YWNobWVudExhYmVsQ29tcG9uZW50LFxuICAgIFNreUZpbGVEcm9wQ29tcG9uZW50LFxuICAgIFNreUZpbGVJdGVtQ29tcG9uZW50LFxuICAgIFNreUZpbGVTaXplUGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBEZWNpbWFsUGlwZSxcbiAgICBTa3lGaWxlSXRlbVNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTa3lGaWxlQXR0YWNobWVudHNNb2R1bGUgeyB9XG4iXX0=
|