@ecodev/natural 62.1.2 → 63.0.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.
- package/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
- package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
- package/fesm2022/ecodev-natural.mjs +436 -425
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/network-activity.service.d.ts +54 -0
- package/lib/classes/validators.d.ts +1 -1
- package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
- package/lib/modules/common/services/seo.provider.d.ts +2 -2
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
- package/lib/modules/file/abstract-file.d.ts +6 -3
- package/lib/modules/file/component/file.component.d.ts +2 -2
- package/lib/modules/file/file-drop.directive.d.ts +2 -3
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
- package/lib/modules/icon/icon.module.d.ts +2 -2
- package/lib/modules/panels/panels.service.d.ts +1 -2
- package/lib/modules/relations/relations.component.d.ts +3 -3
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
- package/lib/modules/search/group/group.component.d.ts +2 -3
- package/lib/modules/search/input/input.component.d.ts +5 -5
- package/lib/modules/search/search/search.component.d.ts +2 -2
- package/lib/modules/select/abstract-select.component.d.ts +3 -3
- package/lib/modules/select/select/select.component.d.ts +1 -1
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
- package/lib/modules/table-button/table-button.component.d.ts +4 -2
- package/package.json +16 -14
- package/public-api.d.ts +1 -0
- package/src/lib/_natural.theme.scss +1 -2
- package/vanilla/index.d.ts +5 -0
- package/vanilla/package.json +3 -0
- package/vanilla/public-api.d.ts +11 -0
- package/vanilla/src/lib/classes/crypto.d.ts +8 -0
- package/vanilla/src/lib/classes/data-source.d.ts +32 -0
- package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
- package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
- package/vanilla/src/lib/classes/signing.d.ts +7 -0
- package/vanilla/src/lib/classes/utility.d.ts +77 -0
- package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
- package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
- package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
- package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
- package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
- package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
- package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
- package/vanilla/src/lib/types/types.d.ts +100 -0
- package/esm2022/ecodev-natural.mjs +0 -5
- package/esm2022/lib/classes/abstract-detail.mjs +0 -229
- package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
- package/esm2022/lib/classes/abstract-list.mjs +0 -461
- package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
- package/esm2022/lib/classes/apollo-utils.mjs +0 -59
- package/esm2022/lib/classes/crypto.mjs +0 -23
- package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
- package/esm2022/lib/classes/data-source.mjs +0 -71
- package/esm2022/lib/classes/providers.mjs +0 -13
- package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
- package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
- package/esm2022/lib/classes/rxjs.mjs +0 -54
- package/esm2022/lib/classes/signing.mjs +0 -38
- package/esm2022/lib/classes/tld.mjs +0 -1476
- package/esm2022/lib/classes/utility.mjs +0 -234
- package/esm2022/lib/classes/validators.mjs +0 -179
- package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
- package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
- package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
- package/esm2022/lib/modules/alert/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
- package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
- package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
- package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
- package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
- package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
- package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
- package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
- package/esm2022/lib/modules/common/public-api.mjs +0 -14
- package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
- package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
- package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
- package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
- package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
- package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
- package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
- package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
- package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
- package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
- package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
- package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
- package/esm2022/lib/modules/file/file.service.mjs +0 -43
- package/esm2022/lib/modules/file/public-api.mjs +0 -9
- package/esm2022/lib/modules/file/types.mjs +0 -2
- package/esm2022/lib/modules/file/utils.mjs +0 -129
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
- package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
- package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
- package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
- package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
- package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
- package/esm2022/lib/modules/icon/public-api.mjs +0 -6
- package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
- package/esm2022/lib/modules/logger/error.module.mjs +0 -22
- package/esm2022/lib/modules/logger/public-api.mjs +0 -6
- package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
- package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
- package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
- package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
- package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
- package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
- package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
- package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
- package/esm2022/lib/modules/panels/public-api.mjs +0 -11
- package/esm2022/lib/modules/panels/types.mjs +0 -3
- package/esm2022/lib/modules/relations/public-api.mjs +0 -5
- package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
- package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
- package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
- package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
- package/esm2022/lib/modules/search/classes/url.mjs +0 -53
- package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
- package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
- package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
- package/esm2022/lib/modules/search/public-api.mjs +0 -7
- package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
- package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
- package/esm2022/lib/modules/search/types/facet.mjs +0 -2
- package/esm2022/lib/modules/search/types/values.mjs +0 -2
- package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
- package/esm2022/lib/modules/select/public-api.mjs +0 -7
- package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
- package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
- package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
- package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
- package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
- package/esm2022/lib/services/abstract-model.service.mjs +0 -526
- package/esm2022/lib/services/debounce.service.mjs +0 -149
- package/esm2022/lib/services/enum.service.mjs +0 -64
- package/esm2022/lib/services/link-mutation.service.mjs +0 -154
- package/esm2022/lib/services/persistence.service.mjs +0 -115
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
- package/esm2022/lib/types/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -46
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, HostListener, Inject, Input, Output, } from '@angular/core';
|
|
2
|
-
import { acceptType, createInvisibleFileInputWrap, detectSwipe, eventToFiles, fileListToArray, isDirectory, isFileInput, stopEvent, } from './utils';
|
|
3
|
-
import { DOCUMENT } from '@angular/common';
|
|
4
|
-
import { forkJoin, map, of, tap } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./file.service";
|
|
7
|
-
/**
|
|
8
|
-
* A master base set of logic intended to support file select/drag/drop operations
|
|
9
|
-
*
|
|
10
|
-
* In most cases you probably want click-to-select and drag-to-select, so you should use:
|
|
11
|
-
*
|
|
12
|
-
* <div naturalFileDrop [selectable]="true"></div>
|
|
13
|
-
*
|
|
14
|
-
* @dynamic
|
|
15
|
-
*/
|
|
16
|
-
export class NaturalAbstractFile {
|
|
17
|
-
element;
|
|
18
|
-
naturalFileService;
|
|
19
|
-
document;
|
|
20
|
-
fileElement;
|
|
21
|
-
/**
|
|
22
|
-
* Whether we should accept a single file or multiple files
|
|
23
|
-
*/
|
|
24
|
-
multiple = false;
|
|
25
|
-
/**
|
|
26
|
-
* Comma-separated list of unique file type specifiers. Like the native element
|
|
27
|
-
* it can be a mix of mime-type and file extensions.
|
|
28
|
-
*
|
|
29
|
-
* See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
|
|
30
|
-
*/
|
|
31
|
-
accept = '';
|
|
32
|
-
/**
|
|
33
|
-
* Maximum file size in bytes. 0 means no validation at all.
|
|
34
|
-
*/
|
|
35
|
-
maxSize = 0;
|
|
36
|
-
/**
|
|
37
|
-
* Disable the file selection entirely
|
|
38
|
-
*/
|
|
39
|
-
fileSelectionDisabled = false;
|
|
40
|
-
/**
|
|
41
|
-
* Whether the user can click on the element to select something
|
|
42
|
-
*
|
|
43
|
-
* This has only effect during initialization. Subsequent changes will have
|
|
44
|
-
* no effect.
|
|
45
|
-
*/
|
|
46
|
-
selectable = false;
|
|
47
|
-
/**
|
|
48
|
-
* If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.
|
|
49
|
-
*
|
|
50
|
-
* It is useful to set this to false if there is two upload on a page with different purpose
|
|
51
|
-
* and the second upload should not be confused with the first one.
|
|
52
|
-
*/
|
|
53
|
-
broadcast = true;
|
|
54
|
-
/**
|
|
55
|
-
* The single valid file that has been selected.
|
|
56
|
-
*
|
|
57
|
-
* It is for convenience of use, and will only emit if there is at least one
|
|
58
|
-
* valid file. See `filesChange` for a more complete output.
|
|
59
|
-
*/
|
|
60
|
-
fileChange = new EventEmitter();
|
|
61
|
-
/**
|
|
62
|
-
* The list of files that have been selected.
|
|
63
|
-
*/
|
|
64
|
-
filesChange = new EventEmitter();
|
|
65
|
-
constructor(element, naturalFileService, document) {
|
|
66
|
-
this.element = element;
|
|
67
|
-
this.naturalFileService = naturalFileService;
|
|
68
|
-
this.document = document;
|
|
69
|
-
}
|
|
70
|
-
ngOnDestroy() {
|
|
71
|
-
delete this.fileElement; // faster memory release of dom element
|
|
72
|
-
}
|
|
73
|
-
ngOnInit() {
|
|
74
|
-
if (this.selectable) {
|
|
75
|
-
this.enableSelecting();
|
|
76
|
-
}
|
|
77
|
-
this.getFileElement().multiple = this.multiple;
|
|
78
|
-
}
|
|
79
|
-
ngOnChanges(changes) {
|
|
80
|
-
if (changes.accept) {
|
|
81
|
-
this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
getFileElement() {
|
|
85
|
-
if (this.fileElement) {
|
|
86
|
-
return this.fileElement;
|
|
87
|
-
}
|
|
88
|
-
// elm is a file input
|
|
89
|
-
if (isFileInput(this.element.nativeElement)) {
|
|
90
|
-
this.fileElement = this.element.nativeElement;
|
|
91
|
-
return this.fileElement;
|
|
92
|
-
}
|
|
93
|
-
// create foo file input
|
|
94
|
-
const label = createInvisibleFileInputWrap(this.document);
|
|
95
|
-
this.fileElement = label.getElementsByTagName('input')[0];
|
|
96
|
-
this.fileElement.addEventListener('change', this.changeFn.bind(this));
|
|
97
|
-
this.element.nativeElement.appendChild(label);
|
|
98
|
-
return this.fileElement;
|
|
99
|
-
}
|
|
100
|
-
enableSelecting() {
|
|
101
|
-
const elm = this.element.nativeElement;
|
|
102
|
-
if (isFileInput(elm)) {
|
|
103
|
-
const bindedHandler = () => this.beforeSelect();
|
|
104
|
-
elm.addEventListener('click', bindedHandler);
|
|
105
|
-
elm.addEventListener('touchstart', bindedHandler);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const bindedHandler = (event) => this.clickHandler(event);
|
|
110
|
-
elm.addEventListener('click', bindedHandler);
|
|
111
|
-
elm.addEventListener('touchstart', bindedHandler);
|
|
112
|
-
elm.addEventListener('touchend', bindedHandler);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
handleFiles(files) {
|
|
116
|
-
const selection = {
|
|
117
|
-
valid: [],
|
|
118
|
-
invalid: [],
|
|
119
|
-
};
|
|
120
|
-
forkJoin(files.map(file => this.validate(file).pipe(tap(error => {
|
|
121
|
-
if (error) {
|
|
122
|
-
selection.invalid.push({
|
|
123
|
-
file: file,
|
|
124
|
-
error: error,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
selection.valid.push(file);
|
|
129
|
-
}
|
|
130
|
-
})))).subscribe(() => {
|
|
131
|
-
if (selection.valid.length) {
|
|
132
|
-
this.fileChange.emit(selection.valid[0]);
|
|
133
|
-
}
|
|
134
|
-
if (selection.valid.length || selection.invalid.length) {
|
|
135
|
-
this.filesChange.emit(selection);
|
|
136
|
-
if (this.broadcast) {
|
|
137
|
-
this.naturalFileService.filesChanged.next(selection);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
this.getFileElement().value = '';
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Called when input has files
|
|
145
|
-
*/
|
|
146
|
-
changeFn(event) {
|
|
147
|
-
if (!(event.target instanceof HTMLInputElement)) {
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const fileList = event.target.files;
|
|
151
|
-
if (!fileList) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
stopEvent(event);
|
|
155
|
-
this.handleFiles(fileListToArray(fileList));
|
|
156
|
-
}
|
|
157
|
-
clickHandler(event) {
|
|
158
|
-
const elm = this.element.nativeElement;
|
|
159
|
-
if (elm.getAttribute('disabled') || this.fileSelectionDisabled) {
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
// prevent the click if it is a swipe
|
|
163
|
-
if (detectSwipe(event)) {
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
const fileElm = this.getFileElement();
|
|
167
|
-
fileElm.click();
|
|
168
|
-
this.beforeSelect();
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
beforeSelect() {
|
|
172
|
-
if (!this.fileElement) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
// if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)
|
|
176
|
-
this.fileElement.value = '';
|
|
177
|
-
}
|
|
178
|
-
onChange(event) {
|
|
179
|
-
const fileList = this.getFileElement().files;
|
|
180
|
-
const files = fileList ? fileListToArray(fileList) : eventToFiles(event);
|
|
181
|
-
if (!files.length) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
stopEvent(event);
|
|
185
|
-
this.handleFiles(files);
|
|
186
|
-
}
|
|
187
|
-
validate(file) {
|
|
188
|
-
return forkJoin({
|
|
189
|
-
accept: of(acceptType(this.accept, file.type, file.name)),
|
|
190
|
-
fileSize: of(!(this.maxSize && file.size > this.maxSize)),
|
|
191
|
-
directory: isDirectory(file),
|
|
192
|
-
}).pipe(map(result => {
|
|
193
|
-
for (const [key, value] of Object.entries(result)) {
|
|
194
|
-
if (!value) {
|
|
195
|
-
return key;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return null;
|
|
199
|
-
}));
|
|
200
|
-
}
|
|
201
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractFile, deps: [{ token: i0.ElementRef }, { token: i1.NaturalFileService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
202
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractFile, isStandalone: true, inputs: { multiple: "multiple", accept: "accept", maxSize: "maxSize", fileSelectionDisabled: "fileSelectionDisabled", selectable: "selectable", broadcast: "broadcast" }, outputs: { fileChange: "fileChange", filesChange: "filesChange" }, host: { listeners: { "change": "onChange($event)" } }, usesOnChanges: true, ngImport: i0 });
|
|
203
|
-
}
|
|
204
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractFile, decorators: [{
|
|
205
|
-
type: Directive,
|
|
206
|
-
args: [{ standalone: true }]
|
|
207
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NaturalFileService }, { type: Document, decorators: [{
|
|
208
|
-
type: Inject,
|
|
209
|
-
args: [DOCUMENT]
|
|
210
|
-
}] }], propDecorators: { multiple: [{
|
|
211
|
-
type: Input
|
|
212
|
-
}], accept: [{
|
|
213
|
-
type: Input
|
|
214
|
-
}], maxSize: [{
|
|
215
|
-
type: Input
|
|
216
|
-
}], fileSelectionDisabled: [{
|
|
217
|
-
type: Input
|
|
218
|
-
}], selectable: [{
|
|
219
|
-
type: Input
|
|
220
|
-
}], broadcast: [{
|
|
221
|
-
type: Input
|
|
222
|
-
}], fileChange: [{
|
|
223
|
-
type: Output
|
|
224
|
-
}], filesChange: [{
|
|
225
|
-
type: Output
|
|
226
|
-
}], onChange: [{
|
|
227
|
-
type: HostListener,
|
|
228
|
-
args: ['change', ['$event']]
|
|
229
|
-
}] } });
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpbGUvYWJzdHJhY3QtZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILFVBQVUsRUFDViw0QkFBNEIsRUFDNUIsV0FBVyxFQUNYLFlBQVksRUFDWixlQUFlLEVBQ2YsV0FBVyxFQUNYLFdBQVcsRUFDWCxTQUFTLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUErQixFQUFFLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFtQnpFOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxPQUFnQixtQkFBbUI7SUF3RGhCO0lBQ0U7SUFDZ0I7SUF6RC9CLFdBQVcsQ0FBb0I7SUFFdkM7O09BRUc7SUFDYSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpDOzs7OztPQUtHO0lBQ2EsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUU1Qjs7T0FFRztJQUNhLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFNUI7O09BRUc7SUFDYSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFFOUM7Ozs7O09BS0c7SUFDYSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW5DOzs7OztPQUtHO0lBQ2EsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVqQzs7Ozs7T0FLRztJQUN1QixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUVoRTs7T0FFRztJQUN1QixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFF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QUF2QixLQUFLO2dCQVFVLE1BQU07c0JBQXJCLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBUVUsVUFBVTtzQkFBekIsS0FBSztnQkFRVSxTQUFTO3NCQUF4QixLQUFLO2dCQVFvQixVQUFVO3NCQUFuQyxNQUFNO2dCQUttQixXQUFXO3NCQUFwQyxNQUFNO2dCQW1KQSxRQUFRO3NCQURkLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIGFjY2VwdFR5cGUsXG4gICAgY3JlYXRlSW52aXNpYmxlRmlsZUlucHV0V3JhcCxcbiAgICBkZXRlY3RTd2lwZSxcbiAgICBldmVudFRvRmlsZXMsXG4gICAgZmlsZUxpc3RUb0FycmF5LFxuICAgIGlzRGlyZWN0b3J5LFxuICAgIGlzRmlsZUlucHV0LFxuICAgIHN0b3BFdmVudCxcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge05hdHVyYWxGaWxlU2VydmljZX0gZnJvbSAnLi9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Zm9ya0pvaW4sIG1hcCwgT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZUlucHV0LCBvZiwgdGFwfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgSW52YWxpZEZpbGUgPSB7XG4gICAgZmlsZTogRmlsZTtcbiAgICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsZVNlbGVjdGlvbiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICB2YWxpZDogRmlsZVtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQgYnV0IGFyZSBpbnZhbGlkIGFjY29yZGluZyB0byB2YWxpZGF0b3JzLlxuICAgICAqL1xuICAgIGludmFsaWQ6IEludmFsaWRGaWxlW107XG59O1xuXG4vKipcbiAqIEEgbWFzdGVyIGJhc2Ugc2V0IG9mIGxvZ2ljIGludGVuZGVkIHRvIHN1cHBvcnQgZmlsZSBzZWxlY3QvZHJhZy9kcm9wIG9wZXJhdGlvbnNcbiAqXG4gKiBJbiBtb3N0IGNhc2VzIHlvdSBwcm9iYWJseSB3YW50IGNsaWNrLXRvLXNlbGVjdCBhbmQgZHJhZy10by1zZWxlY3QsIHNvIHlvdSBzaG91bGQgdXNlOlxuICpcbiAqICAgICA8ZGl2IG5hdHVyYWxGaWxlRHJvcCBbc2VsZWN0YWJsZV09XCJ0cnVlXCI+PC9kaXY+XG4gKlxuICogQGR5bmFtaWNcbiAqL1xuQERpcmVjdGl2ZSh7c3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF0dXJhbEFic3RyYWN0RmlsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgZmlsZUVsZW1lbnQ/OiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHVuaXF1ZSBmaWxlIHR5cGUgc3BlY2lmaWVycy4gTGlrZSB0aGUgbmF0aXZlIGVsZW1lbnRcbiAgICAgKiBpdCBjYW4gYmUgYSBtaXggb2YgbWltZS10eXBlIGFuZCBmaWxlIGV4dGVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2ZpbGUjYWNjZXB0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGFjY2VwdCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBmaWxlIHNpemUgaW4gYnl0ZXMuIDAgbWVhbnMgbm8gdmFsaWRhdGlvbiBhdCBhbGwuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG1heFNpemUgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSB0aGUgZmlsZSBzZWxlY3Rpb24gZW50aXJlbHlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZmlsZVNlbGVjdGlvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB1c2VyIGNhbiBjbGljayBvbiB0aGUgZWxlbWVudCB0byBzZWxlY3Qgc29tZXRoaW5nXG4gICAgICpcbiAgICAgKiBUaGlzIGhhcyBvbmx5IGVmZmVjdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFN1YnNlcXVlbnQgY2hhbmdlcyB3aWxsIGhhdmVcbiAgICAgKiBubyBlZmZlY3QuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGFibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoZSBmaWxlIHNlbGVjdGlvbiB3aWxsIGJlIGJyb2FkY2FzdCB0aHJvdWdoIGBOYXR1cmFsRmlsZVNlcnZpY2UuZmlsZXNDaGFuZ2VkYC5cbiAgICAgKlxuICAgICAqIEl0IGlzIHVzZWZ1bCB0byBzZXQgdGhpcyB0byBmYWxzZSBpZiB0aGVyZSBpcyB0d28gdXBsb2FkIG9uIGEgcGFnZSB3aXRoIGRpZmZlcmVudCBwdXJwb3NlXG4gICAgICogYW5kIHRoZSBzZWNvbmQgdXBsb2FkIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgZmlyc3Qgb25lLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBicm9hZGNhc3QgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNpbmdsZSB2YWxpZCBmaWxlIHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBJdCBpcyBmb3IgY29udmVuaWVuY2Ugb2YgdXNlLCBhbmQgd2lsbCBvbmx5IGVtaXQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lXG4gICAgICogdmFsaWQgZmlsZS4gU2VlIGBmaWxlc0NoYW5nZWAgZm9yIGEgbW9yZSBjb21wbGV0ZSBvdXRwdXQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBmaWxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBmaWxlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVNlbGVjdGlvbj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdHVyYWxGaWxlU2VydmljZTogTmF0dXJhbEZpbGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVFbGVtZW50OyAvLyBmYXN0ZXIgbWVtb3J5IHJlbGVhc2Ugb2YgZG9tIGVsZW1lbnRcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU2VsZWN0aW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEZpbGVFbGVtZW50KCkubXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmFjY2VwdCkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWxlRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgY2hhbmdlcy5hY2NlcHQuY3VycmVudFZhbHVlIHx8ICcqJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbGVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICBpZiAodGhpcy5maWxlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbG0gaXMgYSBmaWxlIGlucHV0XG4gICAgICAgIGlmIChpc0ZpbGVJbnB1dCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgZm9vIGZpbGUgaW5wdXRcbiAgICAgICAgY29uc3QgbGFiZWwgPSBjcmVhdGVJbnZpc2libGVGaWxlSW5wdXRXcmFwKHRoaXMuZG9jdW1lbnQpO1xuICAgICAgICB0aGlzLmZpbGVFbGVtZW50ID0gbGFiZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG4gICAgICAgIHRoaXMuZmlsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2VGbi5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlU2VsZWN0aW5nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbG0gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAoaXNGaWxlSW5wdXQoZWxtKSkge1xuICAgICAgICAgICAgY29uc3QgYmluZGVkSGFuZGxlciA9ICgpOiB2b2lkID0+IHRoaXMuYmVmb3JlU2VsZWN0KCk7XG4gICAgICAgICAgICBlbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kZWRIYW5kbGVyKTtcbiAgICAgICAgICAgIGVsbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgYmluZGVkSGFuZGxlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZWRIYW5kbGVyID0gKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4gPT4gdGhpcy5jbGlja0hhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZGVkSGFuZGxlcik7XG4gICAgICAgICAgICBlbG0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGJpbmRlZEhhbmRsZXIpO1xuICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgYmluZGVkSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRmlsZXMoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IEZpbGVTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICB2YWxpZDogW10sXG4gICAgICAgICAgICBpbnZhbGlkOiBbXSxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICAgIGZpbGVzLm1hcChmaWxlID0+XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZShmaWxlKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmludmFsaWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnZhbGlkLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnZhbGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHNlbGVjdGlvbi52YWxpZFswXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24udmFsaWQubGVuZ3RoIHx8IHNlbGVjdGlvbi5pbnZhbGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNDaGFuZ2UuZW1pdChzZWxlY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvYWRjYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0dXJhbEZpbGVTZXJ2aWNlLmZpbGVzQ2hhbmdlZC5uZXh0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldEZpbGVFbGVtZW50KCkudmFsdWUgPSAnJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaGFzIGZpbGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VGbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuXG4gICAgICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsZXMoZmlsZUxpc3RUb0FycmF5KGZpbGVMaXN0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGlja0hhbmRsZXIoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVsbSA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWxtLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCB0aGlzLmZpbGVTZWxlY3Rpb25EaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCB0aGUgY2xpY2sgaWYgaXQgaXMgYSBzd2lwZVxuICAgICAgICBpZiAoZGV0ZWN0U3dpcGUoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVFbG0gPSB0aGlzLmdldEZpbGVFbGVtZW50KCk7XG4gICAgICAgIGZpbGVFbG0uY2xpY2soKTtcbiAgICAgICAgdGhpcy5iZWZvcmVTZWxlY3QoKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZWZvcmVTZWxlY3QoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5maWxlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgbm8gZmlsZXMgaW4gYXJyYXksIGJlIHN1cmUgYnJvd3NlciBkb2VzbnQgcHJldmVudCByZXNlbGVjdCBvZiBzYW1lIGZpbGUgKHNlZSBnaXRodWIgaXNzdWUgMjcpXG4gICAgICAgIHRoaXMuZmlsZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsZUxpc3QgPSB0aGlzLmdldEZpbGVFbGVtZW50KCkuZmlsZXM7XG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBmaWxlTGlzdCA/IGZpbGVMaXN0VG9BcnJheShmaWxlTGlzdCkgOiBldmVudFRvRmlsZXMoZXZlbnQpO1xuXG4gICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICB0aGlzLmhhbmRsZUZpbGVzKGZpbGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luPFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGVJbnB1dDxib29sZWFuPj4+KHtcbiAgICAgICAgICAgIGFjY2VwdDogb2YoYWNjZXB0VHlwZSh0aGlzLmFjY2VwdCwgZmlsZS50eXBlLCBmaWxlLm5hbWUpKSxcbiAgICAgICAgICAgIGZpbGVTaXplOiBvZighKHRoaXMubWF4U2l6ZSAmJiBmaWxlLnNpemUgPiB0aGlzLm1heFNpemUpKSxcbiAgICAgICAgICAgIGRpcmVjdG9yeTogaXNEaXJlY3RvcnkoZmlsZSksXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { Component, computed, EventEmitter, inject, input, Input, Output, } from '@angular/core';
|
|
2
|
-
import { of, Subject, tap } from 'rxjs';
|
|
3
|
-
import { NaturalFileService } from '../file.service';
|
|
4
|
-
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
5
|
-
import { NaturalAlertService } from '../../alert/alert.service';
|
|
6
|
-
import { NaturalCapitalizePipe } from '../../common/pipes/capitalize.pipe';
|
|
7
|
-
import { NaturalIconDirective } from '../../icon/icon.directive';
|
|
8
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import { MatRippleModule } from '@angular/material/core';
|
|
10
|
-
import { NaturalFileDropDirective } from '../file-drop.directive';
|
|
11
|
-
import { NaturalBackgroundDensityDirective } from '../../common/directives/background-density.directive';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/material/core";
|
|
14
|
-
import * as i2 from "@angular/common";
|
|
15
|
-
import * as i3 from "@angular/material/icon";
|
|
16
|
-
// @dynamic
|
|
17
|
-
export class NaturalFileComponent {
|
|
18
|
-
naturalFileService = inject(NaturalFileService);
|
|
19
|
-
alertService = inject(NaturalAlertService);
|
|
20
|
-
document = inject(DOCUMENT);
|
|
21
|
-
height = input(250);
|
|
22
|
-
iconHeight = computed(() => Math.min(this.height() * 0.66, 120));
|
|
23
|
-
fontSize = computed(() => Math.min(this.height() * 0.3, 36));
|
|
24
|
-
action = null;
|
|
25
|
-
backgroundSize = 'contain';
|
|
26
|
-
/**
|
|
27
|
-
* Comma-separated list of unique file type specifiers. Like the native element,
|
|
28
|
-
* it can be a mix of mime-type and file extensions.
|
|
29
|
-
*
|
|
30
|
-
* See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
|
|
31
|
-
*/
|
|
32
|
-
accept = 'image/avif,image/bmp,image/gif,image/heic,image/heif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';
|
|
33
|
-
/**
|
|
34
|
-
* If given, it will be called when a new file is selected. The callback should typically upload the file
|
|
35
|
-
* to the server and link the newly uploaded file to the existing related object.
|
|
36
|
-
*
|
|
37
|
-
* The callback **must** be able to run even if the calling component has been destroyed. That means in most
|
|
38
|
-
* cases you **must** `bind()` the callback explicitly, like so:
|
|
39
|
-
*
|
|
40
|
-
* ```html
|
|
41
|
-
* <natural-file [uploader]="myCallback.bind(this)" />
|
|
42
|
-
* ```
|
|
43
|
-
*
|
|
44
|
-
* Also, you probably **should** set a `[formCtrl]` so that the form is updated automatically, instead of doing
|
|
45
|
-
* it manually within the callback.
|
|
46
|
-
*/
|
|
47
|
-
uploader;
|
|
48
|
-
model = null;
|
|
49
|
-
/**
|
|
50
|
-
* If provided, its value will get updated when the model changes.
|
|
51
|
-
* But its value is never read, so if you want to set a value use `[model]` instead.
|
|
52
|
-
*/
|
|
53
|
-
formCtrl = null;
|
|
54
|
-
/**
|
|
55
|
-
* This **must not** be used to mutate the server, because it is very likely it will never be called if the
|
|
56
|
-
* human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.
|
|
57
|
-
*/
|
|
58
|
-
modelChange = new EventEmitter();
|
|
59
|
-
imagePreview = '';
|
|
60
|
-
filePreview = null;
|
|
61
|
-
ngOnChanges(changes) {
|
|
62
|
-
if (changes.model && changes.model.previousValue !== changes.model.currentValue) {
|
|
63
|
-
this.updateImage();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
ngOnInit() {
|
|
67
|
-
this.updateImage();
|
|
68
|
-
}
|
|
69
|
-
upload(file) {
|
|
70
|
-
this.model = { file: file };
|
|
71
|
-
this.updateImage();
|
|
72
|
-
if (this.formCtrl) {
|
|
73
|
-
this.formCtrl.setValue(this.model);
|
|
74
|
-
}
|
|
75
|
-
const observable = this.uploader?.(file).pipe(tap(() => this.alertService.info($localize `Mis à jour`))) ?? of(this.model);
|
|
76
|
-
observable.subscribe(result => {
|
|
77
|
-
this.model = result;
|
|
78
|
-
if (this.formCtrl) {
|
|
79
|
-
this.formCtrl.setValue(this.model);
|
|
80
|
-
}
|
|
81
|
-
this.modelChange.emit(this.model);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
getDownloadLink() {
|
|
85
|
-
if (this.action !== 'download') {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
return this.naturalFileService.getDownloadLink(this.model);
|
|
89
|
-
}
|
|
90
|
-
updateImage() {
|
|
91
|
-
this.imagePreview = '';
|
|
92
|
-
this.filePreview = null;
|
|
93
|
-
if (!this.model) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (this.model.file?.type.startsWith('image/')) {
|
|
97
|
-
// Model from upload (before saving)
|
|
98
|
-
this.getBase64(this.model.file).subscribe(result => {
|
|
99
|
-
if (this.model?.file?.type) {
|
|
100
|
-
const content = 'url(data:' + this.model?.file?.type + ';base64,' + result + ')';
|
|
101
|
-
this.imagePreview = content;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else if (this.model.file) {
|
|
106
|
-
this.filePreview = this.model.file.type.split('/')[1];
|
|
107
|
-
}
|
|
108
|
-
else if (this.model.__typename === 'Image' && this.model.id) {
|
|
109
|
-
// Model image with id, use specific API to render image by size
|
|
110
|
-
const window = this.document.defaultView;
|
|
111
|
-
if (!window) {
|
|
112
|
-
throw new Error('Could not show image preview because `window` is undefined');
|
|
113
|
-
}
|
|
114
|
-
const loc = window.location;
|
|
115
|
-
const height = this.height() ? '/' + this.height() : '';
|
|
116
|
-
// create image url without port to stay compatible with dev mode
|
|
117
|
-
const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;
|
|
118
|
-
this.imagePreview = image;
|
|
119
|
-
}
|
|
120
|
-
else if (this.model?.mime && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {
|
|
121
|
-
this.filePreview = this.model.mime.split('/')[1];
|
|
122
|
-
}
|
|
123
|
-
else if (this.model.src) {
|
|
124
|
-
// external url
|
|
125
|
-
this.imagePreview = this.model.src;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
getBase64(file) {
|
|
129
|
-
if (!file) {
|
|
130
|
-
return of('');
|
|
131
|
-
}
|
|
132
|
-
const subject = new Subject();
|
|
133
|
-
const reader = new FileReader();
|
|
134
|
-
reader.addEventListener('load', (ev) => {
|
|
135
|
-
subject.next(btoa(ev.target.result));
|
|
136
|
-
subject.complete();
|
|
137
|
-
});
|
|
138
|
-
reader.readAsBinaryString(file);
|
|
139
|
-
return subject.asObservable();
|
|
140
|
-
}
|
|
141
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
142
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalFileComponent, isStandalone: true, selector: "natural-file", inputs: { height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, action: { classPropertyName: "action", publicName: "action", isSignal: false, isRequired: false, transformFunction: null }, backgroundSize: { classPropertyName: "backgroundSize", publicName: "backgroundSize", isSignal: false, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, uploader: { classPropertyName: "uploader", publicName: "uploader", isSignal: false, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: false, isRequired: false, transformFunction: null }, formCtrl: { classPropertyName: "formCtrl", publicName: "formCtrl", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { modelChange: "modelChange" }, host: { properties: { "style.height.px": "height()" } }, usesOnChanges: true, ngImport: i0, template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [naturalBackgroundDensity]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n @if (filePreview) {\n <div class=\"file-preview\" [style.font-size.px]=\"fontSize()\">\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"attachment\" />\n {{ filePreview | uppercase }}\n </div>\n }\n\n <div class=\"action-overlay\" [style.font-size.px]=\"fontSize()\">\n @if (action === 'upload') {\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"cloud_upload\" />\n }\n @if (action === 'download') {\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"get_app\" />\n }\n {{ action | capitalize }}\n </div>\n</a>\n", styles: [":host{display:flex;position:relative;flex-direction:row;overflow:hidden}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;position:absolute;inset:0;flex-direction:column;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{display:flex;position:absolute;inset:0;justify-content:center;align-items:center;opacity:0}\n"], dependencies: [{ kind: "directive", type: NaturalFileDropDirective, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: ["fileOver"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "pipe", type: NaturalCapitalizePipe, name: "capitalize" }, { kind: "directive", type: NaturalBackgroundDensityDirective, selector: "[naturalBackgroundDensity]", inputs: ["naturalBackgroundDensity"] }] });
|
|
143
|
-
}
|
|
144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileComponent, decorators: [{
|
|
145
|
-
type: Component,
|
|
146
|
-
args: [{ selector: 'natural-file', standalone: true, imports: [
|
|
147
|
-
NaturalFileDropDirective,
|
|
148
|
-
MatRippleModule,
|
|
149
|
-
CommonModule,
|
|
150
|
-
MatIconModule,
|
|
151
|
-
NaturalIconDirective,
|
|
152
|
-
NaturalCapitalizePipe,
|
|
153
|
-
NaturalBackgroundDensityDirective,
|
|
154
|
-
], host: {
|
|
155
|
-
'[style.height.px]': 'height()',
|
|
156
|
-
}, template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [naturalBackgroundDensity]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n @if (filePreview) {\n <div class=\"file-preview\" [style.font-size.px]=\"fontSize()\">\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"attachment\" />\n {{ filePreview | uppercase }}\n </div>\n }\n\n <div class=\"action-overlay\" [style.font-size.px]=\"fontSize()\">\n @if (action === 'upload') {\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"cloud_upload\" />\n }\n @if (action === 'download') {\n <mat-icon [size]=\"iconHeight()\" naturalIcon=\"get_app\" />\n }\n {{ action | capitalize }}\n </div>\n</a>\n", styles: [":host{display:flex;position:relative;flex-direction:row;overflow:hidden}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;position:absolute;inset:0;flex-direction:column;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{display:flex;position:absolute;inset:0;justify-content:center;align-items:center;opacity:0}\n"] }]
|
|
157
|
-
}], propDecorators: { action: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], backgroundSize: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], accept: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], uploader: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], model: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], formCtrl: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], modelChange: [{
|
|
170
|
-
type: Output
|
|
171
|
-
}] } });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9maWxlL2NvbXBvbmVudC9maWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpbGUvY29tcG9uZW50L2ZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHNEQUFzRCxDQUFDOzs7OztBQUV2RyxXQUFXO0FBb0JYLE1BQU0sT0FBTyxvQkFBb0I7SUFDWixrQkFBa0IsR0FBRyxNQUFN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QUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxPQUFPLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3VHQW5KUSxvQkFBb0I7MkZBQXBCLG9CQUFvQiwra0NDN0NqQyw2a0NBZ0NBLDZ2QkRBUSx3QkFBd0IsNkdBQ3hCLGVBQWUsa1NBQ2YsWUFBWSwyRkFDWixhQUFhLG9MQUNiLG9CQUFvQiw4RkFDcEIscUJBQXFCLG1EQUNyQixpQ0FBaUM7OzJGQU81QixvQkFBb0I7a0JBbkJoQyxTQUFTOytCQUNJLGNBQWMsY0FHWixJQUFJLFdBQ1A7d0JBQ0wsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsaUNBQWlDO3FCQUNwQyxRQUVLO3dCQUNGLG1CQUFtQixFQUFFLFVBQVU7cUJBQ2xDOzhCQVdlLE1BQU07c0JBQXJCLEtBQUs7Z0JBRVUsY0FBYztzQkFBN0IsS0FBSztnQkFRVSxNQUFNO3NCQUFyQixLQUFLO2dCQWlCVSxRQUFRO3NCQUF2QixLQUFLO2dCQUVVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBTVUsUUFBUTtzQkFBdkIsS0FBSztnQkFNb0IsV0FBVztzQkFBcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmF0dXJhbEZpbGVTZXJ2aWNlfSBmcm9tICcuLi9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGUsIERPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGaWxlTW9kZWx9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7TmF0dXJhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxDYXBpdGFsaXplUGlwZX0gZnJvbSAnLi4vLi4vY29tbW9uL3BpcGVzL2NhcGl0YWxpemUucGlwZSc7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdFJpcHBsZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge05hdHVyYWxGaWxlRHJvcERpcmVjdGl2ZX0gZnJvbSAnLi4vZmlsZS1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQge05hdHVyYWxCYWNrZ3JvdW5kRGVuc2l0eURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vY29tbW9uL2RpcmVjdGl2ZXMvYmFja2dyb3VuZC1kZW5zaXR5LmRpcmVjdGl2ZSc7XG5cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtZmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9maWxlLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlLFxuICAgICAgICBNYXRSaXBwbGVNb2R1bGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTmF0dXJhbEljb25EaXJlY3RpdmUsXG4gICAgICAgIE5hdHVyYWxDYXBpdGFsaXplUGlwZSxcbiAgICAgICAgTmF0dXJhbEJhY2tncm91bmREZW5zaXR5RGlyZWN0aXZlLFxuICAgIF0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlLmhlaWdodC5weF0nOiAnaGVpZ2h0KCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0dXJhbEZpbGVTZXJ2aWNlID0gaW5qZWN0KE5hdHVyYWxGaWxlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2UgPSBpbmplY3QoTmF0dXJhbEFsZXJ0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwdWJsaWMgaGVpZ2h0ID0gaW5wdXQoMjUwKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWNvbkhlaWdodCA9IGNvbXB1dGVkKCgpID0+IE1hdGgubWluKHRoaXMuaGVpZ2h0KCkgKiAwLjY2LCAxMjApKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9udFNpemUgPSBjb21wdXRlZCgoKSA9PiBNYXRoLm1pbih0aGlzLmhlaWdodCgpICogMC4zLCAzNikpO1xuXG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbjogJ3VwbG9hZCcgfCAnZG93bmxvYWQnIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cbiAgICAvKipcbiAgICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1bmlxdWUgZmlsZSB0eXBlIHNwZWNpZmllcnMuIExpa2UgdGhlIG5hdGl2ZSBlbGVtZW50LFxuICAgICAqIGl0IGNhbiBiZSBhIG1peCBvZiBtaW1lLXR5cGUgYW5kIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvZmlsZSNhY2NlcHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ID1cbiAgICAgICAgJ2ltYWdlL2F2aWYsaW1hZ2UvYm1wLGltYWdlL2dpZixpbWFnZS9oZWljLGltYWdlL2hlaWYsaW1hZ2UvanBlZyxpbWFnZS9wanBlZyxpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS9zdmcsaW1hZ2Uvd2VicCc7XG5cbiAgICAvKipcbiAgICAgKiBJZiBnaXZlbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHNlbGVjdGVkLiBUaGUgY2FsbGJhY2sgc2hvdWxkIHR5cGljYWxseSB1cGxvYWQgdGhlIGZpbGVcbiAgICAgKiB0byB0aGUgc2VydmVyIGFuZCBsaW5rIHRoZSBuZXdseSB1cGxvYWRlZCBmaWxlIHRvIHRoZSBleGlzdGluZyByZWxhdGVkIG9iamVjdC5cbiAgICAgKlxuICAgICAqIFRoZSBjYWxsYmFjayAqKm11c3QqKiBiZSBhYmxlIHRvIHJ1biBldmVuIGlmIHRoZSBjYWxsaW5nIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuIFRoYXQgbWVhbnMgaW4gbW9zdFxuICAgICAqIGNhc2VzIHlvdSAqKm11c3QqKiBgYmluZCgpYCB0aGUgY2FsbGJhY2sgZXhwbGljaXRseSwgbGlrZSBzbzpcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8bmF0dXJhbC1maWxlIFt1cGxvYWRlcl09XCJteUNhbGxiYWNrLmJpbmQodGhpcylcIiAvPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQWxzbywgeW91IHByb2JhYmx5ICoqc2hvdWxkKiogc2V0IGEgYFtmb3JtQ3RybF1gIHNvIHRoYXQgdGhlIGZvcm0gaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LCBpbnN0ZWFkIG9mIGRvaW5nXG4gICAgICogaXQgbWFudWFsbHkgd2l0aGluIHRoZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgdXBsb2FkZXI/OiAoZmlsZTogRmlsZSkgPT4gT2JzZXJ2YWJsZTxGaWxlTW9kZWw+O1xuXG4gICAgQElucHV0KCkgcHVibGljIG1vZGVsOiBGaWxlTW9kZWwgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElmIHByb3ZpZGVkLCBpdHMgdmFsdWUgd2lsbCBnZXQgdXBkYXRlZCB3aGVuIHRoZSBtb2RlbCBjaGFuZ2VzLlxuICAgICAqIEJ1dCBpdHMgdmFsdWUgaXMgbmV2ZXIgcmVhZCwgc28gaWYgeW91IHdhbnQgdG8gc2V0IGEgdmFsdWUgdXNlIGBbbW9kZWxdYCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmb3JtQ3RybDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzICoqbXVzdCBub3QqKiBiZSB1c2VkIHRvIG11dGF0ZSB0aGUgc2VydmVyLCBiZWNhdXNlIGl0IGlzIHZlcnkgbGlrZWx5IGl0IHdpbGwgbmV2ZXIgYmUgY2FsbGVkIGlmIHRoZVxuICAgICAqIGh1bWFuIG5hdmlnYXRlcyBhd2F5IGZyb20gdGhlIHBhZ2UgYmVmb3JlIHRoZSB1cGxvYWQgaXMgZmluaXNoZWQuIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIGBbdXBsb2FkZXJdYC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTW9kZWw+KCk7XG5cbiAgICBwdWJsaWMgaW1hZ2VQcmV2aWV3ID0gJyc7XG4gICAgcHVibGljIGZpbGVQcmV2aWV3OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1vZGVsICYmIGNoYW5nZXMubW9kZWwucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5tb2RlbC5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVJbWFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGVsID0ge2ZpbGU6IGZpbGV9O1xuICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUN0cmwuc2V0VmFsdWUodGhpcy5tb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYnNlcnZhYmxlID1cbiAgICAgICAgICAgIHRoaXMudXBsb2FkZXI/LihmaWxlKS5waXBlKHRhcCgoKSA9PiB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKCRsb2NhbGl6ZWBNaXMgw6Agam91cmApKSkgPz8gb2YodGhpcy5tb2RlbCk7XG5cbiAgICAgICAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSByZXN1bHQ7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtQ3RybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUN0cmwuc2V0VmFsdWUodGhpcy5tb2RlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERvd25sb2FkTGluaygpOiBudWxsIHwgc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uICE9PSAnZG93bmxvYWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWxGaWxlU2VydmljZS5nZXREb3dubG9hZExpbmsodGhpcy5tb2RlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbWFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZVByZXZpZXcgPSAnJztcbiAgICAgICAgdGhpcy5maWxlUHJldmlldyA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgICAgLy8gTW9kZWwgZnJvbSB1cGxvYWQgKGJlZm9yZSBzYXZpbmcpXG4gICAgICAgICAgICB0aGlzLmdldEJhc2U2NCh0aGlzLm1vZGVsLmZpbGUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsPy5maWxlPy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAndXJsKGRhdGE6JyArIHRoaXMubW9kZWw/LmZpbGU/LnR5cGUgKyAnO2Jhc2U2NCwnICsgcmVzdWx0ICsgJyknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlUHJldmlldyA9IGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbC5maWxlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVQcmV2aWV3ID0gdGhpcy5tb2RlbC5maWxlLnR5cGUuc3BsaXQoJy8nKVsxXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsLl9fdHlwZW5hbWUgPT09ICdJbWFnZScgJiYgdGhpcy5tb2RlbC5pZCkge1xuICAgICAgICAgICAgLy8gTW9kZWwgaW1hZ2Ugd2l0aCBpZCwgdXNlIHNwZWNpZmljIEFQSSB0byByZW5kZXIgaW1hZ2UgYnkgc2l6ZVxuICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICghd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3Qgc2hvdyBpbWFnZSBwcmV2aWV3IGJlY2F1c2UgYHdpbmRvd2AgaXMgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaGVpZ2h0KCkgPyAnLycgKyB0aGlzLmhlaWdodCgpIDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpbWFnZSB1cmwgd2l0aG91dCBwb3J0IHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGRldiBtb2RlXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGxvYy5wcm90b2NvbCArICcvLycgKyBsb2MuaG9zdG5hbWUgKyAnL2FwaS9pbWFnZS8nICsgdGhpcy5tb2RlbC5pZCArIGhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VQcmV2aWV3ID0gaW1hZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbD8ubWltZSAmJiBbJ0ZpbGUnLCAnQWNjb3VudGluZ0RvY3VtZW50J10uaW5jbHVkZXModGhpcy5tb2RlbC5fX3R5cGVuYW1lIHx8ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5maWxlUHJldmlldyA9IHRoaXMubW9kZWwubWltZS5zcGxpdCgnLycpWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwuc3JjKSB7XG4gICAgICAgICAgICAvLyBleHRlcm5hbCB1cmxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VQcmV2aWV3ID0gdGhpcy5tb2RlbC5zcmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJhc2U2NChmaWxlOiBGaWxlIHwgbnVsbCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoZXY6IGFueSkgPT4ge1xuICAgICAgICAgICAgc3ViamVjdC5uZXh0KGJ0b2EoZXYudGFyZ2V0LnJlc3VsdCkpO1xuICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG59XG4iLCI8YVxuICAgIChmaWxlQ2hhbmdlKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICBuYXR1cmFsRmlsZURyb3BcbiAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgW2F0dHIuaHJlZl09XCJnZXREb3dubG9hZExpbmsoKVwiXG4gICAgW2NsYXNzLmhhcy1hY3Rpb25dPVwiISFhY3Rpb25cIlxuICAgIFtjbGFzcy5zdWdnZXN0LXVwbG9hZF09XCIhbW9kZWwgJiYgYWN0aW9uID09PSAndXBsb2FkJ1wiXG4gICAgW2ZpbGVTZWxlY3Rpb25EaXNhYmxlZF09XCJhY3Rpb24gIT09ICd1cGxvYWQnXCJcbiAgICBbbWF0UmlwcGxlRGlzYWJsZWRdPVwiIWFjdGlvblwiXG4gICAgW25hdHVyYWxCYWNrZ3JvdW5kRGVuc2l0eV09XCJpbWFnZVByZXZpZXdcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kU2l6ZV09XCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgbWF0UmlwcGxlXG4gICAgdGFyZ2V0PVwiX2JsYW5rXCJcbj5cbiAgICBAaWYgKGZpbGVQcmV2aWV3KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXByZXZpZXdcIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImZvbnRTaXplKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBbc2l6ZV09XCJpY29uSGVpZ2h0KClcIiBuYXR1cmFsSWNvbj1cImF0dGFjaG1lbnRcIiAvPlxuICAgICAgICAgICAge3sgZmlsZVByZXZpZXcgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1vdmVybGF5XCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJmb250U2l6ZSgpXCI+XG4gICAgICAgIEBpZiAoYWN0aW9uID09PSAndXBsb2FkJykge1xuICAgICAgICAgICAgPG1hdC1pY29uIFtzaXplXT1cImljb25IZWlnaHQoKVwiIG5hdHVyYWxJY29uPVwiY2xvdWRfdXBsb2FkXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGFjdGlvbiA9PT0gJ2Rvd25sb2FkJykge1xuICAgICAgICAgICAgPG1hdC1pY29uIFtzaXplXT1cImljb25IZWlnaHQoKVwiIG5hdHVyYWxJY29uPVwiZ2V0X2FwcFwiIC8+XG4gICAgICAgIH1cbiAgICAgICAge3sgYWN0aW9uIHwgY2FwaXRhbGl6ZSB9fVxuICAgIDwvZGl2PlxuPC9hPlxuIl19
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { DestroyRef, Directive, EventEmitter, HostBinding, HostListener, inject, Output } from '@angular/core';
|
|
2
|
-
import { NaturalAbstractFile } from './abstract-file';
|
|
3
|
-
import { eventToFiles, stopEvent } from './utils';
|
|
4
|
-
import { asyncScheduler, Subject } from 'rxjs';
|
|
5
|
-
import { throttleTime } from 'rxjs/operators';
|
|
6
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* This directive has all options to select files, and adds support for drag'n'drop.
|
|
10
|
-
*
|
|
11
|
-
* It will add the CSS class `natural-file-over` on the component when a file is
|
|
12
|
-
* dragged over. It is up to the component to have some specific styling by using
|
|
13
|
-
* this class.
|
|
14
|
-
*
|
|
15
|
-
* In most cases you probably also want click-to-select, so you should use:
|
|
16
|
-
*
|
|
17
|
-
* ```html
|
|
18
|
-
* <div naturalFileDrop [selectable]="true"></div>
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export class NaturalFileDropDirective extends NaturalAbstractFile {
|
|
22
|
-
destroyRef = inject(DestroyRef);
|
|
23
|
-
fileOverClass = false;
|
|
24
|
-
/**
|
|
25
|
-
* Emits whenever files are being dragged over
|
|
26
|
-
*/
|
|
27
|
-
fileOver = new EventEmitter();
|
|
28
|
-
rawFileOver = new Subject();
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
super.ngOnInit();
|
|
31
|
-
// Automatically change the class, but not too often to avoid visual
|
|
32
|
-
// flickering in Chrome when hovering across child HTML element of our host.
|
|
33
|
-
// It's not absolutely perfect and if dragging slowly and precisely we can
|
|
34
|
-
// still see flicker, but it should be better for most normal usages.
|
|
35
|
-
this.rawFileOver
|
|
36
|
-
.pipe(takeUntilDestroyed(this.destroyRef), throttleTime(200, asyncScheduler, {
|
|
37
|
-
leading: true,
|
|
38
|
-
trailing: true,
|
|
39
|
-
}))
|
|
40
|
-
.subscribe(fileOver => {
|
|
41
|
-
this.fileOver.emit(fileOver);
|
|
42
|
-
this.fileOverClass = fileOver;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
onDrop(event) {
|
|
46
|
-
if (this.fileSelectionDisabled) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
this.closeDrags();
|
|
50
|
-
const files = eventToFiles(event);
|
|
51
|
-
if (!files.length) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
stopEvent(event);
|
|
55
|
-
this.handleFiles(files);
|
|
56
|
-
}
|
|
57
|
-
onDragOver(event) {
|
|
58
|
-
if (!this.hasObservers()) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (this.fileSelectionDisabled) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
stopEvent(event);
|
|
65
|
-
// Change cursor
|
|
66
|
-
const transfer = event.dataTransfer;
|
|
67
|
-
if (transfer) {
|
|
68
|
-
transfer.dropEffect = 'copy';
|
|
69
|
-
}
|
|
70
|
-
this.rawFileOver.next(true);
|
|
71
|
-
}
|
|
72
|
-
closeDrags() {
|
|
73
|
-
this.rawFileOver.next(false);
|
|
74
|
-
}
|
|
75
|
-
onDragLeave(event) {
|
|
76
|
-
if (this.fileSelectionDisabled) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
stopEvent(event);
|
|
80
|
-
this.closeDrags();
|
|
81
|
-
}
|
|
82
|
-
hasObservers() {
|
|
83
|
-
return (this.fileChange.observed ||
|
|
84
|
-
this.filesChange.observed ||
|
|
85
|
-
(this.broadcast && this.naturalFileService.filesChanged.observed));
|
|
86
|
-
}
|
|
87
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileDropDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
88
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalFileDropDirective, isStandalone: true, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: { fileOver: "fileOver" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.natural-file-over": "this.fileOverClass" } }, usesInheritance: true, ngImport: i0 });
|
|
89
|
-
}
|
|
90
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileDropDirective, decorators: [{
|
|
91
|
-
type: Directive,
|
|
92
|
-
args: [{
|
|
93
|
-
selector: ':not([naturalFileSelect])[naturalFileDrop]',
|
|
94
|
-
standalone: true,
|
|
95
|
-
}]
|
|
96
|
-
}], propDecorators: { fileOverClass: [{
|
|
97
|
-
type: HostBinding,
|
|
98
|
-
args: ['class.natural-file-over']
|
|
99
|
-
}], fileOver: [{
|
|
100
|
-
type: Output
|
|
101
|
-
}], onDrop: [{
|
|
102
|
-
type: HostListener,
|
|
103
|
-
args: ['drop', ['$event']]
|
|
104
|
-
}], onDragOver: [{
|
|
105
|
-
type: HostListener,
|
|
106
|
-
args: ['dragover', ['$event']]
|
|
107
|
-
}], onDragLeave: [{
|
|
108
|
-
type: HostListener,
|
|
109
|
-
args: ['dragleave', ['$event']]
|
|
110
|
-
}] } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpbGUvZmlsZS1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFOUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHdCQUF5QixTQUFRLG1CQUFtQjtJQUM1QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ0YsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUVyRTs7T0FFRztJQUN1QixRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUVoRCxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUV0QyxRQUFRO1FBQ3BCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixvRUFBb0U7UUFDcEUsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFdBQVc7YUFDWCxJQUFJLENBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUNuQyxZQUFZLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRTtZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFHTSxNQUFNLENBQUMsS0FBZ0I7UUFDMUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1gsQ0FBQztRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFHTSxVQUFVLENBQUMsS0FBZ0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1gsQ0FBQztRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQixnQkFBZ0I7UUFDaEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNwQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUdNLFdBQVcsQ0FBQyxLQUFnQjtRQUMvQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDWCxDQUFDO1FBRUQsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sWUFBWTtRQUNoQixPQUFPLENBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtZQUN6QixDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FDcEUsQ0FBQztJQUNOLENBQUM7dUdBMUZRLHdCQUF3QjsyRkFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0Q0FBNEM7b0JBQ3RELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFHa0QsYUFBYTtzQkFBM0QsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBS1osUUFBUTtzQkFBakMsTUFBTTtnQkEwQkEsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFrQnpCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBCN0IsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Rlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpbmplY3QsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0RmlsZX0gZnJvbSAnLi9hYnN0cmFjdC1maWxlJztcbmltcG9ydCB7ZXZlbnRUb0ZpbGVzLCBzdG9wRXZlbnR9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHthc3luY1NjaGVkdWxlciwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rocm90dGxlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBoYXMgYWxsIG9wdGlvbnMgdG8gc2VsZWN0IGZpbGVzLCBhbmQgYWRkcyBzdXBwb3J0IGZvciBkcmFnJ24nZHJvcC5cbiAqXG4gKiBJdCB3aWxsIGFkZCB0aGUgQ1NTIGNsYXNzIGBuYXR1cmFsLWZpbGUtb3ZlcmAgb24gdGhlIGNvbXBvbmVudCB3aGVuIGEgZmlsZSBpc1xuICogZHJhZ2dlZCBvdmVyLiBJdCBpcyB1cCB0byB0aGUgY29tcG9uZW50IHRvIGhhdmUgc29tZSBzcGVjaWZpYyBzdHlsaW5nIGJ5IHVzaW5nXG4gKiB0aGlzIGNsYXNzLlxuICpcbiAqIEluIG1vc3QgY2FzZXMgeW91IHByb2JhYmx5IGFsc28gd2FudCBjbGljay10by1zZWxlY3QsIHNvIHlvdSBzaG91bGQgdXNlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbmF0dXJhbEZpbGVEcm9wIFtzZWxlY3RhYmxlXT1cInRydWVcIj48L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJzpub3QoW25hdHVyYWxGaWxlU2VsZWN0XSlbbmF0dXJhbEZpbGVEcm9wXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0RmlsZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubmF0dXJhbC1maWxlLW92ZXInKSBwdWJsaWMgZmlsZU92ZXJDbGFzcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbmV2ZXIgZmlsZXMgYXJlIGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZmlsZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhd0ZpbGVPdmVyID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGNoYW5nZSB0aGUgY2xhc3MsIGJ1dCBub3QgdG9vIG9mdGVuIHRvIGF2b2lkIHZpc3VhbFxuICAgICAgICAvLyBmbGlja2VyaW5nIGluIENocm9tZSB3aGVuIGhvdmVyaW5nIGFjcm9zcyBjaGlsZCBIVE1MIGVsZW1lbnQgb2Ygb3VyIGhvc3QuXG4gICAgICAgIC8vIEl0J3Mgbm90IGFic29sdXRlbHkgcGVyZmVjdCBhbmQgaWYgZHJhZ2dpbmcgc2xvd2x5IGFuZCBwcmVjaXNlbHkgd2UgY2FuXG4gICAgICAgIC8vIHN0aWxsIHNlZSBmbGlja2VyLCBidXQgaXQgc2hvdWxkIGJlIGJldHRlciBmb3IgbW9zdCBub3JtYWwgdXNhZ2VzLlxuICAgICAgICB0aGlzLnJhd0ZpbGVPdmVyXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjAwLCBhc3luY1NjaGVkdWxlciwge1xuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZmlsZU92ZXIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIuZW1pdChmaWxlT3Zlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlT3ZlckNsYXNzID0gZmlsZU92ZXI7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZVNlbGVjdGlvbkRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlRHJhZ3MoKTtcblxuICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50VG9GaWxlcyhldmVudCk7XG4gICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICB0aGlzLmhhbmRsZUZpbGVzKGZpbGVzKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzT2JzZXJ2ZXJzKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbGVTZWxlY3Rpb25EaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RvcEV2ZW50KGV2ZW50KTtcblxuICAgICAgICAvLyBDaGFuZ2UgY3Vyc29yXG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xuICAgICAgICBpZiAodHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJhd0ZpbGVPdmVyLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURyYWdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJhd0ZpbGVPdmVyLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZVNlbGVjdGlvbkRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICB0aGlzLmNsb3NlRHJhZ3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc09ic2VydmVycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZS5vYnNlcnZlZCB8fFxuICAgICAgICAgICAgdGhpcy5maWxlc0NoYW5nZS5vYnNlcnZlZCB8fFxuICAgICAgICAgICAgKHRoaXMuYnJvYWRjYXN0ICYmIHRoaXMubmF0dXJhbEZpbGVTZXJ2aWNlLmZpbGVzQ2hhbmdlZC5vYnNlcnZlZClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { NaturalAbstractFile } from './abstract-file';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* This directive has all options to select files, except drag'n'drop.
|
|
6
|
-
*/
|
|
7
|
-
export class NaturalFileSelectDirective extends NaturalAbstractFile {
|
|
8
|
-
/**
|
|
9
|
-
* Whether the user can click on the element to select something
|
|
10
|
-
*
|
|
11
|
-
* Override parent to enable it by default
|
|
12
|
-
*/
|
|
13
|
-
selectable = true;
|
|
14
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileSelectDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
15
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalFileSelectDirective, isStandalone: true, selector: ":not([naturalFileDrop])[naturalFileSelect]", inputs: { selectable: "selectable" }, usesInheritance: true, ngImport: i0 });
|
|
16
|
-
}
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFileSelectDirective, decorators: [{
|
|
18
|
-
type: Directive,
|
|
19
|
-
args: [{
|
|
20
|
-
selector: ':not([naturalFileDrop])[naturalFileSelect]',
|
|
21
|
-
standalone: true,
|
|
22
|
-
}]
|
|
23
|
-
}], propDecorators: { selectable: [{
|
|
24
|
-
type: Input
|
|
25
|
-
}] } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZmlsZS9maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBRXBEOztHQUVHO0FBS0gsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG1CQUFtQjtJQUMvRDs7OztPQUlHO0lBQ3NCLFVBQVUsR0FBRyxJQUFJLENBQUM7dUdBTmxDLDBCQUEwQjsyRkFBMUIsMEJBQTBCOzsyRkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw0Q0FBNEM7b0JBQ3RELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFPNEIsVUFBVTtzQkFBbEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdEZpbGV9IGZyb20gJy4vYWJzdHJhY3QtZmlsZSc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaGFzIGFsbCBvcHRpb25zIHRvIHNlbGVjdCBmaWxlcywgZXhjZXB0IGRyYWcnbidkcm9wLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJzpub3QoW25hdHVyYWxGaWxlRHJvcF0pW25hdHVyYWxGaWxlU2VsZWN0XScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEZpbGVTZWxlY3REaXJlY3RpdmUgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RGaWxlIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB1c2VyIGNhbiBjbGljayBvbiB0aGUgZWxlbWVudCB0byBzZWxlY3Qgc29tZXRoaW5nXG4gICAgICpcbiAgICAgKiBPdmVycmlkZSBwYXJlbnQgdG8gZW5hYmxlIGl0IGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb3ZlcnJpZGUgc2VsZWN0YWJsZSA9IHRydWU7XG59XG4iXX0=
|