@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.
Files changed (68) hide show
  1. package/documentation.json +3835 -4255
  2. package/esm2022/index.mjs +14 -11
  3. package/esm2022/lib/modules/checkbox/checkbox.component.mjs +19 -25
  4. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-change.mjs +2 -0
  5. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-click.mjs +2 -0
  6. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment-label.component.mjs +32 -0
  7. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.component.mjs +485 -0
  8. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.module.mjs +24 -0
  9. package/esm2022/lib/modules/file-attachment/file-attachment/file-attachment.service.mjs +103 -0
  10. package/esm2022/lib/modules/file-attachment/file-attachments.module.mjs +10 -73
  11. package/esm2022/lib/modules/file-attachment/file-drop/file-drop-change.mjs +2 -0
  12. package/esm2022/lib/modules/file-attachment/file-drop/file-drop.component.mjs +336 -0
  13. package/esm2022/lib/modules/file-attachment/file-drop/file-drop.module.mjs +18 -0
  14. package/esm2022/lib/modules/file-attachment/file-drop/file-item.component.mjs +163 -0
  15. package/esm2022/lib/modules/file-attachment/file-drop/file-link.mjs +2 -0
  16. package/esm2022/lib/modules/file-attachment/shared/file-item-error-type.mjs +2 -0
  17. package/esm2022/lib/modules/file-attachment/shared/file-item.mjs +2 -0
  18. package/esm2022/lib/modules/file-attachment/shared/file-item.service.mjs +71 -0
  19. package/esm2022/lib/modules/file-attachment/shared/file-size.pipe.mjs +61 -0
  20. package/esm2022/lib/modules/file-attachment/shared/file-validate-function.mjs +2 -0
  21. package/esm2022/lib/modules/input-box/input-box.component.mjs +18 -23
  22. package/esm2022/lib/modules/radio/radio-group.component.mjs +16 -23
  23. package/esm2022/lib/modules/radio/radio.component.mjs +15 -22
  24. package/esm2022/lib/modules/shared/form-field-label-text-required.directive.mjs +37 -0
  25. package/esm2022/lib/modules/shared/form-field-label-text-required.service.mjs +6 -4
  26. package/esm2022/lib/modules/toggle-switch/toggle-switch.component.mjs +14 -21
  27. package/fesm2022/skyux-forms.mjs +264 -269
  28. package/fesm2022/skyux-forms.mjs.map +1 -1
  29. package/index.d.ts +21 -18
  30. package/lib/modules/checkbox/checkbox.component.d.ts +4 -5
  31. package/lib/modules/file-attachment/{types → file-attachment}/file-attachment-change.d.ts +1 -1
  32. package/lib/modules/file-attachment/{types → file-attachment}/file-attachment-click.d.ts +1 -1
  33. package/lib/modules/file-attachment/{file-attachment-label.component.d.ts → file-attachment/file-attachment-label.component.d.ts} +7 -5
  34. package/lib/modules/file-attachment/{file-attachment.component.d.ts → file-attachment/file-attachment.component.d.ts} +8 -8
  35. package/lib/modules/file-attachment/file-attachment/file-attachment.module.d.ts +9 -0
  36. package/lib/modules/file-attachment/{file-attachment.service.d.ts → file-attachment/file-attachment.service.d.ts} +2 -2
  37. package/lib/modules/file-attachment/file-attachments.module.d.ts +6 -15
  38. package/lib/modules/file-attachment/{types → file-drop}/file-drop-change.d.ts +1 -1
  39. package/lib/modules/file-attachment/{file-drop.component.d.ts → file-drop/file-drop.component.d.ts} +7 -8
  40. package/lib/modules/file-attachment/file-drop/file-drop.module.d.ts +9 -0
  41. package/lib/modules/file-attachment/{file-item.component.d.ts → file-drop/file-item.component.d.ts} +3 -3
  42. package/lib/modules/file-attachment/{file-size.pipe.d.ts → shared/file-size.pipe.d.ts} +2 -3
  43. package/lib/modules/input-box/input-box.component.d.ts +2 -3
  44. package/lib/modules/radio/radio-group.component.d.ts +4 -5
  45. package/lib/modules/radio/radio.component.d.ts +4 -5
  46. package/lib/modules/shared/form-field-label-text-required.directive.d.ts +14 -0
  47. package/lib/modules/shared/form-field-label-text-required.service.d.ts +2 -1
  48. package/lib/modules/toggle-switch/toggle-switch.component.d.ts +4 -5
  49. package/package.json +9 -9
  50. package/esm2022/lib/modules/file-attachment/file-attachment-label.component.mjs +0 -28
  51. package/esm2022/lib/modules/file-attachment/file-attachment.component.mjs +0 -475
  52. package/esm2022/lib/modules/file-attachment/file-attachment.service.mjs +0 -103
  53. package/esm2022/lib/modules/file-attachment/file-drop.component.mjs +0 -328
  54. package/esm2022/lib/modules/file-attachment/file-item-error-type.mjs +0 -2
  55. package/esm2022/lib/modules/file-attachment/file-item.component.mjs +0 -155
  56. package/esm2022/lib/modules/file-attachment/file-item.mjs +0 -2
  57. package/esm2022/lib/modules/file-attachment/file-item.service.mjs +0 -70
  58. package/esm2022/lib/modules/file-attachment/file-link.mjs +0 -2
  59. package/esm2022/lib/modules/file-attachment/file-size.pipe.mjs +0 -61
  60. package/esm2022/lib/modules/file-attachment/file-validate-function.mjs +0 -2
  61. package/esm2022/lib/modules/file-attachment/types/file-attachment-change.mjs +0 -2
  62. package/esm2022/lib/modules/file-attachment/types/file-attachment-click.mjs +0 -2
  63. package/esm2022/lib/modules/file-attachment/types/file-drop-change.mjs +0 -2
  64. /package/lib/modules/file-attachment/{file-link.d.ts → file-drop/file-link.d.ts} +0 -0
  65. /package/lib/modules/file-attachment/{file-item-error-type.d.ts → shared/file-item-error-type.d.ts} +0 -0
  66. /package/lib/modules/file-attachment/{file-item.d.ts → shared/file-item.d.ts} +0 -0
  67. /package/lib/modules/file-attachment/{file-item.service.d.ts → shared/file-item.service.d.ts} +0 -0
  68. /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