@skyux/forms 5.0.0 → 5.5.0-alpha.0

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