@bravobit/bb-foundation 0.23.1 → 0.23.4

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 (158) hide show
  1. package/elements/lib/date-picker/date-picker.component.d.ts +3 -5
  2. package/esm2020/auth/lib/auth.interceptor.mjs +3 -3
  3. package/esm2020/auth/lib/auth.module.mjs +4 -4
  4. package/esm2020/auth/lib/auth.service.mjs +3 -3
  5. package/esm2020/auth/lib/directives/authenticated.directive.mjs +3 -3
  6. package/esm2020/auth/lib/directives/permission.directive.mjs +3 -3
  7. package/esm2020/auth/lib/guards/anonymous.guard.mjs +3 -3
  8. package/esm2020/auth/lib/guards/authenticated.guard.mjs +3 -3
  9. package/esm2020/auth/lib/guards/permission.guard.mjs +3 -3
  10. package/esm2020/auth/lib/permissions/permissions.service.mjs +3 -3
  11. package/esm2020/collections/lib/collections.module.mjs +4 -4
  12. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  13. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
  14. package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
  15. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +3 -3
  16. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +3 -3
  17. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +4 -4
  18. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +3 -3
  19. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +3 -3
  20. package/esm2020/controls/lib/control-error/control-error.module.mjs +4 -4
  21. package/esm2020/controls/lib/controls.module.mjs +4 -4
  22. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +3 -3
  23. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +3 -3
  24. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +3 -3
  25. package/esm2020/controls/lib/form-control/form-control.module.mjs +4 -4
  26. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +3 -3
  27. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  28. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  29. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  30. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
  31. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
  32. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  33. package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
  34. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  35. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +3 -3
  36. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +3 -3
  37. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +3 -3
  38. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
  39. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +4 -4
  40. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +3 -3
  41. package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
  42. package/esm2020/dialog/lib/dialog.module.mjs +4 -4
  43. package/esm2020/dialog/lib/dialog.service.mjs +3 -3
  44. package/esm2020/elements/lib/avatar/avatar.component.mjs +3 -3
  45. package/esm2020/elements/lib/button/button.component.mjs +6 -6
  46. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
  47. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +27 -29
  48. package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
  49. package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
  50. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +3 -3
  51. package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
  52. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +7 -7
  53. package/esm2020/elements/lib/elements.module.mjs +4 -4
  54. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +3 -3
  55. package/esm2020/elements/lib/form-control/form-control.component.mjs +3 -3
  56. package/esm2020/elements/lib/form-error/form-error.component.mjs +3 -3
  57. package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
  58. package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
  59. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
  60. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +3 -3
  61. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
  62. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +3 -3
  63. package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
  64. package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
  65. package/esm2020/http/lib/http.module.mjs +5 -5
  66. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +3 -3
  67. package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
  68. package/esm2020/lib/core/services/clipboard.service.mjs +4 -4
  69. package/esm2020/lib/core/services/exif.service.mjs +3 -3
  70. package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
  71. package/esm2020/lib/core/services/image-converter.service.mjs +3 -3
  72. package/esm2020/lib/core/services/languages.service.mjs +3 -3
  73. package/esm2020/lib/core/services/network.service.mjs +4 -4
  74. package/esm2020/lib/core/services/patch.service.mjs +4 -4
  75. package/esm2020/localize/lib/locale.token.mjs +14 -0
  76. package/esm2020/localize/lib/localize.module.mjs +4 -4
  77. package/esm2020/localize/lib/localize.pipe.mjs +9 -11
  78. package/esm2020/localize/lib/localize.service.mjs +19 -10
  79. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
  80. package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
  81. package/esm2020/localize/public_api.mjs +2 -1
  82. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +3 -3
  83. package/esm2020/masking/lib/directives/date-mask.directive.mjs +3 -3
  84. package/esm2020/masking/lib/directives/input-mask.directive.mjs +3 -3
  85. package/esm2020/masking/lib/masking.module.mjs +4 -4
  86. package/esm2020/masking/lib/masking.service.mjs +3 -3
  87. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +3 -3
  88. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +3 -3
  89. package/esm2020/notifications/lib/notifications.module.mjs +4 -4
  90. package/esm2020/notifications/lib/notifications.service.mjs +3 -3
  91. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +49 -15
  92. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +12 -7
  93. package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
  94. package/esm2020/storage/lib/storage.service.mjs +3 -3
  95. package/esm2020/table/lib/components/table/table.component.mjs +9 -9
  96. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  97. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  98. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  99. package/esm2020/table/lib/table.module.mjs +4 -4
  100. package/esm2020/theming/lib/theming.directive.mjs +3 -3
  101. package/esm2020/theming/lib/theming.module.mjs +4 -4
  102. package/esm2020/utils/lib/directives/autosize.directive.mjs +3 -3
  103. package/esm2020/utils/lib/directives/focus-trap.directive.mjs +3 -3
  104. package/esm2020/utils/lib/directives/focus.directive.mjs +3 -3
  105. package/esm2020/utils/lib/directives/template.directive.mjs +3 -3
  106. package/esm2020/utils/lib/utils.module.mjs +4 -4
  107. package/fesm2015/bravobit-bb-foundation-auth.mjs +28 -28
  108. package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
  109. package/fesm2015/bravobit-bb-foundation-controls.mjs +37 -37
  110. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +25 -25
  111. package/fesm2015/bravobit-bb-foundation-dialog.mjs +31 -31
  112. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
  113. package/fesm2015/bravobit-bb-foundation-elements.mjs +99 -102
  114. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  115. package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
  116. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -1
  117. package/fesm2015/bravobit-bb-foundation-localize.mjs +57 -36
  118. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
  119. package/fesm2015/bravobit-bb-foundation-masking.mjs +16 -16
  120. package/fesm2015/bravobit-bb-foundation-notifications.mjs +13 -13
  121. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +64 -25
  122. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  123. package/fesm2015/bravobit-bb-foundation-storage.mjs +3 -3
  124. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  125. package/fesm2015/bravobit-bb-foundation-theming.mjs +7 -7
  126. package/fesm2015/bravobit-bb-foundation-utils.mjs +16 -16
  127. package/fesm2015/bravobit-bb-foundation.mjs +21 -21
  128. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
  129. package/fesm2020/bravobit-bb-foundation-auth.mjs +28 -28
  130. package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
  131. package/fesm2020/bravobit-bb-foundation-controls.mjs +37 -37
  132. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +25 -25
  133. package/fesm2020/bravobit-bb-foundation-dialog.mjs +31 -31
  134. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
  135. package/fesm2020/bravobit-bb-foundation-elements.mjs +99 -101
  136. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  137. package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
  138. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -1
  139. package/fesm2020/bravobit-bb-foundation-localize.mjs +49 -33
  140. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
  141. package/fesm2020/bravobit-bb-foundation-masking.mjs +16 -16
  142. package/fesm2020/bravobit-bb-foundation-notifications.mjs +13 -13
  143. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +61 -23
  144. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  145. package/fesm2020/bravobit-bb-foundation-storage.mjs +3 -3
  146. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  147. package/fesm2020/bravobit-bb-foundation-theming.mjs +7 -7
  148. package/fesm2020/bravobit-bb-foundation-utils.mjs +16 -16
  149. package/fesm2020/bravobit-bb-foundation.mjs +21 -21
  150. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
  151. package/localize/lib/locale.token.d.ts +3 -0
  152. package/localize/lib/localize.module.d.ts +1 -1
  153. package/localize/lib/localize.pipe.d.ts +3 -3
  154. package/localize/lib/localize.service.d.ts +5 -3
  155. package/localize/public_api.d.ts +1 -0
  156. package/package.json +1 -1
  157. package/recaptcha/lib/recaptcha/recaptcha.component.d.ts +11 -3
  158. package/recaptcha/lib/recaptcha-loader.service.d.ts +4 -2
@@ -3,6 +3,7 @@ import { LocalizeDictionary } from './dictionary/dictionary.class';
3
3
  import { Inject, Injectable, Optional } from '@angular/core';
4
4
  import { WINDOW } from '@bravobit/bb-foundation';
5
5
  import { DOCUMENT } from '@angular/common';
6
+ import { BehaviorSubject } from 'rxjs';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@bravobit/bb-foundation/storage";
8
9
  import * as i2 from "@bravobit/bb-foundation";
@@ -23,7 +24,9 @@ export class Localize {
23
24
  this._bestMatchingLanguage = this.retrieveBestMatchingLanguage();
24
25
  this._loadedDictionaries = new Map();
25
26
  // Current dictionary.
26
- this._current = null;
27
+ this._current$ = new BehaviorSubject(null);
28
+ // State changes.
29
+ this.dictionaryChanges$ = this._current$.asObservable();
27
30
  this.convertToParams = (tokenOrParams) => {
28
31
  if (typeof tokenOrParams !== 'string') {
29
32
  // Destruct the params from the object.
@@ -41,7 +44,7 @@ export class Localize {
41
44
  return this._availableLanguages ?? [];
42
45
  }
43
46
  get current() {
44
- return this._current;
47
+ return this._current$.getValue();
45
48
  }
46
49
  async load(id) {
47
50
  if (id === null || id === undefined) {
@@ -61,17 +64,23 @@ export class Localize {
61
64
  this._loadedDictionaries.set(id, dictionary);
62
65
  return dictionary;
63
66
  }
67
+ async loadAllLanguages() {
68
+ for (const language of this.languages) {
69
+ await this.load(this.current?.id);
70
+ }
71
+ }
64
72
  async switch(id, options) {
65
- this._current = await this.load(id);
73
+ const dictionary = await this.load(id);
74
+ this._current$.next(dictionary);
66
75
  const cache = options?.cache ?? true;
67
76
  if (cache) {
68
- this._storage.cookie.set(this._storageToken, this._current?.id, {});
77
+ this._storage.cookie.set(this._storageToken, dictionary?.id, {});
69
78
  }
70
79
  const reload = options?.reload ?? false;
71
80
  if (reload) {
72
81
  this._window?.location?.reload?.();
73
82
  }
74
- return this._current;
83
+ return dictionary;
75
84
  }
76
85
  select(id) {
77
86
  if (!this._loadedDictionaries.has(id)) {
@@ -126,7 +135,7 @@ export class Localize {
126
135
  }
127
136
  getDictionary(id) {
128
137
  if (id === null || id === undefined) {
129
- return this._current;
138
+ return this.current;
130
139
  }
131
140
  return this.select(id);
132
141
  }
@@ -138,9 +147,9 @@ export class Localize {
138
147
  element.lang = this._bestMatchingLanguage?.supported?.[0] ?? this._bestMatchingLanguage?.locale;
139
148
  }
140
149
  }
141
- Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize, deps: [{ token: i1.Storage }, { token: i2.Languages }, { token: i3.LocalizeMissingHandler }, { token: i4.LocalizeConfig, optional: true }, { token: WINDOW, optional: true }, { token: DOCUMENT, optional: true }, { token: LOCALIZE_TRANSFORM, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
142
- Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize });
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize, decorators: [{
150
+ Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Localize, deps: [{ token: i1.Storage }, { token: i2.Languages }, { token: i3.LocalizeMissingHandler }, { token: i4.LocalizeConfig, optional: true }, { token: WINDOW, optional: true }, { token: DOCUMENT, optional: true }, { token: LOCALIZE_TRANSFORM, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
151
+ Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Localize });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Localize, decorators: [{
144
153
  type: Injectable
145
154
  }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.Languages }, { type: i3.LocalizeMissingHandler }, { type: i4.LocalizeConfig, decorators: [{
146
155
  type: Optional
@@ -160,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
160
169
  type: Inject,
161
170
  args: [LOCALIZE_TRANSFORM]
162
171
  }] }]; } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBSXRFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHekMsTUFBTSxPQUFPLFFBQVE7SUFZakIsWUFBb0IsUUFBaUIsRUFDakIsVUFBcUIsRUFDckIsZUFBdUMsRUFDM0IsT0FBd0IsRUFDUixPQUFnQixFQUNkLFNBQW9CLEVBQ1YsV0FBaUM7UUFOekUsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNSLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ1YsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBaEI3RixpQkFBaUI7UUFDQSxrQkFBYSxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLDJCQUEyQixDQUFDO1FBQ2xGLHdCQUFtQixHQUE2QixJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDL0UsMEJBQXFCLEdBQTJCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBRXBGLHdCQUFtQixHQUFvQyxJ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Q0FBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQ3BHLENBQUM7O3FHQW5KUSxRQUFRLHNKQWdCZSxNQUFNLDZCQUNOLFFBQVEsNkJBQ1Isa0JBQWtCO3lHQWxCekMsUUFBUTsyRkFBUixRQUFRO2tCQURwQixVQUFVOzswQkFnQk0sUUFBUTs4QkFDcUMsTUFBTTswQkFBbkQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxNQUFNOzhCQUN3QixRQUFROzBCQUF6RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYWxpemVDb25maWcsIExvY2FsaXplQ29uZmlnTGFuZ3VhZ2V9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xPQ0FMSVpFX1RSQU5TRk9STX0gZnJvbSAnLi9pbnRlcmZhY2VzL3RyYW5zZm9ybXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplRGljdGlvbmFyeURhdGF9IGZyb20gJy4vZGljdGlvbmFyeS9kaWN0aW9uYXJ5LmRhdGEnO1xuaW1wb3J0IHtMb2NhbGl6ZVRyYW5zZm9ybX0gZnJvbSAnLi90cmFuc2Zvcm1zL2Fic3RyYWN0LnRyYW5zZm9ybSc7XG5pbXBvcnQge0xvY2FsaXplTWlzc2luZ0hhbmRsZXJ9IGZyb20gJy4vaGFuZGxlcnMvbWlzc2luZy5oYW5kbGVyJztcbmltcG9ydCB7TG9jYWxpemVEaWN0aW9uYXJ5fSBmcm9tICcuL2RpY3Rpb25hcnkvZGljdGlvbmFyeS5jbGFzcyc7XG5pbXBvcnQge0xvY2FsaXplUGFyYW1zfSBmcm9tICcuL2ludGVyZmFjZXMvb3B0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xhbmd1YWdlcywgV0lORE9XfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbic7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXplIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZVRva2VuOiBzdHJpbmcgPSB0aGlzLl9jb25maWc/LnN0b3JhZ2VUb2tlbiA/PyAnYmItbGFuZ3VhZ2UtZGljdGlvbmFyeS1pZCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlW10gPSB0aGlzPy5fY29uZmlnPy5sYW5ndWFnZXMgPz8gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYmVzdE1hdGNoaW5nTGFuZ3VhZ2U6IExvY2FsaXplQ29uZmlnTGFuZ3VhZ2UgPSB0aGlzLnJldHJpZXZlQmVzdE1hdGNoaW5nTGFuZ3VhZ2UoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvYWRlZERpY3Rpb25hcmllczogTWFwPHN0cmluZywgTG9jYWxpemVEaWN0aW9uYXJ5PiA9IG5ldyBNYXA8c3RyaW5nLCBMb2NhbGl6ZURpY3Rpb25hcnk+KCk7XG5cbiAgICAvLyBDdXJyZW50IGRpY3Rpb25hcnkuXG4gICAgcHJpdmF0ZSBfY3VycmVudDogTG9jYWxpemVEaWN0aW9uYXJ5IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xhbmd1YWdlczogTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21pc3NpbmdIYW5kbGVyOiBMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IExvY2FsaXplQ29uZmlnLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIF93aW5kb3c/OiBXaW5kb3csXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBEb2N1bWVudCxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMSVpFX1RSQU5TRk9STSkgcHJpdmF0ZSBfdHJhbnNmb3Jtcz86IExvY2FsaXplVHJhbnNmb3JtW10pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEb2N1bWVudExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcyA/PyBbXTtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2FkIGxhbmd1YWdlIHdpdGggaWQ6IFwiJHtpZH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuaGFzKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5nZXQoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmxhbmd1YWdlcz8uZmluZChsYW5ndWFnZSA9PiBsYW5ndWFnZT8uaWQgPT09IGlkKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZSB8fCAhbGFuZ3VhZ2U/LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGU/Lndhcm4/LihgTm8gbGFuZ3VhZ2Ugd2FzIGZvdW5kIHdpdGggaWQ6IFwiJHtpZH1cIjsgRGVmYXVsdGluZyB0byBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2UuYCk7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sYW5ndWFnZXM/LlswXT8uaWQgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWQobGFuZ3VhZ2VJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5RGF0YVZhbHVlcyA9IGF3YWl0IGxhbmd1YWdlPy5kYXRhPy4oKTtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuY3JlYXRlRGljdGlvbmFyeShkaWN0aW9uYXJ5RGF0YVZhbHVlcywgbGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuc2V0KGlkLCBkaWN0aW9uYXJ5KTtcbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3dpdGNoKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNhY2hlPzogYm9vbGVhbiwgcmVsb2FkPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBhd2FpdCB0aGlzLmxvYWQoaWQpO1xuXG4gICAgICAgIGNvbnN0IGNhY2hlID0gb3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZTtcbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5zZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4sIHRoaXMuX2N1cnJlbnQ/LmlkLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWxvYWQgPSBvcHRpb25zPy5yZWxvYWQgPz8gZmFsc2U7XG4gICAgICAgIGlmIChyZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvdz8ubG9jYXRpb24/LnJlbG9hZD8uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgICB9XG5cbiAgICBzZWxlY3QoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpY3Rpb25hcnkgd2l0aCBpZDogXCIke2lkfVwiIG5vdCBsb2FkZWQ7IExvYWQgZGljdGlvbmFyeSBmaXJzdCBiZWZvcmUgdXNpbmcgLnNlbGVjdCg6aWQpLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuZ2V0KGlkKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gdGhpcy5zd2l0Y2godGhpcy5fYmVzdE1hdGNoaW5nTGFuZ3VhZ2U/LmlkLCB7cmVsb2FkOiBmYWxzZSwgY2FjaGU6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UuY29va2llLnJlbW92ZSh0aGlzLl9zdG9yYWdlVG9rZW4pO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZVBhcmFtc1snZGF0YSddID0ge30pIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl90cmFuc2Zvcm1zID8/IFtdKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5leGVjdXRlKHByZXZpb3VzLCBkYXRhLCB0aGlzKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcykge1xuICAgICAgICAvLyAxLiBDb252ZXJ0IHRvIHRoZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29udmVydFRvUGFyYW1zKHRva2VuT3JQYXJhbXMpO1xuXG4gICAgICAgIC8vIDIuIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZ2V0RGljdGlvbmFyeShwYXJhbXM/LmRpY3Rpb25hcnkpO1xuICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSAhIWRpY3Rpb25hcnkgPyBkaWN0aW9uYXJ5LmdldChwYXJhbXM/LnRva2VuKSA6IG51bGw7XG5cbiAgICAgICAgLy8gMy4gVmVyaWZ5IHRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQuXG4gICAgICAgIGlmICghc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlzc2luZ0hhbmRsZXIuaGFuZGxlKHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oc2VhcmNoUmVzdWx0LCBwYXJhbXM/LmRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cmlldmVCZXN0TWF0Y2hpbmdMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tU3RvcmFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLmdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLl9hdmFpbGFibGVMYW5ndWFnZXM/LlswXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhbmd1YWdlRnJvbVN0b3JhZ2UoKSB7XG4gICAgICAgIC8vIEdldCBpZCBmcm9tIHRoZSBzdG9yYWdlLlxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3N0b3JhZ2UuY29va2llLmdldDxzdHJpbmc+KHRoaXMuX3N0b3JhZ2VUb2tlbik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgc3RvcmFnZSBpZC5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBicm93c2VyIGxhbmd1YWdlcyBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyBiZXN0IG1hdGNoaW5nIGxhbmd1YWdlLlxuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VzLmFsbC5tYXAoKHtjb2RlLCByZWdpb259KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBbY29kZSwgcmVnaW9uXS5maWx0ZXIoZGF0YSA9PiAhIWRhdGEpLmpvaW4oJy0nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uc3VwcG9ydGVkPy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKTtcbiAgICAgICAgfSkuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKS5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGljdGlvbmFyeShkYXRhOiBMb2NhbGl6ZURpY3Rpb25hcnlEYXRhLCBsYW5ndWFnZTogTG9jYWxpemVDb25maWdMYW5ndWFnZSkge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsaXplRGljdGlvbmFyeShsYW5ndWFnZT8uaWQsIGxhbmd1YWdlPy5sb2NhbGUsIGxhbmd1YWdlPy5zdXBwb3J0ZWQsIGRhdGE/LmRhdGEsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGljdGlvbmFyeShpZDogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckRvY3VtZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQubGFuZyA9IHRoaXMuX2Jlc3RNYXRjaGluZ0xhbmd1YWdlPy5zdXBwb3J0ZWQ/LlswXSA/PyB0aGlzLl9iZXN0TWF0Y2hpbmdMYW5ndWFnZT8ubG9jYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvUGFyYW1zID0gKHRva2VuT3JQYXJhbXM6IHN0cmluZyB8IExvY2FsaXplUGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW5PclBhcmFtcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIERlc3RydWN0IHRoZSBwYXJhbXMgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY29uc3Qge3Rva2VuLCBvcHRpb25hbCwgZGljdGlvbmFyeSwgZGF0YX0gPSB0b2tlbk9yUGFyYW1zO1xuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIHBhcmFtZXRlcnMgYXJlIHZhbGlkXG4gICAgICAgICAgICAvLyBieSB0eXBlIHNhZmUgYWRkaW5nIHRoZW0uXG4gICAgICAgICAgICByZXR1cm4ge3Rva2VuOiB0b2tlbiwgb3B0aW9uYWw6IG9wdGlvbmFsID8/IGZhbHNlLCBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5ID8/IG51bGwsIGRhdGE6IGRhdGEgPz8ge319O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyBmaWxsIGluIHRoZSBibGFua3MuXG4gICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuT3JQYXJhbXMsIG9wdGlvbmFsOiBmYWxzZSwgZGljdGlvbmFyeTogbnVsbCwgZGF0YToge319O1xuICAgIH07XG5cbn1cbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBSXRFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUdyQyxNQUFNLE9BQU8sUUFBUTtJQWVqQixZQUFvQixRQUFpQixFQUNqQixVQUFxQixFQUNyQixlQUF1QyxFQUMzQixPQUF3QixFQUNSLE9BQWdCLEVBQ2QsU0FBb0IsRUFDVixXQUFpQztRQU56RSxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDckIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ1IsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDVixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFuQjdGLGlCQUFpQjtRQUNBLGtCQUFhLEdBQVcsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksMkJBQTJCLENBQUM7UUFDbEYsd0JBQW1CLEdBQTZCLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUMvRSwwQkFBcUIsR0FBMkIsSUFBSSxD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QUMsQ0FBQztJQUN6RyxDQUFDO0lBRU8sYUFBYSxDQUFDLEVBQWlCO1FBQ25DLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPO1NBQ1Y7UUFFRCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQ3BHLENBQUM7O3FHQTdKUSxRQUFRLHNKQW1CZSxNQUFNLDZCQUNOLFFBQVEsNkJBQ1Isa0JBQWtCO3lHQXJCekMsUUFBUTsyRkFBUixRQUFRO2tCQURwQixVQUFVOzswQkFtQk0sUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxNQUFNOzswQkFDekIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFROzswQkFDM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplQ29uZmlnLCBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuaW1wb3J0IHtMT0NBTElaRV9UUkFOU0ZPUk19IGZyb20gJy4vaW50ZXJmYWNlcy90cmFuc2Zvcm1zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtMb2NhbGl6ZURpY3Rpb25hcnlEYXRhfSBmcm9tICcuL2RpY3Rpb25hcnkvZGljdGlvbmFyeS5kYXRhJztcbmltcG9ydCB7TG9jYWxpemVUcmFuc2Zvcm19IGZyb20gJy4vdHJhbnNmb3Jtcy9hYnN0cmFjdC50cmFuc2Zvcm0nO1xuaW1wb3J0IHtMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyfSBmcm9tICcuL2hhbmRsZXJzL21pc3NpbmcuaGFuZGxlcic7XG5pbXBvcnQge0xvY2FsaXplRGljdGlvbmFyeX0gZnJvbSAnLi9kaWN0aW9uYXJ5L2RpY3Rpb25hcnkuY2xhc3MnO1xuaW1wb3J0IHtMb2NhbGl6ZVBhcmFtc30gZnJvbSAnLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMYW5ndWFnZXMsIFdJTkRPV30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9zdG9yYWdlJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZSB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JhZ2VUb2tlbjogc3RyaW5nID0gdGhpcy5fY29uZmlnPy5zdG9yYWdlVG9rZW4gPz8gJ2JiLWxhbmd1YWdlLWRpY3Rpb25hcnktaWQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F2YWlsYWJsZUxhbmd1YWdlczogTG9jYWxpemVDb25maWdMYW5ndWFnZVtdID0gdGhpcz8uX2NvbmZpZz8ubGFuZ3VhZ2VzID8/IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Jlc3RNYXRjaGluZ0xhbmd1YWdlOiBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlID0gdGhpcy5yZXRyaWV2ZUJlc3RNYXRjaGluZ0xhbmd1YWdlKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkZWREaWN0aW9uYXJpZXM6IE1hcDxzdHJpbmcsIExvY2FsaXplRGljdGlvbmFyeT4gPSBuZXcgTWFwPHN0cmluZywgTG9jYWxpemVEaWN0aW9uYXJ5PigpO1xuXG4gICAgLy8gQ3VycmVudCBkaWN0aW9uYXJ5LlxuICAgIHByaXZhdGUgX2N1cnJlbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMb2NhbGl6ZURpY3Rpb25hcnkgfCBudWxsPihudWxsKTtcblxuICAgIC8vIFN0YXRlIGNoYW5nZXMuXG4gICAgZGljdGlvbmFyeUNoYW5nZXMkID0gdGhpcy5fY3VycmVudCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xhbmd1YWdlczogTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21pc3NpbmdIYW5kbGVyOiBMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IExvY2FsaXplQ29uZmlnLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIF93aW5kb3c/OiBXaW5kb3csXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBEb2N1bWVudCxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMSVpFX1RSQU5TRk9STSkgcHJpdmF0ZSBfdHJhbnNmb3Jtcz86IExvY2FsaXplVHJhbnNmb3JtW10pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEb2N1bWVudExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcyA/PyBbXTtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2FkIGxhbmd1YWdlIHdpdGggaWQ6IFwiJHtpZH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuaGFzKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5nZXQoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmxhbmd1YWdlcz8uZmluZChsYW5ndWFnZSA9PiBsYW5ndWFnZT8uaWQgPT09IGlkKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZSB8fCAhbGFuZ3VhZ2U/LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGU/Lndhcm4/LihgTm8gbGFuZ3VhZ2Ugd2FzIGZvdW5kIHdpdGggaWQ6IFwiJHtpZH1cIjsgRGVmYXVsdGluZyB0byBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2UuYCk7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sYW5ndWFnZXM/LlswXT8uaWQgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWQobGFuZ3VhZ2VJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5RGF0YVZhbHVlcyA9IGF3YWl0IGxhbmd1YWdlPy5kYXRhPy4oKTtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuY3JlYXRlRGljdGlvbmFyeShkaWN0aW9uYXJ5RGF0YVZhbHVlcywgbGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuc2V0KGlkLCBkaWN0aW9uYXJ5KTtcbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZEFsbExhbmd1YWdlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYW5ndWFnZSBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkKHRoaXMuY3VycmVudD8uaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc3dpdGNoKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNhY2hlPzogYm9vbGVhbiwgcmVsb2FkPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSBhd2FpdCB0aGlzLmxvYWQoaWQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50JC5uZXh0KGRpY3Rpb25hcnkpO1xuXG4gICAgICAgIGNvbnN0IGNhY2hlID0gb3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZTtcbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5zZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4sIGRpY3Rpb25hcnk/LmlkLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWxvYWQgPSBvcHRpb25zPy5yZWxvYWQgPz8gZmFsc2U7XG4gICAgICAgIGlmIChyZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvdz8ubG9jYXRpb24/LnJlbG9hZD8uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGljdGlvbmFyeTtcbiAgICB9XG5cbiAgICBzZWxlY3QoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpY3Rpb25hcnkgd2l0aCBpZDogXCIke2lkfVwiIG5vdCBsb2FkZWQ7IExvYWQgZGljdGlvbmFyeSBmaXJzdCBiZWZvcmUgdXNpbmcgLnNlbGVjdCg6aWQpLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuZ2V0KGlkKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gdGhpcy5zd2l0Y2godGhpcy5fYmVzdE1hdGNoaW5nTGFuZ3VhZ2U/LmlkLCB7cmVsb2FkOiBmYWxzZSwgY2FjaGU6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UuY29va2llLnJlbW92ZSh0aGlzLl9zdG9yYWdlVG9rZW4pO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZVBhcmFtc1snZGF0YSddID0ge30pIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl90cmFuc2Zvcm1zID8/IFtdKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5leGVjdXRlKHByZXZpb3VzLCBkYXRhLCB0aGlzKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcykge1xuICAgICAgICAvLyAxLiBDb252ZXJ0IHRvIHRoZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29udmVydFRvUGFyYW1zKHRva2VuT3JQYXJhbXMpO1xuXG4gICAgICAgIC8vIDIuIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZ2V0RGljdGlvbmFyeShwYXJhbXM/LmRpY3Rpb25hcnkpO1xuICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSAhIWRpY3Rpb25hcnkgPyBkaWN0aW9uYXJ5LmdldChwYXJhbXM/LnRva2VuKSA6IG51bGw7XG5cbiAgICAgICAgLy8gMy4gVmVyaWZ5IHRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQuXG4gICAgICAgIGlmICghc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlzc2luZ0hhbmRsZXIuaGFuZGxlKHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oc2VhcmNoUmVzdWx0LCBwYXJhbXM/LmRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cmlldmVCZXN0TWF0Y2hpbmdMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tU3RvcmFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLmdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLl9hdmFpbGFibGVMYW5ndWFnZXM/LlswXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhbmd1YWdlRnJvbVN0b3JhZ2UoKSB7XG4gICAgICAgIC8vIEdldCBpZCBmcm9tIHRoZSBzdG9yYWdlLlxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3N0b3JhZ2UuY29va2llLmdldDxzdHJpbmc+KHRoaXMuX3N0b3JhZ2VUb2tlbik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgc3RvcmFnZSBpZC5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBicm93c2VyIGxhbmd1YWdlcyBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyBiZXN0IG1hdGNoaW5nIGxhbmd1YWdlLlxuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VzLmFsbC5tYXAoKHtjb2RlLCByZWdpb259KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBbY29kZSwgcmVnaW9uXS5maWx0ZXIoZGF0YSA9PiAhIWRhdGEpLmpvaW4oJy0nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uc3VwcG9ydGVkPy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKTtcbiAgICAgICAgfSkuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKS5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGljdGlvbmFyeShkYXRhOiBMb2NhbGl6ZURpY3Rpb25hcnlEYXRhLCBsYW5ndWFnZTogTG9jYWxpemVDb25maWdMYW5ndWFnZSkge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsaXplRGljdGlvbmFyeShsYW5ndWFnZT8uaWQsIGxhbmd1YWdlPy5sb2NhbGUsIGxhbmd1YWdlPy5zdXBwb3J0ZWQsIGRhdGE/LmRhdGEsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGljdGlvbmFyeShpZDogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3QoaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRG9jdW1lbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2RvY3VtZW50Py5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5sYW5nID0gdGhpcy5fYmVzdE1hdGNoaW5nTGFuZ3VhZ2U/LnN1cHBvcnRlZD8uWzBdID8/IHRoaXMuX2Jlc3RNYXRjaGluZ0xhbmd1YWdlPy5sb2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9QYXJhbXMgPSAodG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbk9yUGFyYW1zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRGVzdHJ1Y3QgdGhlIHBhcmFtcyBmcm9tIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjb25zdCB7dG9rZW4sIG9wdGlvbmFsLCBkaWN0aW9uYXJ5LCBkYXRhfSA9IHRva2VuT3JQYXJhbXM7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbGwgcGFyYW1ldGVycyBhcmUgdmFsaWRcbiAgICAgICAgICAgIC8vIGJ5IHR5cGUgc2FmZSBhZGRpbmcgdGhlbS5cbiAgICAgICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuLCBvcHRpb25hbDogb3B0aW9uYWwgPz8gZmFsc2UsIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnkgPz8gbnVsbCwgZGF0YTogZGF0YSA/PyB7fX07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgc3RyaW5nIGZpbGwgaW4gdGhlIGJsYW5rcy5cbiAgICAgICAgcmV0dXJuIHt0b2tlbjogdG9rZW5PclBhcmFtcywgb3B0aW9uYWw6IGZhbHNlLCBkaWN0aW9uYXJ5OiBudWxsLCBkYXRhOiB7fX07XG4gICAgfTtcblxufVxuIl19
@@ -70,9 +70,9 @@ export class BbLocalizeString {
70
70
  ];
71
71
  }
72
72
  }
73
- BbLocalizeString.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalizeString, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
74
- BbLocalizeString.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BbLocalizeString, selector: "bb-localize-string, [bb-localize-string]", inputs: { substitutions: "substitutions", value: "value" }, host: { classAttribute: "bb-localize-string" }, queries: [{ propertyName: "items", predicate: BbLocalizeTemplate }], ngImport: i0, template: "<ng-container *ngFor=\"let component of components\">\n <ng-template [bbTemplate]=\"component\">{{ component }}</ng-template>\n</ng-container>\n", styles: [".bb-localize-string{display:inline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalizeString, decorators: [{
73
+ BbLocalizeString.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbLocalizeString, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
74
+ BbLocalizeString.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: BbLocalizeString, selector: "bb-localize-string, [bb-localize-string]", inputs: { substitutions: "substitutions", value: "value" }, host: { classAttribute: "bb-localize-string" }, queries: [{ propertyName: "items", predicate: BbLocalizeTemplate }], ngImport: i0, template: "<ng-container *ngFor=\"let component of components\">\n <ng-template [bbTemplate]=\"component\">{{ component }}</ng-template>\n</ng-container>\n", styles: [".bb-localize-string{display:inline}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.BbTemplate, selector: "[bbTemplate]", inputs: ["bbTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbLocalizeString, decorators: [{
76
76
  type: Component,
77
77
  args: [{ selector: 'bb-localize-string, [bb-localize-string]', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
78
78
  'class': 'bb-localize-string'
@@ -7,9 +7,9 @@ export class BbLocalizeTemplate {
7
7
  this.name = null;
8
8
  }
9
9
  }
10
- BbLocalizeTemplate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalizeTemplate, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
11
- BbLocalizeTemplate.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BbLocalizeTemplate, selector: "[bbLocalizeTemplate]", inputs: { name: ["bbLocalizeTemplate", "name"] }, ngImport: i0 });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalizeTemplate, decorators: [{
10
+ BbLocalizeTemplate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbLocalizeTemplate, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
11
+ BbLocalizeTemplate.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: BbLocalizeTemplate, selector: "[bbLocalizeTemplate]", inputs: { name: ["bbLocalizeTemplate", "name"] }, ngImport: i0 });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbLocalizeTemplate, decorators: [{
13
13
  type: Directive,
14
14
  args: [{
15
15
  selector: '[bbLocalizeTemplate]'
@@ -17,7 +17,8 @@ export * from './lib/transforms/interpolate.transform';
17
17
  export * from './lib/transforms/reference.transform';
18
18
  export * from './lib/views/localize-string/localize-string.component';
19
19
  export * from './lib/views/localize-template.directive';
20
+ export * from './lib/locale.token';
20
21
  export * from './lib/localize.service';
21
22
  export * from './lib/localize.pipe';
22
23
  export * from './lib/localize.module';
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9vcHRpb25zLmludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9mdW5jdGlvbnMuaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2hhbmRsZXJzLmludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy90cmFuc2Zvcm1zLmludGVyZmFjZXMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9mdW5jdGlvbnMvbG93ZXJjYXNlLmZ1bmN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Z1bmN0aW9ucy91cHBlcmNhc2UuZnVuY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZnVuY3Rpb25zL2RhdGUuZnVuY3Rpb24nO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbGl6YXRpb25zL2VuZ2xpc2gubG9jYWxpemF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvY2FsaXphdGlvbnMvZHV0Y2gubG9jYWxpemF0aW9uJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvaGFuZGxlcnMvbWlzc2luZy5oYW5kbGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGljdGlvbmFyeS9kaWN0aW9uYXJ5LmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGljdGlvbmFyeS9kaWN0aW9uYXJ5LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpY3Rpb25hcnkvZGljdGlvbmFyeS5jb250ZXh0JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHJhbnNmb3Jtcy9hYnN0cmFjdC50cmFuc2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHJhbnNmb3Jtcy9pbnRlcnBvbGF0ZS50cmFuc2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHJhbnNmb3Jtcy9yZWZlcmVuY2UudHJhbnNmb3JtJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvbG9jYWxpemUtc3RyaW5nL2xvY2FsaXplLXN0cmluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlld3MvbG9jYWxpemUtdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWxpemUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbGl6ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvY2FsaXplLm1vZHVsZSc7XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUV4RCxjQUFjLG9CQUFvQixDQUFDO0FBRW5DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2Z1bmN0aW9ucy5pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvaGFuZGxlcnMuaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL3RyYW5zZm9ybXMuaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Z1bmN0aW9ucy9sb3dlcmNhc2UuZnVuY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZnVuY3Rpb25zL3VwcGVyY2FzZS5mdW5jdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mdW5jdGlvbnMvZGF0ZS5mdW5jdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvY2FsaXphdGlvbnMvZW5nbGlzaC5sb2NhbGl6YXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWxpemF0aW9ucy9kdXRjaC5sb2NhbGl6YXRpb24nO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9oYW5kbGVycy9taXNzaW5nLmhhbmRsZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaWN0aW9uYXJ5L2RpY3Rpb25hcnkuZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaWN0aW9uYXJ5L2RpY3Rpb25hcnkuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGljdGlvbmFyeS9kaWN0aW9uYXJ5LmNvbnRleHQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFuc2Zvcm1zL2Fic3RyYWN0LnRyYW5zZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFuc2Zvcm1zL2ludGVycG9sYXRlLnRyYW5zZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFuc2Zvcm1zL3JlZmVyZW5jZS50cmFuc2Zvcm0nO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi92aWV3cy9sb2NhbGl6ZS1zdHJpbmcvbG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92aWV3cy9sb2NhbGl6ZS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbGUudG9rZW4nO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvY2FsaXplLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWxpemUubW9kdWxlJztcbiJdfQ==
@@ -16,9 +16,9 @@ export class BbCurrencyMask {
16
16
  this._inputMask.mask = this._masking.currency(currencyCode, options);
17
17
  }
18
18
  }
19
- BbCurrencyMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbCurrencyMask, deps: [{ token: i1.Masking }, { token: i2.BbInputMask, self: true }], target: i0.ɵɵFactoryTarget.Directive });
20
- BbCurrencyMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BbCurrencyMask, selector: "input[bbCurrencyMask]", inputs: { currencyCode: ["bbCurrencyMask", "currencyCode"], options: ["bbCurrencyMaskOptions", "options"] }, usesOnChanges: true, ngImport: i0 });
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbCurrencyMask, decorators: [{
19
+ BbCurrencyMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbCurrencyMask, deps: [{ token: i1.Masking }, { token: i2.BbInputMask, self: true }], target: i0.ɵɵFactoryTarget.Directive });
20
+ BbCurrencyMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: BbCurrencyMask, selector: "input[bbCurrencyMask]", inputs: { currencyCode: ["bbCurrencyMask", "currencyCode"], options: ["bbCurrencyMaskOptions", "options"] }, usesOnChanges: true, ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbCurrencyMask, decorators: [{
22
22
  type: Directive,
23
23
  args: [{
24
24
  selector: 'input[bbCurrencyMask]'
@@ -16,9 +16,9 @@ export class BbDateMask {
16
16
  this._inputMask.mask = this._masking.date(format, separator);
17
17
  }
18
18
  }
19
- BbDateMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbDateMask, deps: [{ token: i1.Masking }, { token: i2.BbInputMask, self: true }], target: i0.ɵɵFactoryTarget.Directive });
20
- BbDateMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BbDateMask, selector: "input[bbDateMask]", inputs: { format: ["bbDateMask", "format"], separator: ["bbDateMaskSeparator", "separator"] }, usesOnChanges: true, ngImport: i0 });
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbDateMask, decorators: [{
19
+ BbDateMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbDateMask, deps: [{ token: i1.Masking }, { token: i2.BbInputMask, self: true }], target: i0.ɵɵFactoryTarget.Directive });
20
+ BbDateMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: BbDateMask, selector: "input[bbDateMask]", inputs: { format: ["bbDateMask", "format"], separator: ["bbDateMaskSeparator", "separator"] }, usesOnChanges: true, ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbDateMask, decorators: [{
22
22
  type: Directive,
23
23
  args: [{
24
24
  selector: 'input[bbDateMask]'
@@ -94,9 +94,9 @@ export class BbInputMask {
94
94
  this.inputMaskPlugin = null;
95
95
  }
96
96
  }
97
- BbInputMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbInputMask, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
98
- BbInputMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: BbInputMask, selector: "input[bbInputMask],input[bbCurrencyMask],input[bbDateMask]", inputs: { mask: ["bbInputMask", "mask"] }, host: { listeners: { "input": "onInput($event.target.value)", "blur": "onTouched($event.target.value)" } }, ngImport: i0 });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbInputMask, decorators: [{
97
+ BbInputMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbInputMask, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
98
+ BbInputMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.1", type: BbInputMask, selector: "input[bbInputMask],input[bbCurrencyMask],input[bbDateMask]", inputs: { mask: ["bbInputMask", "mask"] }, host: { listeners: { "input": "onInput($event.target.value)", "blur": "onTouched($event.target.value)" } }, ngImport: i0 });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbInputMask, decorators: [{
100
100
  type: Directive,
101
101
  args: [{
102
102
  selector: 'input[bbInputMask],input[bbCurrencyMask],input[bbDateMask]'
@@ -5,14 +5,14 @@ import { NgModule } from '@angular/core';
5
5
  import * as i0 from "@angular/core";
6
6
  export class MaskingModule {
7
7
  }
8
- MaskingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MaskingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- MaskingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: MaskingModule, declarations: [BbInputMask,
8
+ MaskingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: MaskingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ MaskingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: MaskingModule, declarations: [BbInputMask,
10
10
  BbCurrencyMask,
11
11
  BbDateMask], exports: [BbInputMask,
12
12
  BbCurrencyMask,
13
13
  BbDateMask] });
14
- MaskingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MaskingModule });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MaskingModule, decorators: [{
14
+ MaskingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: MaskingModule });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: MaskingModule, decorators: [{
16
16
  type: NgModule,
17
17
  args: [{
18
18
  declarations: [
@@ -90,9 +90,9 @@ export class Masking {
90
90
  }
91
91
  }
92
92
  }
93
- Masking.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Masking, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
94
- Masking.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Masking, providedIn: 'root' });
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Masking, decorators: [{
93
+ Masking.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Masking, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
94
+ Masking.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Masking, providedIn: 'root' });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Masking, decorators: [{
96
96
  type: Injectable,
97
97
  args: [{
98
98
  providedIn: 'root'
@@ -79,9 +79,9 @@ export class BbNotificationsItem {
79
79
  this._zone.runOutsideAngular(() => this._timer = this.setTimeout(this.instance, this._speed));
80
80
  }
81
81
  }
82
- BbNotificationsItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbNotificationsItem, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
83
- BbNotificationsItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BbNotificationsItem, selector: "bb-notifications-item", inputs: { notification: "notification", dismissButtonText: "dismissButtonText" }, host: { attributes: { "role": "alert" }, properties: { "class": "this.getClass" } }, viewQueries: [{ propertyName: "progressElementRef", first: true, predicate: ["progress"], descendants: true }], ngImport: i0, template: "<div class=\"notification-content-wrapper\">\n <!--\n The icon for the notification.\n\n The icon is reflected by the type of the\n notification. Same goes for the color and\n background-color.\n -->\n <div [style.color]=\"notification?.color\"\n [style.background-color]=\"notification?.backgroundColor\"\n class=\"notification-icon-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 19.5\"\n class=\"notification-icon\">\n <path\n d=\"M8 19.5c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zM14 13.5v-5c0-3.1-1.6-5.6-4.5-6.3v-.7C9.5.7 8.8 0 8 0S6.5.7 6.5 1.5v.7C3.6 2.9 2 5.4 2 8.5v5l-2 2v1h16v-1l-2-2z\">\n </path>\n </svg>\n\n <!--\n The circular progress for the notification.\n\n The progress is only visible when a timeout is\n set. The progress adapts to the time remaining\n for the notification.\n -->\n <svg *ngIf=\"notification?.timeout > 0\"\n class=\"notification-progress-ring\"\n viewBox=\"0 0 40 40\"\n role=\"progressbar\">\n <circle #progress\n [attr.stroke-dasharray]=\"progressStrokeArray\"\n [attr.stroke-dashoffset]=\"progressStrokeOffset\"\n [style.stroke]=\"notification?.color\"\n class=\"notification-progress-circle\"\n stroke-width=\"2\"\n fill=\"transparent\"\n r=\"19\"\n cx=\"20\"\n cy=\"20\">\n </circle>\n </svg>\n </div>\n\n <!--\n The content for the notification.\n\n This displays a string or a template based\n on the given parameter by the user.\n -->\n <div class=\"notification-content\">\n <ng-container *ngIf=\"isContentString; else templateContent\"\n [ngSwitch]=\"notification?.localize\">\n <ng-container *ngSwitchCase=\"true\">\n {{ $any(notification?.content) | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ notification?.content }}\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<!--\n The actions of the notification.\n\n All actions are displayed here and are\n based on the actions array the user provided.\n-->\n<div *ngIf=\"notification?.actions?.length > 0 || notification?.dismiss\"\n class=\"notification-actions\">\n <button *ngFor=\"let action of notification?.actions\"\n (click)=\"callActionAndDestroy(notification, action)\"\n type=\"button\"\n [class.destructive]=\"action?.type === 'cancel'\"\n class=\"notification-actions-button\">\n <span [ngSwitch]=\"notification?.localize\"\n class=\"notification-actions-button-highlight\">\n <ng-container *ngSwitchCase=\"true\">\n {{ action?.title | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ action?.title }}\n </ng-container>\n </span>\n </button>\n <button *ngIf=\"notification?.dismiss\"\n (click)=\"notification?.destroy()\"\n class=\"notification-actions-button destructive\"\n type=\"button\">\n <span class=\"notification-actions-button-highlight\">\n {{ notification?.dismissText || dismissButtonText }}\n </span>\n </button>\n</div>\n\n<!--\n The outlet for the notification content template ref.\n-->\n<ng-template #templateContent>\n <ng-container *ngTemplateOutlet=\"$any(notification?.content)\"></ng-container>\n</ng-template>\n", styles: [".bb-notifications-item{display:flex;border-radius:4px;flex-direction:column;background-color:#fff;border:1px solid #d6dbe0}.bb-notifications-item.success .notification-icon-wrapper{color:#2dc05d;background-color:#ebfaf0}.bb-notifications-item.success .notification-progress-circle{stroke:#36d068}.bb-notifications-item.error .notification-icon-wrapper{color:#f43e3e;background-color:#feeeee}.bb-notifications-item.error .notification-progress-circle{stroke:#f55656}.bb-notifications-item.warning .notification-icon-wrapper{color:#f1ae00;background-color:#fff8e7}.bb-notifications-item.warning .notification-progress-circle{stroke:#ffbc0b}.bb-notifications-item.info .notification-icon-wrapper{color:#099bf6;background-color:#e9f6fe}.bb-notifications-item.info .notification-progress-circle{stroke:#22a5f7}.bb-notifications-item.custom .notification-icon-wrapper{color:#657385;background-color:#f3f5f6}.bb-notifications-item.custom .notification-progress-circle{stroke:#657385}.notification-content-wrapper{padding:20px;display:flex;align-items:center}.notification-icon-wrapper{width:40px;height:40px;display:flex;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;justify-content:center;color:#657385;background-color:#f3f5f6}.notification-icon{width:100%;height:100%;padding:10px;fill:currentColor}.notification-content{flex:1;font-size:14px;line-height:1.5;font-weight:500;margin-left:20px;color:#000000d9}.notification-content i{font-style:italic}.notification-content,.notification-actions-button{font-family:inherit}.notification-actions{display:flex;margin:0 20px;-webkit-user-select:none;user-select:none;border-top:1px solid #f3f5f6}.notification-actions-button{flex:1;border:none;color:#22a5f7;cursor:pointer;font-size:14px;font-weight:500;padding:12px 2px;text-align:center;background-color:transparent}.notification-actions-button:hover>.notification-actions-button-highlight,.notification-actions-button:focus>.notification-actions-button-highlight{background-color:#22a5f71a}.notification-actions-button:active>.notification-actions-button-highlight{background-color:#22a5f733}.notification-actions-button.destructive{color:#f55656}.notification-actions-button.destructive:hover>.notification-actions-button-highlight,.notification-actions-button.destructive:focus>.notification-actions-button-highlight{background-color:#f556561a}.notification-actions-button.destructive:active>.notification-actions-button-highlight{background-color:#f5565633}.notification-actions-button-highlight{padding:4px 12px;border-radius:12px;display:inline-flex;transition:background-color .15s cubic-bezier(0,0,.2,1)}.notification-progress-ring{top:0;left:0;right:0;bottom:0;width:100%;height:100%;position:absolute}.notification-progress-circle{transform:rotate(-90deg);transform-origin:50% 50%;stroke:#657385}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.BbLocalize, name: "bbLocalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbNotificationsItem, decorators: [{
82
+ BbNotificationsItem.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbNotificationsItem, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
83
+ BbNotificationsItem.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: BbNotificationsItem, selector: "bb-notifications-item", inputs: { notification: "notification", dismissButtonText: "dismissButtonText" }, host: { attributes: { "role": "alert" }, properties: { "class": "this.getClass" } }, viewQueries: [{ propertyName: "progressElementRef", first: true, predicate: ["progress"], descendants: true }], ngImport: i0, template: "<div class=\"notification-content-wrapper\">\n <!--\n The icon for the notification.\n\n The icon is reflected by the type of the\n notification. Same goes for the color and\n background-color.\n -->\n <div [style.color]=\"notification?.color\"\n [style.background-color]=\"notification?.backgroundColor\"\n class=\"notification-icon-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 19.5\"\n class=\"notification-icon\">\n <path\n d=\"M8 19.5c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zM14 13.5v-5c0-3.1-1.6-5.6-4.5-6.3v-.7C9.5.7 8.8 0 8 0S6.5.7 6.5 1.5v.7C3.6 2.9 2 5.4 2 8.5v5l-2 2v1h16v-1l-2-2z\">\n </path>\n </svg>\n\n <!--\n The circular progress for the notification.\n\n The progress is only visible when a timeout is\n set. The progress adapts to the time remaining\n for the notification.\n -->\n <svg *ngIf=\"notification?.timeout > 0\"\n class=\"notification-progress-ring\"\n viewBox=\"0 0 40 40\"\n role=\"progressbar\">\n <circle #progress\n [attr.stroke-dasharray]=\"progressStrokeArray\"\n [attr.stroke-dashoffset]=\"progressStrokeOffset\"\n [style.stroke]=\"notification?.color\"\n class=\"notification-progress-circle\"\n stroke-width=\"2\"\n fill=\"transparent\"\n r=\"19\"\n cx=\"20\"\n cy=\"20\">\n </circle>\n </svg>\n </div>\n\n <!--\n The content for the notification.\n\n This displays a string or a template based\n on the given parameter by the user.\n -->\n <div class=\"notification-content\">\n <ng-container *ngIf=\"isContentString; else templateContent\"\n [ngSwitch]=\"notification?.localize\">\n <ng-container *ngSwitchCase=\"true\">\n {{ $any(notification?.content) | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ notification?.content }}\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<!--\n The actions of the notification.\n\n All actions are displayed here and are\n based on the actions array the user provided.\n-->\n<div *ngIf=\"notification?.actions?.length > 0 || notification?.dismiss\"\n class=\"notification-actions\">\n <button *ngFor=\"let action of notification?.actions\"\n (click)=\"callActionAndDestroy(notification, action)\"\n type=\"button\"\n [class.destructive]=\"action?.type === 'cancel'\"\n class=\"notification-actions-button\">\n <span [ngSwitch]=\"notification?.localize\"\n class=\"notification-actions-button-highlight\">\n <ng-container *ngSwitchCase=\"true\">\n {{ action?.title | bbLocalize:{data: notification?.data} }}\n </ng-container>\n <ng-container *ngSwitchDefault>\n {{ action?.title }}\n </ng-container>\n </span>\n </button>\n <button *ngIf=\"notification?.dismiss\"\n (click)=\"notification?.destroy()\"\n class=\"notification-actions-button destructive\"\n type=\"button\">\n <span class=\"notification-actions-button-highlight\">\n {{ notification?.dismissText || dismissButtonText }}\n </span>\n </button>\n</div>\n\n<!--\n The outlet for the notification content template ref.\n-->\n<ng-template #templateContent>\n <ng-container *ngTemplateOutlet=\"$any(notification?.content)\"></ng-container>\n</ng-template>\n", styles: [".bb-notifications-item{display:flex;border-radius:4px;flex-direction:column;background-color:#fff;border:1px solid #d6dbe0}.bb-notifications-item.success .notification-icon-wrapper{color:#2dc05d;background-color:#ebfaf0}.bb-notifications-item.success .notification-progress-circle{stroke:#36d068}.bb-notifications-item.error .notification-icon-wrapper{color:#f43e3e;background-color:#feeeee}.bb-notifications-item.error .notification-progress-circle{stroke:#f55656}.bb-notifications-item.warning .notification-icon-wrapper{color:#f1ae00;background-color:#fff8e7}.bb-notifications-item.warning .notification-progress-circle{stroke:#ffbc0b}.bb-notifications-item.info .notification-icon-wrapper{color:#099bf6;background-color:#e9f6fe}.bb-notifications-item.info .notification-progress-circle{stroke:#22a5f7}.bb-notifications-item.custom .notification-icon-wrapper{color:#657385;background-color:#f3f5f6}.bb-notifications-item.custom .notification-progress-circle{stroke:#657385}.notification-content-wrapper{padding:20px;display:flex;align-items:center}.notification-icon-wrapper{width:40px;height:40px;display:flex;-webkit-user-select:none;user-select:none;position:relative;border-radius:50%;align-items:center;justify-content:center;color:#657385;background-color:#f3f5f6}.notification-icon{width:100%;height:100%;padding:10px;fill:currentColor}.notification-content{flex:1;font-size:14px;line-height:1.5;font-weight:500;margin-left:20px;color:#000000d9}.notification-content i{font-style:italic}.notification-content,.notification-actions-button{font-family:inherit}.notification-actions{display:flex;margin:0 20px;-webkit-user-select:none;user-select:none;border-top:1px solid #f3f5f6}.notification-actions-button{flex:1;border:none;color:#22a5f7;cursor:pointer;font-size:14px;font-weight:500;padding:12px 2px;text-align:center;background-color:transparent}.notification-actions-button:hover>.notification-actions-button-highlight,.notification-actions-button:focus>.notification-actions-button-highlight{background-color:#22a5f71a}.notification-actions-button:active>.notification-actions-button-highlight{background-color:#22a5f733}.notification-actions-button.destructive{color:#f55656}.notification-actions-button.destructive:hover>.notification-actions-button-highlight,.notification-actions-button.destructive:focus>.notification-actions-button-highlight{background-color:#f556561a}.notification-actions-button.destructive:active>.notification-actions-button-highlight{background-color:#f5565633}.notification-actions-button-highlight{padding:4px 12px;border-radius:12px;display:inline-flex;transition:background-color .15s cubic-bezier(0,0,.2,1)}.notification-progress-ring{top:0;left:0;right:0;bottom:0;width:100%;height:100%;position:absolute}.notification-progress-circle{transform:rotate(-90deg);transform-origin:50% 50%;stroke:#657385}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.BbLocalize, name: "bbLocalize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbNotificationsItem, decorators: [{
85
85
  type: Component,
86
86
  args: [{ selector: 'bb-notifications-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
87
87
  'role': 'alert'
@@ -29,9 +29,9 @@ export class BbNotificationsList {
29
29
  return { vertical: y ?? null, horizontal: x ?? null };
30
30
  }
31
31
  }
32
- BbNotificationsList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbNotificationsList, deps: [{ token: i1.NotificationsData }], target: i0.ɵɵFactoryTarget.Component });
33
- BbNotificationsList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: BbNotificationsList, selector: "bb-notifications-list", host: { attributes: { "role": "list" }, properties: { "style.justify-content": "this.horizontalPosition", "style.align-items": "this.verticalPosition" }, classAttribute: "bb-notifications-list" }, ngImport: i0, template: "<!--\n The notifications list.\n\n The list provides the animation effect for the\n incoming notifications.\n-->\n<div *ngIf=\"data?.data | async as notifications\"\n [@notificationListAnimation]=\"{value: notifications?.length, params: animation}\"\n class=\"notifications-list-wrapper\">\n <!--\n The loop for the notifications.\n\n All notifications will be displayed here. They\n are wrapped within a wrapper which separates them.\n -->\n <div *ngFor=\"let notification of notifications; trackBy: trackByFn\"\n class=\"notifications-item-wrapper\">\n <bb-notifications-item [notification]=\"notification\"\n [dismissButtonText]=\"data?.dismissText\">\n </bb-notifications-item>\n </div>\n</div>\n", styles: [".bb-notifications-list{top:0;left:0;right:0;bottom:0;z-index:1100;padding:10px;display:flex;position:fixed;pointer-events:none}.notifications-list-wrapper{width:100%;display:block;max-width:400px;position:relative}.notifications-item-wrapper{padding:0;margin:0 0 10px;pointer-events:all}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.BbNotificationsItem, selector: "bb-notifications-item", inputs: ["notification", "dismissButtonText"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [notificationAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbNotificationsList, decorators: [{
32
+ BbNotificationsList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbNotificationsList, deps: [{ token: i1.NotificationsData }], target: i0.ɵɵFactoryTarget.Component });
33
+ BbNotificationsList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: BbNotificationsList, selector: "bb-notifications-list", host: { attributes: { "role": "list" }, properties: { "style.justify-content": "this.horizontalPosition", "style.align-items": "this.verticalPosition" }, classAttribute: "bb-notifications-list" }, ngImport: i0, template: "<!--\n The notifications list.\n\n The list provides the animation effect for the\n incoming notifications.\n-->\n<div *ngIf=\"data?.data | async as notifications\"\n [@notificationListAnimation]=\"{value: notifications?.length, params: animation}\"\n class=\"notifications-list-wrapper\">\n <!--\n The loop for the notifications.\n\n All notifications will be displayed here. They\n are wrapped within a wrapper which separates them.\n -->\n <div *ngFor=\"let notification of notifications; trackBy: trackByFn\"\n class=\"notifications-item-wrapper\">\n <bb-notifications-item [notification]=\"notification\"\n [dismissButtonText]=\"data?.dismissText\">\n </bb-notifications-item>\n </div>\n</div>\n", styles: [".bb-notifications-list{top:0;left:0;right:0;bottom:0;z-index:1100;padding:10px;display:flex;position:fixed;pointer-events:none}.notifications-list-wrapper{width:100%;display:block;max-width:400px;position:relative}.notifications-item-wrapper{padding:0;margin:0 0 10px;pointer-events:all}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.BbNotificationsItem, selector: "bb-notifications-item", inputs: ["notification", "dismissButtonText"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [notificationAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: BbNotificationsList, decorators: [{
35
35
  type: Component,
36
36
  args: [{ selector: 'bb-notifications-list', animations: [notificationAnimation], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, preserveWhitespaces: false, host: {
37
37
  'class': 'bb-notifications-list',
@@ -17,10 +17,10 @@ export class NotificationsModule {
17
17
  };
18
18
  }
19
19
  }
20
- NotificationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NotificationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
21
- NotificationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: NotificationsModule, declarations: [BbNotificationsList, BbNotificationsItem], imports: [CommonModule, LocalizeModule] });
22
- NotificationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NotificationsModule, imports: [CommonModule, LocalizeModule] });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NotificationsModule, decorators: [{
20
+ NotificationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NotificationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
21
+ NotificationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.1", ngImport: i0, type: NotificationsModule, declarations: [BbNotificationsList, BbNotificationsItem], imports: [CommonModule, LocalizeModule] });
22
+ NotificationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NotificationsModule, imports: [CommonModule, LocalizeModule] });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: NotificationsModule, decorators: [{
24
24
  type: NgModule,
25
25
  args: [{
26
26
  imports: [CommonModule, LocalizeModule],
@@ -129,9 +129,9 @@ export class Notifications {
129
129
  }
130
130
  }
131
131
  }
132
- Notifications.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Notifications, deps: [{ token: i1.Platform }, { token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }, { token: i2.Localize, optional: true }, { token: i3.NotificationsConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
133
- Notifications.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Notifications });
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Notifications, decorators: [{
132
+ Notifications.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Notifications, deps: [{ token: i1.Platform }, { token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }, { token: i2.Localize, optional: true }, { token: i3.NotificationsConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
133
+ Notifications.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Notifications });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: Notifications, decorators: [{
135
135
  type: Injectable
136
136
  }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i2.Localize, decorators: [{
137
137
  type: Optional
@@ -2,19 +2,25 @@ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, HostBindi
2
2
  import { RECAPTCHA_CONFIG } from '../recaptcha.interface';
3
3
  import { mixinGrouped } from '@bravobit/bb-foundation';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { LOCALIZE_ID } from '@bravobit/bb-foundation/localize';
5
6
  import { Subscription } from 'rxjs';
6
7
  import * as i0 from "@angular/core";
7
- import * as i1 from "../recaptcha-loader.service";
8
+ import * as i1 from "@angular/cdk/platform";
9
+ import * as i2 from "../recaptcha-loader.service";
10
+ import * as i3 from "rxjs";
8
11
  let nextUniqueId = 0;
9
12
  class BbRecaptchaBase {
10
13
  }
11
14
  const BbRecaptchaMixinBase = mixinGrouped(BbRecaptchaBase);
12
15
  export class RecaptchaComponent extends BbRecaptchaMixinBase {
13
- constructor(_zone, _elementRef, _loader, _config) {
16
+ constructor(_zone, _platform, _renderer, _elementRef, _loader, _localizeId, _config) {
14
17
  super();
15
18
  this._zone = _zone;
19
+ this._platform = _platform;
20
+ this._renderer = _renderer;
16
21
  this._elementRef = _elementRef;
17
22
  this._loader = _loader;
23
+ this._localizeId = _localizeId;
18
24
  this._config = _config;
19
25
  // Host bindings.
20
26
  this.id = `bb-recaptcha-${nextUniqueId++}`;
@@ -41,14 +47,8 @@ export class RecaptchaComponent extends BbRecaptchaMixinBase {
41
47
  this.initializeProperties();
42
48
  }
43
49
  ngAfterViewInit() {
44
- const subscription = this._loader.ready$.subscribe((grecaptcha) => {
45
- if (grecaptcha == null || !(grecaptcha.render instanceof Function)) {
46
- return;
47
- }
48
- this._grecaptcha = grecaptcha;
49
- this.renderCaptchaElement();
50
- });
51
- this._subscriptions.add(subscription);
50
+ this.handleOnLoad();
51
+ this.handleLocaleChanges();
52
52
  }
53
53
  ngOnDestroy() {
54
54
  // Reset the captcha.
@@ -132,16 +132,47 @@ export class RecaptchaComponent extends BbRecaptchaMixinBase {
132
132
  this.type = this.type ?? this._config?.type;
133
133
  this.badge = this.badge ?? this._config?.badge;
134
134
  }
135
+ handleOnLoad() {
136
+ const subscription = this._loader.ready$.subscribe((grecaptcha) => {
137
+ if (grecaptcha == null || !(grecaptcha.render instanceof Function)) {
138
+ return;
139
+ }
140
+ this._grecaptcha = grecaptcha;
141
+ this.renderCaptchaElement();
142
+ });
143
+ this._subscriptions.add(subscription);
144
+ }
145
+ handleLocaleChanges() {
146
+ const subscription = this._localizeId.subscribe(locale => this.onLocaleChanged(locale));
147
+ this._subscriptions.add(subscription);
148
+ }
149
+ onLocaleChanged(locale) {
150
+ const element = this._elementRef?.nativeElement ?? null;
151
+ if (!element || !this._platform.isBrowser) {
152
+ return;
153
+ }
154
+ const frame = element?.querySelector('iframe');
155
+ if (!frame) {
156
+ return;
157
+ }
158
+ const src = frame.getAttribute('src');
159
+ const currentLanguageId = src.match(/hl=(.*?)&/).pop();
160
+ if (currentLanguageId === locale) {
161
+ return;
162
+ }
163
+ const newSrc = src.replace(/hl=(.*?)&/, `hl=${locale}&`);
164
+ this._renderer.setAttribute(frame, 'src', newSrc);
165
+ }
135
166
  }
136
- RecaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.RecaptchaLoader }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
137
- RecaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: RecaptchaComponent, selector: "bb-recaptcha", inputs: { grouped: "grouped", id: "id", siteKey: "siteKey", tabIndex: "tabIndex", type: "type", size: "size", theme: "theme", badge: "badge", errorMode: "errorMode" }, outputs: { resolved: "resolved", error: "error" }, host: { properties: { "class.grouped": "grouped", "attr.id": "this.id" }, classAttribute: "bb-recaptcha" }, providers: [
167
+ RecaptchaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.RecaptchaLoader }, { token: LOCALIZE_ID }, { token: RECAPTCHA_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
168
+ RecaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.1", type: RecaptchaComponent, selector: "bb-recaptcha", inputs: { grouped: "grouped", id: "id", siteKey: "siteKey", tabIndex: "tabIndex", type: "type", size: "size", theme: "theme", badge: "badge", errorMode: "errorMode" }, outputs: { resolved: "resolved", error: "error" }, host: { properties: { "class.grouped": "grouped", "attr.id": "this.id" }, classAttribute: "bb-recaptcha" }, providers: [
138
169
  {
139
170
  provide: NG_VALUE_ACCESSOR,
140
171
  useExisting: forwardRef(() => RecaptchaComponent),
141
172
  multi: true
142
173
  }
143
174
  ], exportAs: ["bbRecaptcha"], usesInheritance: true, ngImport: i0, template: "", styles: [".bb-recaptcha{display:block}.bb-recaptcha.grouped{margin-bottom:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: RecaptchaComponent, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.1", ngImport: i0, type: RecaptchaComponent, decorators: [{
145
176
  type: Component,
146
177
  args: [{ selector: 'bb-recaptcha', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'bbRecaptcha', providers: [
147
178
  {
@@ -153,7 +184,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
153
184
  'class': 'bb-recaptcha',
154
185
  '[class.grouped]': 'grouped'
155
186
  }, inputs: ['grouped'], preserveWhitespaces: false, template: "", styles: [".bb-recaptcha{display:block}.bb-recaptcha.grouped{margin-bottom:20px}\n"] }]
156
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.RecaptchaLoader }, { type: undefined, decorators: [{
187
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Platform }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.RecaptchaLoader }, { type: i3.Observable, decorators: [{
188
+ type: Inject,
189
+ args: [LOCALIZE_ID]
190
+ }] }, { type: undefined, decorators: [{
157
191
  type: Optional
158
192
  }, {
159
193
  type: Inject,
@@ -182,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
182
216
  }], error: [{
183
217
  type: Output
184
218
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vcmVjYXB0Y2hhL3NyYy9saWIvcmVjYXB0Y2hhL3JlY2FwdGNoYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3JlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS9yZWNhcHRjaGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQTRDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkcsT0FBTyxFQUF1QixZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBRWxDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLGVBQWU7Q0FDcEI7QUFFRCxNQUFNLG9CQUFvQixHQUVwQixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUF1QnBDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxvQkFBb0I7SUE4QnhELFlBQW9CLEtBQWEsRUFDYixXQUF1QixFQUN2QixPQUF3QixFQUNjLE9BQXlCO1FBQy9FLEtBQUssRUFBRSxDQUFDO1FBSlEsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ2MsWUFBTyxH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RUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSiw0RUM1Q0wsRUFBQTsyRkRvRGEsa0JBQWtCO2tCQXJCOUIsU0FBUzsrQkFDSSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksWUFDM0IsYUFBYSxhQUNaO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixRQUNLO3dCQUNGLE9BQU8sRUFBRSxjQUFjO3dCQUN2QixpQkFBaUIsRUFBRSxTQUFTO3FCQUMvQixVQUNPLENBQUMsU0FBUyxDQUFDLHVCQUNFLEtBQUs7OzBCQW1DYixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs0Q0E5QmYsRUFBRTtzQkFBbEMsV0FBVzt1QkFBQyxTQUFTOztzQkFBRyxLQUFLO2dCQUdyQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JFQ0FQVENIQV9DT05GSUcsIFJlY2FwdGNoYUNvbmZpZywgUmVjYXB0Y2hhRXJyb3JQYXJhbWV0ZXJzfSBmcm9tICcuLi9yZWNhcHRjaGEuaW50ZXJmYWNlJztcbmltcG9ydCB7SXNHcm91cGVkQ29uc3RydWN0b3IsIG1peGluR3JvdXBlZH0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7UmVjYXB0Y2hhTG9hZGVyfSBmcm9tICcuLi9yZWNhcHRjaGEtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuY2xhc3MgQmJSZWNhcHRjaGFCYXNlIHtcbn1cblxuY29uc3QgQmJSZWNhcHRjaGFNaXhpbkJhc2U6IElzR3JvdXBlZENvbnN0cnVjdG9yXG4gICAgJiB0eXBlb2YgQmJSZWNhcHRjaGFCYXNlXG4gICAgPSBtaXhpbkdyb3VwZWQoQmJSZWNhcHRjaGFCYXNlKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYi1yZWNhcHRjaGEnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZWNhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3JlY2FwdGNoYS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgZXhwb3J0QXM6ICdiYlJlY2FwdGNoYScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVjYXB0Y2hhQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2NsYXNzJzogJ2JiLXJlY2FwdGNoYScsXG4gICAgICAgICdbY2xhc3MuZ3JvdXBlZF0nOiAnZ3JvdXBlZCdcbiAgICB9LFxuICAgIGlucHV0czogWydncm91cGVkJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgUmVjYXB0Y2hhQ29tcG9uZW50IGV4dGVuZHMgQmJSZWNhcHRjaGFNaXhpbkJhc2UgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIEhvc3QgYmluZGluZ3MuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgQElucHV0KCkgaWQ6IHN0cmluZyA9IGBiYi1yZWNhcHRjaGEtJHtuZXh0VW5pcXVlSWQrK31gO1xuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIHNpdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIHRhYkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSB0eXBlOiBSZUNhcHRjaGFWMi5UeXBlIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgc2l6ZTogUmVDYXB0Y2hhVjIuU2l6ZSB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIHRoZW1lOiBSZUNhcHRjaGFWMi5UaGVtZSB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIGJhZGdlOiBSZUNhcHRjaGFWMi5CYWRnZSB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIGVycm9yTW9kZTogJ2hhbmRsZWQnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuXG4gICAgLy8gT3V0cHV0cy5cbiAgICBAT3V0cHV0KCkgcmVzb2x2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2FwdGNoYUVycm9yUGFyYW1ldGVycz4oKTtcblxuICAgIC8vIERhdGEuXG4gICAgcHJpdmF0ZSBfd2lkZ2V0SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2dyZWNhcHRjaGE6IFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2V4ZWN1dGVSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIEZvcm0gbWV0aG9kcy5cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIFN1YnNjcmlwdGlvbnMuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRlcjogUmVjYXB0Y2hhTG9hZGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnPzogUmVjYXB0Y2hhQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX2xvYWRlci5yZWFkeSQuc3Vic2NyaWJlKChncmVjYXB0Y2hhOiBSZUNhcHRjaGFWMi5SZUNhcHRjaGEpID0+IHtcbiAgICAgICAgICAgIGlmIChncmVjYXB0Y2hhID09IG51bGwgfHwgIShncmVjYXB0Y2hhLnJlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ3JlY2FwdGNoYSA9IGdyZWNhcHRjaGE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhcHRjaGFFbGVtZW50KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBjYXB0Y2hhLlxuICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYUVsZW1lbnQoKTtcblxuICAgICAgICAvLyBVbnN1YnNjcmliZSBvZiByZWFkeSBkYXRhLlxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjYXB0Y2hhIGlzIGludmlzaWJsZS5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0gJ2ludmlzaWJsZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSB3aWRnZXQgZXhpc3RzIGVsc2UgcmV0dXJuLlxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZVJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYXB0Y2hhLlxuICAgICAgICB0aGlzLl9ncmVjYXB0Y2hhLmV4ZWN1dGUodGhpcy5fd2lkZ2V0SWQpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2dyZWNhcHRjaGEuZ2V0UmVzcG9uc2UodGhpcy5fd2lkZ2V0SWQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVkLmVtaXQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBvblJlc29sdmUoZXZlbnQ6IHN0cmluZykge1xuICAgICAgICAvLyBFbWl0IHRoZSB2YWx1ZS5cbiAgICAgICAgdGhpcy5yZXNvbHZlZC5lbWl0KGV2ZW50KTtcblxuICAgICAgICAvLyBDYWxsIHRoZSBmb3JtIGZ1bmN0aW9ucy5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2U/LihldmVudCk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDYXB0Y2hhRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUmVDYXB0Y2hhVjIuUGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGJhZGdlOiB0aGlzLmJhZGdlLFxuICAgICAgICAgICAgc2l0ZWtleTogdGhpcy5zaXRlS2V5LFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgdGFiaW5kZXg6IHRoaXMudGFiSW5kZXgsXG4gICAgICAgICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZTogc3RyaW5nKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLm9uUmVzb2x2ZShyZXNwb25zZSkpLFxuICAgICAgICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLm9uUmVzb2x2ZShudWxsKSlcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5lcnJvck1vZGUgPT09ICdoYW5kbGVkJykge1xuICAgICAgICAgICAgcGFyYW1ldGVyc1snZXJyb3ItY2FsbGJhY2snXSA9ICguLi5hcmdzOiBSZWNhcHRjaGFFcnJvclBhcmFtZXRlcnMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5lcnJvci5lbWl0KGFyZ3MpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl93aWRnZXRJZCA9IHRoaXMuX2dyZWNhcHRjaGEucmVuZGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldENhcHRjaGFFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9ncmVjYXB0Y2hhLnJlc2V0KHRoaXMuX3dpZGdldElkKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUHJvcGVydGllcygpIHtcbiAgICAgICAgdGhpcy5zaXRlS2V5ID0gdGhpcy5zaXRlS2V5ID8/IHRoaXMuX2NvbmZpZz8uc2l0ZUtleTtcbiAgICAgICAgdGhpcy50aGVtZSA9IHRoaXMudGhlbWUgPz8gdGhpcy5fY29uZmlnPy50aGVtZTtcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy5zaXplID8/IHRoaXMuX2NvbmZpZz8uc2l6ZTtcbiAgICAgICAgdGhpcy50eXBlID0gdGhpcy50eXBlID8/IHRoaXMuX2NvbmZpZz8udHlwZTtcbiAgICAgICAgdGhpcy5iYWRnZSA9IHRoaXMuYmFkZ2UgPz8gdGhpcy5fY29uZmlnPy5iYWRnZTtcbiAgICB9XG5cbn1cbiIsIiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vcmVjYXB0Y2hhL3NyYy9saWIvcmVjYXB0Y2hhL3JlY2FwdGNoYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3JlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS9yZWNhcHRjaGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQTRDLE1BQU0sd0JBQXdCLENBQUM7QUFDbkcsT0FBTyxFQUF1QixZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRzdELE9BQU8sRUFBYSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBRTlDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLGVBQWU7Q0FDcEI7QUFFRCxNQUFNLG9CQUFvQixHQUVwQixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUF1QnBDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxvQkFBb0I7SUE4QnhELFlBQW9CLEtBQWEsRUFDYixTQUFtQixFQUNuQixTQUFvQixFQUNwQixXQUF1QixFQUN2QixPQUF3QixFQUNILFdBQStCLEVBQ2QsT0FBeUI7UUFDL0UsS0FBSyxFQUFFLENBQUM7UUFQUSxVQUFL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dEQsQ0FBQzs7K0dBMUxRLGtCQUFrQixrSkFtQ1AsV0FBVyxhQUNDLGdCQUFnQjttR0FwQ3ZDLGtCQUFrQiw4V0FkaEI7UUFDUDtZQUNJLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osNEVDOUNMLEVBQUE7MkZEc0RhLGtCQUFrQjtrQkFyQjlCLFNBQVM7K0JBQ0ksY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFlBQzNCLGFBQWEsYUFDWjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osUUFDSzt3QkFDRixPQUFPLEVBQUUsY0FBYzt3QkFDdkIsaUJBQWlCLEVBQUUsU0FBUztxQkFDL0IsVUFDTyxDQUFDLFNBQVMsQ0FBQyx1QkFDRSxLQUFLOzswQkFxQ2IsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0I7NENBakNmLEVBQUU7c0JBQWxDLFdBQVc7dUJBQUMsU0FBUzs7c0JBQUcsS0FBSztnQkFHckIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LCBSZW5kZXJlcjIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JFQ0FQVENIQV9DT05GSUcsIFJlY2FwdGNoYUNvbmZpZywgUmVjYXB0Y2hhRXJyb3JQYXJhbWV0ZXJzfSBmcm9tICcuLi9yZWNhcHRjaGEuaW50ZXJmYWNlJztcbmltcG9ydCB7SXNHcm91cGVkQ29uc3RydWN0b3IsIG1peGluR3JvdXBlZH0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TE9DQUxJWkVfSUR9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL2xvY2FsaXplJztcbmltcG9ydCB7UmVjYXB0Y2hhTG9hZGVyfSBmcm9tICcuLi9yZWNhcHRjaGEtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxubGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbmNsYXNzIEJiUmVjYXB0Y2hhQmFzZSB7XG59XG5cbmNvbnN0IEJiUmVjYXB0Y2hhTWl4aW5CYXNlOiBJc0dyb3VwZWRDb25zdHJ1Y3RvclxuICAgICYgdHlwZW9mIEJiUmVjYXB0Y2hhQmFzZVxuICAgID0gbWl4aW5Hcm91cGVkKEJiUmVjYXB0Y2hhQmFzZSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYmItcmVjYXB0Y2hhJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVjYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZWNhcHRjaGEuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGV4cG9ydEFzOiAnYmJSZWNhcHRjaGEnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJlY2FwdGNoYUNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdiYi1yZWNhcHRjaGEnLFxuICAgICAgICAnW2NsYXNzLmdyb3VwZWRdJzogJ2dyb3VwZWQnXG4gICAgfSxcbiAgICBpbnB1dHM6IFsnZ3JvdXBlZCddLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIFJlY2FwdGNoYUNvbXBvbmVudCBleHRlbmRzIEJiUmVjYXB0Y2hhTWl4aW5CYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBIb3N0IGJpbmRpbmdzLlxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBgYmItcmVjYXB0Y2hhLSR7bmV4dFVuaXF1ZUlkKyt9YDtcblxuICAgIC8vIElucHV0cy5cbiAgICBASW5wdXQoKSBzaXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgdHlwZTogUmVDYXB0Y2hhVjIuVHlwZSB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIHNpemU6IFJlQ2FwdGNoYVYyLlNpemUgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSB0aGVtZTogUmVDYXB0Y2hhVjIuVGhlbWUgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBiYWRnZTogUmVDYXB0Y2hhVjIuQmFkZ2UgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBlcnJvck1vZGU6ICdoYW5kbGVkJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcblxuICAgIC8vIE91dHB1dHMuXG4gICAgQE91dHB1dCgpIHJlc29sdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNhcHRjaGFFcnJvclBhcmFtZXRlcnM+KCk7XG5cbiAgICAvLyBEYXRhLlxuICAgIHByaXZhdGUgX3dpZGdldElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9ncmVjYXB0Y2hhOiBSZUNhcHRjaGFWMi5SZUNhcHRjaGEgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9leGVjdXRlUmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBGb3JtIG1ldGhvZHMuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBTdWJzY3JpcHRpb25zLlxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkZXI6IFJlY2FwdGNoYUxvYWRlcixcbiAgICAgICAgICAgICAgICBASW5qZWN0KExPQ0FMSVpFX0lEKSBwcml2YXRlIF9sb2NhbGl6ZUlkOiBPYnNlcnZhYmxlPHN0cmluZz4sXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChSRUNBUFRDSEFfQ09ORklHKSBwcml2YXRlIF9jb25maWc/OiBSZWNhcHRjaGFDb25maWcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPbkxvYWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2NhbGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBjYXB0Y2hhLlxuICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYUVsZW1lbnQoKTtcblxuICAgICAgICAvLyBVbnN1YnNjcmliZSBvZiByZWFkeSBkYXRhLlxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjYXB0Y2hhIGlzIGludmlzaWJsZS5cbiAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0gJ2ludmlzaWJsZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSB3aWRnZXQgZXhpc3RzIGVsc2UgcmV0dXJuLlxuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZXhlY3V0ZVJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYXB0Y2hhLlxuICAgICAgICB0aGlzLl9ncmVjYXB0Y2hhLmV4ZWN1dGUodGhpcy5fd2lkZ2V0SWQpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2dyZWNhcHRjaGEuZ2V0UmVzcG9uc2UodGhpcy5fd2lkZ2V0SWQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVkLmVtaXQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0Q2FwdGNoYUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBvblJlc29sdmUoZXZlbnQ6IHN0cmluZykge1xuICAgICAgICAvLyBFbWl0IHRoZSB2YWx1ZS5cbiAgICAgICAgdGhpcy5yZXNvbHZlZC5lbWl0KGV2ZW50KTtcblxuICAgICAgICAvLyBDYWxsIHRoZSBmb3JtIGZ1bmN0aW9ucy5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2U/LihldmVudCk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDYXB0Y2hhRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUmVDYXB0Y2hhVjIuUGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGJhZGdlOiB0aGlzLmJhZGdlLFxuICAgICAgICAgICAgc2l0ZWtleTogdGhpcy5zaXRlS2V5LFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgdGFiaW5kZXg6IHRoaXMudGFiSW5kZXgsXG4gICAgICAgICAgICB0aGVtZTogdGhpcy50aGVtZSxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZTogc3RyaW5nKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLm9uUmVzb2x2ZShyZXNwb25zZSkpLFxuICAgICAgICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLm9uUmVzb2x2ZShudWxsKSlcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5lcnJvck1vZGUgPT09ICdoYW5kbGVkJykge1xuICAgICAgICAgICAgcGFyYW1ldGVyc1snZXJyb3ItY2FsbGJhY2snXSA9ICguLi5hcmdzOiBSZWNhcHRjaGFFcnJvclBhcmFtZXRlcnMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5lcnJvci5lbWl0KGFyZ3MpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl93aWRnZXRJZCA9IHRoaXMuX2dyZWNhcHRjaGEucmVuZGVyKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldENhcHRjaGFFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5fd2lkZ2V0SWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLl9ncmVjYXB0Y2hhLnJlc2V0KHRoaXMuX3dpZGdldElkKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUHJvcGVydGllcygpIHtcbiAgICAgICAgdGhpcy5zaXRlS2V5ID0gdGhpcy5zaXRlS2V5ID8/IHRoaXMuX2NvbmZpZz8uc2l0ZUtleTtcbiAgICAgICAgdGhpcy50aGVtZSA9IHRoaXMudGhlbWUgPz8gdGhpcy5fY29uZmlnPy50aGVtZTtcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy5zaXplID8/IHRoaXMuX2NvbmZpZz8uc2l6ZTtcbiAgICAgICAgdGhpcy50eXBlID0gdGhpcy50eXBlID8/IHRoaXMuX2NvbmZpZz8udHlwZTtcbiAgICAgICAgdGhpcy5iYWRnZSA9IHRoaXMuYmFkZ2UgPz8gdGhpcy5fY29uZmlnPy5iYWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU9uTG9hZCgpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fbG9hZGVyLnJlYWR5JC5zdWJzY3JpYmUoKGdyZWNhcHRjaGE6IFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKGdyZWNhcHRjaGEgPT0gbnVsbCB8fCAhKGdyZWNhcHRjaGEucmVuZGVyIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9ncmVjYXB0Y2hhID0gZ3JlY2FwdGNoYTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FwdGNoYUVsZW1lbnQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUxvY2FsZUNoYW5nZXMoKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX2xvY2FsaXplSWQuc3Vic2NyaWJlKGxvY2FsZSA9PiB0aGlzLm9uTG9jYWxlQ2hhbmdlZChsb2NhbGUpKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTG9jYWxlQ2hhbmdlZChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCA/PyBudWxsO1xuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTtcbiAgICAgICAgaWYgKCFmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3JjID0gZnJhbWUuZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBzcmMubWF0Y2goL2hsPSguKj8pJi8pLnBvcCgpO1xuICAgICAgICBpZiAoY3VycmVudExhbmd1YWdlSWQgPT09IGxvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3U3JjID0gc3JjLnJlcGxhY2UoL2hsPSguKj8pJi8sIGBobD0ke2xvY2FsZX0mYCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShmcmFtZSwgJ3NyYycsIG5ld1NyYyk7XG4gICAgfVxuXG59XG4iLCIiXX0=