@villedemontreal/angular-ui 18.0.0 → 19.0.1

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 (102) hide show
  1. package/fesm2022/villedemontreal-angular-ui.mjs +421 -372
  2. package/fesm2022/villedemontreal-angular-ui.mjs.map +1 -1
  3. package/lib/dropdown-menu/dropdown-menu.component.d.ts +16 -9
  4. package/lib/modal/modal-container.d.ts +1 -1
  5. package/lib/modal/modal.d.ts +1 -1
  6. package/package.json +5 -7
  7. package/esm2022/lib/alert/alert.component.mjs +0 -169
  8. package/esm2022/lib/alert/index.mjs +0 -8
  9. package/esm2022/lib/alert/module.mjs +0 -41
  10. package/esm2022/lib/avatar/avatar.component.mjs +0 -102
  11. package/esm2022/lib/avatar/index.mjs +0 -8
  12. package/esm2022/lib/avatar/module.mjs +0 -24
  13. package/esm2022/lib/badge/badge.component.mjs +0 -27
  14. package/esm2022/lib/badge/index.mjs +0 -8
  15. package/esm2022/lib/badge/module.mjs +0 -24
  16. package/esm2022/lib/bao.module.mjs +0 -124
  17. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -36
  18. package/esm2022/lib/breadcrumb/index.mjs +0 -8
  19. package/esm2022/lib/breadcrumb/module.mjs +0 -25
  20. package/esm2022/lib/button/button.component.mjs +0 -100
  21. package/esm2022/lib/button/index.mjs +0 -8
  22. package/esm2022/lib/button/module.mjs +0 -25
  23. package/esm2022/lib/card/card.component.mjs +0 -94
  24. package/esm2022/lib/card/index.mjs +0 -8
  25. package/esm2022/lib/card/module.mjs +0 -38
  26. package/esm2022/lib/checkbox/checkbox-group.component.mjs +0 -58
  27. package/esm2022/lib/checkbox/checkbox.component.mjs +0 -304
  28. package/esm2022/lib/checkbox/index.mjs +0 -9
  29. package/esm2022/lib/checkbox/module.mjs +0 -35
  30. package/esm2022/lib/common-components/error-text/errorText.component.mjs +0 -16
  31. package/esm2022/lib/common-components/guiding-text/guidingText.component.mjs +0 -16
  32. package/esm2022/lib/common-components/index.mjs +0 -11
  33. package/esm2022/lib/common-components/label-text/labelText.component.mjs +0 -22
  34. package/esm2022/lib/common-components/module.mjs +0 -38
  35. package/esm2022/lib/common-components/title-text/titleText.component.mjs +0 -16
  36. package/esm2022/lib/core/breakpoints.mjs +0 -13
  37. package/esm2022/lib/core/colors.mjs +0 -25
  38. package/esm2022/lib/core/index.mjs +0 -8
  39. package/esm2022/lib/dropdown-menu/dropdown-menu.component.mjs +0 -573
  40. package/esm2022/lib/dropdown-menu/index.mjs +0 -8
  41. package/esm2022/lib/dropdown-menu/module.mjs +0 -47
  42. package/esm2022/lib/file/file-input.component.mjs +0 -320
  43. package/esm2022/lib/file/file-intl.mjs +0 -65
  44. package/esm2022/lib/file/file-preview.component.mjs +0 -96
  45. package/esm2022/lib/file/index.mjs +0 -10
  46. package/esm2022/lib/file/module.mjs +0 -56
  47. package/esm2022/lib/header-info/header-info.component.mjs +0 -104
  48. package/esm2022/lib/header-info/index.mjs +0 -8
  49. package/esm2022/lib/header-info/module.mjs +0 -41
  50. package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -84
  51. package/esm2022/lib/hyperlink/index.mjs +0 -8
  52. package/esm2022/lib/hyperlink/module.mjs +0 -24
  53. package/esm2022/lib/icon/bao-icon-registry.mjs +0 -47
  54. package/esm2022/lib/icon/icon.component.mjs +0 -158
  55. package/esm2022/lib/icon/icons-dictionary.mjs +0 -129
  56. package/esm2022/lib/icon/index.mjs +0 -8
  57. package/esm2022/lib/icon/module.mjs +0 -24
  58. package/esm2022/lib/list/index.mjs +0 -8
  59. package/esm2022/lib/list/list.component.mjs +0 -73
  60. package/esm2022/lib/list/module.mjs +0 -38
  61. package/esm2022/lib/message-bar/index.mjs +0 -8
  62. package/esm2022/lib/message-bar/message-bar.component.mjs +0 -87
  63. package/esm2022/lib/message-bar/module.mjs +0 -26
  64. package/esm2022/lib/modal/index.mjs +0 -12
  65. package/esm2022/lib/modal/modal-config.mjs +0 -73
  66. package/esm2022/lib/modal/modal-container.mjs +0 -240
  67. package/esm2022/lib/modal/modal-directives.mjs +0 -84
  68. package/esm2022/lib/modal/modal-ref.mjs +0 -226
  69. package/esm2022/lib/modal/modal.mjs +0 -344
  70. package/esm2022/lib/modal/module.mjs +0 -29
  71. package/esm2022/lib/pagination/index.mjs +0 -8
  72. package/esm2022/lib/pagination/module.mjs +0 -25
  73. package/esm2022/lib/pagination/pagination.component.mjs +0 -217
  74. package/esm2022/lib/radio/index.mjs +0 -9
  75. package/esm2022/lib/radio/module.mjs +0 -54
  76. package/esm2022/lib/radio/radio-group.component.mjs +0 -247
  77. package/esm2022/lib/radio/radio.component.mjs +0 -291
  78. package/esm2022/lib/shared/enum/display-mode.mjs +0 -2
  79. package/esm2022/lib/shared/index.mjs +0 -7
  80. package/esm2022/lib/snack-bar/index.mjs +0 -12
  81. package/esm2022/lib/snack-bar/module.mjs +0 -51
  82. package/esm2022/lib/snack-bar/simple-snack-bar.component.mjs +0 -92
  83. package/esm2022/lib/snack-bar/snack-bar-animations.mjs +0 -28
  84. package/esm2022/lib/snack-bar/snack-bar-config.mjs +0 -37
  85. package/esm2022/lib/snack-bar/snack-bar-container.mjs +0 -277
  86. package/esm2022/lib/snack-bar/snack-bar-ref.mjs +0 -75
  87. package/esm2022/lib/snack-bar/snack-bar.mjs +0 -251
  88. package/esm2022/lib/summary/index.mjs +0 -9
  89. package/esm2022/lib/summary/list-summary.component.mjs +0 -30
  90. package/esm2022/lib/summary/module.mjs +0 -37
  91. package/esm2022/lib/summary/summary.component.mjs +0 -93
  92. package/esm2022/lib/system-header/index.mjs +0 -8
  93. package/esm2022/lib/system-header/module.mjs +0 -33
  94. package/esm2022/lib/system-header/system-header.component.mjs +0 -130
  95. package/esm2022/lib/tabs/index.mjs +0 -8
  96. package/esm2022/lib/tabs/module.mjs +0 -35
  97. package/esm2022/lib/tabs/tabs.component.mjs +0 -295
  98. package/esm2022/lib/tag/index.mjs +0 -8
  99. package/esm2022/lib/tag/module.mjs +0 -24
  100. package/esm2022/lib/tag/tag.component.mjs +0 -75
  101. package/esm2022/public-api.mjs +0 -31
  102. package/esm2022/villedemontreal-angular-ui.mjs +0 -5
@@ -1,8 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 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 './dropdown-menu.component';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZHJvcGRvd24tbWVudS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudCc7XG4iXX0=
@@ -1,47 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 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 { ObserversModule } from '@angular/cdk/observers';
7
- import { OverlayModule } from '@angular/cdk/overlay';
8
- import { PortalModule } from '@angular/cdk/portal';
9
- import { CommonModule } from '@angular/common';
10
- import { NgModule } from '@angular/core';
11
- import { BaoDropdownMenuComponent, BaoDropdownMenuTrigger, BaoDropdownMenuItem, BaoDropdownMenuSection, BaoDropdownMenuItemLabel, BaoDropdownMenuItemDescription, BaoDropdownMenuDivider } from './dropdown-menu.component';
12
- import * as i0 from "@angular/core";
13
- const DROPDOWN_MENU_DIRECTIVES = [
14
- BaoDropdownMenuComponent,
15
- BaoDropdownMenuTrigger,
16
- BaoDropdownMenuItem,
17
- BaoDropdownMenuSection,
18
- BaoDropdownMenuItemLabel,
19
- BaoDropdownMenuItemDescription,
20
- BaoDropdownMenuDivider
21
- ];
22
- export class BaoDropdownMenuModule {
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoDropdownMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
24
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: BaoDropdownMenuModule, declarations: [BaoDropdownMenuComponent,
25
- BaoDropdownMenuTrigger,
26
- BaoDropdownMenuItem,
27
- BaoDropdownMenuSection,
28
- BaoDropdownMenuItemLabel,
29
- BaoDropdownMenuItemDescription,
30
- BaoDropdownMenuDivider], imports: [CommonModule, ObserversModule, OverlayModule, PortalModule], exports: [BaoDropdownMenuComponent,
31
- BaoDropdownMenuTrigger,
32
- BaoDropdownMenuItem,
33
- BaoDropdownMenuSection,
34
- BaoDropdownMenuItemLabel,
35
- BaoDropdownMenuItemDescription,
36
- BaoDropdownMenuDivider] }); }
37
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoDropdownMenuModule, imports: [CommonModule, ObserversModule, OverlayModule, PortalModule] }); }
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoDropdownMenuModule, decorators: [{
40
- type: NgModule,
41
- args: [{
42
- imports: [CommonModule, ObserversModule, OverlayModule, PortalModule],
43
- declarations: [DROPDOWN_MENU_DIRECTIVES],
44
- exports: [...DROPDOWN_MENU_DIRECTIVES]
45
- }]
46
- }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2Ryb3Bkb3duLW1lbnUvbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7O0FBRW5DLE1BQU0sd0JBQXdCLEdBQUc7SUFDL0Isd0JBQXdCO0lBQ3hCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4Qiw4QkFBOEI7SUFDOUIsc0JBQXNCO0NBQ3ZCLENBQUM7QUFPRixNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixpQkFkaEMsd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLHdCQUF3QjtZQUN4Qiw4QkFBOEI7WUFDOUIsc0JBQXNCLGFBSVosWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxhQVZwRSx3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBQ3hCLDhCQUE4QjtZQUM5QixzQkFBc0I7Z0hBUVgscUJBQXFCLFlBSnRCLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVk7OzRGQUl6RCxxQkFBcUI7a0JBTGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDO29CQUNyRSxZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsR0FBRyx3QkFBd0IsQ0FBQztpQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI2IFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7IE9ic2VydmVyc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMnO1xuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYW9Ecm9wZG93bk1lbnVDb21wb25lbnQsXG4gIEJhb0Ryb3Bkb3duTWVudVRyaWdnZXIsXG4gIEJhb0Ryb3Bkb3duTWVudUl0ZW0sXG4gIEJhb0Ryb3Bkb3duTWVudVNlY3Rpb24sXG4gIEJhb0Ryb3Bkb3duTWVudUl0ZW1MYWJlbCxcbiAgQmFvRHJvcGRvd25NZW51SXRlbURlc2NyaXB0aW9uLFxuICBCYW9Ecm9wZG93bk1lbnVEaXZpZGVyXG59IGZyb20gJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQnO1xuXG5jb25zdCBEUk9QRE9XTl9NRU5VX0RJUkVDVElWRVMgPSBbXG4gIEJhb0Ryb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgQmFvRHJvcGRvd25NZW51VHJpZ2dlcixcbiAgQmFvRHJvcGRvd25NZW51SXRlbSxcbiAgQmFvRHJvcGRvd25NZW51U2VjdGlvbixcbiAgQmFvRHJvcGRvd25NZW51SXRlbUxhYmVsLFxuICBCYW9Ecm9wZG93bk1lbnVJdGVtRGVzY3JpcHRpb24sXG4gIEJhb0Ryb3Bkb3duTWVudURpdmlkZXJcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE9ic2VydmVyc01vZHVsZSwgT3ZlcmxheU1vZHVsZSwgUG9ydGFsTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbRFJPUERPV05fTUVOVV9ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRST1BET1dOX01FTlVfRElSRUNUSVZFU11cbn0pXG5leHBvcnQgY2xhc3MgQmFvRHJvcGRvd25NZW51TW9kdWxlIHt9XG4iXX0=
@@ -1,320 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 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 "@angular/common";
13
- import * as i3 from "../common-components/error-text/errorText.component";
14
- import * as i4 from "../common-components/label-text/labelText.component";
15
- import * as i5 from "../button/button.component";
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');
154
- if (helperText) {
155
- this._helperTextId = `bao-guiding-text-${fileTextUniqueId++}`;
156
- this.renderer.setAttribute(helperText.firstElementChild, '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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileInputComponent, deps: [{ token: i1.BaoFileIntl }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
180
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", 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: [
181
- {
182
- provide: NG_VALUE_ACCESSOR,
183
- // tslint:disable-next-line:no-forward-ref
184
- useExisting: forwardRef(() => BaoFileInputComponent),
185
- multi: true
186
- }
187
- ], 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-file-preview:first-child{margin-top:1rem}bao-file-input .bao-error{margin-top:.5rem}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => i3.BaoErrorTextComponent), selector: "bao-error, [bao-error]" }, { kind: "component", type: i0.forwardRef(() => i4.BaoLabelTextComponent), selector: "bao-label, [bao-label]", inputs: ["required"] }, { kind: "component", type: i0.forwardRef(() => i5.BaoButtonComponent), selector: "button[bao-button]", inputs: ["displayType", "level", "size", "loading", "reversed", "loadingSpinnerAriaLabel", "fullWidth"] }, { kind: "directive", type: i0.forwardRef(() => BaoFileDropzoneIntructions), selector: "bao-file-dropzone-instructions, [bao-file-dropzone-instructions]" }, { kind: "directive", type: i0.forwardRef(() => BaoFileDropDirective), selector: "[baoFileDrop]", outputs: ["fileDrop"] }], encapsulation: i0.ViewEncapsulation.None }); }
188
- }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", 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-file-preview:first-child{margin-top:1rem}bao-file-input .bao-error{margin-top:.5rem}\n"] }]
204
- }], ctorParameters: () => [{ 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
- // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
270
- getDataTransfer(event) {
271
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
272
- return event.dataTransfer
273
- ? event.dataTransfer
274
- : event.originalEvent.dataTransfer;
275
- }
276
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
277
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", 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
- }
279
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileDropDirective, decorators: [{
280
- type: Directive,
281
- args: [{
282
- selector: '[baoFileDrop]',
283
- host: { '[class.drag-over]': '_isDragOver == true' }
284
- }]
285
- }], propDecorators: { fileDrop: [{
286
- type: Output
287
- }], onDragOver: [{
288
- type: HostListener,
289
- args: ['dragover', ['$event']]
290
- }], onDragLeave: [{
291
- type: HostListener,
292
- args: ['dragleave', ['$event']]
293
- }], onDrop: [{
294
- type: HostListener,
295
- args: ['drop', ['$event']]
296
- }] } });
297
- export class BaoFileDropzoneIntructions {
298
- constructor(renderer, elementRef) {
299
- this.renderer = renderer;
300
- this.elementRef = elementRef;
301
- }
302
- get nativeElement() {
303
- return this.elementRef.nativeElement;
304
- }
305
- ngAfterContentInit() {
306
- this.renderer.setAttribute(this.nativeElement, 'aria-hidden', 'true');
307
- }
308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileDropzoneIntructions, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
309
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: BaoFileDropzoneIntructions, selector: "bao-file-dropzone-instructions, [bao-file-dropzone-instructions]", host: { classAttribute: "bao-file-dropzone-instructions" }, ngImport: i0 }); }
310
- }
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileDropzoneIntructions, decorators: [{
312
- type: Directive,
313
- args: [{
314
- selector: 'bao-file-dropzone-instructions, [bao-file-dropzone-instructions]',
315
- host: {
316
- class: 'bao-file-dropzone-instructions'
317
- }
318
- }]
319
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }] });
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvZmlsZS9maWxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9maWxlL2ZpbGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFJTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQUVuRTs7R0FFRztBQUNILElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBc0J6QixNQUFNLE9BQU8scUJBQXFCO0lBNEVoQyxZQUNTLElBQWlCLEVBQ2hCLFVBQW1DLEVBQ25DLFFBQW1CLEVBQ25CLEdBQXNCO1FBSHZCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDaEIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQW5FaEM7O1dBRUc7UUFDYSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUVwRDs7V0FFRztRQUNhLG9CQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFckM7O1dBRUc7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UUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDOytHQVpVLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQU50QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrRUFBa0U7b0JBQzVFLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsZ0NBQWdDO3FCQUN4QztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhb0Vycm9yVGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi1jb21wb25lbnRzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFvRmlsZUludGwgfSBmcm9tICcuL2ZpbGUtaW50bCc7XG5pbXBvcnQgeyBCYW9GaWxlUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5cbi8qKlxuICogVW5pcXVlIG51bWJlciB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBJRFxuICovXG5sZXQgZmlsZUlucHV0VW5pcXVlSWQgPSAwO1xubGV0IGZpbGVUZXh0VW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYW8tZmlsZS1pbnB1dCwgW2Jhby1maWxlLWlucHV0XScsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQmFvRmlsZUlucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tZmlsZS1pbnB1dCcsXG4gICAgJ1tjbGFzcy5iYW8tZmlsZS1sYWJlbC1zbWFsbF0nOiAnc2l6ZSA9PT0gXCJzbWFsbFwiJyxcbiAgICAnW2NsYXNzLmJhby1maWxlLWxhYmVsLW1lZGl1bV0nOiAnc2l6ZSA9PT0gXCJtZWRpdW1cIicsXG4gICAgJ1tjbGFzcy5iYW8tZmlsZS1pbnB1dC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRmlsZUlucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvKipcbiAgICogSWQgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGRcbiAgICovXG4gIEBJbnB1dCgnaWQnKSBwdWJsaWMgaW5wdXRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWwgb2YgZmllbGQgdG8gYmUgZGlzcGxheWVkIGFib3ZlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogU2l6ZSBvZiB0aGUgZmlsZSBpbnB1dCBsYWJlbFxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyA9ICdtZWRpdW0nO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHNpemUgYWNjZXB0ZWQgZm9yIHVwbG9hZGVkIGZpbGVzXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbWF4aW1hbEZpbGVTaXplID0gLTE7XG5cbiAgLyoqXG4gICAqIEFjY2VwdGVkIHR5cGVzIG9mIGZpbGVzXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ZWRNSU1FVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIElzIGZpZWxkIHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQ/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElzIGZpZWxkIGRpc2FibGVkXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ/ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpbGUgc2VsZWN0ZWQgdG8gYmUgdXBsb2FkZWRcbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgdXBsb2FkZWRGaWxlOiBFdmVudEVtaXR0ZXI8RmlsZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gdXBsb2FkZWQgc28gZmFyXG4gICAqL1xuICBAQ29udGVudENoaWxkcmVuKEJhb0ZpbGVQcmV2aWV3Q29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX2ZpbGVzOiBRdWVyeUxpc3Q8QmFvRmlsZVByZXZpZXdDb21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBGb3JtIGVycm9ycyB3aGVuIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgZm9ybVxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihCYW9FcnJvclRleHRDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfZXJyb3JGb3JtOiBRdWVyeUxpc3Q8QmFvRXJyb3JUZXh0Q29tcG9uZW50PjtcblxuICAvKipcbiAgICogRXJyb3IgdGV4dHNcbiAgICovXG4gIEBWaWV3Q2hpbGRyZW4oQmFvRXJyb3JUZXh0Q29tcG9uZW50KVxuICBwcml2YXRlIF9lcnJvclRleHRzOiBRdWVyeUxpc3Q8QmFvRXJyb3JUZXh0Q29tcG9uZW50PjtcblxuICAvKipcbiAgICogRmlsZSBpbnB1dCB0aGF0IHRyaWdnZXJzIHVwbG9hZGluZyB3aGVuIGNsaWNrZWRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ3VwbG9hZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgdXBsb2FkZXI6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnZHJvcHpvbmUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSBkcm9wem9uZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHB1YmxpYyBpbnNlcnREZWZhdWx0SW5zdHJ1Y3Rpb25zID0gZmFsc2U7XG4gIHB1YmxpYyBpc0ZpbGVUb29CaWcgPSBmYWxzZTtcbiAgcHVibGljIGlzRmlsZVR5cGVJbnZhbGlkID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbHVlOiBGaWxlW107XG4gIHByaXZhdGUgX2ludGxDaGFuZ2VzOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2hlbHBlclRleHRJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbnRsOiBCYW9GaWxlSW50bCxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5faW50bENoYW5nZXMgPSBpbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKTtcbiAgfVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuZW50ZXInKVxuICBlbnRlcktleUV2ZW50KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkID09PSB0aGlzLmlucHV0SWQpIHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW5wdXRJZCkuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAudGFiJylcbiAgdGFiS2V5RXZlbnQoKSB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuaW5wdXRJZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgdGhpcy5kcm9wem9uZUVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgJ2Ryb3B6b25lLWZvY3VzJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAuc2hpZnQudGFiJylcbiAgc2hpZnRUYWJLZXlFdmVudCgpIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5pbnB1dElkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICB0aGlzLmRyb3B6b25lRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnZHJvcHpvbmUtZm9jdXMnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZXJyb3JGb3JtLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2V0RXJyb3JUZXh0c0F0dHJpYnV0ZSgpKTtcbiAgICBpZiAoIXRoaXMuaW5wdXRJZCkge1xuICAgICAgdGhpcy5pbnB1dElkID0gYGZpbGUtaW5wdXQtJHtmaWxlSW5wdXRVbmlxdWVJZCsrfWA7XG4gICAgfVxuICAgIC8vIElmIG5vIGNvbnRlbnQgd2FzIGFkZGVkIGZvciBkcm9wem9uZSBpbnN0cnVjdGlvbnMsIGFkZCBkZWZhdWx0IHRleHQuXG4gICAgY29uc3QgZHJvcHpvbmVFbGVtZW50ID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pLmZpbmQoXG4gICAgICAoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc05hbWUgPT09ICdmaWxlLWRyb3Atem9uZSdcbiAgICApO1xuICAgIGlmIChcbiAgICAgICFBcnJheS5mcm9tKGRyb3B6b25lRWxlbWVudC5jaGlsZHJlbikuZmluZChcbiAgICAgICAgZWwgPT4gZWwubG9jYWxOYW1lID09PSAnYmFvLWZpbGUtZHJvcHpvbmUtaW5zdHJ1Y3Rpb25zJ1xuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5pbnNlcnREZWZhdWx0SW5zdHJ1Y3Rpb25zID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXREZXNjcmliZWRCeUF0dHJpYnV0ZSgpO1xuICAgIHRoaXMuX2ZpbGVzLmNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKGZpbGVzOiBRdWVyeUxpc3Q8QmFvRmlsZVByZXZpZXdDb21wb25lbnQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVzTGlzdDogRmlsZVtdID0gZmlsZXMubWFwKFxuICAgICAgICAgIChlbDogQmFvRmlsZVByZXZpZXdDb21wb25lbnQpID0+IGVsLmZpbGVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShmaWxlc0xpc3QpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Vycm9yVGV4dHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRFcnJvclRleHRzQXR0cmlidXRlKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2ludGxDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSBvYmo7XG4gIH1cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgfVxuICAvKipcbiAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyB1cGxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNGaWxlVHlwZUludmFsaWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNGaWxlVG9vQmlnID0gZmFsc2U7XG4gICAgICB0aGlzLnVwbG9hZGVyLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIGlmICh0aGlzLm1heGltYWxGaWxlU2l6ZSA+IDAgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhpbWFsRmlsZVNpemUpIHtcbiAgICAgICAgdGhpcy5pc0ZpbGVUb29CaWcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFjY2VwdGVkTUlNRVR5cGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5hY2NlcHRlZE1JTUVUeXBlcy5pbmRleE9mKGZpbGUudHlwZSkgPCAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pc0ZpbGVUeXBlSW52YWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNGaWxlVG9vQmlnICYmICF0aGlzLmlzRmlsZVR5cGVJbnZhbGlkKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlLmVtaXQoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSByZWdpc3Rlck9uQ2hhbmdlIGZ1bmN0aW9uIHNvIHRoZSBjb21wb25lbnQgY2FuIGNhbGwgaXQgd2hlbmV2ZXIgaXQgd2FudHMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcmVnaXN0ZXJPblRvdWNoZWQgZnVuY3Rpb24gc28gdGhlIGNvbXBvbmVudCBjYW4gY2FsbCBpdCB3aGVuZXZlciBpdCB3YW50cy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBGaWxlW10pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVzY3JpYmVkQnlBdHRyaWJ1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgaGVscGVyVGV4dCA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKS5maW5kKFxuICAgICAgKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwubG9jYWxOYW1lID09PSAnYmFvLWd1aWRpbmctdGV4dCdcbiAgICApO1xuICAgIGlmIChoZWxwZXJUZXh0KSB7XG4gICAgICB0aGlzLl9oZWxwZXJUZXh0SWQgPSBgYmFvLWd1aWRpbmctdGV4dC0ke2ZpbGVUZXh0VW5pcXVlSWQrK31gO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIGhlbHBlclRleHQuZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgICdpZCcsXG4gICAgICAgIHRoaXMuX2hlbHBlclRleHRJZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKVxuICAgICAgICAuZmluZCgoZWw6IEhUTUxFbGVtZW50KSA9PiBlbC5jbGFzc05hbWUgPT0gJ2ZpbGUtZHJvcC16b25lJylcbiAgICAgICAgLmNoaWxkcmVuLml0ZW0oMSk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgaW5wdXRFbGVtZW50LFxuICAgICAgICAnYXJpYS1kZXNjcmliZWRieScsXG4gICAgICAgIHRoaXMuX2hlbHBlclRleHRJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVycm9yVGV4dHNBdHRyaWJ1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dHNJZHMgPSBbXTtcbiAgICBjb25zdCBlcnJvcnMgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKFxuICAgICAgKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwubG9jYWxOYW1lID09ICdiYW8tZXJyb3InXG4gICAgKTtcbiAgICBlcnJvcnMuZm9yRWFjaCgoZXJyb3JUZXh0OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3JUZXh0SWQgPSBgYmFvLWVycm9yLSR7ZmlsZVRleHRVbmlxdWVJZCsrfWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgZXJyb3JUZXh0LmZpcnN0RWxlbWVudENoaWxkLFxuICAgICAgICAnaWQnLFxuICAgICAgICBlcnJvclRleHRJZFxuICAgICAgKTtcbiAgICAgIHRleHRzSWRzLnB1c2goZXJyb3JUZXh0SWQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKVxuICAgICAgLmZpbmQoKGVsOiBIVE1MRWxlbWVudCkgPT4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdmaWxlLWRyb3Atem9uZScpKVxuICAgICAgLmNoaWxkcmVuLml0ZW0oMSk7XG4gICAgaWYgKHRoaXMuX2hlbHBlclRleHRJZCkge1xuICAgICAgdGV4dHNJZHMudW5zaGlmdCh0aGlzLl9oZWxwZXJUZXh0SWQpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgIGlucHV0RWxlbWVudCxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JyxcbiAgICAgIHRleHRzSWRzLmpvaW4oJyAnKVxuICAgICk7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Jhb0ZpbGVEcm9wXScsXG4gIGhvc3Q6IHsgJ1tjbGFzcy5kcmFnLW92ZXJdJzogJ19pc0RyYWdPdmVyID09IHRydWUnIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRmlsZURyb3BEaXJlY3RpdmUge1xuICBAT3V0cHV0KCkgcHVibGljIGZpbGVEcm9wOiBFdmVudEVtaXR0ZXI8RmlsZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gIHByaXZhdGUgX2lzRHJhZ092ZXIgPSBmYWxzZTtcblxuICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZlbnRBbmRTdG9wKGV2ZW50KTtcbiAgICB0aGlzLl9pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2ZW50QW5kU3RvcChldmVudCk7XG4gICAgdGhpcy5faXNEcmFnT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucHJldmVudEFuZFN0b3AoZXZlbnQpO1xuICAgIHRoaXMuX2lzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICBjb25zdCB0cmFuc2ZlciA9IHRoaXMuZ2V0RGF0YVRyYW5zZmVyKGV2ZW50KTtcbiAgICB0aGlzLmZpbGVEcm9wLmVtaXQodHJhbnNmZXIuZmlsZXNbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2ZW50QW5kU3RvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gIHByaXZhdGUgZ2V0RGF0YVRyYW5zZmVyKGV2ZW50OiBEcmFnRXZlbnQgfCBhbnkpOiBEYXRhVHJhbnNmZXIge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXJcbiAgICAgID8gZXZlbnQuZGF0YVRyYW5zZmVyXG4gICAgICA6IGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2Jhby1maWxlLWRyb3B6b25lLWluc3RydWN0aW9ucywgW2Jhby1maWxlLWRyb3B6b25lLWluc3RydWN0aW9uc10nLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tZmlsZS1kcm9wem9uZS1pbnN0cnVjdGlvbnMnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvRmlsZURyb3B6b25lSW50cnVjdGlvbnMgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7fVxuXG4gIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICB9XG59XG4iLCI8bGFiZWwgYmFvLWxhYmVsIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtmb3JdPVwiaW5wdXRJZFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbjxuZy1jb250ZW50IHNlbGVjdD1cImJhby1ndWlkaW5nLXRleHRcIj48L25nLWNvbnRlbnQ+XG48ZGl2XG4gIGJhb0ZpbGVEcm9wXG4gIGNsYXNzPVwiZmlsZS1kcm9wLXpvbmVcIlxuICAoZmlsZURyb3ApPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgI2Ryb3B6b25lXG4+XG4gIDxidXR0b25cbiAgICBiYW8tYnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgZGlzcGxheVR5cGU9XCJ1dGlsaXR5XCJcbiAgICBsZXZlbD1cInNlY29uZGFyeVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAoY2xpY2spPVwidXBsb2FkZXIuY2xpY2soKVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICB0YWJJbmRleD1cIi0xXCJcbiAgPlxuICAgIHt7IGludGwuZHJvcHpvbmVCdXR0b25MYWJlbCB9fVxuICA8L2J1dHRvbj5cbiAgPGlucHV0XG4gICAgW2lkXT1cImlucHV0SWRcIlxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudC50YXJnZXQuZmlsZXNbMF0pXCJcbiAgICAjdXBsb2FkZXJcbiAgLz5cbiAgPG5nLWNvbnRhaW5lclxuICAgID48ZGl2ICNyZWY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJiYW8tZmlsZS1kcm9wem9uZS1pbnN0cnVjdGlvbnNcIj48L25nLWNvbnRlbnQ+PC9kaXZcbiAgPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVmLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwXCJcbiAgICA+PGJhby1maWxlLWRyb3B6b25lLWluc3RydWN0aW9ucz57e1xuICAgICAgaW50bC5kZWZhdWx0RHJvcHpvbmVJbnN0cnVjdGlvbnNcbiAgICB9fTwvYmFvLWZpbGUtZHJvcHpvbmUtaW5zdHJ1Y3Rpb25zPjwvbmctY29udGFpbmVyXG4gID5cbjwvZGl2PlxuPGJhby1lcnJvciAqbmdJZj1cImlzRmlsZVRvb0JpZ1wiPlxuICB7eyBpbnRsLmZpbGVUb29CaWdFcnJvck1lc3NhZ2UgfX1cbjwvYmFvLWVycm9yPlxuPGJhby1lcnJvciAqbmdJZj1cImlzRmlsZVR5cGVJbnZhbGlkXCI+XG4gIHt7IGludGwuaW52YWxpZEZpbGVUeXBlRXJyb3JNZXNzYWdlIH19XG48L2Jhby1lcnJvcj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImJhby1lcnJvclwiPjwvbmctY29udGVudD5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
@@ -1,65 +0,0 @@
1
- /*
2
- * Copyright (c) 2026 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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
30
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileIntl, providedIn: 'root' }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", 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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileIntlEnglish, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
49
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoFileIntlEnglish }); }
50
- }
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnRsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2ZpbGUvZmlsZS1pbnRsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFL0I7OztHQUdHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFEeEI7UUFFRTs7O1dBR0c7UUFDTSxZQUFPLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdEQsdUNBQXVDO1FBQ3ZDLHdCQUFtQixHQUFHLFdBQVcsQ0FBQztRQUVsQyx3Q0FBd0M7UUFDeEMsZ0NBQTJCLEdBQUcsOEJBQThCLENBQUM7UUFFN0QsOERBQThEO1FBQzlELDJCQUFzQixHQUFHLHlDQUF5QyxDQUFDO1FBRW5FLHFFQUFxRTtRQUNyRSxnQ0FBMkIsR0FBRyx5Q0FBeUMsQ0FBQztLQUN6RTsrR0FsQlksV0FBVzttSEFBWCxXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXNCbEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFEbkQ7O1FBRUUsdUNBQXVDO1FBQ3ZDLHdCQUFtQixHQUFHLFFBQVEsQ0FBQztRQUUvQix3Q0FBd0M7UUFDeEMsZ0NBQTJCLEdBQUcsd0JBQXdCLENBQUM7UUFFdkQsOERBQThEO1FBQzlELDJCQUFzQixHQUFHLG9DQUFvQyxDQUFDO1FBRTlELHFFQUFxRTtRQUNyRSxnQ0FBMkIsR0FBRyx5Q0FBeUMsQ0FBQztLQUN6RTsrR0FaWSxrQkFBa0I7bUhBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7QUFlWCxvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLDhCQUE4QixDQUFDLFVBQXVCO0lBQ3BFLE9BQU8sVUFBVSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVELG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyx3RkFBd0Y7SUFDeEYsT0FBTyxFQUFFLFdBQVc7SUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsVUFBVSxFQUFFLDhCQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNiBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFRvIG1vZGlmeSB0aGUgbGFiZWxzIGFuZCB0ZXh0IGRpc3BsYXllZCwgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEJhb0ZpbGVJbnRsIGFuZFxuICogaW5jbHVkZSBpdCBpbiBhIGN1c3RvbSBwcm92aWRlclxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEJhb0ZpbGVJbnRsIHtcbiAgLyoqXG4gICAqIFN0cmVhbSB0byBlbWl0IGZyb20gd2hlbiBsYWJlbHMgYXJlIGNoYW5nZWQuIFVzZSB0aGlzIHRvIG5vdGlmeSBjb21wb25lbnRzIHdoZW4gdGhlIGxhYmVscyBoYXZlXG4gICAqIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogVGhlIGxhYmVsIGZvciBidXR0b24gaW4gZHJvcHpvbmUgKi9cbiAgZHJvcHpvbmVCdXR0b25MYWJlbCA9ICdQYXJjb3VyaXInO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBkcm9wem9uZSBpbnN0cnVjdGlvbnMgKi9cbiAgZGVmYXVsdERyb3B6b25lSW5zdHJ1Y3Rpb25zID0gJ291IGTDqXBvc2VyIHZvdHJlIGZpY2hpZXIgaWNpJztcblxuICAvKiogRXJyb3IgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB1cGxvYWRlZCBmaWxlIGlzIHRvbyBsYXJnZSAqL1xuICBmaWxlVG9vQmlnRXJyb3JNZXNzYWdlID0gJ0xhIHRhaWxsZSBkZSBjZSBmaWNoaWVyIGVzdCB0cm9wIGdyYW5kZSc7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdXBsb2FkZWQgZmlsZSBoYXMgYW4gaW52YWxpZCB0eXBlICovXG4gIGludmFsaWRGaWxlVHlwZUVycm9yTWVzc2FnZSA9IFwiQ2UgZm9ybWF0IGRlIGZpY2hpZXIgbidlc3QgcGFzIGF1dG9yaXPDqVwiO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFvRmlsZUludGxFbmdsaXNoIGV4dGVuZHMgQmFvRmlsZUludGwge1xuICAvKiogVGhlIGxhYmVsIGZvciBidXR0b24gaW4gZHJvcHpvbmUgKi9cbiAgZHJvcHpvbmVCdXR0b25MYWJlbCA9ICdCcm93c2UnO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBkcm9wem9uZSBpbnN0cnVjdGlvbnMgKi9cbiAgZGVmYXVsdERyb3B6b25lSW5zdHJ1Y3Rpb25zID0gJ29yIGRyb3AgeW91ciBmaWxlIGhlcmUnO1xuXG4gIC8qKiBFcnJvciBtZXNzYWdlIGRpc3BsYXllZCB3aGVuIHVwbG9hZGVkIGZpbGUgaXMgdG9vIGxhcmdlICovXG4gIGZpbGVUb29CaWdFcnJvck1lc3NhZ2UgPSAnVGhlIHNpemUgb2YgdGhpcyBmaWxlIGlzIHRvbyBsYXJnZSc7XG5cbiAgLyoqIEVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdXBsb2FkZWQgZmlsZSBoYXMgYW4gaW52YWxpZCB0eXBlICovXG4gIGludmFsaWRGaWxlVHlwZUVycm9yTWVzc2FnZSA9ICdUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyB1bmF1dGhvcml6ZWQnO1xufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJBT19GSUxFX0lOVExfUFJPVklERVJfRkFDVE9SWShwYXJlbnRJbnRsOiBCYW9GaWxlSW50bCkge1xuICByZXR1cm4gcGFyZW50SW50bCB8fCBuZXcgQmFvRmlsZUludGwoKTtcbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBCQU9fRklMRV9JTlRMX1BST1ZJREVSID0ge1xuICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGFuIEJhb0ZpbGVJbnRsIGF2YWlsYWJsZSwgdXNlIHRoYXQuIE90aGVyd2lzZSwgcHJvdmlkZSBhIG5ldyBvbmUuXG4gIHByb3ZpZGU6IEJhb0ZpbGVJbnRsLFxuICBkZXBzOiBbW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgQmFvRmlsZUludGxdXSxcbiAgdXNlRmFjdG9yeTogQkFPX0ZJTEVfSU5UTF9QUk9WSURFUl9GQUNUT1JZXG59O1xuIl19