@rlucan/ui 14.2.5 → 14.2.6

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 (105) hide show
  1. package/{esm2020 → esm2022}/lib/action-button/action-button.component.mjs +99 -99
  2. package/esm2022/lib/action-icon/action-icon.component.mjs +37 -0
  3. package/esm2022/lib/autocomplete/autocomplete.component.mjs +391 -0
  4. package/esm2022/lib/avatar/avatar.component.mjs +34 -0
  5. package/esm2022/lib/button/button.component.mjs +57 -0
  6. package/esm2022/lib/checkbox/checkbox.component.mjs +39 -0
  7. package/{esm2020 → esm2022}/lib/checkbox-group/checkbox-group.component.mjs +91 -91
  8. package/esm2022/lib/currency/currency.component.mjs +151 -0
  9. package/esm2022/lib/date/date.component.mjs +68 -0
  10. package/{esm2020 → esm2022}/lib/dialog/dialog.component.mjs +37 -37
  11. package/esm2022/lib/directives/force-visibility/force-visibility.directive.mjs +104 -0
  12. package/esm2022/lib/editor/editor.component.mjs +119 -0
  13. package/{esm2020 → esm2022}/lib/elements/burger/burger.component.mjs +21 -21
  14. package/{esm2020 → esm2022}/lib/elements/expander/expander.component.mjs +28 -28
  15. package/{esm2020 → esm2022}/lib/elements/validation-message/validation-message.component.mjs +47 -47
  16. package/esm2022/lib/file/file.component.mjs +145 -0
  17. package/esm2022/lib/file-uploader/ui-file-uploader.component.mjs +405 -0
  18. package/esm2022/lib/input/input.component.mjs +265 -0
  19. package/esm2022/lib/input-autocomplete/input-autocomplete.component.mjs +277 -0
  20. package/esm2022/lib/layouts/base/ui-base-layout.component.mjs +22 -0
  21. package/esm2022/lib/layouts/base/ui-base.component.mjs +74 -0
  22. package/esm2022/lib/layouts/simple/ui-simple-layout.component.mjs +18 -0
  23. package/esm2022/lib/layouts/simple/ui-simple.component.mjs +166 -0
  24. package/{esm2020 → esm2022}/lib/radio/radio.component.mjs +21 -21
  25. package/esm2022/lib/radio-group/radio-group.component.mjs +53 -0
  26. package/esm2022/lib/select/select.component.mjs +115 -0
  27. package/{esm2020 → esm2022}/lib/services/message-box.service.mjs +112 -112
  28. package/{esm2020 → esm2022}/lib/services/toast.service.mjs +23 -23
  29. package/{esm2020 → esm2022}/lib/services/ui-file.service.mjs +71 -71
  30. package/{esm2020 → esm2022}/lib/services/ui-translate.service.mjs +32 -32
  31. package/{esm2020 → esm2022}/lib/submit-button/submit-button.component.mjs +72 -72
  32. package/esm2022/lib/table/table.component.mjs +97 -0
  33. package/esm2022/lib/text-area/text-area.component.mjs +46 -0
  34. package/{esm2020 → esm2022}/lib/ui.model.mjs +1 -1
  35. package/esm2022/lib/ui.module.mjs +269 -0
  36. package/esm2022/public-api.mjs +35 -0
  37. package/{esm2020 → esm2022}/rlucan-ui.mjs +4 -4
  38. package/fesm2022/rlucan-ui.mjs +3442 -0
  39. package/fesm2022/rlucan-ui.mjs.map +1 -0
  40. package/index.d.ts +5 -5
  41. package/lib/action-button/action-button.component.d.ts +32 -32
  42. package/lib/action-icon/action-icon.component.d.ts +15 -15
  43. package/lib/autocomplete/autocomplete.component.d.ts +57 -57
  44. package/lib/avatar/avatar.component.d.ts +14 -14
  45. package/lib/button/button.component.d.ts +18 -18
  46. package/lib/checkbox/checkbox.component.d.ts +15 -15
  47. package/lib/checkbox-group/checkbox-group.component.d.ts +18 -18
  48. package/lib/currency/currency.component.d.ts +31 -30
  49. package/lib/date/date.component.d.ts +24 -24
  50. package/lib/dialog/dialog.component.d.ts +13 -13
  51. package/lib/directives/force-visibility/force-visibility.directive.d.ts +22 -20
  52. package/lib/editor/editor.component.d.ts +24 -0
  53. package/lib/elements/burger/burger.component.d.ts +9 -9
  54. package/lib/elements/expander/expander.component.d.ts +10 -10
  55. package/lib/elements/validation-message/validation-message.component.d.ts +12 -12
  56. package/lib/file/file.component.d.ts +35 -35
  57. package/lib/file-uploader/ui-file-uploader.component.d.ts +102 -102
  58. package/lib/input/input.component.d.ts +42 -41
  59. package/lib/input-autocomplete/input-autocomplete.component.d.ts +44 -0
  60. package/lib/{base → layouts/base}/ui-base-layout.component.d.ts +8 -8
  61. package/lib/{base → layouts/base}/ui-base.component.d.ts +23 -23
  62. package/lib/{simple → layouts/simple}/ui-simple-layout.component.d.ts +8 -7
  63. package/lib/{simple → layouts/simple}/ui-simple.component.d.ts +40 -39
  64. package/lib/radio/radio.component.d.ts +8 -8
  65. package/lib/radio-group/radio-group.component.d.ts +18 -18
  66. package/lib/select/select.component.d.ts +35 -33
  67. package/lib/services/message-box.service.d.ts +58 -58
  68. package/lib/services/toast.service.d.ts +13 -13
  69. package/lib/services/ui-file.service.d.ts +33 -33
  70. package/lib/services/ui-translate.service.d.ts +11 -11
  71. package/lib/submit-button/submit-button.component.d.ts +21 -21
  72. package/lib/table/table.component.d.ts +36 -36
  73. package/lib/text-area/text-area.component.d.ts +18 -18
  74. package/lib/ui.model.d.ts +2 -2
  75. package/lib/ui.module.d.ts +59 -56
  76. package/package.json +22 -24
  77. package/public-api.d.ts +29 -27
  78. package/scss/ui-defaults.scss +1 -1
  79. package/src/js/editorjs.mjs +9634 -0
  80. package/ui.scss +41 -14
  81. package/esm2020/lib/action-icon/action-icon.component.mjs +0 -37
  82. package/esm2020/lib/autocomplete/autocomplete.component.mjs +0 -391
  83. package/esm2020/lib/avatar/avatar.component.mjs +0 -34
  84. package/esm2020/lib/base/ui-base-layout.component.mjs +0 -22
  85. package/esm2020/lib/base/ui-base.component.mjs +0 -74
  86. package/esm2020/lib/button/button.component.mjs +0 -57
  87. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -39
  88. package/esm2020/lib/currency/currency.component.mjs +0 -148
  89. package/esm2020/lib/date/date.component.mjs +0 -68
  90. package/esm2020/lib/directives/force-visibility/force-visibility.directive.mjs +0 -96
  91. package/esm2020/lib/file/file.component.mjs +0 -145
  92. package/esm2020/lib/file-uploader/ui-file-uploader.component.mjs +0 -394
  93. package/esm2020/lib/input/input.component.mjs +0 -258
  94. package/esm2020/lib/radio-group/radio-group.component.mjs +0 -53
  95. package/esm2020/lib/select/select.component.mjs +0 -91
  96. package/esm2020/lib/simple/ui-simple-layout.component.mjs +0 -15
  97. package/esm2020/lib/simple/ui-simple.component.mjs +0 -154
  98. package/esm2020/lib/table/table.component.mjs +0 -97
  99. package/esm2020/lib/text-area/text-area.component.mjs +0 -46
  100. package/esm2020/lib/ui.module.mjs +0 -255
  101. package/esm2020/public-api.mjs +0 -33
  102. package/fesm2015/rlucan-ui.mjs +0 -3017
  103. package/fesm2015/rlucan-ui.mjs.map +0 -1
  104. package/fesm2020/rlucan-ui.mjs +0 -2982
  105. package/fesm2020/rlucan-ui.mjs.map +0 -1
@@ -1,47 +1,47 @@
1
- import { Component, Inject, Input } from '@angular/core';
2
- import { UI_TRANSLATESERVICE } from '../../services/ui-translate.service';
3
- import * as i0 from "@angular/core";
4
- export class ValidationMessageComponent {
5
- constructor(translateService) {
6
- this.translateService = translateService;
7
- }
8
- ngOnInit() {
9
- }
10
- get errorMessage() {
11
- let e = { code: 'Neznámá chyba' };
12
- const errors = this.validationErrors;
13
- if (errors) {
14
- Object.keys(errors).find(a => {
15
- e = { code: a, data: errors[a] };
16
- return true;
17
- });
18
- switch (e.code) {
19
- case 'required':
20
- case 'cbGroupRequired':
21
- case 'email':
22
- case 'matDatepickerParse':
23
- case 'maxlength':
24
- case 'minlength':
25
- return this.translateService.instant('ui.controls.validation.' + e.code, e.data);
26
- case 'positive':
27
- return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
28
- case 'custom':
29
- return this.translateService.instant(e.data);
30
- default:
31
- return this.translateService.instant(e.code);
32
- }
33
- }
34
- }
35
- }
36
- ValidationMessageComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ValidationMessageComponent, deps: [{ token: UI_TRANSLATESERVICE }], target: i0.ɵɵFactoryTarget.Component });
37
- ValidationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: ValidationMessageComponent, selector: "ui-validation-message", inputs: { validationErrors: "validationErrors" }, ngImport: i0, template: "{{ errorMessage }}\r\n" });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: ValidationMessageComponent, decorators: [{
39
- type: Component,
40
- args: [{ selector: 'ui-validation-message', template: "{{ errorMessage }}\r\n" }]
41
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
42
- type: Inject,
43
- args: [UI_TRANSLATESERVICE]
44
- }] }]; }, propDecorators: { validationErrors: [{
45
- type: Input
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZWxlbWVudHMvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2VsZW1lbnRzL3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBdUIsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFNL0YsTUFBTSxPQUFPLDBCQUEwQjtJQUlyQyxZQUFtRCxnQkFBcUM7UUFBckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtJQUFJLENBQUM7SUFFN0YsUUFBUTtJQUNSLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxJQUFJLENBQUMsR0FBUSxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDckMsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2QsS0FBSyxVQUFVLENBQUM7Z0JBQ2hCLEtBQUssaUJBQWlCLENBQUM7Z0JBQ3ZCLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssV0FBVyxDQUFDO2dCQUNqQixLQUFLLFdBQVc7b0JBQ2QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRixLQUFLLFVBQVU7b0JBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUMzSSxLQUFLLFFBQVE7b0JBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0M7b0JBQ0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQzs7dUhBakNVLDBCQUEwQixrQkFJakIsbUJBQW1COzJHQUo1QiwwQkFBMEIsK0dDUHZDLHdCQUNBOzJGRE1hLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx1QkFBdUI7OzBCQU9wQixNQUFNOzJCQUFDLG1CQUFtQjs0Q0FGOUIsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSVVpVHJhbnNsYXRlU2VydmljZSwgVUlfVFJBTlNMQVRFU0VSVklDRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktdmFsaWRhdGlvbi1tZXNzYWdlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB2YWxpZGF0aW9uRXJyb3JzO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFVJX1RSQU5TTEFURVNFUlZJQ0UpIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBJVWlUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMudmFsaWRhdGlvbkVycm9ycztcclxuICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gICAgICAgIGUgPSB7Y29kZTogYSwgZGF0YTogZXJyb3JzW2FdfTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgIGNhc2UgJ2NiR3JvdXBSZXF1aXJlZCc6XHJcbiAgICAgICAgY2FzZSAnZW1haWwnOlxyXG4gICAgICAgIGNhc2UgJ21hdERhdGVwaWNrZXJQYXJzZSc6XHJcbiAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcclxuICAgICAgICBjYXNlICdtaW5sZW5ndGgnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLicgKyBlLmNvZGUsIGUuZGF0YSk7XHJcbiAgICAgICAgY2FzZSAncG9zaXRpdmUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGlzTmFOKE51bWJlcihlLmRhdGEpKSA/ICd1aS5jb250cm9scy52YWxpZGF0aW9uLmludmFsaWROdW1iZXInIDogJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucG9zaXRpdmUnKTtcclxuICAgICAgICBjYXNlICdjdXN0b20nOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGUuZGF0YSk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsInt7IGVycm9yTWVzc2FnZSB9fVxyXG4iXX0=
1
+ import { Component, Inject, Input } from '@angular/core';
2
+ import { UI_TRANSLATESERVICE } from '../../services/ui-translate.service';
3
+ import * as i0 from "@angular/core";
4
+ export class ValidationMessageComponent {
5
+ constructor(translateService) {
6
+ this.translateService = translateService;
7
+ }
8
+ ngOnInit() {
9
+ }
10
+ get errorMessage() {
11
+ let e = { code: 'Neznámá chyba' };
12
+ const errors = this.validationErrors;
13
+ if (errors) {
14
+ Object.keys(errors).find(a => {
15
+ e = { code: a, data: errors[a] };
16
+ return true;
17
+ });
18
+ switch (e.code) {
19
+ case 'required':
20
+ case 'cbGroupRequired':
21
+ case 'email':
22
+ case 'matDatepickerParse':
23
+ case 'maxlength':
24
+ case 'minlength':
25
+ return this.translateService.instant('ui.controls.validation.' + e.code, e.data);
26
+ case 'positive':
27
+ return this.translateService.instant(isNaN(Number(e.data)) ? 'ui.controls.validation.invalidNumber' : 'ui.controls.validation.positive');
28
+ case 'custom':
29
+ return this.translateService.instant(e.data);
30
+ default:
31
+ return this.translateService.instant(e.code);
32
+ }
33
+ }
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: ValidationMessageComponent, deps: [{ token: UI_TRANSLATESERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: ValidationMessageComponent, selector: "ui-validation-message", inputs: { validationErrors: "validationErrors" }, ngImport: i0, template: "{{ errorMessage }}\r\n" }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: ValidationMessageComponent, decorators: [{
39
+ type: Component,
40
+ args: [{ selector: 'ui-validation-message', template: "{{ errorMessage }}\r\n" }]
41
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
42
+ type: Inject,
43
+ args: [UI_TRANSLATESERVICE]
44
+ }] }]; }, propDecorators: { validationErrors: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZWxlbWVudHMvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2VsZW1lbnRzL3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBdUIsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFNL0YsTUFBTSxPQUFPLDBCQUEwQjtJQUlyQyxZQUFtRCxnQkFBcUM7UUFBckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtJQUFJLENBQUM7SUFFN0YsUUFBUTtJQUNSLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxJQUFJLENBQUMsR0FBUSxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDckMsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2QsS0FBSyxVQUFVLENBQUM7Z0JBQ2hCLEtBQUssaUJBQWlCLENBQUM7Z0JBQ3ZCLEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssV0FBVyxDQUFDO2dCQUNqQixLQUFLLFdBQVc7b0JBQ2QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRixLQUFLLFVBQVU7b0JBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUMzSSxLQUFLLFFBQVE7b0JBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0M7b0JBQ0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQzsrR0FqQ1UsMEJBQTBCLGtCQUlqQixtQkFBbUI7bUdBSjVCLDBCQUEwQiwrR0NQdkMsd0JBQ0E7OzRGRE1hLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx1QkFBdUI7OzBCQU9wQixNQUFNOzJCQUFDLG1CQUFtQjs0Q0FGOUIsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSVVpVHJhbnNsYXRlU2VydmljZSwgVUlfVFJBTlNMQVRFU0VSVklDRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VpLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktdmFsaWRhdGlvbi1tZXNzYWdlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSB2YWxpZGF0aW9uRXJyb3JzO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFVJX1RSQU5TTEFURVNFUlZJQ0UpIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBJVWlUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZTogYW55ID0ge2NvZGU6ICdOZXpuw6Ftw6EgY2h5YmEnfTtcclxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMudmFsaWRhdGlvbkVycm9ycztcclxuICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5maW5kKGEgPT4ge1xyXG4gICAgICAgIGUgPSB7Y29kZTogYSwgZGF0YTogZXJyb3JzW2FdfTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgIGNhc2UgJ2NiR3JvdXBSZXF1aXJlZCc6XHJcbiAgICAgICAgY2FzZSAnZW1haWwnOlxyXG4gICAgICAgIGNhc2UgJ21hdERhdGVwaWNrZXJQYXJzZSc6XHJcbiAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcclxuICAgICAgICBjYXNlICdtaW5sZW5ndGgnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd1aS5jb250cm9scy52YWxpZGF0aW9uLicgKyBlLmNvZGUsIGUuZGF0YSk7XHJcbiAgICAgICAgY2FzZSAncG9zaXRpdmUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGlzTmFOKE51bWJlcihlLmRhdGEpKSA/ICd1aS5jb250cm9scy52YWxpZGF0aW9uLmludmFsaWROdW1iZXInIDogJ3VpLmNvbnRyb2xzLnZhbGlkYXRpb24ucG9zaXRpdmUnKTtcclxuICAgICAgICBjYXNlICdjdXN0b20nOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGUuZGF0YSk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsInt7IGVycm9yTWVzc2FnZSB9fVxyXG4iXX0=
@@ -0,0 +1,145 @@
1
+ import { Component, HostBinding, Inject, Input, Optional } from '@angular/core';
2
+ import { UI_FILESERVICE } from '../services/ui-file.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/platform-browser";
5
+ import * as i2 from "../services/ui-file.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/progress-spinner";
8
+ export class FileComponent {
9
+ get fitImageFileSize() {
10
+ if (!this.fileServiceConfig.imageSizes[this.fileSize]) {
11
+ console.error('Missing filesize for ' + this.fileSize);
12
+ }
13
+ return this.fileServiceConfig.imageSizes[this.fileSize][0] < 0 || this.fileServiceConfig.imageSizes[this.fileSize][1] < 0;
14
+ }
15
+ get width() {
16
+ if (this.fitImageFileSize) {
17
+ if (this.nativeFileSizeRatio === -1) {
18
+ return '100%';
19
+ }
20
+ else {
21
+ return this.nativeFileWidth + 'px';
22
+ }
23
+ }
24
+ else {
25
+ return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][0] + 'px' : undefined;
26
+ }
27
+ }
28
+ get maxWidth() {
29
+ if (this.fileServiceConfig.imageSizes[this.fileSize][0] < 0) {
30
+ return this.width;
31
+ }
32
+ return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][0] + 'px' : undefined;
33
+ }
34
+ get height() {
35
+ if (this.fitImageFileSize) {
36
+ if (this.nativeFileSizeRatio === -1) {
37
+ return '100%';
38
+ }
39
+ else {
40
+ return this.nativeFileHeight + 'px';
41
+ }
42
+ }
43
+ else {
44
+ return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][1] + 'px' : undefined;
45
+ }
46
+ }
47
+ get maxHeight() {
48
+ if (this.fileServiceConfig.imageSizes[this.fileSize][1] < 0) {
49
+ return this.height;
50
+ }
51
+ return this.fileServiceConfig.imageSizes[this.fileSize] ? this.fileServiceConfig.imageSizes[this.fileSize][1] + 'px' : undefined;
52
+ }
53
+ get isVideo() {
54
+ return this.mime.startsWith('video/');
55
+ }
56
+ get mime() {
57
+ if (this.srcUrlMimeType) {
58
+ return this.srcUrlMimeType;
59
+ }
60
+ else {
61
+ if (this.srcData.nativeFile) {
62
+ return this.srcData.nativeFile.type;
63
+ }
64
+ return this.fileServiceConfig.getMimeType(this.srcData);
65
+ }
66
+ }
67
+ get useRetinaSrc() {
68
+ return this.fileServiceConfig.useRetinaSrc;
69
+ }
70
+ constructor(fileServiceConfig, domSanitizer, fileService) {
71
+ this.fileServiceConfig = fileServiceConfig;
72
+ this.domSanitizer = domSanitizer;
73
+ this.fileService = fileService;
74
+ this.fileSize = 'default';
75
+ this.visible = false;
76
+ this.nativeFileSizeRatio = -1;
77
+ }
78
+ ngOnInit() {
79
+ }
80
+ ngOnChanges(changes) {
81
+ if (changes.srcData) {
82
+ this.nativeFileSizeRatio = -1;
83
+ if (changes.srcData.currentValue.nativeFile) {
84
+ this.src = this.domSanitizer.bypassSecurityTrustUrl(URL.createObjectURL(changes.srcData.currentValue.nativeFile));
85
+ const img = new Image();
86
+ img.onload = () => {
87
+ if (this.fitImageFileSize) {
88
+ this.nativeFileSizeRatio = Math.max(img.width / this.fileServiceConfig.imageSizes[this.fileSize][0], img.height / this.fileServiceConfig.imageSizes[this.fileSize][1], 1);
89
+ }
90
+ else {
91
+ this.nativeFileSizeRatio = 1;
92
+ }
93
+ this.nativeFileWidth = img.width / this.nativeFileSizeRatio;
94
+ this.nativeFileHeight = img.height / this.nativeFileSizeRatio;
95
+ URL.revokeObjectURL(img.src);
96
+ };
97
+ img.src = URL.createObjectURL(changes.srcData.currentValue.nativeFile);
98
+ }
99
+ else {
100
+ this.src = this.fileServiceConfig.getMediaSrc(this.fileSize, changes.srcData.currentValue, this.srcOptions);
101
+ }
102
+ }
103
+ if (changes.srcUrl) {
104
+ this.src = changes.srcUrl.currentValue?.src;
105
+ if (this.src) {
106
+ this.srcUrlMimeType = changes.srcUrl.currentValue?.mimeType || 'image/png';
107
+ }
108
+ else {
109
+ this.srcUrlMimeType = undefined;
110
+ }
111
+ }
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FileComponent, deps: [{ token: UI_FILESERVICE, optional: true }, { token: i1.DomSanitizer }, { token: i2.UiFileService }], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: FileComponent, selector: "ui-file", inputs: { fileSize: "fileSize", srcOptions: "srcOptions", srcData: "srcData", srcUrl: "srcUrl" }, host: { properties: { "style.width": "this.width", "style.maxWidth": "this.maxWidth", "style.height": "this.height", "style.maxHeight": "this.maxHeight" } }, usesOnChanges: true, ngImport: i0, template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}:host img,:host video{max-width:100%;max-height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FileComponent, decorators: [{
117
+ type: Component,
118
+ args: [{ selector: 'ui-file', template: "<mat-spinner *ngIf=\"visible\"></mat-spinner>\r\n<img *ngIf=\"!isVideo && useRetinaSrc\" [src]=\"src\" [srcset]=\"src + ' 2x'\"/>\r\n<img *ngIf=\"!isVideo && !useRetinaSrc\" [src]=\"src\"/>\r\n<video *ngIf=\"isVideo\" muted controls [src]=\"src\"></video>\r\n\r\n", styles: [":host{display:flex;align-items:center;justify-content:center;position:relative}:host img,:host video{max-width:100%;max-height:100%}\n"] }]
119
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
120
+ type: Optional
121
+ }, {
122
+ type: Inject,
123
+ args: [UI_FILESERVICE]
124
+ }] }, { type: i1.DomSanitizer }, { type: i2.UiFileService }]; }, propDecorators: { fileSize: [{
125
+ type: Input
126
+ }], srcOptions: [{
127
+ type: Input
128
+ }], srcData: [{
129
+ type: Input
130
+ }], srcUrl: [{
131
+ type: Input
132
+ }], width: [{
133
+ type: HostBinding,
134
+ args: ['style.width']
135
+ }], maxWidth: [{
136
+ type: HostBinding,
137
+ args: ['style.maxWidth']
138
+ }], height: [{
139
+ type: HostBinding,
140
+ args: ['style.height']
141
+ }], maxHeight: [{
142
+ type: HostBinding,
143
+ args: ['style.maxHeight']
144
+ }] } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2ZpbGUvZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBa0IsY0FBYyxFQUFpQixNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFRNUYsTUFBTSxPQUFPLGFBQWE7SUFNeEIsSUFBSSxnQkFBZ0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNILENBQUM7SUFTRCxJQUNJLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsT0FBTyxNQUFNLENBQUM7YUFDZjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO2FBQ25DO1NBQ0Y7YUFBTTtZQUNM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QyxnQkFBZ0I7Z0JBU3pCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxjQUFjO2dCQWN2QixTQUFTO3NCQURaLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElVaUZpbGVTZXJ2aWNlLCBVSV9GSUxFU0VSVklDRSwgVWlGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1maWxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBmaWxlU2l6ZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBzcmNPcHRpb25zO1xyXG4gIEBJbnB1dCgpIHNyY0RhdGE6IGFueTtcclxuICBASW5wdXQoKSBzcmNVcmw6IHsgc3JjOiBzdHJpbmcsIG1pbWVUeXBlPzogc3RyaW5nIH07XHJcbiAgZ2V0IGZpdEltYWdlRmlsZVNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIGZpbGVzaXplIGZvciAnICsgdGhpcy5maWxlU2l6ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIDwgMCB8fCB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMV0gPCAwXHJcbiAgfVxyXG5cclxuICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgc3JjO1xyXG4gIHNyY1VybE1pbWVUeXBlO1xyXG4gIG5hdGl2ZUZpbGVTaXplUmF0aW8gPSAtMTtcclxuICBuYXRpdmVGaWxlV2lkdGg7XHJcbiAgbmF0aXZlRmlsZUhlaWdodDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXHJcbiAgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLm5hdGl2ZUZpbGVTaXplUmF0aW8gPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuICcxMDAlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVGaWxlV2lkdGggKyAncHgnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV0gPyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMF0gKyAncHgnIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXhXaWR0aCcpXHJcbiAgZ2V0IG1heFdpZHRoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzBdIDwgMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWR0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV0gPyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMF0gKyAncHgnIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxyXG4gIGdldCBoZWlnaHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmZpdEltYWdlRmlsZVNpemUpIHtcclxuICAgICAgaWYgKHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4gJzEwMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUZpbGVIZWlnaHQgKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdID8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdICsgJ3B4JyA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUubWF4SGVpZ2h0JylcclxuICBnZXQgbWF4SGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdIDwgMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdID8gdGhpcy5maWxlU2VydmljZUNvbmZpZy5pbWFnZVNpemVzW3RoaXMuZmlsZVNpemVdWzFdICsgJ3B4JyA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZpZGVvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWltZS5zdGFydHNXaXRoKCd2aWRlby8nKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuc3JjVXJsTWltZVR5cGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc3JjVXJsTWltZVR5cGVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNyY0RhdGEubmF0aXZlRmlsZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNyY0RhdGEubmF0aXZlRmlsZS50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmdldE1pbWVUeXBlKHRoaXMuc3JjRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlUmV0aW5hU3JjKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2VDb25maWcudXNlUmV0aW5hU3JjXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFVJX0ZJTEVTRVJWSUNFKSBwcml2YXRlIGZpbGVTZXJ2aWNlQ29uZmlnOiBJVWlGaWxlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IFVpRmlsZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnNyY0RhdGEpIHtcclxuICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gLTE7XHJcbiAgICAgIGlmIChjaGFuZ2VzLnNyY0RhdGEuY3VycmVudFZhbHVlLm5hdGl2ZUZpbGUpIHtcclxuICAgICAgICB0aGlzLnNyYyA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTChjaGFuZ2VzLnNyY0RhdGEuY3VycmVudFZhbHVlLm5hdGl2ZUZpbGUpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maXRJbWFnZUZpbGVTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbyA9IE1hdGgubWF4KGltZy53aWR0aCAvIHRoaXMuZmlsZVNlcnZpY2VDb25maWcuaW1hZ2VTaXplc1t0aGlzLmZpbGVTaXplXVswXSxcclxuICAgICAgICAgICAgICAgIGltZy5oZWlnaHQgLyB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmltYWdlU2l6ZXNbdGhpcy5maWxlU2l6ZV1bMV0sIDEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubmF0aXZlRmlsZVdpZHRoID0gaW1nLndpZHRoIC8gdGhpcy5uYXRpdmVGaWxlU2l6ZVJhdGlvO1xyXG4gICAgICAgICAgdGhpcy5uYXRpdmVGaWxlSGVpZ2h0ID0gaW1nLmhlaWdodCAvIHRoaXMubmF0aXZlRmlsZVNpemVSYXRpbztcclxuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoY2hhbmdlcy5zcmNEYXRhLmN1cnJlbnRWYWx1ZS5uYXRpdmVGaWxlKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcmMgPSB0aGlzLmZpbGVTZXJ2aWNlQ29uZmlnLmdldE1lZGlhU3JjKHRoaXMuZmlsZVNpemUsIGNoYW5nZXMuc3JjRGF0YS5jdXJyZW50VmFsdWUsIHRoaXMuc3JjT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLnNyY1VybCkge1xyXG4gICAgICB0aGlzLnNyYyA9IGNoYW5nZXMuc3JjVXJsLmN1cnJlbnRWYWx1ZT8uc3JjO1xyXG4gICAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgICB0aGlzLnNyY1VybE1pbWVUeXBlID0gY2hhbmdlcy5zcmNVcmwuY3VycmVudFZhbHVlPy5taW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNyY1VybE1pbWVUeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtc3Bpbm5lciAqbmdJZj1cInZpc2libGVcIj48L21hdC1zcGlubmVyPlxyXG48aW1nICpuZ0lmPVwiIWlzVmlkZW8gJiYgdXNlUmV0aW5hU3JjXCIgW3NyY109XCJzcmNcIiBbc3Jjc2V0XT1cInNyYyArICcgMngnXCIvPlxyXG48aW1nICpuZ0lmPVwiIWlzVmlkZW8gJiYgIXVzZVJldGluYVNyY1wiIFtzcmNdPVwic3JjXCIvPlxyXG48dmlkZW8gKm5nSWY9XCJpc1ZpZGVvXCIgbXV0ZWQgY29udHJvbHMgW3NyY109XCJzcmNcIj48L3ZpZGVvPlxyXG5cclxuIl19