@villedemontreal/angular-ui 2.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 (99) hide show
  1. package/README.md +25 -0
  2. package/esm2020/lib/alert/alert.component.mjs +164 -0
  3. package/esm2020/lib/alert/index.mjs +8 -0
  4. package/esm2020/lib/alert/module.mjs +41 -0
  5. package/esm2020/lib/badge/badge.component.mjs +27 -0
  6. package/esm2020/lib/badge/index.mjs +8 -0
  7. package/esm2020/lib/badge/module.mjs +24 -0
  8. package/esm2020/lib/bao.module.mjs +87 -0
  9. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +36 -0
  10. package/esm2020/lib/breadcrumb/index.mjs +8 -0
  11. package/esm2020/lib/breadcrumb/module.mjs +25 -0
  12. package/esm2020/lib/button/button.component.mjs +100 -0
  13. package/esm2020/lib/button/index.mjs +8 -0
  14. package/esm2020/lib/button/module.mjs +25 -0
  15. package/esm2020/lib/card/card.component.mjs +94 -0
  16. package/esm2020/lib/card/index.mjs +8 -0
  17. package/esm2020/lib/card/module.mjs +38 -0
  18. package/esm2020/lib/checkbox/checkbox-group.component.mjs +59 -0
  19. package/esm2020/lib/checkbox/checkbox.component.mjs +305 -0
  20. package/esm2020/lib/checkbox/index.mjs +9 -0
  21. package/esm2020/lib/checkbox/module.mjs +35 -0
  22. package/esm2020/lib/common-components/error-text/errorText.component.mjs +16 -0
  23. package/esm2020/lib/common-components/guiding-text/guidingText.component.mjs +16 -0
  24. package/esm2020/lib/common-components/index.mjs +10 -0
  25. package/esm2020/lib/common-components/legend-text/legendText.component.mjs +22 -0
  26. package/esm2020/lib/common-components/module.mjs +32 -0
  27. package/esm2020/lib/core/colors.mjs +42 -0
  28. package/esm2020/lib/header-info/header-info.component.mjs +104 -0
  29. package/esm2020/lib/header-info/index.mjs +8 -0
  30. package/esm2020/lib/header-info/module.mjs +41 -0
  31. package/esm2020/lib/icon/bao-icon-registry.mjs +44 -0
  32. package/esm2020/lib/icon/icon.component.mjs +160 -0
  33. package/esm2020/lib/icon/icons-dictionary.mjs +123 -0
  34. package/esm2020/lib/icon/index.mjs +8 -0
  35. package/esm2020/lib/icon/module.mjs +24 -0
  36. package/esm2020/lib/list/index.mjs +8 -0
  37. package/esm2020/lib/list/list.component.mjs +73 -0
  38. package/esm2020/lib/list/module.mjs +38 -0
  39. package/esm2020/lib/radio/index.mjs +9 -0
  40. package/esm2020/lib/radio/module.mjs +56 -0
  41. package/esm2020/lib/radio/radio-group.component.mjs +250 -0
  42. package/esm2020/lib/radio/radio.component.mjs +292 -0
  43. package/esm2020/lib/tag/index.mjs +8 -0
  44. package/esm2020/lib/tag/module.mjs +24 -0
  45. package/esm2020/lib/tag/tag.component.mjs +75 -0
  46. package/esm2020/public-api.mjs +19 -0
  47. package/esm2020/villedemontreal-angular-ui.mjs +5 -0
  48. package/fesm2015/villedemontreal-angular-ui.mjs +2461 -0
  49. package/fesm2015/villedemontreal-angular-ui.mjs.map +1 -0
  50. package/fesm2020/villedemontreal-angular-ui.mjs +2455 -0
  51. package/fesm2020/villedemontreal-angular-ui.mjs.map +1 -0
  52. package/global.scss +6 -0
  53. package/lib/alert/alert.component.d.ts +77 -0
  54. package/lib/alert/index.d.ts +2 -0
  55. package/lib/alert/module.d.ts +10 -0
  56. package/lib/badge/badge.component.d.ts +6 -0
  57. package/lib/badge/index.d.ts +2 -0
  58. package/lib/badge/module.d.ts +8 -0
  59. package/lib/bao.module.d.ts +17 -0
  60. package/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  61. package/lib/breadcrumb/index.d.ts +2 -0
  62. package/lib/breadcrumb/module.d.ts +9 -0
  63. package/lib/button/button.component.d.ts +47 -0
  64. package/lib/button/index.d.ts +2 -0
  65. package/lib/button/module.d.ts +9 -0
  66. package/lib/card/card.component.d.ts +44 -0
  67. package/lib/card/index.d.ts +2 -0
  68. package/lib/card/module.d.ts +8 -0
  69. package/lib/checkbox/checkbox-group.component.d.ts +25 -0
  70. package/lib/checkbox/checkbox.component.d.ts +152 -0
  71. package/lib/checkbox/index.d.ts +3 -0
  72. package/lib/checkbox/module.d.ts +11 -0
  73. package/lib/common-components/error-text/errorText.component.d.ts +5 -0
  74. package/lib/common-components/guiding-text/guidingText.component.d.ts +5 -0
  75. package/lib/common-components/index.d.ts +4 -0
  76. package/lib/common-components/legend-text/legendText.component.d.ts +6 -0
  77. package/lib/common-components/module.d.ts +10 -0
  78. package/lib/core/colors.d.ts +12 -0
  79. package/lib/header-info/header-info.component.d.ts +39 -0
  80. package/lib/header-info/index.d.ts +2 -0
  81. package/lib/header-info/module.d.ts +8 -0
  82. package/lib/icon/bao-icon-registry.d.ts +12 -0
  83. package/lib/icon/icon.component.d.ts +43 -0
  84. package/lib/icon/icons-dictionary.d.ts +3 -0
  85. package/lib/icon/index.d.ts +2 -0
  86. package/lib/icon/module.d.ts +8 -0
  87. package/lib/list/index.d.ts +2 -0
  88. package/lib/list/list.component.d.ts +21 -0
  89. package/lib/list/module.d.ts +8 -0
  90. package/lib/radio/index.d.ts +3 -0
  91. package/lib/radio/module.d.ts +13 -0
  92. package/lib/radio/radio-group.component.d.ts +110 -0
  93. package/lib/radio/radio.component.d.ts +112 -0
  94. package/lib/tag/index.d.ts +2 -0
  95. package/lib/tag/module.d.ts +8 -0
  96. package/lib/tag/tag.component.d.ts +25 -0
  97. package/package.json +33 -0
  98. package/public-api.d.ts +13 -0
  99. package/villedemontreal-angular-ui.d.ts +5 -0
@@ -0,0 +1,104 @@
1
+ /*
2
+ * Copyright (c) 2022 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 { ChangeDetectionStrategy, Component, Directive, Input, ViewEncapsulation } from '@angular/core';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ /**
10
+ * A basic content container component that adds the styles of a BAO header-info
11
+ *
12
+ * While this component can be used alone, it also provides a number
13
+ * of preset styles for common header-info sections, including:
14
+ * - bao-header-info-title-group
15
+ * - bao-header-info-content
16
+ * - bao-header-info-title
17
+ * - bao-header-info-surtitle
18
+ * - bao-header-info-subtitle
19
+ */
20
+ export class BaoHeaderInfoComponent {
21
+ constructor() {
22
+ this.notch = '';
23
+ this.imageUrl = '';
24
+ this.brandBorder = false;
25
+ }
26
+ }
27
+ BaoHeaderInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ BaoHeaderInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoComponent, selector: "bao-header-info", inputs: { notch: "notch", imageUrl: "imageUrl", brandBorder: "brandBorder" }, host: { properties: { "class.document-heading-left-notch": "notch === \"left\"" }, classAttribute: "bao-document-heading" }, ngImport: i0, template: "<div *ngIf=\"imageUrl\" class=\"document-heading-image-container\">\n <div\n [ngStyle]=\"{\n 'background-image': 'url(\\'' + imageUrl + '\\')'}\"\n class=\"document-heading-background\"\n ></div>\n</div>\n\n<div class=\"bao-container document-heading-header-container\">\n <div class=\"bao-row document-heading-header\">\n <div class=\"bao-col-12 bao-col-lg-7\">\n <ng-content select=\"bao-header-info-title-group\"></ng-content>\n <div class=\"bao-header-content\">\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"brandBorder\" class=\"brand-border-bottom\"></div>\n </div>\n </div>\n <div *ngIf=\"notch\" class=\"document-heading-wrapper notch\">\n <div class=\"document-heading-content-wrapper\">\n <div class=\"document-heading-content\"></div>\n </div>\n </div>\n</div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-header-info-title-group,.bao-header-info-content,.document-heading-subtitle,.document-heading-surtitle{display:block}.document-heading-header-container{position:relative!important}.bao-document-heading{display:block;padding:2rem 0;position:relative;width:100%}.bao-document-heading .document-heading-title{font-weight:700;color:#212529;font-size:2rem;line-height:2.5rem;margin-bottom:0}.bao-document-heading .document-heading-surtitle{font-weight:700;font-size:1rem;line-height:1.5rem;margin-bottom:1rem;color:#212529}.bao-document-heading .document-heading-subtitle{font-weight:400;font-size:1rem;line-height:1.5rem;color:#000}.bao-document-heading .bao-header-info-title-group>*:not(:first-child){margin-top:1rem}.bao-document-heading .bao-header-content:not(:empty){margin-top:2rem}.bao-document-heading .brand-border-bottom{margin-top:2rem}.bao-document-heading .document-heading-background{background-color:#f8f9fa;background-position:center center;background-repeat:no-repeat;background-size:cover;height:100%;overflow:hidden;position:absolute;top:0;width:100%;z-index:0}.bao-document-heading .document-heading-content{background-color:#fff;height:2rem;padding-left:1rem;padding-right:1rem;position:relative;bottom:-2rem}@media (min-width: 768px){.bao-document-heading .document-heading-title{font-weight:700;color:#212529;font-size:2.5rem;line-height:3.5rem}.bao-document-heading .document-heading-surtitle{font-weight:700;font-size:1.25rem;line-height:1.75rem;margin-bottom:1rem;color:#212529}.bao-document-heading .document-heading-subtitle{font-weight:400;font-size:1.25rem;line-height:1.75rem;color:#000}}@media (min-width: 992px){.bao-document-heading{padding-top:4rem;padding-bottom:4rem}.bao-document-heading .document-heading-content{bottom:-4rem;height:3.5rem;margin:auto}.bao-document-heading.document-heading-left-notch .document-heading-content{max-width:66.66667%;margin:0}.bao-document-heading.document-heading-left-notch .document-heading-content:before{content:\"\";background:#ffffff;width:1000px;height:100%;position:absolute;left:-1000px}.bao-document-heading.document-heading-left-notch .document-heading-content:after{content:\"\";background:#ffffff;width:1rem;height:100%;position:absolute}}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ selector: 'bao-header-info', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
32
+ class: 'bao-document-heading',
33
+ '[class.document-heading-left-notch]': 'notch === "left"'
34
+ }, template: "<div *ngIf=\"imageUrl\" class=\"document-heading-image-container\">\n <div\n [ngStyle]=\"{\n 'background-image': 'url(\\'' + imageUrl + '\\')'}\"\n class=\"document-heading-background\"\n ></div>\n</div>\n\n<div class=\"bao-container document-heading-header-container\">\n <div class=\"bao-row document-heading-header\">\n <div class=\"bao-col-12 bao-col-lg-7\">\n <ng-content select=\"bao-header-info-title-group\"></ng-content>\n <div class=\"bao-header-content\">\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"brandBorder\" class=\"brand-border-bottom\"></div>\n </div>\n </div>\n <div *ngIf=\"notch\" class=\"document-heading-wrapper notch\">\n <div class=\"document-heading-content-wrapper\">\n <div class=\"document-heading-content\"></div>\n </div>\n </div>\n</div>\n", styles: [".bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-header-info-title-group,.bao-header-info-content,.document-heading-subtitle,.document-heading-surtitle{display:block}.document-heading-header-container{position:relative!important}.bao-document-heading{display:block;padding:2rem 0;position:relative;width:100%}.bao-document-heading .document-heading-title{font-weight:700;color:#212529;font-size:2rem;line-height:2.5rem;margin-bottom:0}.bao-document-heading .document-heading-surtitle{font-weight:700;font-size:1rem;line-height:1.5rem;margin-bottom:1rem;color:#212529}.bao-document-heading .document-heading-subtitle{font-weight:400;font-size:1rem;line-height:1.5rem;color:#000}.bao-document-heading .bao-header-info-title-group>*:not(:first-child){margin-top:1rem}.bao-document-heading .bao-header-content:not(:empty){margin-top:2rem}.bao-document-heading .brand-border-bottom{margin-top:2rem}.bao-document-heading .document-heading-background{background-color:#f8f9fa;background-position:center center;background-repeat:no-repeat;background-size:cover;height:100%;overflow:hidden;position:absolute;top:0;width:100%;z-index:0}.bao-document-heading .document-heading-content{background-color:#fff;height:2rem;padding-left:1rem;padding-right:1rem;position:relative;bottom:-2rem}@media (min-width: 768px){.bao-document-heading .document-heading-title{font-weight:700;color:#212529;font-size:2.5rem;line-height:3.5rem}.bao-document-heading .document-heading-surtitle{font-weight:700;font-size:1.25rem;line-height:1.75rem;margin-bottom:1rem;color:#212529}.bao-document-heading .document-heading-subtitle{font-weight:400;font-size:1.25rem;line-height:1.75rem;color:#000}}@media (min-width: 992px){.bao-document-heading{padding-top:4rem;padding-bottom:4rem}.bao-document-heading .document-heading-content{bottom:-4rem;height:3.5rem;margin:auto}.bao-document-heading.document-heading-left-notch .document-heading-content{max-width:66.66667%;margin:0}.bao-document-heading.document-heading-left-notch .document-heading-content:before{content:\"\";background:#ffffff;width:1000px;height:100%;position:absolute;left:-1000px}.bao-document-heading.document-heading-left-notch .document-heading-content:after{content:\"\";background:#ffffff;width:1rem;height:100%;position:absolute}}\n"] }]
35
+ }], propDecorators: { notch: [{
36
+ type: Input
37
+ }], imageUrl: [{
38
+ type: Input
39
+ }], brandBorder: [{
40
+ type: Input
41
+ }] } });
42
+ export class BaoHeaderInfoTitleGroupComponent {
43
+ }
44
+ BaoHeaderInfoTitleGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoTitleGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ BaoHeaderInfoTitleGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoTitleGroupComponent, selector: "bao-header-info-title-group", host: { classAttribute: "bao-header-info-title-group" }, ngImport: i0, template: "<ng-content></ng-content>\n<ng-content\n select=\"bao-header-surtitle, [bao-header-surtitle], [baoHeaderSurtitle], \n bao-header-title, [bao-header-title], [baoHeaderTitle],\n bao-header-subtitle, [bao-header-subtitle], [baoHeaderSubtitle]\"\n></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoTitleGroupComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'bao-header-info-title-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
49
+ class: 'bao-header-info-title-group'
50
+ }, template: "<ng-content></ng-content>\n<ng-content\n select=\"bao-header-surtitle, [bao-header-surtitle], [baoHeaderSurtitle], \n bao-header-title, [bao-header-title], [baoHeaderTitle],\n bao-header-subtitle, [bao-header-subtitle], [baoHeaderSubtitle]\"\n></ng-content>\n" }]
51
+ }] });
52
+ export class BaoHeaderInfoContent {
53
+ }
54
+ BaoHeaderInfoContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
55
+ BaoHeaderInfoContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoContent, selector: "bao-header-info-content", host: { classAttribute: "bao-header-info-content" }, ngImport: i0 });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoContent, decorators: [{
57
+ type: Directive,
58
+ args: [{
59
+ selector: 'bao-header-info-content',
60
+ host: {
61
+ class: 'bao-header-info-content'
62
+ }
63
+ }]
64
+ }] });
65
+ export class BaoHeaderInfoSurtitle {
66
+ }
67
+ BaoHeaderInfoSurtitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoSurtitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
68
+ BaoHeaderInfoSurtitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoSurtitle, selector: "bao-header-info-surtitle, [bao-header-info-surtitle], [baoHeaderInfoSurtitle]", host: { classAttribute: "document-heading-surtitle" }, ngImport: i0 });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoSurtitle, decorators: [{
70
+ type: Directive,
71
+ args: [{
72
+ selector: 'bao-header-info-surtitle, [bao-header-info-surtitle], [baoHeaderInfoSurtitle]',
73
+ host: {
74
+ class: 'document-heading-surtitle'
75
+ }
76
+ }]
77
+ }] });
78
+ export class BaoHeaderInfoSubtitle {
79
+ }
80
+ BaoHeaderInfoSubtitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoSubtitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
81
+ BaoHeaderInfoSubtitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoSubtitle, selector: "bao-header-info-subtitle, [bao-header-info-subtitle], [baoHeaderInfoSubtitle]", host: { classAttribute: "document-heading-subtitle" }, ngImport: i0 });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoSubtitle, decorators: [{
83
+ type: Directive,
84
+ args: [{
85
+ selector: 'bao-header-info-subtitle, [bao-header-info-subtitle], [baoHeaderInfoSubtitle]',
86
+ host: {
87
+ class: 'document-heading-subtitle'
88
+ }
89
+ }]
90
+ }] });
91
+ export class BaoHeaderInfoTitle {
92
+ }
93
+ BaoHeaderInfoTitle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
94
+ BaoHeaderInfoTitle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaoHeaderInfoTitle, selector: "bao-header-info-title, [bao-header-info-title], [baoHeaderInfoTitle]", host: { classAttribute: "document-heading-title" }, ngImport: i0 });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoTitle, decorators: [{
96
+ type: Directive,
97
+ args: [{
98
+ selector: 'bao-header-info-title, [bao-header-info-title], [baoHeaderInfoTitle]',
99
+ host: {
100
+ class: 'document-heading-title'
101
+ }
102
+ }]
103
+ }] });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2hlYWRlci1pbmZvL2hlYWRlci1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9oZWFkZXItaW5mby9oZWFkZXItaW5mby5odG1sIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2hlYWRlci1pbmZvL2hlYWRlci1pbmZvLXRpdGxlLWdyb3VwLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDOzs7QUFFdkI7Ozs7Ozs7Ozs7R0FVRztBQVlILE1BQU0sT0FBTyxzQkFBc0I7SUFYbkM7UUFZa0IsVUFBSyxHQUEyQixFQUFFLENBQUM7UUFDbkMsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0tBQ3JDOzttSEFKWSxzQkFBc0I7dUdBQXRCLHNCQUFzQixrUUNuQ25DLDIwQkF3QkE7MkZEV2Esc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLGlCQUFpQixpQkFHWixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxzQkFBc0I7d0JBQzdCLHFDQUFxQyxFQUFFLGtCQUFrQjtxQkFDMUQ7OEJBR2UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7O0FBWVIsTUFBTSxPQUFPLGdDQUFnQzs7NkhBQWhDLGdDQUFnQztpSEFBaEMsZ0NBQWdDLDRIRWxEN0Msd1FBTUE7MkZGNENhLGdDQUFnQztrQkFUNUMsU0FBUzsrQkFDRSw2QkFBNkIsaUJBRXhCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osS0FBSyxFQUFFLDZCQUE2QjtxQkFDckM7O0FBVUgsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtxR0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSx5QkFBeUI7cUJBQ2pDO2lCQUNGOztBQVVELE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7c0dBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQVBqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFDTiwrRUFBK0U7b0JBQ2pGLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsMkJBQTJCO3FCQUNuQztpQkFDRjs7QUFVRCxNQUFNLE9BQU8scUJBQXFCOztrSEFBckIscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFQakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQ04sK0VBQStFO29CQUNqRixJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLDJCQUEyQjtxQkFDbkM7aUJBQ0Y7O0FBVUQsTUFBTSxPQUFPLGtCQUFrQjs7K0dBQWxCLGtCQUFrQjttR0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBUDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUNOLHNFQUFzRTtvQkFDeEUsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSx3QkFBd0I7cUJBQ2hDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMiBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIGJhc2ljIGNvbnRlbnQgY29udGFpbmVyIGNvbXBvbmVudCB0aGF0IGFkZHMgdGhlIHN0eWxlcyBvZiBhIEJBTyBoZWFkZXItaW5mb1xuICpcbiAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGNhbiBiZSB1c2VkIGFsb25lLCBpdCBhbHNvIHByb3ZpZGVzIGEgbnVtYmVyXG4gKiBvZiBwcmVzZXQgc3R5bGVzIGZvciBjb21tb24gaGVhZGVyLWluZm8gc2VjdGlvbnMsIGluY2x1ZGluZzpcbiAqIC0gYmFvLWhlYWRlci1pbmZvLXRpdGxlLWdyb3VwXG4gKiAtIGJhby1oZWFkZXItaW5mby1jb250ZW50XG4gKiAtIGJhby1oZWFkZXItaW5mby10aXRsZVxuICogLSBiYW8taGVhZGVyLWluZm8tc3VydGl0bGVcbiAqIC0gYmFvLWhlYWRlci1pbmZvLXN1YnRpdGxlXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1oZWFkZXItaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnaGVhZGVyLWluZm8uaHRtbCcsXG4gIHN0eWxlVXJsczogWydoZWFkZXItaW5mby5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tZG9jdW1lbnQtaGVhZGluZycsXG4gICAgJ1tjbGFzcy5kb2N1bWVudC1oZWFkaW5nLWxlZnQtbm90Y2hdJzogJ25vdGNoID09PSBcImxlZnRcIidcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9IZWFkZXJJbmZvQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcHVibGljIG5vdGNoOiAnJyB8ICdsZWZ0JyB8ICdjZW50ZXInID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbWFnZVVybCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgYnJhbmRCb3JkZXIgPSBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFvLWhlYWRlci1pbmZvLXRpdGxlLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICdoZWFkZXItaW5mby10aXRsZS1ncm91cC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1oZWFkZXItaW5mby10aXRsZS1ncm91cCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9IZWFkZXJJbmZvVGl0bGVHcm91cENvbXBvbmVudCB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdiYW8taGVhZGVyLWluZm8tY29udGVudCcsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Jhby1oZWFkZXItaW5mby1jb250ZW50J1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0hlYWRlckluZm9Db250ZW50IHt9XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAnYmFvLWhlYWRlci1pbmZvLXN1cnRpdGxlLCBbYmFvLWhlYWRlci1pbmZvLXN1cnRpdGxlXSwgW2Jhb0hlYWRlckluZm9TdXJ0aXRsZV0nLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkb2N1bWVudC1oZWFkaW5nLXN1cnRpdGxlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIEJhb0hlYWRlckluZm9TdXJ0aXRsZSB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ2Jhby1oZWFkZXItaW5mby1zdWJ0aXRsZSwgW2Jhby1oZWFkZXItaW5mby1zdWJ0aXRsZV0sIFtiYW9IZWFkZXJJbmZvU3VidGl0bGVdJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZG9jdW1lbnQtaGVhZGluZy1zdWJ0aXRsZSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9IZWFkZXJJbmZvU3VidGl0bGUge31cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdiYW8taGVhZGVyLWluZm8tdGl0bGUsIFtiYW8taGVhZGVyLWluZm8tdGl0bGVdLCBbYmFvSGVhZGVySW5mb1RpdGxlXScsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2RvY3VtZW50LWhlYWRpbmctdGl0bGUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvSGVhZGVySW5mb1RpdGxlIHt9XG4iLCI8ZGl2ICpuZ0lmPVwiaW1hZ2VVcmxcIiBjbGFzcz1cImRvY3VtZW50LWhlYWRpbmctaW1hZ2UtY29udGFpbmVyXCI+XG4gIDxkaXZcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoXFwnJyArIGltYWdlVXJsICsgJ1xcJyknfVwiXG4gICAgY2xhc3M9XCJkb2N1bWVudC1oZWFkaW5nLWJhY2tncm91bmRcIlxuICA+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJhby1jb250YWluZXIgZG9jdW1lbnQtaGVhZGluZy1oZWFkZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJiYW8tcm93IGRvY3VtZW50LWhlYWRpbmctaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImJhby1jb2wtMTIgYmFvLWNvbC1sZy03XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJiYW8taGVhZGVyLWluZm8tdGl0bGUtZ3JvdXBcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmFvLWhlYWRlci1jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImJyYW5kQm9yZGVyXCIgY2xhc3M9XCJicmFuZC1ib3JkZXItYm90dG9tXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibm90Y2hcIiBjbGFzcz1cImRvY3VtZW50LWhlYWRpbmctd3JhcHBlciBub3RjaFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudC1oZWFkaW5nLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50LWhlYWRpbmctY29udGVudFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPG5nLWNvbnRlbnRcbiAgc2VsZWN0PVwiYmFvLWhlYWRlci1zdXJ0aXRsZSwgW2Jhby1oZWFkZXItc3VydGl0bGVdLCBbYmFvSGVhZGVyU3VydGl0bGVdLCBcbiAgYmFvLWhlYWRlci10aXRsZSwgW2Jhby1oZWFkZXItdGl0bGVdLCBbYmFvSGVhZGVyVGl0bGVdLFxuICBiYW8taGVhZGVyLXN1YnRpdGxlLCBbYmFvLWhlYWRlci1zdWJ0aXRsZV0sIFtiYW9IZWFkZXJTdWJ0aXRsZV1cIlxuPjwvbmctY29udGVudD5cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2022 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 './header-info.component';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvaGVhZGVyLWluZm8vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyLWluZm8uY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright (c) 2022 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 { CommonModule } from '@angular/common';
7
+ import { NgModule } from '@angular/core';
8
+ import { BaoHeaderInfoComponent, BaoHeaderInfoContent, BaoHeaderInfoSubtitle, BaoHeaderInfoSurtitle, BaoHeaderInfoTitle, BaoHeaderInfoTitleGroupComponent } from './header-info.component';
9
+ import * as i0 from "@angular/core";
10
+ const DIRECTIVES = [
11
+ BaoHeaderInfoComponent,
12
+ BaoHeaderInfoContent,
13
+ BaoHeaderInfoTitleGroupComponent,
14
+ BaoHeaderInfoSubtitle,
15
+ BaoHeaderInfoSurtitle,
16
+ BaoHeaderInfoTitle
17
+ ];
18
+ export class BaoHeaderInfoModule {
19
+ }
20
+ BaoHeaderInfoModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
21
+ BaoHeaderInfoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoModule, declarations: [BaoHeaderInfoComponent,
22
+ BaoHeaderInfoContent,
23
+ BaoHeaderInfoTitleGroupComponent,
24
+ BaoHeaderInfoSubtitle,
25
+ BaoHeaderInfoSurtitle,
26
+ BaoHeaderInfoTitle], imports: [CommonModule], exports: [BaoHeaderInfoComponent,
27
+ BaoHeaderInfoContent,
28
+ BaoHeaderInfoTitleGroupComponent,
29
+ BaoHeaderInfoSubtitle,
30
+ BaoHeaderInfoSurtitle,
31
+ BaoHeaderInfoTitle] });
32
+ BaoHeaderInfoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoModule, imports: [[CommonModule]] });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoHeaderInfoModule, decorators: [{
34
+ type: NgModule,
35
+ args: [{
36
+ imports: [CommonModule],
37
+ declarations: DIRECTIVES,
38
+ exports: DIRECTIVES
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL2hlYWRlci1pbmZvL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2pDLE1BQU0seUJBQXlCLENBQUM7O0FBRWpDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsZ0NBQWdDO0lBQ2hDLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsa0JBQWtCO0NBQ25CLENBQUM7QUFPRixNQUFNLE9BQU8sbUJBQW1COztnSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBYjlCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFDcEIsZ0NBQWdDO1FBQ2hDLHFCQUFxQjtRQUNyQixxQkFBcUI7UUFDckIsa0JBQWtCLGFBSVIsWUFBWSxhQVR0QixzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLGdDQUFnQztRQUNoQyxxQkFBcUI7UUFDckIscUJBQXFCO1FBQ3JCLGtCQUFrQjtpSEFRUCxtQkFBbUIsWUFKckIsQ0FBQyxZQUFZLENBQUM7MkZBSVosbUJBQW1CO2tCQUwvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRSxVQUFVO2lCQUNwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYW9IZWFkZXJJbmZvQ29tcG9uZW50LFxuICBCYW9IZWFkZXJJbmZvQ29udGVudCxcbiAgQmFvSGVhZGVySW5mb1N1YnRpdGxlLFxuICBCYW9IZWFkZXJJbmZvU3VydGl0bGUsXG4gIEJhb0hlYWRlckluZm9UaXRsZSxcbiAgQmFvSGVhZGVySW5mb1RpdGxlR3JvdXBDb21wb25lbnRcbn0gZnJvbSAnLi9oZWFkZXItaW5mby5jb21wb25lbnQnO1xuXG5jb25zdCBESVJFQ1RJVkVTID0gW1xuICBCYW9IZWFkZXJJbmZvQ29tcG9uZW50LFxuICBCYW9IZWFkZXJJbmZvQ29udGVudCxcbiAgQmFvSGVhZGVySW5mb1RpdGxlR3JvdXBDb21wb25lbnQsXG4gIEJhb0hlYWRlckluZm9TdWJ0aXRsZSxcbiAgQmFvSGVhZGVySW5mb1N1cnRpdGxlLFxuICBCYW9IZWFkZXJJbmZvVGl0bGVcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IERJUkVDVElWRVMsXG4gIGV4cG9ydHM6IERJUkVDVElWRVNcbn0pXG5leHBvcnQgY2xhc3MgQmFvSGVhZGVySW5mb01vZHVsZSB7fVxuIl19
@@ -0,0 +1,44 @@
1
+ /*
2
+ * Copyright (c) 2022 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 { DOCUMENT } from '@angular/common';
7
+ import { Inject, Injectable, SecurityContext } from '@angular/core';
8
+ import { ICONS_DCT } from './icons-dictionary';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/platform-browser";
11
+ const SVG_PREFIX = `<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" role="img">`;
12
+ const SVG_SUFFIX = `</svg>`;
13
+ export class BaoIconDictionary {
14
+ constructor(document, domSanitizer) {
15
+ this.document = document;
16
+ this.domSanitizer = domSanitizer;
17
+ }
18
+ getNamedSvgIcon(iconName) {
19
+ const rawIconString = this.getRawIconStringFromIconName(iconName);
20
+ const literal = this.domSanitizer.bypassSecurityTrustHtml(rawIconString);
21
+ const svgString = this.domSanitizer.sanitize(SecurityContext.HTML, literal);
22
+ return this.svgElementFromString(svgString || '');
23
+ }
24
+ getRawIconStringFromIconName(iconName) {
25
+ const iconSvgPath = ICONS_DCT[iconName] || '';
26
+ return `${SVG_PREFIX}${iconSvgPath}${SVG_SUFFIX}`;
27
+ }
28
+ svgElementFromString(svgString) {
29
+ const div = this.document.createElement('DIV');
30
+ div.innerHTML = svgString;
31
+ const svg = div.querySelector('svg');
32
+ return svg;
33
+ }
34
+ }
35
+ BaoIconDictionary.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoIconDictionary, deps: [{ token: DOCUMENT }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
36
+ BaoIconDictionary.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoIconDictionary, providedIn: 'root' });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoIconDictionary, decorators: [{
38
+ type: Injectable,
39
+ args: [{ providedIn: 'root' }]
40
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
41
+ type: Inject,
42
+ args: [DOCUMENT]
43
+ }] }, { type: i1.DomSanitizer }]; } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFvLWljb24tcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvaWNvbi9iYW8taWNvbi1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUUvQyxNQUFNLFVBQVUsR0FBRyxpTkFBaU4sQ0FBQztBQUNyTyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFHNUIsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUM0QixRQUFhLEVBQy9CLFlBQTBCO1FBRFIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUNqQyxDQUFDO0lBRUcsZUFBZSxDQUFDLFFBQWdCO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUFnQjtRQUNuRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLE9BQU8sR0FBRyxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxTQUFpQjtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBZSxDQUFDO1FBQ25ELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7OEdBdkJVLGlCQUFpQixrQkFFbEIsUUFBUTtrSEFGUCxpQkFBaUIsY0FESixNQUFNOzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFHN0IsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMiBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFNlY3VyaXR5Q29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJQ09OU19EQ1QgfSBmcm9tICcuL2ljb25zLWRpY3Rpb25hcnknO1xuXG5jb25zdCBTVkdfUFJFRklYID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PjwhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiByb2xlPVwiaW1nXCI+YDtcbmNvbnN0IFNWR19TVUZGSVggPSBgPC9zdmc+YDtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBCYW9JY29uRGljdGlvbmFyeSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkge31cblxuICBwdWJsaWMgZ2V0TmFtZWRTdmdJY29uKGljb25OYW1lOiBzdHJpbmcpOiBTVkdFbGVtZW50IHtcbiAgICBjb25zdCByYXdJY29uU3RyaW5nID0gdGhpcy5nZXRSYXdJY29uU3RyaW5nRnJvbUljb25OYW1lKGljb25OYW1lKTtcbiAgICBjb25zdCBsaXRlcmFsID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwocmF3SWNvblN0cmluZyk7XG4gICAgY29uc3Qgc3ZnU3RyaW5nID0gdGhpcy5kb21TYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGxpdGVyYWwpO1xuICAgIHJldHVybiB0aGlzLnN2Z0VsZW1lbnRGcm9tU3RyaW5nKHN2Z1N0cmluZyB8fCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhd0ljb25TdHJpbmdGcm9tSWNvbk5hbWUoaWNvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGljb25TdmdQYXRoID0gSUNPTlNfRENUW2ljb25OYW1lXSB8fCAnJztcbiAgICByZXR1cm4gYCR7U1ZHX1BSRUZJWH0ke2ljb25TdmdQYXRofSR7U1ZHX1NVRkZJWH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdmdFbGVtZW50RnJvbVN0cmluZyhzdmdTdHJpbmc6IHN0cmluZyk6IFNWR0VsZW1lbnQge1xuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgZGl2LmlubmVySFRNTCA9IHN2Z1N0cmluZztcbiAgICBjb25zdCBzdmcgPSBkaXYucXVlcnlTZWxlY3Rvcignc3ZnJykgYXMgU1ZHRWxlbWVudDtcbiAgICByZXR1cm4gc3ZnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,160 @@
1
+ /*
2
+ * Copyright (c) 2022 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 { Attribute, ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
7
+ import { baoColorToHex } from '../core/colors';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "./bao-icon-registry";
10
+ const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
11
+ const TITLE = 'title';
12
+ /**
13
+ * Component to display an icon. It can be used in the following ways:
14
+ *
15
+ * - Specify the svgIcon input to load an SVG icon from a preset list of icons.
16
+ * Examples:
17
+ * `<bao-icon svgIcon="heart"></bao-icon>`
18
+ */
19
+ export class BaoIconComponent {
20
+ constructor(elementRef, iconRegistry, renderer, ariaHidden) {
21
+ this.elementRef = elementRef;
22
+ this.iconRegistry = iconRegistry;
23
+ this.renderer = renderer;
24
+ /**
25
+ * The size of the icon
26
+ */
27
+ this.size = 'x-small';
28
+ // If the user has not explicitly set aria-hidden, mark the icon as hidden, as this is
29
+ // the right thing to do for the majority of icon use-cases.
30
+ if (!ariaHidden) {
31
+ this.elementRef.nativeElement.setAttribute('aria-hidden', 'true');
32
+ }
33
+ this._titleId = '';
34
+ this._title = '';
35
+ this._svgIcon = '';
36
+ }
37
+ /** Name of the icon in the SVG icon set. */
38
+ get svgIcon() {
39
+ return this._svgIcon;
40
+ }
41
+ set svgIcon(value) {
42
+ if (value !== this._svgIcon) {
43
+ if (value) {
44
+ this.updateSvgIcon(value, this.title);
45
+ }
46
+ else if (this._svgIcon) {
47
+ this.clearSvgElement();
48
+ }
49
+ this._svgIcon = value;
50
+ this.renderer.addClass(this.elementRef.nativeElement, `bao-${this._svgIcon}`);
51
+ }
52
+ }
53
+ get hexColor() {
54
+ if (this.color) {
55
+ return baoColorToHex(this.color);
56
+ }
57
+ }
58
+ /** Title that will be used as an aria-label for the icon */
59
+ get title() {
60
+ return this._title;
61
+ }
62
+ set title(value) {
63
+ if (value !== this._title) {
64
+ this._title = value;
65
+ this._titleId = this.generateUniqueTitleId();
66
+ this.updateSvgIcon(this.svgIcon, value);
67
+ }
68
+ }
69
+ get titleId() {
70
+ return this._titleId;
71
+ }
72
+ ngOnDestroy() {
73
+ if (this._elementsWithExternalReferences) {
74
+ this._elementsWithExternalReferences.clear();
75
+ }
76
+ }
77
+ setSvgElement(svg) {
78
+ this.clearSvgElement();
79
+ // Workaround for IE11 and Edge ignoring `style` tags inside dynamically-created SVGs.
80
+ // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10898469/
81
+ // Do this before inserting the element into the DOM, in order to avoid a style recalculation.
82
+ const styleTags = svg.querySelectorAll('style');
83
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
84
+ for (let i = 0; i < styleTags.length; i++) {
85
+ styleTags[i].textContent += ' ';
86
+ }
87
+ this.elementRef.nativeElement.appendChild(svg);
88
+ }
89
+ clearSvgElement() {
90
+ const layoutElement = this.elementRef.nativeElement;
91
+ let childCount = layoutElement.childNodes.length;
92
+ if (this._elementsWithExternalReferences) {
93
+ this._elementsWithExternalReferences.clear();
94
+ }
95
+ // Remove existing non-element child nodes and SVGs, and add the new SVG element. Note that
96
+ // we can't use innerHTML, because IE will throw if the element has a data binding.
97
+ while (childCount--) {
98
+ const child = layoutElement.childNodes[childCount];
99
+ // 1 corresponds to Node.ELEMENT_NODE. We remove all non-element nodes in order to get rid
100
+ // of any loose text nodes, as well as any SVG elements in order to remove any old icons.
101
+ if (child.nodeType !== 1 || child.nodeName.toLowerCase() === 'svg') {
102
+ layoutElement.removeChild(child);
103
+ }
104
+ }
105
+ }
106
+ // Sets a new SVG icon with a particular name.
107
+ updateSvgIcon(iconName, title) {
108
+ if (iconName) {
109
+ let svg = this.iconRegistry.getNamedSvgIcon(iconName);
110
+ if (title) {
111
+ svg = this.addTitleToSVG(svg, title);
112
+ }
113
+ this.setSvgElement(svg);
114
+ }
115
+ }
116
+ addTitleToSVG(svg, title) {
117
+ const titleNode = this.renderer.createElement(TITLE, SVG_NAMESPACE);
118
+ titleNode.id = this._titleId;
119
+ const titleText = this.renderer.createText(title);
120
+ this.renderer.appendChild(titleNode, titleText);
121
+ this.renderer.appendChild(svg, titleNode);
122
+ return svg;
123
+ }
124
+ generateUniqueTitleId() {
125
+ return this.title
126
+ ? `${this.title}-${Math.random() * 10000000000000000}`
127
+ : '';
128
+ }
129
+ }
130
+ BaoIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoIconComponent, deps: [{ token: i0.ElementRef }, { token: i1.BaoIconDictionary }, { token: i0.Renderer2 }, { token: 'aria-hidden', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
131
+ BaoIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BaoIconComponent, selector: "bao-icon", inputs: { svgIcon: "svgIcon", color: "color", title: "title", size: "size" }, host: { attributes: { "role": "img" }, properties: { "class.bao-icon": "true", "class.notranslate": "true", "class.bao-icon-medium": "size === \"medium\"", "class.bao-icon-small": "size === \"small\"", "class.bao-icon-x-small": "size === \"x-small\"", "class.bao-icon-xx-small": "size === \"xx-small\"", "attr.data-bao-icon-type": "\"svg\"", "attr.aria-labelledby": "titleId", "attr.aria-hidden": "!title", "style.color": "hexColor" } }, exportAs: ["baoIcon"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: ["bao-icon{background-repeat:no-repeat;display:inline-flex;align-items:center;fill:currentColor;line-height:normal}bao-icon.bao-icon-medium{height:2.5rem;width:2.5rem}bao-icon.bao-icon-small{height:2rem;width:2rem;line-height:1.75rem}bao-icon.bao-icon-x-small{height:1.5rem;width:1.5rem;line-height:1.15rem}bao-icon.bao-icon-xx-small{height:1rem;width:1rem;line-height:.85rem}bao-icon.bao-icon-spinner{animation:spin .75s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaoIconComponent, decorators: [{
133
+ type: Component,
134
+ args: [{ template: '<ng-content></ng-content>', selector: 'bao-icon', exportAs: 'baoIcon', host: {
135
+ role: 'img',
136
+ // '[class]': "'bao-icon notranslate ' + svgIcon",
137
+ '[class.bao-icon]': 'true',
138
+ '[class.notranslate]': 'true',
139
+ '[class.bao-icon-medium]': 'size === "medium"',
140
+ '[class.bao-icon-small]': 'size === "small"',
141
+ '[class.bao-icon-x-small]': 'size === "x-small"',
142
+ '[class.bao-icon-xx-small]': 'size === "xx-small"',
143
+ '[attr.data-bao-icon-type]': '"svg"',
144
+ '[attr.aria-labelledby]': 'titleId',
145
+ '[attr.aria-hidden]': '!title',
146
+ '[style.color]': 'hexColor'
147
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["bao-icon{background-repeat:no-repeat;display:inline-flex;align-items:center;fill:currentColor;line-height:normal}bao-icon.bao-icon-medium{height:2.5rem;width:2.5rem}bao-icon.bao-icon-small{height:2rem;width:2rem;line-height:1.75rem}bao-icon.bao-icon-x-small{height:1.5rem;width:1.5rem;line-height:1.15rem}bao-icon.bao-icon-xx-small{height:1rem;width:1rem;line-height:.85rem}bao-icon.bao-icon-spinner{animation:spin .75s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
148
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.BaoIconDictionary }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
149
+ type: Attribute,
150
+ args: ['aria-hidden']
151
+ }] }]; }, propDecorators: { svgIcon: [{
152
+ type: Input
153
+ }], color: [{
154
+ type: Input
155
+ }], title: [{
156
+ type: Input
157
+ }], size: [{
158
+ type: Input
159
+ }] } });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvaWNvbi9pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssRUFHTCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHMUQsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFDbkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBRXRCOzs7Ozs7R0FNRztBQXVCSCxNQUFNLE9BQU8sZ0JBQWdCO0lBNkQzQixZQUNVLFVBQW1DLEVBQ25DLFlBQTZCLEVBQzdCLFFBQW1CLEVBQ0QsVUFBa0I7UUFIcEMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFsQjdCOztXQUVHO1FBQ2EsU0FBSSxHQUFnRCxTQUFTLENBQUM7UUFrQjVFLHNGQUFzRjtRQUN0Riw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkU7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBMUVELDRDQUE0QztJQUM1QyxJQUNJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNE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QUFTLFFBRWI7d0JBQ0osSUFBSSxFQUFFLEtBQUs7d0JBQ1gsa0RBQWtEO3dCQUNsRCxrQkFBa0IsRUFBRSxNQUFNO3dCQUMxQixxQkFBcUIsRUFBRSxNQUFNO3dCQUM3Qix5QkFBeUIsRUFBRSxtQkFBbUI7d0JBQzlDLHdCQUF3QixFQUFFLGtCQUFrQjt3QkFDNUMsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNoRCwyQkFBMkIsRUFBRSxxQkFBcUI7d0JBQ2xELDJCQUEyQixFQUFFLE9BQU87d0JBQ3BDLHdCQUF3QixFQUFFLFNBQVM7d0JBQ25DLG9CQUFvQixFQUFFLFFBQVE7d0JBQzlCLGVBQWUsRUFBRSxVQUFVO3FCQUM1QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFtRTVDLFNBQVM7MkJBQUMsYUFBYTs0Q0E5RHRCLE9BQU87c0JBRFYsS0FBSztnQkFvQlUsS0FBSztzQkFBcEIsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBa0JVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhb0NvbG9ycywgYmFvQ29sb3JUb0hleCB9IGZyb20gJy4uL2NvcmUvY29sb3JzJztcbmltcG9ydCB7IEJhb0ljb25EaWN0aW9uYXJ5IGFzIEJhb0ljb25SZWdpc3RyeSB9IGZyb20gJy4vYmFvLWljb24tcmVnaXN0cnknO1xuXG5jb25zdCBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbmNvbnN0IFRJVExFID0gJ3RpdGxlJztcblxuLyoqXG4gKiBDb21wb25lbnQgdG8gZGlzcGxheSBhbiBpY29uLiBJdCBjYW4gYmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKlxuICogLSBTcGVjaWZ5IHRoZSBzdmdJY29uIGlucHV0IHRvIGxvYWQgYW4gU1ZHIGljb24gZnJvbSBhIHByZXNldCBsaXN0IG9mIGljb25zLlxuICogICBFeGFtcGxlczpcbiAqICAgICBgPGJhby1pY29uIHN2Z0ljb249XCJoZWFydFwiPjwvYmFvLWljb24+YFxuICovXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgc2VsZWN0b3I6ICdiYW8taWNvbicsXG4gIGV4cG9ydEFzOiAnYmFvSWNvbicsXG4gIHN0eWxlVXJsczogWycuL2ljb24uY29tcG9uZW50LnNjc3MnXSxcbiAgaG9zdDoge1xuICAgIHJvbGU6ICdpbWcnLFxuICAgIC8vICdbY2xhc3NdJzogXCInYmFvLWljb24gbm90cmFuc2xhdGUgJyArIHN2Z0ljb25cIixcbiAgICAnW2NsYXNzLmJhby1pY29uXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm5vdHJhbnNsYXRlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmJhby1pY29uLW1lZGl1bV0nOiAnc2l6ZSA9PT0gXCJtZWRpdW1cIicsXG4gICAgJ1tjbGFzcy5iYW8taWNvbi1zbWFsbF0nOiAnc2l6ZSA9PT0gXCJzbWFsbFwiJyxcbiAgICAnW2NsYXNzLmJhby1pY29uLXgtc21hbGxdJzogJ3NpemUgPT09IFwieC1zbWFsbFwiJyxcbiAgICAnW2NsYXNzLmJhby1pY29uLXh4LXNtYWxsXSc6ICdzaXplID09PSBcInh4LXNtYWxsXCInLFxuICAgICdbYXR0ci5kYXRhLWJhby1pY29uLXR5cGVdJzogJ1wic3ZnXCInLFxuICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ3RpdGxlSWQnLFxuICAgICdbYXR0ci5hcmlhLWhpZGRlbl0nOiAnIXRpdGxlJyxcbiAgICAnW3N0eWxlLmNvbG9yXSc6ICdoZXhDb2xvcidcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQmFvSWNvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGluIHRoZSBTVkcgaWNvbiBzZXQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBzdmdJY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N2Z0ljb247XG4gIH1cbiAgc2V0IHN2Z0ljb24odmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fc3ZnSWNvbikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3ZnSWNvbih2YWx1ZSwgdGhpcy50aXRsZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3N2Z0ljb24pIHtcbiAgICAgICAgdGhpcy5jbGVhclN2Z0VsZW1lbnQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N2Z0ljb24gPSB2YWx1ZTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBgYmFvLSR7dGhpcy5fc3ZnSWNvbn1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgY29sb3Igb2YgdGhlIGljb24sIGlmIG5vdCBzcGVjaWZpZWQgdGhlIGljb24ncyBwYXJlbnQgY3VycmVudCB0ZXh0IGNvbG9yIHdpbGwgYmUgdXNlZCAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IEJhb0NvbG9ycztcblxuICBnZXQgaGV4Q29sb3IoKTogc3RyaW5nIHwgdm9pZCB7XG4gICAgaWYgKHRoaXMuY29sb3IpIHtcbiAgICAgIHJldHVybiBiYW9Db2xvclRvSGV4KHRoaXMuY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaXRsZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhbiBhcmlhLWxhYmVsIGZvciB0aGUgaWNvbiAqL1xuICBASW5wdXQoKVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3RpdGxlKSB7XG4gICAgICB0aGlzLl90aXRsZSA9IHZhbHVlO1xuICAgICAgdGhpcy5fdGl0bGVJZCA9IHRoaXMuZ2VuZXJhdGVVbmlxdWVUaXRsZUlkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVN2Z0ljb24odGhpcy5zdmdJY29uLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldCB0aXRsZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlSWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGljb25cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplOiAnbWVkaXVtJyB8ICdzbWFsbCcgfCAneC1zbWFsbCcgfCAneHgtc21hbGwnID0gJ3gtc21hbGwnO1xuXG4gIHByaXZhdGUgX3N2Z0ljb246IHN0cmluZztcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGl0bGVJZDogc3RyaW5nO1xuXG4gIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyB0aGF0IHdlJ3ZlIHByZWZpeGVkIHdpdGggdGhlIGN1cnJlbnQgcGF0aC5cbiAgcHJpdmF0ZSBfZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzPzogTWFwPFxuICAgIEVsZW1lbnQsXG4gICAgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdXG4gID47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogQmFvSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZ1xuICApIHtcbiAgICAvLyBJZiB0aGUgdXNlciBoYXMgbm90IGV4cGxpY2l0bHkgc2V0IGFyaWEtaGlkZGVuLCBtYXJrIHRoZSBpY29uIGFzIGhpZGRlbiwgYXMgdGhpcyBpc1xuICAgIC8vIHRoZSByaWdodCB0aGluZyB0byBkbyBmb3IgdGhlIG1ham9yaXR5IG9mIGljb24gdXNlLWNhc2VzLlxuICAgIGlmICghYXJpYUhpZGRlbikge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgfVxuICAgIHRoaXMuX3RpdGxlSWQgPSAnJztcbiAgICB0aGlzLl90aXRsZSA9ICcnO1xuICAgIHRoaXMuX3N2Z0ljb24gPSAnJztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKSB7XG4gICAgICB0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN2Z0VsZW1lbnQoc3ZnOiBTVkdFbGVtZW50KSB7XG4gICAgdGhpcy5jbGVhclN2Z0VsZW1lbnQoKTtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBJRTExIGFuZCBFZGdlIGlnbm9yaW5nIGBzdHlsZWAgdGFncyBpbnNpZGUgZHluYW1pY2FsbHktY3JlYXRlZCBTVkdzLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTA4OTg0NjkvXG4gICAgLy8gRG8gdGhpcyBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBlbGVtZW50IGludG8gdGhlIERPTSwgaW4gb3JkZXIgdG8gYXZvaWQgYSBzdHlsZSByZWNhbGN1bGF0aW9uLlxuICAgIGNvbnN0IHN0eWxlVGFncyA9IHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVUYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHlsZVRhZ3NbaV0udGV4dENvbnRlbnQgKz0gJyAnO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChzdmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN2Z0VsZW1lbnQoKSB7XG4gICAgY29uc3QgbGF5b3V0RWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBsZXQgY2hpbGRDb3VudCA9IGxheW91dEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKSB7XG4gICAgICB0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZXhpc3Rpbmcgbm9uLWVsZW1lbnQgY2hpbGQgbm9kZXMgYW5kIFNWR3MsIGFuZCBhZGQgdGhlIG5ldyBTVkcgZWxlbWVudC4gTm90ZSB0aGF0XG4gICAgLy8gd2UgY2FuJ3QgdXNlIGlubmVySFRNTCwgYmVjYXVzZSBJRSB3aWxsIHRocm93IGlmIHRoZSBlbGVtZW50IGhhcyBhIGRhdGEgYmluZGluZy5cbiAgICB3aGlsZSAoY2hpbGRDb3VudC0tKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGxheW91dEVsZW1lbnQuY2hpbGROb2Rlc1tjaGlsZENvdW50XTtcblxuICAgICAgLy8gMSBjb3JyZXNwb25kcyB0byBOb2RlLkVMRU1FTlRfTk9ERS4gV2UgcmVtb3ZlIGFsbCBub24tZWxlbWVudCBub2RlcyBpbiBvcmRlciB0byBnZXQgcmlkXG4gICAgICAvLyBvZiBhbnkgbG9vc2UgdGV4dCBub2RlcywgYXMgd2VsbCBhcyBhbnkgU1ZHIGVsZW1lbnRzIGluIG9yZGVyIHRvIHJlbW92ZSBhbnkgb2xkIGljb25zLlxuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSAxIHx8IGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzdmcnKSB7XG4gICAgICAgIGxheW91dEVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgYSBuZXcgU1ZHIGljb24gd2l0aCBhIHBhcnRpY3VsYXIgbmFtZS5cbiAgcHJpdmF0ZSB1cGRhdGVTdmdJY29uKFxuICAgIGljb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoaWNvbk5hbWUpIHtcbiAgICAgIGxldCBzdmcgPSB0aGlzLmljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24oaWNvbk5hbWUpO1xuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIHN2ZyA9IHRoaXMuYWRkVGl0bGVUb1NWRyhzdmcsIHRpdGxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3ZnRWxlbWVudChzdmcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVGl0bGVUb1NWRyhzdmc6IFNWR0VsZW1lbnQsIHRpdGxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZU5vZGUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoVElUTEUsIFNWR19OQU1FU1BBQ0UpO1xuICAgIHRpdGxlTm9kZS5pZCA9IHRoaXMuX3RpdGxlSWQ7XG4gICAgY29uc3QgdGl0bGVUZXh0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KHRpdGxlKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRpdGxlTm9kZSwgdGl0bGVUZXh0KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHN2ZywgdGl0bGVOb2RlKTtcbiAgICByZXR1cm4gc3ZnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVVuaXF1ZVRpdGxlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZVxuICAgICAgPyBgJHt0aGlzLnRpdGxlfS0ke01hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMDAwMDAwMH1gXG4gICAgICA6ICcnO1xuICB9XG59XG4iXX0=