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