@villedemontreal/angular-ui 13.0.0 → 13.1.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 (89) hide show
  1. package/esm2020/lib/alert/alert.component.mjs +2 -2
  2. package/esm2020/lib/alert/index.mjs +2 -2
  3. package/esm2020/lib/alert/module.mjs +2 -2
  4. package/esm2020/lib/avatar/avatar.component.mjs +2 -2
  5. package/esm2020/lib/avatar/index.mjs +2 -2
  6. package/esm2020/lib/avatar/module.mjs +2 -2
  7. package/esm2020/lib/badge/badge.component.mjs +2 -2
  8. package/esm2020/lib/badge/index.mjs +2 -2
  9. package/esm2020/lib/badge/module.mjs +2 -2
  10. package/esm2020/lib/bao.module.mjs +9 -5
  11. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +2 -2
  12. package/esm2020/lib/breadcrumb/index.mjs +2 -2
  13. package/esm2020/lib/breadcrumb/module.mjs +2 -2
  14. package/esm2020/lib/button/button.component.mjs +2 -2
  15. package/esm2020/lib/button/index.mjs +2 -2
  16. package/esm2020/lib/button/module.mjs +2 -2
  17. package/esm2020/lib/card/card.component.mjs +2 -2
  18. package/esm2020/lib/card/index.mjs +2 -2
  19. package/esm2020/lib/card/module.mjs +2 -2
  20. package/esm2020/lib/checkbox/checkbox-group.component.mjs +2 -2
  21. package/esm2020/lib/checkbox/checkbox.component.mjs +1 -1
  22. package/esm2020/lib/checkbox/index.mjs +2 -2
  23. package/esm2020/lib/checkbox/module.mjs +2 -2
  24. package/esm2020/lib/common-components/error-text/errorText.component.mjs +2 -2
  25. package/esm2020/lib/common-components/guiding-text/guidingText.component.mjs +2 -2
  26. package/esm2020/lib/common-components/index.mjs +2 -2
  27. package/esm2020/lib/common-components/label-text/labelText.component.mjs +4 -4
  28. package/esm2020/lib/common-components/module.mjs +6 -3
  29. package/esm2020/lib/common-components/title-text/titleText.component.mjs +2 -2
  30. package/esm2020/lib/core/colors.mjs +1 -1
  31. package/esm2020/lib/dropdown-menu/dropdown-menu.component.mjs +9 -2
  32. package/esm2020/lib/dropdown-menu/index.mjs +2 -2
  33. package/esm2020/lib/dropdown-menu/module.mjs +2 -2
  34. package/esm2020/lib/file/file-input.component.mjs +319 -0
  35. package/esm2020/lib/file/file-intl.mjs +65 -0
  36. package/esm2020/lib/file/file-preview.component.mjs +86 -0
  37. package/esm2020/lib/file/index.mjs +10 -0
  38. package/esm2020/lib/file/module.mjs +58 -0
  39. package/esm2020/lib/header-info/header-info.component.mjs +2 -2
  40. package/esm2020/lib/header-info/index.mjs +2 -2
  41. package/esm2020/lib/header-info/module.mjs +2 -2
  42. package/esm2020/lib/hyperlink/hyperlink.component.mjs +2 -2
  43. package/esm2020/lib/hyperlink/index.mjs +2 -2
  44. package/esm2020/lib/hyperlink/module.mjs +2 -2
  45. package/esm2020/lib/icon/bao-icon-registry.mjs +2 -2
  46. package/esm2020/lib/icon/icon.component.mjs +2 -2
  47. package/esm2020/lib/icon/icons-dictionary.mjs +3 -2
  48. package/esm2020/lib/icon/index.mjs +2 -2
  49. package/esm2020/lib/icon/module.mjs +2 -2
  50. package/esm2020/lib/list/index.mjs +2 -2
  51. package/esm2020/lib/list/list.component.mjs +2 -2
  52. package/esm2020/lib/list/module.mjs +2 -2
  53. package/esm2020/lib/modal/index.mjs +2 -2
  54. package/esm2020/lib/modal/modal-animations.mjs +2 -2
  55. package/esm2020/lib/modal/modal-config.mjs +2 -2
  56. package/esm2020/lib/modal/modal-container.mjs +1 -1
  57. package/esm2020/lib/modal/modal-directives.mjs +2 -2
  58. package/esm2020/lib/modal/modal-ref.mjs +1 -1
  59. package/esm2020/lib/modal/modal.mjs +2 -2
  60. package/esm2020/lib/modal/module.mjs +2 -2
  61. package/esm2020/lib/radio/index.mjs +2 -2
  62. package/esm2020/lib/radio/module.mjs +2 -2
  63. package/esm2020/lib/radio/radio-group.component.mjs +2 -2
  64. package/esm2020/lib/radio/radio.component.mjs +1 -1
  65. package/esm2020/lib/shared/enum/display-mode.mjs +1 -1
  66. package/esm2020/lib/shared/index.mjs +2 -2
  67. package/esm2020/lib/summary/index.mjs +2 -2
  68. package/esm2020/lib/summary/list-summary.component.mjs +2 -2
  69. package/esm2020/lib/summary/module.mjs +2 -2
  70. package/esm2020/lib/summary/summary.component.mjs +2 -2
  71. package/esm2020/lib/tabs/index.mjs +2 -2
  72. package/esm2020/lib/tabs/module.mjs +2 -2
  73. package/esm2020/lib/tabs/tabs.component.mjs +2 -2
  74. package/esm2020/lib/tag/index.mjs +2 -2
  75. package/esm2020/lib/tag/module.mjs +2 -2
  76. package/esm2020/lib/tag/tag.component.mjs +2 -2
  77. package/esm2020/public-api.mjs +3 -2
  78. package/fesm2015/villedemontreal-angular-ui.mjs +596 -78
  79. package/fesm2015/villedemontreal-angular-ui.mjs.map +1 -1
  80. package/fesm2020/villedemontreal-angular-ui.mjs +596 -78
  81. package/fesm2020/villedemontreal-angular-ui.mjs.map +1 -1
  82. package/lib/bao.module.d.ts +2 -1
  83. package/lib/file/file-input.component.d.ts +123 -0
  84. package/lib/file/file-intl.d.ts +44 -0
  85. package/lib/file/file-preview.component.d.ts +29 -0
  86. package/lib/file/index.d.ts +4 -0
  87. package/lib/file/module.d.ts +13 -0
  88. package/package.json +1 -1
  89. package/public-api.d.ts +1 -0
@@ -0,0 +1,319 @@
1
+ /*
2
+ * Copyright (c) 2023 Ville de Montreal. All rights reserved.
3
+ * Licensed under the MIT license.
4
+ * See LICENSE file in the project root for full license information.
5
+ */
6
+ import { Component, ContentChildren, Directive, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
7
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
+ import { BaoErrorTextComponent } from '../common-components';
9
+ import { BaoFilePreviewComponent } from './file-preview.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./file-intl";
12
+ import * as i2 from "../common-components/label-text/labelText.component";
13
+ import * as i3 from "../button/button.component";
14
+ import * as i4 from "../common-components/error-text/errorText.component";
15
+ import * as i5 from "@angular/common";
16
+ /**
17
+ * Unique number to generate a unique ID
18
+ */
19
+ let fileInputUniqueId = 0;
20
+ let fileTextUniqueId = 0;
21
+ export class BaoFileInputComponent {
22
+ constructor(intl, elementRef, renderer, cdr) {
23
+ this.intl = intl;
24
+ this.elementRef = elementRef;
25
+ this.renderer = renderer;
26
+ this.cdr = cdr;
27
+ /**
28
+ * Size of the file input label
29
+ */
30
+ this.size = 'medium';
31
+ /**
32
+ * Maximum size accepted for uploaded files
33
+ */
34
+ this.maximalFileSize = -1;
35
+ /**
36
+ * Accepted types of files
37
+ */
38
+ this.acceptedMIMETypes = [];
39
+ /**
40
+ * Is field required
41
+ */
42
+ this.required = false;
43
+ /**
44
+ * Is field disabled
45
+ */
46
+ this.disabled = false;
47
+ /**
48
+ * File selected to be uploaded
49
+ */
50
+ this.uploadedFile = new EventEmitter();
51
+ this.insertDefaultInstructions = false;
52
+ this.isFileTooBig = false;
53
+ this.isFileTypeInvalid = false;
54
+ /**
55
+ * Saves the registerOnChange function so the component can call it whenever it wants.
56
+ */
57
+ // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
58
+ this.propagateChange = (_) => { };
59
+ /**
60
+ * Saves the registerOnTouched function so the component can call it whenever it wants.
61
+ */
62
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
63
+ this.propagateTouched = () => { };
64
+ this._intlChanges = intl.changes.subscribe(() => this.cdr.markForCheck());
65
+ }
66
+ get nativeElement() {
67
+ return this.elementRef.nativeElement;
68
+ }
69
+ enterKeyEvent() {
70
+ if (document.activeElement.id === this.inputId) {
71
+ document.getElementById(this.inputId).click();
72
+ }
73
+ }
74
+ tabKeyEvent() {
75
+ if (document.activeElement.id === this.inputId) {
76
+ this.renderer.addClass(this.dropzoneElement.nativeElement, 'dropzone-focus');
77
+ }
78
+ }
79
+ shiftTabKeyEvent() {
80
+ if (document.activeElement.id === this.inputId) {
81
+ this.renderer.addClass(this.dropzoneElement.nativeElement, 'dropzone-focus');
82
+ }
83
+ }
84
+ ngAfterContentInit() {
85
+ this._errorForm.changes.subscribe(() => this.setErrorTextsAttribute());
86
+ if (!this.inputId) {
87
+ this.inputId = `file-input-${fileInputUniqueId++}`;
88
+ }
89
+ // If no content was added for dropzone instructions, add default text.
90
+ const dropzoneElement = Array.from(this.nativeElement.children).find((el) => el.className === 'file-drop-zone');
91
+ if (!Array.from(dropzoneElement.children).find(el => el.localName === 'bao-file-dropzone-instructions')) {
92
+ this.insertDefaultInstructions = true;
93
+ }
94
+ this.setDescribedByAttribute();
95
+ this._files.changes.subscribe((files) => {
96
+ const filesList = files.map((el) => el.file);
97
+ this.setValue(filesList);
98
+ });
99
+ }
100
+ ngAfterViewInit() {
101
+ this._errorTexts.changes.subscribe(() => this.setErrorTextsAttribute());
102
+ }
103
+ ngOnDestroy() {
104
+ this._intlChanges.unsubscribe();
105
+ }
106
+ /**
107
+ * Implements ControlValueAccessor interface
108
+ */
109
+ writeValue(obj) {
110
+ this._value = obj;
111
+ }
112
+ /**
113
+ * Implements ControlValueAccessor interface
114
+ */
115
+ registerOnChange(fn) {
116
+ this.propagateChange = fn;
117
+ }
118
+ /**
119
+ * Implements ControlValueAccessor interface
120
+ */
121
+ registerOnTouched(fn) {
122
+ this.propagateTouched = fn;
123
+ }
124
+ /**
125
+ * Implements ControlValueAccessor interface
126
+ */
127
+ setDisabledState(isDisabled) {
128
+ this.disabled = isDisabled;
129
+ }
130
+ uploadFile(file) {
131
+ if (!this.disabled) {
132
+ this.isFileTypeInvalid = false;
133
+ this.isFileTooBig = false;
134
+ this.uploader.nativeElement.value = '';
135
+ if (this.maximalFileSize > 0 && file.size > this.maximalFileSize) {
136
+ this.isFileTooBig = true;
137
+ }
138
+ if (this.acceptedMIMETypes.length > 0 &&
139
+ this.acceptedMIMETypes.indexOf(file.type) < 0) {
140
+ this.isFileTypeInvalid = true;
141
+ }
142
+ if (!this.isFileTooBig && !this.isFileTypeInvalid) {
143
+ this.uploadedFile.emit(file);
144
+ }
145
+ }
146
+ }
147
+ setValue(value) {
148
+ this._value = value;
149
+ this.propagateChange(this._value);
150
+ this.propagateTouched();
151
+ }
152
+ setDescribedByAttribute() {
153
+ const helperText = Array.from(this.nativeElement.children).find((el) => el.localName === 'bao-guiding-text').firstElementChild;
154
+ if (helperText) {
155
+ this._helperTextId = `bao-guiding-text-${fileTextUniqueId++}`;
156
+ this.renderer.setAttribute(helperText, 'id', this._helperTextId);
157
+ const inputElement = Array.from(this.nativeElement.children)
158
+ .find((el) => el.className == 'file-drop-zone')
159
+ .children.item(1);
160
+ this.renderer.setAttribute(inputElement, 'aria-describedby', this._helperTextId);
161
+ }
162
+ }
163
+ setErrorTextsAttribute() {
164
+ const textsIds = [];
165
+ const errors = Array.from(this.nativeElement.children).filter((el) => el.localName == 'bao-error');
166
+ errors.forEach((errorText) => {
167
+ const errorTextId = `bao-error-${fileTextUniqueId++}`;
168
+ this.renderer.setAttribute(errorText.firstElementChild, 'id', errorTextId);
169
+ textsIds.push(errorTextId);
170
+ });
171
+ const inputElement = Array.from(this.nativeElement.children)
172
+ .find((el) => el.classList.contains('file-drop-zone'))
173
+ .children.item(1);
174
+ if (this._helperTextId) {
175
+ textsIds.unshift(this._helperTextId);
176
+ }
177
+ this.renderer.setAttribute(inputElement, 'aria-describedby', textsIds.join(' '));
178
+ }
179
+ }
180
+ BaoFileInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileInputComponent, deps: [{ token: i1.BaoFileIntl }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
181
+ BaoFileInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoFileInputComponent, selector: "bao-file-input, [bao-file-input]", inputs: { inputId: ["id", "inputId"], label: "label", size: "size", maximalFileSize: "maximalFileSize", acceptedMIMETypes: "acceptedMIMETypes", required: "required", disabled: "disabled" }, outputs: { uploadedFile: "uploadedFile" }, host: { listeners: { "window:keyup.enter": "enterKeyEvent()", "window:keyup.tab": "tabKeyEvent()", "window:keyup.shift.tab": "shiftTabKeyEvent()" }, properties: { "class.bao-file-label-small": "size === \"small\"", "class.bao-file-label-medium": "size === \"medium\"", "class.bao-file-input-disabled": "disabled" }, classAttribute: "bao-file-input" }, providers: [
182
+ {
183
+ provide: NG_VALUE_ACCESSOR,
184
+ // tslint:disable-next-line:no-forward-ref
185
+ useExisting: forwardRef(() => BaoFileInputComponent),
186
+ multi: true
187
+ }
188
+ ], queries: [{ propertyName: "_files", predicate: BaoFilePreviewComponent, descendants: true }, { propertyName: "_errorForm", predicate: BaoErrorTextComponent, descendants: true }], viewQueries: [{ propertyName: "uploader", first: true, predicate: ["uploader"], descendants: true }, { propertyName: "dropzoneElement", first: true, predicate: ["dropzone"], descendants: true }, { propertyName: "_errorTexts", predicate: BaoErrorTextComponent, descendants: true }], ngImport: i0, template: "<label bao-label [required]=\"required\" [for]=\"inputId\">{{ label }}</label>\n<ng-content select=\"bao-guiding-text\"></ng-content>\n<div\n baoFileDrop\n class=\"file-drop-zone\"\n (fileDrop)=\"uploadFile($event)\"\n #dropzone\n>\n <button\n bao-button\n type=\"button\"\n displayType=\"utility\"\n level=\"secondary\"\n [disabled]=\"disabled\"\n (click)=\"uploader.click()\"\n aria-hidden=\"true\"\n tabIndex=\"-1\"\n >\n {{ intl.dropzoneButtonLabel }}\n </button>\n <input\n [id]=\"inputId\"\n type=\"file\"\n class=\"sr-only\"\n [disabled]=\"disabled\"\n (change)=\"uploadFile($event.target.files[0])\"\n #uploader\n />\n <ng-container\n ><div #ref>\n <ng-content select=\"bao-file-dropzone-instructions\"></ng-content></div\n ></ng-container>\n <ng-container *ngIf=\"ref.childNodes.length === 0\"\n ><bao-file-dropzone-instructions>{{\n intl.defaultDropzoneInstructions\n }}</bao-file-dropzone-instructions></ng-container\n >\n</div>\n<bao-error *ngIf=\"isFileTooBig\">\n {{ intl.fileTooBigErrorMessage }}\n</bao-error>\n<bao-error *ngIf=\"isFileTypeInvalid\">\n {{ intl.invalidFileTypeErrorMessage }}\n</bao-error>\n<ng-content select=\"bao-error\"></ng-content>\n<ng-content></ng-content>\n", styles: ["bao-file-input{width:100%;display:inline-flex;flex-direction:column}bao-file-input>ul{padding:0;margin:0}bao-file-input .bao-label>span{font-size:inherit;font-weight:inherit}bao-file-input.bao-file-label-small label{font-weight:700;font-size:.875rem;line-height:1.25rem}bao-file-input.bao-file-label-medium label{font-weight:700;font-size:1rem;line-height:1.5rem}bao-file-input .bao-guiding-text{margin-bottom:.5rem}bao-file-input .file-drop-zone{padding:.5rem;background-color:#fff;border-radius:.25rem;border-style:dashed;border-color:#ced4da;border-width:1px;display:inline-flex;align-items:center}bao-file-input .file-drop-zone:focus-within.dropzone-focus{box-shadow:0 0 0 .1875rem #98bcde;background-color:#eefaf8}bao-file-input .file-drop-zone>.bao-button{margin-right:.5rem}bao-file-input .file-drop-zone.drag-over{background-color:#eefaf8;border-color:#097d6c;cursor:drag}bao-file-input .file-drop-zone.drag-over>.bao-button{background-color:#eefaf8}bao-file-input.bao-file-input-disabled .file-drop-zone{background-color:#f8f9fa;border-color:#ced4da}bao-file-input.bao-file-input-disabled .file-drop-zone .bao-button{background-color:#f8f9fa}bao-file-input.bao-file-input-disabled .file-drop-zone .bao-button:hover{background-color:#f8f9fa}bao-file-input .bao-error{margin-top:.5rem}\n"], components: [{ type: i0.forwardRef(function () { return i2.BaoLabelTextComponent; }), selector: "bao-label, [bao-label]", inputs: ["required"] }, { type: i0.forwardRef(function () { return i3.BaoButtonComponent; }), selector: "button[bao-button]", inputs: ["displayType", "level", "size", "loading", "reversed", "loadingSpinnerAriaLabel", "fullWidth"] }, { type: i0.forwardRef(function () { return i4.BaoErrorTextComponent; }), selector: "bao-error, [bao-error]" }], directives: [{ type: i0.forwardRef(function () { return BaoFileDropDirective; }), selector: "[baoFileDrop]", outputs: ["fileDrop"] }, { type: i0.forwardRef(function () { return i5.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return BaoFileDropzoneIntructions; }), selector: "bao-file-dropzone-instructions, [bao-file-dropzone-instructions]" }], encapsulation: i0.ViewEncapsulation.None });
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileInputComponent, decorators: [{
190
+ type: Component,
191
+ args: [{ selector: 'bao-file-input, [bao-file-input]', providers: [
192
+ {
193
+ provide: NG_VALUE_ACCESSOR,
194
+ // tslint:disable-next-line:no-forward-ref
195
+ useExisting: forwardRef(() => BaoFileInputComponent),
196
+ multi: true
197
+ }
198
+ ], encapsulation: ViewEncapsulation.None, host: {
199
+ class: 'bao-file-input',
200
+ '[class.bao-file-label-small]': 'size === "small"',
201
+ '[class.bao-file-label-medium]': 'size === "medium"',
202
+ '[class.bao-file-input-disabled]': 'disabled'
203
+ }, template: "<label bao-label [required]=\"required\" [for]=\"inputId\">{{ label }}</label>\n<ng-content select=\"bao-guiding-text\"></ng-content>\n<div\n baoFileDrop\n class=\"file-drop-zone\"\n (fileDrop)=\"uploadFile($event)\"\n #dropzone\n>\n <button\n bao-button\n type=\"button\"\n displayType=\"utility\"\n level=\"secondary\"\n [disabled]=\"disabled\"\n (click)=\"uploader.click()\"\n aria-hidden=\"true\"\n tabIndex=\"-1\"\n >\n {{ intl.dropzoneButtonLabel }}\n </button>\n <input\n [id]=\"inputId\"\n type=\"file\"\n class=\"sr-only\"\n [disabled]=\"disabled\"\n (change)=\"uploadFile($event.target.files[0])\"\n #uploader\n />\n <ng-container\n ><div #ref>\n <ng-content select=\"bao-file-dropzone-instructions\"></ng-content></div\n ></ng-container>\n <ng-container *ngIf=\"ref.childNodes.length === 0\"\n ><bao-file-dropzone-instructions>{{\n intl.defaultDropzoneInstructions\n }}</bao-file-dropzone-instructions></ng-container\n >\n</div>\n<bao-error *ngIf=\"isFileTooBig\">\n {{ intl.fileTooBigErrorMessage }}\n</bao-error>\n<bao-error *ngIf=\"isFileTypeInvalid\">\n {{ intl.invalidFileTypeErrorMessage }}\n</bao-error>\n<ng-content select=\"bao-error\"></ng-content>\n<ng-content></ng-content>\n", styles: ["bao-file-input{width:100%;display:inline-flex;flex-direction:column}bao-file-input>ul{padding:0;margin:0}bao-file-input .bao-label>span{font-size:inherit;font-weight:inherit}bao-file-input.bao-file-label-small label{font-weight:700;font-size:.875rem;line-height:1.25rem}bao-file-input.bao-file-label-medium label{font-weight:700;font-size:1rem;line-height:1.5rem}bao-file-input .bao-guiding-text{margin-bottom:.5rem}bao-file-input .file-drop-zone{padding:.5rem;background-color:#fff;border-radius:.25rem;border-style:dashed;border-color:#ced4da;border-width:1px;display:inline-flex;align-items:center}bao-file-input .file-drop-zone:focus-within.dropzone-focus{box-shadow:0 0 0 .1875rem #98bcde;background-color:#eefaf8}bao-file-input .file-drop-zone>.bao-button{margin-right:.5rem}bao-file-input .file-drop-zone.drag-over{background-color:#eefaf8;border-color:#097d6c;cursor:drag}bao-file-input .file-drop-zone.drag-over>.bao-button{background-color:#eefaf8}bao-file-input.bao-file-input-disabled .file-drop-zone{background-color:#f8f9fa;border-color:#ced4da}bao-file-input.bao-file-input-disabled .file-drop-zone .bao-button{background-color:#f8f9fa}bao-file-input.bao-file-input-disabled .file-drop-zone .bao-button:hover{background-color:#f8f9fa}bao-file-input .bao-error{margin-top:.5rem}\n"] }]
204
+ }], ctorParameters: function () { return [{ type: i1.BaoFileIntl }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { inputId: [{
205
+ type: Input,
206
+ args: ['id']
207
+ }], label: [{
208
+ type: Input
209
+ }], size: [{
210
+ type: Input
211
+ }], maximalFileSize: [{
212
+ type: Input
213
+ }], acceptedMIMETypes: [{
214
+ type: Input
215
+ }], required: [{
216
+ type: Input
217
+ }], disabled: [{
218
+ type: Input
219
+ }], uploadedFile: [{
220
+ type: Output
221
+ }], _files: [{
222
+ type: ContentChildren,
223
+ args: [BaoFilePreviewComponent, { descendants: true }]
224
+ }], _errorForm: [{
225
+ type: ContentChildren,
226
+ args: [BaoErrorTextComponent, { descendants: true }]
227
+ }], _errorTexts: [{
228
+ type: ViewChildren,
229
+ args: [BaoErrorTextComponent]
230
+ }], uploader: [{
231
+ type: ViewChild,
232
+ args: ['uploader', { static: false }]
233
+ }], dropzoneElement: [{
234
+ type: ViewChild,
235
+ args: ['dropzone', { static: false }]
236
+ }], enterKeyEvent: [{
237
+ type: HostListener,
238
+ args: ['window:keyup.enter']
239
+ }], tabKeyEvent: [{
240
+ type: HostListener,
241
+ args: ['window:keyup.tab']
242
+ }], shiftTabKeyEvent: [{
243
+ type: HostListener,
244
+ args: ['window:keyup.shift.tab']
245
+ }] } });
246
+ export class BaoFileDropDirective {
247
+ constructor() {
248
+ this.fileDrop = new EventEmitter();
249
+ this._isDragOver = false;
250
+ }
251
+ onDragOver(event) {
252
+ this.preventAndStop(event);
253
+ this._isDragOver = true;
254
+ }
255
+ onDragLeave(event) {
256
+ this.preventAndStop(event);
257
+ this._isDragOver = false;
258
+ }
259
+ onDrop(event) {
260
+ this.preventAndStop(event);
261
+ this._isDragOver = false;
262
+ const transfer = this.getDataTransfer(event);
263
+ this.fileDrop.emit(transfer.files[0]);
264
+ }
265
+ preventAndStop(event) {
266
+ event.preventDefault();
267
+ event.stopPropagation();
268
+ }
269
+ getDataTransfer(event) {
270
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
271
+ return event.dataTransfer
272
+ ? event.dataTransfer
273
+ : event.originalEvent.dataTransfer;
274
+ }
275
+ }
276
+ BaoFileDropDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
277
+ BaoFileDropDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: BaoFileDropDirective, selector: "[baoFileDrop]", outputs: { fileDrop: "fileDrop" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "class.drag-over": "_isDragOver == true" } }, ngImport: i0 });
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileDropDirective, decorators: [{
279
+ type: Directive,
280
+ args: [{
281
+ selector: '[baoFileDrop]',
282
+ host: { '[class.drag-over]': '_isDragOver == true' }
283
+ }]
284
+ }], propDecorators: { fileDrop: [{
285
+ type: Output
286
+ }], onDragOver: [{
287
+ type: HostListener,
288
+ args: ['dragover', ['$event']]
289
+ }], onDragLeave: [{
290
+ type: HostListener,
291
+ args: ['dragleave', ['$event']]
292
+ }], onDrop: [{
293
+ type: HostListener,
294
+ args: ['drop', ['$event']]
295
+ }] } });
296
+ export class BaoFileDropzoneIntructions {
297
+ constructor(renderer, elementRef) {
298
+ this.renderer = renderer;
299
+ this.elementRef = elementRef;
300
+ }
301
+ get nativeElement() {
302
+ return this.elementRef.nativeElement;
303
+ }
304
+ ngAfterContentInit() {
305
+ this.renderer.setAttribute(this.nativeElement, 'aria-hidden', 'true');
306
+ }
307
+ }
308
+ BaoFileDropzoneIntructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileDropzoneIntructions, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
309
+ BaoFileDropzoneIntructions.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: BaoFileDropzoneIntructions, selector: "bao-file-dropzone-instructions, [bao-file-dropzone-instructions]", host: { classAttribute: "bao-file-dropzone-instructions" }, ngImport: i0 });
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileDropzoneIntructions, decorators: [{
311
+ type: Directive,
312
+ args: [{
313
+ selector: 'bao-file-dropzone-instructions, [bao-file-dropzone-instructions]',
314
+ host: {
315
+ class: 'bao-file-dropzone-instructions'
316
+ }
317
+ }]
318
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; } });
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZmlsZS9maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9maWxlL2ZpbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFJTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQUVuRTs7R0FFRztBQUNILElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBc0J6QixNQUFNLE9BQU8scUJBQXFCO0lBNEVoQyxZQUNTLElBQWlCLEVBQ2hCLFVBQW1DLEVBQ25DLFFBQW1CLEVBQ25CLEdBQXNCO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDaEIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQW5FaEM7O1dBRUc7UUFDYSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUVwRDs7V0FFRztRQUNhLG9CQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFckM7O1dBRUc7UUFDYSxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFFakQ7O1dBRUc7UUFDYSxhQUFRLEdBQUksS0FBSyxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsYUFBUSxHQUFJLEtBQUssQ0FBQztRQUVsQzs7V0FFRztRQUNjLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUE0QnRFLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUE2SGpDOztXQUVHO1FBQ0gsbUdBQW1HO1FBQzVGLG9CQUFlLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUV4Qzs7V0FFRztRQUNILGdFQUFnRTtRQUN6RCxxQkFBZ0IsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUE1SGpDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUNsQyxnQkFBZ0IsQ0FDakIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUdELGdCQUFnQjtRQUNkLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQ2xDLGdCQUFnQixDQUNqQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7U0FDcEQ7UUFDRCx1RUFBdUU7UUFDdkUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxFQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLENBQ3ZELENBQUM7UUFDRixJQUNFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN4QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssZ0NBQWdDLENBQ3hELEVBQ0Q7WUFDQSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUMzQixDQUFDLEtBQXlDLEVBQUUsRUFBRTtZQUM1QyxNQUFNLFNBQVMsR0FBVyxLQUFLLENBQUMsR0FBRyxDQUNqQyxDQUFDLEVBQTJCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQ3pDLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBQ0Q7O09BRUc7SUFDSSxnQkFBZ0IsQ0FBQyxFQUF3QjtRQUM5QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0Q7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxFQUFPO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsVUFBbUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFVO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7YUFDMUI7WUFDRCxJQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBY08sUUFBUSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM3RCxDQUFDLEVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsQ0FDekQsQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQixJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO2lCQUN6RCxJQUFJLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUM7aUJBQzNELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FDM0QsQ0FBQyxFQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUNqRCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQXNCLEVBQUUsRUFBRTtZQUN4QyxNQUFNLFdBQVcsR0FBRyxhQUFhLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsU0FBUyxDQUFDLGlCQUFpQixFQUMzQixJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQzthQUN6RCxJQUFJLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDbEUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNuQixDQUFDO0lBQ0osQ0FBQzs7bUhBalFVLHFCQUFxQjt1R0FBckIscUJBQXFCLG9vQkFoQnJCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLDBDQUEwQztZQUMxQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1lBQ3BELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixpREF1RGdCLHVCQUF1QixnRUFNdkIscUJBQXFCLHFRQU14QixxQkFBcUIsZ0RDcEhyQywrdkNBOENBLHl5RERvUmEsb0JBQW9CLDZOQTJDcEIsMEJBQTBCOzRGQW5UMUIscUJBQXFCO2tCQXBCakMsU0FBUzsrQkFDRSxrQ0FBa0MsYUFHakM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsMENBQTBDOzRCQUMxQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsZ0JBQWdCO3dCQUN2Qiw4QkFBOEIsRUFBRSxrQkFBa0I7d0JBQ2xELCtCQUErQixFQUFFLG1CQUFtQjt3QkFDcEQsaUNBQWlDLEVBQUUsVUFBVTtxQkFDOUM7bUxBUW1CLE9BQU87c0JBQTFCLEtBQUs7dUJBQUMsSUFBSTtnQkFLSyxLQUFLO3NCQUFwQixLQUFLO2dCQUtVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsZUFBZTtzQkFBOUIsS0FBSztnQkFLVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtXLFlBQVk7c0JBQTVCLE1BQU07Z0JBTUMsTUFBTTtzQkFEYixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFPdkQsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBT3JELFdBQVc7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCO2dCQU1lLFFBQVE7c0JBQXpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHaEMsZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQXdCeEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLG9CQUFvQjtnQkFRbEMsV0FBVztzQkFEVixZQUFZO3VCQUFDLGtCQUFrQjtnQkFXaEMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsd0JBQXdCOztBQThKeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUpqQztRQUttQixhQUFRLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7S0FpQzdCO0lBOUJRLFVBQVUsQ0FBQyxLQUFnQjtRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFHTSxXQUFXLENBQUMsS0FBZ0I7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBR00sTUFBTSxDQUFDLEtBQWdCO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFnQjtRQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBc0I7UUFDNUMsK0RBQStEO1FBQy9ELE9BQU8sS0FBSyxDQUFDLFlBQVk7WUFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUN2QyxDQUFDOztrSEFsQ1Usb0JBQW9CO3NHQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUU7aUJBQ3JEOzhCQUVrQixRQUFRO3NCQUF4QixNQUFNO2dCQUlBLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU83QixXQUFXO3NCQURqQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPOUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUEyQmxDLE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFDVSxRQUFtQixFQUNuQixVQUFtQztRQURuQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQXlCO0lBQzFDLENBQUM7SUFFSixJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQzs7d0hBWlUsMEJBQTBCOzRHQUExQiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFOdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0VBQWtFO29CQUM1RSxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGdDQUFnQztxQkFDeEM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYW9FcnJvclRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24tY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhb0ZpbGVJbnRsIH0gZnJvbSAnLi9maWxlLWludGwnO1xuaW1wb3J0IHsgQmFvRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtcHJldmlldy5jb21wb25lbnQnO1xuXG4vKipcbiAqIFVuaXF1ZSBudW1iZXIgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgSURcbiAqL1xubGV0IGZpbGVJbnB1dFVuaXF1ZUlkID0gMDtcbmxldCBmaWxlVGV4dFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFvLWZpbGUtaW5wdXQsIFtiYW8tZmlsZS1pbnB1dF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJhb0ZpbGVJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLWZpbGUtaW5wdXQnLFxuICAgICdbY2xhc3MuYmFvLWZpbGUtbGFiZWwtc21hbGxdJzogJ3NpemUgPT09IFwic21hbGxcIicsXG4gICAgJ1tjbGFzcy5iYW8tZmlsZS1sYWJlbC1tZWRpdW1dJzogJ3NpemUgPT09IFwibWVkaXVtXCInLFxuICAgICdbY2xhc3MuYmFvLWZpbGUtaW5wdXQtZGlzYWJsZWRdJzogJ2Rpc2FibGVkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0ZpbGVJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkXG4gICAqL1xuICBASW5wdXQoJ2lkJykgcHVibGljIGlucHV0SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExhYmVsIG9mIGZpZWxkIHRvIGJlIGRpc3BsYXllZCBhYm92ZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIGZpbGUgaW5wdXQgbGFiZWxcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogTWF4aW11bSBzaXplIGFjY2VwdGVkIGZvciB1cGxvYWRlZCBmaWxlc1xuICAgKi9cbiAgQElucHV0KCkgcHVibGljIG1heGltYWxGaWxlU2l6ZSA9IC0xO1xuXG4gIC8qKlxuICAgKiBBY2NlcHRlZCB0eXBlcyBvZiBmaWxlc1xuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGFjY2VwdGVkTUlNRVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJcyBmaWVsZCByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJcyBmaWVsZCBkaXNhYmxlZFxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGaWxlIHNlbGVjdGVkIHRvIGJlIHVwbG9hZGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHVwbG9hZGVkRmlsZTogRXZlbnRFbWl0dGVyPEZpbGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIHVwbG9hZGVkIHNvIGZhclxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihCYW9GaWxlUHJldmlld0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIF9maWxlczogUXVlcnlMaXN0PEJhb0ZpbGVQcmV2aWV3Q29tcG9uZW50PjtcblxuICAvKipcbiAgICogRm9ybSBlcnJvcnMgd2hlbiBjb21wb25lbnQgaXMgdXNlZCBpbiBhIGZvcm1cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oQmFvRXJyb3JUZXh0Q29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX2Vycm9yRm9ybTogUXVlcnlMaXN0PEJhb0Vycm9yVGV4dENvbXBvbmVudD47XG5cbiAgLyoqXG4gICAqIEVycm9yIHRleHRzXG4gICAqL1xuICBAVmlld0NoaWxkcmVuKEJhb0Vycm9yVGV4dENvbXBvbmVudClcbiAgcHJpdmF0ZSBfZXJyb3JUZXh0czogUXVlcnlMaXN0PEJhb0Vycm9yVGV4dENvbXBvbmVudD47XG5cbiAgLyoqXG4gICAqIEZpbGUgaW5wdXQgdGhhdCB0cmlnZ2VycyB1cGxvYWRpbmcgd2hlbiBjbGlja2VkXG4gICAqL1xuICBAVmlld0NoaWxkKCd1cGxvYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHVwbG9hZGVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3B6b25lJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgZHJvcHpvbmVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwdWJsaWMgaW5zZXJ0RGVmYXVsdEluc3RydWN0aW9ucyA9IGZhbHNlO1xuICBwdWJsaWMgaXNGaWxlVG9vQmlnID0gZmFsc2U7XG4gIHB1YmxpYyBpc0ZpbGVUeXBlSW52YWxpZCA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogRmlsZVtdO1xuICBwcml2YXRlIF9pbnRsQ2hhbmdlczogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9oZWxwZXJUZXh0SWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW50bDogQmFvRmlsZUludGwsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuX2ludGxDaGFuZ2VzID0gaW50bC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLmVudGVyJylcbiAgZW50ZXJLZXlFdmVudCgpIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5pbnB1dElkKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlucHV0SWQpLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLnRhYicpXG4gIHRhYktleUV2ZW50KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkID09PSB0aGlzLmlucHV0SWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgIHRoaXMuZHJvcHpvbmVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdkcm9wem9uZS1mb2N1cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwLnNoaWZ0LnRhYicpXG4gIHNoaWZ0VGFiS2V5RXZlbnQoKSB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuaW5wdXRJZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgdGhpcy5kcm9wem9uZUVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2Ryb3B6b25lLWZvY3VzJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Vycm9yRm9ybS5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldEVycm9yVGV4dHNBdHRyaWJ1dGUoKSk7XG4gICAgaWYgKCF0aGlzLmlucHV0SWQpIHtcbiAgICAgIHRoaXMuaW5wdXRJZCA9IGBmaWxlLWlucHV0LSR7ZmlsZUlucHV0VW5pcXVlSWQrK31gO1xuICAgIH1cbiAgICAvLyBJZiBubyBjb250ZW50IHdhcyBhZGRlZCBmb3IgZHJvcHpvbmUgaW5zdHJ1Y3Rpb25zLCBhZGQgZGVmYXVsdCB0ZXh0LlxuICAgIGNvbnN0IGRyb3B6b25lRWxlbWVudCA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKS5maW5kKFxuICAgICAgKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwuY2xhc3NOYW1lID09PSAnZmlsZS1kcm9wLXpvbmUnXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAhQXJyYXkuZnJvbShkcm9wem9uZUVsZW1lbnQuY2hpbGRyZW4pLmZpbmQoXG4gICAgICAgIGVsID0+IGVsLmxvY2FsTmFtZSA9PT0gJ2Jhby1maWxlLWRyb3B6b25lLWluc3RydWN0aW9ucydcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuaW5zZXJ0RGVmYXVsdEluc3RydWN0aW9ucyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2V0RGVzY3JpYmVkQnlBdHRyaWJ1dGUoKTtcbiAgICB0aGlzLl9maWxlcy5jaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgIChmaWxlczogUXVlcnlMaXN0PEJhb0ZpbGVQcmV2aWV3Q29tcG9uZW50PikgPT4ge1xuICAgICAgICBjb25zdCBmaWxlc0xpc3Q6IEZpbGVbXSA9IGZpbGVzLm1hcChcbiAgICAgICAgICAoZWw6IEJhb0ZpbGVQcmV2aWV3Q29tcG9uZW50KSA9PiBlbC5maWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoZmlsZXNMaXN0KTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9lcnJvclRleHRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2V0RXJyb3JUZXh0c0F0dHJpYnV0ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnRsQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gb2JqO1xuICB9XG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuICAvKipcbiAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XG4gIH1cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkRmlsZShmaWxlOiBGaWxlKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRmlsZVR5cGVJbnZhbGlkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzRmlsZVRvb0JpZyA9IGZhbHNlO1xuICAgICAgdGhpcy51cGxvYWRlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICBpZiAodGhpcy5tYXhpbWFsRmlsZVNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4aW1hbEZpbGVTaXplKSB7XG4gICAgICAgIHRoaXMuaXNGaWxlVG9vQmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hY2NlcHRlZE1JTUVUeXBlcy5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMuYWNjZXB0ZWRNSU1FVHlwZXMuaW5kZXhPZihmaWxlLnR5cGUpIDwgMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaXNGaWxlVHlwZUludmFsaWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzRmlsZVRvb0JpZyAmJiAhdGhpcy5pc0ZpbGVUeXBlSW52YWxpZCkge1xuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZS5lbWl0KGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcmVnaXN0ZXJPbkNoYW5nZSBmdW5jdGlvbiBzbyB0aGUgY29tcG9uZW50IGNhbiBjYWxsIGl0IHdoZW5ldmVyIGl0IHdhbnRzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHB1YmxpYyBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJlZ2lzdGVyT25Ub3VjaGVkIGZ1bmN0aW9uIHNvIHRoZSBjb21wb25lbnQgY2FuIGNhbGwgaXQgd2hlbmV2ZXIgaXQgd2FudHMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyBwcm9wYWdhdGVUb3VjaGVkID0gKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogRmlsZVtdKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERlc2NyaWJlZEJ5QXR0cmlidXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhlbHBlclRleHQgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbikuZmluZChcbiAgICAgIChlbDogSFRNTEVsZW1lbnQpID0+IGVsLmxvY2FsTmFtZSA9PT0gJ2Jhby1ndWlkaW5nLXRleHQnXG4gICAgKS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICBpZiAoaGVscGVyVGV4dCkge1xuICAgICAgdGhpcy5faGVscGVyVGV4dElkID0gYGJhby1ndWlkaW5nLXRleHQtJHtmaWxlVGV4dFVuaXF1ZUlkKyt9YDtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGhlbHBlclRleHQsICdpZCcsIHRoaXMuX2hlbHBlclRleHRJZCk7XG4gICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbilcbiAgICAgICAgLmZpbmQoKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwuY2xhc3NOYW1lID09ICdmaWxlLWRyb3Atem9uZScpXG4gICAgICAgIC5jaGlsZHJlbi5pdGVtKDEpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIGlucHV0RWxlbWVudCxcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknLFxuICAgICAgICB0aGlzLl9oZWxwZXJUZXh0SWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvclRleHRzQXR0cmlidXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRleHRzSWRzID0gW107XG4gICAgY29uc3QgZXJyb3JzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihcbiAgICAgIChlbDogSFRNTEVsZW1lbnQpID0+IGVsLmxvY2FsTmFtZSA9PSAnYmFvLWVycm9yJ1xuICAgICk7XG4gICAgZXJyb3JzLmZvckVhY2goKGVycm9yVGV4dDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yVGV4dElkID0gYGJhby1lcnJvci0ke2ZpbGVUZXh0VW5pcXVlSWQrK31gO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIGVycm9yVGV4dC5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgZXJyb3JUZXh0SWRcbiAgICAgICk7XG4gICAgICB0ZXh0c0lkcy5wdXNoKGVycm9yVGV4dElkKTtcbiAgICB9KTtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbilcbiAgICAgIC5maW5kKChlbDogSFRNTEVsZW1lbnQpID0+IGVsLmNsYXNzTGlzdC5jb250YWlucygnZmlsZS1kcm9wLXpvbmUnKSlcbiAgICAgIC5jaGlsZHJlbi5pdGVtKDEpO1xuICAgIGlmICh0aGlzLl9oZWxwZXJUZXh0SWQpIHtcbiAgICAgIHRleHRzSWRzLnVuc2hpZnQodGhpcy5faGVscGVyVGV4dElkKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICBpbnB1dEVsZW1lbnQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieScsXG4gICAgICB0ZXh0c0lkcy5qb2luKCcgJylcbiAgICApO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tiYW9GaWxlRHJvcF0nLFxuICBob3N0OiB7ICdbY2xhc3MuZHJhZy1vdmVyXSc6ICdfaXNEcmFnT3ZlciA9PSB0cnVlJyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0ZpbGVEcm9wRGlyZWN0aXZlIHtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWxlRHJvcDogRXZlbnRFbWl0dGVyPEZpbGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICBwcml2YXRlIF9pc0RyYWdPdmVyID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2ZW50QW5kU3RvcChldmVudCk7XG4gICAgdGhpcy5faXNEcmFnT3ZlciA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucHJldmVudEFuZFN0b3AoZXZlbnQpO1xuICAgIHRoaXMuX2lzRHJhZ092ZXIgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZlbnRBbmRTdG9wKGV2ZW50KTtcbiAgICB0aGlzLl9pc0RyYWdPdmVyID0gZmFsc2U7XG4gICAgY29uc3QgdHJhbnNmZXIgPSB0aGlzLmdldERhdGFUcmFuc2ZlcihldmVudCk7XG4gICAgdGhpcy5maWxlRHJvcC5lbWl0KHRyYW5zZmVyLmZpbGVzWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJldmVudEFuZFN0b3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGFUcmFuc2ZlcihldmVudDogRHJhZ0V2ZW50IHwgYW55KTogRGF0YVRyYW5zZmVyIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZXZlbnQuZGF0YVRyYW5zZmVyXG4gICAgICA/IGV2ZW50LmRhdGFUcmFuc2ZlclxuICAgICAgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdiYW8tZmlsZS1kcm9wem9uZS1pbnN0cnVjdGlvbnMsIFtiYW8tZmlsZS1kcm9wem9uZS1pbnN0cnVjdGlvbnNdJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLWZpbGUtZHJvcHpvbmUtaW5zdHJ1Y3Rpb25zJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0ZpbGVEcm9wem9uZUludHJ1Y3Rpb25zIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge31cblxuICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgfVxufVxuIiwiPGxhYmVsIGJhby1sYWJlbCBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZm9yXT1cImlucHV0SWRcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG48bmctY29udGVudCBzZWxlY3Q9XCJiYW8tZ3VpZGluZy10ZXh0XCI+PC9uZy1jb250ZW50PlxuPGRpdlxuICBiYW9GaWxlRHJvcFxuICBjbGFzcz1cImZpbGUtZHJvcC16b25lXCJcbiAgKGZpbGVEcm9wKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICNkcm9wem9uZVxuPlxuICA8YnV0dG9uXG4gICAgYmFvLWJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGRpc3BsYXlUeXBlPVwidXRpbGl0eVwiXG4gICAgbGV2ZWw9XCJzZWNvbmRhcnlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInVwbG9hZGVyLmNsaWNrKClcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgdGFiSW5kZXg9XCItMVwiXG4gID5cbiAgICB7eyBpbnRsLmRyb3B6b25lQnV0dG9uTGFiZWwgfX1cbiAgPC9idXR0b24+XG4gIDxpbnB1dFxuICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQudGFyZ2V0LmZpbGVzWzBdKVwiXG4gICAgI3VwbG9hZGVyXG4gIC8+XG4gIDxuZy1jb250YWluZXJcbiAgICA+PGRpdiAjcmVmPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYmFvLWZpbGUtZHJvcHpvbmUtaW5zdHJ1Y3Rpb25zXCI+PC9uZy1jb250ZW50PjwvZGl2XG4gID48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlZi5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMFwiXG4gICAgPjxiYW8tZmlsZS1kcm9wem9uZS1pbnN0cnVjdGlvbnM+e3tcbiAgICAgIGludGwuZGVmYXVsdERyb3B6b25lSW5zdHJ1Y3Rpb25zXG4gICAgfX08L2Jhby1maWxlLWRyb3B6b25lLWluc3RydWN0aW9ucz48L25nLWNvbnRhaW5lclxuICA+XG48L2Rpdj5cbjxiYW8tZXJyb3IgKm5nSWY9XCJpc0ZpbGVUb29CaWdcIj5cbiAge3sgaW50bC5maWxlVG9vQmlnRXJyb3JNZXNzYWdlIH19XG48L2Jhby1lcnJvcj5cbjxiYW8tZXJyb3IgKm5nSWY9XCJpc0ZpbGVUeXBlSW52YWxpZFwiPlxuICB7eyBpbnRsLmludmFsaWRGaWxlVHlwZUVycm9yTWVzc2FnZSB9fVxuPC9iYW8tZXJyb3I+XG48bmctY29udGVudCBzZWxlY3Q9XCJiYW8tZXJyb3JcIj48L25nLWNvbnRlbnQ+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
@@ -0,0 +1,65 @@
1
+ /*
2
+ * Copyright (c) 2023 Ville de Montreal. All rights reserved.
3
+ * Licensed under the MIT license.
4
+ * See LICENSE file in the project root for full license information.
5
+ */
6
+ import { Injectable, Optional, SkipSelf } from '@angular/core';
7
+ import { Subject } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * To modify the labels and text displayed, create a new instance of BaoFileIntl and
11
+ * include it in a custom provider
12
+ */
13
+ export class BaoFileIntl {
14
+ constructor() {
15
+ /**
16
+ * Stream to emit from when labels are changed. Use this to notify components when the labels have
17
+ * changed after initialization.
18
+ */
19
+ this.changes = new Subject();
20
+ /** The label for button in dropzone */
21
+ this.dropzoneButtonLabel = 'Parcourir';
22
+ /** The default dropzone instructions */
23
+ this.defaultDropzoneInstructions = 'ou déposer votre fichier ici';
24
+ /** Error message displayed when uploaded file is too large */
25
+ this.fileTooBigErrorMessage = 'La taille de ce fichier est trop grande';
26
+ /** Error message displayed when uploaded file has an invalid type */
27
+ this.invalidFileTypeErrorMessage = "Ce format de fichier n'est pas autorisé";
28
+ }
29
+ }
30
+ BaoFileIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
31
+ BaoFileIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntl, providedIn: 'root' });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntl, decorators: [{
33
+ type: Injectable,
34
+ args: [{ providedIn: 'root' }]
35
+ }] });
36
+ export class BaoFileIntlEnglish extends BaoFileIntl {
37
+ constructor() {
38
+ super(...arguments);
39
+ /** The label for button in dropzone */
40
+ this.dropzoneButtonLabel = 'Browse';
41
+ /** The default dropzone instructions */
42
+ this.defaultDropzoneInstructions = 'or drop your file here';
43
+ /** Error message displayed when uploaded file is too large */
44
+ this.fileTooBigErrorMessage = 'The size of this file is too large';
45
+ /** Error message displayed when uploaded file has an invalid type */
46
+ this.invalidFileTypeErrorMessage = 'The format of this file is unauthorized';
47
+ }
48
+ }
49
+ BaoFileIntlEnglish.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntlEnglish, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
50
+ BaoFileIntlEnglish.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntlEnglish });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFileIntlEnglish, decorators: [{
52
+ type: Injectable
53
+ }] });
54
+ /** @docs-private */
55
+ export function BAO_FILE_INTL_PROVIDER_FACTORY(parentIntl) {
56
+ return parentIntl || new BaoFileIntl();
57
+ }
58
+ /** @docs-private */
59
+ export const BAO_FILE_INTL_PROVIDER = {
60
+ // If there is already an BaoFileIntl available, use that. Otherwise, provide a new one.
61
+ provide: BaoFileIntl,
62
+ deps: [[new Optional(), new SkipSelf(), BaoFileIntl]],
63
+ useFactory: BAO_FILE_INTL_PROVIDER_FACTORY
64
+ };
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnRsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2ZpbGUvZmlsZS1pbnRsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFL0I7OztHQUdHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFEeEI7UUFFRTs7O1dBR0c7UUFDTSxZQUFPLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEQsdUNBQXVDO1FBQ3ZDLHdCQUFtQixHQUFHLFdBQVcsQ0FBQztRQUVsQyx3Q0FBd0M7UUFDeEMsZ0NBQTJCLEdBQUcsOEJBQThCLENBQUM7UUFFN0QsOERBQThEO1FBQzlELDJCQUFzQixHQUFHLHlDQUF5QyxDQUFDO1FBRW5FLHFFQUFxRTtRQUNyRSxnQ0FBMkIsR0FBRyx5Q0FBeUMsQ0FBQztLQUN6RTs7eUdBbEJZLFdBQVc7NkdBQVgsV0FBVyxjQURFLE1BQU07NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXNCbEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFEbkQ7O1FBRUUsdUNBQXVDO1FBQ3ZDLHdCQUFtQixHQUFHLFFBQVEsQ0FBQztRQUUvQix3Q0FBd0M7UUFDeEMsZ0NBQTJCLEdBQUcsd0JBQXdCLENBQUM7UUFFdkQsOERBQThEO1FBQzlELDJCQUFzQixHQUFHLG9DQUFvQyxDQUFDO1FBRTlELHFFQUFxRTtRQUNyRSxnQ0FBMkIsR0FBRyx5Q0FBeUMsQ0FBQztLQUN6RTs7Z0hBWlksa0JBQWtCO29IQUFsQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7QUFlWCxvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLDhCQUE4QixDQUFDLFVBQXVCO0lBQ3BFLE9BQU8sVUFBVSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVELG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyx3RkFBd0Y7SUFDeEYsT0FBTyxFQUFFLFdBQVc7SUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsVUFBVSxFQUFFLDhCQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFRvIG1vZGlmeSB0aGUgbGFiZWxzIGFuZCB0ZXh0IGRpc3BsYXllZCwgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEJhb0ZpbGVJbnRsIGFuZFxuICogaW5jbHVkZSBpdCBpbiBhIGN1c3RvbSBwcm92aWRlclxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEJhb0ZpbGVJbnRsIHtcbiAgLyoqXG4gICAqIFN0cmVhbSB0byBlbWl0IGZyb20gd2hlbiBsYWJlbHMgYXJlIGNoYW5nZWQuIFVzZSB0aGlzIHRvIG5vdGlmeSBjb21wb25lbnRzIHdoZW4gdGhlIGxhYmVscyBoYXZlXG4gICAqIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogVGhlIGxhYmVsIGZvciBidXR0b24gaW4gZHJvcHpvbmUgKi9cbiAgZHJvcHpvbmVCdXR0b25MYWJlbCA9ICdQYXJjb3VyaXInO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBkcm9wem9uZSBpbnN0cnVjdGlvbnMgKi9cbiAgZGVmYXVsdERyb3B6b25lSW5zdHJ1Y3Rpb25zID0gJ291IGTDqXBvc2VyIHZvdHJlIGZpY2hpZXIgaWNpJztcblxuICAvKiogRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB1cGxvYWRlZCBmaWxlIGlzIHRvbyBsYXJnZSAqL1xuICBmaWxlVG9vQmlnRXJyb3JNZXNzYWdlID0gJ0xhIHRhaWxsZSBkZSBjZSBmaWNoaWVyIGVzdCB0cm9wIGdyYW5kZSc7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdXBsb2FkZWQgZmlsZSBoYXMgYW4gaW52YWxpZCB0eXBlICovXG4gIGludmFsaWRGaWxlVHlwZUVycm9yTWVzc2FnZSA9IFwiQ2UgZm9ybWF0IGRlIGZpY2hpZXIgbidlc3QgcGFzIGF1dG9yaXPDqVwiO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFvRmlsZUludGxFbmdsaXNoIGV4dGVuZHMgQmFvRmlsZUludGwge1xuICAvKiogVGhlIGxhYmVsIGZvciBidXR0b24gaW4gZHJvcHpvbmUgKi9cbiAgZHJvcHpvbmVCdXR0b25MYWJlbCA9ICdCcm93c2UnO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBkcm9wem9uZSBpbnN0cnVjdGlvbnMgKi9cbiAgZGVmYXVsdERyb3B6b25lSW5zdHJ1Y3Rpb25zID0gJ29yIGRyb3AgeW91ciBmaWxlIGhlcmUnO1xuXG4gIC8qKiBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIHVwbG9hZGVkIGZpbGUgaXMgdG9vIGxhcmdlICovXG4gIGZpbGVUb29CaWdFcnJvck1lc3NhZ2UgPSAnVGhlIHNpemUgb2YgdGhpcyBmaWxlIGlzIHRvbyBsYXJnZSc7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdXBsb2FkZWQgZmlsZSBoYXMgYW4gaW52YWxpZCB0eXBlICovXG4gIGludmFsaWRGaWxlVHlwZUVycm9yTWVzc2FnZSA9ICdUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyB1bmF1dGhvcml6ZWQnO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJBT19GSUxFX0lOVExfUFJPVklERVJfRkFDVE9SWShwYXJlbnRJbnRsOiBCYW9GaWxlSW50bCkge1xuICByZXR1cm4gcGFyZW50SW50bCB8fCBuZXcgQmFvRmlsZUludGwoKTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBCQU9fRklMRV9JTlRMX1BST1ZJREVSID0ge1xuICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIEJhb0ZpbGVJbnRsIGF2YWlsYWJsZSwgdXNlIHRoYXQuIE90aGVyd2lzZSwgcHJvdmlkZSBhIG5ldyBvbmUuXG4gIHByb3ZpZGU6IEJhb0ZpbGVJbnRsLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQmFvRmlsZUludGxdXSxcbiAgdXNlRmFjdG9yeTogQkFPX0ZJTEVfSU5UTF9QUk9WSURFUl9GQUNUT1JZXG59O1xuIl19
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright (c) 2023 Ville de Montreal. All rights reserved.
3
+ * Licensed under the MIT license.
4
+ * See LICENSE file in the project root for full license information.
5
+ */
6
+ import { Component, Input, ViewEncapsulation } from '@angular/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../icon/icon.component";
9
+ import * as i2 from "@angular/common";
10
+ const KILO_THRESHOLD = 1000;
11
+ const MEGA_THRESHOLD = 1000000;
12
+ export class BaoFilePreviewComponent {
13
+ constructor(elementRef, renderer) {
14
+ this.elementRef = elementRef;
15
+ this.renderer = renderer;
16
+ /**
17
+ * Is file loading
18
+ */
19
+ this.isLoading = false;
20
+ /**
21
+ * True if projected content has no icon and file does not have a thumbnail.
22
+ */
23
+ this.insertGenericIcon = false;
24
+ this.thumbnailURL = '';
25
+ }
26
+ get nativeElement() {
27
+ return this.elementRef.nativeElement;
28
+ }
29
+ get fileSize() {
30
+ return this.formatSize(this.file.size);
31
+ }
32
+ ngAfterContentInit() {
33
+ this.getThumbnail();
34
+ this.setIcon();
35
+ }
36
+ setIcon() {
37
+ // If no icon is in the projected content, generic icon is added
38
+ const contentIcon = Array.from(this.nativeElement.children.item(0).children).find((el) => el.localName === 'bao-icon');
39
+ if (!contentIcon) {
40
+ this.insertGenericIcon = true;
41
+ }
42
+ else {
43
+ this.renderer.addClass(contentIcon, 'bao-file-media');
44
+ }
45
+ }
46
+ getThumbnail() {
47
+ if (this.file &&
48
+ (this.file.type === 'image/png' || this.file.type === 'image/jpeg')) {
49
+ const reader = new FileReader();
50
+ reader.onload = (event) => {
51
+ this.thumbnailURL = event.target.result;
52
+ };
53
+ reader.onerror = () => {
54
+ this.thumbnailURL = '';
55
+ };
56
+ reader.readAsDataURL(this.file);
57
+ }
58
+ }
59
+ formatSize(size) {
60
+ if (size >= KILO_THRESHOLD && size / KILO_THRESHOLD < KILO_THRESHOLD) {
61
+ return this.getSizeAndUnit(size, KILO_THRESHOLD, 'Ko');
62
+ }
63
+ const sizeDividedByKoMultiplicator = size / KILO_THRESHOLD;
64
+ if (sizeDividedByKoMultiplicator >= KILO_THRESHOLD) {
65
+ const toFixed = sizeDividedByKoMultiplicator > 10 ? 0 : 1;
66
+ return this.getSizeAndUnit(size, MEGA_THRESHOLD, 'Mo', toFixed);
67
+ }
68
+ return `${size} octets`;
69
+ }
70
+ getSizeAndUnit(size, multiplicator, unit, toFixed = 0) {
71
+ return `${(size / multiplicator).toFixed(toFixed)} ${unit}`;
72
+ }
73
+ }
74
+ BaoFilePreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFilePreviewComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
75
+ BaoFilePreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoFilePreviewComponent, selector: "bao-file-preview, [bao-file-preview]", inputs: { file: "file", isLoading: "isLoading" }, host: { classAttribute: "bao-file-preview" }, ngImport: i0, template: "<div class=\"bao-file-info\">\n <ng-content select=\"bao-icon\"></ng-content>\n <bao-icon\n *ngIf=\"insertGenericIcon && !thumbnailURL\"\n class=\"bao-file-media\"\n svgIcon=\"icon-file\"\n >\n </bao-icon>\n <ng-container *ngIf=\"thumbnailURL && !isLoading\">\n <img\n class=\"bao-file-media\"\n [src]=\"thumbnailURL\"\n width=\"40px\"\n height=\"40px\"\n />\n </ng-container>\n <div class=\"bao-file-text\">\n <div class=\"bao-file-name\">{{ file.name }}</div>\n <div class=\"bao-file-size\">{{ fileSize }}</div>\n </div>\n</div>\n<ng-container *ngIf=\"!isLoading\">\n <ng-content select=\"button[bao-button]\"></ng-content>\n <ng-content select=\"baoDropdownTriggerFor\"></ng-content>\n</ng-container>\n<bao-icon\n *ngIf=\"isLoading\"\n class=\"loading-spinner\"\n svgIcon=\"icon-spinner\"\n title=\"chargement\"\n></bao-icon>\n", styles: [".bao-file-preview{display:flex;align-items:center;justify-content:space-between;padding-top:.625rem;padding-bottom:.625rem;list-style-type:none}.bao-file-preview:first-child{margin-top:1rem}.bao-file-preview>.bao-file-info{display:flex;align-items:center}.bao-file-preview>.bao-file-info>.bao-icon{color:#adb2bd;flex-shrink:0}.bao-file-preview>.bao-file-info>.bao-file-media{margin-right:1rem}.bao-file-preview>.bao-file-info>.bao-file-text{display:inline-flex;flex-direction:column;margin-right:1rem}.bao-file-preview>.bao-file-info>.bao-file-text>.bao-file-name{overflow:hidden;font-weight:700;font-size:.875rem;line-height:1.25rem;color:#212529}.bao-file-preview>.bao-file-info>.bao-file-text>.bao-file-size{font-weight:400;font-size:.75rem;line-height:1rem;color:#637381}.bao-file-preview .loading-spinner{color:#097d6c}.bao-file-preview .bao-dropdown-menu-container{position:absolute;margin-left:auto}\n"], components: [{ type: i1.BaoIconComponent, selector: "bao-icon", inputs: ["color", "size", "svgIcon", "title"], exportAs: ["baoIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoFilePreviewComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'bao-file-preview, [bao-file-preview]', encapsulation: ViewEncapsulation.None, host: {
79
+ class: 'bao-file-preview'
80
+ }, template: "<div class=\"bao-file-info\">\n <ng-content select=\"bao-icon\"></ng-content>\n <bao-icon\n *ngIf=\"insertGenericIcon && !thumbnailURL\"\n class=\"bao-file-media\"\n svgIcon=\"icon-file\"\n >\n </bao-icon>\n <ng-container *ngIf=\"thumbnailURL && !isLoading\">\n <img\n class=\"bao-file-media\"\n [src]=\"thumbnailURL\"\n width=\"40px\"\n height=\"40px\"\n />\n </ng-container>\n <div class=\"bao-file-text\">\n <div class=\"bao-file-name\">{{ file.name }}</div>\n <div class=\"bao-file-size\">{{ fileSize }}</div>\n </div>\n</div>\n<ng-container *ngIf=\"!isLoading\">\n <ng-content select=\"button[bao-button]\"></ng-content>\n <ng-content select=\"baoDropdownTriggerFor\"></ng-content>\n</ng-container>\n<bao-icon\n *ngIf=\"isLoading\"\n class=\"loading-spinner\"\n svgIcon=\"icon-spinner\"\n title=\"chargement\"\n></bao-icon>\n", styles: [".bao-file-preview{display:flex;align-items:center;justify-content:space-between;padding-top:.625rem;padding-bottom:.625rem;list-style-type:none}.bao-file-preview:first-child{margin-top:1rem}.bao-file-preview>.bao-file-info{display:flex;align-items:center}.bao-file-preview>.bao-file-info>.bao-icon{color:#adb2bd;flex-shrink:0}.bao-file-preview>.bao-file-info>.bao-file-media{margin-right:1rem}.bao-file-preview>.bao-file-info>.bao-file-text{display:inline-flex;flex-direction:column;margin-right:1rem}.bao-file-preview>.bao-file-info>.bao-file-text>.bao-file-name{overflow:hidden;font-weight:700;font-size:.875rem;line-height:1.25rem;color:#212529}.bao-file-preview>.bao-file-info>.bao-file-text>.bao-file-size{font-weight:400;font-size:.75rem;line-height:1rem;color:#637381}.bao-file-preview .loading-spinner{color:#097d6c}.bao-file-preview .bao-dropdown-menu-container{position:absolute;margin-left:auto}\n"] }]
81
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { file: [{
82
+ type: Input
83
+ }], isLoading: [{
84
+ type: Input
85
+ }] } });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9maWxlL2ZpbGUtcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZmlsZS9maWxlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQUVMLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7OztBQUV2QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBVy9CLE1BQU0sT0FBTyx1QkFBdUI7SUFrQmxDLFlBQ1UsVUFBbUMsRUFDbkMsUUFBbUI7UUFEbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWQ3Qjs7V0FFRztRQUNhLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDSSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsaUJBQVksR0FBRyxFQUFFLENBQUM7SUFLdEIsQ0FBQztJQUVKLElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sT0FBTztRQUNiLGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUM3QyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0I7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFDRSxJQUFJLENBQUMsSUFBSTtZQUNULENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUNuRTtZQUNBLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzFDLENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWTtRQUM3QixJQUFJLElBQUksSUFBSSxjQUFjLElBQUksSUFBSSxHQUFHLGNBQWMsR0FBRyxjQUFjLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEQ7UUFDRCxNQUFNLDRCQUE0QixHQUFHLElBQUksR0FBRyxjQUFjLENBQUM7UUFDM0QsSUFBSSw0QkFBNEIsSUFBSSxjQUFjLEVBQUU7WUFDbEQsTUFBTSxPQUFPLEdBQUcsNEJBQTRCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWMsQ0FDcEIsSUFBWSxFQUNaLGFBQXFCLEVBQ3JCLElBQVksRUFDWixPQUFPLEdBQUcsQ0FBQztRQUVYLE9BQU8sR0FBRyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7cUhBcEZVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLDRLQzNCcEMsdTNCQStCQTs0RkRKYSx1QkFBdUI7a0JBVG5DLFNBQVM7K0JBQ0Usc0NBQXNDLGlCQUdqQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxrQkFBa0I7cUJBQzFCO3lIQU1lLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsU0FBUztzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBLSUxPX1RIUkVTSE9MRCA9IDEwMDA7XG5jb25zdCBNRUdBX1RIUkVTSE9MRCA9IDEwMDAwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1maWxlLXByZXZpZXcsIFtiYW8tZmlsZS1wcmV2aWV3XScsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlLXByZXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLWZpbGUtcHJldmlldydcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9GaWxlUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAvKipcbiAgICogVXBsb2FkZWQgZmlsZSB0byBkaXNwbGF5IGluIGxpc3QuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZmlsZTogRmlsZTtcblxuICAvKipcbiAgICogSXMgZmlsZSBsb2FkaW5nXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgcHJvamVjdGVkIGNvbnRlbnQgaGFzIG5vIGljb24gYW5kIGZpbGUgZG9lcyBub3QgaGF2ZSBhIHRodW1ibmFpbC5cbiAgICovXG4gIHB1YmxpYyBpbnNlcnRHZW5lcmljSWNvbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyB0aHVtYm5haWxVUkwgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGdldCBmaWxlU2l6ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdFNpemUodGhpcy5maWxlLnNpemUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0VGh1bWJuYWlsKCk7XG4gICAgdGhpcy5zZXRJY29uKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEljb24oKSB7XG4gICAgLy8gSWYgbm8gaWNvbiBpcyBpbiB0aGUgcHJvamVjdGVkIGNvbnRlbnQsIGdlbmVyaWMgaWNvbiBpcyBhZGRlZFxuICAgIGNvbnN0IGNvbnRlbnRJY29uID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5pdGVtKDApLmNoaWxkcmVuXG4gICAgKS5maW5kKChlbDogSFRNTEVsZW1lbnQpID0+IGVsLmxvY2FsTmFtZSA9PT0gJ2Jhby1pY29uJyk7XG4gICAgaWYgKCFjb250ZW50SWNvbikge1xuICAgICAgdGhpcy5pbnNlcnRHZW5lcmljSWNvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoY29udGVudEljb24sICdiYW8tZmlsZS1tZWRpYScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGh1bWJuYWlsKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsZSAmJlxuICAgICAgKHRoaXMuZmlsZS50eXBlID09PSAnaW1hZ2UvcG5nJyB8fCB0aGlzLmZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZWcnKVxuICAgICkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRodW1ibmFpbFVSTCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy50aHVtYm5haWxVUkwgPSAnJztcbiAgICAgIH07XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh0aGlzLmZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2l6ZShzaXplOiBudW1iZXIpIHtcbiAgICBpZiAoc2l6ZSA+PSBLSUxPX1RIUkVTSE9MRCAmJiBzaXplIC8gS0lMT19USFJFU0hPTEQgPCBLSUxPX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZUFuZFVuaXQoc2l6ZSwgS0lMT19USFJFU0hPTEQsICdLbycpO1xuICAgIH1cbiAgICBjb25zdCBzaXplRGl2aWRlZEJ5S29NdWx0aXBsaWNhdG9yID0gc2l6ZSAvIEtJTE9fVEhSRVNIT0xEO1xuICAgIGlmIChzaXplRGl2aWRlZEJ5S29NdWx0aXBsaWNhdG9yID49IEtJTE9fVEhSRVNIT0xEKSB7XG4gICAgICBjb25zdCB0b0ZpeGVkID0gc2l6ZURpdmlkZWRCeUtvTXVsdGlwbGljYXRvciA+IDEwID8gMCA6IDE7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTaXplQW5kVW5pdChzaXplLCBNRUdBX1RIUkVTSE9MRCwgJ01vJywgdG9GaXhlZCk7XG4gICAgfVxuICAgIHJldHVybiBgJHtzaXplfSBvY3RldHNgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaXplQW5kVW5pdChcbiAgICBzaXplOiBudW1iZXIsXG4gICAgbXVsdGlwbGljYXRvcjogbnVtYmVyLFxuICAgIHVuaXQ6IHN0cmluZyxcbiAgICB0b0ZpeGVkID0gMFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHsoc2l6ZSAvIG11bHRpcGxpY2F0b3IpLnRvRml4ZWQodG9GaXhlZCl9ICR7dW5pdH1gO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYmFvLWZpbGUtaW5mb1wiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJiYW8taWNvblwiPjwvbmctY29udGVudD5cbiAgPGJhby1pY29uXG4gICAgKm5nSWY9XCJpbnNlcnRHZW5lcmljSWNvbiAmJiAhdGh1bWJuYWlsVVJMXCJcbiAgICBjbGFzcz1cImJhby1maWxlLW1lZGlhXCJcbiAgICBzdmdJY29uPVwiaWNvbi1maWxlXCJcbiAgPlxuICA8L2Jhby1pY29uPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGh1bWJuYWlsVVJMICYmICFpc0xvYWRpbmdcIj5cbiAgICA8aW1nXG4gICAgICBjbGFzcz1cImJhby1maWxlLW1lZGlhXCJcbiAgICAgIFtzcmNdPVwidGh1bWJuYWlsVVJMXCJcbiAgICAgIHdpZHRoPVwiNDBweFwiXG4gICAgICBoZWlnaHQ9XCI0MHB4XCJcbiAgICAvPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImJhby1maWxlLXRleHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmFvLWZpbGUtbmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJiYW8tZmlsZS1zaXplXCI+e3sgZmlsZVNpemUgfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImJ1dHRvbltiYW8tYnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYmFvRHJvcGRvd25UcmlnZ2VyRm9yXCI+PC9uZy1jb250ZW50PlxuPC9uZy1jb250YWluZXI+XG48YmFvLWljb25cbiAgKm5nSWY9XCJpc0xvYWRpbmdcIlxuICBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiXG4gIHN2Z0ljb249XCJpY29uLXNwaW5uZXJcIlxuICB0aXRsZT1cImNoYXJnZW1lbnRcIlxuPjwvYmFvLWljb24+XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /*
2
+ * Copyright (c) 2023 Ville de Montreal. All rights reserved.
3
+ * Licensed under the MIT license.
4
+ * See LICENSE file in the project root for full license information.
5
+ */
6
+ export * from './module';
7
+ export * from './file-input.component';
8
+ export * from './file-preview.component';
9
+ export * from './file-intl';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZmlsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgKiBmcm9tICcuL21vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtaW50bCc7XG4iXX0=