@bravobit/bb-foundation 0.15.4 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/auth/lib/auth.interceptor.d.ts +1 -1
  2. package/auth/lib/auth.service.d.ts +1 -1
  3. package/auth/package.json +5 -5
  4. package/collections/package.json +5 -5
  5. package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
  6. package/controls/lib/checkbox/checkbox.component.d.ts +27 -0
  7. package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
  8. package/controls/lib/controls.module.d.ts +7 -0
  9. package/controls/package.json +10 -0
  10. package/controls/public_api.d.ts +3 -0
  11. package/dashboard/package.json +5 -5
  12. package/dialog/package.json +5 -5
  13. package/elements/package.json +5 -5
  14. package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
  15. package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
  16. package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
  17. package/esm2020/auth/lib/auth.service.mjs +276 -0
  18. package/esm2020/auth/lib/auth.session.mjs +131 -0
  19. package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
  20. package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
  21. package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
  22. package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
  23. package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
  24. package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
  25. package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
  26. package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
  27. package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
  28. package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
  29. package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
  30. package/esm2020/auth/lib/permissions.service.mjs +56 -0
  31. package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
  32. package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
  33. package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
  34. package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
  35. package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
  36. package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
  37. package/esm2020/collections/lib/collection.mjs +98 -0
  38. package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
  39. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
  40. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
  41. package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
  42. package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
  43. package/esm2020/collections/lib/providers/api-collection.provider.mjs +68 -0
  44. package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
  45. package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
  46. package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
  47. package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
  48. package/esm2020/controls/lib/checkbox/checkbox.component.mjs +86 -0
  49. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
  50. package/esm2020/controls/lib/controls.module.mjs +16 -0
  51. package/esm2020/controls/public_api.mjs +4 -0
  52. package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
  53. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
  54. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
  55. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
  56. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
  57. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
  58. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
  59. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
  60. package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
  61. package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
  62. package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
  63. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
  64. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
  65. package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
  66. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
  67. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
  68. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
  69. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
  70. package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
  71. package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
  72. package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
  73. package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
  74. package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
  75. package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
  76. package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
  77. package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
  78. package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
  79. package/esm2020/elements/lib/button/button.component.mjs +61 -0
  80. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
  81. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
  82. package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
  83. package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
  84. package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
  85. package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
  86. package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
  87. package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
  88. package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
  89. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
  90. package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
  91. package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
  92. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
  93. package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
  94. package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
  95. package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
  96. package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
  97. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
  98. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
  99. package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
  100. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
  101. package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
  102. package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
  103. package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
  104. package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
  105. package/esm2020/http/lib/classes/http.config.mjs +29 -0
  106. package/esm2020/http/lib/classes/http.error.mjs +20 -0
  107. package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
  108. package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
  109. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
  110. package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
  111. package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
  112. package/{esm2015/lib/core/coercions/boolean-coercion.js → esm2020/lib/core/coercions/boolean-coercion.mjs} +0 -0
  113. package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
  114. package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
  115. package/{esm2015/lib/core/mixins/can-disable.js → esm2020/lib/core/mixins/can-disable.mjs} +0 -0
  116. package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +0 -0
  117. package/{esm2015/lib/core/mixins/can-load.js → esm2020/lib/core/mixins/can-load.mjs} +0 -0
  118. package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
  119. package/{esm2015/lib/core/mixins/has-error.js → esm2020/lib/core/mixins/has-error.mjs} +0 -0
  120. package/{esm2015/lib/core/mixins/is-focused.js → esm2020/lib/core/mixins/is-focused.mjs} +0 -0
  121. package/{esm2015/lib/core/mixins/is-grouped.js → esm2020/lib/core/mixins/is-grouped.mjs} +0 -0
  122. package/{esm2015/lib/core/mixins/is-readonly.js → esm2020/lib/core/mixins/is-readonly.mjs} +0 -0
  123. package/{esm2015/lib/core/mixins/is-required.js → esm2020/lib/core/mixins/is-required.mjs} +0 -0
  124. package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
  125. package/esm2020/lib/core/services/exif.service.mjs +163 -0
  126. package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
  127. package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
  128. package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
  129. package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
  130. package/esm2020/lib/core/services/patch.service.mjs +63 -0
  131. package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
  132. package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
  133. package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
  134. package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
  135. package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
  136. package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
  137. package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
  138. package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
  139. package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
  140. package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
  141. package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
  142. package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
  143. package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
  144. package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
  145. package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
  146. package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
  147. package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
  148. package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
  149. package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
  150. package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
  151. package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
  152. package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
  153. package/esm2020/localize/lib/localize.service.mjs +277 -0
  154. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
  155. package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
  156. package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
  157. package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
  158. package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
  159. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
  160. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
  161. package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
  162. package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
  163. package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
  164. package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
  165. package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
  166. package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
  167. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  168. package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
  169. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
  170. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
  171. package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
  172. package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
  173. package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
  174. package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
  175. package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
  176. package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
  177. package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
  178. package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
  179. package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
  180. package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
  181. package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
  182. package/esm2020/storage/lib/storage.service.mjs +109 -0
  183. package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
  184. package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
  185. package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
  186. package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
  187. package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
  188. package/esm2020/table/lib/components/table/table.component.mjs +191 -0
  189. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
  190. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
  191. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
  192. package/esm2020/table/lib/data/datasource.data.mjs +32 -0
  193. package/esm2020/table/lib/data/generic.data.mjs +72 -0
  194. package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
  195. package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
  196. package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
  197. package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
  198. package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
  199. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
  200. package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +33 -47
  201. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
  202. package/fesm2015/bravobit-bb-foundation-controls.mjs +123 -0
  203. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
  204. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
  205. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  206. package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
  207. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
  208. package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +193 -302
  209. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
  210. package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
  211. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
  212. package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
  213. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
  214. package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
  215. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
  216. package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
  217. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  218. package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
  219. package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  220. package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
  221. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
  222. package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
  223. package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
  224. package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +74 -64
  225. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
  226. package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
  227. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
  228. package/fesm2020/bravobit-bb-foundation-collections.mjs +434 -0
  229. package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
  230. package/fesm2020/bravobit-bb-foundation-controls.mjs +121 -0
  231. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
  232. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
  233. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  234. package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
  235. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
  236. package/fesm2020/bravobit-bb-foundation-elements.mjs +1993 -0
  237. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
  238. package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
  239. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
  240. package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
  241. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
  242. package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
  243. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
  244. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
  245. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  246. package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
  247. package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  248. package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
  249. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
  250. package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
  251. package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
  252. package/fesm2020/bravobit-bb-foundation.mjs +895 -0
  253. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
  254. package/http/package.json +5 -5
  255. package/localize/package.json +5 -5
  256. package/notifications/package.json +5 -5
  257. package/package.json +125 -8
  258. package/recaptcha/package.json +5 -5
  259. package/rxjs/package.json +5 -5
  260. package/storage/package.json +5 -5
  261. package/table/lib/components/table/table.component.d.ts +3 -0
  262. package/table/package.json +5 -5
  263. package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
  264. package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
  265. package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
  266. package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
  267. package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
  268. package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
  269. package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
  270. package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
  271. package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
  272. package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
  273. package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
  274. package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
  275. package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
  276. package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
  277. package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
  278. package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
  279. package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
  280. package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
  281. package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
  282. package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
  283. package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
  284. package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
  285. package/bundles/bravobit-bb-foundation-table.umd.js +0 -1070
  286. package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
  287. package/bundles/bravobit-bb-foundation.umd.js +0 -1440
  288. package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
  289. package/esm2015/auth/lib/auth.interceptor.js +0 -95
  290. package/esm2015/auth/lib/auth.service.js +0 -299
  291. package/esm2015/auth/lib/auth.session.js +0 -136
  292. package/esm2015/auth/lib/directives/permission.directive.js +0 -81
  293. package/esm2015/auth/lib/directives/role.directive.js +0 -38
  294. package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
  295. package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
  296. package/esm2015/auth/lib/permissions.service.js +0 -58
  297. package/esm2015/auth/lib/providers/email.provider.js +0 -26
  298. package/esm2015/auth/lib/providers/verify.provider.js +0 -20
  299. package/esm2015/collections/lib/collection.js +0 -104
  300. package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
  301. package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
  302. package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
  303. package/esm2015/collections/lib/providers/collection.provider.js +0 -14
  304. package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
  305. package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
  306. package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
  307. package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
  308. package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
  309. package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
  310. package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
  311. package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
  312. package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
  313. package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
  314. package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
  315. package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
  316. package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
  317. package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
  318. package/esm2015/elements/lib/button/button.component.js +0 -79
  319. package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
  320. package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
  321. package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
  322. package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
  323. package/esm2015/elements/lib/directives/input.directive.js +0 -139
  324. package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
  325. package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
  326. package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
  327. package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
  328. package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
  329. package/esm2015/elements/lib/icon/icon.component.js +0 -110
  330. package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
  331. package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
  332. package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
  333. package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
  334. package/esm2015/elements/lib/tag/tag.component.js +0 -26
  335. package/esm2015/http/lib/classes/http.config.js +0 -31
  336. package/esm2015/http/lib/classes/http.error.js +0 -21
  337. package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
  338. package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
  339. package/esm2015/lib/core/miscellaneous/validator.js +0 -86
  340. package/esm2015/lib/core/services/clipboard.service.js +0 -72
  341. package/esm2015/lib/core/services/exif.service.js +0 -168
  342. package/esm2015/lib/core/services/file-loader.service.js +0 -90
  343. package/esm2015/lib/core/services/image-converter.service.js +0 -130
  344. package/esm2015/lib/core/services/patch.service.js +0 -65
  345. package/esm2015/localize/lib/localize.dictionary.js +0 -137
  346. package/esm2015/localize/lib/localize.service.js +0 -282
  347. package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
  348. package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
  349. package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
  350. package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
  351. package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
  352. package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
  353. package/esm2015/storage/lib/storage.service.js +0 -111
  354. package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
  355. package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
  356. package/esm2015/table/lib/components/table/table.component.js +0 -196
  357. package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
  358. package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -141
  359. package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
  360. package/esm2015/table/lib/data/datasource.data.js +0 -32
  361. package/esm2015/table/lib/data/generic.data.js +0 -73
  362. package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
  363. package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
  364. package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
  365. package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
  366. package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
  367. package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
  368. package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
  369. package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
  370. package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
  371. package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
  372. package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
  373. package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
  374. package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
  375. package/fesm2015/bravobit-bb-foundation-table.js +0 -626
  376. package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
  377. package/fesm2015/bravobit-bb-foundation.js.map +0 -1
@@ -0,0 +1,135 @@
1
+ import { makeStateKey } from '@angular/platform-browser';
2
+ import { USE_AUTHORIZATION } from '@bravobit/bb-foundation/auth';
3
+ import { HttpContext } from '@angular/common/http';
4
+ import { firstValueFrom } from 'rxjs';
5
+ export class LocalizeDictionary {
6
+ constructor({ id, data, locale, supportedLanguages }, baseUrl, http) {
7
+ // Dictionary data.
8
+ this._data = {};
9
+ this._url = null;
10
+ this.isAbsoluteUrl = (url) => {
11
+ if (url.indexOf('//') === 0) {
12
+ return true;
13
+ }
14
+ if (url.indexOf('://') === -1) {
15
+ return false;
16
+ }
17
+ if (url.indexOf('.') === -1) {
18
+ return false;
19
+ }
20
+ if (url.indexOf('/') === -1) {
21
+ return false;
22
+ }
23
+ if (url.indexOf(':') > url.indexOf('/')) {
24
+ return false;
25
+ }
26
+ return url.indexOf('://') < url.indexOf('.');
27
+ };
28
+ this.recursiveSearchValue = (data, value) => {
29
+ if (typeof data === 'undefined' || typeof data === 'string') {
30
+ return undefined;
31
+ }
32
+ return data[value];
33
+ };
34
+ this._id = id;
35
+ this._locale = locale || 'en-US';
36
+ this._supportedLanguages = supportedLanguages || [];
37
+ this._http = http;
38
+ this.stateKey = makeStateKey(`locale:${this._id}`);
39
+ // Set the correct variable to the url or data.
40
+ if (typeof data === 'string') {
41
+ this._url = this.getUrl(data, baseUrl);
42
+ }
43
+ else {
44
+ this._data = data;
45
+ }
46
+ }
47
+ get id() {
48
+ return this._id;
49
+ }
50
+ get locale() {
51
+ return this._locale;
52
+ }
53
+ get supportedLanguages() {
54
+ return this._supportedLanguages;
55
+ }
56
+ get data() {
57
+ return this._data;
58
+ }
59
+ async load(data) {
60
+ // Check if data was passed.
61
+ if (data) {
62
+ this.setData(data);
63
+ return true;
64
+ }
65
+ // If the url was not set the data was already loaded
66
+ // return true because it was successful.
67
+ if (!this._url) {
68
+ return true;
69
+ }
70
+ try {
71
+ // Try to load the data via a HTTP request.
72
+ const context = new HttpContext().set(USE_AUTHORIZATION, false);
73
+ const result$ = this._http.get(this._url, { context });
74
+ const result = await firstValueFrom(result$);
75
+ // Set the data.
76
+ this.setData(result);
77
+ // Return true because it succeeded.
78
+ return true;
79
+ }
80
+ catch {
81
+ // Return false because it failed.
82
+ return false;
83
+ }
84
+ }
85
+ combine(extraDictionary, mode = 'prepend') {
86
+ // Validate that the locale matches.
87
+ if (extraDictionary.locale !== this._locale) {
88
+ return;
89
+ }
90
+ // Extract the extra data.
91
+ const extraData = extraDictionary.data || {};
92
+ // If the selected mode is prepend
93
+ // add the data in front.
94
+ if (mode === 'prepend') {
95
+ this._data = { ...extraData, ...this._data };
96
+ return;
97
+ }
98
+ // If the selected mode is append
99
+ // add the data in the back.
100
+ this._data = { ...this._data, ...extraData };
101
+ }
102
+ search(token) {
103
+ // Check if the token is present in the
104
+ // data, if so return it.
105
+ if (this._data[token]) {
106
+ return this._data[token];
107
+ }
108
+ // Values might be nested in objects this means we need
109
+ // to split them on the dot and search them recursively
110
+ // in the data.
111
+ const value = (token || '')
112
+ .split('.')
113
+ .filter(value => !!value)
114
+ .reduce(this.recursiveSearchValue, this._data);
115
+ // Check if the value is a string
116
+ // if this is true it can be returned.
117
+ if (typeof value === 'string') {
118
+ return value;
119
+ }
120
+ // This means the translation was incorrect.
121
+ return null;
122
+ }
123
+ setData(data) {
124
+ this._data = data ?? {};
125
+ this._url = null;
126
+ }
127
+ getUrl(value, baseUrl) {
128
+ const isAbsolute = this.isAbsoluteUrl(value);
129
+ if (isAbsolute || !baseUrl) {
130
+ return value;
131
+ }
132
+ return [baseUrl, value].join('/');
133
+ }
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuZGljdGlvbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxZQUFZLEVBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVwQyxNQUFNLE9BQU8sa0JBQWtCO0lBYzNCLFlBQVksRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBMkIsRUFBRSxPQUFlLEVBQUUsSUFBZ0I7UUFKL0csbUJBQW1CO1FBQ1gsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixTQUFJLEdBQWtCLElBQUksQ0FBQztRQTJIM0Isa0JBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekIsT0FBTyxLQUFLLENBQUM7YUFDaEI7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O0lBQ3JCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FrQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplRGljdGlvbmFyeVBhcmFtcywgTG9jYWxpemVFeHRyYURpY3Rpb25hcnl9IGZyb20gJy4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IHttYWtlU3RhdGVLZXksIFN0YXRlS2V5fSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7VVNFX0FVVEhPUklaQVRJT059IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL2F1dGgnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ29udGV4dH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZURpY3Rpb25hcnkge1xuXG4gICAgLy8gUmVhZG9ubHkgZGF0YS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvY2FsZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZExhbmd1YWdlczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaHR0cDogSHR0cENsaWVudDtcblxuICAgIHJlYWRvbmx5IHN0YXRlS2V5OiBTdGF0ZUtleTxvYmplY3Q+O1xuXG4gICAgLy8gRGljdGlvbmFyeSBkYXRhLlxuICAgIHByaXZhdGUgX2RhdGE6IG9iamVjdCA9IHt9O1xuICAgIHByaXZhdGUgX3VybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcih7aWQsIGRhdGEsIGxvY2FsZSwgc3VwcG9ydGVkTGFuZ3VhZ2VzfTogTG9jYWxpemVEaWN0aW9uYXJ5UGFyYW1zLCBiYXNlVXJsOiBzdHJpbmcsIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICAgICAgdGhpcy5faWQgPSBpZDtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gbG9jYWxlIHx8ICdlbi1VUyc7XG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZExhbmd1YWdlcyA9IHN1cHBvcnRlZExhbmd1YWdlcyB8fCBbXTtcbiAgICAgICAgdGhpcy5faHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuc3RhdGVLZXkgPSBtYWtlU3RhdGVLZXkoYGxvY2FsZToke3RoaXMuX2lkfWApO1xuXG4gICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCB2YXJpYWJsZSB0byB0aGUgdXJsIG9yIGRhdGEuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3VybCA9IHRoaXMuZ2V0VXJsKGRhdGEsIGJhc2VVcmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIGdldCBzdXBwb3J0ZWRMYW5ndWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBwb3J0ZWRMYW5ndWFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWQoZGF0YT86IG9iamVjdCB8IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZGF0YSB3YXMgcGFzc2VkLlxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgdXJsIHdhcyBub3Qgc2V0IHRoZSBkYXRhIHdhcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBiZWNhdXNlIGl0IHdhcyBzdWNjZXNzZnVsLlxuICAgICAgICBpZiAoIXRoaXMuX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGRhdGEgdmlhIGEgSFRUUCByZXF1ZXN0LlxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpLnNldChVU0VfQVVUSE9SSVpBVElPTiwgZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHAuZ2V0PG9iamVjdD4odGhpcy5fdXJsLCB7Y29udGV4dH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgZGF0YS5cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXN1bHQpO1xuXG4gICAgICAgICAgICAvLyBSZXR1cm4gdHJ1ZSBiZWNhdXNlIGl0IHN1Y2NlZWRlZC5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBmYWxzZSBiZWNhdXNlIGl0IGZhaWxlZC5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbWJpbmUoZXh0cmFEaWN0aW9uYXJ5OiBMb2NhbGl6ZUV4dHJhRGljdGlvbmFyeSwgbW9kZTogJ3ByZXBlbmQnIHwgJ2FwcGVuZCcgPSAncHJlcGVuZCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgbG9jYWxlIG1hdGNoZXMuXG4gICAgICAgIGlmIChleHRyYURpY3Rpb25hcnkubG9jYWxlICE9PSB0aGlzLl9sb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGV4dHJhIGRhdGEuXG4gICAgICAgIGNvbnN0IGV4dHJhRGF0YSA9IGV4dHJhRGljdGlvbmFyeS5kYXRhIHx8IHt9O1xuXG4gICAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBtb2RlIGlzIHByZXBlbmRcbiAgICAgICAgLy8gYWRkIHRoZSBkYXRhIGluIGZyb250LlxuICAgICAgICBpZiAobW9kZSA9PT0gJ3ByZXBlbmQnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gey4uLmV4dHJhRGF0YSwgLi4udGhpcy5fZGF0YX07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgbW9kZSBpcyBhcHBlbmRcbiAgICAgICAgLy8gYWRkIHRoZSBkYXRhIGluIHRoZSBiYWNrLlxuICAgICAgICB0aGlzLl9kYXRhID0gey4uLnRoaXMuX2RhdGEsIC4uLmV4dHJhRGF0YX07XG4gICAgfVxuXG4gICAgc2VhcmNoKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHRva2VuIGlzIHByZXNlbnQgaW4gdGhlXG4gICAgICAgIC8vIGRhdGEsIGlmIHNvIHJldHVybiBpdC5cbiAgICAgICAgaWYgKHRoaXMuX2RhdGFbdG9rZW5dKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVt0b2tlbl07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZXMgbWlnaHQgYmUgbmVzdGVkIGluIG9iamVjdHMgdGhpcyBtZWFucyB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIHNwbGl0IHRoZW0gb24gdGhlIGRvdCBhbmQgc2VhcmNoIHRoZW0gcmVjdXJzaXZlbHlcbiAgICAgICAgLy8gaW4gdGhlIGRhdGEuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRva2VuIHx8ICcnKVxuICAgICAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5yZWR1Y2UodGhpcy5yZWN1cnNpdmVTZWFyY2hWYWx1ZSwgdGhpcy5fZGF0YSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgdHJ1ZSBpdCBjYW4gYmUgcmV0dXJuZWQuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSB0cmFuc2xhdGlvbiB3YXMgaW5jb3JyZWN0LlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGEoZGF0YTogb2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhID8/IHt9O1xuICAgICAgICB0aGlzLl91cmwgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXJsKHZhbHVlOiBzdHJpbmcsIGJhc2VVcmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpc0Fic29sdXRlID0gdGhpcy5pc0Fic29sdXRlVXJsKHZhbHVlKTtcbiAgICAgICAgaWYgKGlzQWJzb2x1dGUgfHwgIWJhc2VVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbYmFzZVVybCwgdmFsdWVdLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWJzb2x1dGVVcmwgPSAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvLycpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignOi8vJykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignLycpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCc6JykgPiB1cmwuaW5kZXhPZignLycpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXJsLmluZGV4T2YoJzovLycpIDwgdXJsLmluZGV4T2YoJy4nKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWN1cnNpdmVTZWFyY2hWYWx1ZSA9IChkYXRhLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhW3ZhbHVlXTtcbiAgICB9O1xuXG59XG4iXX0=
@@ -35,15 +35,15 @@ export class LocalizeModule {
35
35
  };
36
36
  }
37
37
  }
38
- LocalizeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: LocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
39
- LocalizeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: LocalizeModule, declarations: [BbLocalize,
38
+ LocalizeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: LocalizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
39
+ LocalizeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: LocalizeModule, declarations: [BbLocalize,
40
40
  BbLocalizeString,
41
41
  BbLocalizeTemplate,
42
42
  BbLocalizeTemplateOrString], imports: [CommonModule, HttpClientModule], exports: [BbLocalize,
43
43
  BbLocalizeString,
44
44
  BbLocalizeTemplate] });
45
- LocalizeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: LocalizeModule, imports: [[CommonModule, HttpClientModule]] });
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: LocalizeModule, decorators: [{
45
+ LocalizeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: LocalizeModule, imports: [[CommonModule, HttpClientModule]] });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: LocalizeModule, decorators: [{
47
47
  type: NgModule,
48
48
  args: [{
49
49
  imports: [CommonModule, HttpClientModule],
@@ -66,4 +66,4 @@ export function initializeLocale(localize) {
66
66
  export function getLocale(localize) {
67
67
  return localize.locale;
68
68
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9sb2NhbGl6ZS9zcmMvbGliL2xvY2FsaXplLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBdUIsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBc0I7UUFDakMsT0FBTztZQUNILFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztnQkFDdkYsRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUM7Z0JBQzdELG1CQUFtQjtnQkFDbkIsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUM7Z0JBQzNDLHNCQUFzQjtnQkFDdEIsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7Z0JBQzlFLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2dCQUM5RSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztnQkFDekUscUJBQXFCO2dCQUNyQixFQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUM7Z0JBQ25FLHFCQUFxQjtnQkFDckIsUUFBUTthQUNYO1NBQ0osQ0FBQztJQUNOLENBQUM7OzRHQXJCUSxjQUFjOzZHQUFkLGNBQWMsaUJBWG5CLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLDBCQUEwQixhQUxwQixZQUFZLEVBQUUsZ0JBQWdCLGFBUXBDLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsa0JBQWtCOzZHQUdiLGNBQWMsWUFiZCxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQzs0RkFhaEMsY0FBYztrQkFkMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3pDLFlBQVksRUFBRTt3QkFDVixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQiwwQkFBMEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3FCQUNyQjtpQkFDSjs7QUEwQkQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCO0lBQy9DLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCO0lBQ3hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYkxvY2FsaXplVGVtcGxhdGVPclN0cmluZ30gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS10ZW1wbGF0ZS1vci1zdHJpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7QVBQX0lOSVRJQUxJWkVSLCBMT0NBTEVfSUQsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmJMb2NhbGl6ZVN0cmluZ30gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS1zdHJpbmcvbG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQge0xvY2FsaXplTG93ZXJjYXNlRnVuY3Rpb259IGZyb20gJy4vZnVuY3Rpb25zL2xvd2VyY2FzZS5mdW5jdGlvbic7XG5pbXBvcnQge0xvY2FsaXplVXBwZXJjYXNlRnVuY3Rpb259IGZyb20gJy4vZnVuY3Rpb25zL3VwcGVyY2FzZS5mdW5jdGlvbic7XG5pbXBvcnQge0JiTG9jYWxpemVUZW1wbGF0ZX0gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtMT0NBTElaRV9GVU5DVElPTn0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7TG9jYWxpemVNaXNzaW5nSGFuZGxlcn0gZnJvbSAnLi9oYW5kbGVycy9taXNzaW5nLmhhbmRsZXInO1xuaW1wb3J0IHtMb2NhbGl6ZURhdGVGdW5jdGlvbn0gZnJvbSAnLi9mdW5jdGlvbnMvZGF0ZS5mdW5jdGlvbic7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuaW1wb3J0IHtIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TG9jYWxpemV9IGZyb20gJy4vbG9jYWxpemUuc2VydmljZSc7XG5pbXBvcnQge0JiTG9jYWxpemV9IGZyb20gJy4vbG9jYWxpemUucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSHR0cENsaWVudE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEJiTG9jYWxpemUsXG4gICAgICAgIEJiTG9jYWxpemVTdHJpbmcsXG4gICAgICAgIEJiTG9jYWxpemVUZW1wbGF0ZSxcbiAgICAgICAgQmJMb2NhbGl6ZVRlbXBsYXRlT3JTdHJpbmdcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQmJMb2NhbGl6ZSxcbiAgICAgICAgQmJMb2NhbGl6ZVN0cmluZyxcbiAgICAgICAgQmJMb2NhbGl6ZVRlbXBsYXRlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZU1vZHVsZSB7XG5cbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IExvY2FsaXplQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMb2NhbGl6ZU1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IExvY2FsaXplTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgLy8gQW5ndWxhciBwcm92aWRlcnMuXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgZGVwczogW0xvY2FsaXplXSwgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZUxvY2FsZSwgbXVsdGk6IHRydWV9LFxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMT0NBTEVfSUQsIGRlcHM6IFtMb2NhbGl6ZV0sIHVzZUZhY3Rvcnk6IGdldExvY2FsZX0sXG4gICAgICAgICAgICAgICAgLy8gQ29uZmlnIHByb3ZpZGVyLlxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMb2NhbGl6ZUNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZ30sXG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gcHJvdmlkZXJzLlxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMT0NBTElaRV9GVU5DVElPTiwgdXNlQ2xhc3M6IExvY2FsaXplTG93ZXJjYXNlRnVuY3Rpb24sIG11bHRpOiB0cnVlfSxcbiAgICAgICAgICAgICAgICB7cHJvdmlkZTogTE9DQUxJWkVfRlVOQ1RJT04sIHVzZUNsYXNzOiBMb2NhbGl6ZVVwcGVyY2FzZUZ1bmN0aW9uLCBtdWx0aTogdHJ1ZX0sXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IExPQ0FMSVpFX0ZVTkNUSU9OLCB1c2VDbGFzczogTG9jYWxpemVEYXRlRnVuY3Rpb24sIG11bHRpOiB0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVyIHByb3ZpZGVycy5cbiAgICAgICAgICAgICAgICB7cHJvdmlkZTogTG9jYWxpemVNaXNzaW5nSGFuZGxlciwgdXNlQ2xhc3M6IExvY2FsaXplTWlzc2luZ0hhbmRsZXJ9LFxuICAgICAgICAgICAgICAgIC8vIFNlcnZpY2UgcHJvdmlkZXJzLlxuICAgICAgICAgICAgICAgIExvY2FsaXplXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplTG9jYWxlKGxvY2FsaXplOiBMb2NhbGl6ZSkge1xuICAgIHJldHVybiBsb2NhbGl6ZS5pbml0aWFsaXplKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGUobG9jYWxpemU6IExvY2FsaXplKSB7XG4gICAgcmV0dXJuIGxvY2FsaXplLmxvY2FsZTtcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9sb2NhbGl6ZS9zcmMvbGliL2xvY2FsaXplLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBdUIsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFnQjNDLE1BQU0sT0FBTyxjQUFjO0lBRXZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBc0I7UUFDakMsT0FBTztZQUNILFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRTtnQkFDUCxxQkFBcUI7Z0JBQ3JCLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztnQkFDdkYsRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUM7Z0JBQzdELG1CQUFtQjtnQkFDbkIsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUM7Z0JBQzNDLHNCQUFzQjtnQkFDdEIsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7Z0JBQzlFLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2dCQUM5RSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztnQkFDekUscUJBQXFCO2dCQUNyQixFQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUM7Z0JBQ25FLHFCQUFxQjtnQkFDckIsUUFBUTthQUNYO1NBQ0osQ0FBQztJQUNOLENBQUM7OzJHQXJCUSxjQUFjOzRHQUFkLGNBQWMsaUJBWG5CLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLDBCQUEwQixhQUxwQixZQUFZLEVBQUUsZ0JBQWdCLGFBUXBDLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsa0JBQWtCOzRHQUdiLGNBQWMsWUFiZCxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQzsyRkFhaEMsY0FBYztrQkFkMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3pDLFlBQVksRUFBRTt3QkFDVixVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQiwwQkFBMEI7cUJBQzdCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxVQUFVO3dCQUNWLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3FCQUNyQjtpQkFDSjs7QUEwQkQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQWtCO0lBQy9DLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCO0lBQ3hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYkxvY2FsaXplVGVtcGxhdGVPclN0cmluZ30gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS10ZW1wbGF0ZS1vci1zdHJpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7QVBQX0lOSVRJQUxJWkVSLCBMT0NBTEVfSUQsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmJMb2NhbGl6ZVN0cmluZ30gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS1zdHJpbmcvbG9jYWxpemUtc3RyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQge0xvY2FsaXplTG93ZXJjYXNlRnVuY3Rpb259IGZyb20gJy4vZnVuY3Rpb25zL2xvd2VyY2FzZS5mdW5jdGlvbic7XG5pbXBvcnQge0xvY2FsaXplVXBwZXJjYXNlRnVuY3Rpb259IGZyb20gJy4vZnVuY3Rpb25zL3VwcGVyY2FzZS5mdW5jdGlvbic7XG5pbXBvcnQge0JiTG9jYWxpemVUZW1wbGF0ZX0gZnJvbSAnLi92aWV3cy9sb2NhbGl6ZS10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtMT0NBTElaRV9GVU5DVElPTn0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7TG9jYWxpemVNaXNzaW5nSGFuZGxlcn0gZnJvbSAnLi9oYW5kbGVycy9taXNzaW5nLmhhbmRsZXInO1xuaW1wb3J0IHtMb2NhbGl6ZURhdGVGdW5jdGlvbn0gZnJvbSAnLi9mdW5jdGlvbnMvZGF0ZS5mdW5jdGlvbic7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuaW1wb3J0IHtIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TG9jYWxpemV9IGZyb20gJy4vbG9jYWxpemUuc2VydmljZSc7XG5pbXBvcnQge0JiTG9jYWxpemV9IGZyb20gJy4vbG9jYWxpemUucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSHR0cENsaWVudE1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEJiTG9jYWxpemUsXG4gICAgICAgIEJiTG9jYWxpemVTdHJpbmcsXG4gICAgICAgIEJiTG9jYWxpemVUZW1wbGF0ZSxcbiAgICAgICAgQmJMb2NhbGl6ZVRlbXBsYXRlT3JTdHJpbmdcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQmJMb2NhbGl6ZSxcbiAgICAgICAgQmJMb2NhbGl6ZVN0cmluZyxcbiAgICAgICAgQmJMb2NhbGl6ZVRlbXBsYXRlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZU1vZHVsZSB7XG5cbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IExvY2FsaXplQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMb2NhbGl6ZU1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IExvY2FsaXplTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgLy8gQW5ndWxhciBwcm92aWRlcnMuXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgZGVwczogW0xvY2FsaXplXSwgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZUxvY2FsZSwgbXVsdGk6IHRydWV9LFxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMT0NBTEVfSUQsIGRlcHM6IFtMb2NhbGl6ZV0sIHVzZUZhY3Rvcnk6IGdldExvY2FsZX0sXG4gICAgICAgICAgICAgICAgLy8gQ29uZmlnIHByb3ZpZGVyLlxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMb2NhbGl6ZUNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZ30sXG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gcHJvdmlkZXJzLlxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBMT0NBTElaRV9GVU5DVElPTiwgdXNlQ2xhc3M6IExvY2FsaXplTG93ZXJjYXNlRnVuY3Rpb24sIG11bHRpOiB0cnVlfSxcbiAgICAgICAgICAgICAgICB7cHJvdmlkZTogTE9DQUxJWkVfRlVOQ1RJT04sIHVzZUNsYXNzOiBMb2NhbGl6ZVVwcGVyY2FzZUZ1bmN0aW9uLCBtdWx0aTogdHJ1ZX0sXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IExPQ0FMSVpFX0ZVTkNUSU9OLCB1c2VDbGFzczogTG9jYWxpemVEYXRlRnVuY3Rpb24sIG11bHRpOiB0cnVlfSxcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVyIHByb3ZpZGVycy5cbiAgICAgICAgICAgICAgICB7cHJvdmlkZTogTG9jYWxpemVNaXNzaW5nSGFuZGxlciwgdXNlQ2xhc3M6IExvY2FsaXplTWlzc2luZ0hhbmRsZXJ9LFxuICAgICAgICAgICAgICAgIC8vIFNlcnZpY2UgcHJvdmlkZXJzLlxuICAgICAgICAgICAgICAgIExvY2FsaXplXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplTG9jYWxlKGxvY2FsaXplOiBMb2NhbGl6ZSkge1xuICAgIHJldHVybiBsb2NhbGl6ZS5pbml0aWFsaXplKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGUobG9jYWxpemU6IExvY2FsaXplKSB7XG4gICAgcmV0dXJuIGxvY2FsaXplLmxvY2FsZTtcbn1cbiJdfQ==
@@ -33,12 +33,12 @@ export class BbLocalize {
33
33
  ? { token: tokenOrParams, optional: false, data: {} }
34
34
  : tokenOrParams;
35
35
  // Return the combined params and options.
36
- return Object.assign(Object.assign({}, params), options);
36
+ return { ...params, ...options };
37
37
  }
38
38
  }
39
- BbLocalize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbLocalize, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
40
- BbLocalize.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbLocalize, name: "bbLocalize" });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbLocalize, decorators: [{
39
+ BbLocalize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbLocalize, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
40
+ BbLocalize.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbLocalize, name: "bbLocalize" });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbLocalize, decorators: [{
42
42
  type: Pipe,
43
43
  args: [{
44
44
  name: 'bbLocalize'
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImpo
46
46
  }], ctorParameters: function () { return [{ type: i1.Localize, decorators: [{
47
47
  type: Optional
48
48
  }] }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyxVQUFVO0lBRW5CLFlBQWdDLFNBQW1CO1FBQW5CLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxhQUFzQyxFQUFFLElBQXNCO1FBQ3BFLHFDQUFxQztRQUNyQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTyxhQUFhLENBQUM7U0FDeEI7UUFFRCxzQ0FBc0M7UUFDdEMsK0JBQStCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEUsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGFBQXNDLEVBQUUsSUFBc0I7UUFDM0YscUJBQXFCO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFMUIscURBQXFEO1FBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdELElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxPQUFPLFFBQVEsQ0FBQzthQUNuQjtZQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsK0NBQStDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDNUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUM7WUFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUVwQiwwQ0FBMEM7UUFDMUMsdUNBQVcsTUFBTSxHQUFLLE9BQU8sRUFBRTtJQUNuQyxDQUFDOzt3R0F6Q1EsVUFBVTtzR0FBVixVQUFVOzRGQUFWLFVBQVU7a0JBSHRCLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLFlBQVk7aUJBQ3JCOzswQkFHZ0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYWxpemVPcHRpb25zLCBMb2NhbGl6ZVBhcmFtc30gZnJvbSAnLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge09wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9jYWxpemV9IGZyb20gJy4vbG9jYWxpemUuc2VydmljZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnYmJMb2NhbGl6ZSdcbn0pXG5leHBvcnQgY2xhc3MgQmJMb2NhbGl6ZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfbG9jYWxpemU6IExvY2FsaXplKSB7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtKHRva2VuT3JQYXJhbXM6IHN0cmluZyB8IExvY2FsaXplUGFyYW1zLCBhcmdzPzogTG9jYWxpemVPcHRpb25zKSB7XG4gICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIGxvY2FsaXplIHNlcnZpY2VcbiAgICAgICAgLy8gZXhpc3RzIGluIHRoZSBwaXBlLlxuICAgICAgICBpZiAoIXRoaXMuX2xvY2FsaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5PclBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbWJpbmUgdGhlIHBhcmFtcyB3aXRoIHRoZSBvcHRpb25zXG4gICAgICAgIC8vIHRvIGZvcm0gdGhlIGxvY2FsaXplIHBhcmFtcy5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21iaW5lUGFyYW1zV2l0aE9wdGlvbnModG9rZW5PclBhcmFtcywgYXJncyk7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvY2FsaXplIHRoZSB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplLnRyYW5zbGF0ZShwYXJhbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tYmluZVBhcmFtc1dpdGhPcHRpb25zKHRva2VuT3JQYXJhbXM6IHN0cmluZyB8IExvY2FsaXplUGFyYW1zLCBhcmdzPzogTG9jYWxpemVPcHRpb25zKSB7XG4gICAgICAgIC8vIEdhdGhlciB0aGUgZXh0cmFzLlxuICAgICAgICBjb25zdCBleHRyYXMgPSBhcmdzIHx8IHt9O1xuXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIGtleXMgdG8gZmluZCB0aGUgc2V0IG9wdGlvbnMuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyhleHRyYXMpLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFzW2N1cnJlbnRdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNbY3VycmVudF0gPSBleHRyYXNbY3VycmVudF07XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdG9rZW4gdG8gYSBwYXJhbXMgb2JqZWN0LlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0eXBlb2YgdG9rZW5PclBhcmFtcyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8ge3Rva2VuOiB0b2tlbk9yUGFyYW1zLCBvcHRpb25hbDogZmFsc2UsIGRhdGE6IHt9fVxuICAgICAgICAgICAgOiB0b2tlbk9yUGFyYW1zO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgY29tYmluZWQgcGFyYW1zIGFuZCBvcHRpb25zLlxuICAgICAgICByZXR1cm4gey4uLnBhcmFtcywgLi4ub3B0aW9uc307XG4gICAgfVxuXG59XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyxVQUFVO0lBRW5CLFlBQWdDLFNBQW1CO1FBQW5CLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxhQUFzQyxFQUFFLElBQXNCO1FBQ3BFLHFDQUFxQztRQUNyQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTyxhQUFhLENBQUM7U0FDeEI7UUFFRCxzQ0FBc0M7UUFDdEMsK0JBQStCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEUsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGFBQXNDLEVBQUUsSUFBc0I7UUFDM0YscUJBQXFCO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFMUIscURBQXFEO1FBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdELElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxPQUFPLFFBQVEsQ0FBQzthQUNuQjtZQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsK0NBQStDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDNUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUM7WUFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUVwQiwwQ0FBMEM7UUFDMUMsT0FBTyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFDLENBQUM7SUFDbkMsQ0FBQzs7dUdBekNRLFVBQVU7cUdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUh0QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxZQUFZO2lCQUNyQjs7MEJBR2dCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplT3B0aW9ucywgTG9jYWxpemVQYXJhbXN9IGZyb20gJy4vaW50ZXJmYWNlcy9vcHRpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtPcHRpb25hbCwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvY2FsaXplfSBmcm9tICcuL2xvY2FsaXplLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2JiTG9jYWxpemUnXG59KVxuZXhwb3J0IGNsYXNzIEJiTG9jYWxpemUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZSkge1xuICAgIH1cblxuICAgIHRyYW5zZm9ybSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcywgYXJncz86IExvY2FsaXplT3B0aW9ucykge1xuICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBsb2NhbGl6ZSBzZXJ2aWNlXG4gICAgICAgIC8vIGV4aXN0cyBpbiB0aGUgcGlwZS5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2NhbGl6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuT3JQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21iaW5lIHRoZSBwYXJhbXMgd2l0aCB0aGUgb3B0aW9uc1xuICAgICAgICAvLyB0byBmb3JtIHRoZSBsb2NhbGl6ZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29tYmluZVBhcmFtc1dpdGhPcHRpb25zKHRva2VuT3JQYXJhbXMsIGFyZ3MpO1xuXG4gICAgICAgIC8vIFRyeSB0byBsb2NhbGl6ZSB0aGUgdmFsdWUuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6ZS50cmFuc2xhdGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVQYXJhbXNXaXRoT3B0aW9ucyh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcywgYXJncz86IExvY2FsaXplT3B0aW9ucykge1xuICAgICAgICAvLyBHYXRoZXIgdGhlIGV4dHJhcy5cbiAgICAgICAgY29uc3QgZXh0cmFzID0gYXJncyB8fCB7fTtcblxuICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBrZXlzIHRvIGZpbmQgdGhlIHNldCBvcHRpb25zLlxuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmtleXMoZXh0cmFzKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhc1tjdXJyZW50XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZpb3VzW2N1cnJlbnRdID0gZXh0cmFzW2N1cnJlbnRdO1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIHRva2VuIHRvIGEgcGFyYW1zIG9iamVjdC5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIHRva2VuT3JQYXJhbXMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHt0b2tlbjogdG9rZW5PclBhcmFtcywgb3B0aW9uYWw6IGZhbHNlLCBkYXRhOiB7fX1cbiAgICAgICAgICAgIDogdG9rZW5PclBhcmFtcztcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbWJpbmVkIHBhcmFtcyBhbmQgb3B0aW9ucy5cbiAgICAgICAgcmV0dXJuIHsuLi5wYXJhbXMsIC4uLm9wdGlvbnN9O1xuICAgIH1cblxufVxuIl19
@@ -0,0 +1,277 @@
1
+ import { LOCALIZE_FUNCTION } from './interfaces/functions.interfaces';
2
+ import { LOCALIZE_EXTRA_DICTIONARY } from './interfaces/dictionary.interfaces';
3
+ import { BASE_URL, LOCATION } from '@bravobit/bb-foundation';
4
+ import { Inject, Injectable, Optional } from '@angular/core';
5
+ import { LocalizeDictionary } from './localize.dictionary';
6
+ import { DOCUMENT } from '@angular/common';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "@bravobit/bb-foundation/storage";
10
+ import * as i3 from "@bravobit/bb-foundation";
11
+ import * as i4 from "@angular/platform-browser";
12
+ import * as i5 from "./interfaces/config.interfaces";
13
+ import * as i6 from "./handlers/missing.handler";
14
+ export class Localize {
15
+ constructor(_http, _storage, _platform, _languages, _state, _config, _missingHandler, _document, _location, _baseUrl, _functions, _extras) {
16
+ this._http = _http;
17
+ this._storage = _storage;
18
+ this._platform = _platform;
19
+ this._languages = _languages;
20
+ this._state = _state;
21
+ this._config = _config;
22
+ this._missingHandler = _missingHandler;
23
+ this._document = _document;
24
+ this._location = _location;
25
+ this._baseUrl = _baseUrl;
26
+ this._functions = _functions;
27
+ this._extras = _extras;
28
+ this._storageToken = 'bb-language-dictionary-id';
29
+ this.convertToParams = (tokenOrParams) => {
30
+ if (typeof tokenOrParams !== 'string') {
31
+ // Destruct the params from the object.
32
+ const { token, optional, data } = tokenOrParams;
33
+ // Make sure all parameters are valid
34
+ // by type safe adding them.
35
+ return { token: token, optional: optional || false, data: data || {} };
36
+ }
37
+ // If the parameter is a string fill in the blanks.
38
+ return { token: tokenOrParams, optional: false, data: {} };
39
+ };
40
+ this.getMatches = (value, substitutions) => {
41
+ // Get the matching substitutions.
42
+ const { start, end } = substitutions;
43
+ // Compose a regex that will find the matches.
44
+ const regex = new RegExp(`${start}([^${end}]+)${end}`, 'g');
45
+ // Execute the regex to find matches.
46
+ let match = regex.exec(value);
47
+ const matches = [];
48
+ while (match !== null) {
49
+ // Push a new match.
50
+ matches.push({
51
+ match: match[0],
52
+ token: match[1]
53
+ });
54
+ // Try to find more matches.
55
+ match = regex.exec(value);
56
+ }
57
+ // Return the processed value.
58
+ return matches.filter(item => !!item);
59
+ };
60
+ this.reload = () => this._location?.reload();
61
+ // Check if at least one language was passed in the config.
62
+ if (this._config.dictionary.length < 1) {
63
+ throw new Error('Localize: one or more languages should be supplied.');
64
+ }
65
+ // Gather the dictionaries.
66
+ this._dictionaries = this._config.dictionary.map(item => {
67
+ return new LocalizeDictionary(item, this._baseUrl, this._http);
68
+ });
69
+ // Save the best matching current dictionary.
70
+ this._currentDictionary = this.retrieveBestMatchingDictionary();
71
+ // Gather all the localize functions.
72
+ this._functionMiddleware = this._functions.reduce((previous, current) => {
73
+ previous[current.keyword()] = current;
74
+ return previous;
75
+ }, {});
76
+ this.renderDocumentLanguage();
77
+ }
78
+ get dictionaries() {
79
+ return this._dictionaries;
80
+ }
81
+ get current() {
82
+ return this._currentDictionary;
83
+ }
84
+ get locale() {
85
+ return this._currentDictionary.locale;
86
+ }
87
+ initialize() {
88
+ return async () => this.load(this._currentDictionary);
89
+ }
90
+ change(id, reload = true) {
91
+ // Try to fetch the dictionary.
92
+ const dictionary = this._dictionaries.find(item => item.id === id);
93
+ // Validate the dictionary exists.
94
+ if (!dictionary) {
95
+ throw new Error(`Localize: Could not find dictionary with id: "${id}"`);
96
+ }
97
+ // Save the language in the storage.
98
+ this._storage.cookie.set(this._storageToken, dictionary.id, {});
99
+ // Just quit if we don't need to reload.
100
+ if (!reload) {
101
+ return;
102
+ }
103
+ // We need to reload the application for the translations.
104
+ return this.reload();
105
+ }
106
+ clear(reload = true) {
107
+ // Remove the language in the local storage.
108
+ this._storage.cookie.remove(this._storageToken);
109
+ // Just quit if we don't need to reload.
110
+ if (!reload) {
111
+ return;
112
+ }
113
+ // We need to reload the application for the translations.
114
+ return this.reload();
115
+ }
116
+ translate(tokenOrParams) {
117
+ // 1. Convert to the params.
118
+ const params = this.convertToParams(tokenOrParams);
119
+ // 2. Try to find the translation in the dictionary.
120
+ const searchResult = this._currentDictionary.search(params.token);
121
+ // 3. Verify the translation was found.
122
+ if (!searchResult) {
123
+ return this._missingHandler.handle(params);
124
+ }
125
+ // 4. Find references in the translation that need to be translated as well.
126
+ const processResult = this.findReferencesInTranslation(searchResult);
127
+ // 5. Parse the interpolation data.
128
+ return this.parseInterpolationData(processResult, params.data);
129
+ }
130
+ parseInterpolationData(value, data) {
131
+ // Get the interpolation substitutions.
132
+ const substitutions = this.getSubstitutions('interpolation', ['{{', '}}']);
133
+ // Get all matches in the value.
134
+ const matches = this.getMatches(value, substitutions);
135
+ // Replace all matches with the parsed value.
136
+ return matches.reduce((previous, current) => {
137
+ // Try to parse the token.
138
+ const interpolatedToken = this.interpolateFunctionData(current.token, data);
139
+ // Replace the match with the parsed token.
140
+ return previous.replace(current.match, interpolatedToken);
141
+ }, `${value}`);
142
+ }
143
+ interpolateFunctionData(value, interpolationData) {
144
+ // Get the token and the methods by splitting
145
+ // on the pipe symbol.
146
+ const [token, ...methods] = value.split('|').map(item => item.trim());
147
+ // Get the value for the token from
148
+ // the interpolation data.
149
+ const interpolationValue = interpolationData[token] || token;
150
+ // Loop through all the middleware methods and try to
151
+ // conform the string to the given parameters.
152
+ return methods.reduce((string, middlewareName) => {
153
+ // Try to retrieve the middleware from the collection.
154
+ const middleware = this._functionMiddleware[middlewareName];
155
+ // If the middleware is missing return an error
156
+ // so that the user knows it was not found.
157
+ if (!middleware) {
158
+ return string;
159
+ }
160
+ // Execute the middleware function with the string.
161
+ return middleware.transform(string, this.locale);
162
+ }, `${interpolationValue}`);
163
+ }
164
+ findReferencesInTranslation(value) {
165
+ // Get the reference substitutions.
166
+ const substitutions = this.getSubstitutions('references', ['#(', ')']);
167
+ // Get all matches in the value.
168
+ const matches = this.getMatches(value, substitutions);
169
+ // Replace all matches with the translated value.
170
+ return matches.reduce((previous, current) => {
171
+ // Try to translate the token.
172
+ const translatedToken = this.translate(current.token);
173
+ // Replace the match with the translated token.
174
+ return previous.replace(current.match, translatedToken);
175
+ }, value);
176
+ }
177
+ getSubstitutions(type, defaultValue) {
178
+ const substitutions = (this._config
179
+ && this._config.substitutions
180
+ && this._config.substitutions[type]);
181
+ // Get the substitutions.
182
+ const value = (!substitutions || substitutions.length !== 2)
183
+ ? defaultValue
184
+ : substitutions;
185
+ // Escape both substitutions so that they
186
+ // can be used.
187
+ const escape = /[.*+?^${}()|[\]\\]/g;
188
+ const start = value[0].replace(escape, '\\$&');
189
+ const end = value[1].replace(escape, '\\$&');
190
+ // Return the substitutions.
191
+ return { start, end };
192
+ }
193
+ retrieveBestMatchingDictionary() {
194
+ // Get the dictionary based on storage.
195
+ const storageDictionary = this.getDictionaryFromStorage();
196
+ // Get the dictionary based on the supported language.
197
+ const browserDictionary = this.getBestBrowserMatchDictionary();
198
+ // Get the dictionary based on the first index.
199
+ const firstDictionary = this._dictionaries[0];
200
+ // Return the best matching dictionary.
201
+ return storageDictionary || browserDictionary || firstDictionary;
202
+ }
203
+ getDictionaryFromStorage() {
204
+ // Get dictionary id from the storage..
205
+ const dictionaryId = this._storage.cookie.get(this._storageToken);
206
+ // Return the dictionary based on the storage dictionary id.
207
+ return this._dictionaries.find(item => item.id === dictionaryId);
208
+ }
209
+ getBestBrowserMatchDictionary() {
210
+ // Loop through all browser languages and return the
211
+ // best matching dictionary.
212
+ return this._languages.all.map(({ code, region }) => {
213
+ const languageCode = [code, region].filter(data => !!data).join('-');
214
+ return this._dictionaries.find(item => item.supportedLanguages.includes(languageCode));
215
+ }).filter(item => !!item).find((_, index) => index === 0);
216
+ }
217
+ async load(dictionary) {
218
+ const data = this._state?.hasKey(dictionary.stateKey)
219
+ ? this._state?.get(dictionary.stateKey, {})
220
+ : null;
221
+ // Try to load the dictionary data.
222
+ const loaded = await dictionary.load(data);
223
+ // Verify the data was loaded.
224
+ if (!loaded) {
225
+ throw new Error(`Localize: Could not correctly fetch the data from: "${dictionary.id}"`);
226
+ }
227
+ if (!this._platform.isBrowser && this._state) {
228
+ this._state?.set(dictionary?.stateKey, dictionary?.data ?? {});
229
+ }
230
+ // Combine the extra dictionary data.
231
+ (this._extras || []).forEach(extraDictionary => dictionary.combine(extraDictionary));
232
+ // Return the dictionary.
233
+ return dictionary;
234
+ }
235
+ renderDocumentLanguage() {
236
+ const element = this._document?.documentElement;
237
+ if (!element) {
238
+ return;
239
+ }
240
+ element.lang = this._currentDictionary?.supportedLanguages?.[0] ?? this._currentDictionary?.locale;
241
+ }
242
+ }
243
+ Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Localize, deps: [{ token: i1.HttpClient }, { token: i2.Storage }, { token: i3.Platform }, { token: i3.Languages }, { token: i4.TransferState, optional: true }, { token: i5.LocalizeConfig, optional: true }, { token: i6.LocalizeMissingHandler }, { token: DOCUMENT, optional: true }, { token: LOCATION, optional: true }, { token: BASE_URL, optional: true }, { token: LOCALIZE_FUNCTION, optional: true }, { token: LOCALIZE_EXTRA_DICTIONARY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
244
+ Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Localize });
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Localize, decorators: [{
246
+ type: Injectable
247
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.Storage }, { type: i3.Platform }, { type: i3.Languages }, { type: i4.TransferState, decorators: [{
248
+ type: Optional
249
+ }] }, { type: i5.LocalizeConfig, decorators: [{
250
+ type: Optional
251
+ }] }, { type: i6.LocalizeMissingHandler }, { type: undefined, decorators: [{
252
+ type: Optional
253
+ }, {
254
+ type: Inject,
255
+ args: [DOCUMENT]
256
+ }] }, { type: undefined, decorators: [{
257
+ type: Optional
258
+ }, {
259
+ type: Inject,
260
+ args: [LOCATION]
261
+ }] }, { type: undefined, decorators: [{
262
+ type: Optional
263
+ }, {
264
+ type: Inject,
265
+ args: [BASE_URL]
266
+ }] }, { type: undefined, decorators: [{
267
+ type: Optional
268
+ }, {
269
+ type: Inject,
270
+ args: [LOCALIZE_FUNCTION]
271
+ }] }, { type: undefined, decorators: [{
272
+ type: Optional
273
+ }, {
274
+ type: Inject,
275
+ args: [LOCALIZE_EXTRA_DICTIONARY]
276
+ }] }]; } });
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBd0MsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRyxPQUFPLEVBQUMseUJBQXlCLEVBQTBCLE1BQU0sb0NBQW9DLENBQUM7QUFFdEcsT0FBTyxFQUFDLFFBQVEsRUFBYSxRQUFRLEVBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRixPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQUd6QyxNQUFNLE9BQU8sUUFBUTtJQVFqQixZQUFvQixLQUFpQixFQUNqQixRQUFpQixFQUNqQixTQUFtQixFQUNuQixVQUFxQixFQUNULE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ25DLGVBQXVDLEVBQ1QsU0FBZSxFQUNmLFNBQWUsRUFDZixRQUFpQixFQUNSLFVBQStCLEVBQ3ZCLE9BQW1DO1FBWGxGLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDVCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ25DLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUNULGNBQVMsR0FBVCxTQUFTLENBQU07UUFDZixjQUFTLEdBQVQsU0FBUyxDQUFNO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNSLGVB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T0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTztTQUNWO1FBRUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0lBQ3ZHLENBQUM7O3FHQTVRUSxRQUFRLHFQQWVlLFFBQVEsNkJBQ1IsUUFBUSw2QkFDUixRQUFRLDZCQUNSLGlCQUFpQiw2QkFDakIseUJBQXlCO3lHQW5CaEQsUUFBUTsyRkFBUixRQUFRO2tCQURwQixVQUFVOzswQkFhTSxRQUFROzswQkFDUixRQUFROzswQkFFUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3BDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMT0NBTElaRV9GVU5DVElPTiwgTG9jYWxpemVGdW5jdGlvbiwgTG9jYWxpemVGdW5jdGlvbk1hcH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7TE9DQUxJWkVfRVhUUkFfRElDVElPTkFSWSwgTG9jYWxpemVFeHRyYURpY3Rpb25hcnl9IGZyb20gJy4vaW50ZXJmYWNlcy9kaWN0aW9uYXJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IHtMb2NhbGl6ZU9wdGlvbnNEYXRhLCBMb2NhbGl6ZVBhcmFtc30gZnJvbSAnLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0JBU0VfVVJMLCBMYW5ndWFnZXMsIExPQ0FUSU9OLCBQbGF0Zm9ybX0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyfSBmcm9tICcuL2hhbmRsZXJzL21pc3NpbmcuaGFuZGxlcic7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9jYWxpemVEaWN0aW9uYXJ5fSBmcm9tICcuL2xvY2FsaXplLmRpY3Rpb25hcnknO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9zdG9yYWdlJztcbmltcG9ydCB7VHJhbnNmZXJTdGF0ZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZSB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpY3Rpb25hcmllczogTG9jYWxpemVEaWN0aW9uYXJ5W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudERpY3Rpb25hcnk6IExvY2FsaXplRGljdGlvbmFyeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mdW5jdGlvbk1pZGRsZXdhcmU6IExvY2FsaXplRnVuY3Rpb25NYXA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZVRva2VuOiBzdHJpbmcgPSAnYmItbGFuZ3VhZ2UtZGljdGlvbmFyeS1pZCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3N0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xhbmd1YWdlczogTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3N0YXRlOiBUcmFuc2ZlclN0YXRlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZzogTG9jYWxpemVDb25maWcsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbWlzc2luZ0hhbmRsZXI6IExvY2FsaXplTWlzc2luZ0hhbmRsZXIsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBhbnksXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChMT0NBVElPTikgcHJpdmF0ZSBfbG9jYXRpb24/OiBhbnksXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChCQVNFX1VSTCkgcHJpdmF0ZSBfYmFzZVVybD86IHN0cmluZyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMSVpFX0ZVTkNUSU9OKSBwcml2YXRlIF9mdW5jdGlvbnM/OiBMb2NhbGl6ZUZ1bmN0aW9uW10sXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTElaRV9FWFRSQV9ESUNUSU9OQVJZKSBwcml2YXRlIF9leHRyYXM/OiBMb2NhbGl6ZUV4dHJhRGljdGlvbmFyeVtdKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGF0IGxlYXN0IG9uZSBsYW5ndWFnZSB3YXMgcGFzc2VkIGluIHRoZSBjb25maWcuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZGljdGlvbmFyeS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsaXplOiBvbmUgb3IgbW9yZSBsYW5ndWFnZXMgc2hvdWxkIGJlIHN1cHBsaWVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2F0aGVyIHRoZSBkaWN0aW9uYXJpZXMuXG4gICAgICAgIHRoaXMuX2RpY3Rpb25hcmllcyA9IHRoaXMuX2NvbmZpZy5kaWN0aW9uYXJ5Lm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG9jYWxpemVEaWN0aW9uYXJ5KGl0ZW0sIHRoaXMuX2Jhc2VVcmwsIHRoaXMuX2h0dHApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTYXZlIHRoZSBiZXN0IG1hdGNoaW5nIGN1cnJlbnQgZGljdGlvbmFyeS5cbiAgICAgICAgdGhpcy5fY3VycmVudERpY3Rpb25hcnkgPSB0aGlzLnJldHJpZXZlQmVzdE1hdGNoaW5nRGljdGlvbmFyeSgpO1xuXG4gICAgICAgIC8vIEdhdGhlciBhbGwgdGhlIGxvY2FsaXplIGZ1bmN0aW9ucy5cbiAgICAgICAgdGhpcy5fZnVuY3Rpb25NaWRkbGV3YXJlID0gdGhpcy5fZnVuY3Rpb25zLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIHByZXZpb3VzW2N1cnJlbnQua2V5d29yZCgpXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLnJlbmRlckRvY3VtZW50TGFuZ3VhZ2UoKTtcbiAgICB9XG5cbiAgICBnZXQgZGljdGlvbmFyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGljdGlvbmFyaWVzO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudERpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgZ2V0IGxvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnREaWN0aW9uYXJ5LmxvY2FsZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gdGhpcy5sb2FkKHRoaXMuX2N1cnJlbnREaWN0aW9uYXJ5KTtcbiAgICB9XG5cbiAgICBjaGFuZ2UoaWQ6IHN0cmluZywgcmVsb2FkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRpY3Rpb25hcnkuXG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLl9kaWN0aW9uYXJpZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgZGljdGlvbmFyeSBleGlzdHMuXG4gICAgICAgIGlmICghZGljdGlvbmFyeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbGl6ZTogQ291bGQgbm90IGZpbmQgZGljdGlvbmFyeSB3aXRoIGlkOiBcIiR7aWR9XCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNhdmUgdGhlIGxhbmd1YWdlIGluIHRoZSBzdG9yYWdlLlxuICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5zZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4sIGRpY3Rpb25hcnkuaWQsIHt9KTtcblxuICAgICAgICAvLyBKdXN0IHF1aXQgaWYgd2UgZG9uJ3QgbmVlZCB0byByZWxvYWQuXG4gICAgICAgIGlmICghcmVsb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbG9hZCB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSB0cmFuc2xhdGlvbnMuXG4gICAgICAgIHJldHVybiB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGNsZWFyKHJlbG9hZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsYW5ndWFnZSBpbiB0aGUgbG9jYWwgc3RvcmFnZS5cbiAgICAgICAgdGhpcy5fc3RvcmFnZS5jb29raWUucmVtb3ZlKHRoaXMuX3N0b3JhZ2VUb2tlbik7XG5cbiAgICAgICAgLy8gSnVzdCBxdWl0IGlmIHdlIGRvbid0IG5lZWQgdG8gcmVsb2FkLlxuICAgICAgICBpZiAoIXJlbG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZWxvYWQgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgdHJhbnNsYXRpb25zLlxuICAgICAgICByZXR1cm4gdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUodG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMpIHtcbiAgICAgICAgLy8gMS4gQ29udmVydCB0byB0aGUgcGFyYW1zLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmNvbnZlcnRUb1BhcmFtcyh0b2tlbk9yUGFyYW1zKTtcblxuICAgICAgICAvLyAyLiBUcnkgdG8gZmluZCB0aGUgdHJhbnNsYXRpb24gaW4gdGhlIGRpY3Rpb25hcnkuXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IHRoaXMuX2N1cnJlbnREaWN0aW9uYXJ5LnNlYXJjaChwYXJhbXMudG9rZW4pO1xuXG4gICAgICAgIC8vIDMuIFZlcmlmeSB0aGUgdHJhbnNsYXRpb24gd2FzIGZvdW5kLlxuICAgICAgICBpZiAoIXNlYXJjaFJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pc3NpbmdIYW5kbGVyLmhhbmRsZShwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4gRmluZCByZWZlcmVuY2VzIGluIHRoZSB0cmFuc2xhdGlvbiB0aGF0IG5lZWQgdG8gYmUgdHJhbnNsYXRlZCBhcyB3ZWxsLlxuICAgICAgICBjb25zdCBwcm9jZXNzUmVzdWx0ID0gdGhpcy5maW5kUmVmZXJlbmNlc0luVHJhbnNsYXRpb24oc2VhcmNoUmVzdWx0KTtcblxuICAgICAgICAvLyA1LiBQYXJzZSB0aGUgaW50ZXJwb2xhdGlvbiBkYXRhLlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUludGVycG9sYXRpb25EYXRhKHByb2Nlc3NSZXN1bHQsIHBhcmFtcy5kYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlSW50ZXJwb2xhdGlvbkRhdGEodmFsdWU6IHN0cmluZywgZGF0YTogTG9jYWxpemVPcHRpb25zRGF0YSkge1xuICAgICAgICAvLyBHZXQgdGhlIGludGVycG9sYXRpb24gc3Vic3RpdHV0aW9ucy5cbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygnaW50ZXJwb2xhdGlvbicsIFsne3snLCAnfX0nXSk7XG5cbiAgICAgICAgLy8gR2V0IGFsbCBtYXRjaGVzIGluIHRoZSB2YWx1ZS5cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZ2V0TWF0Y2hlcyh2YWx1ZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBhbGwgbWF0Y2hlcyB3aXRoIHRoZSBwYXJzZWQgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgdG9rZW4uXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWRUb2tlbiA9IHRoaXMuaW50ZXJwb2xhdGVGdW5jdGlvbkRhdGEoY3VycmVudC50b2tlbiwgZGF0YSk7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG1hdGNoIHdpdGggdGhlIHBhcnNlZCB0b2tlbi5cbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cy5yZXBsYWNlKGN1cnJlbnQubWF0Y2gsIGludGVycG9sYXRlZFRva2VuKTtcbiAgICAgICAgfSwgYCR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnRlcnBvbGF0ZUZ1bmN0aW9uRGF0YSh2YWx1ZTogc3RyaW5nLCBpbnRlcnBvbGF0aW9uRGF0YTogTG9jYWxpemVPcHRpb25zRGF0YSkge1xuICAgICAgICAvLyBHZXQgdGhlIHRva2VuIGFuZCB0aGUgbWV0aG9kcyBieSBzcGxpdHRpbmdcbiAgICAgICAgLy8gb24gdGhlIHBpcGUgc3ltYm9sLlxuICAgICAgICBjb25zdCBbdG9rZW4sIC4uLm1ldGhvZHNdID0gdmFsdWUuc3BsaXQoJ3wnKS5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIHRva2VuIGZyb21cbiAgICAgICAgLy8gdGhlIGludGVycG9sYXRpb24gZGF0YS5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblZhbHVlID0gaW50ZXJwb2xhdGlvbkRhdGFbdG9rZW5dIHx8IHRva2VuO1xuXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIG1pZGRsZXdhcmUgbWV0aG9kcyBhbmQgdHJ5IHRvXG4gICAgICAgIC8vIGNvbmZvcm0gdGhlIHN0cmluZyB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgcmV0dXJuIG1ldGhvZHMucmVkdWNlKChzdHJpbmcsIG1pZGRsZXdhcmVOYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIG1pZGRsZXdhcmUgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZXdhcmUgPSB0aGlzLl9mdW5jdGlvbk1pZGRsZXdhcmVbbWlkZGxld2FyZU5hbWVdO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbWlkZGxld2FyZSBpcyBtaXNzaW5nIHJldHVybiBhbiBlcnJvclxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdXNlciBrbm93cyBpdCB3YXMgbm90IGZvdW5kLlxuICAgICAgICAgICAgaWYgKCFtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgbWlkZGxld2FyZSBmdW5jdGlvbiB3aXRoIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICByZXR1cm4gbWlkZGxld2FyZS50cmFuc2Zvcm0oc3RyaW5nLCB0aGlzLmxvY2FsZSk7XG4gICAgICAgIH0sIGAke2ludGVycG9sYXRpb25WYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRSZWZlcmVuY2VzSW5UcmFuc2xhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIEdldCB0aGUgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoJ3JlZmVyZW5jZXMnLCBbJyMoJywgJyknXSk7XG5cbiAgICAgICAgLy8gR2V0IGFsbCBtYXRjaGVzIGluIHRoZSB2YWx1ZS5cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZ2V0TWF0Y2hlcyh2YWx1ZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBhbGwgbWF0Y2hlcyB3aXRoIHRoZSB0cmFuc2xhdGVkIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gdHJhbnNsYXRlIHRoZSB0b2tlbi5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUb2tlbiA9IHRoaXMudHJhbnNsYXRlKGN1cnJlbnQudG9rZW4pO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBtYXRjaCB3aXRoIHRoZSB0cmFuc2xhdGVkIHRva2VuLlxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzLnJlcGxhY2UoY3VycmVudC5tYXRjaCwgdHJhbnNsYXRlZFRva2VuKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic3RpdHV0aW9ucyh0eXBlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9ICh0aGlzLl9jb25maWdcbiAgICAgICAgICAgICYmIHRoaXMuX2NvbmZpZy5zdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAmJiB0aGlzLl9jb25maWcuc3Vic3RpdHV0aW9uc1t0eXBlXSk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBzdWJzdGl0dXRpb25zLlxuICAgICAgICBjb25zdCB2YWx1ZSA9ICghc3Vic3RpdHV0aW9ucyB8fCBzdWJzdGl0dXRpb25zLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IHN1YnN0aXR1dGlvbnM7XG5cbiAgICAgICAgLy8gRXNjYXBlIGJvdGggc3Vic3RpdHV0aW9ucyBzbyB0aGF0IHRoZXlcbiAgICAgICAgLy8gY2FuIGJlIHVzZWQuXG4gICAgICAgIGNvbnN0IGVzY2FwZSA9IC9bLiorP14ke30oKXxbXFxdXFxcXF0vZztcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWx1ZVswXS5yZXBsYWNlKGVzY2FwZSwgJ1xcXFwkJicpO1xuICAgICAgICBjb25zdCBlbmQgPSB2YWx1ZVsxXS5yZXBsYWNlKGVzY2FwZSwgJ1xcXFwkJicpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgc3Vic3RpdHV0aW9ucy5cbiAgICAgICAgcmV0dXJuIHtzdGFydCwgZW5kfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJldHJpZXZlQmVzdE1hdGNoaW5nRGljdGlvbmFyeSgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IGJhc2VkIG9uIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEaWN0aW9uYXJ5ID0gdGhpcy5nZXREaWN0aW9uYXJ5RnJvbVN0b3JhZ2UoKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIHN1cHBvcnRlZCBsYW5ndWFnZS5cbiAgICAgICAgY29uc3QgYnJvd3NlckRpY3Rpb25hcnkgPSB0aGlzLmdldEJlc3RCcm93c2VyTWF0Y2hEaWN0aW9uYXJ5KCk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IGJhc2VkIG9uIHRoZSBmaXJzdCBpbmRleC5cbiAgICAgICAgY29uc3QgZmlyc3REaWN0aW9uYXJ5ID0gdGhpcy5fZGljdGlvbmFyaWVzWzBdO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgYmVzdCBtYXRjaGluZyBkaWN0aW9uYXJ5LlxuICAgICAgICByZXR1cm4gc3RvcmFnZURpY3Rpb25hcnkgfHwgYnJvd3NlckRpY3Rpb25hcnkgfHwgZmlyc3REaWN0aW9uYXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGljdGlvbmFyeUZyb21TdG9yYWdlKCkge1xuICAgICAgICAvLyBHZXQgZGljdGlvbmFyeSBpZCBmcm9tIHRoZSBzdG9yYWdlLi5cbiAgICAgICAgY29uc3QgZGljdGlvbmFyeUlkID0gdGhpcy5fc3RvcmFnZS5jb29raWUuZ2V0PHN0cmluZz4odGhpcy5fc3RvcmFnZVRva2VuKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIHN0b3JhZ2UgZGljdGlvbmFyeSBpZC5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcmllcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZGljdGlvbmFyeUlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJlc3RCcm93c2VyTWF0Y2hEaWN0aW9uYXJ5KCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGJyb3dzZXIgbGFuZ3VhZ2VzIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIGJlc3QgbWF0Y2hpbmcgZGljdGlvbmFyeS5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlcy5hbGwubWFwKCh7Y29kZSwgcmVnaW9ufSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gW2NvZGUsIHJlZ2lvbl0uZmlsdGVyKGRhdGEgPT4gISFkYXRhKS5qb2luKCctJyk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJpZXMuZmluZChpdGVtID0+IGl0ZW0uc3VwcG9ydGVkTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmd1YWdlQ29kZSkpO1xuICAgICAgICB9KS5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pLmZpbmQoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9QYXJhbXMgPSAodG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbk9yUGFyYW1zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRGVzdHJ1Y3QgdGhlIHBhcmFtcyBmcm9tIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjb25zdCB7dG9rZW4sIG9wdGlvbmFsLCBkYXRhfSA9IHRva2VuT3JQYXJhbXM7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbGwgcGFyYW1ldGVycyBhcmUgdmFsaWRcbiAgICAgICAgICAgIC8vIGJ5IHR5cGUgc2FmZSBhZGRpbmcgdGhlbS5cbiAgICAgICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuLCBvcHRpb25hbDogb3B0aW9uYWwgfHwgZmFsc2UsIGRhdGE6IGRhdGEgfHwge319O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyBmaWxsIGluIHRoZSBibGFua3MuXG4gICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuT3JQYXJhbXMsIG9wdGlvbmFsOiBmYWxzZSwgZGF0YToge319O1xuICAgIH07XG5cbiAgICBwcml2YXRlIGFzeW5jIGxvYWQoZGljdGlvbmFyeTogTG9jYWxpemVEaWN0aW9uYXJ5KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zdGF0ZT8uaGFzS2V5KGRpY3Rpb25hcnkuc3RhdGVLZXkpXG4gICAgICAgICAgICA/IHRoaXMuX3N0YXRlPy5nZXQoZGljdGlvbmFyeS5zdGF0ZUtleSwge30pXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGxvYWQgdGhlIGRpY3Rpb25hcnkgZGF0YS5cbiAgICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgZGljdGlvbmFyeS5sb2FkKGRhdGEpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgZGF0YSB3YXMgbG9hZGVkLlxuICAgICAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbGl6ZTogQ291bGQgbm90IGNvcnJlY3RseSBmZXRjaCB0aGUgZGF0YSBmcm9tOiBcIiR7ZGljdGlvbmFyeS5pZH1cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIgJiYgdGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlPy5zZXQ8b2JqZWN0PihkaWN0aW9uYXJ5Py5zdGF0ZUtleSwgZGljdGlvbmFyeT8uZGF0YSA/PyB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21iaW5lIHRoZSBleHRyYSBkaWN0aW9uYXJ5IGRhdGEuXG4gICAgICAgICh0aGlzLl9leHRyYXMgfHwgW10pLmZvckVhY2goZXh0cmFEaWN0aW9uYXJ5ID0+IGRpY3Rpb25hcnkuY29tYmluZShleHRyYURpY3Rpb25hcnkpKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGRpY3Rpb25hcnkuXG4gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRG9jdW1lbnRMYW5ndWFnZSgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2RvY3VtZW50Py5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5sYW5nID0gdGhpcy5fY3VycmVudERpY3Rpb25hcnk/LnN1cHBvcnRlZExhbmd1YWdlcz8uWzBdID8/IHRoaXMuX2N1cnJlbnREaWN0aW9uYXJ5Py5sb2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXRjaGVzID0gKHZhbHVlOiBzdHJpbmcsIHN1YnN0aXR1dGlvbnM6IHsgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAvLyBHZXQgdGhlIG1hdGNoaW5nIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHN1YnN0aXR1dGlvbnM7XG5cbiAgICAgICAgLy8gQ29tcG9zZSBhIHJlZ2V4IHRoYXQgd2lsbCBmaW5kIHRoZSBtYXRjaGVzLlxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCR7c3RhcnR9KFteJHtlbmR9XSspJHtlbmR9YCwgJ2cnKTtcblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSByZWdleCB0byBmaW5kIG1hdGNoZXMuXG4gICAgICAgIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWModmFsdWUpO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gW107XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBQdXNoIGEgbmV3IG1hdGNoLlxuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2hbMF0sXG4gICAgICAgICAgICAgICAgdG9rZW46IG1hdGNoWzFdXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgbW9yZSBtYXRjaGVzLlxuICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbG9hZCA9ICgpID0+IHRoaXMuX2xvY2F0aW9uPy5yZWxvYWQoKTtcblxufVxuIl19