@skyux/forms 5.0.2 → 5.5.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 +6 -4
- package/bundles/skyux-forms.umd.js +114 -114
- package/documentation.json +1412 -961
- 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/{modules → lib/modules}/input-box/input-box.component.js +5 -5
- 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 +1 -1
- 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.map +1 -1
- package/fesm2015/skyux-forms.js +145 -145
- 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 +21 -7
- 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 -82
- 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 -32
- package/esm2015/modules/checkbox/checkbox.component.js +0 -239
- package/esm2015/modules/checkbox/checkbox.module.js +0 -34
- package/esm2015/modules/file-attachment/file-attachment-label.component.js +0 -19
- package/esm2015/modules/file-attachment/file-attachment.component.js +0 -328
- package/esm2015/modules/file-attachment/file-attachment.service.js +0 -94
- package/esm2015/modules/file-attachment/file-attachments.module.js +0 -68
- package/esm2015/modules/file-attachment/file-drop.component.js +0 -223
- 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 -72
- package/esm2015/modules/file-attachment/file-link.js +0 -2
- package/esm2015/modules/file-attachment/file-size.pipe.js +0 -59
- 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.module.js +0 -19
- package/esm2015/modules/radio/radio-group.component.js +0 -222
- package/esm2015/modules/radio/radio-label.component.js +0 -26
- package/esm2015/modules/radio/radio.component.js +0 -262
- package/esm2015/modules/radio/radio.module.js +0 -28
- package/esm2015/modules/radio/types/radio-change.js +0 -2
- package/esm2015/modules/selection-box/selection-box-adapter.service.js +0 -124
- package/esm2015/modules/selection-box/selection-box-description.component.js +0 -17
- package/esm2015/modules/selection-box/selection-box-grid.component.js +0 -129
- package/esm2015/modules/selection-box/selection-box-header.component.js +0 -17
- package/esm2015/modules/selection-box/selection-box.component.js +0 -106
- package/esm2015/modules/selection-box/selection-box.module.js +0 -40
- 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 -89
- 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 -20
- 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,328 +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 =
|
|
120
|
-
this.required || SkyFormsUtility.hasRequiredValidation(this.ngControl);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
ngAfterContentInit() {
|
|
124
|
-
// Handles updating classes when label changes
|
|
125
|
-
this.labelComponents.changes
|
|
126
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
127
|
-
.subscribe(() => {
|
|
128
|
-
this.changeDetector.detectChanges();
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
isImage() {
|
|
132
|
-
return this.fileItemService.isImage(this.value);
|
|
133
|
-
}
|
|
134
|
-
onDropClicked() {
|
|
135
|
-
this._onTouched();
|
|
136
|
-
this.inputEl.nativeElement.click();
|
|
137
|
-
}
|
|
138
|
-
fileChangeEvent(fileChangeEvent) {
|
|
139
|
-
this.handleFiles(fileChangeEvent.target.files);
|
|
140
|
-
}
|
|
141
|
-
fileDragEnter(dragEnterEvent) {
|
|
142
|
-
// Save this target to know when the drag event leaves
|
|
143
|
-
this.enterEventTarget = dragEnterEvent.target;
|
|
144
|
-
dragEnterEvent.stopPropagation();
|
|
145
|
-
dragEnterEvent.preventDefault();
|
|
146
|
-
}
|
|
147
|
-
fileDragOver(dragOverEvent) {
|
|
148
|
-
const transfer = dragOverEvent.dataTransfer;
|
|
149
|
-
dragOverEvent.stopPropagation();
|
|
150
|
-
dragOverEvent.preventDefault();
|
|
151
|
-
if (transfer) {
|
|
152
|
-
if (transfer.items) {
|
|
153
|
-
const files = transfer.items;
|
|
154
|
-
for (let index = 0; index < files.length; index++) {
|
|
155
|
-
const file = files[index];
|
|
156
|
-
if (file.type &&
|
|
157
|
-
this.fileAttachmentService.fileTypeRejected(file.type, this.acceptedTypes)) {
|
|
158
|
-
this.rejectedOver = true;
|
|
159
|
-
this.acceptedOver = false;
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (files.length > 0 && !this.acceptedOver) {
|
|
164
|
-
this.rejectedOver = false;
|
|
165
|
-
this.acceptedOver = true;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else if (transfer.files) {
|
|
169
|
-
// If the browser does not support DataTransfer.items,
|
|
170
|
-
// defer file-type checking to drop handler.
|
|
171
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/items#Browser_compatibility
|
|
172
|
-
this.rejectedOver = false;
|
|
173
|
-
this.acceptedOver = true;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
fileDrop(dropEvent) {
|
|
178
|
-
dropEvent.stopPropagation();
|
|
179
|
-
dropEvent.preventDefault();
|
|
180
|
-
this.enterEventTarget = undefined;
|
|
181
|
-
this.rejectedOver = false;
|
|
182
|
-
this.acceptedOver = false;
|
|
183
|
-
if (dropEvent.dataTransfer && dropEvent.dataTransfer.files) {
|
|
184
|
-
if (dropEvent.dataTransfer.files.length > 1) {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
if (this.fileAttachmentService.hasDirectory(dropEvent.dataTransfer.files)) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
this.handleFiles(dropEvent.dataTransfer.files);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
fileDragLeave(dragLeaveEvent) {
|
|
194
|
-
if (this.enterEventTarget === dragLeaveEvent.target) {
|
|
195
|
-
this.rejectedOver = false;
|
|
196
|
-
this.acceptedOver = false;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
deleteFileAttachment() {
|
|
200
|
-
this.value = undefined;
|
|
201
|
-
this.changeDetector.markForCheck();
|
|
202
|
-
this.emitFileChangeEvent(this.value);
|
|
203
|
-
}
|
|
204
|
-
getFileName(truncate = true) {
|
|
205
|
-
if (this.value) {
|
|
206
|
-
// tslint:disable-next-line: max-line-length
|
|
207
|
-
let dropName = this.fileItemService.isFile(this.value) && this.value.file.name
|
|
208
|
-
? this.value.file.name
|
|
209
|
-
: this.value.url;
|
|
210
|
-
if (truncate && dropName.length > 26) {
|
|
211
|
-
return dropName.slice(0, 26) + '...';
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
return dropName;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
return undefined;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
ngOnDestroy() {
|
|
222
|
-
this.fileChange.complete();
|
|
223
|
-
this.ngUnsubscribe.next();
|
|
224
|
-
this.ngUnsubscribe.complete();
|
|
225
|
-
}
|
|
226
|
-
registerOnChange(fn) {
|
|
227
|
-
this._onChange = fn;
|
|
228
|
-
}
|
|
229
|
-
registerOnTouched(fn) {
|
|
230
|
-
this._onTouched = fn;
|
|
231
|
-
}
|
|
232
|
-
writeValue(value) {
|
|
233
|
-
this.value = value;
|
|
234
|
-
this.changeDetector.markForCheck();
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* @internal
|
|
238
|
-
* Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.
|
|
239
|
-
* @param isDisabled Whether the control should be disabled.
|
|
240
|
-
*/
|
|
241
|
-
setDisabledState(isDisabled) {
|
|
242
|
-
this.disabled = isDisabled;
|
|
243
|
-
this.changeDetector.markForCheck();
|
|
244
|
-
}
|
|
245
|
-
emitClick() {
|
|
246
|
-
this.fileClick.emit({
|
|
247
|
-
file: this.value,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
emitFileChangeEvent(currentFile) {
|
|
251
|
-
if (currentFile && !currentFile.errorType) {
|
|
252
|
-
this.writeValue(currentFile);
|
|
253
|
-
}
|
|
254
|
-
this.fileChange.emit({
|
|
255
|
-
file: currentFile,
|
|
256
|
-
});
|
|
257
|
-
this.inputEl.nativeElement.value = '';
|
|
258
|
-
}
|
|
259
|
-
loadFile(file) {
|
|
260
|
-
const reader = new FileReader();
|
|
261
|
-
reader.addEventListener('load', (event) => {
|
|
262
|
-
file.url = event.target.result;
|
|
263
|
-
this.emitFileChangeEvent(file);
|
|
264
|
-
});
|
|
265
|
-
reader.addEventListener('error', (event) => {
|
|
266
|
-
this.emitFileChangeEvent(file);
|
|
267
|
-
});
|
|
268
|
-
reader.addEventListener('abort', (event) => {
|
|
269
|
-
this.emitFileChangeEvent(file);
|
|
270
|
-
});
|
|
271
|
-
reader.readAsDataURL(file.file);
|
|
272
|
-
}
|
|
273
|
-
handleFiles(files) {
|
|
274
|
-
// tslint:disable-next-line: max-line-length
|
|
275
|
-
let processedFiles = this.fileAttachmentService.checkFiles(files, this.minFileSize, this.maxFileSize, this.acceptedTypes, this.validateFn);
|
|
276
|
-
for (let file of processedFiles) {
|
|
277
|
-
if (file.errorType) {
|
|
278
|
-
this.emitFileChangeEvent(file);
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
this.loadFile(file);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
updateFileAttachmentButton() {
|
|
286
|
-
this.showFileAttachmentButton = !(this.value && this.currentThemeName === 'modern');
|
|
287
|
-
this.changeDetector.markForCheck();
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
SkyFileAttachmentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", 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 });
|
|
291
|
-
SkyFileAttachmentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", 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: [SkyFileAttachmentService], queries: [{ propertyName: "labelComponents", predicate: SkyFileAttachmentLabelComponent }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"sky-file-attachment-wrapper\">\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\"></ng-container>\n </div>\n <div\n class=\"\n sky-file-attachment-upload sky-file-attachment sky-file-attachment-target\n \"\n [ngClass]=\"{\n 'sky-file-attachment-accept': acceptedOver,\n 'sky-file-attachment-reject': rejectedOver\n }\"\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\n *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 icon=\"folder-open-o\"></sky-icon>\n {{\n value\n ? ('skyux_file_attachment_button_label_replace_file'\n | skyLibResources)\n : ('skyux_file_attachment_button_label_choose_file' | skyLibResources)\n }}\n </button>\n <sky-icon\n *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\n *ngIf=\"value || currentThemeName === 'default'\"\n class=\"sky-file-attachment-name\"\n >\n <a\n *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 class=\"sky-file-attachment-none sky-deemphasized\">\n {{ 'skyux_file_attachment_label_no_file_chosen' | skyLibResources }}\n </span>\n </ng-template>\n <button\n *ngIf=\"value\"\n class=\"sky-btn sky-btn-borderless sky-file-attachment-delete\"\n type=\"button\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_delete' | skyLibResources\n \"\n [disabled]=\"disabled\"\n [skyThemeClass]=\"{\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"deleteFileAttachment()\"\n >\n <sky-icon icon=\"trash-o\" size=\"md\"> </sky-icon>\n </button>\n </div>\n\n <img\n *ngIf=\"value && isImage()\"\n class=\"sky-file-attachment-preview-img\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n [src]=\"value.url\"\n />\n</div>\n\n<ng-template #labelContent>\n <ng-content select=\"sky-file-attachment-label\"></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 });
|
|
292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyFileAttachmentComponent, decorators: [{
|
|
293
|
-
type: Component,
|
|
294
|
-
args: [{
|
|
295
|
-
selector: 'sky-file-attachment',
|
|
296
|
-
templateUrl: './file-attachment.component.html',
|
|
297
|
-
styleUrls: ['./file-attachment.component.scss'],
|
|
298
|
-
providers: [SkyFileAttachmentService],
|
|
299
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
300
|
-
}]
|
|
301
|
-
}], ctorParameters: function () { return [{ type: i1.SkyThemeService }, { type: i0.ChangeDetectorRef }, { type: i2.SkyFileAttachmentService }, { type: i3.SkyFileItemService }, { type: i4.NgControl, decorators: [{
|
|
302
|
-
type: Self
|
|
303
|
-
}, {
|
|
304
|
-
type: Optional
|
|
305
|
-
}] }]; }, propDecorators: { acceptedTypes: [{
|
|
306
|
-
type: Input
|
|
307
|
-
}], disabled: [{
|
|
308
|
-
type: Input
|
|
309
|
-
}], maxFileSize: [{
|
|
310
|
-
type: Input
|
|
311
|
-
}], minFileSize: [{
|
|
312
|
-
type: Input
|
|
313
|
-
}], validateFn: [{
|
|
314
|
-
type: Input
|
|
315
|
-
}], fileChange: [{
|
|
316
|
-
type: Output
|
|
317
|
-
}], fileClick: [{
|
|
318
|
-
type: Output
|
|
319
|
-
}], required: [{
|
|
320
|
-
type: Input
|
|
321
|
-
}], inputEl: [{
|
|
322
|
-
type: ViewChild,
|
|
323
|
-
args: ['fileInput']
|
|
324
|
-
}], labelComponents: [{
|
|
325
|
-
type: ContentChildren,
|
|
326
|
-
args: [SkyFileAttachmentLabelComponent]
|
|
327
|
-
}] } });
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zL3NyYy9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9maWxlLWF0dGFjaG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMvc3JjL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtYXR0YWNobWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTFELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFNckUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBUUgsTUFBTSxPQUFPLDBCQUEwQjtJQXNIckMsWUFDUyxRQUF5QixFQUN4QixjQUFpQyxFQUNqQyxxQkFBK0MsRUFDL0MsZUFBbUMsRUFDZixTQUFvQjtRQUp6QyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEwQjtRQUMvQyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUFDZixjQUFTLEdBQVQsU0FBUyxDQUFX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c0JBRGpCLEtBQUs7Z0JBT0MsV0FBVztzQkFEakIsS0FBSztnQkFRQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLE1BQU07Z0JBUUEsU0FBUztzQkFEZixNQUFNO2dCQXNCQSxRQUFRO3NCQURkLEtBQUs7Z0JBMEJFLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxXQUFXO2dCQUlkLGVBQWU7c0JBRHRCLGVBQWU7dUJBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5Rm9ybXNVdGlsaXR5IH0gZnJvbSAnLi4vc2hhcmVkL2Zvcm1zLXV0aWxpdHknO1xuXG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZmlsZS1hdHRhY2htZW50LWNoYW5nZSc7XG5cbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50Q2xpY2sgfSBmcm9tICcuL3R5cGVzL2ZpbGUtYXR0YWNobWVudC1jbGljayc7XG5cbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtYXR0YWNobWVudC1sYWJlbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudFNlcnZpY2UgfSBmcm9tICcuL2ZpbGUtYXR0YWNobWVudC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU2t5RmlsZUl0ZW0gfSBmcm9tICcuL2ZpbGUtaXRlbSc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtU2VydmljZSB9IGZyb20gJy4vZmlsZS1pdGVtLnNlcnZpY2UnO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGVsZW1lbnQgdG8gYXR0YWNoIGEgc2luZ2xlIGxvY2FsIGZpbGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1maWxlLWF0dGFjaG1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NreUZpbGVBdHRhY2htZW50U2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGaWxlQXR0YWNobWVudENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWwgb2YgTUlNRSB0eXBlcyB0aGF0IHVzZXJzIGNhbiBhdHRhY2guXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBmaWxlIHR5cGVzIGFyZSBhbGxvd2VkLlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY2NlcHRlZFR5cGVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG5ld0Rpc2FibGVkU3RhdGUgPSBTa3lGb3Jtc1V0aWxpdHkuY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IG5ld0Rpc2FibGVkU3RhdGUpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3RGlzYWJsZWRTdGF0ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBpbiBieXRlcyBmb3IgdmFsaWQgZmlsZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4RmlsZVNpemU6IG51bWJlciA9IDUwMDAwMDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNpemUgaW4gYnl0ZXMgZm9yIHZhbGlkIGZpbGVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1pbkZpbGVTaXplOiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbi4gVGhpcyB2YWxpZGF0aW9uIHJ1bnMgYWxvbmdzaWRlIHRoZSBpbnRlcm5hbFxuICAgKiBmaWxlIHZhbGlkYXRpb24uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBgU2t5RmlsZUl0ZW1gIG9iamVjdCBhcyBhIHBhcmFtZXRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWxpZGF0ZUZuOiBGdW5jdGlvbjtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBhZGQgb3IgcmVtb3ZlIGZpbGVzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlQXR0YWNobWVudENoYW5nZT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIGZpbGUgbmFtZSBsaW5rLiBNYWtlIHN1cmUgdG8gYmluZCB0aGUgZXZlbnQuXG4gICAqIElmIHlvdSBkbyBub3QsIHRoZSBmaWxlIG5hbWUgbGluayB3aWxsIGJlIGEgZGVhZCBsaW5rLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUZpbGVBdHRhY2htZW50Q2xpY2s+KCk7XG5cbiAgcHVibGljIGFjY2VwdGVkT3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgaGFzTGFiZWxDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxDb21wb25lbnRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwdWJsaWMgZmlsZURyb3BEZXNjcmlwdGlvbkVsZW1lbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBsYWJlbEVsZW1lbnRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWplY3RlZE92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlucHV0IGlzIHJlcXVpcmVkIGZvciBmb3JtIHZhbGlkYXRpb24uXG4gICAqIFdoZW4geW91IHNldCB0aGlzIHByb3BlcnR5IHRvIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhZGRzIGBhcmlhLXJlcXVpcmVkYCBhbmQgYHJlcXVpcmVkYFxuICAgKiBhdHRyaWJ1dGVzIHRvIHRoZSBpbnB1dCBlbGVtZW50IHNvIHRoYXQgZm9ybXMgZGlzcGxheSBhbiBpbnZhbGlkIHN0YXRlIHVudGlsIHRoZcKgaW5wdXTCoGVsZW1lbnRcbiAgICogaXMgY29tcGxldGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBTa3lGaWxlSXRlbSkge1xuICAgIC8vIFRoZSBudWxsIGNoZWNrIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyB3cml0ZVZhbHVlIGlzIGJlaW5nIGNhbGxlZCB0d2ljZSwgZmlyc3QgdGltZSB3aXRoIGEgcGhhbnRvbSBudWxsIHZhbHVlXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDk4OFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1udWxsLWtleXdvcmRcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gdmFsdWUgIT09IHRoaXMudmFsdWUgJiYgdmFsdWUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNOZXdWYWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsZUF0dGFjaG1lbnRCdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFNreUZpbGVJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY3VycmVudFRoZW1lTmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBzaG93RmlsZUF0dGFjaG1lbnRCdXR0b246IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JylcbiAgcHJpdmF0ZSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5RmlsZUF0dGFjaG1lbnRMYWJlbENvbXBvbmVudClcbiAgcHJpdmF0ZSBsYWJlbENvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lGaWxlQXR0YWNobWVudExhYmVsQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGVudGVyRXZlbnRUYXJnZXQ6IGFueTtcblxuICBwcml2YXRlIGZpbGVBdHRhY2htZW50SWQgPSB1bmlxdWVJZCsrO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0aGVtZVN2YzogU2t5VGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmlsZUF0dGFjaG1lbnRTZXJ2aWNlOiBTa3lGaWxlQXR0YWNobWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlSXRlbVNlcnZpY2U6IFNreUZpbGVJdGVtU2VydmljZSxcbiAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2xcbiAgKSB7XG4gICAgdGhpcy5sYWJlbEVsZW1lbnRJZCA9IGBza3ktZmlsZS1hdHRhY2htZW50LWxhYmVsLSR7dGhpcy5maWxlQXR0YWNobWVudElkfWA7XG4gICAgdGhpcy5maWxlRHJvcERlc2NyaXB0aW9uRWxlbWVudElkID0gYHNreS1maWxlLWF0dGFjaG1lbnQtZHJvcC1kZXNjcmlwdGlvbi0ke3RoaXMuZmlsZUF0dGFjaG1lbnRJZH1gO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGhlbWVTdmMuc2V0dGluZ3NDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgodGhlbWVTZXR0aW5ncykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRUaGVtZU5hbWUgPSB0aGVtZVNldHRpbmdzLmN1cnJlbnRTZXR0aW5ncy50aGVtZS5uYW1lO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVBdHRhY2htZW50QnV0dG9uKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWRkcmVzcyBhIGJ1ZyBpbiBBbmd1bGFyIDcuXG4gICAgLy8gV2hlbiBhIGNvbnRyb2wgdmFsdWUgaXMgc2V0IGludGlhbGx5LCBpdHMgdmFsdWUgaXMgbm90IHJlcHJlc2VudGVkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvLyBPZiBub3RlIGlzIHRoZSBwYXJlbnQgY2hlY2sgd2hpY2ggYWxsb3dzIHVzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyByZWFjdGl2ZS5cbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2sgdGhlcmUgaXMgYSBjaGFuZ2VkIGJlZm9yZSBjaGVja2VkIGVycm9yXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUsIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBhbnlvbmUgc3RpbGwgdXNpbmcgVmFsaWRhdG9ycy5SZXF1aXJlZC5cbiAgICAgIHRoaXMucmVxdWlyZWQgPVxuICAgICAgICB0aGlzLnJlcXVpcmVkIHx8IFNreUZvcm1zVXRpbGl0eS5oYXNSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5uZ0NvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlcyB1cGRhdGluZyBjbGFzc2VzIHdoZW4gbGFiZWwgY2hhbmdlc1xuICAgIHRoaXMubGFiZWxDb21wb25lbnRzLmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNJbWFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWxlSXRlbVNlcnZpY2UuaXNJbWFnZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRyb3BDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZUV2ZW50KGZpbGVDaGFuZ2VFdmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVGaWxlcyhmaWxlQ2hhbmdlRXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ0VudGVyKGRyYWdFbnRlckV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBTYXZlIHRoaXMgdGFyZ2V0IHRvIGtub3cgd2hlbiB0aGUgZHJhZyBldmVudCBsZWF2ZXNcbiAgICB0aGlzLmVudGVyRXZlbnRUYXJnZXQgPSBkcmFnRW50ZXJFdmVudC50YXJnZXQ7XG4gICAgZHJhZ0VudGVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ0VudGVyRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJhZ092ZXIoZHJhZ092ZXJFdmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdHJhbnNmZXIgPSBkcmFnT3ZlckV2ZW50LmRhdGFUcmFuc2ZlcjtcblxuICAgIGRyYWdPdmVyRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZHJhZ092ZXJFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRyYW5zZmVyKSB7XG4gICAgICBpZiAodHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgY29uc3QgZmlsZXMgPSB0cmFuc2Zlci5pdGVtcztcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZmlsZTogYW55ID0gZmlsZXNbaW5kZXhdO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsZS50eXBlICYmXG4gICAgICAgICAgICB0aGlzLmZpbGVBdHRhY2htZW50U2VydmljZS5maWxlVHlwZVJlamVjdGVkKFxuICAgICAgICAgICAgICBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRUeXBlc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5hY2NlcHRlZE92ZXIpIHtcbiAgICAgICAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmFuc2Zlci5maWxlcykge1xuICAgICAgICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IERhdGFUcmFuc2Zlci5pdGVtcyxcbiAgICAgICAgLy8gZGVmZXIgZmlsZS10eXBlIGNoZWNraW5nIHRvIGRyb3AgaGFuZGxlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlci9pdGVtcyNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2NlcHRlZE92ZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaWxlRHJvcChkcm9wRXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGRyb3BFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkcm9wRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuZW50ZXJFdmVudFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlamVjdGVkT3ZlciA9IGZhbHNlO1xuICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG5cbiAgICBpZiAoZHJvcEV2ZW50LmRhdGFUcmFuc2ZlciAmJiBkcm9wRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICBpZiAoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZpbGVBdHRhY2htZW50U2VydmljZS5oYXNEaXJlY3RvcnkoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcylcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZXMoZHJvcEV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVEcmFnTGVhdmUoZHJhZ0xlYXZlRXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudGVyRXZlbnRUYXJnZXQgPT09IGRyYWdMZWF2ZUV2ZW50LnRhcmdldCkge1xuICAgICAgdGhpcy5yZWplY3RlZE92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuYWNjZXB0ZWRPdmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZpbGVBdHRhY2htZW50KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRGaWxlQ2hhbmdlRXZlbnQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsZU5hbWUodHJ1bmNhdGUgPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgIGxldCBkcm9wTmFtZSA9XG4gICAgICAgIHRoaXMuZmlsZUl0ZW1TZXJ2aWNlLmlzRmlsZSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmZpbGUubmFtZVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5maWxlLm5hbWVcbiAgICAgICAgICA6IHRoaXMudmFsdWUudXJsO1xuXG4gICAgICBpZiAodHJ1bmNhdGUgJiYgZHJvcE5hbWUubGVuZ3RoID4gMjYpIHtcbiAgICAgICAgcmV0dXJuIGRyb3BOYW1lLnNsaWNlKDAsIDI2KSArICcuLi4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRyb3BOYW1lO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sLiBJbXBsZW1lbnRlZCBhcyBhIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFdoZXRoZXIgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUNsaWNrLmVtaXQoe1xuICAgICAgZmlsZTogdGhpcy52YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbGVDaGFuZ2VFdmVudChjdXJyZW50RmlsZTogU2t5RmlsZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoY3VycmVudEZpbGUgJiYgIWN1cnJlbnRGaWxlLmVycm9yVHlwZSkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKGN1cnJlbnRGaWxlKTtcbiAgICB9XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoe1xuICAgICAgZmlsZTogY3VycmVudEZpbGUsXG4gICAgfSBhcyBTa3lGaWxlQXR0YWNobWVudENoYW5nZSk7XG5cbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRmlsZShmaWxlOiBTa3lGaWxlSXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIChldmVudDogYW55KTogdm9pZCA9PiB7XG4gICAgICBmaWxlLnVybCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICB0aGlzLmVtaXRGaWxlQ2hhbmdlRXZlbnQoZmlsZSk7XG4gICAgfSk7XG5cbiAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoZXZlbnQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5lbWl0RmlsZUNoYW5nZUV2ZW50KGZpbGUpO1xuICAgIH0pO1xuXG4gICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKGV2ZW50OiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICB9KTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUuZmlsZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGVzKGZpbGVzOiBGaWxlTGlzdCk6IHZvaWQge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgbGV0IHByb2Nlc3NlZEZpbGVzID0gdGhpcy5maWxlQXR0YWNobWVudFNlcnZpY2UuY2hlY2tGaWxlcyhcbiAgICAgIGZpbGVzLFxuICAgICAgdGhpcy5taW5GaWxlU2l6ZSxcbiAgICAgIHRoaXMubWF4RmlsZVNpemUsXG4gICAgICB0aGlzLmFjY2VwdGVkVHlwZXMsXG4gICAgICB0aGlzLnZhbGlkYXRlRm5cbiAgICApO1xuXG4gICAgZm9yIChsZXQgZmlsZSBvZiBwcm9jZXNzZWRGaWxlcykge1xuICAgICAgaWYgKGZpbGUuZXJyb3JUeXBlKSB7XG4gICAgICAgIHRoaXMuZW1pdEZpbGVDaGFuZ2VFdmVudChmaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9hZEZpbGUoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlQXR0YWNobWVudEJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWxlQXR0YWNobWVudEJ1dHRvbiA9ICEoXG4gICAgICB0aGlzLnZhbHVlICYmIHRoaXMuY3VycmVudFRoZW1lTmFtZSA9PT0gJ21vZGVybidcbiAgICApO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKmlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIC8qaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG59XG4iLCI8ZGl2IGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtbGFiZWwtd3JhcHBlclwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZCA/IHRydWUgOiBudWxsXCJcbiAgICBbYXR0ci5pZF09XCJsYWJlbEVsZW1lbnRJZFwiXG4gICAgW25nQ2xhc3NdPVwieyAnc2t5LWNvbnRyb2wtbGFiZWwtcmVxdWlyZWQnOiByZXF1aXJlZCAmJiBoYXNMYWJlbENvbXBvbmVudCB9XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cIlxuICAgICAgc2t5LWZpbGUtYXR0YWNobWVudC11cGxvYWQgc2t5LWZpbGUtYXR0YWNobWVudCBza3ktZmlsZS1hdHRhY2htZW50LXRhcmdldFxuICAgIFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3NreS1maWxlLWF0dGFjaG1lbnQtYWNjZXB0JzogYWNjZXB0ZWRPdmVyLFxuICAgICAgJ3NreS1maWxlLWF0dGFjaG1lbnQtcmVqZWN0JzogcmVqZWN0ZWRPdmVyXG4gICAgfVwiXG4gICAgKGRyYWdlbnRlcik9XCJmaWxlRHJhZ0VudGVyKCRldmVudClcIlxuICAgIChkcmFnb3Zlcik9XCJmaWxlRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJmaWxlRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cImZpbGVEcm9wKCRldmVudClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1kcm9wLWRlc2NyaXB0aW9uXCJcbiAgICAgIHJvbGU9XCJ0b29sdGlwXCJcbiAgICAgIFthdHRyLmlkXT1cImZpbGVEcm9wRGVzY3JpcHRpb25FbGVtZW50SWRcIlxuICAgID5cbiAgICAgIHt7ICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfZHJhZ19vcl9jbGljaycgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2Rpdj5cbiAgICA8aW5wdXRcbiAgICAgIGhpZGRlblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICBbYXR0ci5hY2NlcHRdPVwiYWNjZXB0ZWRUeXBlcyB8fCBudWxsXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAjZmlsZUlucHV0XG4gICAgLz5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNob3dGaWxlQXR0YWNobWVudEJ1dHRvblwiXG4gICAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtYnRuIHNreS1idG4gc2t5LWJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJmaWxlRHJvcERlc2NyaXB0aW9uRWxlbWVudElkXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwib25Ecm9wQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cImZvbGRlci1vcGVuLW9cIj48L3NreS1pY29uPlxuICAgICAge3tcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9yZXBsYWNlX2ZpbGUnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICA6ICgnc2t5dXhfZmlsZV9hdHRhY2htZW50X2J1dHRvbl9sYWJlbF9jaG9vc2VfZmlsZScgfCBza3lMaWJSZXNvdXJjZXMpXG4gICAgICB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxza3ktaWNvblxuICAgICAgKm5nSWY9XCJ2YWx1ZSAmJiAhaXNJbWFnZSgpICYmIGN1cnJlbnRUaGVtZU5hbWUgPT09ICdtb2Rlcm4nXCJcbiAgICAgIGNsYXNzPVwic2t5LWZpbGUtYXR0YWNobWVudC1pY29uIHNreS1kZWVtcGhhc2l6ZWRcIlxuICAgICAgaWNvbj1cImZpbGUtb1wiXG4gICAgICBzaXplPVwiMnhcIlxuICAgID5cbiAgICA8L3NreS1pY29uPlxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cInZhbHVlIHx8IGN1cnJlbnRUaGVtZU5hbWUgPT09ICdkZWZhdWx0J1wiXG4gICAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtbmFtZVwiXG4gICAgPlxuICAgICAgPGFcbiAgICAgICAgKm5nSWY9XCJ2YWx1ZTsgZWxzZSBub0ZpbGVcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJnZXRGaWxlTmFtZShmYWxzZSlcIlxuICAgICAgICAoY2xpY2spPVwiZW1pdENsaWNrKClcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRGaWxlTmFtZSgpIH19XG4gICAgICA8L2E+XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9GaWxlPlxuICAgICAgPHNwYW4gY2xhc3M9XCJza3ktZmlsZS1hdHRhY2htZW50LW5vbmUgc2t5LWRlZW1waGFzaXplZFwiPlxuICAgICAgICB7eyAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2xhYmVsX25vX2ZpbGVfY2hvc2VuJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJ2YWx1ZVwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1ib3JkZXJsZXNzIHNreS1maWxlLWF0dGFjaG1lbnQtZGVsZXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX2l0ZW1fZGVsZXRlJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICdza3ktYnRuLWljb24tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVGaWxlQXR0YWNobWVudCgpXCJcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cInRyYXNoLW9cIiBzaXplPVwibWRcIj4gPC9za3ktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGltZ1xuICAgICpuZ0lmPVwidmFsdWUgJiYgaXNJbWFnZSgpXCJcbiAgICBjbGFzcz1cInNreS1maWxlLWF0dGFjaG1lbnQtcHJldmlldy1pbWdcIlxuICAgIFthbHRdPVwiXG4gICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2ltYWdlX3ByZXZpZXdfYWx0X3RleHQnXG4gICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgXCJcbiAgICBbc3JjXT1cInZhbHVlLnVybFwiXG4gIC8+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNsYWJlbENvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1maWxlLWF0dGFjaG1lbnQtbGFiZWxcIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,94 +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 &&
|
|
49
|
-
file.webkitGetAsEntry() &&
|
|
50
|
-
file.webkitGetAsEntry().isDirectory) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
fileTypeRejected(fileType, acceptedTypes) {
|
|
57
|
-
if (!acceptedTypes) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
if (!fileType) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
let acceptedTypesUpper = acceptedTypes.toUpperCase();
|
|
64
|
-
let typeArray = acceptedTypesUpper.split(',');
|
|
65
|
-
return !this.fileTypeInArray(typeArray, fileType.toUpperCase());
|
|
66
|
-
}
|
|
67
|
-
fileTypeInArray(typeArray, fileType) {
|
|
68
|
-
if (typeArray.indexOf(fileType) !== -1) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
for (let index = 0; index < typeArray.length; index++) {
|
|
72
|
-
const type = typeArray[index];
|
|
73
|
-
const validSubtype = this.getMimeSubtype(type);
|
|
74
|
-
if (validSubtype === '*') {
|
|
75
|
-
if (this.getMimeMainType(type) === this.getMimeMainType(fileType)) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
getMimeSubtype(type) {
|
|
83
|
-
return type.substr(type.indexOf('/') + 1, type.length);
|
|
84
|
-
}
|
|
85
|
-
getMimeMainType(type) {
|
|
86
|
-
return type.substr(0, type.indexOf('/'));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
SkyFileAttachmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyFileAttachmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
90
|
-
SkyFileAttachmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyFileAttachmentService });
|
|
91
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyFileAttachmentService, decorators: [{
|
|
92
|
-
type: Injectable
|
|
93
|
-
}] });
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy9zcmMvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1hdHRhY2htZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQzVCLFVBQVUsQ0FDZixLQUFlLEVBQ2YsV0FBbUIsRUFDbkIsV0FBbUIsRUFDbkIsYUFBcUIsRUFDckIsVUFBb0I7UUFFcEIsSUFBSSxXQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUVwQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqRCxJQUFJLFFBQVEsR0FBRztnQkFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDVCxDQUFDO1lBRWpCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUFFO2dCQUNwQyxRQUFRLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztnQkFDbkMsUUFBUSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7aUJBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7Z0JBQzNDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUNuQyxRQUFRLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtpQkFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRTtnQkFDbkUsUUFBUSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO2dCQUNwQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNLElBQUksVUFBVSxFQUFFO2dCQUNyQixJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRXRDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRTtvQkFDaEIsUUFBUSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7b0JBQ2hDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2lCQUNsQztnQkFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7U0FDRjtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFlO1FBQ2pDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2pELE1BQU0sSUFBSSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFDRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsRUFDbkM7Z0JBQ0EsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxhQUFxQjtRQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksa0JBQWtCLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELElBQUksU0FBUyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFtQixFQUFFLFFBQWdCO1FBQzNELElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDckQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0MsSUFBSSxZQUFZLEtBQUssR0FBRyxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakUsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVk7UUFDakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7c0hBcEdVLHdCQUF3QjswSEFBeEIsd0JBQXdCOzRGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtIH0gZnJvbSAnLi9maWxlLWl0ZW0nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRTZXJ2aWNlIHtcbiAgcHVibGljIGNoZWNrRmlsZXMoXG4gICAgZmlsZXM6IEZpbGVMaXN0LFxuICAgIG1pbkZpbGVTaXplOiBudW1iZXIsXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcixcbiAgICBhY2NlcHRlZFR5cGVzOiBzdHJpbmcsXG4gICAgdmFsaWRhdGVGbjogRnVuY3Rpb25cbiAgKTogU2t5RmlsZUl0ZW1bXSB7XG4gICAgbGV0IGZpbGVSZXN1bHRzOiBTa3lGaWxlSXRlbVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBsZXQgZmlsZUl0ZW0gPSB7XG4gICAgICAgIGZpbGU6IGZpbGVzLml0ZW0oaW5kZXgpLFxuICAgICAgfSBhcyBTa3lGaWxlSXRlbTtcblxuICAgICAgaWYgKGZpbGVJdGVtLmZpbGUuc2l6ZSA8IG1pbkZpbGVTaXplKSB7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yVHlwZSA9ICdtaW5GaWxlU2l6ZSc7XG4gICAgICAgIGZpbGVJdGVtLmVycm9yUGFyYW0gPSBtaW5GaWxlU2l6ZS50b1N0cmluZygpO1xuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsZUl0ZW0uZmlsZS5zaXplID4gbWF4RmlsZVNpemUpIHtcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JUeXBlID0gJ21heEZpbGVTaXplJztcbiAgICAgICAgZmlsZUl0ZW0uZXJyb3JQYXJhbSA9IG1heEZpbGVTaXplLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUeXBlUmVqZWN0ZWQoZmlsZUl0ZW0uZmlsZS50eXBlLCBhY2NlcHRlZFR5cGVzKSkge1xuICAgICAgICBmaWxlSXRlbS5lcnJvclR5cGUgPSAnZmlsZVR5cGUnO1xuICAgICAgICBmaWxlSXRlbS5lcnJvclBhcmFtID0gYWNjZXB0ZWRUeXBlcztcbiAgICAgICAgZmlsZVJlc3VsdHMucHVzaChmaWxlSXRlbSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbGlkYXRlRm4pIHtcbiAgICAgICAgbGV0IGVycm9yUGFyYW0gPSB2YWxpZGF0ZUZuKGZpbGVJdGVtKTtcblxuICAgICAgICBpZiAoISFlcnJvclBhcmFtKSB7XG4gICAgICAgICAgZmlsZUl0ZW0uZXJyb3JUeXBlID0gJ3ZhbGlkYXRlJztcbiAgICAgICAgICBmaWxlSXRlbS5lcnJvclBhcmFtID0gZXJyb3JQYXJhbTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlUmVzdWx0cy5wdXNoKGZpbGVJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVSZXN1bHRzLnB1c2goZmlsZUl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZVJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBkaXJlY3RvcnkgaXMgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGBmaWxlc2AgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIGhhc0RpcmVjdG9yeShmaWxlczogRmlsZUxpc3QpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmaWxlOiBhbnkgPSBmaWxlcy5pdGVtKGluZGV4KTtcbiAgICAgIGlmIChcbiAgICAgICAgZmlsZS53ZWJraXRHZXRBc0VudHJ5ICYmXG4gICAgICAgIGZpbGUud2Via2l0R2V0QXNFbnRyeSgpICYmXG4gICAgICAgIGZpbGUud2Via2l0R2V0QXNFbnRyeSgpLmlzRGlyZWN0b3J5XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGZpbGVUeXBlUmVqZWN0ZWQoZmlsZVR5cGU6IHN0cmluZywgYWNjZXB0ZWRUeXBlczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhY2NlcHRlZFR5cGVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFmaWxlVHlwZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFjY2VwdGVkVHlwZXNVcHBlciA9IGFjY2VwdGVkVHlwZXMudG9VcHBlckNhc2UoKTtcbiAgICBsZXQgdHlwZUFycmF5ID0gYWNjZXB0ZWRUeXBlc1VwcGVyLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gIXRoaXMuZmlsZVR5cGVJbkFycmF5KHR5cGVBcnJheSwgZmlsZVR5cGUudG9VcHBlckNhc2UoKSk7XG4gIH1cblxuICBwcml2YXRlIGZpbGVUeXBlSW5BcnJheSh0eXBlQXJyYXk6IHN0cmluZ1tdLCBmaWxlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVBcnJheS5pbmRleE9mKGZpbGVUeXBlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZUFycmF5W2luZGV4XTtcbiAgICAgIGNvbnN0IHZhbGlkU3VidHlwZSA9IHRoaXMuZ2V0TWltZVN1YnR5cGUodHlwZSk7XG5cbiAgICAgIGlmICh2YWxpZFN1YnR5cGUgPT09ICcqJykge1xuICAgICAgICBpZiAodGhpcy5nZXRNaW1lTWFpblR5cGUodHlwZSkgPT09IHRoaXMuZ2V0TWltZU1haW5UeXBlKGZpbGVUeXBlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW1lU3VidHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlLnN1YnN0cih0eXBlLmluZGV4T2YoJy8nKSArIDEsIHR5cGUubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZU1haW5UeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGUuc3Vic3RyKDAsIHR5cGUuaW5kZXhPZignLycpKTtcbiAgfVxufVxuIl19
|
|
@@ -1,68 +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.13", ngImport: i0, type: SkyFileAttachmentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
18
|
-
SkyFileAttachmentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.13", 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.13", ngImport: i0, type: SkyFileAttachmentsModule, providers: [DecimalPipe, SkyFileItemService], imports: [[
|
|
33
|
-
CommonModule,
|
|
34
|
-
FormsModule,
|
|
35
|
-
SkyFormsResourcesModule,
|
|
36
|
-
SkyI18nModule,
|
|
37
|
-
SkyIconModule,
|
|
38
|
-
SkyThemeModule,
|
|
39
|
-
]] });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyFileAttachmentsModule, decorators: [{
|
|
41
|
-
type: NgModule,
|
|
42
|
-
args: [{
|
|
43
|
-
declarations: [
|
|
44
|
-
SkyFileAttachmentComponent,
|
|
45
|
-
SkyFileAttachmentLabelComponent,
|
|
46
|
-
SkyFileDropComponent,
|
|
47
|
-
SkyFileItemComponent,
|
|
48
|
-
SkyFileSizePipe,
|
|
49
|
-
],
|
|
50
|
-
imports: [
|
|
51
|
-
CommonModule,
|
|
52
|
-
FormsModule,
|
|
53
|
-
SkyFormsResourcesModule,
|
|
54
|
-
SkyI18nModule,
|
|
55
|
-
SkyIconModule,
|
|
56
|
-
SkyThemeModule,
|
|
57
|
-
],
|
|
58
|
-
exports: [
|
|
59
|
-
SkyFileAttachmentComponent,
|
|
60
|
-
SkyFileAttachmentLabelComponent,
|
|
61
|
-
SkyFileDropComponent,
|
|
62
|
-
SkyFileItemComponent,
|
|
63
|
-
SkyFileSizePipe,
|
|
64
|
-
],
|
|
65
|
-
providers: [DecimalPipe, SkyFileItemService],
|
|
66
|
-
}]
|
|
67
|
-
}] });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1hdHRhY2htZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy9zcmMvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1hdHRhY2htZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXpFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUEyQi9FLE1BQU0sT0FBTyx3QkFBd0I7O3NIQUF4Qix3QkFBd0I7dUhBQXhCLHdCQUF3QixpQkF2QmpDLDBCQUEwQjtRQUMxQiwrQkFBK0I7UUFDL0Isb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixlQUFlLGFBR2YsWUFBWTtRQUNaLFdBQVc7UUFDWCx1QkFBdUI7UUFDdkIsYUFBYTtRQUNiLGFBQWE7UUFDYixjQUFjLGFBR2QsMEJBQTBCO1FBQzFCLCtCQUErQjtRQUMvQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLGVBQWU7dUhBSU4sd0JBQXdCLGFBRnhCLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLFlBZm5DO1lBQ1AsWUFBWTtZQUNaLFdBQVc7WUFDWCx1QkFBdUI7WUFDdkIsYUFBYTtZQUNiLGFBQWE7WUFDYixjQUFjO1NBQ2Y7NEZBVVUsd0JBQXdCO2tCQXpCcEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osMEJBQTBCO3dCQUMxQiwrQkFBK0I7d0JBQy9CLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLHVCQUF1Qjt3QkFDdkIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDBCQUEwQjt3QkFDMUIsK0JBQStCO3dCQUMvQixvQkFBb0I7d0JBQ3BCLG9CQUFvQjt3QkFDcEIsZUFBZTtxQkFDaEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDO2lCQUM3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5STE4bk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcblxuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTa3lGaWxlQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS1hdHRhY2htZW50LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtYXR0YWNobWVudC1sYWJlbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBTa3lGaWxlRHJvcENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS1kcm9wLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9maWxlLWl0ZW0uY29tcG9uZW50JztcblxuaW1wb3J0IHsgU2t5RmlsZUl0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9maWxlLWl0ZW0uc2VydmljZSc7XG5cbmltcG9ydCB7IFNreUZpbGVTaXplUGlwZSB9IGZyb20gJy4vZmlsZS1zaXplLnBpcGUnO1xuXG5pbXBvcnQgeyBTa3lGb3Jtc1Jlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktZm9ybXMtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNreUZpbGVBdHRhY2htZW50Q29tcG9uZW50LFxuICAgIFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQsXG4gICAgU2t5RmlsZURyb3BDb21wb25lbnQsXG4gICAgU2t5RmlsZUl0ZW1Db21wb25lbnQsXG4gICAgU2t5RmlsZVNpemVQaXBlLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFNreUZvcm1zUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUkxOG5Nb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lUaGVtZU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFNreUZpbGVBdHRhY2htZW50Q29tcG9uZW50LFxuICAgIFNreUZpbGVBdHRhY2htZW50TGFiZWxDb21wb25lbnQsXG4gICAgU2t5RmlsZURyb3BDb21wb25lbnQsXG4gICAgU2t5RmlsZUl0ZW1Db21wb25lbnQsXG4gICAgU2t5RmlsZVNpemVQaXBlLFxuICBdLFxuICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZSwgU2t5RmlsZUl0ZW1TZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RmlsZUF0dGFjaG1lbnRzTW9kdWxlIHt9XG4iXX0=
|