@skyux/forms 11.0.0-alpha.8 → 11.0.0-alpha.9
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/documentation.json +3835 -4255
- package/esm2022/index.mjs +14 -11
- package/esm2022/lib/modules/checkbox/checkbox.component.mjs +19 -25
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-change.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-click.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-label.component.mjs +32 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.component.mjs +485 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.module.mjs +24 -0
- package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.service.mjs +103 -0
- package/esm2022/lib/modules/file-attachment/file-attachments.module.mjs +10 -73
- package/esm2022/lib/modules/file-attachment/file-drop/file-drop-change.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/file-drop/file-drop.component.mjs +336 -0
- package/esm2022/lib/modules/file-attachment/file-drop/file-drop.module.mjs +18 -0
- package/esm2022/lib/modules/file-attachment/file-drop/file-item.component.mjs +163 -0
- package/esm2022/lib/modules/file-attachment/file-drop/file-link.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/shared/file-item-error-type.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/shared/file-item.mjs +2 -0
- package/esm2022/lib/modules/file-attachment/shared/file-item.service.mjs +71 -0
- package/esm2022/lib/modules/file-attachment/shared/file-size.pipe.mjs +61 -0
- package/esm2022/lib/modules/file-attachment/shared/file-validate-function.mjs +2 -0
- package/esm2022/lib/modules/input-box/input-box.component.mjs +18 -23
- package/esm2022/lib/modules/radio/radio-group.component.mjs +16 -23
- package/esm2022/lib/modules/radio/radio.component.mjs +15 -22
- package/esm2022/lib/modules/shared/form-field-label-text-required.directive.mjs +37 -0
- package/esm2022/lib/modules/shared/form-field-label-text-required.service.mjs +6 -4
- package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +14 -21
- package/fesm2022/skyux-forms.mjs +264 -269
- package/fesm2022/skyux-forms.mjs.map +1 -1
- package/index.d.ts +21 -18
- package/lib/modules/checkbox/checkbox.component.d.ts +4 -5
- package/lib/modules/file-attachment/{types → file-attachment}/file-attachment-change.d.ts +1 -1
- package/lib/modules/file-attachment/{types → file-attachment}/file-attachment-click.d.ts +1 -1
- package/lib/modules/file-attachment/{file-attachment-label.component.d.ts → file-attachment/file-attachment-label.component.d.ts} +7 -5
- package/lib/modules/file-attachment/{file-attachment.component.d.ts → file-attachment/file-attachment.component.d.ts} +8 -8
- package/lib/modules/file-attachment/file-attachment/file-attachment.module.d.ts +9 -0
- package/lib/modules/file-attachment/{file-attachment.service.d.ts → file-attachment/file-attachment.service.d.ts} +2 -2
- package/lib/modules/file-attachment/file-attachments.module.d.ts +6 -15
- package/lib/modules/file-attachment/{types → file-drop}/file-drop-change.d.ts +1 -1
- package/lib/modules/file-attachment/{file-drop.component.d.ts → file-drop/file-drop.component.d.ts} +7 -8
- package/lib/modules/file-attachment/file-drop/file-drop.module.d.ts +9 -0
- package/lib/modules/file-attachment/{file-item.component.d.ts → file-drop/file-item.component.d.ts} +3 -3
- package/lib/modules/file-attachment/{file-size.pipe.d.ts → shared/file-size.pipe.d.ts} +2 -3
- package/lib/modules/input-box/input-box.component.d.ts +2 -3
- package/lib/modules/radio/radio-group.component.d.ts +4 -5
- package/lib/modules/radio/radio.component.d.ts +4 -5
- package/lib/modules/shared/form-field-label-text-required.directive.d.ts +14 -0
- package/lib/modules/shared/form-field-label-text-required.service.d.ts +2 -1
- package/lib/modules/toggle-switch/toggle-switch.component.d.ts +4 -5
- package/package.json +9 -9
- package/esm2022/lib/modules/file-attachment/file-attachment-label.component.mjs +0 -28
- package/esm2022/lib/modules/file-attachment/file-attachment.component.mjs +0 -475
- package/esm2022/lib/modules/file-attachment/file-attachment.service.mjs +0 -103
- package/esm2022/lib/modules/file-attachment/file-drop.component.mjs +0 -328
- package/esm2022/lib/modules/file-attachment/file-item-error-type.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/file-item.component.mjs +0 -155
- package/esm2022/lib/modules/file-attachment/file-item.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/file-item.service.mjs +0 -70
- package/esm2022/lib/modules/file-attachment/file-link.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/file-size.pipe.mjs +0 -61
- package/esm2022/lib/modules/file-attachment/file-validate-function.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/types/file-attachment-change.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/types/file-attachment-click.mjs +0 -2
- package/esm2022/lib/modules/file-attachment/types/file-drop-change.mjs +0 -2
- /package/lib/modules/file-attachment/{file-link.d.ts → file-drop/file-link.d.ts} +0 -0
- /package/lib/modules/file-attachment/{file-item-error-type.d.ts → shared/file-item-error-type.d.ts} +0 -0
- /package/lib/modules/file-attachment/{file-item.d.ts → shared/file-item.d.ts} +0 -0
- /package/lib/modules/file-attachment/{file-item.service.d.ts → shared/file-item.service.d.ts} +0 -0
- /package/lib/modules/file-attachment/{file-validate-function.d.ts → shared/file-validate-function.d.ts} +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, inject, } from '@angular/core';
|
|
3
|
+
import { SkyLiveAnnouncerService } from '@skyux/core';
|
|
4
|
+
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
5
|
+
import { SkyIconModule } from '@skyux/icon';
|
|
6
|
+
import { take } from 'rxjs/operators';
|
|
7
|
+
import { SkyFormsResourcesModule } from '../../shared/sky-forms-resources.module';
|
|
8
|
+
import { SkyFileSizePipe } from '../shared/file-size.pipe';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../shared/file-item.service";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
import * as i3 from "@skyux/i18n";
|
|
13
|
+
import * as i4 from "@skyux/icon";
|
|
14
|
+
export class SkyFileItemComponent {
|
|
15
|
+
/**
|
|
16
|
+
* The summary information to display about file attachments. For local files,
|
|
17
|
+
* the default summary includes the file name, file size, file preview, and a delete button.
|
|
18
|
+
* For external files, the default summary includes the URL and a delete button.
|
|
19
|
+
* You can include additional inputs to display user-entered metadata.
|
|
20
|
+
* @required
|
|
21
|
+
*/
|
|
22
|
+
set fileItem(value) {
|
|
23
|
+
this.#_fileItem = value;
|
|
24
|
+
if (value && 'file' in value) {
|
|
25
|
+
this.isFile = this.#fileItemService.isFile(value);
|
|
26
|
+
this.isImage = this.#fileItemService.isImage(value);
|
|
27
|
+
this.fileName = value.file.name;
|
|
28
|
+
this.fileSize = value.file.size;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.isFile = this.isImage = false;
|
|
32
|
+
this.fileName = '';
|
|
33
|
+
this.fileSize = undefined;
|
|
34
|
+
}
|
|
35
|
+
this.url = value?.url ?? '';
|
|
36
|
+
}
|
|
37
|
+
get fileItem() {
|
|
38
|
+
return this.#_fileItem;
|
|
39
|
+
}
|
|
40
|
+
#_fileItem;
|
|
41
|
+
#differ;
|
|
42
|
+
#fileItemService;
|
|
43
|
+
#liveAnnouncerSvc;
|
|
44
|
+
#resourcesSvc;
|
|
45
|
+
constructor(differs, fileItemService) {
|
|
46
|
+
/**
|
|
47
|
+
* Fires when users select the delete button for an item. The deleted item is passed to the
|
|
48
|
+
* function.
|
|
49
|
+
*/
|
|
50
|
+
this.deleteFile = new EventEmitter();
|
|
51
|
+
this.fileName = '';
|
|
52
|
+
this.url = '';
|
|
53
|
+
this.isFile = false;
|
|
54
|
+
this.isImage = false;
|
|
55
|
+
this.#liveAnnouncerSvc = inject(SkyLiveAnnouncerService);
|
|
56
|
+
this.#resourcesSvc = inject(SkyLibResourcesService);
|
|
57
|
+
this.#differ = differs.find({}).create();
|
|
58
|
+
this.#fileItemService = fileItemService;
|
|
59
|
+
}
|
|
60
|
+
ngDoCheck() {
|
|
61
|
+
if (this.fileItem) {
|
|
62
|
+
const changes = this.#differ.diff(this.fileItem);
|
|
63
|
+
if (changes) {
|
|
64
|
+
let cls;
|
|
65
|
+
const extensionUpper = this.#fileItemService.getFileExtensionUpper(this.fileItem);
|
|
66
|
+
let fileTypeUpper;
|
|
67
|
+
switch (extensionUpper) {
|
|
68
|
+
case '.PDF':
|
|
69
|
+
cls = 'pdf';
|
|
70
|
+
break;
|
|
71
|
+
case '.GZ':
|
|
72
|
+
case '.RAR':
|
|
73
|
+
case '.TGZ':
|
|
74
|
+
case '.ZIP':
|
|
75
|
+
cls = 'archive';
|
|
76
|
+
break;
|
|
77
|
+
case '.PPT':
|
|
78
|
+
case '.PPTX':
|
|
79
|
+
cls = 'powerpoint';
|
|
80
|
+
break;
|
|
81
|
+
case '.DOC':
|
|
82
|
+
case '.DOCX':
|
|
83
|
+
cls = 'word';
|
|
84
|
+
break;
|
|
85
|
+
case '.XLS':
|
|
86
|
+
case '.XLSX':
|
|
87
|
+
cls = 'excel';
|
|
88
|
+
break;
|
|
89
|
+
case '.TXT':
|
|
90
|
+
cls = 'text';
|
|
91
|
+
break;
|
|
92
|
+
case '.HTM':
|
|
93
|
+
case '.HTML':
|
|
94
|
+
cls = 'code';
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (!cls) {
|
|
100
|
+
fileTypeUpper = this.#fileItemService.getFileTypeUpper(this.fileItem);
|
|
101
|
+
switch (fileTypeUpper.substr(0, fileTypeUpper.indexOf('/'))) {
|
|
102
|
+
case 'AUDIO':
|
|
103
|
+
cls = 'audio';
|
|
104
|
+
break;
|
|
105
|
+
case 'IMAGE':
|
|
106
|
+
// Normally images are displayed as thumbnails, but if an image type is not recognized
|
|
107
|
+
// as being widely supported by modern browsers (e.g. TIFF files) then an icon should
|
|
108
|
+
// be displayed instead.
|
|
109
|
+
cls = 'image';
|
|
110
|
+
break;
|
|
111
|
+
case 'TEXT':
|
|
112
|
+
cls = 'text';
|
|
113
|
+
break;
|
|
114
|
+
case 'VIDEO':
|
|
115
|
+
cls = 'video';
|
|
116
|
+
break;
|
|
117
|
+
default:
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
this.icon = 'file-' + (cls ? cls + '-' : '') + 'o';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.icon = undefined;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
itemDelete() {
|
|
129
|
+
this.deleteFile.emit(this.fileItem);
|
|
130
|
+
if (!this.isFile) {
|
|
131
|
+
this.#resourcesSvc
|
|
132
|
+
.getString('skyux_file_attachment_file_upload_link_removed', this.url)
|
|
133
|
+
.pipe(take(1))
|
|
134
|
+
.subscribe((resourceString) => {
|
|
135
|
+
this.#liveAnnouncerSvc.announce(resourceString);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.#resourcesSvc
|
|
140
|
+
.getString('skyux_file_attachment_file_upload_file_removed', this.fileName)
|
|
141
|
+
.pipe(take(1))
|
|
142
|
+
.subscribe((resourceString) => {
|
|
143
|
+
this.#liveAnnouncerSvc.announce(resourceString);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileItemComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1.SkyFileItemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
148
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: SkyFileItemComponent, isStandalone: true, selector: "sky-file-item", inputs: { fileItem: "fileItem" }, outputs: { deleteFile: "deleteFile" }, ngImport: i0, template: "<div class=\"sky-file-item sky-padding-even-default\" *ngIf=\"fileItem\">\n <div class=\"sky-file-item-title\">\n <div class=\"sky-file-item-name-container\">\n <div class=\"sky-file-item-name\">\n <strong *ngIf=\"isFile\">{{ fileName }}</strong>\n <strong *ngIf=\"!isFile\">{{ url }}</strong>\n </div>\n <div class=\"sky-file-item-size\" *ngIf=\"isFile\">\n ({{ fileSize | skyFileSize }})\n </div>\n </div>\n <div class=\"sky-file-item-controls\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-file-item-btn-delete\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_delete' | skyLibResources\n \"\n (click)=\"itemDelete()\"\n >\n <sky-icon icon=\"trash-o\" size=\"lg\" />\n </button>\n </div>\n </div>\n <div class=\"sky-file-item-content\">\n <div class=\"sky-file-item-preview\">\n <div *ngIf=\"isImage\" class=\"sky-file-item-preview-img-container\">\n <img\n class=\"sky-file-item-preview-img\"\n [src]=\"url\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n />\n </div>\n <div *ngIf=\"!isImage\" class=\"sky-file-item-preview-other\">\n <sky-icon [icon]=\"icon\" />\n </div>\n </div>\n <div class=\"sky-file-item-content-custom\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: [".sky-file-item{border-top:1px solid #e2e3e4;border-bottom:1px solid #e2e3e4;border-left:1px solid #e2e3e4;border-right:1px solid #e2e3e4;background-color:#eeeeef;margin-bottom:10px}.sky-file-item-name-container{flex:1 1 auto;overflow:hidden}.sky-file-item-controls{flex:0 1 auto;padding-left:15px}.sky-file-item-name{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.sky-file-item-title{margin-bottom:10px;display:flex}.sky-file-item-content{display:flex}.sky-file-item-preview{flex-basis:25%}.sky-file-item-content-custom{flex-basis:75%}.sky-file-item-preview-img-container{text-align:center}.sky-file-item-preview-img{max-width:100%;height:auto;box-shadow:0 0 5px #666}.sky-file-item-preview-other{color:#686c73;font-size:100px;line-height:1;text-align:center;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: SkyFileSizePipe, name: "skyFileSize" }, { kind: "ngmodule", type: SkyFormsResourcesModule }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i4.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }] }); }
|
|
149
|
+
}
|
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileItemComponent, decorators: [{
|
|
151
|
+
type: Component,
|
|
152
|
+
args: [{ imports: [
|
|
153
|
+
CommonModule,
|
|
154
|
+
SkyFileSizePipe,
|
|
155
|
+
SkyFormsResourcesModule,
|
|
156
|
+
SkyIconModule,
|
|
157
|
+
], selector: 'sky-file-item', standalone: true, template: "<div class=\"sky-file-item sky-padding-even-default\" *ngIf=\"fileItem\">\n <div class=\"sky-file-item-title\">\n <div class=\"sky-file-item-name-container\">\n <div class=\"sky-file-item-name\">\n <strong *ngIf=\"isFile\">{{ fileName }}</strong>\n <strong *ngIf=\"!isFile\">{{ url }}</strong>\n </div>\n <div class=\"sky-file-item-size\" *ngIf=\"isFile\">\n ({{ fileSize | skyFileSize }})\n </div>\n </div>\n <div class=\"sky-file-item-controls\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-file-item-btn-delete\"\n [attr.aria-label]=\"\n 'skyux_file_attachment_file_item_delete' | skyLibResources\n \"\n (click)=\"itemDelete()\"\n >\n <sky-icon icon=\"trash-o\" size=\"lg\" />\n </button>\n </div>\n </div>\n <div class=\"sky-file-item-content\">\n <div class=\"sky-file-item-preview\">\n <div *ngIf=\"isImage\" class=\"sky-file-item-preview-img-container\">\n <img\n class=\"sky-file-item-preview-img\"\n [src]=\"url\"\n [alt]=\"\n 'skyux_file_attachment_file_upload_image_preview_alt_text'\n | skyLibResources\n \"\n />\n </div>\n <div *ngIf=\"!isImage\" class=\"sky-file-item-preview-other\">\n <sky-icon [icon]=\"icon\" />\n </div>\n </div>\n <div class=\"sky-file-item-content-custom\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: [".sky-file-item{border-top:1px solid #e2e3e4;border-bottom:1px solid #e2e3e4;border-left:1px solid #e2e3e4;border-right:1px solid #e2e3e4;background-color:#eeeeef;margin-bottom:10px}.sky-file-item-name-container{flex:1 1 auto;overflow:hidden}.sky-file-item-controls{flex:0 1 auto;padding-left:15px}.sky-file-item-name{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis}.sky-file-item-title{margin-bottom:10px;display:flex}.sky-file-item-content{display:flex}.sky-file-item-preview{flex-basis:25%}.sky-file-item-content-custom{flex-basis:75%}.sky-file-item-preview-img-container{text-align:center}.sky-file-item-preview-img{max-width:100%;height:auto;box-shadow:0 0 5px #666}.sky-file-item-preview-other{color:#686c73;font-size:100px;line-height:1;text-align:center;width:100%}\n"] }]
|
|
158
|
+
}], ctorParameters: () => [{ type: i0.KeyValueDiffers }, { type: i1.SkyFileItemService }], propDecorators: { fileItem: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], deleteFile: [{
|
|
161
|
+
type: Output
|
|
162
|
+
}] } });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L2ZpbGUtZHJvcC9maWxlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1kcm9wL2ZpbGUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUdsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWdCM0QsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQjs7Ozs7O09BTUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUE0QztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMs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QUcsQ0FBQztpQkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWE7aUJBQ2YsU0FBUyxDQUNSLGdEQUFnRCxFQUNoRCxJQUFJLENBQUMsUUFBUSxDQUNkO2lCQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzs4R0E1SlUsb0JBQW9CO2tHQUFwQixvQkFBb0Isa0pDcENqQyxnK0NBNkNBLDgzQkRuQkksWUFBWSw4SEFDWixlQUFlLG1EQUNmLHVCQUF1Qix1R0FDdkIsYUFBYTs7MkZBT0osb0JBQW9CO2tCQVpoQyxTQUFTOzhCQUNDO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGFBQWE7cUJBQ2QsWUFDUyxlQUFlLGNBQ2IsSUFBSTtxSEFhTCxRQUFRO3NCQURsQixLQUFLO2dCQXlCQyxVQUFVO3NCQURoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycyxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGl2ZUFubm91bmNlclNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5SWNvbk1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pY29uJztcblxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5Rm9ybXNSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2t5LWZvcm1zLXJlc291cmNlcy5tb2R1bGUnO1xuaW1wb3J0IHsgU2t5RmlsZUl0ZW0gfSBmcm9tICcuLi9zaGFyZWQvZmlsZS1pdGVtJztcbmltcG9ydCB7IFNreUZpbGVJdGVtU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9maWxlLWl0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lGaWxlU2l6ZVBpcGUgfSBmcm9tICcuLi9zaGFyZWQvZmlsZS1zaXplLnBpcGUnO1xuXG5pbXBvcnQgeyBTa3lGaWxlTGluayB9IGZyb20gJy4vZmlsZS1saW5rJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2t5RmlsZVNpemVQaXBlLFxuICAgIFNreUZvcm1zUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUljb25Nb2R1bGUsXG4gIF0sXG4gIHNlbGVjdG9yOiAnc2t5LWZpbGUtaXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHN0eWxlVXJsOiAnLi9maWxlLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RmlsZUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgLyoqXG4gICAqIFRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uIHRvIGRpc3BsYXkgYWJvdXQgZmlsZSBhdHRhY2htZW50cy4gRm9yIGxvY2FsIGZpbGVzLFxuICAgKiB0aGUgZGVmYXVsdCBzdW1tYXJ5IGluY2x1ZGVzIHRoZSBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgZmlsZSBwcmV2aWV3LCBhbmQgYSBkZWxldGUgYnV0dG9uLlxuICAgKiBGb3IgZXh0ZXJuYWwgZmlsZXMsIHRoZSBkZWZhdWx0IHN1bW1hcnkgaW5jbHVkZXMgdGhlIFVSTCBhbmQgYSBkZWxldGUgYnV0dG9uLlxuICAgKiBZb3UgY2FuIGluY2x1ZGUgYWRkaXRpb25hbCBpbnB1dHMgdG8gZGlzcGxheSB1c2VyLWVudGVyZWQgbWV0YWRhdGEuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmaWxlSXRlbSh2YWx1ZTogU2t5RmlsZUl0ZW0gfCBTa3lGaWxlTGluayB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19maWxlSXRlbSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAnZmlsZScgaW4gdmFsdWUpIHtcbiAgICAgIHRoaXMuaXNGaWxlID0gdGhpcy4jZmlsZUl0ZW1TZXJ2aWNlLmlzRmlsZSh2YWx1ZSk7XG4gICAgICB0aGlzLmlzSW1hZ2UgPSB0aGlzLiNmaWxlSXRlbVNlcnZpY2UuaXNJbWFnZSh2YWx1ZSk7XG4gICAgICB0aGlzLmZpbGVOYW1lID0gdmFsdWUuZmlsZS5uYW1lO1xuICAgICAgdGhpcy5maWxlU2l6ZSA9IHZhbHVlLmZpbGUuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpbGUgPSB0aGlzLmlzSW1hZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcbiAgICAgIHRoaXMuZmlsZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMudXJsID0gdmFsdWU/LnVybCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsZUl0ZW0oKTogU2t5RmlsZUl0ZW0gfCBTa3lGaWxlTGluayB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19maWxlSXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCB0aGUgZGVsZXRlIGJ1dHRvbiBmb3IgYW4gaXRlbS4gVGhlIGRlbGV0ZWQgaXRlbSBpcyBwYXNzZWQgdG8gdGhlXG4gICAqIGZ1bmN0aW9uLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBkZWxldGVGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lGaWxlTGluayB8IFNreUZpbGVJdGVtPigpO1xuXG4gIHB1YmxpYyBmaWxlTmFtZSA9ICcnO1xuXG4gIHB1YmxpYyBmaWxlU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB1cmwgPSAnJztcblxuICBwdWJsaWMgaWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBpc0ZpbGUgPSBmYWxzZTtcbiAgcHVibGljIGlzSW1hZ2UgPSBmYWxzZTtcblxuICAjX2ZpbGVJdGVtOiBTa3lGaWxlSXRlbSB8IFNreUZpbGVMaW5rIHwgdW5kZWZpbmVkO1xuXG4gICNkaWZmZXI6IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PjtcbiAgI2ZpbGVJdGVtU2VydmljZTogU2t5RmlsZUl0ZW1TZXJ2aWNlO1xuXG4gIHJlYWRvbmx5ICNsaXZlQW5ub3VuY2VyU3ZjID0gaW5qZWN0KFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSAjcmVzb3VyY2VzU3ZjID0gaW5qZWN0KFNreUxpYlJlc291cmNlc1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycywgZmlsZUl0ZW1TZXJ2aWNlOiBTa3lGaWxlSXRlbVNlcnZpY2UpIHtcbiAgICB0aGlzLiNkaWZmZXIgPSBkaWZmZXJzLmZpbmQoe30pLmNyZWF0ZSgpO1xuICAgIHRoaXMuI2ZpbGVJdGVtU2VydmljZSA9IGZpbGVJdGVtU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsZUl0ZW0pIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLiNkaWZmZXIuZGlmZih0aGlzLmZpbGVJdGVtKTtcblxuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgbGV0IGNsczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBleHRlbnNpb25VcHBlciA9IHRoaXMuI2ZpbGVJdGVtU2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uVXBwZXIoXG4gICAgICAgICAgdGhpcy5maWxlSXRlbSBhcyBTa3lGaWxlSXRlbSxcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGZpbGVUeXBlVXBwZXI6IHN0cmluZztcblxuICAgICAgICBzd2l0Y2ggKGV4dGVuc2lvblVwcGVyKSB7XG4gICAgICAgICAgY2FzZSAnLlBERic6XG4gICAgICAgICAgICBjbHMgPSAncGRmJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJy5HWic6XG4gICAgICAgICAgY2FzZSAnLlJBUic6XG4gICAgICAgICAgY2FzZSAnLlRHWic6XG4gICAgICAgICAgY2FzZSAnLlpJUCc6XG4gICAgICAgICAgICBjbHMgPSAnYXJjaGl2ZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuUFBUJzpcbiAgICAgICAgICBjYXNlICcuUFBUWCc6XG4gICAgICAgICAgICBjbHMgPSAncG93ZXJwb2ludCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuRE9DJzpcbiAgICAgICAgICBjYXNlICcuRE9DWCc6XG4gICAgICAgICAgICBjbHMgPSAnd29yZCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuWExTJzpcbiAgICAgICAgICBjYXNlICcuWExTWCc6XG4gICAgICAgICAgICBjbHMgPSAnZXhjZWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnLlRYVCc6XG4gICAgICAgICAgICBjbHMgPSAndGV4dCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICcuSFRNJzpcbiAgICAgICAgICBjYXNlICcuSFRNTCc6XG4gICAgICAgICAgICBjbHMgPSAnY29kZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNscykge1xuICAgICAgICAgIGZpbGVUeXBlVXBwZXIgPSB0aGlzLiNmaWxlSXRlbVNlcnZpY2UuZ2V0RmlsZVR5cGVVcHBlcihcbiAgICAgICAgICAgIHRoaXMuZmlsZUl0ZW0gYXMgU2t5RmlsZUl0ZW0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHN3aXRjaCAoZmlsZVR5cGVVcHBlci5zdWJzdHIoMCwgZmlsZVR5cGVVcHBlci5pbmRleE9mKCcvJykpKSB7XG4gICAgICAgICAgICBjYXNlICdBVURJTyc6XG4gICAgICAgICAgICAgIGNscyA9ICdhdWRpbyc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSU1BR0UnOlxuICAgICAgICAgICAgICAvLyBOb3JtYWxseSBpbWFnZXMgYXJlIGRpc3BsYXllZCBhcyB0aHVtYm5haWxzLCBidXQgaWYgYW4gaW1hZ2UgdHlwZSBpcyBub3QgcmVjb2duaXplZFxuICAgICAgICAgICAgICAvLyBhcyBiZWluZyB3aWRlbHkgc3VwcG9ydGVkIGJ5IG1vZGVybiBicm93c2VycyAoZS5nLiBUSUZGIGZpbGVzKSB0aGVuIGFuIGljb24gc2hvdWxkXG4gICAgICAgICAgICAgIC8vIGJlIGRpc3BsYXllZCBpbnN0ZWFkLlxuICAgICAgICAgICAgICBjbHMgPSAnaW1hZ2UnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RFWFQnOlxuICAgICAgICAgICAgICBjbHMgPSAndGV4dCc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVklERU8nOlxuICAgICAgICAgICAgICBjbHMgPSAndmlkZW8nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmljb24gPSAnZmlsZS0nICsgKGNscyA/IGNscyArICctJyA6ICcnKSArICdvJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pY29uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpdGVtRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlRmlsZS5lbWl0KHRoaXMuZmlsZUl0ZW0pO1xuICAgIGlmICghdGhpcy5pc0ZpbGUpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1N2Y1xuICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV91cGxvYWRfbGlua19yZW1vdmVkJywgdGhpcy51cmwpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc291cmNlU3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy4jbGl2ZUFubm91bmNlclN2Yy5hbm5vdW5jZShyZXNvdXJjZVN0cmluZyk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNyZXNvdXJjZXNTdmNcbiAgICAgICAgLmdldFN0cmluZyhcbiAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfdXBsb2FkX2ZpbGVfcmVtb3ZlZCcsXG4gICAgICAgICAgdGhpcy5maWxlTmFtZSxcbiAgICAgICAgKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNvdXJjZVN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuI2xpdmVBbm5vdW5jZXJTdmMuYW5ub3VuY2UocmVzb3VyY2VTdHJpbmcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZmlsZS1pdGVtIHNreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdFwiICpuZ0lmPVwiZmlsZUl0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInNreS1maWxlLWl0ZW0tdGl0bGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtaXRlbS1uYW1lLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWl0ZW0tbmFtZVwiPlxuICAgICAgICA8c3Ryb25nICpuZ0lmPVwiaXNGaWxlXCI+e3sgZmlsZU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgPHN0cm9uZyAqbmdJZj1cIiFpc0ZpbGVcIj57eyB1cmwgfX08L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWl0ZW0tc2l6ZVwiICpuZ0lmPVwiaXNGaWxlXCI+XG4gICAgICAgICh7eyBmaWxlU2l6ZSB8IHNreUZpbGVTaXplIH19KVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWl0ZW0tY29udHJvbHNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwic2t5LWJ0biBza3ktYnRuLWRlZmF1bHQgc2t5LWZpbGUtaXRlbS1idG4tZGVsZXRlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfaXRlbV9kZWxldGUnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCJpdGVtRGVsZXRlKClcIlxuICAgICAgPlxuICAgICAgICA8c2t5LWljb24gaWNvbj1cInRyYXNoLW9cIiBzaXplPVwibGdcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic2t5LWZpbGUtaXRlbS1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInNreS1maWxlLWl0ZW0tcHJldmlld1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VcIiBjbGFzcz1cInNreS1maWxlLWl0ZW0tcHJldmlldy1pbWctY29udGFpbmVyXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzcz1cInNreS1maWxlLWl0ZW0tcHJldmlldy1pbWdcIlxuICAgICAgICAgIFtzcmNdPVwidXJsXCJcbiAgICAgICAgICBbYWx0XT1cIlxuICAgICAgICAgICAgJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3VwbG9hZF9pbWFnZV9wcmV2aWV3X2FsdF90ZXh0J1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbWFnZVwiIGNsYXNzPVwic2t5LWZpbGUtaXRlbS1wcmV2aWV3LW90aGVyXCI+XG4gICAgICAgIDxza3ktaWNvbiBbaWNvbl09XCJpY29uXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJza3ktZmlsZS1pdGVtLWNvbnRlbnQtY3VzdG9tXCI+XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvZmlsZS1kcm9wL2ZpbGUtbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTa3lGaWxlTGluayB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIGZvciB0aGUgbGlua2VkIGZpbGUuXG4gICAqL1xuICB1cmw6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pdGVtLWVycm9yLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9zaGFyZWQvZmlsZS1pdGVtLWVycm9yLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIHR5cGUgb2YgZXJyb3IgdGhhdCB3YXMgdGhyb3duLlxuICovXG5leHBvcnQgdHlwZSBTa3lGaWxlSXRlbUVycm9yVHlwZSA9XG4gIHwgJ2ZpbGVUeXBlJ1xuICB8ICdtaW5GaWxlU2l6ZSdcbiAgfCAnbWF4RmlsZVNpemUnXG4gIHwgJ3ZhbGlkYXRlJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm1zL3NyYy9saWIvbW9kdWxlcy9maWxlLWF0dGFjaG1lbnQvc2hhcmVkL2ZpbGUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5RmlsZUl0ZW1FcnJvclR5cGUgfSBmcm9tICcuL2ZpbGUtaXRlbS1lcnJvci10eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBTa3lGaWxlSXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgd2FzIGFkZGVkIG9yIHJlbW92ZWQuXG4gICAqL1xuICBmaWxlOiBGaWxlO1xuICAvKipcbiAgICogVGhlIFtkYXRhIFVSTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXMpXG4gICAqIGZvciB0aGUgZmlsZSB0aGF0IHdhcyBhZGRlZCBvciByZW1vdmVkLlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBlcnJvciB0aGF0IGNhdXNlZCB0aGUgZmlsZSB0byBiZSByZWplY3RlZC5cbiAgICovXG4gIGVycm9yVHlwZT86IFNreUZpbGVJdGVtRXJyb3JUeXBlO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFib3V0IHRoZSBlcnJvciB0aGF0IGNhdXNlZCB0aGUgZmlsZSB0byBiZSByZWplY3RlZC5cbiAgICovXG4gIGVycm9yUGFyYW0/OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export class SkyFileItemService {
|
|
7
|
+
isFile(fileItem) {
|
|
8
|
+
const file = fileItem.file;
|
|
9
|
+
return !!(file &&
|
|
10
|
+
file !== undefined &&
|
|
11
|
+
file !== null &&
|
|
12
|
+
file.size !== undefined &&
|
|
13
|
+
file.size !== null);
|
|
14
|
+
}
|
|
15
|
+
isImage(fileItem) {
|
|
16
|
+
const fileTypeUpper = this.getFileTypeUpper(fileItem);
|
|
17
|
+
const slashIndex = fileTypeUpper.indexOf('/');
|
|
18
|
+
if (slashIndex >= 0) {
|
|
19
|
+
switch (fileTypeUpper.substr(fileTypeUpper.indexOf('/') + 1)) {
|
|
20
|
+
case 'BMP':
|
|
21
|
+
case 'GIF':
|
|
22
|
+
case 'JPEG':
|
|
23
|
+
case 'PNG':
|
|
24
|
+
return true;
|
|
25
|
+
default:
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
getFileExtensionUpper(fileItem) {
|
|
32
|
+
let extension = '', name;
|
|
33
|
+
/* istanbul ignore else */
|
|
34
|
+
/* sanity check */
|
|
35
|
+
if (fileItem) {
|
|
36
|
+
const file = fileItem.file;
|
|
37
|
+
if (file) {
|
|
38
|
+
/* istanbul ignore next */
|
|
39
|
+
name = file.name || '';
|
|
40
|
+
/* istanbul ignore next */
|
|
41
|
+
extension = name.substr(name.lastIndexOf('.')) || '';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
extension = '';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return extension.toUpperCase();
|
|
48
|
+
}
|
|
49
|
+
getFileTypeUpper(fileItem) {
|
|
50
|
+
let fileType = '';
|
|
51
|
+
/* istanbul ignore else */
|
|
52
|
+
/* sanity check */
|
|
53
|
+
if (fileItem) {
|
|
54
|
+
const file = fileItem.file;
|
|
55
|
+
if (file) {
|
|
56
|
+
fileType = file.type || '';
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
fileType = '';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return fileType.toUpperCase();
|
|
63
|
+
}
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileItemService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
65
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileItemService, providedIn: 'root' }); }
|
|
66
|
+
}
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileItemService, decorators: [{
|
|
68
|
+
type: Injectable,
|
|
69
|
+
args: [{ providedIn: 'root' }]
|
|
70
|
+
}] });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9zaGFyZWQvZmlsZS1pdGVtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBQyxRQUFxQjtRQUNqQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxDQUFDLENBQ1AsSUFBSTtZQUNKLElBQUksS0FBSyxTQUFTO1lBQ2xCLElBQUksS0FBSyxJQUFJO1lBQ2IsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFxQjtRQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQixRQUFRLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxLQUFLLEtBQUssQ0FBQztnQkFDWCxLQUFLLEtBQUssQ0FBQztnQkFDWCxLQUFLLE1BQU0sQ0FBQztnQkFDWixLQUFLLEtBQUs7b0JBQ1IsT0FBTyxJQUFJLENBQUM7Z0JBQ2Q7b0JBQ0UsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0scUJBQXFCLENBQUMsUUFBcUI7UUFDaEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUNoQixJQUFZLENBQUM7UUFFZiwwQkFBMEI7UUFDMUIsa0JBQWtCO1FBQ2xCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsMEJBQTBCO2dCQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLDBCQUEwQjtnQkFDMUIsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFxQjtRQUMzQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsMEJBQTBCO1FBQzFCLGtCQUFrQjtRQUNsQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7OEdBbkVVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBREwsTUFBTTs7MkZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUZpbGVJdGVtIH0gZnJvbSAnLi9maWxlLWl0ZW0nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFNreUZpbGVJdGVtU2VydmljZSB7XG4gIHB1YmxpYyBpc0ZpbGUoZmlsZUl0ZW06IFNreUZpbGVJdGVtKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZSA9IGZpbGVJdGVtLmZpbGU7XG5cbiAgICByZXR1cm4gISEoXG4gICAgICBmaWxlICYmXG4gICAgICBmaWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGZpbGUgIT09IG51bGwgJiZcbiAgICAgIGZpbGUuc2l6ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBmaWxlLnNpemUgIT09IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzSW1hZ2UoZmlsZUl0ZW06IFNreUZpbGVJdGVtKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZVR5cGVVcHBlciA9IHRoaXMuZ2V0RmlsZVR5cGVVcHBlcihmaWxlSXRlbSk7XG4gICAgY29uc3Qgc2xhc2hJbmRleCA9IGZpbGVUeXBlVXBwZXIuaW5kZXhPZignLycpO1xuXG4gICAgaWYgKHNsYXNoSW5kZXggPj0gMCkge1xuICAgICAgc3dpdGNoIChmaWxlVHlwZVVwcGVyLnN1YnN0cihmaWxlVHlwZVVwcGVyLmluZGV4T2YoJy8nKSArIDEpKSB7XG4gICAgICAgIGNhc2UgJ0JNUCc6XG4gICAgICAgIGNhc2UgJ0dJRic6XG4gICAgICAgIGNhc2UgJ0pQRUcnOlxuICAgICAgICBjYXNlICdQTkcnOlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlRXh0ZW5zaW9uVXBwZXIoZmlsZUl0ZW06IFNreUZpbGVJdGVtKTogc3RyaW5nIHtcbiAgICBsZXQgZXh0ZW5zaW9uID0gJycsXG4gICAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChmaWxlSXRlbSkge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVJdGVtLmZpbGU7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBuYW1lID0gZmlsZS5uYW1lIHx8ICcnO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBleHRlbnNpb24gPSBuYW1lLnN1YnN0cihuYW1lLmxhc3RJbmRleE9mKCcuJykpIHx8ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEZpbGVUeXBlVXBwZXIoZmlsZUl0ZW06IFNreUZpbGVJdGVtKTogc3RyaW5nIHtcbiAgICBsZXQgZmlsZVR5cGUgPSAnJztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmIChmaWxlSXRlbSkge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVJdGVtLmZpbGU7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBmaWxlVHlwZSA9IGZpbGUudHlwZSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVUeXBlID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVUeXBlLnRvVXBwZXJDYXNlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { formatNumber } from '@angular/common';
|
|
2
|
+
import { Pipe } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@skyux/i18n";
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export class SkyFileSizePipe {
|
|
9
|
+
#resourcesService;
|
|
10
|
+
#defaultLocale = 'en-US';
|
|
11
|
+
constructor(resourcesService) {
|
|
12
|
+
this.#resourcesService = resourcesService;
|
|
13
|
+
}
|
|
14
|
+
transform(input) {
|
|
15
|
+
let decimalPlaces = 0, dividend = 1, template;
|
|
16
|
+
if (input === null || input === undefined) {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
if (typeof input === 'string') {
|
|
20
|
+
input = Number.parseInt(input);
|
|
21
|
+
}
|
|
22
|
+
if (Math.abs(input) === 1) {
|
|
23
|
+
template = 'skyux_file_attachment_file_size_b_singular';
|
|
24
|
+
}
|
|
25
|
+
else if (input < 1024) {
|
|
26
|
+
template = 'skyux_file_attachment_file_size_b_plural';
|
|
27
|
+
}
|
|
28
|
+
else if (input < Math.pow(1024, 2)) {
|
|
29
|
+
template = 'skyux_file_attachment_file_size_kb';
|
|
30
|
+
dividend = 1024;
|
|
31
|
+
}
|
|
32
|
+
else if (input < Math.pow(1024, 3)) {
|
|
33
|
+
template = 'skyux_file_attachment_file_size_mb';
|
|
34
|
+
dividend = Math.pow(1024, 2);
|
|
35
|
+
decimalPlaces = 1;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
template = 'skyux_file_attachment_file_size_gb';
|
|
39
|
+
dividend = Math.pow(1024, 3);
|
|
40
|
+
decimalPlaces = 1;
|
|
41
|
+
}
|
|
42
|
+
const roundedSize = Math.floor(input / (dividend / Math.pow(10, decimalPlaces))) /
|
|
43
|
+
Math.pow(10, decimalPlaces);
|
|
44
|
+
const formattedSize = formatNumber(roundedSize, this.#defaultLocale, '.0-3');
|
|
45
|
+
return this.#getString(template, formattedSize);
|
|
46
|
+
}
|
|
47
|
+
#getString(key, ...args) {
|
|
48
|
+
// TODO: Need to implement the async `getString` method in a breaking change.
|
|
49
|
+
return this.#resourcesService.getStringForLocale({ locale: this.#defaultLocale }, key, ...args);
|
|
50
|
+
}
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileSizePipe, deps: [{ token: i1.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
52
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.2", ngImport: i0, type: SkyFileSizePipe, isStandalone: true, name: "skyFileSize" }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: SkyFileSizePipe, decorators: [{
|
|
55
|
+
type: Pipe,
|
|
56
|
+
args: [{
|
|
57
|
+
name: 'skyFileSize',
|
|
58
|
+
standalone: true,
|
|
59
|
+
}]
|
|
60
|
+
}], ctorParameters: () => [{ type: i1.SkyLibResourcesService }] });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zaXplLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybXMvc3JjL2xpYi9tb2R1bGVzL2ZpbGUtYXR0YWNobWVudC9zaGFyZWQvZmlsZS1zaXplLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFHcEQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sZUFBZTtJQUNqQixpQkFBaUIsQ0FBeUI7SUFDMUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUVsQyxZQUFZLGdCQUF3QztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUE4QjtRQUM3QyxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQ25CLFFBQVEsR0FBRyxDQUFDLEVBQ1osUUFBZ0IsQ0FBQztRQUVuQixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixRQUFRLEdBQUcsNENBQTRDLENBQUM7UUFDMUQsQ0FBQzthQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3hCLFFBQVEsR0FBRywwQ0FBMEMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxRQUFRLEdBQUcsb0NBQW9DLENBQUM7WUFDaEQsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxRQUFRLEdBQUcsb0NBQW9DLENBQUM7WUFDaEQsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLEdBQUcsb0NBQW9DLENBQUM7WUFDaEQsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFOUIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUNoQyxXQUFXLEVBQ1gsSUFBSSxDQUFDLGNBQWMsRUFDbkIsTUFBTSxDQUNQLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBZTtRQUN4Qyw2RUFBNkU7UUFDN0UsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQzlDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFDL0IsR0FBRyxFQUNILEdBQUcsSUFBSSxDQUNSLENBQUM7SUFDSixDQUFDOzhHQTFEVSxlQUFlOzRHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGFBQWE7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdE51bWJlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdza3lGaWxlU2l6ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNreUZpbGVTaXplUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICByZWFkb25seSAjcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgcmVhZG9ubHkgI2RlZmF1bHRMb2NhbGUgPSAnZW4tVVMnO1xuXG4gIGNvbnN0cnVjdG9yKHJlc291cmNlc1NlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UpIHtcbiAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlID0gcmVzb3VyY2VzU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm0oaW5wdXQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgICBsZXQgZGVjaW1hbFBsYWNlcyA9IDAsXG4gICAgICBkaXZpZGVuZCA9IDEsXG4gICAgICB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgaW5wdXQgPSBOdW1iZXIucGFyc2VJbnQoaW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyhpbnB1dCkgPT09IDEpIHtcbiAgICAgIHRlbXBsYXRlID0gJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3NpemVfYl9zaW5ndWxhcic7XG4gICAgfSBlbHNlIGlmIChpbnB1dCA8IDEwMjQpIHtcbiAgICAgIHRlbXBsYXRlID0gJ3NreXV4X2ZpbGVfYXR0YWNobWVudF9maWxlX3NpemVfYl9wbHVyYWwnO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgPCBNYXRoLnBvdygxMDI0LCAyKSkge1xuICAgICAgdGVtcGxhdGUgPSAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfc2l6ZV9rYic7XG4gICAgICBkaXZpZGVuZCA9IDEwMjQ7XG4gICAgfSBlbHNlIGlmIChpbnB1dCA8IE1hdGgucG93KDEwMjQsIDMpKSB7XG4gICAgICB0ZW1wbGF0ZSA9ICdza3l1eF9maWxlX2F0dGFjaG1lbnRfZmlsZV9zaXplX21iJztcbiAgICAgIGRpdmlkZW5kID0gTWF0aC5wb3coMTAyNCwgMik7XG4gICAgICBkZWNpbWFsUGxhY2VzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGUgPSAnc2t5dXhfZmlsZV9hdHRhY2htZW50X2ZpbGVfc2l6ZV9nYic7XG4gICAgICBkaXZpZGVuZCA9IE1hdGgucG93KDEwMjQsIDMpO1xuICAgICAgZGVjaW1hbFBsYWNlcyA9IDE7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91bmRlZFNpemUgPVxuICAgICAgTWF0aC5mbG9vcihpbnB1dCAvIChkaXZpZGVuZCAvIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKSkpIC9cbiAgICAgIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZFNpemUgPSBmb3JtYXROdW1iZXIoXG4gICAgICByb3VuZGVkU2l6ZSxcbiAgICAgIHRoaXMuI2RlZmF1bHRMb2NhbGUsXG4gICAgICAnLjAtMycsXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLiNnZXRTdHJpbmcodGVtcGxhdGUsIGZvcm1hdHRlZFNpemUpO1xuICB9XG5cbiAgI2dldFN0cmluZyhrZXk6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBOZWVkIHRvIGltcGxlbWVudCB0aGUgYXN5bmMgYGdldFN0cmluZ2AgbWV0aG9kIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHJldHVybiB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlLmdldFN0cmluZ0ZvckxvY2FsZShcbiAgICAgIHsgbG9jYWxlOiB0aGlzLiNkZWZhdWx0TG9jYWxlIH0sXG4gICAgICBrZXksXG4gICAgICAuLi5hcmdzLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12YWxpZGF0ZS1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3Jtcy9zcmMvbGliL21vZHVsZXMvZmlsZS1hdHRhY2htZW50L3NoYXJlZC9maWxlLXZhbGlkYXRlLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lGaWxlSXRlbSB9IGZyb20gJy4vZmlsZS1pdGVtJztcblxuLyoqXG4gKiBDdXN0b20gdmFsaWRhdGlvbiBydW4gb24gZWFjaCBmaWxlIHVwbG9hZGVkLiBUaGUgc3RyaW5nIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2UgaW4gbXVsdGktZmlsZSBhdHRhY2htZW50LlxuICovXG5leHBvcnQgdHlwZSBTa3lGaWxlVmFsaWRhdGVGbiA9IChmaWxlOiBTa3lGaWxlSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuIl19
|