@odx/angular 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (669) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/animations/lib/expand.d.ts +44 -0
  3. package/animations/lib/fade.d.ts +70 -0
  4. package/animations/lib/slide.d.ts +21 -0
  5. package/animations/lib/wait-for-child-animations.d.ts +38 -0
  6. package/breakpoints/lib/breakpoints.config.d.ts +38 -0
  7. package/breakpoints/lib/breakpoints.service.d.ts +43 -0
  8. package/breakpoints/lib/directives/match-breakpoints.directive.d.ts +36 -0
  9. package/breakpoints/lib/helpers/configure-breakpoint.d.ts +19 -0
  10. package/cdk/a11y/lib/directives/interactive.directive.d.ts +32 -0
  11. package/cdk/a11y/lib/directives/list-focus-manager-option.directive.d.ts +22 -0
  12. package/cdk/a11y/lib/directives/list-focus-manager.directive.d.ts +17 -0
  13. package/cdk/active-indicator/lib/active-indicator.directive.d.ts +63 -0
  14. package/cdk/autocomplete-control/lib/autocomplete-control.d.ts +53 -0
  15. package/cdk/checkbox-control/lib/checkbox-control.directive.d.ts +3 -0
  16. package/cdk/connected-overlay/lib/connected-overlay.service.d.ts +44 -0
  17. package/cdk/connected-overlay/lib/helpers/compute-overlay-position.d.ts +10 -0
  18. package/cdk/connected-overlay/lib/models/connected-overlay-ref.d.ts +49 -0
  19. package/cdk/custom-form-control/lib/custom-form-control.d.ts +108 -0
  20. package/cdk/custom-form-control/lib/input-control.directive.d.ts +75 -0
  21. package/cdk/dynamic-view/lib/dynamic-view.directive.d.ts +25 -0
  22. package/cdk/dynamic-view/lib/dynamic-view.service.d.ts +30 -0
  23. package/cdk/dynamic-view/lib/helpers/create-projectable-nodes.d.ts +22 -0
  24. package/cdk/dynamic-view/lib/helpers/is-dynamic-text-content.d.ts +22 -0
  25. package/cdk/dynamic-view/lib/helpers/is-dynamic-view.d.ts +22 -0
  26. package/cdk/dynamic-view/lib/models/dynamic-component-ref.d.ts +39 -0
  27. package/cdk/dynamic-view/lib/models/dynamic-template-ref.d.ts +36 -0
  28. package/cdk/dynamic-view/lib/tokens/dynamic-view-context.d.ts +4 -0
  29. package/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.d.ts +10 -0
  30. package/cdk/event-plugins/lib/event-plugins.config.d.ts +35 -0
  31. package/cdk/event-plugins/lib/models/event-plugin.d.ts +57 -0
  32. package/cdk/event-plugins/lib/plugins/debounce-event-plugin.d.ts +32 -0
  33. package/cdk/event-plugins/lib/plugins/defer-event-plugin.d.ts +24 -0
  34. package/cdk/expandable/lib/directives/expandable-container.directive.d.ts +41 -0
  35. package/cdk/expandable/lib/directives/expandable-item.directive.d.ts +47 -0
  36. package/cdk/option-control/lib/option-control.d.ts +47 -0
  37. package/cdk/radio-group-control/lib/radio-control.directive.d.ts +8 -0
  38. package/cdk/radio-group-control/lib/radio-group-control.directive.d.ts +11 -0
  39. package/components/accordion/lib/accordion.component.d.ts +8 -0
  40. package/components/accordion/lib/components/accordion-item/accordion-item.component.d.ts +37 -1
  41. package/components/accordion/lib/directives/accordion-item-title.d.ts +3 -0
  42. package/components/action-group/action-group.component.d.ts +6 -0
  43. package/components/area-header/area-header.component.d.ts +8 -0
  44. package/components/area-header/directives/area-header-content.directive.d.ts +3 -0
  45. package/components/area-header/directives/area-header-subtitle.directive.d.ts +3 -0
  46. package/components/autocomplete/lib/autocomplete.component.d.ts +18 -0
  47. package/components/avatar/lib/avatar.component.d.ts +8 -0
  48. package/components/badge/lib/badge.component.d.ts +10 -0
  49. package/components/badge/lib/badge.directive.d.ts +15 -0
  50. package/components/bar/lib/bar.component.d.ts +7 -0
  51. package/components/bar/lib/directives/bar-button.directive.d.ts +3 -0
  52. package/components/bar/lib/directives/bar-label.directive.d.ts +3 -0
  53. package/components/breadcrumbs/lib/breadcrumbs.component.d.ts +3 -0
  54. package/components/button/lib/button.component.d.ts +10 -0
  55. package/components/button-group/lib/button-group.component.d.ts +15 -0
  56. package/components/calendar/lib/calendar.component.d.ts +48 -0
  57. package/components/calendar/lib/calendar.config.d.ts +17 -0
  58. package/components/calendar/lib/calendar.service.d.ts +48 -0
  59. package/components/calendar/lib/components/calendar-header/calendar-header.component.d.ts +24 -0
  60. package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +6 -0
  61. package/components/calendar/lib/components/calendar-year/calendar-year.component.d.ts +6 -0
  62. package/components/calendar/lib/components/calendar-years/calendar-years.component.d.ts +6 -0
  63. package/components/calendar/lib/daterange.service.d.ts +16 -0
  64. package/components/calendar/lib/directives/calendar-cell.directive.d.ts +37 -0
  65. package/components/calendar/lib/directives/calendar-view.directive.d.ts +41 -0
  66. package/components/calendar/lib/pipes/date-label.pipe.d.ts +5 -0
  67. package/components/calendar/lib/services/calendar-month.service.d.ts +1 -0
  68. package/components/calendar/lib/services/calendar-year.service.d.ts +1 -0
  69. package/components/calendar/lib/services/calendar-years.service.d.ts +1 -0
  70. package/components/calendar/lib/utils/check-cell-in-range.d.ts +1 -0
  71. package/components/calendar/lib/utils/check-identical-date.d.ts +1 -0
  72. package/components/calendar/lib/utils/get-A11y-label.d.ts +1 -0
  73. package/components/calendar/lib/utils/is-date-disabled.d.ts +1 -0
  74. package/components/calendar/lib/utils/parse-date.d.ts +1 -0
  75. package/components/calendar/lib/utils/validate-daterange.d.ts +1 -0
  76. package/components/calendar/lib/utils/validate-max-date.d.ts +1 -0
  77. package/components/calendar/lib/utils/validate-min-date.d.ts +1 -0
  78. package/components/calendar/lib/utils/validate-next-date-set.d.ts +1 -0
  79. package/components/calendar/lib/utils/validate-previous-date-set.d.ts +1 -0
  80. package/components/checkbox/lib/checkbox.component.d.ts +32 -0
  81. package/components/checkbox/lib/checkbox.validator.d.ts +23 -0
  82. package/components/chip/lib/components/chip/chip.component.d.ts +14 -0
  83. package/components/chip/lib/components/chip-list/chip-list.component.d.ts +3 -0
  84. package/components/chip/lib/components/chip-list-row/chip-list-row.component.d.ts +3 -0
  85. package/components/circular-progress/lib/circular-progress.component.d.ts +20 -0
  86. package/components/content-box/lib/content-box.component.d.ts +3 -0
  87. package/components/content-box/lib/directives/content-box-footer.directive.d.ts +3 -0
  88. package/components/content-box/lib/directives/content-box-header.directive.d.ts +3 -0
  89. package/components/datepicker/lib/datepicker.component.d.ts +47 -0
  90. package/components/datepicker/lib/datepicker.config.d.ts +19 -0
  91. package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +30 -0
  92. package/components/datepicker/lib/utils/get-datepicker-input-pattern.d.ts +2 -0
  93. package/components/datepicker/lib/utils/get-datepicker-input-value-as-date.d.ts +1 -0
  94. package/components/daterangepicker/lib/daterangepicker.component.d.ts +89 -0
  95. package/components/daterangepicker/lib/daterangepicker.config.d.ts +19 -0
  96. package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +30 -0
  97. package/components/daterangepicker/lib/range.validator.d.ts +15 -0
  98. package/components/daterangepicker/lib/required.validator.d.ts +6 -0
  99. package/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.d.ts +2 -0
  100. package/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.d.ts +1 -0
  101. package/components/dropdown/lib/dropdown.component.d.ts +16 -0
  102. package/components/dropdown/lib/dropdown.directive.d.ts +67 -0
  103. package/components/dropdown/lib/helpers/close-current-dropdown.d.ts +5 -0
  104. package/components/error-page/lib/error-page.component.d.ts +7 -0
  105. package/components/error-page/lib/error-page.config.d.ts +18 -0
  106. package/components/footer/lib/footer.component.d.ts +9 -6
  107. package/components/footer/lib/footer.config.d.ts +2 -0
  108. package/components/form-field/lib/components/form-field-info/form-field-info.component.d.ts +13 -0
  109. package/components/form-field/lib/components/form-group/form-group.component.d.ts +16 -0
  110. package/components/form-field/lib/directives/form-field-control.directive.d.ts +5 -0
  111. package/components/form-field/lib/directives/form-field-error.directive.d.ts +6 -0
  112. package/components/form-field/lib/directives/form-field-hint.directive.d.ts +3 -0
  113. package/components/form-field/lib/directives/form-field-label.directive.d.ts +3 -0
  114. package/components/form-field/lib/directives/form.directive.d.ts +13 -0
  115. package/components/form-field/lib/form-field.component.d.ts +20 -0
  116. package/components/form-field/lib/form-field.service.d.ts +42 -0
  117. package/components/form-field/lib/services/form-field-error.service.d.ts +24 -0
  118. package/components/header/lib/directives/header-avatar.directive.d.ts +4 -0
  119. package/components/header/lib/directives/header-title.directive.d.ts +3 -0
  120. package/components/header/lib/header.component.d.ts +3 -0
  121. package/components/header-navigation/lib/directives/header-navigation-link.directive.d.ts +3 -0
  122. package/components/header-navigation/lib/header-navigation.component.d.ts +6 -0
  123. package/components/icon/lib/helpers/unpack-icon-identifier.d.ts +14 -0
  124. package/components/icon/lib/icon.component.d.ts +24 -0
  125. package/components/icon/lib/icon.config.d.ts +26 -0
  126. package/components/inline-message/lib/inline-message.component.d.ts +13 -0
  127. package/components/link/link.directive.d.ts +3 -0
  128. package/components/list/lib/components/expandable-list-item/expandable-list-item.component.d.ts +6 -0
  129. package/components/list/lib/components/list-item/list-item.component.d.ts +17 -1
  130. package/components/list/lib/list.component.d.ts +5 -0
  131. package/components/loading-spinner/lib/loading-spinner.component.d.ts +8 -0
  132. package/components/loading-spinner/lib/loading-spinner.directive.d.ts +22 -0
  133. package/components/logo/logo.directive.d.ts +15 -0
  134. package/components/main-menu/lib/directives/main-menu-button.directive.d.ts +5 -1
  135. package/components/main-menu/lib/directives/main-menu-close.directive.d.ts +3 -0
  136. package/components/main-menu/lib/directives/main-menu-item.directive.d.ts +16 -0
  137. package/components/main-menu/lib/helpers/create-main-menu-links.d.ts +1 -0
  138. package/components/main-menu/lib/main-menu.component.d.ts +42 -0
  139. package/components/main-menu/lib/main-menu.config.d.ts +31 -0
  140. package/components/main-menu/lib/main-menu.service.d.ts +28 -0
  141. package/components/mainfilter-group/lib/mainfilter-group.component.d.ts +4 -0
  142. package/components/menu/lib/directives/menu-item.directive.d.ts +6 -0
  143. package/components/menu/lib/menu.component.d.ts +13 -1
  144. package/components/menu/lib/menu.directive.d.ts +31 -0
  145. package/components/modal/lib/components/basic-modal/basic-modal.component.d.ts +14 -0
  146. package/components/modal/lib/components/modal-footer/modal-footer.component.d.ts +3 -0
  147. package/components/modal/lib/components/modal-header/modal-header.component.d.ts +9 -0
  148. package/components/modal/lib/components/modal-hero/modal-hero.component.d.ts +21 -0
  149. package/components/modal/lib/directives/modal-close.directive.d.ts +25 -1
  150. package/components/modal/lib/directives/modal-content.directive.d.ts +3 -0
  151. package/components/modal/lib/directives/modal-dismiss.directive.d.ts +18 -1
  152. package/components/modal/lib/helpers/inject-modal-ref.d.ts +21 -0
  153. package/components/modal/lib/helpers/provide-modal-ref.d.ts +9 -0
  154. package/components/modal/lib/modal.component.d.ts +25 -0
  155. package/components/modal/lib/modal.config.d.ts +33 -0
  156. package/components/modal/lib/modal.directive.d.ts +29 -0
  157. package/components/modal/lib/modal.service.d.ts +54 -0
  158. package/components/modal/lib/models/modal-ref.d.ts +34 -0
  159. package/components/navigation-back/lib/navigation-back.component.d.ts +3 -0
  160. package/components/notification/lib/components/notification-center/notification-center.component.d.ts +0 -2
  161. package/components/notification/lib/directives/notification-center.directive.d.ts +18 -4
  162. package/components/notification/lib/helpers/get-notifications-by-tag.d.ts +1 -0
  163. package/components/notification/lib/helpers/sort-notifications.d.ts +1 -0
  164. package/components/notification/lib/helpers/to-notification-collection.d.ts +1 -0
  165. package/components/notification/lib/models/notification-feature.d.ts +15 -0
  166. package/components/notification/lib/notification.config.d.ts +54 -0
  167. package/components/notification/lib/notification.logger.d.ts +1 -0
  168. package/components/notification/lib/notification.service.d.ts +55 -0
  169. package/components/notification/lib/notification.tokens.d.ts +3 -0
  170. package/components/notification/lib/services/notification-center.service.d.ts +9 -0
  171. package/components/paginator/lib/paginator.component.d.ts +89 -0
  172. package/components/paginator/lib/paginator.config.d.ts +24 -2
  173. package/components/progress/lib/progress.component.d.ts +15 -0
  174. package/components/radio-group/lib/components/radio-button/radio-button.component.d.ts +18 -1
  175. package/components/radio-group/lib/radio-group.component.d.ts +11 -0
  176. package/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.d.ts +19 -0
  177. package/components/rail-navigation/lib/rail-navigation.component.d.ts +26 -0
  178. package/components/rich-list/lib/components/rich-list-content/rich-list-content.component.d.ts +4 -0
  179. package/components/rich-list/lib/components/rich-list-header/rich-list-header.component.d.ts +4 -0
  180. package/components/rich-list/lib/components/rich-list-item/rich-list-item.component.d.ts +9 -1
  181. package/components/rich-list/lib/rich-list.component.d.ts +9 -2
  182. package/components/select/lib/components/select-option/select-option.component.d.ts +39 -2
  183. package/components/select/lib/directives/select-input-control.directive.d.ts +11 -0
  184. package/components/select/lib/pipes/select-search-filter.pipe.d.ts +10 -0
  185. package/components/select/lib/select.component.d.ts +59 -0
  186. package/components/slider/lib/slider.directive.d.ts +19 -0
  187. package/components/spinbox/lib/spinbox.component.d.ts +16 -0
  188. package/components/switch/lib/switch.component.d.ts +10 -0
  189. package/components/switch/lib/switch.validator.d.ts +12 -0
  190. package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +28 -0
  191. package/components/tab-bar/lib/tab-bar.component.d.ts +69 -0
  192. package/components/table/lib/components/check-cell/check-cell.component.d.ts +18 -0
  193. package/components/table/lib/components/header-title/header-title.component.d.ts +33 -1
  194. package/components/table/lib/directives/table-cell.directive.d.ts +4 -0
  195. package/components/table/lib/directives/table-row.directive.d.ts +4 -0
  196. package/components/table/lib/table.component.d.ts +36 -0
  197. package/components/timepicker/lib/timepicker.component.d.ts +11 -2
  198. package/components/timepicker/lib/utils/generate-time-stamps.d.ts +2 -1
  199. package/components/timepicker/lib/utils/ngx-mask-helper.d.ts +2 -2
  200. package/components/toast/lib/components/toast-item/toast-item.component.d.ts +5 -4
  201. package/components/toast/lib/models/toast.d.ts +4 -2
  202. package/components/toast/lib/toast.config.d.ts +26 -0
  203. package/components/toast/lib/toast.service.d.ts +35 -0
  204. package/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.d.ts +11 -0
  205. package/components/toggle-button-group/lib/toggle-button-group.component.d.ts +12 -0
  206. package/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.d.ts +7 -0
  207. package/components/tooltip/lib/tooltip.component.d.ts +20 -0
  208. package/components/tooltip/lib/tooltip.directive.d.ts +35 -0
  209. package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +34 -0
  210. package/components/wizard/lib/wizard.component.d.ts +20 -0
  211. package/esm2022/animations/lib/expand.mjs +45 -1
  212. package/esm2022/animations/lib/fade.mjs +71 -1
  213. package/esm2022/animations/lib/slide.mjs +22 -1
  214. package/esm2022/animations/lib/wait-for-child-animations.mjs +39 -1
  215. package/esm2022/breakpoints/lib/breakpoints.config.mjs +39 -1
  216. package/esm2022/breakpoints/lib/breakpoints.service.mjs +44 -1
  217. package/esm2022/breakpoints/lib/directives/match-breakpoints.directive.mjs +37 -1
  218. package/esm2022/breakpoints/lib/helpers/configure-breakpoint.mjs +20 -1
  219. package/esm2022/cdk/a11y/lib/directives/interactive.directive.mjs +33 -1
  220. package/esm2022/cdk/a11y/lib/directives/list-focus-manager-option.directive.mjs +23 -1
  221. package/esm2022/cdk/a11y/lib/directives/list-focus-manager.directive.mjs +18 -1
  222. package/esm2022/cdk/active-indicator/lib/active-indicator.directive.mjs +64 -1
  223. package/esm2022/cdk/autocomplete-control/lib/autocomplete-control.mjs +40 -2
  224. package/esm2022/cdk/checkbox-control/lib/checkbox-control.directive.mjs +4 -1
  225. package/esm2022/cdk/connected-overlay/lib/connected-overlay.service.mjs +45 -1
  226. package/esm2022/cdk/connected-overlay/lib/helpers/compute-overlay-position.mjs +11 -1
  227. package/esm2022/cdk/connected-overlay/lib/models/connected-overlay-ref.mjs +50 -1
  228. package/esm2022/cdk/custom-form-control/lib/custom-form-control.mjs +109 -3
  229. package/esm2022/cdk/custom-form-control/lib/input-control.directive.mjs +76 -1
  230. package/esm2022/cdk/dynamic-view/lib/dynamic-view.directive.mjs +18 -1
  231. package/esm2022/cdk/dynamic-view/lib/dynamic-view.service.mjs +31 -1
  232. package/esm2022/cdk/dynamic-view/lib/helpers/create-projectable-nodes.mjs +23 -1
  233. package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-text-content.mjs +23 -1
  234. package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-view.mjs +23 -1
  235. package/esm2022/cdk/dynamic-view/lib/models/dynamic-component-ref.mjs +40 -1
  236. package/esm2022/cdk/dynamic-view/lib/models/dynamic-template-ref.mjs +37 -1
  237. package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-context.mjs +5 -1
  238. package/esm2022/cdk/dynamic-view/lib/tokens/dynamic-view-default-host.mjs +11 -1
  239. package/esm2022/cdk/event-plugins/lib/event-plugins.config.mjs +36 -1
  240. package/esm2022/cdk/event-plugins/lib/models/event-plugin.mjs +45 -1
  241. package/esm2022/cdk/event-plugins/lib/plugins/debounce-event-plugin.mjs +33 -1
  242. package/esm2022/cdk/event-plugins/lib/plugins/defer-event-plugin.mjs +25 -1
  243. package/esm2022/cdk/expandable/lib/directives/expandable-container.directive.mjs +42 -1
  244. package/esm2022/cdk/expandable/lib/directives/expandable-item.directive.mjs +48 -1
  245. package/esm2022/cdk/option-control/lib/option-control.mjs +48 -1
  246. package/esm2022/cdk/radio-group-control/lib/radio-control.directive.mjs +9 -1
  247. package/esm2022/cdk/radio-group-control/lib/radio-group-control.directive.mjs +12 -1
  248. package/esm2022/components/accordion/lib/accordion.component.mjs +9 -1
  249. package/esm2022/components/accordion/lib/components/accordion-item/accordion-item.component.mjs +31 -1
  250. package/esm2022/components/accordion/lib/directives/accordion-item-title.mjs +4 -1
  251. package/esm2022/components/action-group/action-group.component.mjs +7 -1
  252. package/esm2022/components/area-header/area-header.component.mjs +9 -1
  253. package/esm2022/components/area-header/directives/area-header-content.directive.mjs +4 -1
  254. package/esm2022/components/area-header/directives/area-header-subtitle.directive.mjs +4 -1
  255. package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +29 -5
  256. package/esm2022/components/avatar/lib/avatar.component.mjs +9 -1
  257. package/esm2022/components/badge/lib/badge.component.mjs +11 -1
  258. package/esm2022/components/badge/lib/badge.directive.mjs +16 -1
  259. package/esm2022/components/bar/lib/bar.component.mjs +8 -1
  260. package/esm2022/components/bar/lib/directives/bar-button.directive.mjs +4 -1
  261. package/esm2022/components/bar/lib/directives/bar-label.directive.mjs +4 -1
  262. package/esm2022/components/breadcrumbs/lib/breadcrumbs.component.mjs +4 -1
  263. package/esm2022/components/button/lib/button.component.mjs +11 -1
  264. package/esm2022/components/button-group/lib/button-group.component.mjs +16 -1
  265. package/esm2022/components/calendar/lib/calendar.component.mjs +35 -1
  266. package/esm2022/components/calendar/lib/calendar.config.mjs +18 -1
  267. package/esm2022/components/calendar/lib/calendar.service.mjs +49 -1
  268. package/esm2022/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +19 -1
  269. package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +7 -1
  270. package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +7 -1
  271. package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +7 -1
  272. package/esm2022/components/calendar/lib/daterange.service.mjs +17 -1
  273. package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +26 -1
  274. package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +39 -1
  275. package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +6 -1
  276. package/esm2022/components/calendar/lib/services/calendar-month.service.mjs +2 -1
  277. package/esm2022/components/calendar/lib/services/calendar-year.service.mjs +2 -1
  278. package/esm2022/components/calendar/lib/services/calendar-years.service.mjs +2 -1
  279. package/esm2022/components/calendar/lib/utils/check-cell-in-range.mjs +2 -1
  280. package/esm2022/components/calendar/lib/utils/check-identical-date.mjs +2 -1
  281. package/esm2022/components/calendar/lib/utils/get-A11y-label.mjs +2 -1
  282. package/esm2022/components/calendar/lib/utils/is-date-disabled.mjs +2 -1
  283. package/esm2022/components/calendar/lib/utils/parse-date.mjs +2 -1
  284. package/esm2022/components/calendar/lib/utils/validate-daterange.mjs +2 -1
  285. package/esm2022/components/calendar/lib/utils/validate-max-date.mjs +2 -1
  286. package/esm2022/components/calendar/lib/utils/validate-min-date.mjs +2 -1
  287. package/esm2022/components/calendar/lib/utils/validate-next-date-set.mjs +2 -1
  288. package/esm2022/components/calendar/lib/utils/validate-previous-date-set.mjs +2 -1
  289. package/esm2022/components/checkbox/lib/checkbox.component.mjs +33 -1
  290. package/esm2022/components/checkbox/lib/checkbox.validator.mjs +24 -1
  291. package/esm2022/components/chip/lib/components/chip/chip.component.mjs +15 -1
  292. package/esm2022/components/chip/lib/components/chip-list/chip-list.component.mjs +4 -1
  293. package/esm2022/components/chip/lib/components/chip-list-row/chip-list-row.component.mjs +4 -1
  294. package/esm2022/components/circular-progress/lib/circular-progress.component.mjs +21 -1
  295. package/esm2022/components/content-box/lib/content-box.component.mjs +4 -1
  296. package/esm2022/components/content-box/lib/directives/content-box-footer.directive.mjs +4 -1
  297. package/esm2022/components/content-box/lib/directives/content-box-header.directive.mjs +4 -1
  298. package/esm2022/components/datepicker/lib/datepicker.component.mjs +33 -1
  299. package/esm2022/components/datepicker/lib/datepicker.config.mjs +20 -1
  300. package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +31 -1
  301. package/esm2022/components/datepicker/lib/utils/get-datepicker-input-pattern.mjs +3 -1
  302. package/esm2022/components/datepicker/lib/utils/get-datepicker-input-value-as-date.mjs +2 -1
  303. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +65 -1
  304. package/esm2022/components/daterangepicker/lib/daterangepicker.config.mjs +20 -1
  305. package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +31 -1
  306. package/esm2022/components/daterangepicker/lib/range.validator.mjs +16 -1
  307. package/esm2022/components/daterangepicker/lib/required.validator.mjs +15 -1
  308. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.mjs +3 -1
  309. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.mjs +2 -1
  310. package/esm2022/components/dropdown/lib/dropdown.component.mjs +8 -1
  311. package/esm2022/components/dropdown/lib/dropdown.directive.mjs +55 -1
  312. package/esm2022/components/dropdown/lib/helpers/close-current-dropdown.mjs +6 -1
  313. package/esm2022/components/error-page/lib/error-page.component.mjs +8 -1
  314. package/esm2022/components/error-page/lib/error-page.config.mjs +9 -1
  315. package/esm2022/components/footer/lib/footer.component.mjs +10 -7
  316. package/esm2022/components/footer/lib/footer.config.mjs +3 -1
  317. package/esm2022/components/form-field/lib/components/form-field-info/form-field-info.component.mjs +14 -1
  318. package/esm2022/components/form-field/lib/components/form-group/form-group.component.mjs +13 -1
  319. package/esm2022/components/form-field/lib/directives/form-field-control.directive.mjs +6 -1
  320. package/esm2022/components/form-field/lib/directives/form-field-error.directive.mjs +4 -1
  321. package/esm2022/components/form-field/lib/directives/form-field-hint.directive.mjs +4 -1
  322. package/esm2022/components/form-field/lib/directives/form-field-label.directive.mjs +4 -1
  323. package/esm2022/components/form-field/lib/directives/form.directive.mjs +14 -1
  324. package/esm2022/components/form-field/lib/form-field.component.mjs +14 -1
  325. package/esm2022/components/form-field/lib/form-field.service.mjs +43 -1
  326. package/esm2022/components/form-field/lib/services/form-field-error.service.mjs +25 -1
  327. package/esm2022/components/header/lib/directives/header-avatar.directive.mjs +5 -1
  328. package/esm2022/components/header/lib/directives/header-title.directive.mjs +4 -1
  329. package/esm2022/components/header/lib/header.component.mjs +4 -1
  330. package/esm2022/components/header-navigation/lib/directives/header-navigation-link.directive.mjs +4 -1
  331. package/esm2022/components/header-navigation/lib/header-navigation.component.mjs +4 -1
  332. package/esm2022/components/icon/lib/helpers/unpack-icon-identifier.mjs +15 -1
  333. package/esm2022/components/icon/lib/icon.component.mjs +25 -1
  334. package/esm2022/components/icon/lib/icon.config.mjs +20 -1
  335. package/esm2022/components/inline-message/lib/inline-message.component.mjs +14 -1
  336. package/esm2022/components/link/link.directive.mjs +4 -1
  337. package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +7 -1
  338. package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +18 -2
  339. package/esm2022/components/list/lib/list.component.mjs +6 -1
  340. package/esm2022/components/loading-spinner/lib/loading-spinner.component.mjs +10 -2
  341. package/esm2022/components/loading-spinner/lib/loading-spinner.directive.mjs +23 -1
  342. package/esm2022/components/logo/logo.directive.mjs +16 -1
  343. package/esm2022/components/main-menu/lib/directives/main-menu-button.directive.mjs +5 -1
  344. package/esm2022/components/main-menu/lib/directives/main-menu-close.directive.mjs +4 -1
  345. package/esm2022/components/main-menu/lib/directives/main-menu-item.directive.mjs +17 -1
  346. package/esm2022/components/main-menu/lib/helpers/create-main-menu-links.mjs +2 -1
  347. package/esm2022/components/main-menu/lib/main-menu.component.mjs +37 -1
  348. package/esm2022/components/main-menu/lib/main-menu.config.mjs +32 -1
  349. package/esm2022/components/main-menu/lib/main-menu.service.mjs +29 -1
  350. package/esm2022/components/mainfilter-group/lib/mainfilter-group.component.mjs +5 -1
  351. package/esm2022/components/menu/lib/directives/menu-item.directive.mjs +7 -1
  352. package/esm2022/components/menu/lib/menu.component.mjs +13 -1
  353. package/esm2022/components/menu/lib/menu.directive.mjs +19 -1
  354. package/esm2022/components/modal/lib/components/basic-modal/basic-modal.component.mjs +15 -1
  355. package/esm2022/components/modal/lib/components/modal-footer/modal-footer.component.mjs +4 -1
  356. package/esm2022/components/modal/lib/components/modal-header/modal-header.component.mjs +4 -1
  357. package/esm2022/components/modal/lib/components/modal-hero/modal-hero.component.mjs +12 -1
  358. package/esm2022/components/modal/lib/directives/modal-close.directive.mjs +25 -1
  359. package/esm2022/components/modal/lib/directives/modal-content.directive.mjs +4 -1
  360. package/esm2022/components/modal/lib/directives/modal-dismiss.directive.mjs +18 -1
  361. package/esm2022/components/modal/lib/helpers/inject-modal-ref.mjs +22 -1
  362. package/esm2022/components/modal/lib/helpers/provide-modal-ref.mjs +10 -1
  363. package/esm2022/components/modal/lib/modal.component.mjs +21 -2
  364. package/esm2022/components/modal/lib/modal.config.mjs +34 -1
  365. package/esm2022/components/modal/lib/modal.directive.mjs +25 -1
  366. package/esm2022/components/modal/lib/modal.service.mjs +39 -1
  367. package/esm2022/components/modal/lib/models/modal-ref.mjs +34 -1
  368. package/esm2022/components/navigation-back/lib/navigation-back.component.mjs +4 -1
  369. package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +1 -3
  370. package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +19 -5
  371. package/esm2022/components/notification/lib/helpers/get-notifications-by-tag.mjs +2 -1
  372. package/esm2022/components/notification/lib/helpers/sort-notifications.mjs +2 -1
  373. package/esm2022/components/notification/lib/helpers/to-notification-collection.mjs +2 -1
  374. package/esm2022/components/notification/lib/models/notification-feature.mjs +16 -1
  375. package/esm2022/components/notification/lib/notification.config.mjs +45 -1
  376. package/esm2022/components/notification/lib/notification.logger.mjs +2 -1
  377. package/esm2022/components/notification/lib/notification.service.mjs +56 -1
  378. package/esm2022/components/notification/lib/notification.tokens.mjs +4 -1
  379. package/esm2022/components/notification/lib/services/notification-center.service.mjs +10 -1
  380. package/esm2022/components/paginator/lib/paginator.component.mjs +90 -1
  381. package/esm2022/components/paginator/lib/paginator.config.mjs +29 -1
  382. package/esm2022/components/progress/lib/progress.component.mjs +16 -1
  383. package/esm2022/components/radio-group/lib/components/radio-button/radio-button.component.mjs +20 -3
  384. package/esm2022/components/radio-group/lib/radio-group.component.mjs +13 -2
  385. package/esm2022/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.mjs +17 -1
  386. package/esm2022/components/rail-navigation/lib/rail-navigation.component.mjs +27 -1
  387. package/esm2022/components/rich-list/lib/components/rich-list-content/rich-list-content.component.mjs +5 -1
  388. package/esm2022/components/rich-list/lib/components/rich-list-header/rich-list-header.component.mjs +5 -1
  389. package/esm2022/components/rich-list/lib/components/rich-list-item/rich-list-item.component.mjs +10 -2
  390. package/esm2022/components/rich-list/lib/rich-list.component.mjs +10 -3
  391. package/esm2022/components/select/lib/components/select-option/select-option.component.mjs +49 -7
  392. package/esm2022/components/select/lib/directives/select-input-control.directive.mjs +12 -2
  393. package/esm2022/components/select/lib/pipes/select-search-filter.pipe.mjs +11 -1
  394. package/esm2022/components/select/lib/select.component.mjs +59 -5
  395. package/esm2022/components/slider/lib/slider.directive.mjs +20 -1
  396. package/esm2022/components/spinbox/lib/spinbox.component.mjs +17 -1
  397. package/esm2022/components/switch/lib/switch.component.mjs +11 -1
  398. package/esm2022/components/switch/lib/switch.validator.mjs +13 -1
  399. package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +29 -1
  400. package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +71 -1
  401. package/esm2022/components/table/lib/components/check-cell/check-cell.component.mjs +19 -1
  402. package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +30 -2
  403. package/esm2022/components/table/lib/directives/table-cell.directive.mjs +5 -1
  404. package/esm2022/components/table/lib/directives/table-row.directive.mjs +5 -1
  405. package/esm2022/components/table/lib/table.component.mjs +30 -1
  406. package/esm2022/components/timepicker/lib/timepicker.component.mjs +15 -6
  407. package/esm2022/components/timepicker/lib/utils/generate-time-stamps.mjs +5 -3
  408. package/esm2022/components/timepicker/lib/utils/ngx-mask-helper.mjs +3 -3
  409. package/esm2022/components/toast/lib/components/toast-container/toast-container.component.mjs +3 -3
  410. package/esm2022/components/toast/lib/components/toast-item/toast-item.component.mjs +5 -3
  411. package/esm2022/components/toast/lib/models/toast.mjs +1 -1
  412. package/esm2022/components/toast/lib/toast.config.mjs +27 -1
  413. package/esm2022/components/toast/lib/toast.service.mjs +36 -1
  414. package/esm2022/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.mjs +12 -1
  415. package/esm2022/components/toggle-button-group/lib/toggle-button-group.component.mjs +14 -2
  416. package/esm2022/components/tooltip/lib/helpers/resolve-tooltip-trigger-events.mjs +8 -1
  417. package/esm2022/components/tooltip/lib/tooltip.component.mjs +18 -1
  418. package/esm2022/components/tooltip/lib/tooltip.directive.mjs +36 -1
  419. package/esm2022/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +35 -1
  420. package/esm2022/components/wizard/lib/wizard.component.mjs +21 -1
  421. package/esm2022/internal/lib/helpers/decorator-property-name.mjs +9 -1
  422. package/esm2022/internal/translate/lib/translate.config.mjs +32 -1
  423. package/esm2022/internal/translate/lib/translate.service.mjs +30 -1
  424. package/esm2022/lib/controllers/controller.mjs +26 -1
  425. package/esm2022/lib/controllers/disabled.controller.mjs +60 -1
  426. package/esm2022/lib/controllers/readonly.controller.mjs +57 -1
  427. package/esm2022/lib/directives/click-outside.directive.mjs +30 -1
  428. package/esm2022/lib/directives/delegate-focus.directive.mjs +15 -1
  429. package/esm2022/lib/services/window-ref.mjs +67 -1
  430. package/esm2022/lib/tokens/identity-matcher.mjs +25 -1
  431. package/esm2022/lib/tokens/string-search-handler.mjs +25 -1
  432. package/esm2022/lib/tokens/stringify.mjs +26 -1
  433. package/esm2022/localization/lib/features/with-http-language-header.mjs +54 -1
  434. package/esm2022/localization/lib/features/with-http-language-query-param.mjs +52 -1
  435. package/esm2022/localization/lib/loaders/browser-language-loader.mjs +33 -1
  436. package/esm2022/localization/lib/localization.config.mjs +71 -1
  437. package/esm2022/localization/lib/localization.service.mjs +42 -3
  438. package/esm2022/localization/lib/models/localization-feature.mjs +8 -1
  439. package/esm2022/rxjs/index.mjs +2 -2
  440. package/esm2022/rxjs/lib/delay-until.mjs +23 -1
  441. package/esm2022/rxjs/lib/from-element-mutation.mjs +22 -1
  442. package/esm2022/rxjs/lib/from-element-resize.mjs +25 -1
  443. package/esm2022/rxjs/lib/from-events.mjs +25 -1
  444. package/esm2022/rxjs/lib/from-query-list.mjs +24 -0
  445. package/esm2022/sdk/lib/application-environment.mjs +51 -1
  446. package/esm2022/theming/lib/helpers/prefers-dark-theme.mjs +19 -1
  447. package/esm2022/theming/lib/helpers/resolve-theme.mjs +26 -1
  448. package/esm2022/theming/lib/helpers/theme-storage.mjs +43 -1
  449. package/esm2022/theming/lib/theming.config.mjs +34 -1
  450. package/esm2022/theming/lib/theming.service.mjs +32 -1
  451. package/esm2022/utils/lib/decorators/pure.mjs +52 -1
  452. package/esm2022/utils/lib/helpers/angular.mjs +37 -1
  453. package/esm2022/utils/lib/helpers/array.mjs +5 -1
  454. package/esm2022/utils/lib/helpers/build-url.mjs +21 -1
  455. package/esm2022/utils/lib/helpers/build-website-url.mjs +3 -2
  456. package/esm2022/utils/lib/helpers/cache-storage-client.mjs +52 -1
  457. package/esm2022/utils/lib/helpers/coercion.mjs +18 -1
  458. package/esm2022/utils/lib/helpers/debounce.mjs +28 -1
  459. package/esm2022/utils/lib/helpers/defer-fn.mjs +21 -1
  460. package/esm2022/utils/lib/helpers/dom.mjs +71 -1
  461. package/esm2022/utils/lib/helpers/get-axis.mjs +21 -1
  462. package/esm2022/utils/lib/helpers/get-language-code.mjs +18 -1
  463. package/esm2022/utils/lib/helpers/get-opposite-side.mjs +22 -1
  464. package/esm2022/utils/lib/helpers/get-side.mjs +18 -1
  465. package/esm2022/utils/lib/helpers/get-unique-id.mjs +34 -1
  466. package/esm2022/utils/lib/helpers/match-url.mjs +41 -1
  467. package/esm2022/utils/lib/helpers/ng-changes.mjs +30 -1
  468. package/esm2022/utils/lib/helpers/provide-config.mjs +57 -1
  469. package/esm2022/utils/lib/helpers/queue.mjs +84 -1
  470. package/esm2022/utils/lib/helpers/type-guards.mjs +58 -1
  471. package/esm2022/utils/lib/helpers/until-destroyed.mjs +39 -1
  472. package/fesm2022/odx-angular-animations.mjs +173 -0
  473. package/fesm2022/odx-angular-animations.mjs.map +1 -1
  474. package/fesm2022/odx-angular-breakpoints.mjs +136 -0
  475. package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
  476. package/fesm2022/odx-angular-cdk-a11y.mjs +71 -0
  477. package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
  478. package/fesm2022/odx-angular-cdk-active-indicator.mjs +63 -0
  479. package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
  480. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +39 -1
  481. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
  482. package/fesm2022/odx-angular-cdk-checkbox-control.mjs +3 -0
  483. package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
  484. package/fesm2022/odx-angular-cdk-connected-overlay.mjs +103 -0
  485. package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
  486. package/fesm2022/odx-angular-cdk-custom-form-control.mjs +183 -2
  487. package/fesm2022/odx-angular-cdk-custom-form-control.mjs.map +1 -1
  488. package/fesm2022/odx-angular-cdk-dynamic-view.mjs +202 -0
  489. package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
  490. package/fesm2022/odx-angular-cdk-event-plugins.mjs +135 -0
  491. package/fesm2022/odx-angular-cdk-event-plugins.mjs.map +1 -1
  492. package/fesm2022/odx-angular-cdk-expandable.mjs +88 -0
  493. package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
  494. package/fesm2022/odx-angular-cdk-option-control.mjs +47 -0
  495. package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
  496. package/fesm2022/odx-angular-cdk-radio-group-control.mjs +19 -0
  497. package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
  498. package/fesm2022/odx-angular-components-accordion.mjs +41 -0
  499. package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
  500. package/fesm2022/odx-angular-components-action-group.mjs +6 -0
  501. package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
  502. package/fesm2022/odx-angular-components-area-header.mjs +14 -0
  503. package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
  504. package/fesm2022/odx-angular-components-autocomplete.mjs +28 -4
  505. package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
  506. package/fesm2022/odx-angular-components-avatar.mjs +8 -0
  507. package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
  508. package/fesm2022/odx-angular-components-badge.mjs +25 -0
  509. package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
  510. package/fesm2022/odx-angular-components-bar.mjs +13 -0
  511. package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
  512. package/fesm2022/odx-angular-components-breadcrumbs.mjs +3 -0
  513. package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
  514. package/fesm2022/odx-angular-components-button-group.mjs +15 -0
  515. package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
  516. package/fesm2022/odx-angular-components-button.mjs +10 -0
  517. package/fesm2022/odx-angular-components-button.mjs.map +1 -1
  518. package/fesm2022/odx-angular-components-calendar.mjs +232 -0
  519. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  520. package/fesm2022/odx-angular-components-checkbox.mjs +55 -0
  521. package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
  522. package/fesm2022/odx-angular-components-chip.mjs +20 -0
  523. package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
  524. package/fesm2022/odx-angular-components-circular-progress.mjs +20 -0
  525. package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
  526. package/fesm2022/odx-angular-components-content-box.mjs +9 -0
  527. package/fesm2022/odx-angular-components-content-box.mjs.map +1 -1
  528. package/fesm2022/odx-angular-components-datepicker.mjs +84 -0
  529. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  530. package/fesm2022/odx-angular-components-daterangepicker.mjs +145 -0
  531. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  532. package/fesm2022/odx-angular-components-dropdown.mjs +66 -0
  533. package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
  534. package/fesm2022/odx-angular-components-error-page.mjs +15 -0
  535. package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
  536. package/fesm2022/odx-angular-components-footer.mjs +11 -6
  537. package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
  538. package/fesm2022/odx-angular-components-form-field.mjs +131 -0
  539. package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
  540. package/fesm2022/odx-angular-components-header-navigation.mjs +6 -0
  541. package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
  542. package/fesm2022/odx-angular-components-header.mjs +10 -0
  543. package/fesm2022/odx-angular-components-header.mjs.map +1 -1
  544. package/fesm2022/odx-angular-components-icon.mjs +57 -0
  545. package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
  546. package/fesm2022/odx-angular-components-inline-message.mjs +13 -0
  547. package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
  548. package/fesm2022/odx-angular-components-link.mjs +3 -0
  549. package/fesm2022/odx-angular-components-link.mjs.map +1 -1
  550. package/fesm2022/odx-angular-components-list.mjs +28 -1
  551. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  552. package/fesm2022/odx-angular-components-loading-spinner.mjs +30 -0
  553. package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
  554. package/fesm2022/odx-angular-components-logo.mjs +15 -0
  555. package/fesm2022/odx-angular-components-logo.mjs.map +1 -1
  556. package/fesm2022/odx-angular-components-main-menu.mjs +119 -0
  557. package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
  558. package/fesm2022/odx-angular-components-mainfilter-group.mjs +4 -0
  559. package/fesm2022/odx-angular-components-mainfilter-group.mjs.map +1 -1
  560. package/fesm2022/odx-angular-components-menu.mjs +36 -0
  561. package/fesm2022/odx-angular-components-menu.mjs.map +1 -1
  562. package/fesm2022/odx-angular-components-modal.mjs +252 -0
  563. package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
  564. package/fesm2022/odx-angular-components-navigation-back.mjs +3 -0
  565. package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
  566. package/fesm2022/odx-angular-components-notification.mjs +148 -6
  567. package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
  568. package/fesm2022/odx-angular-components-paginator.mjs +117 -0
  569. package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
  570. package/fesm2022/odx-angular-components-progress.mjs +15 -0
  571. package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
  572. package/fesm2022/odx-angular-components-radio-group.mjs +30 -2
  573. package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
  574. package/fesm2022/odx-angular-components-rail-navigation.mjs +42 -0
  575. package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
  576. package/fesm2022/odx-angular-components-rich-list.mjs +26 -3
  577. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  578. package/fesm2022/odx-angular-components-select.mjs +126 -11
  579. package/fesm2022/odx-angular-components-select.mjs.map +1 -1
  580. package/fesm2022/odx-angular-components-slider.mjs +19 -0
  581. package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
  582. package/fesm2022/odx-angular-components-spinbox.mjs +16 -0
  583. package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
  584. package/fesm2022/odx-angular-components-switch.mjs +22 -0
  585. package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
  586. package/fesm2022/odx-angular-components-tab-bar.mjs +98 -0
  587. package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
  588. package/fesm2022/odx-angular-components-table.mjs +84 -1
  589. package/fesm2022/odx-angular-components-table.mjs.map +1 -1
  590. package/fesm2022/odx-angular-components-timepicker.mjs +20 -9
  591. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  592. package/fesm2022/odx-angular-components-toast.mjs +67 -4
  593. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  594. package/fesm2022/odx-angular-components-toggle-button-group.mjs +23 -0
  595. package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
  596. package/fesm2022/odx-angular-components-tooltip.mjs +59 -0
  597. package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
  598. package/fesm2022/odx-angular-components-wizard.mjs +54 -0
  599. package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
  600. package/fesm2022/odx-angular-internal-translate.mjs +60 -0
  601. package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
  602. package/fesm2022/odx-angular-internal.mjs +8 -0
  603. package/fesm2022/odx-angular-internal.mjs.map +1 -1
  604. package/fesm2022/odx-angular-localization.mjs +254 -2
  605. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  606. package/fesm2022/odx-angular-rxjs.mjs +115 -5
  607. package/fesm2022/odx-angular-rxjs.mjs.map +1 -1
  608. package/fesm2022/odx-angular-sdk.mjs +50 -0
  609. package/fesm2022/odx-angular-sdk.mjs.map +1 -1
  610. package/fesm2022/odx-angular-theming.mjs +149 -0
  611. package/fesm2022/odx-angular-theming.mjs.map +1 -1
  612. package/fesm2022/odx-angular-utils.mjs +709 -1
  613. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  614. package/fesm2022/odx-angular.mjs +322 -0
  615. package/fesm2022/odx-angular.mjs.map +1 -1
  616. package/internal/lib/helpers/decorator-property-name.d.ts +8 -0
  617. package/internal/translate/lib/translate.config.d.ts +31 -0
  618. package/internal/translate/lib/translate.service.d.ts +29 -0
  619. package/lib/controllers/controller.d.ts +25 -0
  620. package/lib/controllers/disabled.controller.d.ts +59 -0
  621. package/lib/controllers/readonly.controller.d.ts +56 -0
  622. package/lib/directives/click-outside.directive.d.ts +29 -0
  623. package/lib/directives/delegate-focus.directive.d.ts +14 -0
  624. package/lib/services/window-ref.d.ts +66 -0
  625. package/lib/tokens/identity-matcher.d.ts +41 -0
  626. package/lib/tokens/string-search-handler.d.ts +39 -0
  627. package/lib/tokens/stringify.d.ts +42 -0
  628. package/localization/lib/features/with-http-language-header.d.ts +63 -0
  629. package/localization/lib/features/with-http-language-query-param.d.ts +61 -0
  630. package/localization/lib/loaders/browser-language-loader.d.ts +32 -0
  631. package/localization/lib/localization.config.d.ts +81 -0
  632. package/localization/lib/localization.service.d.ts +39 -0
  633. package/localization/lib/models/localization-feature.d.ts +7 -0
  634. package/package.json +1 -1
  635. package/rxjs/index.d.ts +1 -1
  636. package/rxjs/lib/delay-until.d.ts +22 -0
  637. package/rxjs/lib/from-element-mutation.d.ts +21 -0
  638. package/rxjs/lib/from-element-resize.d.ts +24 -0
  639. package/rxjs/lib/from-events.d.ts +24 -0
  640. package/rxjs/lib/from-query-list.d.ts +22 -0
  641. package/sdk/lib/application-environment.d.ts +59 -0
  642. package/theming/lib/helpers/prefers-dark-theme.d.ts +18 -0
  643. package/theming/lib/helpers/resolve-theme.d.ts +25 -0
  644. package/theming/lib/helpers/theme-storage.d.ts +42 -0
  645. package/theming/lib/theming.config.d.ts +46 -0
  646. package/theming/lib/theming.service.d.ts +31 -0
  647. package/utils/lib/decorators/pure.d.ts +51 -0
  648. package/utils/lib/helpers/angular.d.ts +36 -0
  649. package/utils/lib/helpers/array.d.ts +4 -0
  650. package/utils/lib/helpers/build-url.d.ts +20 -0
  651. package/utils/lib/helpers/build-website-url.d.ts +2 -1
  652. package/utils/lib/helpers/cache-storage-client.d.ts +51 -0
  653. package/utils/lib/helpers/coercion.d.ts +17 -0
  654. package/utils/lib/helpers/debounce.d.ts +27 -0
  655. package/utils/lib/helpers/defer-fn.d.ts +20 -0
  656. package/utils/lib/helpers/dom.d.ts +70 -0
  657. package/utils/lib/helpers/get-axis.d.ts +20 -0
  658. package/utils/lib/helpers/get-language-code.d.ts +17 -0
  659. package/utils/lib/helpers/get-opposite-side.d.ts +21 -0
  660. package/utils/lib/helpers/get-side.d.ts +17 -0
  661. package/utils/lib/helpers/get-unique-id.d.ts +33 -0
  662. package/utils/lib/helpers/match-url.d.ts +40 -0
  663. package/utils/lib/helpers/ng-changes.d.ts +52 -0
  664. package/utils/lib/helpers/provide-config.d.ts +56 -0
  665. package/utils/lib/helpers/queue.d.ts +83 -0
  666. package/utils/lib/helpers/type-guards.d.ts +57 -0
  667. package/utils/lib/helpers/until-destroyed.d.ts +38 -0
  668. package/esm2022/rxjs/lib/form-query-list.mjs +0 -5
  669. package/rxjs/lib/form-query-list.d.ts +0 -3
@@ -6,43 +6,109 @@ import { fromEvents } from '@odx/angular/rxjs';
6
6
  import { getLanguageCode } from '@odx/angular/utils';
7
7
  import { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';
8
8
  import * as i0 from "@angular/core";
9
+ /**
10
+ * A service that wraps window and document functionalities, providing Angular-friendly ways to interact with the browser's window object,
11
+ * manage the document and its title, listen to online/offline events, and perform other browser-related operations.
12
+ */
9
13
  export class WindowRef {
10
14
  constructor() {
11
15
  this.title = inject(Title);
16
+ /**
17
+ * Accesses the document object, ensuring Angular compatibility and potential SSR friendliness.
18
+ */
12
19
  this.document = inject(DOCUMENT);
20
+ /**
21
+ * Retrieves the native window object, with a fallback to the global window if necessary.
22
+ * This approach helps ensure compatibility with Angular's SSR features.
23
+ */
13
24
  this.nativeWindow = this.document.defaultView ?? window;
25
+ /**
26
+ * An observable that emits the online status of the browser, updating when the browser transitions between online and offline states.
27
+ */
14
28
  this.isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(startWith(null), map(() => this.isOnline()), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
29
+ /**
30
+ * An observable that emits the current page title upon navigation ends, useful for updating document titles in SPA applications.
31
+ */
15
32
  this.pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(filter((event) => event instanceof NavigationEnd), startWith(null), debounceTime(0), map(() => this.title.getTitle()), shareReplay({ bufferSize: 1, refCount: true }));
16
33
  }
34
+ /**
35
+ * Gets the location object of the window.
36
+ * @returns The location object of the window.
37
+ */
17
38
  get location() {
18
39
  return this.nativeWindow.location;
19
40
  }
41
+ /**
42
+ * Determines if the browser is currently online.
43
+ * @returns {boolean} True if the browser is online; otherwise, false.
44
+ */
20
45
  isOnline() {
21
46
  return this.nativeWindow.navigator.onLine;
22
47
  }
48
+ /**
49
+ * Retrieves the browser's current language setting, falling back through several browser-specific properties.
50
+ * @returns {string} The current language setting of the browser.
51
+ */
23
52
  getLanguage() {
24
53
  const { language, languages, userLanguage } = this.nativeWindow.navigator;
25
54
  return languages?.[0] ?? userLanguage ?? language;
26
55
  }
56
+ /**
57
+ * Extracts the language code from the browser's current language setting.
58
+ * @returns {string} The language code part of the browser's language setting.
59
+ */
27
60
  getLanguageCode() {
28
61
  return getLanguageCode(this.getLanguage());
29
62
  }
63
+ /**
64
+ * Returns the origin of the current window location.
65
+ *
66
+ * @returns The origin of the current window location.
67
+ */
30
68
  getOrigin() {
31
69
  return this.location.origin;
32
70
  }
71
+ /**
72
+ * Opens a new browser tab or window and navigates to the specified URL.
73
+ * @param {string | URL} [url] - The URL to open.
74
+ * @param {string} [target] - The target window or tab.
75
+ * @param {string} [features] - String that specifies the window features.
76
+ * @returns {WindowProxy | null} A reference to the newly opened window or null if the call failed.
77
+ */
33
78
  openPage(url, target, features) {
34
79
  return this.nativeWindow.open(url, target, features);
35
80
  }
81
+ /**
82
+ * Reloads the current page.
83
+ */
36
84
  reloadPage() {
37
85
  return this.location.reload();
38
86
  }
87
+ /**
88
+ * Queries the DOM for an element associated with a specific Angular component type.
89
+ * @template T The component type to query for.
90
+ * @param {Type<T>} type - The Angular component type.
91
+ * @returns {HTMLElement | null} The HTML element associated with the component, or null if not found.
92
+ */
39
93
  queryByComponent(type) {
40
94
  const componentType = reflectComponentType(type);
41
95
  return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;
42
96
  }
97
+ /**
98
+ * Retrieves the value of a CSS variable on a specified element.
99
+ * @param {string} name - The name of the CSS variable.
100
+ * @param {HTMLElement} [element=this.document.body] - The element from which to retrieve the CSS variable.
101
+ * @returns {string} The value of the CSS variable.
102
+ */
43
103
  getCSSVariable(name, element = this.document.body) {
44
104
  return this.nativeWindow.getComputedStyle(element).getPropertyValue(`--${name}`).trim();
45
105
  }
106
+ /**
107
+ * Extracts CSS color styles that match a specific filter from the document's stylesheets.
108
+ * @param {string} filter - The filter to apply to CSS variable names.
109
+ * @param {string} [selector=':root'] - The CSS selector to filter by.
110
+ * @returns {Record<string, string>} A record containing the filtered CSS color styles.
111
+ */
46
112
  getCSSColorStyles(filter, selector = ':root') {
47
113
  const selectorFilter = new RegExp(`^${selector}$`);
48
114
  const nameFilter = new RegExp(`^--${filter}`);
@@ -71,4 +137,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
71
137
  providedIn: 'root',
72
138
  }]
73
139
  }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3dpbmRvdy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0RyxNQUFNLE9BQU8sU0FBUztJQUh0QjtRQUltQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsaUJBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7UUFDbkQsY0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ2pGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQzFCLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxF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ZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgcmVmbGVjdENvbXBvbmVudFR5cGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZnJvbUV2ZW50cyB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBFTVBUWSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdpbmRvd1JlZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0aXZlV2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyA/PyB3aW5kb3c7XG4gIHB1YmxpYyByZWFkb25seSBpc09ubGluZSQgPSBmcm9tRXZlbnRzKHRoaXMubmF0aXZlV2luZG93LCAnb2ZmbGluZScsICdvbmxpbmUnKS5waXBlKFxuICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5pc09ubGluZSgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlVGl0bGUkID0gKGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk/LmV2ZW50cyA/PyBFTVBUWSkucGlwZShcbiAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgbWFwKCgpID0+IHRoaXMudGl0bGUuZ2V0VGl0bGUoKSksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCk6IExvY2F0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgaXNPbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm5hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGxhbmd1YWdlLCBsYW5ndWFnZXMsIHVzZXJMYW5ndWFnZSB9ID0gdGhpcy5uYXRpdmVXaW5kb3cubmF2aWdhdG9yIGFzIE5hdmlnYXRvciAmIHsgdXNlckxhbmd1YWdlPzogc3RyaW5nIH07XG5cbiAgICByZXR1cm4gbGFuZ3VhZ2VzPy5bMF0gPz8gdXNlckxhbmd1YWdlID8/IGxhbmd1YWdlO1xuICB9XG5cbiAgcHVibGljIGdldExhbmd1YWdlQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRMYW5ndWFnZUNvZGUodGhpcy5nZXRMYW5ndWFnZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcmlnaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxuICBwdWJsaWMgb3BlblBhZ2UodXJsPzogc3RyaW5nIHwgVVJMLCB0YXJnZXQ/OiBzdHJpbmcsIGZlYXR1cmVzPzogc3RyaW5nKTogV2luZG93UHJveHkgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cub3Blbih1cmwsIHRhcmdldCwgZmVhdHVyZXMpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZFBhZ2UoKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMubG9jYXRpb24ucmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlCeUNvbXBvbmVudDxUPih0eXBlOiBUeXBlPFQ+KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gcmVmbGVjdENvbXBvbmVudFR5cGUodHlwZSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50VHlwZSA/IHRoaXMubmF0aXZlV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29tcG9uZW50VHlwZS5zZWxlY3RvcikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldENTU1ZhcmlhYmxlKG5hbWU6IHN0cmluZywgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmJvZHkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZVdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoYC0tJHtuYW1lfWApLnRyaW0oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDU1NDb2xvclN0eWxlcyhmaWx0ZXI6IHN0cmluZywgc2VsZWN0b3IgPSAnOnJvb3QnKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgc2VsZWN0b3JGaWx0ZXIgPSBuZXcgUmVnRXhwKGBeJHtzZWxlY3Rvcn0kYCk7XG4gICAgY29uc3QgbmFtZUZpbHRlciA9IG5ldyBSZWdFeHAoYF4tLSR7ZmlsdGVyfWApO1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20odGhpcy5kb2N1bWVudC5zdHlsZVNoZWV0cylcbiAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiAhaHJlZiB8fCBocmVmLnN0YXJ0c1dpdGgodGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb24ub3JpZ2luKSlcbiAgICAgIC5tYXAoKHsgY3NzUnVsZXMgfSkgPT4gQXJyYXkuZnJvbShjc3NSdWxlcylbMF0pXG4gICAgICAuZmlsdGVyKChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHNlbGVjdG9yRmlsdGVyLnRlc3QocnVsZS5zZWxlY3RvclRleHQudHJpbSgpKSlcbiAgICAgIC5yZWR1Y2UoKGNvbG9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgcnVsZSkgPT4ge1xuICAgICAgICBPYmplY3QudmFsdWVzKChydWxlIGFzIENTU1N0eWxlUnVsZSkuc3R5bGUpXG4gICAgICAgICAgLm1hcCgoc3R5bGUpID0+IHN0eWxlLnRvU3RyaW5nKCkudHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIoKG5hbWUpID0+IEJvb2xlYW4obmFtZSkgJiYgbmFtZUZpbHRlci50ZXN0KG5hbWUpKVxuICAgICAgICAgIC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuYW1lLnJlcGxhY2UoJy0tJywgJycpO1xuICAgICAgICAgICAgY29sb3JzW2tleV0gPSB0aGlzLmdldENTU1ZhcmlhYmxlKGtleSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgICB9LCB7fSk7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxufVxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL3dpbmRvdy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUV0Rzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sU0FBUztJQUh0QjtRQUltQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDOztXQUVHO1FBQ2EsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1Qzs7O1dBR0c7UUFDYSxpQkFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQztRQUVuRTs7V0FFRztRQUNhLGNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNqRixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUMxQixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRUY7O1dBRUc7UUFDYSxlQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDckYsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLEVBQ2pELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEMsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztLQThHSDtJQTVHQzs7O09BR0c7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2hCLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBa0QsQ0FBQztRQUVuSCxPQUFPLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLEdBQWtCLEVBQUUsTUFBZSxFQUFFLFFBQWlCO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFJLElBQWE7UUFDdEMsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsSUFBWSxFQUFFLFVBQXVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtRQUMzRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxRQUFRLEdBQUcsT0FBTztRQUN6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDOUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNqRixHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLFlBQVksSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMvRixNQUFNLENBQUMsQ0FBQyxNQUE4QixFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUUsSUFBcUIsQ0FBQyxLQUFLLENBQUM7aUJBQ3hDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4RCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOytHQTlJVSxTQUFTO21IQUFULFNBQVMsY0FGUixNQUFNOzs0RkFFUCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgcmVmbGVjdENvbXBvbmVudFR5cGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZnJvbUV2ZW50cyB9IGZyb20gJ0BvZHgvYW5ndWxhci9yeGpzJztcbmltcG9ydCB7IGdldExhbmd1YWdlQ29kZSB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBFTVBUWSwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCB3cmFwcyB3aW5kb3cgYW5kIGRvY3VtZW50IGZ1bmN0aW9uYWxpdGllcywgcHJvdmlkaW5nIEFuZ3VsYXItZnJpZW5kbHkgd2F5cyB0byBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyJ3Mgd2luZG93IG9iamVjdCxcbiAqIG1hbmFnZSB0aGUgZG9jdW1lbnQgYW5kIGl0cyB0aXRsZSwgbGlzdGVuIHRvIG9ubGluZS9vZmZsaW5lIGV2ZW50cywgYW5kIHBlcmZvcm0gb3RoZXIgYnJvd3Nlci1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXaW5kb3dSZWYge1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlID0gaW5qZWN0KFRpdGxlKTtcblxuICAvKipcbiAgICogQWNjZXNzZXMgdGhlIGRvY3VtZW50IG9iamVjdCwgZW5zdXJpbmcgQW5ndWxhciBjb21wYXRpYmlsaXR5IGFuZCBwb3RlbnRpYWwgU1NSIGZyaWVuZGxpbmVzcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbmF0aXZlIHdpbmRvdyBvYmplY3QsIHdpdGggYSBmYWxsYmFjayB0byB0aGUgZ2xvYmFsIHdpbmRvdyBpZiBuZWNlc3NhcnkuXG4gICAqIFRoaXMgYXBwcm9hY2ggaGVscHMgZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBBbmd1bGFyJ3MgU1NSIGZlYXR1cmVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZVdpbmRvdyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gd2luZG93O1xuXG4gIC8qKlxuICAgKiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIG9ubGluZSBzdGF0dXMgb2YgdGhlIGJyb3dzZXIsIHVwZGF0aW5nIHdoZW4gdGhlIGJyb3dzZXIgdHJhbnNpdGlvbnMgYmV0d2VlbiBvbmxpbmUgYW5kIG9mZmxpbmUgc3RhdGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzT25saW5lJCA9IGZyb21FdmVudHModGhpcy5uYXRpdmVXaW5kb3csICdvZmZsaW5lJywgJ29ubGluZScpLnBpcGUoXG4gICAgc3RhcnRXaXRoKG51bGwpLFxuICAgIG1hcCgoKSA9PiB0aGlzLmlzT25saW5lKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjdXJyZW50IHBhZ2UgdGl0bGUgdXBvbiBuYXZpZ2F0aW9uIGVuZHMsIHVzZWZ1bCBmb3IgdXBkYXRpbmcgZG9jdW1lbnQgdGl0bGVzIGluIFNQQSBhcHBsaWNhdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZVRpdGxlJCA9IChpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pPy5ldmVudHMgPz8gRU1QVFkpLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICBzdGFydFdpdGgobnVsbCksXG4gICAgZGVib3VuY2VUaW1lKDApLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpdGxlLmdldFRpdGxlKCkpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxvY2F0aW9uIG9iamVjdCBvZiB0aGUgd2luZG93LlxuICAgKiBAcmV0dXJucyBUaGUgbG9jYXRpb24gb2JqZWN0IG9mIHRoZSB3aW5kb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCk6IExvY2F0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVXaW5kb3cubG9jYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBvbmxpbmU7IG90aGVyd2lzZSwgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgaXNPbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm5hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBicm93c2VyJ3MgY3VycmVudCBsYW5ndWFnZSBzZXR0aW5nLCBmYWxsaW5nIGJhY2sgdGhyb3VnaCBzZXZlcmFsIGJyb3dzZXItc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZyBvZiB0aGUgYnJvd3Nlci5cbiAgICovXG4gIHB1YmxpYyBnZXRMYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2UsIGxhbmd1YWdlcywgdXNlckxhbmd1YWdlIH0gPSB0aGlzLm5hdGl2ZVdpbmRvdy5uYXZpZ2F0b3IgYXMgTmF2aWdhdG9yICYgeyB1c2VyTGFuZ3VhZ2U/OiBzdHJpbmcgfTtcblxuICAgIHJldHVybiBsYW5ndWFnZXM/LlswXSA/PyB1c2VyTGFuZ3VhZ2UgPz8gbGFuZ3VhZ2U7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGxhbmd1YWdlIGNvZGUgZnJvbSB0aGUgYnJvd3NlcidzIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZy5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGxhbmd1YWdlIGNvZGUgcGFydCBvZiB0aGUgYnJvd3NlcidzIGxhbmd1YWdlIHNldHRpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldExhbmd1YWdlQ29kZSh0aGlzLmdldExhbmd1YWdlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbiBvZiB0aGUgY3VycmVudCB3aW5kb3cgbG9jYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgd2luZG93IGxvY2F0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldE9yaWdpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLm9yaWdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG5ldyBicm93c2VyIHRhYiBvciB3aW5kb3cgYW5kIG5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVUkx9IFt1cmxdIC0gVGhlIFVSTCB0byBvcGVuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gLSBUaGUgdGFyZ2V0IHdpbmRvdyBvciB0YWIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZXNdIC0gU3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSB3aW5kb3cgZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIHtXaW5kb3dQcm94eSB8IG51bGx9IEEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBvcGVuZWQgd2luZG93IG9yIG51bGwgaWYgdGhlIGNhbGwgZmFpbGVkLlxuICAgKi9cbiAgcHVibGljIG9wZW5QYWdlKHVybD86IHN0cmluZyB8IFVSTCwgdGFyZ2V0Pzogc3RyaW5nLCBmZWF0dXJlcz86IHN0cmluZyk6IFdpbmRvd1Byb3h5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93Lm9wZW4odXJsLCB0YXJnZXQsIGZlYXR1cmVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWRzIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVsb2FkUGFnZSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBET00gZm9yIGFuIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQW5ndWxhciBjb21wb25lbnQgdHlwZS5cbiAgICogQHRlbXBsYXRlIFQgVGhlIGNvbXBvbmVudCB0eXBlIHRvIHF1ZXJ5IGZvci5cbiAgICogQHBhcmFtIHtUeXBlPFQ+fSB0eXBlIC0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IHR5cGUuXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IG51bGx9IFRoZSBIVE1MIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHF1ZXJ5QnlDb21wb25lbnQ8VD4odHlwZTogVHlwZTxUPik6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHJlZmxlY3RDb21wb25lbnRUeXBlKHR5cGUpO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFR5cGUgPyB0aGlzLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbXBvbmVudFR5cGUuc2VsZWN0b3IpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgQ1NTIHZhcmlhYmxlIG9uIGEgc3BlY2lmaWVkIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIENTUyB2YXJpYWJsZS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2VsZW1lbnQ9dGhpcy5kb2N1bWVudC5ib2R5XSAtIFRoZSBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmV0cmlldmUgdGhlIENTUyB2YXJpYWJsZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBDU1MgdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q1NTVmFyaWFibGUobmFtZTogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuYm9keSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlV2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCkudHJpbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIENTUyBjb2xvciBzdHlsZXMgdGhhdCBtYXRjaCBhIHNwZWNpZmljIGZpbHRlciBmcm9tIHRoZSBkb2N1bWVudCdzIHN0eWxlc2hlZXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyIC0gVGhlIGZpbHRlciB0byBhcHBseSB0byBDU1MgdmFyaWFibGUgbmFtZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9Jzpyb290J10gLSBUaGUgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBieS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IEEgcmVjb3JkIGNvbnRhaW5pbmcgdGhlIGZpbHRlcmVkIENTUyBjb2xvciBzdHlsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q1NTQ29sb3JTdHlsZXMoZmlsdGVyOiBzdHJpbmcsIHNlbGVjdG9yID0gJzpyb290Jyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHNlbGVjdG9yRmlsdGVyID0gbmV3IFJlZ0V4cChgXiR7c2VsZWN0b3J9JGApO1xuICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSBuZXcgUmVnRXhwKGBeLS0ke2ZpbHRlcn1gKTtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHRoaXMuZG9jdW1lbnQuc3R5bGVTaGVldHMpXG4gICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gIWhyZWYgfHwgaHJlZi5zdGFydHNXaXRoKHRoaXMubmF0aXZlV2luZG93LmxvY2F0aW9uLm9yaWdpbikpXG4gICAgICAubWFwKCh7IGNzc1J1bGVzIH0pID0+IEFycmF5LmZyb20oY3NzUnVsZXMpWzBdKVxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gcnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiBzZWxlY3RvckZpbHRlci50ZXN0KHJ1bGUuc2VsZWN0b3JUZXh0LnRyaW0oKSkpXG4gICAgICAucmVkdWNlKChjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJ1bGUpID0+IHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcygocnVsZSBhcyBDU1NTdHlsZVJ1bGUpLnN0eWxlKVxuICAgICAgICAgIC5tYXAoKHN0eWxlKSA9PiBzdHlsZS50b1N0cmluZygpLnRyaW0oKSlcbiAgICAgICAgICAuZmlsdGVyKChuYW1lKSA9PiBCb29sZWFuKG5hbWUpICYmIG5hbWVGaWx0ZXIudGVzdChuYW1lKSlcbiAgICAgICAgICAuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmFtZS5yZXBsYWNlKCctLScsICcnKTtcbiAgICAgICAgICAgIGNvbG9yc1trZXldID0gdGhpcy5nZXRDU1NWYXJpYWJsZShrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sb3JzO1xuICAgICAgfSwge30pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,31 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  const ODX_DEFAULT_IDENTITY_MATCHER = (item1, item2) => item1 === item2;
3
+ /**
4
+ * An Angular `InjectionToken` for the `IdentityMatcher` function, allowing for the provision
5
+ * and injection of custom identity matching logic throughout the application. The token is
6
+ * provided with a default factory function that returns the `ODX_DEFAULT_IDENTITY_MATCHER`,
7
+ * which can be overridden with custom logic as needed.
8
+ *
9
+ * @type {InjectionToken<IdentityMatcher<unknown>>}
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Providing a custom identity matcher in an Angular module
14
+ * @NgModule({
15
+ * providers: [
16
+ * { provide: ODX_IDENTITY_MATCHER, useValue: (item1, item2) => item1.id === item2.id }
17
+ * ]
18
+ * })
19
+ * class AppModule {}
20
+ *
21
+ * // Injecting and using the custom provided identity matcher
22
+ * constructor(@Inject(ODX_IDENTITY_MATCHER) private identityMatcher: IdentityMatcher<MyType>) {
23
+ * console.log(this.identityMatcher({ id: 1 }, { id: 1 })); // Depends on the custom logic provided
24
+ * }
25
+ * ```
26
+ */
3
27
  export const ODX_IDENTITY_MATCHER = new InjectionToken('@odx/angular::StringHandler', {
4
28
  providedIn: 'root',
5
29
  factory: () => ODX_DEFAULT_IDENTITY_MATCHER,
6
30
  });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktbWF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3Rva2Vucy9pZGVudGl0eS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSw0QkFBNEIsR0FBNkIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO0FBRWpHLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUEyQiw2QkFBNkIsRUFBRTtJQUM5RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsNEJBQTRCO0NBQzVDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIElkZW50aXR5TWF0Y2hlcjxUPiA9IChpdGVtMTogVCwgaXRlbTI6IFQpID0+IGJvb2xlYW47XG5cbmNvbnN0IE9EWF9ERUZBVUxUX0lERU5USVRZX01BVENIRVI6IElkZW50aXR5TWF0Y2hlcjx1bmtub3duPiA9IChpdGVtMSwgaXRlbTIpID0+IGl0ZW0xID09PSBpdGVtMjtcblxuZXhwb3J0IGNvbnN0IE9EWF9JREVOVElUWV9NQVRDSEVSID0gbmV3IEluamVjdGlvblRva2VuPElkZW50aXR5TWF0Y2hlcjx1bmtub3duPj4oJ0BvZHgvYW5ndWxhcjo6U3RyaW5nSGFuZGxlcicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxufSk7XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktbWF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3Rva2Vucy9pZGVudGl0eS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxQi9DLE1BQU0sNEJBQTRCLEdBQTZCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztBQUVqRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBMkIsNkJBQTZCLEVBQUU7SUFDOUcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLDRCQUE0QjtDQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdHlwZSB0aGF0IGRlZmluZXMgdGhlIGxvZ2ljIHRvIGNvbXBhcmUgdHdvIGl0ZW1zIGZvciBpZGVudGl0eS5cbiAqIEl0IHNob3VsZCByZXR1cm4gYHRydWVgIGlmIHRoZSBpdGVtcyBhcmUgY29uc2lkZXJlZCBpZGVudGljYWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyB0byBiZSBjb21wYXJlZC5cbiAqIEBwYXJhbSB7VH0gaXRlbTEgVGhlIGZpcnN0IGl0ZW0gdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7VH0gaXRlbTIgVGhlIHNlY29uZCBpdGVtIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpdGVtcyBhcmUgaWRlbnRpY2FsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEEgc2ltcGxlIGlkZW50aXR5IG1hdGNoZXIgZm9yIG51bWJlciB0eXBlc1xuICogY29uc3QgbnVtYmVyTWF0Y2hlcjogSWRlbnRpdHlNYXRjaGVyPG51bWJlcj4gPSAobjEsIG4yKSA9PiBuMSA9PT0gbjI7XG4gKiBjb25zb2xlLmxvZyhudW1iZXJNYXRjaGVyKDEsIDEpKTsgLy8gT3V0cHV0czogdHJ1ZVxuICogY29uc29sZS5sb2cobnVtYmVyTWF0Y2hlcigxLCAyKSk7IC8vIE91dHB1dHM6IGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlNYXRjaGVyPFQ+ID0gKGl0ZW0xOiBULCBpdGVtMjogVCkgPT4gYm9vbGVhbjtcblxuY29uc3QgT0RYX0RFRkFVTFRfSURFTlRJVFlfTUFUQ0hFUjogSWRlbnRpdHlNYXRjaGVyPHVua25vd24+ID0gKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEgPT09IGl0ZW0yO1xuXG4vKipcbiAqIEFuIEFuZ3VsYXIgYEluamVjdGlvblRva2VuYCBmb3IgdGhlIGBJZGVudGl0eU1hdGNoZXJgIGZ1bmN0aW9uLCBhbGxvd2luZyBmb3IgdGhlIHByb3Zpc2lvblxuICogYW5kIGluamVjdGlvbiBvZiBjdXN0b20gaWRlbnRpdHkgbWF0Y2hpbmcgbG9naWMgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uIFRoZSB0b2tlbiBpc1xuICogcHJvdmlkZWQgd2l0aCBhIGRlZmF1bHQgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGBPRFhfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSYCxcbiAqIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggY3VzdG9tIGxvZ2ljIGFzIG5lZWRlZC5cbiAqXG4gKiBAdHlwZSB7SW5qZWN0aW9uVG9rZW48SWRlbnRpdHlNYXRjaGVyPHVua25vd24+Pn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFByb3ZpZGluZyBhIGN1c3RvbSBpZGVudGl0eSBtYXRjaGVyIGluIGFuIEFuZ3VsYXIgbW9kdWxlXG4gKiBATmdNb2R1bGUoe1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7IHByb3ZpZGU6IE9EWF9JREVOVElUWV9NQVRDSEVSLCB1c2VWYWx1ZTogKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEuaWQgPT09IGl0ZW0yLmlkIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBpZGVudGl0eSBtYXRjaGVyXG4gKiBjb25zdHJ1Y3RvcihASW5qZWN0KE9EWF9JREVOVElUWV9NQVRDSEVSKSBwcml2YXRlIGlkZW50aXR5TWF0Y2hlcjogSWRlbnRpdHlNYXRjaGVyPE15VHlwZT4pIHtcbiAqICAgY29uc29sZS5sb2codGhpcy5pZGVudGl0eU1hdGNoZXIoeyBpZDogMSB9LCB7IGlkOiAxIH0pKTsgLy8gRGVwZW5kcyBvbiB0aGUgY3VzdG9tIGxvZ2ljIHByb3ZpZGVkXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE9EWF9JREVOVElUWV9NQVRDSEVSID0gbmV3IEluamVjdGlvblRva2VuPElkZW50aXR5TWF0Y2hlcjx1bmtub3duPj4oJ0BvZHgvYW5ndWxhcjo6U3RyaW5nSGFuZGxlcicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxufSk7XG4iXX0=
@@ -2,8 +2,32 @@ import { InjectionToken } from '@angular/core';
2
2
  const ODX_DEFAULT_STRING_SEARCH_HANDLER = (item, query) => {
3
3
  return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());
4
4
  };
5
+ /**
6
+ * An Angular `InjectionToken` for the `StringSearchHandler` function, allowing for the provision
7
+ * and injection of custom string search logic throughout the application. This token is provided with
8
+ * a default factory function that returns the `ODX_DEFAULT_STRING_SEARCH_HANDLER`, which can be overridden
9
+ * with custom logic as needed.
10
+ *
11
+ * @type {InjectionToken<StringSearchHandler>}
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * // Providing a custom string search handler in an Angular module
16
+ * @NgModule({
17
+ * providers: [
18
+ * { provide: ODX_STRING_SEARCH_HANDLER, useValue: (item, query) => item.startsWith(query) }
19
+ * ]
20
+ * })
21
+ * class AppModule {}
22
+ *
23
+ * // Injecting and using the custom provided string search handler
24
+ * constructor(@Inject(ODX_STRING_SEARCH_HANDLER) private searchHandler: StringSearchHandler) {
25
+ * console.log(this.searchHandler('Angular', 'A')); // Depends on the custom logic provided
26
+ * }
27
+ * ```
28
+ */
5
29
  export const ODX_STRING_SEARCH_HANDLER = new InjectionToken('@odx/angular::StringHandler', {
6
30
  providedIn: 'root',
7
31
  factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,
8
32
  });
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNlYXJjaC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZy1zZWFyY2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE1BQU0saUNBQWlDLEdBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzdFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQXNCLDZCQUE2QixFQUFFO0lBQzlHLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQ0FBaUM7Q0FDakQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbmNvbnN0IE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUjogU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtLCBxdWVyeSkgPT4ge1xuICByZXR1cm4gaXRlbS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IE9EWF9TVFJJTkdfU0VBUkNIX0hBTkRMRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RyaW5nU2VhcmNoSGFuZGxlcj4oJ0BvZHgvYW5ndWxhcjo6U3RyaW5nSGFuZGxlcicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9TVFJJTkdfU0VBUkNIX0hBTkRMRVIsXG59KTtcbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNlYXJjaC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZy1zZWFyY2gtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBbUIvQyxNQUFNLGlDQUFpQyxHQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM3RSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFzQiw2QkFBNkIsRUFBRTtJQUM5RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsaUNBQWlDO0NBQ2pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0eXBlIHRoYXQgZGVmaW5lcyB0aGUgbG9naWMgdG8gc2VhcmNoIHdpdGhpbiBhIHN0cmluZyBpdGVtIHVzaW5nIGEgcXVlcnkgc3RyaW5nLlxuICogSXQgc2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgdGhlIGl0ZW0gbWF0Y2hlcyB0aGUgcXVlcnkgYWNjb3JkaW5nIHRvIHRoZSBpbXBsZW1lbnRlZCBsb2dpYywgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW0gLSBUaGUgc3RyaW5nIGl0ZW0gdG8gc2VhcmNoIHdpdGhpbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBxdWVyeSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHF1ZXJ5IG1hdGNoZXMgdGhlIGl0ZW0sIG90aGVyd2lzZSBgZmFsc2VgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gQSBzaW1wbGUgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hcbiAqIGNvbnN0IHNlYXJjaEhhbmRsZXI6IFN0cmluZ1NlYXJjaEhhbmRsZXIgPSAoaXRlbSwgcXVlcnkpID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAqIGNvbnNvbGUubG9nKHNlYXJjaEhhbmRsZXIoJ0hlbGxvIFdvcmxkJywgJ3dvcmxkJykpOyAvLyBPdXRwdXRzOiB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbmNvbnN0IE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUjogU3RyaW5nU2VhcmNoSGFuZGxlciA9IChpdGVtLCBxdWVyeSkgPT4ge1xuICByZXR1cm4gaXRlbS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xufTtcblxuLyoqXG4gKiBBbiBBbmd1bGFyIGBJbmplY3Rpb25Ub2tlbmAgZm9yIHRoZSBgU3RyaW5nU2VhcmNoSGFuZGxlcmAgZnVuY3Rpb24sIGFsbG93aW5nIGZvciB0aGUgcHJvdmlzaW9uXG4gKiBhbmQgaW5qZWN0aW9uIG9mIGN1c3RvbSBzdHJpbmcgc2VhcmNoIGxvZ2ljIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIHRva2VuIGlzIHByb3ZpZGVkIHdpdGhcbiAqIGEgZGVmYXVsdCBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUmAsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuXG4gKiB3aXRoIGN1c3RvbSBsb2dpYyBhcyBuZWVkZWQuXG4gKlxuICogQHR5cGUge0luamVjdGlvblRva2VuPFN0cmluZ1NlYXJjaEhhbmRsZXI+fVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgY3VzdG9tIHN0cmluZyBzZWFyY2ggaGFuZGxlciBpbiBhbiBBbmd1bGFyIG1vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBPRFhfU1RSSU5HX1NFQVJDSF9IQU5ETEVSLCB1c2VWYWx1ZTogKGl0ZW0sIHF1ZXJ5KSA9PiBpdGVtLnN0YXJ0c1dpdGgocXVlcnkpIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBzdHJpbmcgc2VhcmNoIGhhbmRsZXJcbiAqIGNvbnN0cnVjdG9yKEBJbmplY3QoT0RYX1NUUklOR19TRUFSQ0hfSEFORExFUikgcHJpdmF0ZSBzZWFyY2hIYW5kbGVyOiBTdHJpbmdTZWFyY2hIYW5kbGVyKSB7XG4gKiAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoSGFuZGxlcignQW5ndWxhcicsICdBJykpOyAvLyBEZXBlbmRzIG9uIHRoZSBjdXN0b20gbG9naWMgcHJvdmlkZWRcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgT0RYX1NUUklOR19TRUFSQ0hfSEFORExFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdHJpbmdTZWFyY2hIYW5kbGVyPignQG9keC9hbmd1bGFyOjpTdHJpbmdIYW5kbGVyJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IE9EWF9ERUZBVUxUX1NUUklOR19TRUFSQ0hfSEFORExFUixcbn0pO1xuIl19
@@ -1,8 +1,33 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { isPresent } from '@odx/angular/utils';
3
3
  const ODX_DEFAULT_STRINGIFY = (item) => (isPresent(item) ? String(item) : '');
4
+ /**
5
+ * An Angular `InjectionToken` for the `StringifyFn` function, allowing the injection of custom
6
+ * stringification logic throughout an application. By default, it is provided with a factory
7
+ * function that returns `ODX_DEFAULT_STRINGIFY`. This setup permits easy customization of
8
+ * how items are converted to strings, facilitating different stringification strategies
9
+ * for various application needs.
10
+ *
11
+ * @type {InjectionToken<StringifyFn<unknown>>}
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * // Providing a custom stringify function in an Angular module
16
+ * @NgModule({
17
+ * providers: [
18
+ * { provide: ODX_STRINGIFY, useValue: (item) => JSON.stringify(item) }
19
+ * ]
20
+ * })
21
+ * class AppModule {}
22
+ *
23
+ * // Injecting and using the custom provided stringify function
24
+ * constructor(@Inject(ODX_STRINGIFY) private stringify: StringifyFn<unknown>) {
25
+ * console.log(this.stringify({ key: 'value' })); // Outputs: '{"key":"value"}'
26
+ * }
27
+ * ```
28
+ */
4
29
  export const ODX_STRINGIFY = new InjectionToken('@odx/angular::Stringify', {
5
30
  providedIn: 'root',
6
31
  factory: () => ODX_DEFAULT_STRINGIFY,
7
32
  });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkvQyxNQUFNLHFCQUFxQixHQUF5QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFcEcsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUF1Qix5QkFBeUIsRUFBRTtJQUMvRixVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMscUJBQXFCO0NBQ3JDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1ByZXNlbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBTdHJpbmdpZnlGbjxUPiA9IChpdGVtOiBUKSA9PiBzdHJpbmc7XG5cbmNvbnN0IE9EWF9ERUZBVUxUX1NUUklOR0lGWTogU3RyaW5naWZ5Rm48dW5rbm93bj4gPSAoaXRlbSkgPT4gKGlzUHJlc2VudChpdGVtKSA/IFN0cmluZyhpdGVtKSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IE9EWF9TVFJJTkdJRlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RyaW5naWZ5Rm48dW5rbm93bj4+KCdAb2R4L2FuZ3VsYXI6OlN0cmluZ2lmeScsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9TVFJJTkdJRlksXG59KTtcbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvdG9rZW5zL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQXFCL0MsTUFBTSxxQkFBcUIsR0FBeUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXVCLHlCQUF5QixFQUFFO0lBQy9GLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUI7Q0FDckMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUHJlc2VudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0eXBlIHRoYXQgZGVmaW5lcyB0aGUgbG9naWMgdG8gY29udmVydCBhbiBpdGVtIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKiBUaGUgZnVuY3Rpb24gc2hvdWxkIGhhbmRsZSB2YXJpb3VzIHR5cGVzIGdyYWNlZnVsbHksIHJldHVybmluZyBhIG1lYW5pbmdmdWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBmb3IgZWFjaC4gSWYgdGhlIGl0ZW0gaXMgbm90IHByZXNlbnQgKG51bGwgb3IgdW5kZWZpbmVkKSwgYW4gZW1wdHkgc3RyaW5nIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgaXRlbSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7VH0gaXRlbSAtIFRoZSBpdGVtIHRvIHN0cmluZ2lmeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGl0ZW0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBIHNpbXBsZSBzdHJpbmdpZnkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG51bGwgYW5kIHVuZGVmaW5lZFxuICogY29uc3Qgc3RyaW5naWZ5OiBTdHJpbmdpZnlGbjx1bmtub3duPiA9IChpdGVtKSA9PiAoaXNQcmVzZW50KGl0ZW0pID8gU3RyaW5nKGl0ZW0pIDogJycpO1xuICogY29uc29sZS5sb2coc3RyaW5naWZ5KDEyMykpOyAvLyBPdXRwdXRzOiBcIjEyM1wiXG4gKiBjb25zb2xlLmxvZyhzdHJpbmdpZnkobnVsbCkpOyAvLyBPdXRwdXRzOiBcIlwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5naWZ5Rm48VD4gPSAoaXRlbTogVCkgPT4gc3RyaW5nO1xuXG5jb25zdCBPRFhfREVGQVVMVF9TVFJJTkdJRlk6IFN0cmluZ2lmeUZuPHVua25vd24+ID0gKGl0ZW0pID0+IChpc1ByZXNlbnQoaXRlbSkgPyBTdHJpbmcoaXRlbSkgOiAnJyk7XG5cbi8qKlxuICogQW4gQW5ndWxhciBgSW5qZWN0aW9uVG9rZW5gIGZvciB0aGUgYFN0cmluZ2lmeUZuYCBmdW5jdGlvbiwgYWxsb3dpbmcgdGhlIGluamVjdGlvbiBvZiBjdXN0b21cbiAqIHN0cmluZ2lmaWNhdGlvbiBsb2dpYyB0aHJvdWdob3V0IGFuIGFwcGxpY2F0aW9uLiBCeSBkZWZhdWx0LCBpdCBpcyBwcm92aWRlZCB3aXRoIGEgZmFjdG9yeVxuICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGBPRFhfREVGQVVMVF9TVFJJTkdJRllgLiBUaGlzIHNldHVwIHBlcm1pdHMgZWFzeSBjdXN0b21pemF0aW9uIG9mXG4gKiBob3cgaXRlbXMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzLCBmYWNpbGl0YXRpbmcgZGlmZmVyZW50IHN0cmluZ2lmaWNhdGlvbiBzdHJhdGVnaWVzXG4gKiBmb3IgdmFyaW91cyBhcHBsaWNhdGlvbiBuZWVkcy5cbiAqXG4gKiBAdHlwZSB7SW5qZWN0aW9uVG9rZW48U3RyaW5naWZ5Rm48dW5rbm93bj4+fVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgY3VzdG9tIHN0cmluZ2lmeSBmdW5jdGlvbiBpbiBhbiBBbmd1bGFyIG1vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBPRFhfU1RSSU5HSUZZLCB1c2VWYWx1ZTogKGl0ZW0pID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGN1c3RvbSBwcm92aWRlZCBzdHJpbmdpZnkgZnVuY3Rpb25cbiAqIGNvbnN0cnVjdG9yKEBJbmplY3QoT0RYX1NUUklOR0lGWSkgcHJpdmF0ZSBzdHJpbmdpZnk6IFN0cmluZ2lmeUZuPHVua25vd24+KSB7XG4gKiAgIGNvbnNvbGUubG9nKHRoaXMuc3RyaW5naWZ5KHsga2V5OiAndmFsdWUnIH0pKTsgLy8gT3V0cHV0czogJ3tcImtleVwiOlwidmFsdWVcIn0nXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE9EWF9TVFJJTkdJRlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3RyaW5naWZ5Rm48dW5rbm93bj4+KCdAb2R4L2FuZ3VsYXI6OlN0cmluZ2lmeScsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBPRFhfREVGQVVMVF9TVFJJTkdJRlksXG59KTtcbiJdfQ==
@@ -5,6 +5,33 @@ import { switchMap, take } from 'rxjs';
5
5
  import { LocalizationService } from '../localization.service';
6
6
  import { makeLocalizationFeature } from '../models';
7
7
  export const HTTP_LANGUAGE_HEADER = 'Accept-Language';
8
+ /**
9
+ * Creates an HTTP interceptor function that adds a language header to outgoing HTTP requests,
10
+ * but only for URLs matching the provided criteria. This allows the server to respond with
11
+ * resources localized in the user's current language.
12
+ *
13
+ * @param {HttpLanguageHeaderInterceptorConfig} config - The configuration for the interceptor,
14
+ * including the list of allowed URLs and optionally a custom header name.
15
+ * @returns {HttpInterceptorFn} An Angular HTTP interceptor function that conditionally adds
16
+ * the current language as an HTTP header based on the request URL.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * // Use in HTTP client module setup
21
+ * import { HttpClientModule } from '@angular/common/http';
22
+ * import { httpLanguageHeaderInterceptor, HTTP_LANGUAGE_HEADER } from '@odx/angular/localization';
23
+ *
24
+ * @NgModule({
25
+ * imports: [HttpClientModule],
26
+ * providers: [
27
+ * provideHttpClient(withInterceptors([
28
+ * httpLanguageHeaderInterceptor({ allowedUrls: ['/api'], headerName: HTTP_LANGUAGE_HEADER })
29
+ * ]))
30
+ * ]
31
+ * })
32
+ * export class AppModule {}
33
+ * ```
34
+ */
8
35
  export function httpLanguageHeaderInterceptor({ allowedUrls, headerName }) {
9
36
  return (req, next) => {
10
37
  const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));
@@ -16,8 +43,34 @@ export function httpLanguageHeaderInterceptor({ allowedUrls, headerName }) {
16
43
  return next(req);
17
44
  };
18
45
  }
46
+ /**
47
+ * Provides a localization feature that automatically adds a language header to HTTP requests
48
+ * for specified URLs, using the current active language. This function simplifies setting up
49
+ * the HTTP language header interceptor by wrapping it into a LocalizationFeature, making it easy
50
+ * to integrate with the application's localization infrastructure.
51
+ *
52
+ * @param {HttpLanguageHeaderInterceptorConfig} config - The configuration for the language header
53
+ * interceptor, specifying which URLs should include the language header and optionally defining a
54
+ * custom header name.
55
+ * @returns {LocalizationFeature} A localization feature object that can be used to configure
56
+ * the application's localization settings to include automatic language header addition for HTTP requests.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * // Example usage with the localization provider
61
+ * import { provideLocalization, LocalizationModule, withHttpLanguageHeader } from '@odx/angular/localization';
62
+ *
63
+ * @NgModule({
64
+ * imports: [LocalizationModule],
65
+ * providers: [
66
+ * provideLocalization({}, withHttpLanguageHeader({ allowedUrls: ['/api'] }))
67
+ * ]
68
+ * })
69
+ * export class AppModule {}
70
+ * ```
71
+ */
19
72
  export function withHttpLanguageHeader(config) {
20
73
  const providers = provideHttpClient(withInterceptors([httpLanguageHeaderInterceptor(config)]));
21
74
  return makeLocalizationFeature(providers);
22
75
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWh0dHAtbGFuZ3VhZ2UtaGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBT3RELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQXVDO0lBQzVHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO2dCQUFFLFNBQVM7WUFDN0MsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNySTtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBMkM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUvRixPQUFPLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkZlYXR1cmUsIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEhUVFBfTEFOR1VBR0VfSEVBREVSID0gJ0FjY2VwdC1MYW5ndWFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcge1xuICBhbGxvd2VkVXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgaGVhZGVyTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBMYW5ndWFnZUhlYWRlckludGVyY2VwdG9yKHsgYWxsb3dlZFVybHMsIGhlYWRlck5hbWUgfTogSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7IFtoZWFkZXJOYW1lID8/IEhUVFBfTEFOR1VBR0VfSEVBREVSXTogbGFuZ3VhZ2UgfSB9KSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIdHRwTGFuZ3VhZ2VIZWFkZXIoY29uZmlnOiBIdHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvckNvbmZpZyk6IExvY2FsaXphdGlvbkZlYXR1cmUge1xuICBjb25zdCBwcm92aWRlcnMgPSBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzKFtodHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvcihjb25maWcpXSkpO1xuXG4gIHJldHVybiBtYWtlTG9jYWxpemF0aW9uRmVhdHVyZShwcm92aWRlcnMpO1xufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLWhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9mZWF0dXJlcy93aXRoLWh0dHAtbGFuZ3VhZ2UtaGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQXVCLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBaUJ0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUF1QztJQUM1RyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztnQkFBRSxTQUFTO1lBQzdDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLElBQUksb0JBQW9CLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckk7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBMkM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUvRixPQUFPLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkZlYXR1cmUsIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEhUVFBfTEFOR1VBR0VfSEVBREVSID0gJ0FjY2VwdC1MYW5ndWFnZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBIVFRQIGxhbmd1YWdlIGhlYWRlciBpbnRlcmNlcHRvci4gSXQgc3BlY2lmaWVzIHdoaWNoIFVSTHNcbiAqIHRoZSBpbnRlcmNlcHRvciBzaG91bGQgYXBwbHkgdG8gYW5kIGFsbG93cyBjdXN0b21pemluZyB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIHVzZWQgdG8gdHJhbnNtaXRcbiAqIHRoZSBjdXJyZW50IGxhbmd1YWdlIHNldHRpbmcuXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBSZWdFeHA+fSBhbGxvd2VkVXJscyAtIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgUmVnRXhwIHBhdHRlcm5zXG4gKiBpbmRpY2F0aW5nIHRoZSBVUkxzIHRvIHdoaWNoIHRoZSBsYW5ndWFnZSBoZWFkZXIgc2hvdWxkIGJlIGFkZGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtoZWFkZXJOYW1lPUhUVFBfTEFOR1VBR0VfSEVBREVSXSAtIE9wdGlvbmFsLiBUaGUgbmFtZSBvZiB0aGUgSFRUUCBoZWFkZXJcbiAqIHRocm91Z2ggd2hpY2ggdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZyB3aWxsIGJlIHRyYW5zbWl0dGVkLiBEZWZhdWx0cyB0byAnQWNjZXB0LUxhbmd1YWdlJy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvckNvbmZpZyB7XG4gIGFsbG93ZWRVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSFRUUCBpbnRlcmNlcHRvciBmdW5jdGlvbiB0aGF0IGFkZHMgYSBsYW5ndWFnZSBoZWFkZXIgdG8gb3V0Z29pbmcgSFRUUCByZXF1ZXN0cyxcbiAqIGJ1dCBvbmx5IGZvciBVUkxzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBjcml0ZXJpYS4gVGhpcyBhbGxvd3MgdGhlIHNlcnZlciB0byByZXNwb25kIHdpdGhcbiAqIHJlc291cmNlcyBsb2NhbGl6ZWQgaW4gdGhlIHVzZXIncyBjdXJyZW50IGxhbmd1YWdlLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgaW50ZXJjZXB0b3IsXG4gKiBpbmNsdWRpbmcgdGhlIGxpc3Qgb2YgYWxsb3dlZCBVUkxzIGFuZCBvcHRpb25hbGx5IGEgY3VzdG9tIGhlYWRlciBuYW1lLlxuICogQHJldHVybnMge0h0dHBJbnRlcmNlcHRvckZufSBBbiBBbmd1bGFyIEhUVFAgaW50ZXJjZXB0b3IgZnVuY3Rpb24gdGhhdCBjb25kaXRpb25hbGx5IGFkZHNcbiAqIHRoZSBjdXJyZW50IGxhbmd1YWdlIGFzIGFuIEhUVFAgaGVhZGVyIGJhc2VkIG9uIHRoZSByZXF1ZXN0IFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFVzZSBpbiBIVFRQIGNsaWVudCBtb2R1bGUgc2V0dXBcbiAqIGltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyBodHRwTGFuZ3VhZ2VIZWFkZXJJbnRlcmNlcHRvciwgSFRUUF9MQU5HVUFHRV9IRUFERVIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV0sXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW1xuICogICAgICAgaHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3IoeyBhbGxvd2VkVXJsczogWycvYXBpJ10sIGhlYWRlck5hbWU6IEhUVFBfTEFOR1VBR0VfSEVBREVSIH0pXG4gKiAgICAgXSkpXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBMYW5ndWFnZUhlYWRlckludGVyY2VwdG9yKHsgYWxsb3dlZFVybHMsIGhlYWRlck5hbWUgfTogSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRIZWFkZXJzOiB7IFtoZWFkZXJOYW1lID8/IEhUVFBfTEFOR1VBR0VfSEVBREVSXTogbGFuZ3VhZ2UgfSB9KSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQocmVxKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBhIGxvY2FsaXphdGlvbiBmZWF0dXJlIHRoYXQgYXV0b21hdGljYWxseSBhZGRzIGEgbGFuZ3VhZ2UgaGVhZGVyIHRvIEhUVFAgcmVxdWVzdHNcbiAqIGZvciBzcGVjaWZpZWQgVVJMcywgdXNpbmcgdGhlIGN1cnJlbnQgYWN0aXZlIGxhbmd1YWdlLiBUaGlzIGZ1bmN0aW9uIHNpbXBsaWZpZXMgc2V0dGluZyB1cFxuICogdGhlIEhUVFAgbGFuZ3VhZ2UgaGVhZGVyIGludGVyY2VwdG9yIGJ5IHdyYXBwaW5nIGl0IGludG8gYSBMb2NhbGl6YXRpb25GZWF0dXJlLCBtYWtpbmcgaXQgZWFzeVxuICogdG8gaW50ZWdyYXRlIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgbG9jYWxpemF0aW9uIGluZnJhc3RydWN0dXJlLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2UgaGVhZGVyXG4gKiBpbnRlcmNlcHRvciwgc3BlY2lmeWluZyB3aGljaCBVUkxzIHNob3VsZCBpbmNsdWRlIHRoZSBsYW5ndWFnZSBoZWFkZXIgYW5kIG9wdGlvbmFsbHkgZGVmaW5pbmcgYVxuICogY3VzdG9tIGhlYWRlciBuYW1lLlxuICogQHJldHVybnMge0xvY2FsaXphdGlvbkZlYXR1cmV9IEEgbG9jYWxpemF0aW9uIGZlYXR1cmUgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlXG4gKiB0aGUgYXBwbGljYXRpb24ncyBsb2NhbGl6YXRpb24gc2V0dGluZ3MgdG8gaW5jbHVkZSBhdXRvbWF0aWMgbGFuZ3VhZ2UgaGVhZGVyIGFkZGl0aW9uIGZvciBIVFRQIHJlcXVlc3RzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRXhhbXBsZSB1c2FnZSB3aXRoIHRoZSBsb2NhbGl6YXRpb24gcHJvdmlkZXJcbiAqIGltcG9ydCB7IHByb3ZpZGVMb2NhbGl6YXRpb24sIExvY2FsaXphdGlvbk1vZHVsZSwgd2l0aEh0dHBMYW5ndWFnZUhlYWRlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9sb2NhbGl6YXRpb24nO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtMb2NhbGl6YXRpb25Nb2R1bGVdLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlTG9jYWxpemF0aW9uKHt9LCB3aXRoSHR0cExhbmd1YWdlSGVhZGVyKHsgYWxsb3dlZFVybHM6IFsnL2FwaSddIH0pKVxuICogICBdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoSHR0cExhbmd1YWdlSGVhZGVyKGNvbmZpZzogSHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3JDb25maWcpOiBMb2NhbGl6YXRpb25GZWF0dXJlIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbaHR0cExhbmd1YWdlSGVhZGVySW50ZXJjZXB0b3IoY29uZmlnKV0pKTtcblxuICByZXR1cm4gbWFrZUxvY2FsaXphdGlvbkZlYXR1cmUocHJvdmlkZXJzKTtcbn1cbiJdfQ==
@@ -5,6 +5,32 @@ import { switchMap, take } from 'rxjs';
5
5
  import { LocalizationService } from '../localization.service';
6
6
  import { makeLocalizationFeature } from '../models';
7
7
  export const HTTP_LANGUAGE_QUERY = 'language';
8
+ /**
9
+ * Creates an HTTP interceptor function that appends the current language as a query parameter
10
+ * to outgoing HTTP requests that match specified URLs. This interceptor enables dynamic content
11
+ * localization by informing the backend of the user's preferred language.
12
+ *
13
+ * @param {HttpLanguageQueryParamInterceptorConfig} config - Configuration for the interceptor,
14
+ * including allowed URLs and an optional custom name for the query parameter.
15
+ * @returns {HttpInterceptorFn} The interceptor function ready to be applied to the HTTP client.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Applying the interceptor in an Angular module
20
+ * import { HttpClientModule } from '@angular/common/http';
21
+ * import { withHttpLanguageQueryParam } from '@odx/angular/localization';
22
+ *
23
+ * @NgModule({
24
+ * imports: [HttpClientModule],
25
+ * providers: [
26
+ * provideHttpClient(withInterceptors([
27
+ * withHttpLanguageQueryParam({ allowedUrls: ['/api/resources'] })
28
+ * ]))
29
+ * ]
30
+ * })
31
+ * export class ApiModule {}
32
+ * ```
33
+ */
8
34
  export function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamName }) {
9
35
  return (req, next) => {
10
36
  const language$ = inject(LocalizationService).activeLanguage$.pipe(take(1));
@@ -16,8 +42,33 @@ export function withHttpLanguageQueryParamInterceptor({ allowedUrls, queryParamN
16
42
  return next(req);
17
43
  };
18
44
  }
45
+ /**
46
+ * Registers the HTTP interceptor that appends the current language as a query parameter to
47
+ * outgoing requests for configured URLs as a localization feature. This utility function
48
+ * simplifies the setup by bundling the interceptor into a feature that can be easily integrated
49
+ * with localization configurations.
50
+ *
51
+ * @param {HttpLanguageQueryParamInterceptorConfig} config - Configuration for appending the
52
+ * language query parameter, including allowed URLs and an optional parameter name.
53
+ * @returns {LocalizationFeature} A localization feature encapsulating the interceptor, ready
54
+ * for integration with the application's localization setup.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * // Integrating the localization feature in an Angular module
59
+ * import { provideLocalization } from '@angular/core';
60
+ * import { withHttpLanguageQueryParam } from '@odx/angular/localization';
61
+ *
62
+ * @NgModule({
63
+ * providers: [
64
+ * provideLocalization({}, withHttpLanguageQueryParam({ allowedUrls: ['/api'] }))
65
+ * ]
66
+ * })
67
+ * export class AppModule {}
68
+ * ```
69
+ */
19
70
  export function withHttpLanguageQueryParam(config) {
20
71
  const providers = provideHttpClient(withInterceptors([withHttpLanguageQueryParamInterceptor(config)]));
21
72
  return makeLocalizationFeature(providers);
22
73
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLXF1ZXJ5LXBhcmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvY2FsaXphdGlvbi9zcmMvbGliL2ZlYXR1cmVzL3dpdGgtaHR0cC1sYW5ndWFnZS1xdWVyeS1wYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFPOUMsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBMkM7SUFDNUgsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQUUsU0FBUztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZJO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxNQUErQztJQUN4RixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZHLE9BQU8sdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBJbnRlcmNlcHRvckZuLCBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWF0Y2hVcmwgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWxpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uRmVhdHVyZSwgbWFrZUxvY2FsaXphdGlvbkZlYXR1cmUgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgSFRUUF9MQU5HVUFHRV9RVUVSWSA9ICdsYW5ndWFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cExhbmd1YWdlUXVlcnlQYXJhbUludGVyY2VwdG9yQ29uZmlnIHtcbiAgYWxsb3dlZFVybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIHF1ZXJ5UGFyYW1OYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvcih7IGFsbG93ZWRVcmxzLCBxdWVyeVBhcmFtTmFtZSB9OiBIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRQYXJhbXM6IHsgW3F1ZXJ5UGFyYW1OYW1lID8/IEhUVFBfTEFOR1VBR0VfUVVFUlldOiBsYW5ndWFnZSB9IH0pKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW0oY29uZmlnOiBIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWcpOiBMb2NhbGl6YXRpb25GZWF0dXJlIHtcbiAgY29uc3QgcHJvdmlkZXJzID0gcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvcihjb25maWcpXSkpO1xuXG4gIHJldHVybiBtYWtlTG9jYWxpemF0aW9uRmVhdHVyZShwcm92aWRlcnMpO1xufVxuIl19
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1odHRwLWxhbmd1YWdlLXF1ZXJ5LXBhcmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvY2FsaXphdGlvbi9zcmMvbGliL2ZlYXR1cmVzL3dpdGgtaHR0cC1sYW5ndWFnZS1xdWVyeS1wYXJhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFpQjlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBMkM7SUFDNUgsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQUUsU0FBUztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZJO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBK0M7SUFDeEYsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RyxPQUFPLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiwgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkZlYXR1cmUsIG1ha2VMb2NhbGl6YXRpb25GZWF0dXJlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEhUVFBfTEFOR1VBR0VfUVVFUlkgPSAnbGFuZ3VhZ2UnO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEhUVFAgaW50ZXJjZXB0b3IgdGhhdCBhcHBlbmRzIHRoZSBjdXJyZW50XG4gKiBsYW5ndWFnZSBzZXR0aW5nIGFzIGEgcXVlcnkgcGFyYW1ldGVyIHRvIG91dGdvaW5nIHJlcXVlc3RzLiBUaGlzIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzXG4gKiB3aGljaCByZXF1ZXN0cyBzaG91bGQgaGF2ZSB0aGUgbGFuZ3VhZ2UgcGFyYW1ldGVyIGFwcGVuZGVkIGJhc2VkIG9uIHRoZWlyIFVSTHMuXG4gKlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmcgfCBSZWdFeHA+fSBhbGxvd2VkVXJscyAtIFVSTHMgKG9yIHBhdHRlcm5zIG1hdGNoaW5nIFVSTHMpIHRvIHdoaWNoXG4gKiB0aGUgbGFuZ3VhZ2UgcXVlcnkgcGFyYW1ldGVyIHNob3VsZCBiZSBhcHBlbmRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcXVlcnlQYXJhbU5hbWU9SFRUUF9MQU5HVUFHRV9RVUVSWV0gLSBUaGUgbmFtZSBvZiB0aGUgcXVlcnkgcGFyYW1ldGVyXG4gKiB1c2VkIHRvIHRyYW5zbWl0IHRoZSBjdXJyZW50IGxhbmd1YWdlLiBEZWZhdWx0cyB0byAnbGFuZ3VhZ2UnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvckNvbmZpZyB7XG4gIGFsbG93ZWRVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xuICBxdWVyeVBhcmFtTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEhUVFAgaW50ZXJjZXB0b3IgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoZSBjdXJyZW50IGxhbmd1YWdlIGFzIGEgcXVlcnkgcGFyYW1ldGVyXG4gKiB0byBvdXRnb2luZyBIVFRQIHJlcXVlc3RzIHRoYXQgbWF0Y2ggc3BlY2lmaWVkIFVSTHMuIFRoaXMgaW50ZXJjZXB0b3IgZW5hYmxlcyBkeW5hbWljIGNvbnRlbnRcbiAqIGxvY2FsaXphdGlvbiBieSBpbmZvcm1pbmcgdGhlIGJhY2tlbmQgb2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UuXG4gKlxuICogQHBhcmFtIHtIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWd9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnRlcmNlcHRvcixcbiAqIGluY2x1ZGluZyBhbGxvd2VkIFVSTHMgYW5kIGFuIG9wdGlvbmFsIGN1c3RvbSBuYW1lIGZvciB0aGUgcXVlcnkgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0h0dHBJbnRlcmNlcHRvckZufSBUaGUgaW50ZXJjZXB0b3IgZnVuY3Rpb24gcmVhZHkgdG8gYmUgYXBwbGllZCB0byB0aGUgSFRUUCBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBcHBseWluZyB0aGUgaW50ZXJjZXB0b3IgaW4gYW4gQW5ndWxhciBtb2R1bGVcbiAqIGltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyB3aXRoSHR0cExhbmd1YWdlUXVlcnlQYXJhbSB9IGZyb20gJ0BvZHgvYW5ndWxhci9sb2NhbGl6YXRpb24nO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXSxcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbXG4gKiAgICAgICB3aXRoSHR0cExhbmd1YWdlUXVlcnlQYXJhbSh7IGFsbG93ZWRVcmxzOiBbJy9hcGkvcmVzb3VyY2VzJ10gfSlcbiAqICAgICBdKSlcbiAqICAgXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcGlNb2R1bGUge31cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW1JbnRlcmNlcHRvcih7IGFsbG93ZWRVcmxzLCBxdWVyeVBhcmFtTmFtZSB9OiBIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3JDb25maWcpOiBIdHRwSW50ZXJjZXB0b3JGbiB7XG4gIHJldHVybiAocmVxLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbGFuZ3VhZ2UkID0gaW5qZWN0KExvY2FsaXphdGlvblNlcnZpY2UpLmFjdGl2ZUxhbmd1YWdlJC5waXBlKHRha2UoMSkpO1xuICAgIGZvciAoY29uc3QgYWxsb3dlZFVybCBvZiBhbGxvd2VkVXJscykge1xuICAgICAgaWYgKCFtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSkgY29udGludWU7XG4gICAgICByZXR1cm4gbGFuZ3VhZ2UkLnBpcGUoc3dpdGNoTWFwKChsYW5ndWFnZSkgPT4gbmV4dChyZXEuY2xvbmUoeyBzZXRQYXJhbXM6IHsgW3F1ZXJ5UGFyYW1OYW1lID8/IEhUVFBfTEFOR1VBR0VfUVVFUlldOiBsYW5ndWFnZSB9IH0pKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgSFRUUCBpbnRlcmNlcHRvciB0aGF0IGFwcGVuZHMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYXMgYSBxdWVyeSBwYXJhbWV0ZXIgdG9cbiAqIG91dGdvaW5nIHJlcXVlc3RzIGZvciBjb25maWd1cmVkIFVSTHMgYXMgYSBsb2NhbGl6YXRpb24gZmVhdHVyZS4gVGhpcyB1dGlsaXR5IGZ1bmN0aW9uXG4gKiBzaW1wbGlmaWVzIHRoZSBzZXR1cCBieSBidW5kbGluZyB0aGUgaW50ZXJjZXB0b3IgaW50byBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgZWFzaWx5IGludGVncmF0ZWRcbiAqIHdpdGggbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBwYXJhbSB7SHR0cExhbmd1YWdlUXVlcnlQYXJhbUludGVyY2VwdG9yQ29uZmlnfSBjb25maWcgLSBDb25maWd1cmF0aW9uIGZvciBhcHBlbmRpbmcgdGhlXG4gKiBsYW5ndWFnZSBxdWVyeSBwYXJhbWV0ZXIsIGluY2x1ZGluZyBhbGxvd2VkIFVSTHMgYW5kIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBuYW1lLlxuICogQHJldHVybnMge0xvY2FsaXphdGlvbkZlYXR1cmV9IEEgbG9jYWxpemF0aW9uIGZlYXR1cmUgZW5jYXBzdWxhdGluZyB0aGUgaW50ZXJjZXB0b3IsIHJlYWR5XG4gKiBmb3IgaW50ZWdyYXRpb24gd2l0aCB0aGUgYXBwbGljYXRpb24ncyBsb2NhbGl6YXRpb24gc2V0dXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlZ3JhdGluZyB0aGUgbG9jYWxpemF0aW9uIGZlYXR1cmUgaW4gYW4gQW5ndWxhciBtb2R1bGVcbiAqIGltcG9ydCB7IHByb3ZpZGVMb2NhbGl6YXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqIGltcG9ydCB7IHdpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtIH0gZnJvbSAnQG9keC9hbmd1bGFyL2xvY2FsaXphdGlvbic7XG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZUxvY2FsaXphdGlvbih7fSwgd2l0aEh0dHBMYW5ndWFnZVF1ZXJ5UGFyYW0oeyBhbGxvd2VkVXJsczogWycvYXBpJ10gfSkpXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtKGNvbmZpZzogSHR0cExhbmd1YWdlUXVlcnlQYXJhbUludGVyY2VwdG9yQ29uZmlnKTogTG9jYWxpemF0aW9uRmVhdHVyZSB7XG4gIGNvbnN0IHByb3ZpZGVycyA9IHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW3dpdGhIdHRwTGFuZ3VhZ2VRdWVyeVBhcmFtSW50ZXJjZXB0b3IoY29uZmlnKV0pKTtcblxuICByZXR1cm4gbWFrZUxvY2FsaXphdGlvbkZlYXR1cmUocHJvdmlkZXJzKTtcbn1cbiJdfQ==
@@ -1,6 +1,38 @@
1
1
  import { inject } from '@angular/core';
2
2
  import { WindowRef } from '@odx/angular';
3
+ /**
4
+ * Asynchronously loads the browser's current language setting by utilizing the `WindowRef` service.
5
+ * This function is intended to be used as a dynamic language loader within a localization configuration,
6
+ * allowing applications to automatically adapt to the user's preferred language as specified in their
7
+ * browser settings.
8
+ *
9
+ * The `WindowRef` service abstracts window-related operations, making it easier to interact with global
10
+ * browser properties and methods in a testable and platform-agnostic way. This function makes use of
11
+ * `WindowRef` to access the navigator's language setting in a safe and Angular-friendly manner.
12
+ *
13
+ * @returns {Promise<string>} A promise that resolves to the language code (e.g., 'en', 'fr') of the
14
+ * browser's currently configured language. This can then be used to set the active language in a
15
+ * localization configuration.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Example usage in a localization configuration
20
+ * import { provideLocalization } from '@odx/angular/utils';
21
+ * import { browserLanguageLoader } from '@odx/angular/localization';
22
+ *
23
+ * @NgModule({
24
+ * providers: [
25
+ * provideLocalization({
26
+ * activeLanguageLoader: browserLanguageLoader,
27
+ * availableLanguages: ['en', 'es', 'fr'],
28
+ * availableLocales: ['en-US', 'es-ES', 'fr-FR']
29
+ * })
30
+ * ]
31
+ * })
32
+ * export class AppModule { }
33
+ * ```
34
+ */
3
35
  export const browserLanguageLoader = async () => {
4
36
  return inject(WindowRef).getLanguage();
5
37
  };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9hZGVycy9icm93c2VyLWxhbmd1YWdlLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFCLEtBQUssSUFBSSxFQUFFO0lBQ2hFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4gfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgYnJvd3Nlckxhbmd1YWdlTG9hZGVyOiBMYW5ndWFnZUxvYWRlckZuID0gYXN5bmMgKCkgPT4ge1xuICByZXR1cm4gaW5qZWN0KFdpbmRvd1JlZikuZ2V0TGFuZ3VhZ2UoKTtcbn07XG4iXX0=
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9jYWxpemF0aW9uL3NyYy9saWIvbG9hZGVycy9icm93c2VyLWxhbmd1YWdlLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBcUIsS0FBSyxJQUFJLEVBQUU7SUFDaEUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgTGFuZ3VhZ2VMb2FkZXJGbiB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxhbmd1YWdlIHNldHRpbmcgYnkgdXRpbGl6aW5nIHRoZSBgV2luZG93UmVmYCBzZXJ2aWNlLlxuICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgZHluYW1pYyBsYW5ndWFnZSBsb2FkZXIgd2l0aGluIGEgbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24sXG4gKiBhbGxvd2luZyBhcHBsaWNhdGlvbnMgdG8gYXV0b21hdGljYWxseSBhZGFwdCB0byB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBhcyBzcGVjaWZpZWQgaW4gdGhlaXJcbiAqIGJyb3dzZXIgc2V0dGluZ3MuXG4gKlxuICogVGhlIGBXaW5kb3dSZWZgIHNlcnZpY2UgYWJzdHJhY3RzIHdpbmRvdy1yZWxhdGVkIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aCBnbG9iYWxcbiAqIGJyb3dzZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiBhIHRlc3RhYmxlIGFuZCBwbGF0Zm9ybS1hZ25vc3RpYyB3YXkuIFRoaXMgZnVuY3Rpb24gbWFrZXMgdXNlIG9mXG4gKiBgV2luZG93UmVmYCB0byBhY2Nlc3MgdGhlIG5hdmlnYXRvcidzIGxhbmd1YWdlIHNldHRpbmcgaW4gYSBzYWZlIGFuZCBBbmd1bGFyLWZyaWVuZGx5IG1hbm5lci5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgJ2VuJywgJ2ZyJykgb2YgdGhlXG4gKiBicm93c2VyJ3MgY3VycmVudGx5IGNvbmZpZ3VyZWQgbGFuZ3VhZ2UuIFRoaXMgY2FuIHRoZW4gYmUgdXNlZCB0byBzZXQgdGhlIGFjdGl2ZSBsYW5ndWFnZSBpbiBhXG4gKiBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEV4YW1wbGUgdXNhZ2UgaW4gYSBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvblxuICogaW1wb3J0IHsgcHJvdmlkZUxvY2FsaXphdGlvbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG4gKiBpbXBvcnQgeyBicm93c2VyTGFuZ3VhZ2VMb2FkZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlTG9jYWxpemF0aW9uKHtcbiAqICAgICAgIGFjdGl2ZUxhbmd1YWdlTG9hZGVyOiBicm93c2VyTGFuZ3VhZ2VMb2FkZXIsXG4gKiAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM6IFsnZW4nLCAnZXMnLCAnZnInXSxcbiAqICAgICAgIGF2YWlsYWJsZUxvY2FsZXM6IFsnZW4tVVMnLCAnZXMtRVMnLCAnZnItRlInXVxuICogICAgIH0pXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBicm93c2VyTGFuZ3VhZ2VMb2FkZXI6IExhbmd1YWdlTG9hZGVyRm4gPSBhc3luYyAoKSA9PiB7XG4gIHJldHVybiBpbmplY3QoV2luZG93UmVmKS5nZXRMYW5ndWFnZSgpO1xufTtcbiJdfQ==
@@ -2,9 +2,79 @@ import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
2
2
  import { createConfigTokens } from '@odx/angular/utils';
3
3
  import { LocalizationService } from './localization.service';
4
4
  export const DEFAULT_AVAILABLE_LANGUAGES = ['en-US', 'en-GB', 'en', 'de-DE', 'de', 'es-ES', 'es', 'fr-FR', 'fr-CA', 'fr'];
5
+ /**
6
+ * Utilizes `createConfigTokens` to generate configuration tokens and related utilities for the
7
+ * localization settings within the application. It defines a structured and type-safe approach
8
+ * for managing localization configurations, such as available languages, and potentially
9
+ * a dynamic loader for the active language. The generated tokens and utilities facilitate accessing
10
+ * and providing these configurations throughout the application.
11
+ *
12
+ * @const {InjectionToken<LocalizationConfig>} LocalizationConfig - An InjectionToken for accessing
13
+ * the localization configuration within Angular's dependency injection framework. Use this token to inject
14
+ * localization configurations into services, components, or other tokens.
15
+ *
16
+ * @const {LocalizationConfig} LocalizationDefaultConfig - The default configuration values for localization,
17
+ * based on the provided settings. Includes the default available languages.
18
+ *
19
+ * @const {Function} injectLocalizationConfig - A utility function that returns the injected value of
20
+ * `LocalizationConfig` token. Use this function to access the current localization configuration in
21
+ * a type-safe manner.
22
+ *
23
+ * @const {Function} provideLocalizationConfig - A utility function to provide the `LocalizationConfig` token
24
+ * with specific values. Use this function to configure and override default localization settings within
25
+ * an Angular module or component.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * // Providing localization settings in an Angular module
30
+ * @NgModule({
31
+ * providers: [
32
+ * provideLocalizationConfig({
33
+ * availableLanguages: ['en', 'es', 'fr'],
34
+ * })
35
+ * ]
36
+ * })
37
+ * export class AppModule { }
38
+ *
39
+ * // Injecting and using the localization configuration in a service
40
+ * @Injectable({ providedIn: 'root' })
41
+ * export class MyLocalizationService {
42
+ * constructor(@Inject(LocalizationConfig) private config: LocalizationConfig) {
43
+ * console.log('Available languages:', config.availableLanguages);
44
+ * }
45
+ * }
46
+ * ```
47
+ */
5
48
  export const { LocalizationConfig, LocalizationDefaultConfig, injectLocalizationConfig, provideLocalizationConfig } = createConfigTokens('Localization', '@odx/angular/internal/translate', {
6
49
  availableLanguages: DEFAULT_AVAILABLE_LANGUAGES,
7
50
  });
51
+ /**
52
+ * Sets up the localization configuration for the application and initializes the localization
53
+ * system with the provided configuration and features. This function is typically called
54
+ * within the main module or a core module of the application to ensure localization settings
55
+ * are available and active as early as possible.
56
+ *
57
+ * @param {Partial<LocalizationConfig>} config The localization configuration settings, including
58
+ * available languages and optionally, a custom loader for the active language.
59
+ * @param {...LocalizationFeature[]} features Additional localization features or configurations
60
+ * to be registered as part of the application's environment providers.
61
+ * @returns {EnvironmentProviders} A collection of providers for setting up the application's
62
+ * localization environment, to be used with Angular's environment-specific injector configuration.
63
+ * @example
64
+ * ```ts
65
+ * // Example of providing localization settings in an Angular module
66
+ * @NgModule({
67
+ * imports: [...],
68
+ * providers: [
69
+ * provideLocalization({
70
+ * availableLanguages: ['en', 'es', 'fr'],
71
+ * activeLanguageLoader: () => fetch('/api/user/language').then(res => res.text()),
72
+ * }),
73
+ * ],
74
+ * })
75
+ * export class AppModule {}
76
+ * ```
77
+ */
8
78
  export function provideLocalization(config, ...features) {
9
79
  return makeEnvironmentProviders([
10
80
  provideLocalizationConfig(config),
@@ -17,4 +87,4 @@ export function provideLocalization(config, ...features) {
17
87
  features,
18
88
  ]);
19
89
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9sb2NhbGl6YXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFNMUgsTUFBTSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxHQUFHLGtCQUFrQixDQUN0SSxjQUFjLEVBQ2QsaUNBQWlDLEVBQ2pDO0lBQ0Usa0JBQWtCLEVBQUUsMkJBQTJCO0NBQzFCLENBQ3hCLENBQUM7QUFFRixNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBbUMsRUFBRSxHQUFHLFFBQStCO0lBQ3pHLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIseUJBQXlCLENBQUMsTUFBTSxDQUFDO1FBQ2pDO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFO1lBQ3hHLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzNCLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4sIExvY2FsaXphdGlvbkZlYXR1cmUgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FWQUlMQUJMRV9MQU5HVUFHRVMgPSBbJ2VuLVVTJywgJ2VuLUdCJywgJ2VuJywgJ2RlLURFJywgJ2RlJywgJ2VzLUVTJywgJ2VzJywgJ2ZyLUZSJywgJ2ZyLUNBJywgJ2ZyJ107XG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXphdGlvbkNvbmZpZyB7XG4gIGFjdGl2ZUxhbmd1YWdlTG9hZGVyPzogTGFuZ3VhZ2VMb2FkZXJGbjtcbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IHsgTG9jYWxpemF0aW9uQ29uZmlnLCBMb2NhbGl6YXRpb25EZWZhdWx0Q29uZmlnLCBpbmplY3RMb2NhbGl6YXRpb25Db25maWcsIHByb3ZpZGVMb2NhbGl6YXRpb25Db25maWcgfSA9IGNyZWF0ZUNvbmZpZ1Rva2VucyhcbiAgJ0xvY2FsaXphdGlvbicsXG4gICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJyxcbiAge1xuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogREVGQVVMVF9BVkFJTEFCTEVfTEFOR1VBR0VTLFxuICB9IGFzIExvY2FsaXphdGlvbkNvbmZpZyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTG9jYWxpemF0aW9uKGNvbmZpZzogUGFydGlhbDxMb2NhbGl6YXRpb25Db25maWc+LCAuLi5mZWF0dXJlczogTG9jYWxpemF0aW9uRmVhdHVyZVtdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlTG9jYWxpemF0aW9uQ29uZmlnKGNvbmZpZyksXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UpID0+ICgpID0+IGxvY2FsaXphdGlvblNlcnZpY2UubG9hZEFjdGl2ZUxhbmd1YWdlKCksXG4gICAgICBkZXBzOiBbTG9jYWxpemF0aW9uU2VydmljZV0sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIGZlYXR1cmVzLFxuICBdKTtcbn1cbiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9sb2NhbGl6YXRpb24vc3JjL2xpYi9sb2NhbGl6YXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzdELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFrQjFIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLEdBQUcsa0JBQWtCLENBQ3RJLGNBQWMsRUFDZCxpQ0FBaUMsRUFDakM7SUFDRSxrQkFBa0IsRUFBRSwyQkFBMkI7Q0FDMUIsQ0FDeEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFtQyxFQUFFLEdBQUcsUUFBK0I7SUFDekcsT0FBTyx3QkFBd0IsQ0FBQztRQUM5Qix5QkFBeUIsQ0FBQyxNQUFNLENBQUM7UUFDakM7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxtQkFBd0MsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUU7WUFDeEcsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDM0IsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNELFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVDb25maWdUb2tlbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VMb2FkZXJGbiwgTG9jYWxpemF0aW9uRmVhdHVyZSB9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVZBSUxBQkxFX0xBTkdVQUdFUyA9IFsnZW4tVVMnLCAnZW4tR0InLCAnZW4nLCAnZGUtREUnLCAnZGUnLCAnZXMtRVMnLCAnZXMnLCAnZnItRlInLCAnZnItQ0EnLCAnZnInXTtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZSBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbiB1c2VkIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICogSXQgYWxsb3dzIHNwZWNpZnlpbmcgYXZhaWxhYmxlIGxhbmd1YWdlcywgYW5kIGluY2x1ZGVzIGFuIG9wdGlvbmFsIGxvYWRlclxuICogZnVuY3Rpb24gZm9yIGR5bmFtaWNhbGx5IGRldGVybWluaW5nIHRoZSBhY3RpdmUgbGFuZ3VhZ2UuXG4gKlxuICogQHByb3BlcnR5IHtMYW5ndWFnZUxvYWRlckZufSBbYWN0aXZlTGFuZ3VhZ2VMb2FkZXJdIE9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2FkaW5nIHRoZVxuICogYWN0aXZlIGxhbmd1YWdlIGR5bmFtaWNhbGx5LCB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSB0aGUgYXBwbGljYXRpb24ncyBsYW5ndWFnZVxuICogbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiB1c2VyIHNldHRpbmdzLCBicm93c2VyIHNldHRpbmdzLCBvciBleHRlcm5hbCBkYXRhLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gYXZhaWxhYmxlTGFuZ3VhZ2VzIEFuIGFycmF5IG9mIGxhbmd1YWdlIGNvZGVzIHJlcHJlc2VudGluZyB0aGVcbiAqIGxhbmd1YWdlcyBhdmFpbGFibGUgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsaXphdGlvbkNvbmZpZyB7XG4gIGFjdGl2ZUxhbmd1YWdlTG9hZGVyPzogTGFuZ3VhZ2VMb2FkZXJGbjtcbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBVdGlsaXplcyBgY3JlYXRlQ29uZmlnVG9rZW5zYCB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uIHRva2VucyBhbmQgcmVsYXRlZCB1dGlsaXRpZXMgZm9yIHRoZVxuICogbG9jYWxpemF0aW9uIHNldHRpbmdzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIEl0IGRlZmluZXMgYSBzdHJ1Y3R1cmVkIGFuZCB0eXBlLXNhZmUgYXBwcm9hY2hcbiAqIGZvciBtYW5hZ2luZyBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgYXZhaWxhYmxlIGxhbmd1YWdlcywgYW5kIHBvdGVudGlhbGx5XG4gKiBhIGR5bmFtaWMgbG9hZGVyIGZvciB0aGUgYWN0aXZlIGxhbmd1YWdlLiBUaGUgZ2VuZXJhdGVkIHRva2VucyBhbmQgdXRpbGl0aWVzIGZhY2lsaXRhdGUgYWNjZXNzaW5nXG4gKiBhbmQgcHJvdmlkaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBjb25zdCB7SW5qZWN0aW9uVG9rZW48TG9jYWxpemF0aW9uQ29uZmlnPn0gTG9jYWxpemF0aW9uQ29uZmlnIC0gQW4gSW5qZWN0aW9uVG9rZW4gZm9yIGFjY2Vzc2luZ1xuICogdGhlIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIHdpdGhpbiBBbmd1bGFyJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gZnJhbWV3b3JrLiBVc2UgdGhpcyB0b2tlbiB0byBpbmplY3RcbiAqIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9ucyBpbnRvIHNlcnZpY2VzLCBjb21wb25lbnRzLCBvciBvdGhlciB0b2tlbnMuXG4gKlxuICogQGNvbnN0IHtMb2NhbGl6YXRpb25Db25maWd9IExvY2FsaXphdGlvbkRlZmF1bHRDb25maWcgLSBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgbG9jYWxpemF0aW9uLFxuICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNldHRpbmdzLiBJbmNsdWRlcyB0aGUgZGVmYXVsdCBhdmFpbGFibGUgbGFuZ3VhZ2VzLlxuICpcbiAqIEBjb25zdCB7RnVuY3Rpb259IGluamVjdExvY2FsaXphdGlvbkNvbmZpZyAtIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGluamVjdGVkIHZhbHVlIG9mXG4gKiBgTG9jYWxpemF0aW9uQ29uZmlnYCB0b2tlbi4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBjdXJyZW50IGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIGluXG4gKiBhIHR5cGUtc2FmZSBtYW5uZXIuXG4gKlxuICogQGNvbnN0IHtGdW5jdGlvbn0gcHJvdmlkZUxvY2FsaXphdGlvbkNvbmZpZyAtIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBwcm92aWRlIHRoZSBgTG9jYWxpemF0aW9uQ29uZmlnYCB0b2tlblxuICogd2l0aCBzcGVjaWZpYyB2YWx1ZXMuIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbmZpZ3VyZSBhbmQgb3ZlcnJpZGUgZGVmYXVsdCBsb2NhbGl6YXRpb24gc2V0dGluZ3Mgd2l0aGluXG4gKiBhbiBBbmd1bGFyIG1vZHVsZSBvciBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBQcm92aWRpbmcgbG9jYWxpemF0aW9uIHNldHRpbmdzIGluIGFuIEFuZ3VsYXIgbW9kdWxlXG4gKiBATmdNb2R1bGUoe1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlTG9jYWxpemF0aW9uQ29uZmlnKHtcbiAqICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlczogWydlbicsICdlcycsICdmciddLFxuICogICAgIH0pXG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxuICpcbiAqIC8vIEluamVjdGluZyBhbmQgdXNpbmcgdGhlIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIGluIGEgc2VydmljZVxuICogQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUxvY2FsaXphdGlvblNlcnZpY2Uge1xuICogICBjb25zdHJ1Y3RvcihASW5qZWN0KExvY2FsaXphdGlvbkNvbmZpZykgcHJpdmF0ZSBjb25maWc6IExvY2FsaXphdGlvbkNvbmZpZykge1xuICogICAgIGNvbnNvbGUubG9nKCdBdmFpbGFibGUgbGFuZ3VhZ2VzOicsIGNvbmZpZy5hdmFpbGFibGVMYW5ndWFnZXMpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHsgTG9jYWxpemF0aW9uQ29uZmlnLCBMb2NhbGl6YXRpb25EZWZhdWx0Q29uZmlnLCBpbmplY3RMb2NhbGl6YXRpb25Db25maWcsIHByb3ZpZGVMb2NhbGl6YXRpb25Db25maWcgfSA9IGNyZWF0ZUNvbmZpZ1Rva2VucyhcbiAgJ0xvY2FsaXphdGlvbicsXG4gICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJyxcbiAge1xuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogREVGQVVMVF9BVkFJTEFCTEVfTEFOR1VBR0VTLFxuICB9IGFzIExvY2FsaXphdGlvbkNvbmZpZyxcbik7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgaW5pdGlhbGl6ZXMgdGhlIGxvY2FsaXphdGlvblxuICogc3lzdGVtIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmVzLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWRcbiAqIHdpdGhpbiB0aGUgbWFpbiBtb2R1bGUgb3IgYSBjb3JlIG1vZHVsZSBvZiB0aGUgYXBwbGljYXRpb24gdG8gZW5zdXJlIGxvY2FsaXphdGlvbiBzZXR0aW5nc1xuICogYXJlIGF2YWlsYWJsZSBhbmQgYWN0aXZlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSB7UGFydGlhbDxMb2NhbGl6YXRpb25Db25maWc+fSBjb25maWcgVGhlIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBpbmNsdWRpbmdcbiAqIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIG9wdGlvbmFsbHksIGEgY3VzdG9tIGxvYWRlciBmb3IgdGhlIGFjdGl2ZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7Li4uTG9jYWxpemF0aW9uRmVhdHVyZVtdfSBmZWF0dXJlcyBBZGRpdGlvbmFsIGxvY2FsaXphdGlvbiBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9uc1xuICogdG8gYmUgcmVnaXN0ZXJlZCBhcyBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50IHByb3ZpZGVycy5cbiAqIEByZXR1cm5zIHtFbnZpcm9ubWVudFByb3ZpZGVyc30gQSBjb2xsZWN0aW9uIG9mIHByb3ZpZGVycyBmb3Igc2V0dGluZyB1cCB0aGUgYXBwbGljYXRpb24nc1xuICogbG9jYWxpemF0aW9uIGVudmlyb25tZW50LCB0byBiZSB1c2VkIHdpdGggQW5ndWxhcidzIGVudmlyb25tZW50LXNwZWNpZmljIGluamVjdG9yIGNvbmZpZ3VyYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEV4YW1wbGUgb2YgcHJvdmlkaW5nIGxvY2FsaXphdGlvbiBzZXR0aW5ncyBpbiBhbiBBbmd1bGFyIG1vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogWy4uLl0sXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVMb2NhbGl6YXRpb24oe1xuICogICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBbJ2VuJywgJ2VzJywgJ2ZyJ10sXG4gKiAgICAgICBhY3RpdmVMYW5ndWFnZUxvYWRlcjogKCkgPT4gZmV0Y2goJy9hcGkvdXNlci9sYW5ndWFnZScpLnRoZW4ocmVzID0+IHJlcy50ZXh0KCkpLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvY2FsaXphdGlvbihjb25maWc6IFBhcnRpYWw8TG9jYWxpemF0aW9uQ29uZmlnPiwgLi4uZmVhdHVyZXM6IExvY2FsaXphdGlvbkZlYXR1cmVbXSk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgcHJvdmlkZUxvY2FsaXphdGlvbkNvbmZpZyhjb25maWcpLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6IChsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSA9PiAoKSA9PiBsb2NhbGl6YXRpb25TZXJ2aWNlLmxvYWRBY3RpdmVMYW5ndWFnZSgpLFxuICAgICAgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICBmZWF0dXJlcyxcbiAgXSk7XG59XG4iXX0=