@odx/angular 5.7.4 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/CHANGELOG.md +17 -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/event-plugins/lib/event-plugins.config.d.ts +35 -0
  29. package/cdk/event-plugins/lib/models/event-plugin.d.ts +57 -0
  30. package/cdk/event-plugins/lib/plugins/debounce-event-plugin.d.ts +32 -0
  31. package/cdk/event-plugins/lib/plugins/defer-event-plugin.d.ts +24 -0
  32. package/cdk/expandable/lib/directives/expandable-container.directive.d.ts +41 -0
  33. package/cdk/expandable/lib/directives/expandable-item.directive.d.ts +47 -0
  34. package/cdk/option-control/lib/option-control.d.ts +47 -0
  35. package/cdk/radio-group-control/lib/radio-control.directive.d.ts +8 -0
  36. package/cdk/radio-group-control/lib/radio-group-control.directive.d.ts +11 -0
  37. package/components/accordion/lib/accordion.component.d.ts +8 -0
  38. package/components/accordion/lib/components/accordion-item/accordion-item.component.d.ts +37 -1
  39. package/components/accordion/lib/directives/accordion-item-title.d.ts +3 -0
  40. package/components/action-group/action-group.component.d.ts +6 -0
  41. package/components/area-header/area-header.component.d.ts +8 -0
  42. package/components/area-header/directives/area-header-content.directive.d.ts +3 -0
  43. package/components/area-header/directives/area-header-subtitle.directive.d.ts +3 -0
  44. package/components/autocomplete/lib/autocomplete.component.d.ts +17 -0
  45. package/components/avatar/lib/avatar.component.d.ts +8 -0
  46. package/components/badge/lib/badge.component.d.ts +10 -0
  47. package/components/badge/lib/badge.directive.d.ts +15 -0
  48. package/components/bar/lib/bar.component.d.ts +7 -0
  49. package/components/bar/lib/directives/bar-button.directive.d.ts +3 -0
  50. package/components/bar/lib/directives/bar-label.directive.d.ts +3 -0
  51. package/components/breadcrumbs/lib/breadcrumbs.component.d.ts +3 -0
  52. package/components/button/lib/button.component.d.ts +10 -0
  53. package/components/button-group/lib/button-group.component.d.ts +15 -0
  54. package/components/calendar/lib/calendar.component.d.ts +48 -0
  55. package/components/calendar/lib/calendar.config.d.ts +41 -93
  56. package/components/calendar/lib/calendar.service.d.ts +48 -0
  57. package/components/calendar/lib/components/calendar-header/calendar-header.component.d.ts +24 -0
  58. package/components/calendar/lib/components/calendar-month/calendar-month.component.d.ts +6 -0
  59. package/components/calendar/lib/components/calendar-year/calendar-year.component.d.ts +6 -0
  60. package/components/calendar/lib/components/calendar-years/calendar-years.component.d.ts +6 -0
  61. package/components/calendar/lib/daterange.service.d.ts +16 -0
  62. package/components/calendar/lib/directives/calendar-cell.directive.d.ts +37 -9
  63. package/components/calendar/lib/directives/calendar-view.directive.d.ts +41 -9
  64. package/components/calendar/lib/pipes/date-label.pipe.d.ts +12 -21
  65. package/components/calendar/lib/services/calendar-month.service.d.ts +1 -0
  66. package/components/calendar/lib/services/calendar-year.service.d.ts +1 -0
  67. package/components/calendar/lib/services/calendar-years.service.d.ts +1 -0
  68. package/components/calendar/lib/utils/check-cell-in-range.d.ts +1 -0
  69. package/components/calendar/lib/utils/check-identical-date.d.ts +1 -0
  70. package/components/calendar/lib/utils/get-A11y-label.d.ts +2 -2
  71. package/components/calendar/lib/utils/is-date-disabled.d.ts +1 -0
  72. package/components/calendar/lib/utils/parse-date.d.ts +1 -0
  73. package/components/calendar/lib/utils/validate-daterange.d.ts +1 -0
  74. package/components/calendar/lib/utils/validate-max-date.d.ts +1 -0
  75. package/components/calendar/lib/utils/validate-min-date.d.ts +1 -0
  76. package/components/calendar/lib/utils/validate-next-date-set.d.ts +1 -0
  77. package/components/calendar/lib/utils/validate-previous-date-set.d.ts +1 -0
  78. package/components/checkbox/lib/checkbox.component.d.ts +32 -0
  79. package/components/checkbox/lib/checkbox.validator.d.ts +23 -0
  80. package/components/chip/lib/components/chip/chip.component.d.ts +14 -0
  81. package/components/chip/lib/components/chip-list/chip-list.component.d.ts +3 -0
  82. package/components/chip/lib/components/chip-list-row/chip-list-row.component.d.ts +3 -0
  83. package/components/circular-progress/lib/circular-progress.component.d.ts +20 -0
  84. package/components/content-box/lib/content-box.component.d.ts +3 -0
  85. package/components/content-box/lib/directives/content-box-footer.directive.d.ts +3 -0
  86. package/components/content-box/lib/directives/content-box-header.directive.d.ts +3 -0
  87. package/components/datepicker/lib/datepicker.component.d.ts +47 -0
  88. package/components/datepicker/lib/datepicker.config.d.ts +19 -0
  89. package/components/datepicker/lib/directives/datepicker-input-control.directive.d.ts +30 -0
  90. package/components/datepicker/lib/utils/get-datepicker-input-pattern.d.ts +2 -0
  91. package/components/datepicker/lib/utils/get-datepicker-input-value-as-date.d.ts +1 -0
  92. package/components/daterangepicker/lib/daterangepicker.component.d.ts +89 -0
  93. package/components/daterangepicker/lib/daterangepicker.config.d.ts +19 -0
  94. package/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.d.ts +30 -0
  95. package/components/daterangepicker/lib/range.validator.d.ts +15 -0
  96. package/components/daterangepicker/lib/required.validator.d.ts +6 -0
  97. package/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.d.ts +2 -0
  98. package/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.d.ts +1 -0
  99. package/components/dropdown/lib/dropdown.component.d.ts +16 -0
  100. package/components/dropdown/lib/dropdown.directive.d.ts +67 -0
  101. package/components/dropdown/lib/helpers/close-current-dropdown.d.ts +5 -0
  102. package/components/error-page/lib/error-page.component.d.ts +7 -0
  103. package/components/error-page/lib/error-page.config.d.ts +18 -0
  104. package/components/footer/lib/footer.component.d.ts +9 -6
  105. package/components/footer/lib/footer.config.d.ts +2 -0
  106. package/components/form-field/lib/components/form-field-info/form-field-info.component.d.ts +13 -0
  107. package/components/form-field/lib/components/form-group/form-group.component.d.ts +16 -0
  108. package/components/form-field/lib/directives/form-field-control.directive.d.ts +5 -0
  109. package/components/form-field/lib/directives/form-field-error.directive.d.ts +6 -0
  110. package/components/form-field/lib/directives/form-field-hint.directive.d.ts +3 -0
  111. package/components/form-field/lib/directives/form-field-label.directive.d.ts +3 -0
  112. package/components/form-field/lib/directives/form.directive.d.ts +13 -0
  113. package/components/form-field/lib/form-field.component.d.ts +20 -0
  114. package/components/form-field/lib/form-field.service.d.ts +42 -0
  115. package/components/form-field/lib/services/form-field-error.service.d.ts +24 -0
  116. package/components/header/lib/directives/header-avatar.directive.d.ts +4 -0
  117. package/components/header/lib/directives/header-title.directive.d.ts +3 -0
  118. package/components/header/lib/header.component.d.ts +3 -0
  119. package/components/header-navigation/lib/directives/header-navigation-link.directive.d.ts +3 -0
  120. package/components/header-navigation/lib/header-navigation.component.d.ts +6 -0
  121. package/components/icon/lib/helpers/unpack-icon-identifier.d.ts +14 -0
  122. package/components/icon/lib/icon.component.d.ts +24 -0
  123. package/components/icon/lib/icon.config.d.ts +26 -0
  124. package/components/inline-message/lib/inline-message.component.d.ts +13 -0
  125. package/components/link/link.directive.d.ts +3 -0
  126. package/components/list/lib/components/expandable-list-item/expandable-list-item.component.d.ts +6 -0
  127. package/components/list/lib/components/list-item/list-item.component.d.ts +17 -1
  128. package/components/list/lib/list.component.d.ts +5 -0
  129. package/components/loading-spinner/lib/loading-spinner.component.d.ts +8 -0
  130. package/components/loading-spinner/lib/loading-spinner.directive.d.ts +22 -0
  131. package/components/logo/logo.directive.d.ts +15 -0
  132. package/components/main-menu/lib/directives/main-menu-button.directive.d.ts +5 -1
  133. package/components/main-menu/lib/directives/main-menu-close.directive.d.ts +3 -0
  134. package/components/main-menu/lib/directives/main-menu-item.directive.d.ts +16 -0
  135. package/components/main-menu/lib/helpers/create-main-menu-links.d.ts +1 -0
  136. package/components/main-menu/lib/main-menu.component.d.ts +42 -0
  137. package/components/main-menu/lib/main-menu.config.d.ts +31 -0
  138. package/components/main-menu/lib/main-menu.service.d.ts +28 -0
  139. package/components/mainfilter-group/lib/mainfilter-group.component.d.ts +4 -0
  140. package/components/menu/lib/directives/menu-item.directive.d.ts +6 -0
  141. package/components/menu/lib/menu.component.d.ts +13 -1
  142. package/components/menu/lib/menu.directive.d.ts +31 -0
  143. package/components/modal/lib/components/basic-modal/basic-modal.component.d.ts +14 -0
  144. package/components/modal/lib/components/modal-footer/modal-footer.component.d.ts +3 -0
  145. package/components/modal/lib/components/modal-header/modal-header.component.d.ts +9 -0
  146. package/components/modal/lib/components/modal-hero/modal-hero.component.d.ts +21 -0
  147. package/components/modal/lib/directives/modal-close.directive.d.ts +25 -1
  148. package/components/modal/lib/directives/modal-content.directive.d.ts +3 -0
  149. package/components/modal/lib/directives/modal-dismiss.directive.d.ts +18 -1
  150. package/components/modal/lib/helpers/inject-modal-ref.d.ts +21 -0
  151. package/components/modal/lib/helpers/provide-modal-ref.d.ts +9 -0
  152. package/components/modal/lib/modal.component.d.ts +25 -0
  153. package/components/modal/lib/modal.config.d.ts +33 -0
  154. package/components/modal/lib/modal.directive.d.ts +29 -0
  155. package/components/modal/lib/modal.service.d.ts +54 -0
  156. package/components/modal/lib/models/modal-ref.d.ts +34 -0
  157. package/components/navigation-back/lib/navigation-back.component.d.ts +3 -0
  158. package/components/notification/lib/components/notification-center/notification-center.component.d.ts +0 -2
  159. package/components/notification/lib/directives/notification-center.directive.d.ts +18 -4
  160. package/components/notification/lib/helpers/get-notifications-by-tag.d.ts +1 -0
  161. package/components/notification/lib/helpers/sort-notifications.d.ts +1 -0
  162. package/components/notification/lib/helpers/to-notification-collection.d.ts +1 -0
  163. package/components/notification/lib/models/notification-feature.d.ts +15 -0
  164. package/components/notification/lib/notification.config.d.ts +54 -0
  165. package/components/notification/lib/notification.logger.d.ts +1 -0
  166. package/components/notification/lib/notification.service.d.ts +55 -0
  167. package/components/notification/lib/notification.tokens.d.ts +3 -0
  168. package/components/notification/lib/services/notification-center.service.d.ts +9 -0
  169. package/components/paginator/lib/paginator.component.d.ts +89 -0
  170. package/components/paginator/lib/paginator.config.d.ts +24 -2
  171. package/components/progress/lib/progress.component.d.ts +15 -0
  172. package/components/radio-group/lib/radio-group.component.d.ts +11 -0
  173. package/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.d.ts +19 -0
  174. package/components/rail-navigation/lib/rail-navigation.component.d.ts +26 -0
  175. package/components/rich-list/lib/components/rich-list-content/rich-list-content.component.d.ts +4 -0
  176. package/components/rich-list/lib/components/rich-list-header/rich-list-header.component.d.ts +4 -0
  177. package/components/rich-list/lib/components/rich-list-item/rich-list-item.component.d.ts +9 -1
  178. package/components/rich-list/lib/rich-list.component.d.ts +9 -2
  179. package/components/select/lib/components/select-option/select-option.component.d.ts +39 -2
  180. package/components/select/lib/directives/select-input-control.directive.d.ts +11 -0
  181. package/components/select/lib/pipes/select-search-filter.pipe.d.ts +10 -0
  182. package/components/select/lib/select.component.d.ts +59 -0
  183. package/components/slider/lib/slider.directive.d.ts +19 -0
  184. package/components/spinbox/lib/spinbox.component.d.ts +16 -0
  185. package/components/switch/lib/switch.component.d.ts +10 -0
  186. package/components/switch/lib/switch.validator.d.ts +12 -0
  187. package/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.d.ts +28 -0
  188. package/components/tab-bar/lib/tab-bar.component.d.ts +69 -0
  189. package/components/table/lib/components/check-cell/check-cell.component.d.ts +18 -0
  190. package/components/table/lib/components/header-title/header-title.component.d.ts +33 -1
  191. package/components/table/lib/directives/table-cell.directive.d.ts +4 -0
  192. package/components/table/lib/directives/table-row.directive.d.ts +4 -0
  193. package/components/table/lib/table.component.d.ts +36 -0
  194. package/components/timepicker/lib/timepicker.component.d.ts +11 -2
  195. package/components/timepicker/lib/utils/generate-time-stamps.d.ts +2 -1
  196. package/components/timepicker/lib/utils/ngx-mask-helper.d.ts +2 -2
  197. package/components/toast/lib/toast.config.d.ts +26 -0
  198. package/components/toast/lib/toast.service.d.ts +35 -0
  199. package/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.d.ts +11 -0
  200. package/components/toggle-button-group/lib/toggle-button-group.component.d.ts +12 -0
  201. package/components/tooltip/lib/tooltip.component.d.ts +20 -0
  202. package/components/tooltip/lib/tooltip.directive.d.ts +35 -0
  203. package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +34 -0
  204. package/components/wizard/lib/wizard.component.d.ts +20 -0
  205. package/esm2022/animations/lib/expand.mjs +45 -1
  206. package/esm2022/animations/lib/fade.mjs +71 -1
  207. package/esm2022/animations/lib/slide.mjs +22 -1
  208. package/esm2022/animations/lib/wait-for-child-animations.mjs +39 -1
  209. package/esm2022/breakpoints/lib/breakpoints.config.mjs +39 -1
  210. package/esm2022/breakpoints/lib/breakpoints.service.mjs +44 -1
  211. package/esm2022/breakpoints/lib/directives/match-breakpoints.directive.mjs +37 -1
  212. package/esm2022/breakpoints/lib/helpers/configure-breakpoint.mjs +20 -1
  213. package/esm2022/cdk/a11y/lib/directives/interactive.directive.mjs +33 -1
  214. package/esm2022/cdk/a11y/lib/directives/list-focus-manager-option.directive.mjs +23 -1
  215. package/esm2022/cdk/a11y/lib/directives/list-focus-manager.directive.mjs +18 -1
  216. package/esm2022/cdk/active-indicator/lib/active-indicator.directive.mjs +64 -1
  217. package/esm2022/cdk/autocomplete-control/lib/autocomplete-control.mjs +39 -1
  218. package/esm2022/cdk/checkbox-control/lib/checkbox-control.directive.mjs +4 -1
  219. package/esm2022/cdk/connected-overlay/lib/connected-overlay.service.mjs +45 -1
  220. package/esm2022/cdk/connected-overlay/lib/helpers/compute-overlay-position.mjs +11 -1
  221. package/esm2022/cdk/connected-overlay/lib/models/connected-overlay-ref.mjs +50 -1
  222. package/esm2022/cdk/custom-form-control/lib/custom-form-control.mjs +109 -3
  223. package/esm2022/cdk/custom-form-control/lib/input-control.directive.mjs +76 -1
  224. package/esm2022/cdk/dynamic-view/lib/dynamic-view.directive.mjs +18 -1
  225. package/esm2022/cdk/dynamic-view/lib/dynamic-view.service.mjs +31 -1
  226. package/esm2022/cdk/dynamic-view/lib/helpers/create-projectable-nodes.mjs +23 -1
  227. package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-text-content.mjs +23 -1
  228. package/esm2022/cdk/dynamic-view/lib/helpers/is-dynamic-view.mjs +23 -1
  229. package/esm2022/cdk/dynamic-view/lib/models/dynamic-component-ref.mjs +40 -1
  230. package/esm2022/cdk/dynamic-view/lib/models/dynamic-template-ref.mjs +37 -1
  231. package/esm2022/cdk/event-plugins/lib/event-plugins.config.mjs +36 -1
  232. package/esm2022/cdk/event-plugins/lib/models/event-plugin.mjs +45 -1
  233. package/esm2022/cdk/event-plugins/lib/plugins/debounce-event-plugin.mjs +33 -1
  234. package/esm2022/cdk/event-plugins/lib/plugins/defer-event-plugin.mjs +25 -1
  235. package/esm2022/cdk/expandable/lib/directives/expandable-container.directive.mjs +42 -1
  236. package/esm2022/cdk/expandable/lib/directives/expandable-item.directive.mjs +48 -1
  237. package/esm2022/cdk/option-control/lib/option-control.mjs +48 -1
  238. package/esm2022/cdk/radio-group-control/lib/radio-control.directive.mjs +9 -1
  239. package/esm2022/cdk/radio-group-control/lib/radio-group-control.directive.mjs +12 -1
  240. package/esm2022/components/accordion/lib/accordion.component.mjs +9 -1
  241. package/esm2022/components/accordion/lib/components/accordion-item/accordion-item.component.mjs +31 -1
  242. package/esm2022/components/accordion/lib/directives/accordion-item-title.mjs +4 -1
  243. package/esm2022/components/action-group/action-group.component.mjs +7 -1
  244. package/esm2022/components/area-header/area-header.component.mjs +9 -1
  245. package/esm2022/components/area-header/directives/area-header-content.directive.mjs +4 -1
  246. package/esm2022/components/area-header/directives/area-header-subtitle.directive.mjs +4 -1
  247. package/esm2022/components/autocomplete/lib/autocomplete.component.mjs +18 -1
  248. package/esm2022/components/avatar/lib/avatar.component.mjs +9 -1
  249. package/esm2022/components/badge/lib/badge.component.mjs +11 -1
  250. package/esm2022/components/badge/lib/badge.directive.mjs +16 -1
  251. package/esm2022/components/bar/lib/bar.component.mjs +8 -1
  252. package/esm2022/components/bar/lib/directives/bar-button.directive.mjs +4 -1
  253. package/esm2022/components/bar/lib/directives/bar-label.directive.mjs +4 -1
  254. package/esm2022/components/breadcrumbs/lib/breadcrumbs.component.mjs +4 -1
  255. package/esm2022/components/button/lib/button.component.mjs +11 -1
  256. package/esm2022/components/button-group/lib/button-group.component.mjs +16 -1
  257. package/esm2022/components/calendar/lib/calendar.component.mjs +35 -1
  258. package/esm2022/components/calendar/lib/calendar.config.mjs +18 -12
  259. package/esm2022/components/calendar/lib/calendar.service.mjs +49 -1
  260. package/esm2022/components/calendar/lib/components/calendar-header/calendar-header.component.mjs +19 -1
  261. package/esm2022/components/calendar/lib/components/calendar-month/calendar-month.component.mjs +9 -3
  262. package/esm2022/components/calendar/lib/components/calendar-year/calendar-year.component.mjs +9 -3
  263. package/esm2022/components/calendar/lib/components/calendar-years/calendar-years.component.mjs +9 -3
  264. package/esm2022/components/calendar/lib/daterange.service.mjs +17 -1
  265. package/esm2022/components/calendar/lib/directives/calendar-cell.directive.mjs +27 -2
  266. package/esm2022/components/calendar/lib/directives/calendar-view.directive.mjs +39 -1
  267. package/esm2022/components/calendar/lib/pipes/date-label.pipe.mjs +27 -9
  268. package/esm2022/components/calendar/lib/services/calendar-month.service.mjs +2 -1
  269. package/esm2022/components/calendar/lib/services/calendar-year.service.mjs +2 -1
  270. package/esm2022/components/calendar/lib/services/calendar-years.service.mjs +2 -1
  271. package/esm2022/components/calendar/lib/utils/check-cell-in-range.mjs +2 -1
  272. package/esm2022/components/calendar/lib/utils/check-identical-date.mjs +2 -1
  273. package/esm2022/components/calendar/lib/utils/get-A11y-label.mjs +11 -8
  274. package/esm2022/components/calendar/lib/utils/is-date-disabled.mjs +2 -1
  275. package/esm2022/components/calendar/lib/utils/parse-date.mjs +2 -1
  276. package/esm2022/components/calendar/lib/utils/validate-daterange.mjs +2 -1
  277. package/esm2022/components/calendar/lib/utils/validate-max-date.mjs +2 -1
  278. package/esm2022/components/calendar/lib/utils/validate-min-date.mjs +2 -1
  279. package/esm2022/components/calendar/lib/utils/validate-next-date-set.mjs +2 -1
  280. package/esm2022/components/calendar/lib/utils/validate-previous-date-set.mjs +2 -1
  281. package/esm2022/components/checkbox/lib/checkbox.component.mjs +33 -1
  282. package/esm2022/components/checkbox/lib/checkbox.validator.mjs +24 -1
  283. package/esm2022/components/chip/lib/components/chip/chip.component.mjs +15 -1
  284. package/esm2022/components/chip/lib/components/chip-list/chip-list.component.mjs +4 -1
  285. package/esm2022/components/chip/lib/components/chip-list-row/chip-list-row.component.mjs +4 -1
  286. package/esm2022/components/circular-progress/lib/circular-progress.component.mjs +21 -1
  287. package/esm2022/components/content-box/lib/content-box.component.mjs +4 -1
  288. package/esm2022/components/content-box/lib/directives/content-box-footer.directive.mjs +4 -1
  289. package/esm2022/components/content-box/lib/directives/content-box-header.directive.mjs +4 -1
  290. package/esm2022/components/datepicker/lib/datepicker.component.mjs +33 -1
  291. package/esm2022/components/datepicker/lib/datepicker.config.mjs +20 -1
  292. package/esm2022/components/datepicker/lib/directives/datepicker-input-control.directive.mjs +31 -1
  293. package/esm2022/components/datepicker/lib/utils/get-datepicker-input-pattern.mjs +3 -1
  294. package/esm2022/components/datepicker/lib/utils/get-datepicker-input-value-as-date.mjs +2 -1
  295. package/esm2022/components/daterangepicker/lib/daterangepicker.component.mjs +65 -1
  296. package/esm2022/components/daterangepicker/lib/daterangepicker.config.mjs +20 -1
  297. package/esm2022/components/daterangepicker/lib/directives/daterangepicker-input-control.directive.mjs +31 -1
  298. package/esm2022/components/daterangepicker/lib/range.validator.mjs +16 -1
  299. package/esm2022/components/daterangepicker/lib/required.validator.mjs +15 -1
  300. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-pattern.mjs +3 -1
  301. package/esm2022/components/daterangepicker/lib/utils/get-daterangepicker-input-value-as-date.mjs +2 -1
  302. package/esm2022/components/dropdown/lib/dropdown.component.mjs +8 -1
  303. package/esm2022/components/dropdown/lib/dropdown.directive.mjs +55 -1
  304. package/esm2022/components/dropdown/lib/helpers/close-current-dropdown.mjs +6 -1
  305. package/esm2022/components/error-page/lib/error-page.component.mjs +8 -1
  306. package/esm2022/components/error-page/lib/error-page.config.mjs +9 -1
  307. package/esm2022/components/footer/lib/footer.component.mjs +10 -7
  308. package/esm2022/components/footer/lib/footer.config.mjs +3 -1
  309. package/esm2022/components/form-field/lib/components/form-field-info/form-field-info.component.mjs +14 -1
  310. package/esm2022/components/form-field/lib/components/form-group/form-group.component.mjs +13 -1
  311. package/esm2022/components/form-field/lib/directives/form-field-control.directive.mjs +6 -1
  312. package/esm2022/components/form-field/lib/directives/form-field-error.directive.mjs +4 -1
  313. package/esm2022/components/form-field/lib/directives/form-field-hint.directive.mjs +4 -1
  314. package/esm2022/components/form-field/lib/directives/form-field-label.directive.mjs +4 -1
  315. package/esm2022/components/form-field/lib/directives/form.directive.mjs +14 -1
  316. package/esm2022/components/form-field/lib/form-field.component.mjs +14 -1
  317. package/esm2022/components/form-field/lib/form-field.service.mjs +43 -1
  318. package/esm2022/components/form-field/lib/services/form-field-error.service.mjs +25 -1
  319. package/esm2022/components/header/lib/directives/header-avatar.directive.mjs +5 -1
  320. package/esm2022/components/header/lib/directives/header-title.directive.mjs +4 -1
  321. package/esm2022/components/header/lib/header.component.mjs +4 -1
  322. package/esm2022/components/header-navigation/lib/directives/header-navigation-link.directive.mjs +4 -1
  323. package/esm2022/components/header-navigation/lib/header-navigation.component.mjs +4 -1
  324. package/esm2022/components/icon/lib/helpers/unpack-icon-identifier.mjs +15 -1
  325. package/esm2022/components/icon/lib/icon.component.mjs +25 -1
  326. package/esm2022/components/icon/lib/icon.config.mjs +20 -1
  327. package/esm2022/components/inline-message/lib/inline-message.component.mjs +14 -1
  328. package/esm2022/components/link/link.directive.mjs +4 -1
  329. package/esm2022/components/list/lib/components/expandable-list-item/expandable-list-item.component.mjs +7 -1
  330. package/esm2022/components/list/lib/components/list-item/list-item.component.mjs +18 -2
  331. package/esm2022/components/list/lib/list.component.mjs +6 -1
  332. package/esm2022/components/loading-spinner/lib/loading-spinner.component.mjs +10 -2
  333. package/esm2022/components/loading-spinner/lib/loading-spinner.directive.mjs +23 -1
  334. package/esm2022/components/logo/logo.directive.mjs +16 -1
  335. package/esm2022/components/main-menu/lib/directives/main-menu-button.directive.mjs +5 -1
  336. package/esm2022/components/main-menu/lib/directives/main-menu-close.directive.mjs +4 -1
  337. package/esm2022/components/main-menu/lib/directives/main-menu-item.directive.mjs +17 -1
  338. package/esm2022/components/main-menu/lib/helpers/create-main-menu-links.mjs +2 -1
  339. package/esm2022/components/main-menu/lib/main-menu.component.mjs +37 -1
  340. package/esm2022/components/main-menu/lib/main-menu.config.mjs +32 -1
  341. package/esm2022/components/main-menu/lib/main-menu.service.mjs +29 -1
  342. package/esm2022/components/mainfilter-group/lib/mainfilter-group.component.mjs +5 -1
  343. package/esm2022/components/menu/lib/directives/menu-item.directive.mjs +7 -1
  344. package/esm2022/components/menu/lib/menu.component.mjs +13 -1
  345. package/esm2022/components/menu/lib/menu.directive.mjs +19 -1
  346. package/esm2022/components/modal/lib/components/basic-modal/basic-modal.component.mjs +15 -1
  347. package/esm2022/components/modal/lib/components/modal-footer/modal-footer.component.mjs +4 -1
  348. package/esm2022/components/modal/lib/components/modal-header/modal-header.component.mjs +4 -1
  349. package/esm2022/components/modal/lib/components/modal-hero/modal-hero.component.mjs +12 -1
  350. package/esm2022/components/modal/lib/directives/modal-close.directive.mjs +25 -1
  351. package/esm2022/components/modal/lib/directives/modal-content.directive.mjs +4 -1
  352. package/esm2022/components/modal/lib/directives/modal-dismiss.directive.mjs +18 -1
  353. package/esm2022/components/modal/lib/helpers/inject-modal-ref.mjs +22 -1
  354. package/esm2022/components/modal/lib/helpers/provide-modal-ref.mjs +10 -1
  355. package/esm2022/components/modal/lib/modal.component.mjs +21 -2
  356. package/esm2022/components/modal/lib/modal.config.mjs +34 -1
  357. package/esm2022/components/modal/lib/modal.directive.mjs +25 -1
  358. package/esm2022/components/modal/lib/modal.service.mjs +39 -1
  359. package/esm2022/components/modal/lib/models/modal-ref.mjs +34 -1
  360. package/esm2022/components/navigation-back/lib/navigation-back.component.mjs +4 -1
  361. package/esm2022/components/notification/lib/components/notification-center/notification-center.component.mjs +1 -3
  362. package/esm2022/components/notification/lib/directives/notification-center.directive.mjs +19 -5
  363. package/esm2022/components/notification/lib/helpers/get-notifications-by-tag.mjs +2 -1
  364. package/esm2022/components/notification/lib/helpers/sort-notifications.mjs +2 -1
  365. package/esm2022/components/notification/lib/helpers/to-notification-collection.mjs +2 -1
  366. package/esm2022/components/notification/lib/models/notification-feature.mjs +16 -1
  367. package/esm2022/components/notification/lib/notification.config.mjs +45 -1
  368. package/esm2022/components/notification/lib/notification.logger.mjs +2 -1
  369. package/esm2022/components/notification/lib/notification.service.mjs +56 -1
  370. package/esm2022/components/notification/lib/notification.tokens.mjs +4 -1
  371. package/esm2022/components/notification/lib/services/notification-center.service.mjs +10 -1
  372. package/esm2022/components/paginator/lib/paginator.component.mjs +90 -1
  373. package/esm2022/components/paginator/lib/paginator.config.mjs +29 -1
  374. package/esm2022/components/progress/lib/progress.component.mjs +16 -1
  375. package/esm2022/components/radio-group/lib/radio-group.component.mjs +13 -2
  376. package/esm2022/components/rail-navigation/lib/components/rail-navigation-item/rail-navigation-item.component.mjs +17 -1
  377. package/esm2022/components/rail-navigation/lib/rail-navigation.component.mjs +27 -1
  378. package/esm2022/components/rich-list/lib/components/rich-list-content/rich-list-content.component.mjs +5 -1
  379. package/esm2022/components/rich-list/lib/components/rich-list-header/rich-list-header.component.mjs +5 -1
  380. package/esm2022/components/rich-list/lib/components/rich-list-item/rich-list-item.component.mjs +10 -2
  381. package/esm2022/components/rich-list/lib/rich-list.component.mjs +10 -3
  382. package/esm2022/components/select/lib/components/select-option/select-option.component.mjs +47 -6
  383. package/esm2022/components/select/lib/directives/select-input-control.directive.mjs +12 -2
  384. package/esm2022/components/select/lib/pipes/select-search-filter.pipe.mjs +11 -1
  385. package/esm2022/components/select/lib/select.component.mjs +56 -2
  386. package/esm2022/components/slider/lib/slider.directive.mjs +20 -1
  387. package/esm2022/components/spinbox/lib/spinbox.component.mjs +17 -1
  388. package/esm2022/components/switch/lib/switch.component.mjs +11 -1
  389. package/esm2022/components/switch/lib/switch.validator.mjs +13 -1
  390. package/esm2022/components/tab-bar/lib/components/tab-bar-item/tab-bar-item.component.mjs +29 -1
  391. package/esm2022/components/tab-bar/lib/tab-bar.component.mjs +70 -1
  392. package/esm2022/components/table/lib/components/check-cell/check-cell.component.mjs +19 -1
  393. package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +30 -2
  394. package/esm2022/components/table/lib/directives/table-cell.directive.mjs +5 -1
  395. package/esm2022/components/table/lib/directives/table-row.directive.mjs +5 -1
  396. package/esm2022/components/table/lib/table.component.mjs +30 -1
  397. package/esm2022/components/timepicker/lib/timepicker.component.mjs +15 -6
  398. package/esm2022/components/timepicker/lib/utils/generate-time-stamps.mjs +5 -3
  399. package/esm2022/components/timepicker/lib/utils/ngx-mask-helper.mjs +3 -3
  400. package/esm2022/components/toast/lib/toast.config.mjs +27 -1
  401. package/esm2022/components/toast/lib/toast.service.mjs +36 -1
  402. package/esm2022/components/toggle-button-group/lib/components/toggle-button/toggle-button.component.mjs +12 -1
  403. package/esm2022/components/toggle-button-group/lib/toggle-button-group.component.mjs +14 -2
  404. package/esm2022/components/tooltip/lib/tooltip.component.mjs +18 -1
  405. package/esm2022/components/tooltip/lib/tooltip.directive.mjs +36 -1
  406. package/esm2022/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +35 -1
  407. package/esm2022/components/wizard/lib/wizard.component.mjs +21 -1
  408. package/esm2022/internal/lib/helpers/fast-equals.mjs +3 -0
  409. package/esm2022/internal/lib/helpers/index.mjs +2 -1
  410. package/esm2022/internal/translate/lib/translate.config.mjs +32 -1
  411. package/esm2022/internal/translate/lib/translate.service.mjs +30 -1
  412. package/esm2022/lib/controllers/controller.mjs +26 -1
  413. package/esm2022/lib/controllers/disabled.controller.mjs +60 -1
  414. package/esm2022/lib/controllers/readonly.controller.mjs +57 -1
  415. package/esm2022/lib/directives/click-outside.directive.mjs +30 -1
  416. package/esm2022/lib/directives/delegate-focus.directive.mjs +15 -1
  417. package/esm2022/lib/services/window-ref.mjs +67 -1
  418. package/esm2022/lib/tokens/identity-matcher.mjs +25 -1
  419. package/esm2022/lib/tokens/string-search-handler.mjs +25 -1
  420. package/esm2022/lib/tokens/stringify.mjs +26 -1
  421. package/esm2022/localization/lib/features/with-http-language-header.mjs +54 -1
  422. package/esm2022/localization/lib/features/with-http-language-query-param.mjs +52 -1
  423. package/esm2022/localization/lib/loaders/browser-language-loader.mjs +33 -1
  424. package/esm2022/localization/lib/localization.config.mjs +73 -5
  425. package/esm2022/localization/lib/localization.logger.mjs +3 -0
  426. package/esm2022/localization/lib/localization.service.mjs +59 -29
  427. package/esm2022/rxjs/index.mjs +2 -2
  428. package/esm2022/rxjs/lib/delay-until.mjs +23 -1
  429. package/esm2022/rxjs/lib/from-element-mutation.mjs +22 -1
  430. package/esm2022/rxjs/lib/from-element-resize.mjs +25 -1
  431. package/esm2022/rxjs/lib/from-events.mjs +25 -1
  432. package/esm2022/rxjs/lib/from-query-list.mjs +24 -0
  433. package/esm2022/sdk/lib/application-environment.mjs +51 -1
  434. package/esm2022/theming/lib/helpers/prefers-dark-theme.mjs +19 -1
  435. package/esm2022/theming/lib/helpers/resolve-theme.mjs +26 -1
  436. package/esm2022/theming/lib/helpers/theme-storage.mjs +43 -1
  437. package/esm2022/theming/lib/theming.config.mjs +34 -1
  438. package/esm2022/theming/lib/theming.service.mjs +32 -1
  439. package/esm2022/utils/lib/decorators/pure.mjs +52 -1
  440. package/esm2022/utils/lib/helpers/angular.mjs +37 -1
  441. package/esm2022/utils/lib/helpers/array.mjs +5 -1
  442. package/esm2022/utils/lib/helpers/build-url.mjs +21 -1
  443. package/esm2022/utils/lib/helpers/build-website-url.mjs +3 -2
  444. package/esm2022/utils/lib/helpers/cache-storage-client.mjs +52 -1
  445. package/esm2022/utils/lib/helpers/coercion.mjs +18 -1
  446. package/esm2022/utils/lib/helpers/debounce.mjs +28 -1
  447. package/esm2022/utils/lib/helpers/defer-fn.mjs +21 -1
  448. package/esm2022/utils/lib/helpers/dom.mjs +71 -1
  449. package/esm2022/utils/lib/helpers/get-axis.mjs +21 -1
  450. package/esm2022/utils/lib/helpers/get-language-code.mjs +18 -1
  451. package/esm2022/utils/lib/helpers/get-opposite-side.mjs +22 -1
  452. package/esm2022/utils/lib/helpers/get-side.mjs +18 -1
  453. package/esm2022/utils/lib/helpers/get-unique-id.mjs +34 -1
  454. package/esm2022/utils/lib/helpers/match-url.mjs +41 -1
  455. package/esm2022/utils/lib/helpers/ng-changes.mjs +30 -1
  456. package/esm2022/utils/lib/helpers/provide-config.mjs +57 -1
  457. package/esm2022/utils/lib/helpers/queue.mjs +84 -1
  458. package/esm2022/utils/lib/helpers/type-guards.mjs +58 -1
  459. package/esm2022/utils/lib/helpers/until-destroyed.mjs +39 -1
  460. package/fesm2022/odx-angular-animations.mjs +173 -0
  461. package/fesm2022/odx-angular-animations.mjs.map +1 -1
  462. package/fesm2022/odx-angular-breakpoints.mjs +136 -0
  463. package/fesm2022/odx-angular-breakpoints.mjs.map +1 -1
  464. package/fesm2022/odx-angular-cdk-a11y.mjs +71 -0
  465. package/fesm2022/odx-angular-cdk-a11y.mjs.map +1 -1
  466. package/fesm2022/odx-angular-cdk-active-indicator.mjs +63 -0
  467. package/fesm2022/odx-angular-cdk-active-indicator.mjs.map +1 -1
  468. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs +38 -0
  469. package/fesm2022/odx-angular-cdk-autocomplete-control.mjs.map +1 -1
  470. package/fesm2022/odx-angular-cdk-checkbox-control.mjs +3 -0
  471. package/fesm2022/odx-angular-cdk-checkbox-control.mjs.map +1 -1
  472. package/fesm2022/odx-angular-cdk-connected-overlay.mjs +103 -0
  473. package/fesm2022/odx-angular-cdk-connected-overlay.mjs.map +1 -1
  474. package/fesm2022/odx-angular-cdk-custom-form-control.mjs +183 -2
  475. package/fesm2022/odx-angular-cdk-custom-form-control.mjs.map +1 -1
  476. package/fesm2022/odx-angular-cdk-dynamic-view.mjs +188 -0
  477. package/fesm2022/odx-angular-cdk-dynamic-view.mjs.map +1 -1
  478. package/fesm2022/odx-angular-cdk-event-plugins.mjs +135 -0
  479. package/fesm2022/odx-angular-cdk-event-plugins.mjs.map +1 -1
  480. package/fesm2022/odx-angular-cdk-expandable.mjs +88 -0
  481. package/fesm2022/odx-angular-cdk-expandable.mjs.map +1 -1
  482. package/fesm2022/odx-angular-cdk-option-control.mjs +47 -0
  483. package/fesm2022/odx-angular-cdk-option-control.mjs.map +1 -1
  484. package/fesm2022/odx-angular-cdk-radio-group-control.mjs +19 -0
  485. package/fesm2022/odx-angular-cdk-radio-group-control.mjs.map +1 -1
  486. package/fesm2022/odx-angular-components-accordion.mjs +41 -0
  487. package/fesm2022/odx-angular-components-accordion.mjs.map +1 -1
  488. package/fesm2022/odx-angular-components-action-group.mjs +6 -0
  489. package/fesm2022/odx-angular-components-action-group.mjs.map +1 -1
  490. package/fesm2022/odx-angular-components-area-header.mjs +14 -0
  491. package/fesm2022/odx-angular-components-area-header.mjs.map +1 -1
  492. package/fesm2022/odx-angular-components-autocomplete.mjs +17 -0
  493. package/fesm2022/odx-angular-components-autocomplete.mjs.map +1 -1
  494. package/fesm2022/odx-angular-components-avatar.mjs +8 -0
  495. package/fesm2022/odx-angular-components-avatar.mjs.map +1 -1
  496. package/fesm2022/odx-angular-components-badge.mjs +25 -0
  497. package/fesm2022/odx-angular-components-badge.mjs.map +1 -1
  498. package/fesm2022/odx-angular-components-bar.mjs +13 -0
  499. package/fesm2022/odx-angular-components-bar.mjs.map +1 -1
  500. package/fesm2022/odx-angular-components-breadcrumbs.mjs +3 -0
  501. package/fesm2022/odx-angular-components-breadcrumbs.mjs.map +1 -1
  502. package/fesm2022/odx-angular-components-button-group.mjs +15 -0
  503. package/fesm2022/odx-angular-components-button-group.mjs.map +1 -1
  504. package/fesm2022/odx-angular-components-button.mjs +10 -0
  505. package/fesm2022/odx-angular-components-button.mjs.map +1 -1
  506. package/fesm2022/odx-angular-components-calendar.mjs +270 -33
  507. package/fesm2022/odx-angular-components-calendar.mjs.map +1 -1
  508. package/fesm2022/odx-angular-components-checkbox.mjs +55 -0
  509. package/fesm2022/odx-angular-components-checkbox.mjs.map +1 -1
  510. package/fesm2022/odx-angular-components-chip.mjs +20 -0
  511. package/fesm2022/odx-angular-components-chip.mjs.map +1 -1
  512. package/fesm2022/odx-angular-components-circular-progress.mjs +20 -0
  513. package/fesm2022/odx-angular-components-circular-progress.mjs.map +1 -1
  514. package/fesm2022/odx-angular-components-content-box.mjs +9 -0
  515. package/fesm2022/odx-angular-components-content-box.mjs.map +1 -1
  516. package/fesm2022/odx-angular-components-datepicker.mjs +84 -0
  517. package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
  518. package/fesm2022/odx-angular-components-daterangepicker.mjs +145 -0
  519. package/fesm2022/odx-angular-components-daterangepicker.mjs.map +1 -1
  520. package/fesm2022/odx-angular-components-dropdown.mjs +66 -0
  521. package/fesm2022/odx-angular-components-dropdown.mjs.map +1 -1
  522. package/fesm2022/odx-angular-components-error-page.mjs +15 -0
  523. package/fesm2022/odx-angular-components-error-page.mjs.map +1 -1
  524. package/fesm2022/odx-angular-components-footer.mjs +11 -6
  525. package/fesm2022/odx-angular-components-footer.mjs.map +1 -1
  526. package/fesm2022/odx-angular-components-form-field.mjs +131 -0
  527. package/fesm2022/odx-angular-components-form-field.mjs.map +1 -1
  528. package/fesm2022/odx-angular-components-header-navigation.mjs +6 -0
  529. package/fesm2022/odx-angular-components-header-navigation.mjs.map +1 -1
  530. package/fesm2022/odx-angular-components-header.mjs +10 -0
  531. package/fesm2022/odx-angular-components-header.mjs.map +1 -1
  532. package/fesm2022/odx-angular-components-icon.mjs +57 -0
  533. package/fesm2022/odx-angular-components-icon.mjs.map +1 -1
  534. package/fesm2022/odx-angular-components-inline-message.mjs +13 -0
  535. package/fesm2022/odx-angular-components-inline-message.mjs.map +1 -1
  536. package/fesm2022/odx-angular-components-link.mjs +3 -0
  537. package/fesm2022/odx-angular-components-link.mjs.map +1 -1
  538. package/fesm2022/odx-angular-components-list.mjs +28 -1
  539. package/fesm2022/odx-angular-components-list.mjs.map +1 -1
  540. package/fesm2022/odx-angular-components-loading-spinner.mjs +30 -0
  541. package/fesm2022/odx-angular-components-loading-spinner.mjs.map +1 -1
  542. package/fesm2022/odx-angular-components-logo.mjs +15 -0
  543. package/fesm2022/odx-angular-components-logo.mjs.map +1 -1
  544. package/fesm2022/odx-angular-components-main-menu.mjs +119 -0
  545. package/fesm2022/odx-angular-components-main-menu.mjs.map +1 -1
  546. package/fesm2022/odx-angular-components-mainfilter-group.mjs +4 -0
  547. package/fesm2022/odx-angular-components-mainfilter-group.mjs.map +1 -1
  548. package/fesm2022/odx-angular-components-menu.mjs +36 -0
  549. package/fesm2022/odx-angular-components-menu.mjs.map +1 -1
  550. package/fesm2022/odx-angular-components-modal.mjs +252 -0
  551. package/fesm2022/odx-angular-components-modal.mjs.map +1 -1
  552. package/fesm2022/odx-angular-components-navigation-back.mjs +3 -0
  553. package/fesm2022/odx-angular-components-navigation-back.mjs.map +1 -1
  554. package/fesm2022/odx-angular-components-notification.mjs +148 -6
  555. package/fesm2022/odx-angular-components-notification.mjs.map +1 -1
  556. package/fesm2022/odx-angular-components-paginator.mjs +117 -0
  557. package/fesm2022/odx-angular-components-paginator.mjs.map +1 -1
  558. package/fesm2022/odx-angular-components-progress.mjs +15 -0
  559. package/fesm2022/odx-angular-components-progress.mjs.map +1 -1
  560. package/fesm2022/odx-angular-components-radio-group.mjs +11 -0
  561. package/fesm2022/odx-angular-components-radio-group.mjs.map +1 -1
  562. package/fesm2022/odx-angular-components-rail-navigation.mjs +42 -0
  563. package/fesm2022/odx-angular-components-rail-navigation.mjs.map +1 -1
  564. package/fesm2022/odx-angular-components-rich-list.mjs +26 -3
  565. package/fesm2022/odx-angular-components-rich-list.mjs.map +1 -1
  566. package/fesm2022/odx-angular-components-select.mjs +122 -7
  567. package/fesm2022/odx-angular-components-select.mjs.map +1 -1
  568. package/fesm2022/odx-angular-components-slider.mjs +19 -0
  569. package/fesm2022/odx-angular-components-slider.mjs.map +1 -1
  570. package/fesm2022/odx-angular-components-spinbox.mjs +16 -0
  571. package/fesm2022/odx-angular-components-spinbox.mjs.map +1 -1
  572. package/fesm2022/odx-angular-components-switch.mjs +22 -0
  573. package/fesm2022/odx-angular-components-switch.mjs.map +1 -1
  574. package/fesm2022/odx-angular-components-tab-bar.mjs +97 -0
  575. package/fesm2022/odx-angular-components-tab-bar.mjs.map +1 -1
  576. package/fesm2022/odx-angular-components-table.mjs +84 -1
  577. package/fesm2022/odx-angular-components-table.mjs.map +1 -1
  578. package/fesm2022/odx-angular-components-timepicker.mjs +20 -9
  579. package/fesm2022/odx-angular-components-timepicker.mjs.map +1 -1
  580. package/fesm2022/odx-angular-components-toast.mjs +61 -0
  581. package/fesm2022/odx-angular-components-toast.mjs.map +1 -1
  582. package/fesm2022/odx-angular-components-toggle-button-group.mjs +23 -0
  583. package/fesm2022/odx-angular-components-toggle-button-group.mjs.map +1 -1
  584. package/fesm2022/odx-angular-components-tooltip.mjs +52 -0
  585. package/fesm2022/odx-angular-components-tooltip.mjs.map +1 -1
  586. package/fesm2022/odx-angular-components-wizard.mjs +54 -0
  587. package/fesm2022/odx-angular-components-wizard.mjs.map +1 -1
  588. package/fesm2022/odx-angular-internal-translate.mjs +60 -0
  589. package/fesm2022/odx-angular-internal-translate.mjs.map +1 -1
  590. package/fesm2022/odx-angular-internal.mjs +4 -1
  591. package/fesm2022/odx-angular-internal.mjs.map +1 -1
  592. package/fesm2022/odx-angular-localization.mjs +269 -32
  593. package/fesm2022/odx-angular-localization.mjs.map +1 -1
  594. package/fesm2022/odx-angular-rxjs.mjs +115 -5
  595. package/fesm2022/odx-angular-rxjs.mjs.map +1 -1
  596. package/fesm2022/odx-angular-sdk.mjs +50 -0
  597. package/fesm2022/odx-angular-sdk.mjs.map +1 -1
  598. package/fesm2022/odx-angular-theming.mjs +149 -0
  599. package/fesm2022/odx-angular-theming.mjs.map +1 -1
  600. package/fesm2022/odx-angular-utils.mjs +709 -1
  601. package/fesm2022/odx-angular-utils.mjs.map +1 -1
  602. package/fesm2022/odx-angular.mjs +322 -0
  603. package/fesm2022/odx-angular.mjs.map +1 -1
  604. package/internal/lib/helpers/fast-equals.d.ts +1 -0
  605. package/internal/lib/helpers/index.d.ts +1 -0
  606. package/internal/translate/lib/translate.config.d.ts +31 -0
  607. package/internal/translate/lib/translate.service.d.ts +29 -0
  608. package/lib/controllers/controller.d.ts +25 -0
  609. package/lib/controllers/disabled.controller.d.ts +59 -0
  610. package/lib/controllers/readonly.controller.d.ts +56 -0
  611. package/lib/directives/click-outside.directive.d.ts +29 -0
  612. package/lib/directives/delegate-focus.directive.d.ts +14 -0
  613. package/lib/services/window-ref.d.ts +66 -0
  614. package/lib/tokens/identity-matcher.d.ts +41 -0
  615. package/lib/tokens/string-search-handler.d.ts +39 -0
  616. package/lib/tokens/stringify.d.ts +42 -0
  617. package/localization/lib/features/with-http-language-header.d.ts +63 -0
  618. package/localization/lib/features/with-http-language-query-param.d.ts +61 -0
  619. package/localization/lib/loaders/browser-language-loader.d.ts +32 -0
  620. package/localization/lib/localization.config.d.ts +81 -2
  621. package/localization/lib/localization.logger.d.ts +3 -0
  622. package/localization/lib/localization.service.d.ts +42 -7
  623. package/package.json +8 -7
  624. package/rxjs/index.d.ts +1 -1
  625. package/rxjs/lib/delay-until.d.ts +22 -0
  626. package/rxjs/lib/from-element-mutation.d.ts +21 -0
  627. package/rxjs/lib/from-element-resize.d.ts +24 -0
  628. package/rxjs/lib/from-events.d.ts +24 -0
  629. package/rxjs/lib/from-query-list.d.ts +22 -0
  630. package/sdk/lib/application-environment.d.ts +59 -0
  631. package/theming/lib/helpers/prefers-dark-theme.d.ts +18 -0
  632. package/theming/lib/helpers/resolve-theme.d.ts +25 -0
  633. package/theming/lib/helpers/theme-storage.d.ts +42 -0
  634. package/theming/lib/theming.config.d.ts +46 -0
  635. package/theming/lib/theming.service.d.ts +31 -0
  636. package/utils/lib/decorators/pure.d.ts +51 -0
  637. package/utils/lib/helpers/angular.d.ts +36 -0
  638. package/utils/lib/helpers/array.d.ts +4 -0
  639. package/utils/lib/helpers/build-url.d.ts +20 -0
  640. package/utils/lib/helpers/build-website-url.d.ts +2 -1
  641. package/utils/lib/helpers/cache-storage-client.d.ts +51 -0
  642. package/utils/lib/helpers/coercion.d.ts +17 -0
  643. package/utils/lib/helpers/debounce.d.ts +27 -0
  644. package/utils/lib/helpers/defer-fn.d.ts +20 -0
  645. package/utils/lib/helpers/dom.d.ts +70 -0
  646. package/utils/lib/helpers/get-axis.d.ts +20 -0
  647. package/utils/lib/helpers/get-language-code.d.ts +17 -0
  648. package/utils/lib/helpers/get-opposite-side.d.ts +21 -0
  649. package/utils/lib/helpers/get-side.d.ts +17 -0
  650. package/utils/lib/helpers/get-unique-id.d.ts +33 -0
  651. package/utils/lib/helpers/match-url.d.ts +40 -0
  652. package/utils/lib/helpers/ng-changes.d.ts +52 -0
  653. package/utils/lib/helpers/provide-config.d.ts +56 -0
  654. package/utils/lib/helpers/queue.d.ts +83 -0
  655. package/utils/lib/helpers/type-guards.d.ts +57 -0
  656. package/utils/lib/helpers/until-destroyed.d.ts +38 -0
  657. package/esm2022/rxjs/lib/form-query-list.mjs +0 -5
  658. package/rxjs/lib/form-query-list.d.ts +0 -3
@@ -1,5 +1,30 @@
1
1
  import { availableThemes } from '../models';
2
+ /**
3
+ * Resolves the specified theme by checking if it exists in the predefined list of available themes.
4
+ * This function ensures that only valid themes are used in the application, providing a safeguard
5
+ * against invalid theme names and facilitating the dynamic application of themes.
6
+ *
7
+ * @param {string | null} [theme] - The name of the theme to resolve. It's optional and can be `null`.
8
+ * @returns {Theme | null} - Returns the resolved `Theme` object if the theme is found within the list of `availableThemes`;
9
+ * otherwise, returns `null` to indicate the theme is not recognized or available.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Assuming 'dark' and 'light' are in the availableThemes array
14
+ * console.log(resolveTheme('dark')); // Outputs the 'dark' Theme object
15
+ * console.log(resolveTheme('unknown')); // Outputs null
16
+ *
17
+ * // Using resolveTheme to apply a user-selected theme
18
+ * const userSelectedTheme = getUserSelectedTheme(); // This function gets the user's theme choice
19
+ * const themeToApply = resolveTheme(userSelectedTheme);
20
+ * if (themeToApply) {
21
+ * applyTheme(themeToApply); // This function applies the resolved theme to the application
22
+ * } else {
23
+ * console.warn('Selected theme is not available.');
24
+ * }
25
+ * ```
26
+ */
2
27
  export function resolveTheme(theme) {
3
28
  return availableThemes.find((t) => t === theme) ?? null;
4
29
  }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS10aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy9yZXNvbHZlLXRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVMsTUFBTSxXQUFXLENBQUM7QUFFbkQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFxQjtJQUNoRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF2YWlsYWJsZVRoZW1lcywgVGhlbWUgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHRoZW1lPzogc3RyaW5nIHwgbnVsbCk6IFRoZW1lIHwgbnVsbCB7XG4gIHJldHVybiBhdmFpbGFibGVUaGVtZXMuZmluZCgodCkgPT4gdCA9PT0gdGhlbWUpID8/IG51bGw7XG59XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS10aGVtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy9yZXNvbHZlLXRoZW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVMsTUFBTSxXQUFXLENBQUM7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBcUI7SUFDaEQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhdmFpbGFibGVUaGVtZXMsIFRoZW1lIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgc3BlY2lmaWVkIHRoZW1lIGJ5IGNoZWNraW5nIGlmIGl0IGV4aXN0cyBpbiB0aGUgcHJlZGVmaW5lZCBsaXN0IG9mIGF2YWlsYWJsZSB0aGVtZXMuXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IHZhbGlkIHRoZW1lcyBhcmUgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24sIHByb3ZpZGluZyBhIHNhZmVndWFyZFxuICogYWdhaW5zdCBpbnZhbGlkIHRoZW1lIG5hbWVzIGFuZCBmYWNpbGl0YXRpbmcgdGhlIGR5bmFtaWMgYXBwbGljYXRpb24gb2YgdGhlbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW3RoZW1lXSAtIFRoZSBuYW1lIG9mIHRoZSB0aGVtZSB0byByZXNvbHZlLiBJdCdzIG9wdGlvbmFsIGFuZCBjYW4gYmUgYG51bGxgLlxuICogQHJldHVybnMge1RoZW1lIHwgbnVsbH0gLSBSZXR1cm5zIHRoZSByZXNvbHZlZCBgVGhlbWVgIG9iamVjdCBpZiB0aGUgdGhlbWUgaXMgZm91bmQgd2l0aGluIHRoZSBsaXN0IG9mIGBhdmFpbGFibGVUaGVtZXNgO1xuICogb3RoZXJ3aXNlLCByZXR1cm5zIGBudWxsYCB0byBpbmRpY2F0ZSB0aGUgdGhlbWUgaXMgbm90IHJlY29nbml6ZWQgb3IgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gQXNzdW1pbmcgJ2RhcmsnIGFuZCAnbGlnaHQnIGFyZSBpbiB0aGUgYXZhaWxhYmxlVGhlbWVzIGFycmF5XG4gKiBjb25zb2xlLmxvZyhyZXNvbHZlVGhlbWUoJ2RhcmsnKSk7IC8vIE91dHB1dHMgdGhlICdkYXJrJyBUaGVtZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc29sdmVUaGVtZSgndW5rbm93bicpKTsgLy8gT3V0cHV0cyBudWxsXG4gKlxuICogLy8gVXNpbmcgcmVzb2x2ZVRoZW1lIHRvIGFwcGx5IGEgdXNlci1zZWxlY3RlZCB0aGVtZVxuICogY29uc3QgdXNlclNlbGVjdGVkVGhlbWUgPSBnZXRVc2VyU2VsZWN0ZWRUaGVtZSgpOyAvLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHVzZXIncyB0aGVtZSBjaG9pY2VcbiAqIGNvbnN0IHRoZW1lVG9BcHBseSA9IHJlc29sdmVUaGVtZSh1c2VyU2VsZWN0ZWRUaGVtZSk7XG4gKiBpZiAodGhlbWVUb0FwcGx5KSB7XG4gKiAgIGFwcGx5VGhlbWUodGhlbWVUb0FwcGx5KTsgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSByZXNvbHZlZCB0aGVtZSB0byB0aGUgYXBwbGljYXRpb25cbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUud2FybignU2VsZWN0ZWQgdGhlbWUgaXMgbm90IGF2YWlsYWJsZS4nKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHRoZW1lPzogc3RyaW5nIHwgbnVsbCk6IFRoZW1lIHwgbnVsbCB7XG4gIHJldHVybiBhdmFpbGFibGVUaGVtZXMuZmluZCgodCkgPT4gdCA9PT0gdGhlbWUpID8/IG51bGw7XG59XG4iXX0=
@@ -1,5 +1,26 @@
1
1
  import { resolveTheme } from './resolve-theme';
2
+ /**
3
+ * The key used to store the selected theme in `Storage`.
4
+ * This constant ensures consistent access to the theme setting across the application.
5
+ */
2
6
  export const THEME_STORAGE_NAME = '@odx/angular/theming:SelectedTheme';
7
+ /**
8
+ * Saves the specified theme to storage. This function abstracts the storage interaction,
9
+ * providing a fail-safe mechanism to avoid exceptions if the storage is not available.
10
+ *
11
+ * @param {Storage | null | undefined} storage - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
12
+ * @param {Theme} theme - The theme to save. Should be a value that is recognized by the application's theming system.
13
+ * @throws Will silently catch and ignore any exceptions caused by storage limitations or permissions.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * // Example usage with localStorage
18
+ * saveTheme(localStorage, 'dark');
19
+ *
20
+ * // Using sessionStorage instead
21
+ * saveTheme(sessionStorage, 'light');
22
+ * ```
23
+ */
3
24
  export function saveTheme(storage, theme) {
4
25
  try {
5
26
  storage?.setItem(THEME_STORAGE_NAME, theme);
@@ -8,6 +29,27 @@ export function saveTheme(storage, theme) {
8
29
  //
9
30
  }
10
31
  }
32
+ /**
33
+ * Reads the theme from storage, attempting to resolve it to a valid application theme.
34
+ * If the theme cannot be found or is invalid, `null` is returned. This function also provides
35
+ * error handling for any storage access issues, ensuring the application can gracefully handle
36
+ * scenarios where storage is not available or accessible.
37
+ *
38
+ * @param {Storage | null} [storage] - The storage mechanism to use, typically `localStorage` or `sessionStorage`.
39
+ * @returns {Theme | null} - The resolved theme if found and valid; otherwise, `null`.
40
+ * @throws Will silently catch and ignore any exceptions caused by storage access, returning `null`.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * // Reading theme from localStorage
45
+ * const theme = readTheme(localStorage);
46
+ * if (theme) {
47
+ * applyTheme(theme); // Assuming applyTheme is a function to apply the theme
48
+ * } else {
49
+ * console.warn('No saved theme found or theme is invalid.');
50
+ * }
51
+ * ```
52
+ */
11
53
  export function readTheme(storage) {
12
54
  try {
13
55
  return resolveTheme(storage?.getItem(THEME_STORAGE_NAME)) ?? null;
@@ -16,4 +58,4 @@ export function readTheme(storage) {
16
58
  return null;
17
59
  }
18
60
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy90aGVtZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUV2RSxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW1DLEVBQUUsS0FBWTtJQUN6RSxJQUFJO1FBQ0YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM3QztJQUFDLE1BQU07UUFDTixFQUFFO0tBQ0g7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUF3QjtJQUNoRCxJQUFJO1FBQ0YsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0tBQ25FO0lBQUMsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhlbWUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRoZW1lIH0gZnJvbSAnLi9yZXNvbHZlLXRoZW1lJztcblxuZXhwb3J0IGNvbnN0IFRIRU1FX1NUT1JBR0VfTkFNRSA9ICdAb2R4L2FuZ3VsYXIvdGhlbWluZzpTZWxlY3RlZFRoZW1lJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVUaGVtZShzdG9yYWdlOiBTdG9yYWdlIHwgbnVsbCB8IHVuZGVmaW5lZCwgdGhlbWU6IFRoZW1lKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3RvcmFnZT8uc2V0SXRlbShUSEVNRV9TVE9SQUdFX05BTUUsIHRoZW1lKTtcbiAgfSBjYXRjaCB7XG4gICAgLy9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRoZW1lKHN0b3JhZ2U/OiBTdG9yYWdlIHwgbnVsbCk6IFRoZW1lIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlc29sdmVUaGVtZShzdG9yYWdlPy5nZXRJdGVtKFRIRU1FX1NUT1JBR0VfTkFNRSkpID8/IG51bGw7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci90aGVtaW5nL3NyYy9saWIvaGVscGVycy90aGVtZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBbUMsRUFBRSxLQUFZO0lBQ3pFLElBQUk7UUFDRixPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBQUMsTUFBTTtRQUNOLEVBQUU7S0FDSDtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQXdCO0lBQ2hELElBQUk7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDbkU7SUFBQyxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyByZXNvbHZlVGhlbWUgfSBmcm9tICcuL3Jlc29sdmUtdGhlbWUnO1xuXG4vKipcbiAqIFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgc2VsZWN0ZWQgdGhlbWUgaW4gYFN0b3JhZ2VgLlxuICogVGhpcyBjb25zdGFudCBlbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSB0aGVtZSBzZXR0aW5nIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVNRV9TVE9SQUdFX05BTUUgPSAnQG9keC9hbmd1bGFyL3RoZW1pbmc6U2VsZWN0ZWRUaGVtZSc7XG5cbi8qKlxuICogU2F2ZXMgdGhlIHNwZWNpZmllZCB0aGVtZSB0byBzdG9yYWdlLiBUaGlzIGZ1bmN0aW9uIGFic3RyYWN0cyB0aGUgc3RvcmFnZSBpbnRlcmFjdGlvbixcbiAqIHByb3ZpZGluZyBhIGZhaWwtc2FmZSBtZWNoYW5pc20gdG8gYXZvaWQgZXhjZXB0aW9ucyBpZiB0aGUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSB7U3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWR9IHN0b3JhZ2UgLSBUaGUgc3RvcmFnZSBtZWNoYW5pc20gdG8gdXNlLCB0eXBpY2FsbHkgYGxvY2FsU3RvcmFnZWAgb3IgYHNlc3Npb25TdG9yYWdlYC5cbiAqIEBwYXJhbSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHNhdmUuIFNob3VsZCBiZSBhIHZhbHVlIHRoYXQgaXMgcmVjb2duaXplZCBieSB0aGUgYXBwbGljYXRpb24ncyB0aGVtaW5nIHN5c3RlbS5cbiAqIEB0aHJvd3MgV2lsbCBzaWxlbnRseSBjYXRjaCBhbmQgaWdub3JlIGFueSBleGNlcHRpb25zIGNhdXNlZCBieSBzdG9yYWdlIGxpbWl0YXRpb25zIG9yIHBlcm1pc3Npb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRXhhbXBsZSB1c2FnZSB3aXRoIGxvY2FsU3RvcmFnZVxuICogc2F2ZVRoZW1lKGxvY2FsU3RvcmFnZSwgJ2RhcmsnKTtcbiAqXG4gKiAvLyBVc2luZyBzZXNzaW9uU3RvcmFnZSBpbnN0ZWFkXG4gKiBzYXZlVGhlbWUoc2Vzc2lvblN0b3JhZ2UsICdsaWdodCcpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlVGhlbWUoc3RvcmFnZTogU3RvcmFnZSB8IG51bGwgfCB1bmRlZmluZWQsIHRoZW1lOiBUaGVtZSk6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2U/LnNldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FLCB0aGVtZSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vXG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgdGhlbWUgZnJvbSBzdG9yYWdlLCBhdHRlbXB0aW5nIHRvIHJlc29sdmUgaXQgdG8gYSB2YWxpZCBhcHBsaWNhdGlvbiB0aGVtZS5cbiAqIElmIHRoZSB0aGVtZSBjYW5ub3QgYmUgZm91bmQgb3IgaXMgaW52YWxpZCwgYG51bGxgIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIGFsc28gcHJvdmlkZXNcbiAqIGVycm9yIGhhbmRsaW5nIGZvciBhbnkgc3RvcmFnZSBhY2Nlc3MgaXNzdWVzLCBlbnN1cmluZyB0aGUgYXBwbGljYXRpb24gY2FuIGdyYWNlZnVsbHkgaGFuZGxlXG4gKiBzY2VuYXJpb3Mgd2hlcmUgc3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtTdG9yYWdlIHwgbnVsbH0gW3N0b3JhZ2VdIC0gVGhlIHN0b3JhZ2UgbWVjaGFuaXNtIHRvIHVzZSwgdHlwaWNhbGx5IGBsb2NhbFN0b3JhZ2VgIG9yIGBzZXNzaW9uU3RvcmFnZWAuXG4gKiBAcmV0dXJucyB7VGhlbWUgfCBudWxsfSAtIFRoZSByZXNvbHZlZCB0aGVtZSBpZiBmb3VuZCBhbmQgdmFsaWQ7IG90aGVyd2lzZSwgYG51bGxgLlxuICogQHRocm93cyBXaWxsIHNpbGVudGx5IGNhdGNoIGFuZCBpZ25vcmUgYW55IGV4Y2VwdGlvbnMgY2F1c2VkIGJ5IHN0b3JhZ2UgYWNjZXNzLCByZXR1cm5pbmcgYG51bGxgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUmVhZGluZyB0aGVtZSBmcm9tIGxvY2FsU3RvcmFnZVxuICogY29uc3QgdGhlbWUgPSByZWFkVGhlbWUobG9jYWxTdG9yYWdlKTtcbiAqIGlmICh0aGVtZSkge1xuICogICBhcHBseVRoZW1lKHRoZW1lKTsgLy8gQXNzdW1pbmcgYXBwbHlUaGVtZSBpcyBhIGZ1bmN0aW9uIHRvIGFwcGx5IHRoZSB0aGVtZVxuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS53YXJuKCdObyBzYXZlZCB0aGVtZSBmb3VuZCBvciB0aGVtZSBpcyBpbnZhbGlkLicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGhlbWUoc3RvcmFnZT86IFN0b3JhZ2UgfCBudWxsKTogVGhlbWUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzb2x2ZVRoZW1lKHN0b3JhZ2U/LmdldEl0ZW0oVEhFTUVfU1RPUkFHRV9OQU1FKSkgPz8gbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -2,11 +2,44 @@ import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angu
2
2
  import { createConfigTokens } from '@odx/angular/utils';
3
3
  import { Theme } from './models';
4
4
  import { ThemingService } from './theming.service';
5
+ /**
6
+ * Utility created by `createConfigTokens` for managing theming configuration tokens and functions.
7
+ * Provides easy access to theming configuration, default values, and dependency injection utilities.
8
+ */
5
9
  export const { ThemingConfig, injectThemingConfig, provideThemingConfig } = createConfigTokens('Theming', '@odx/angular/theme', {
6
10
  autoDetect: false,
7
11
  defaultTheme: Theme.LIGHT,
8
12
  storage: null,
9
13
  });
14
+ /**
15
+ * Provides the theming configuration to the application and initializes the `ThemingService`
16
+ * based on the provided configuration. This function simplifies the setup of a dynamic theming
17
+ * system, integrating with Angular's environment initializers to ensure proper initialization.
18
+ *
19
+ * @template D - The dependencies required by the theming configuration, if any.
20
+ * @param {ConfigProvider<Partial<ThemingConfig>, D>} config - The theming configuration or a configuration factory provider.
21
+ * @returns {EnvironmentProviders} An array of providers for setting up theming in the application.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // Providing a simple theming configuration
26
+ * provideTheming({
27
+ * autoDetect: true,
28
+ * defaultTheme: Theme.DARK,
29
+ * storage: localStorage,
30
+ * });
31
+ *
32
+ * // Providing a theming configuration with dependencies
33
+ * provideTheming({
34
+ * useFactory: (deps: Dependencies) => ({
35
+ * autoDetect: deps.setting,
36
+ * defaultTheme: Theme.DARK,
37
+ * storage: localStorage,
38
+ * }),
39
+ * deps: [SomeDependency],
40
+ * });
41
+ * ```
42
+ */
10
43
  export function provideTheming(config) {
11
44
  return makeEnvironmentProviders([
12
45
  provideThemingConfig(config),
@@ -18,4 +51,4 @@ export function provideTheming(config) {
18
51
  },
19
52
  ]);
20
53
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdGhlbWluZy9zcmMvbGliL3RoZW1pbmcuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBc0Msa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVFuRCxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRTtJQUM5SCxVQUFVLEVBQUUsS0FBSztJQUNqQixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUs7SUFDekIsT0FBTyxFQUFFLElBQUk7Q0FDRyxDQUFDLENBQUM7QUFFcEIsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBaUQ7SUFFakQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QixvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDNUI7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQzlDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGNyZWF0ZUNvbmZpZ1Rva2VucyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFRoZW1pbmdTZXJ2aWNlIH0gZnJvbSAnLi90aGVtaW5nLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1pbmdDb25maWcge1xuICBhdXRvRGV0ZWN0OiBib29sZWFuO1xuICBkZWZhdWx0VGhlbWU6IFRoZW1lO1xuICBzdG9yYWdlPzogU3RvcmFnZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCB7IFRoZW1pbmdDb25maWcsIGluamVjdFRoZW1pbmdDb25maWcsIHByb3ZpZGVUaGVtaW5nQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoJ1RoZW1pbmcnLCAnQG9keC9hbmd1bGFyL3RoZW1lJywge1xuICBhdXRvRGV0ZWN0OiBmYWxzZSxcbiAgZGVmYXVsdFRoZW1lOiBUaGVtZS5MSUdIVCxcbiAgc3RvcmFnZTogbnVsbCxcbn0gYXMgVGhlbWluZ0NvbmZpZyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGhlbWluZzxEIGV4dGVuZHMgQ29uZmlnRGVwZW5kZW5jaWVzID0gQ29uZmlnRGVwZW5kZW5jaWVzPFRoZW1pbmdDb25maWc+PihcbiAgY29uZmlnOiBDb25maWdQcm92aWRlcjxQYXJ0aWFsPFRoZW1pbmdDb25maWc+LCBEPlxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlVGhlbWluZ0NvbmZpZyhjb25maWcpLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gKCkgPT4gaW5qZWN0KFRoZW1pbmdTZXJ2aWNlKSxcbiAgICAgIGRlcHM6IFtUaGVtaW5nQ29uZmlnXSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdGhlbWluZy9zcmMvbGliL3RoZW1pbmcuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBd0IsTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBc0Msa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXVCbkQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLEVBQUU7SUFDOUgsVUFBVSxFQUFFLEtBQUs7SUFDakIsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLO0lBQ3pCLE9BQU8sRUFBRSxJQUFJO0NBQ0csQ0FBQyxDQUFDO0FBRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBaUQ7SUFFakQsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QixvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDNUI7WUFDRSxPQUFPLEVBQUUsdUJBQXVCO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQzlDLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBFbnZpcm9ubWVudFByb3ZpZGVycywgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGNyZWF0ZUNvbmZpZ1Rva2VucyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBUaGVtZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFRoZW1pbmdTZXJ2aWNlIH0gZnJvbSAnLi90aGVtaW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgdGhlbWluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1pbmdDb25maWcge1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0aGVtZSBzaG91bGQgYmUgYXV0by1kZXRlY3RlZCBiYXNlZCBvbiBzeXN0ZW0gcHJlZmVyZW5jZXMuXG4gICAqL1xuICBhdXRvRGV0ZWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgdGhlbWUgdG8gYmUgdXNlZCBpZiBhdXRvLWRldGVjdGlvbiBpcyBub3QgZW5hYmxlZCBvciBmYWlscy5cbiAgICovXG4gIGRlZmF1bHRUaGVtZTogVGhlbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBzdG9yYWdlIG1lY2hhbmlzbSAobGlrZSBgbG9jYWxTdG9yYWdlYCBvciBgc2Vzc2lvblN0b3JhZ2VgKSB0byBwZXJzaXN0IHRoZW1lIHNldHRpbmdzLFxuICAgKiBvciBgbnVsbGAgdG8gZGlzYWJsZSBwZXJzaXN0ZW5jZS5cbiAgICovXG4gIHN0b3JhZ2U/OiBTdG9yYWdlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGNyZWF0ZWQgYnkgYGNyZWF0ZUNvbmZpZ1Rva2Vuc2AgZm9yIG1hbmFnaW5nIHRoZW1pbmcgY29uZmlndXJhdGlvbiB0b2tlbnMgYW5kIGZ1bmN0aW9ucy5cbiAqIFByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZW1pbmcgY29uZmlndXJhdGlvbiwgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmN5IGluamVjdGlvbiB1dGlsaXRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB7IFRoZW1pbmdDb25maWcsIGluamVjdFRoZW1pbmdDb25maWcsIHByb3ZpZGVUaGVtaW5nQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoJ1RoZW1pbmcnLCAnQG9keC9hbmd1bGFyL3RoZW1lJywge1xuICBhdXRvRGV0ZWN0OiBmYWxzZSxcbiAgZGVmYXVsdFRoZW1lOiBUaGVtZS5MSUdIVCxcbiAgc3RvcmFnZTogbnVsbCxcbn0gYXMgVGhlbWluZ0NvbmZpZyk7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiB0byB0aGUgYXBwbGljYXRpb24gYW5kIGluaXRpYWxpemVzIHRoZSBgVGhlbWluZ1NlcnZpY2VgXG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi4gVGhpcyBmdW5jdGlvbiBzaW1wbGlmaWVzIHRoZSBzZXR1cCBvZiBhIGR5bmFtaWMgdGhlbWluZ1xuICogc3lzdGVtLCBpbnRlZ3JhdGluZyB3aXRoIEFuZ3VsYXIncyBlbnZpcm9ubWVudCBpbml0aWFsaXplcnMgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgRCAtIFRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiwgaWYgYW55LlxuICogQHBhcmFtIHtDb25maWdQcm92aWRlcjxQYXJ0aWFsPFRoZW1pbmdDb25maWc+LCBEPn0gY29uZmlnIC0gVGhlIHRoZW1pbmcgY29uZmlndXJhdGlvbiBvciBhIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSBwcm92aWRlci5cbiAqIEByZXR1cm5zIHtFbnZpcm9ubWVudFByb3ZpZGVyc30gQW4gYXJyYXkgb2YgcHJvdmlkZXJzIGZvciBzZXR0aW5nIHVwIHRoZW1pbmcgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gUHJvdmlkaW5nIGEgc2ltcGxlIHRoZW1pbmcgY29uZmlndXJhdGlvblxuICogcHJvdmlkZVRoZW1pbmcoe1xuICogICBhdXRvRGV0ZWN0OiB0cnVlLFxuICogICBkZWZhdWx0VGhlbWU6IFRoZW1lLkRBUkssXG4gKiAgIHN0b3JhZ2U6IGxvY2FsU3RvcmFnZSxcbiAqIH0pO1xuICpcbiAqIC8vIFByb3ZpZGluZyBhIHRoZW1pbmcgY29uZmlndXJhdGlvbiB3aXRoIGRlcGVuZGVuY2llc1xuICogcHJvdmlkZVRoZW1pbmcoe1xuICogICB1c2VGYWN0b3J5OiAoZGVwczogRGVwZW5kZW5jaWVzKSA9PiAoe1xuICogICAgIGF1dG9EZXRlY3Q6IGRlcHMuc2V0dGluZyxcbiAqICAgICBkZWZhdWx0VGhlbWU6IFRoZW1lLkRBUkssXG4gKiAgICAgc3RvcmFnZTogbG9jYWxTdG9yYWdlLFxuICogICB9KSxcbiAqICAgZGVwczogW1NvbWVEZXBlbmRlbmN5XSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGhlbWluZzxEIGV4dGVuZHMgQ29uZmlnRGVwZW5kZW5jaWVzID0gQ29uZmlnRGVwZW5kZW5jaWVzPFRoZW1pbmdDb25maWc+PihcbiAgY29uZmlnOiBDb25maWdQcm92aWRlcjxQYXJ0aWFsPFRoZW1pbmdDb25maWc+LCBEPixcbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgcHJvdmlkZVRoZW1pbmdDb25maWcoY29uZmlnKSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+ICgpID0+IGluamVjdChUaGVtaW5nU2VydmljZSksXG4gICAgICBkZXBzOiBbVGhlbWluZ0NvbmZpZ10sXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==
@@ -7,24 +7,49 @@ import { Theme } from './models';
7
7
  import { injectThemingConfig } from './theming.config';
8
8
  import * as i0 from "@angular/core";
9
9
  export const THEME_ATTRIBUTE_NAME = 'odxTheme';
10
+ /**
11
+ * Manages theming for the application. It allows for dynamic theme selection, automatically saves theme preferences,
12
+ * and applies the user's preferred theme or the default theme based on configuration settings.
13
+ *
14
+ * The service leverages the BehaviorSubject pattern to reactively handle theme changes across the application,
15
+ * ensuring that subscribers are notified whenever the theme changes. It also interacts with the DOM directly
16
+ * to apply the current theme and with the provided storage mechanism to persist theme preferences.
17
+ */
10
18
  export class ThemingService {
11
19
  constructor() {
12
20
  this.config = injectThemingConfig();
13
21
  this.document = inject(DOCUMENT);
14
22
  this.windowRef = inject(WindowRef);
15
23
  this.theme$$ = new BehaviorSubject(this.getInitialTheme());
24
+ /**
25
+ * An observable stream of the current theme, emitting values whenever the theme changes.
26
+ * Subscribers to this observable can react to theme changes in real-time.
27
+ */
16
28
  this.theme$ = this.theme$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
17
29
  this.theme$.subscribe((theme) => {
18
30
  this.document.body.setAttribute(THEME_ATTRIBUTE_NAME, theme);
19
31
  saveTheme(this.config.storage, theme);
20
32
  });
21
33
  }
34
+ /**
35
+ * Selects and applies a given theme by updating the BehaviorSubject and persisting the preference.
36
+ *
37
+ * @param {Theme} theme - The theme to apply.
38
+ */
22
39
  selectTheme(theme) {
23
40
  this.theme$$.next(theme);
24
41
  }
42
+ /**
43
+ * Retrieves the currently selected theme.
44
+ *
45
+ * @returns {Theme} The currently selected theme.
46
+ */
25
47
  getSelectedTheme() {
26
48
  return this.theme$$.getValue();
27
49
  }
50
+ /**
51
+ * Toggles between dark and light themes, depending on the current theme.
52
+ */
28
53
  toggleDarkMode() {
29
54
  const currentTheme = this.getSelectedTheme();
30
55
  if (currentTheme === Theme.DARK) {
@@ -34,9 +59,15 @@ export class ThemingService {
34
59
  this.enableDarkMode();
35
60
  }
36
61
  }
62
+ /**
63
+ * Enables the dark mode theme.
64
+ */
37
65
  enableDarkMode() {
38
66
  this.selectTheme(Theme.DARK);
39
67
  }
68
+ /**
69
+ * Enables the light mode theme.
70
+ */
40
71
  enableLightMode() {
41
72
  this.selectTheme(Theme.LIGHT);
42
73
  }
@@ -54,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
54
85
  type: Injectable,
55
86
  args: [{ providedIn: 'root' }]
56
87
  }], ctorParameters: function () { return []; } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RoZW1pbmcvc3JjL2xpYi90aGVtaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFdkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBUXpCO1FBUGlCLFdBQU0sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFOUQsV0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBR2pILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBWTtRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU0sY0FBYztRQUNuQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLFlBQVksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdGLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBRUQsT0FBTyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbkQsQ0FBQzsrR0FoRFUsY0FBYzttSEFBZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHByZWZlcnNEYXJrVGhlbWUsIHJlYWRUaGVtZSwgc2F2ZVRoZW1lIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0VGhlbWluZ0NvbmZpZyB9IGZyb20gJy4vdGhlbWluZy5jb25maWcnO1xuXG5leHBvcnQgY29uc3QgVEhFTUVfQVRUUklCVVRFX05BTUUgPSAnb2R4VGhlbWUnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoZW1pbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3RUaGVtaW5nQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZW1lPih0aGlzLmdldEluaXRpYWxUaGVtZSgpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGhlbWUkID0gdGhpcy50aGVtZSQkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50aGVtZSQuc3Vic2NyaWJlKCh0aGVtZSkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShUSEVNRV9BVFRSSUJVVEVfTkFNRSwgdGhlbWUpO1xuICAgICAgc2F2ZVRoZW1lKHRoaXMuY29uZmlnLnN0b3JhZ2UsIHRoZW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RUaGVtZSh0aGVtZTogVGhlbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRoZW1lJCQubmV4dCh0aGVtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRUaGVtZSgpOiBUaGVtZSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbWUkJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuZ2V0U2VsZWN0ZWRUaGVtZSgpO1xuICAgIGlmIChjdXJyZW50VGhlbWUgPT09IFRoZW1lLkRBUkspIHtcbiAgICAgIHRoaXMuZW5hYmxlTGlnaHRNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlRGFya01vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RUaGVtZShUaGVtZS5EQVJLKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVMaWdodE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RUaGVtZShUaGVtZS5MSUdIVCk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxUaGVtZSgpOiBUaGVtZSB7XG4gICAgbGV0IHNlbGVjdGVkVGhlbWUgPSByZWFkVGhlbWUodGhpcy5jb25maWcuc3RvcmFnZSk7XG5cbiAgICBpZiAoIXNlbGVjdGVkVGhlbWUgJiYgdGhpcy5jb25maWcuYXV0b0RldGVjdCAmJiBwcmVmZXJzRGFya1RoZW1lKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdykpIHtcbiAgICAgIHNlbGVjdGVkVGhlbWUgPSBUaGVtZS5EQVJLO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFRoZW1lID8/IHRoaXMuY29uZmlnLmRlZmF1bHRUaGVtZTtcbiAgfVxufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3RoZW1pbmcvc3JjL2xpYi90aGVtaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFdkQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0FBRS9DOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sY0FBYztJQVl6QjtRQVhpQixXQUFNLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFRLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRTlFOzs7V0FHRztRQUNhLFdBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUdqSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxLQUFZO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdGLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBRUQsT0FBTyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbkQsQ0FBQzsrR0F2RVUsY0FBYzttSEFBZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHByZWZlcnNEYXJrVGhlbWUsIHJlYWRUaGVtZSwgc2F2ZVRoZW1lIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0VGhlbWluZ0NvbmZpZyB9IGZyb20gJy4vdGhlbWluZy5jb25maWcnO1xuXG5leHBvcnQgY29uc3QgVEhFTUVfQVRUUklCVVRFX05BTUUgPSAnb2R4VGhlbWUnO1xuXG4vKipcbiAqIE1hbmFnZXMgdGhlbWluZyBmb3IgdGhlIGFwcGxpY2F0aW9uLiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgdGhlbWUgc2VsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IHNhdmVzIHRoZW1lIHByZWZlcmVuY2VzLFxuICogYW5kIGFwcGxpZXMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGhlbWUgb3IgdGhlIGRlZmF1bHQgdGhlbWUgYmFzZWQgb24gY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbiAqXG4gKiBUaGUgc2VydmljZSBsZXZlcmFnZXMgdGhlIEJlaGF2aW9yU3ViamVjdCBwYXR0ZXJuIHRvIHJlYWN0aXZlbHkgaGFuZGxlIHRoZW1lIGNoYW5nZXMgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbixcbiAqIGVuc3VyaW5nIHRoYXQgc3Vic2NyaWJlcnMgYXJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoZSB0aGVtZSBjaGFuZ2VzLiBJdCBhbHNvIGludGVyYWN0cyB3aXRoIHRoZSBET00gZGlyZWN0bHlcbiAqIHRvIGFwcGx5IHRoZSBjdXJyZW50IHRoZW1lIGFuZCB3aXRoIHRoZSBwcm92aWRlZCBzdG9yYWdlIG1lY2hhbmlzbSB0byBwZXJzaXN0IHRoZW1lIHByZWZlcmVuY2VzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRoZW1pbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3RUaGVtaW5nQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZW1lPih0aGlzLmdldEluaXRpYWxUaGVtZSgpKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgdGhlbWUsIGVtaXR0aW5nIHZhbHVlcyB3aGVuZXZlciB0aGUgdGhlbWUgY2hhbmdlcy5cbiAgICogU3Vic2NyaWJlcnMgdG8gdGhpcyBvYnNlcnZhYmxlIGNhbiByZWFjdCB0byB0aGVtZSBjaGFuZ2VzIGluIHJlYWwtdGltZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0aGVtZSQgPSB0aGlzLnRoZW1lJCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRoZW1lJC5zdWJzY3JpYmUoKHRoZW1lKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKFRIRU1FX0FUVFJJQlVURV9OQU1FLCB0aGVtZSk7XG4gICAgICBzYXZlVGhlbWUodGhpcy5jb25maWcuc3RvcmFnZSwgdGhlbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYW5kIGFwcGxpZXMgYSBnaXZlbiB0aGVtZSBieSB1cGRhdGluZyB0aGUgQmVoYXZpb3JTdWJqZWN0IGFuZCBwZXJzaXN0aW5nIHRoZSBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSB0byBhcHBseS5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RUaGVtZSh0aGVtZTogVGhlbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRoZW1lJCQubmV4dCh0aGVtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUaGVtZX0gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFRoZW1lKCk6IFRoZW1lIHtcbiAgICByZXR1cm4gdGhpcy50aGVtZSQkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBiZXR3ZWVuIGRhcmsgYW5kIGxpZ2h0IHRoZW1lcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHRoZW1lLlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuZ2V0U2VsZWN0ZWRUaGVtZSgpO1xuICAgIGlmIChjdXJyZW50VGhlbWUgPT09IFRoZW1lLkRBUkspIHtcbiAgICAgIHRoaXMuZW5hYmxlTGlnaHRNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlRGFya01vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgZGFyayBtb2RlIHRoZW1lLlxuICAgKi9cbiAgcHVibGljIGVuYWJsZURhcmtNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0VGhlbWUoVGhlbWUuREFSSyk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgbGlnaHQgbW9kZSB0aGVtZS5cbiAgICovXG4gIHB1YmxpYyBlbmFibGVMaWdodE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RUaGVtZShUaGVtZS5MSUdIVCk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxUaGVtZSgpOiBUaGVtZSB7XG4gICAgbGV0IHNlbGVjdGVkVGhlbWUgPSByZWFkVGhlbWUodGhpcy5jb25maWcuc3RvcmFnZSk7XG5cbiAgICBpZiAoIXNlbGVjdGVkVGhlbWUgJiYgdGhpcy5jb25maWcuYXV0b0RldGVjdCAmJiBwcmVmZXJzRGFya1RoZW1lKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdykpIHtcbiAgICAgIHNlbGVjdGVkVGhlbWUgPSBUaGVtZS5EQVJLO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFRoZW1lID8/IHRoaXMuY29uZmlnLmRlZmF1bHRUaGVtZTtcbiAgfVxufVxuIl19
@@ -1,3 +1,54 @@
1
+ /**
2
+ * A decorator that transforms a class method or getter into a pure function. For methods, it caches the result
3
+ * of the first invocation with a given set of arguments and returns the cached result on subsequent invocations
4
+ * with the same arguments. For getters, it caches the result of the first access and returns the cached value
5
+ * on subsequent accesses.
6
+ *
7
+ * This decorator is intended to improve performance by avoiding unnecessary recalculations or processing
8
+ * when the inputs have not changed.
9
+ *
10
+ * @template T The type of the property being decorated.
11
+ * @param {object} _target The prototype of the class.
12
+ * @param {string} propertyKey The name of the method or getter.
13
+ * @param {TypedPropertyDescriptor<T>} descriptor The property descriptor for the method or getter.
14
+ * @throws {Error} Throws an error if applied to non-function properties.
15
+ * @returns {TypedPropertyDescriptor<T>} A new descriptor with the getter or method patched for pure behavior.
16
+ *
17
+ * @example
18
+ * Usage with a getter:
19
+ * ```ts
20
+ * class ExampleClass {
21
+ * private _value: number = Math.random();
22
+ *
23
+ * @Pure
24
+ * get value(): number {
25
+ * console.log('Getter called');
26
+ * return this._value;
27
+ * }
28
+ * }
29
+ *
30
+ * const example = new ExampleClass();
31
+ * console.log(example.value); // Logs 'Getter called' and the value
32
+ * console.log(example.value); // Logs only the value, without calling the getter again
33
+ * ```
34
+ *
35
+ * Usage with a method:
36
+ * ```ts
37
+ * class Counter {
38
+ * private count = 0;
39
+ *
40
+ * @Pure
41
+ * increment(step: number) {
42
+ * console.log('Increment called');
43
+ * return (this.count += step);
44
+ * }
45
+ * }
46
+ *
47
+ * const counter = new Counter();
48
+ * console.log(counter.increment(1)); // Logs 'Increment called' and 1
49
+ * console.log(counter.increment(1)); // Logs 1 without calling increment again
50
+ * ```
51
+ */
1
52
  export function Pure(_target, propertyKey, { get, enumerable, value }) {
2
53
  if (get) {
3
54
  return {
@@ -34,4 +85,4 @@ export function Pure(_target, propertyKey, { get, enumerable, value }) {
34
85
  },
35
86
  };
36
87
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2RlY29yYXRvcnMvcHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsSUFBSSxDQUFJLE9BQWUsRUFBRSxXQUFtQixFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQThCO0lBQ2xILElBQUksR0FBRyxFQUFFO1FBQ1AsT0FBTztZQUNMLFVBQVU7WUFDVixHQUFHO2dCQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDO0tBQ0g7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDakY7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFNUIsT0FBTztRQUNMLFVBQVU7UUFDVixHQUFHO1lBQ0QsSUFBSSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxTQUFrQixDQUFDO1lBRXZCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQVcsRUFBRTtnQkFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUUzSCxJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLFNBQVMsQ0FBQztpQkFDbEI7Z0JBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUVqQixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU3RCxPQUFPLE9BQXVCLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIFB1cmU8VD4oX3RhcmdldDogb2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCB7IGdldCwgZW51bWVyYWJsZSwgdmFsdWUgfTogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4pOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiB7XG4gIGlmIChnZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW51bWVyYWJsZSxcbiAgICAgIGdldCgpOiBUIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQuY2FsbCh0aGlzKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHsgZW51bWVyYWJsZSwgdmFsdWUgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQFB1cmUgZGVjb3JhdG9yIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gZnVuY3Rpb25zIG9yIGdldHRlcnMhJyk7XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG5cbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlLFxuICAgIGdldCgpOiBUIHtcbiAgICAgIGxldCBwcmV2aW91c0FyZ3M6IHJlYWRvbmx5IHVua25vd25bXSA9IFtdO1xuICAgICAgbGV0IHdhc0NhbGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IHB1cmVWYWx1ZTogdW5rbm93bjtcblxuICAgICAgY29uc3QgcGF0Y2hlZCA9ICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duID0+IHtcbiAgICAgICAgY29uc3QgaXNQdXJlID0gd2FzQ2FsbGVkICYmIHByZXZpb3VzQXJncy5sZW5ndGggPT09IGFyZ3MubGVuZ3RoICYmIGFyZ3MuZXZlcnkoKGFyZywgaW5kZXgpID0+IGFyZyA9PT0gcHJldmlvdXNBcmdzW2luZGV4XSk7XG5cbiAgICAgICAgaWYgKGlzUHVyZSkge1xuICAgICAgICAgIHJldHVybiBwdXJlVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c0FyZ3MgPSBhcmdzO1xuICAgICAgICBwdXJlVmFsdWUgPSBvcmlnaW5hbFZhbHVlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB3YXNDYWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBwdXJlVmFsdWU7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHsgdmFsdWU6IHBhdGNoZWQgfSk7XG5cbiAgICAgIHJldHVybiBwYXRjaGVkIGFzIHVua25vd24gYXMgVDtcbiAgICB9LFxuICB9O1xufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2RlY29yYXRvcnMvcHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFJLE9BQWUsRUFBRSxXQUFtQixFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQThCO0lBQ2xILElBQUksR0FBRyxFQUFFO1FBQ1AsT0FBTztZQUNMLFVBQVU7WUFDVixHQUFHO2dCQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUVoRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDO0tBQ0g7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDakY7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFNUIsT0FBTztRQUNMLFVBQVU7UUFDVixHQUFHO1lBQ0QsSUFBSSxZQUFZLEdBQXVCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxTQUFrQixDQUFDO1lBRXZCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQVcsRUFBRTtnQkFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUUzSCxJQUFJLE1BQU0sRUFBRTtvQkFDVixPQUFPLFNBQVMsQ0FBQztpQkFDbEI7Z0JBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUVqQixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUU3RCxPQUFPLE9BQXVCLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIGRlY29yYXRvciB0aGF0IHRyYW5zZm9ybXMgYSBjbGFzcyBtZXRob2Qgb3IgZ2V0dGVyIGludG8gYSBwdXJlIGZ1bmN0aW9uLiBGb3IgbWV0aG9kcywgaXQgY2FjaGVzIHRoZSByZXN1bHRcbiAqIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uIHdpdGggYSBnaXZlbiBzZXQgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBjYWNoZWQgcmVzdWx0IG9uIHN1YnNlcXVlbnQgaW52b2NhdGlvbnNcbiAqIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLiBGb3IgZ2V0dGVycywgaXQgY2FjaGVzIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IGFjY2VzcyBhbmQgcmV0dXJucyB0aGUgY2FjaGVkIHZhbHVlXG4gKiBvbiBzdWJzZXF1ZW50IGFjY2Vzc2VzLlxuICpcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVjYWxjdWxhdGlvbnMgb3IgcHJvY2Vzc2luZ1xuICogd2hlbiB0aGUgaW5wdXRzIGhhdmUgbm90IGNoYW5nZWQuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGRlY29yYXRlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IFRoZSBwcm90b3R5cGUgb2YgdGhlIGNsYXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5S2V5IFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb3IgZ2V0dGVyLlxuICogQHBhcmFtIHtUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPn0gZGVzY3JpcHRvciBUaGUgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIG1ldGhvZCBvciBnZXR0ZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIGFwcGxpZWQgdG8gbm9uLWZ1bmN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7VHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD59IEEgbmV3IGRlc2NyaXB0b3Igd2l0aCB0aGUgZ2V0dGVyIG9yIG1ldGhvZCBwYXRjaGVkIGZvciBwdXJlIGJlaGF2aW9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBVc2FnZSB3aXRoIGEgZ2V0dGVyOlxuICogYGBgdHNcbiAqIGNsYXNzIEV4YW1wbGVDbGFzcyB7XG4gKiAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgPSBNYXRoLnJhbmRvbSgpO1xuICpcbiAqICAgQFB1cmVcbiAqICAgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gKiAgICAgY29uc29sZS5sb2coJ0dldHRlciBjYWxsZWQnKTtcbiAqICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBleGFtcGxlID0gbmV3IEV4YW1wbGVDbGFzcygpO1xuICogY29uc29sZS5sb2coZXhhbXBsZS52YWx1ZSk7IC8vIExvZ3MgJ0dldHRlciBjYWxsZWQnIGFuZCB0aGUgdmFsdWVcbiAqIGNvbnNvbGUubG9nKGV4YW1wbGUudmFsdWUpOyAvLyBMb2dzIG9ubHkgdGhlIHZhbHVlLCB3aXRob3V0IGNhbGxpbmcgdGhlIGdldHRlciBhZ2FpblxuICogYGBgXG4gKlxuICogVXNhZ2Ugd2l0aCBhIG1ldGhvZDpcbiAqIGBgYHRzXG4gKiBjbGFzcyBDb3VudGVyIHtcbiAqICAgcHJpdmF0ZSBjb3VudCA9IDA7XG4gKlxuICogICBAUHVyZVxuICogICBpbmNyZW1lbnQoc3RlcDogbnVtYmVyKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0luY3JlbWVudCBjYWxsZWQnKTtcbiAqICAgICByZXR1cm4gKHRoaXMuY291bnQgKz0gc3RlcCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBjb3VudGVyID0gbmV3IENvdW50ZXIoKTtcbiAqIGNvbnNvbGUubG9nKGNvdW50ZXIuaW5jcmVtZW50KDEpKTsgLy8gTG9ncyAnSW5jcmVtZW50IGNhbGxlZCcgYW5kIDFcbiAqIGNvbnNvbGUubG9nKGNvdW50ZXIuaW5jcmVtZW50KDEpKTsgLy8gTG9ncyAxIHdpdGhvdXQgY2FsbGluZyBpbmNyZW1lbnQgYWdhaW5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZTxUPihfdGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHsgZ2V0LCBlbnVtZXJhYmxlLCB2YWx1ZSB9OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+IHtcbiAgaWYgKGdldCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnVtZXJhYmxlLFxuICAgICAgZ2V0KCk6IFQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldC5jYWxsKHRoaXMpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwgeyBlbnVtZXJhYmxlLCB2YWx1ZSB9KTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAUHVyZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBmdW5jdGlvbnMgb3IgZ2V0dGVycyEnKTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGUsXG4gICAgZ2V0KCk6IFQge1xuICAgICAgbGV0IHByZXZpb3VzQXJnczogcmVhZG9ubHkgdW5rbm93bltdID0gW107XG4gICAgICBsZXQgd2FzQ2FsbGVkID0gZmFsc2U7XG4gICAgICBsZXQgcHVyZVZhbHVlOiB1bmtub3duO1xuXG4gICAgICBjb25zdCBwYXRjaGVkID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24gPT4ge1xuICAgICAgICBjb25zdCBpc1B1cmUgPSB3YXNDYWxsZWQgJiYgcHJldmlvdXNBcmdzLmxlbmd0aCA9PT0gYXJncy5sZW5ndGggJiYgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gYXJnID09PSBwcmV2aW91c0FyZ3NbaW5kZXhdKTtcblxuICAgICAgICBpZiAoaXNQdXJlKSB7XG4gICAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzQXJncyA9IGFyZ3M7XG4gICAgICAgIHB1cmVWYWx1ZSA9IG9yaWdpbmFsVmFsdWUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHdhc0NhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwgeyB2YWx1ZTogcGF0Y2hlZCB9KTtcblxuICAgICAgcmV0dXJuIHBhdGNoZWQgYXMgdW5rbm93biBhcyBUO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -6,12 +6,28 @@ function reactiveBinding(updateFn) {
6
6
  const takeUntilDestroyed = untilDestroyed();
7
7
  return (source$) => source$.pipe(tap((state) => updateFn(state)), takeUntilDestroyed());
8
8
  }
9
+ /**
10
+ * Binds an observable to toggle a CSS class on the host element based on the truthiness of the emitted values.
11
+ * The subscription automatically ends when the component is destroyed.
12
+ *
13
+ * @template T The type of items emitted by the source observable.
14
+ * @param {Observable<T> | null | undefined} source$ The observable source emitting truthy or falsy values.
15
+ * @param {string} cssClass The CSS class to toggle based on the emitted values.
16
+ */
9
17
  export function reactiveClassBinding(source$, cssClass) {
10
18
  const { nativeElement } = injectElement();
11
19
  if (source$) {
12
20
  source$.pipe(reactiveBinding((state) => nativeElement.classList.toggle(cssClass, !!state))).subscribe();
13
21
  }
14
22
  }
23
+ /**
24
+ * Binds an observable to update attributes on the host element with the emitted values.
25
+ * The subscription automatically ends when the component is destroyed.
26
+ *
27
+ * @template T The type of items emitted by the source observable.
28
+ * @param {Observable<T> | null | undefined} source$ The observable source.
29
+ * @param {...string[]} attributes The attributes to set on the host element based on the emitted values.
30
+ */
15
31
  export function reactiveAttributeBinding(source$, ...attributes) {
16
32
  const { nativeElement } = injectElement();
17
33
  if (source$) {
@@ -24,13 +40,33 @@ export function reactiveAttributeBinding(source$, ...attributes) {
24
40
  .subscribe();
25
41
  }
26
42
  }
43
+ /**
44
+ * Injects the ElementRef of the host element in an Angular component or directive.
45
+ *
46
+ * @template T The expected type of the native element.
47
+ * @returns {ElementRef<T>} The injected ElementRef instance.
48
+ */
27
49
  export function injectElement() {
28
50
  return inject(ElementRef);
29
51
  }
52
+ /**
53
+ * Tracking function for use with `*ngFor` that tracks items by their index.
54
+ *
55
+ * @param {number} index The index of the item in the iterable.
56
+ * @returns {number} The index, used as the trackBy identity.
57
+ */
30
58
  export function trackByIndex(index) {
31
59
  return index;
32
60
  }
61
+ /**
62
+ * Tracking function for use with `*ngFor` that tracks items by their unique ID.
63
+ *
64
+ * @template T The type of the items in the iterable, must have an 'id' property.
65
+ * @param {number} _ The index of the item in the iterable, not used.
66
+ * @param {T} item The item in the iterable.
67
+ * @returns {T['id']} The item's ID, used as the trackBy identity.
68
+ */
33
69
  export function trackById(_, { id }) {
34
70
  return id;
35
71
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2hlbHBlcnMvYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXdDLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxTQUFTLGVBQWUsQ0FBSSxRQUFrQztJQUM1RCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRTVDLE9BQU8sQ0FBQyxPQUFzQixFQUFFLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvQixrQkFBa0IsRUFBRSxDQUNyQixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxPQUF5QyxFQUFFLFFBQWdCO0lBQ2pHLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUUxQyxJQUFJLE9BQU8sRUFBRTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUN6RztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUksT0FBeUMsRUFBRSxHQUFHLFVBQW9CO0lBQzVHLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUUxQyxJQUFJLE9BQU8sRUFBRTtRQUNYLE9BQU87YUFDSixJQUFJLENBQ0gsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2xDLFlBQVksQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQy9DO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztLQUNoQjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLE1BQU0sQ0FBZ0IsVUFBVSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN4QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUE2QyxDQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUs7SUFDeEYsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2V0QXR0cmlidXRlIH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICcuL3VudGlsLWRlc3Ryb3llZCc7XG5cbmZ1bmN0aW9uIHJlYWN0aXZlQmluZGluZzxUPih1cGRhdGVGbjogKHN0YXRlOiB1bmtub3duKSA9PiB2b2lkKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgY29uc3QgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICByZXR1cm4gKHNvdXJjZSQ6IE9ic2VydmFibGU8VD4pID0+XG4gICAgc291cmNlJC5waXBlKFxuICAgICAgdGFwKChzdGF0ZSkgPT4gdXBkYXRlRm4oc3RhdGUpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFjdGl2ZUNsYXNzQmluZGluZzxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCwgY3NzQ2xhc3M6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IGluamVjdEVsZW1lbnQoKTtcblxuICBpZiAoc291cmNlJCkge1xuICAgIHNvdXJjZSQucGlwZShyZWFjdGl2ZUJpbmRpbmcoKHN0YXRlKSA9PiBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY3NzQ2xhc3MsICEhc3RhdGUpKSkuc3Vic2NyaWJlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZzxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uYXR0cmlidXRlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgaWYgKHNvdXJjZSQpIHtcbiAgICBzb3VyY2UkXG4gICAgICAucGlwZShcbiAgICAgICAgcmVhY3RpdmVCaW5kaW5nKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZShuYXRpdmVFbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RFbGVtZW50PFQgPSBIVE1MRWxlbWVudD4oKTogRWxlbWVudFJlZjxUPiB7XG4gIHJldHVybiBpbmplY3Q8RWxlbWVudFJlZjxUPj4oRWxlbWVudFJlZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFja0J5SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBpbmRleDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQnlJZDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIH0+KF86IG51bWJlciwgeyBpZCB9OiBUKTogVFsnaWQnXSB7XG4gIHJldHVybiBpZDtcbn1cbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci91dGlscy9zcmMvbGliL2hlbHBlcnMvYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXdDLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxTQUFTLGVBQWUsQ0FBSSxRQUFrQztJQUM1RCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRTVDLE9BQU8sQ0FBQyxPQUFzQixFQUFFLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvQixrQkFBa0IsRUFBRSxDQUNyQixDQUFDO0FBQ04sQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUksT0FBeUMsRUFBRSxRQUFnQjtJQUNqRyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFMUMsSUFBSSxPQUFPLEVBQUU7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDekc7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBSSxPQUF5QyxFQUFFLEdBQUcsVUFBb0I7SUFDNUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBRTFDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTzthQUNKLElBQUksQ0FDSCxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtnQkFDbEMsWUFBWSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxNQUFNLENBQWdCLFVBQVUsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN4QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBNkMsQ0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFLO0lBQ3hGLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNldEF0dHJpYnV0ZSB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnLi91bnRpbC1kZXN0cm95ZWQnO1xuXG5mdW5jdGlvbiByZWFjdGl2ZUJpbmRpbmc8VD4odXBkYXRlRm46IChzdGF0ZTogdW5rbm93bikgPT4gdm9pZCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gIGNvbnN0IHRha2VVbnRpbERlc3Ryb3llZCA9IHVudGlsRGVzdHJveWVkKCk7XG5cbiAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KSA9PlxuICAgIHNvdXJjZSQucGlwZShcbiAgICAgIHRhcCgoc3RhdGUpID0+IHVwZGF0ZUZuKHN0YXRlKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApO1xufVxuXG4vKipcbiAqIEJpbmRzIGFuIG9ic2VydmFibGUgdG8gdG9nZ2xlIGEgQ1NTIGNsYXNzIG9uIHRoZSBob3N0IGVsZW1lbnQgYmFzZWQgb24gdGhlIHRydXRoaW5lc3Mgb2YgdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICogVGhlIHN1YnNjcmlwdGlvbiBhdXRvbWF0aWNhbGx5IGVuZHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IHNvdXJjZSQgVGhlIG9ic2VydmFibGUgc291cmNlIGVtaXR0aW5nIHRydXRoeSBvciBmYWxzeSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MgVGhlIENTUyBjbGFzcyB0byB0b2dnbGUgYmFzZWQgb24gdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhY3RpdmVDbGFzc0JpbmRpbmc8VD4oc291cmNlJDogT2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWQsIGNzc0NsYXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgaWYgKHNvdXJjZSQpIHtcbiAgICBzb3VyY2UkLnBpcGUocmVhY3RpdmVCaW5kaW5nKChzdGF0ZSkgPT4gbmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNzc0NsYXNzLCAhIXN0YXRlKSkpLnN1YnNjcmliZSgpO1xuICB9XG59XG5cbi8qKlxuICogQmluZHMgYW4gb2JzZXJ2YWJsZSB0byB1cGRhdGUgYXR0cmlidXRlcyBvbiB0aGUgaG9zdCBlbGVtZW50IHdpdGggdGhlIGVtaXR0ZWQgdmFsdWVzLlxuICogVGhlIHN1YnNjcmlwdGlvbiBhdXRvbWF0aWNhbGx5IGVuZHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBlbWl0dGVkIGJ5IHRoZSBzb3VyY2Ugb2JzZXJ2YWJsZS5cbiAqIEBwYXJhbSB7T2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IHNvdXJjZSQgVGhlIG9ic2VydmFibGUgc291cmNlLlxuICogQHBhcmFtIHsuLi5zdHJpbmdbXX0gYXR0cmlidXRlcyBUaGUgYXR0cmlidXRlcyB0byBzZXQgb24gdGhlIGhvc3QgZWxlbWVudCBiYXNlZCBvbiB0aGUgZW1pdHRlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmc8VD4oc291cmNlJDogT2JzZXJ2YWJsZTxUPiB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIGlmIChzb3VyY2UkKSB7XG4gICAgc291cmNlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHJlYWN0aXZlQmluZGluZygodmFsdWUpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGUobmF0aXZlRWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdHMgdGhlIEVsZW1lbnRSZWYgb2YgdGhlIGhvc3QgZWxlbWVudCBpbiBhbiBBbmd1bGFyIGNvbXBvbmVudCBvciBkaXJlY3RpdmUuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIG5hdGl2ZSBlbGVtZW50LlxuICogQHJldHVybnMge0VsZW1lbnRSZWY8VD59IFRoZSBpbmplY3RlZCBFbGVtZW50UmVmIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0RWxlbWVudDxUID0gSFRNTEVsZW1lbnQ+KCk6IEVsZW1lbnRSZWY8VD4ge1xuICByZXR1cm4gaW5qZWN0PEVsZW1lbnRSZWY8VD4+KEVsZW1lbnRSZWYpO1xufVxuXG4vKipcbiAqIFRyYWNraW5nIGZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBgKm5nRm9yYCB0aGF0IHRyYWNrcyBpdGVtcyBieSB0aGVpciBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIGluIHRoZSBpdGVyYWJsZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBpbmRleCwgdXNlZCBhcyB0aGUgdHJhY2tCeSBpZGVudGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFRyYWNraW5nIGZ1bmN0aW9uIGZvciB1c2Ugd2l0aCBgKm5nRm9yYCB0aGF0IHRyYWNrcyBpdGVtcyBieSB0aGVpciB1bmlxdWUgSUQuXG4gKlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBpdGVyYWJsZSwgbXVzdCBoYXZlIGFuICdpZCcgcHJvcGVydHkuXG4gKiBAcGFyYW0ge251bWJlcn0gXyBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlLCBub3QgdXNlZC5cbiAqIEBwYXJhbSB7VH0gaXRlbSBUaGUgaXRlbSBpbiB0aGUgaXRlcmFibGUuXG4gKiBAcmV0dXJucyB7VFsnaWQnXX0gVGhlIGl0ZW0ncyBJRCwgdXNlZCBhcyB0aGUgdHJhY2tCeSBpZGVudGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrQnlJZDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIH0+KF86IG51bWJlciwgeyBpZCB9OiBUKTogVFsnaWQnXSB7XG4gIHJldHVybiBpZDtcbn1cbiJdfQ==
@@ -8,8 +8,10 @@ import { isNumber, isString } from './type-guards';
8
8
  * @param {K} key - The key whose values are to be plucked from each object in the array.
9
9
  * @returns {Array<T[K]>} An array of values corresponding to the specified key from each object.
10
10
  * @example
11
+ * ```ts
11
12
  * const users = [{ name: 'Alice' }, { name: 'Bob' }];
12
13
  * const names = pluckFromArray(users, 'name'); // ['Alice', 'Bob']
14
+ * ```
13
15
  */
14
16
  export function pluckFromArray(arr, key) {
15
17
  return arr.map((value) => value[key]);
@@ -22,8 +24,10 @@ export function pluckFromArray(arr, key) {
22
24
  * @param {OrderByDirection} [direction='ASC'] - The direction to sort ('ASC' for ascending, 'DESC' for descending).
23
25
  * @returns {(a: T, b: T) => number} A compare function that can be used in the array sort method.
24
26
  * @example
27
+ * ```ts
25
28
  * const items = [{ value: 10 }, { value: 5 }, { value: 7 }];
26
29
  * const sortedItems = items.sort(orderBy('value', 'ASC')); // Sorted by value in ascending order
30
+ * ```
27
31
  */
28
32
  export function orderBy(key, direction = 'ASC') {
29
33
  return (a, b) => {
@@ -44,4 +48,4 @@ export function orderBy(key, direction = 'ASC') {
44
48
  return 0;
45
49
  };
46
50
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5EOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBdUIsR0FBUSxFQUFFLEdBQU07SUFDbkUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBSUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksR0FBWSxFQUFFLFlBQThCLEtBQUs7SUFDMUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNkLE1BQU0sU0FBUyxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9DLE9BQU8sU0FBUyxHQUFHLFVBQVUsQ0FBQztTQUMvQjtRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQyxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuL3R5cGUtZ3VhcmRzJztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdmFsdWVzIG9mIGEgc3BlY2lmaWVkIGtleSBmcm9tIGVhY2ggb2JqZWN0IGluIGFuIGFycmF5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LlxuICogQHRlbXBsYXRlIEsgLSBUaGUgdHlwZSBvZiB0aGUga2V5cyBvZiBgVGAuXG4gKiBAcGFyYW0ge1RbXX0gYXJyIC0gVGhlIGFycmF5IG9mIG9iamVjdHMgdG8gcGx1Y2sgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0t9IGtleSAtIFRoZSBrZXkgd2hvc2UgdmFsdWVzIGFyZSB0byBiZSBwbHVja2VkIGZyb20gZWFjaCBvYmplY3QgaW4gdGhlIGFycmF5LlxuICogQHJldHVybnMge0FycmF5PFRbS10+fSBBbiBhcnJheSBvZiB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIGVhY2ggb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHVzZXJzID0gW3sgbmFtZTogJ0FsaWNlJyB9LCB7IG5hbWU6ICdCb2InIH1dO1xuICogY29uc3QgbmFtZXMgPSBwbHVja0Zyb21BcnJheSh1c2VycywgJ25hbWUnKTsgLy8gWydBbGljZScsICdCb2InXVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGx1Y2tGcm9tQXJyYXk8VCwgSyBleHRlbmRzIGtleW9mIFQ+KGFycjogVFtdLCBrZXk6IEspOiBBcnJheTxUW0tdPiB7XG4gIHJldHVybiBhcnIubWFwKCh2YWx1ZSkgPT4gdmFsdWVba2V5XSk7XG59XG5cbmV4cG9ydCB0eXBlIE9yZGVyQnlEaXJlY3Rpb24gPSAnQVNDJyB8ICdERVNDJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGFyZSBmdW5jdGlvbiBmb3Igc29ydGluZyBhbiBhcnJheSBvZiBvYmplY3RzIGJhc2VkIG9uIGEgc3BlY2lmaWVkIGtleSBhbmQgZGlyZWN0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5LlxuICogQHBhcmFtIHtrZXlvZiBUfSBrZXkgLSBUaGUga2V5IHRvIHNvcnQgYnkuXG4gKiBAcGFyYW0ge09yZGVyQnlEaXJlY3Rpb259IFtkaXJlY3Rpb249J0FTQyddIC0gVGhlIGRpcmVjdGlvbiB0byBzb3J0ICgnQVNDJyBmb3IgYXNjZW5kaW5nLCAnREVTQycgZm9yIGRlc2NlbmRpbmcpLlxuICogQHJldHVybnMgeyhhOiBULCBiOiBUKSA9PiBudW1iZXJ9IEEgY29tcGFyZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBhcnJheSBzb3J0IG1ldGhvZC5cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpdGVtcyA9IFt7IHZhbHVlOiAxMCB9LCB7IHZhbHVlOiA1IH0sIHsgdmFsdWU6IDcgfV07XG4gKiBjb25zdCBzb3J0ZWRJdGVtcyA9IGl0ZW1zLnNvcnQob3JkZXJCeSgndmFsdWUnLCAnQVNDJykpOyAvLyBTb3J0ZWQgYnkgdmFsdWUgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckJ5PFQ+KGtleToga2V5b2YgVCwgZGlyZWN0aW9uOiBPcmRlckJ5RGlyZWN0aW9uID0gJ0FTQycpOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgY29uc3QgbGVmdFZhbHVlID0gZGlyZWN0aW9uID09PSAnQVNDJyA/IGFba2V5XSA6IGJba2V5XTtcbiAgICBjb25zdCByaWdodFZhbHVlID0gZGlyZWN0aW9uID09PSAnQVNDJyA/IGJba2V5XSA6IGFba2V5XTtcbiAgICBpZiAobGVmdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKHJpZ2h0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIobGVmdFZhbHVlKSAmJiBpc051bWJlcihyaWdodFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGxlZnRWYWx1ZSAtIHJpZ2h0VmFsdWU7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhsZWZ0VmFsdWUpICYmIGlzU3RyaW5nKHJpZ2h0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gbGVmdFZhbHVlLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShyaWdodFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfTtcbn1cbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUF1QixHQUFRLEVBQUUsR0FBTTtJQUNuRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFJRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFJLEdBQVksRUFBRSxZQUE4QixLQUFLO0lBQzFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDZCxNQUFNLFNBQVMsR0FBRyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQyxPQUFPLFNBQVMsR0FBRyxVQUFVLENBQUM7U0FDL0I7UUFDRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi90eXBlLWd1YXJkcyc7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhbHVlcyBvZiBhIHNwZWNpZmllZCBrZXkgZnJvbSBlYWNoIG9iamVjdCBpbiBhbiBhcnJheS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGluIHRoZSBhcnJheS5cbiAqIEB0ZW1wbGF0ZSBLIC0gVGhlIHR5cGUgb2YgdGhlIGtleXMgb2YgYFRgLlxuICogQHBhcmFtIHtUW119IGFyciAtIFRoZSBhcnJheSBvZiBvYmplY3RzIHRvIHBsdWNrIHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtLfSBrZXkgLSBUaGUga2V5IHdob3NlIHZhbHVlcyBhcmUgdG8gYmUgcGx1Y2tlZCBmcm9tIGVhY2ggb2JqZWN0IGluIHRoZSBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxUW0tdPn0gQW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBrZXkgZnJvbSBlYWNoIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgdXNlcnMgPSBbeyBuYW1lOiAnQWxpY2UnIH0sIHsgbmFtZTogJ0JvYicgfV07XG4gKiBjb25zdCBuYW1lcyA9IHBsdWNrRnJvbUFycmF5KHVzZXJzLCAnbmFtZScpOyAvLyBbJ0FsaWNlJywgJ0JvYiddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWNrRnJvbUFycmF5PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPihhcnI6IFRbXSwga2V5OiBLKTogQXJyYXk8VFtLXT4ge1xuICByZXR1cm4gYXJyLm1hcCgodmFsdWUpID0+IHZhbHVlW2tleV0pO1xufVxuXG5leHBvcnQgdHlwZSBPcmRlckJ5RGlyZWN0aW9uID0gJ0FTQycgfCAnREVTQyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBiYXNlZCBvbiBhIHNwZWNpZmllZCBrZXkgYW5kIGRpcmVjdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGluIHRoZSBhcnJheS5cbiAqIEBwYXJhbSB7a2V5b2YgVH0ga2V5IC0gVGhlIGtleSB0byBzb3J0IGJ5LlxuICogQHBhcmFtIHtPcmRlckJ5RGlyZWN0aW9ufSBbZGlyZWN0aW9uPSdBU0MnXSAtIFRoZSBkaXJlY3Rpb24gdG8gc29ydCAoJ0FTQycgZm9yIGFzY2VuZGluZywgJ0RFU0MnIGZvciBkZXNjZW5kaW5nKS5cbiAqIEByZXR1cm5zIHsoYTogVCwgYjogVCkgPT4gbnVtYmVyfSBBIGNvbXBhcmUgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgYXJyYXkgc29ydCBtZXRob2QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGl0ZW1zID0gW3sgdmFsdWU6IDEwIH0sIHsgdmFsdWU6IDUgfSwgeyB2YWx1ZTogNyB9XTtcbiAqIGNvbnN0IHNvcnRlZEl0ZW1zID0gaXRlbXMuc29ydChvcmRlckJ5KCd2YWx1ZScsICdBU0MnKSk7IC8vIFNvcnRlZCBieSB2YWx1ZSBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJCeTxUPihrZXk6IGtleW9mIFQsIGRpcmVjdGlvbjogT3JkZXJCeURpcmVjdGlvbiA9ICdBU0MnKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIHJldHVybiAoYSwgYikgPT4ge1xuICAgIGNvbnN0IGxlZnRWYWx1ZSA9IGRpcmVjdGlvbiA9PT0gJ0FTQycgPyBhW2tleV0gOiBiW2tleV07XG4gICAgY29uc3QgcmlnaHRWYWx1ZSA9IGRpcmVjdGlvbiA9PT0gJ0FTQycgPyBiW2tleV0gOiBhW2tleV07XG4gICAgaWYgKGxlZnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChyaWdodFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKGxlZnRWYWx1ZSkgJiYgaXNOdW1iZXIocmlnaHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBsZWZ0VmFsdWUgLSByaWdodFZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcobGVmdFZhbHVlKSAmJiBpc1N0cmluZyhyaWdodFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGxlZnRWYWx1ZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUocmlnaHRWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH07XG59XG4iXX0=
@@ -1,4 +1,24 @@
1
+ /**
2
+ * Constructs a URL string from provided segments, ensuring proper slash separation without duplications.
3
+ * It gracefully handles `null`, `undefined`, and symbol values by omitting them from the final URL.
4
+ * Additionally, the function preserves the protocol part of the URL, if specified.
5
+ *
6
+ * @param {...Array<string | number | symbol | null | undefined>} args - The segments to concatenate into a URL.
7
+ * Can be a mix of strings, numbers, symbols (converted to strings), or `null`/`undefined` (which are omitted).
8
+ * @returns {string} The constructed URL string with correctly formatted slashes.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // Basic usage
13
+ * console.log(buildUrl('http://example.com', 'path', 'to', 'resource'));
14
+ * // Outputs: "http://example.com/path/to/resource"
15
+ *
16
+ * // Removing duplicate slashes
17
+ * console.log(buildUrl('http://example.com/', '/path/', '//to', '/resource/'));
18
+ * // Outputs: "http://example.com/path/to/resource/"
19
+ * ```
20
+ */
1
21
  export function buildUrl(...args) {
2
22
  return args.join('/').replace(/(^.*)(https?:\/\/)|(\/)+/g, '$2$3');
3
23
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvaGVscGVycy9idWlsZC11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFHLElBQXdEO0lBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBidWlsZFVybCguLi5hcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wgfCBudWxsIHwgdW5kZWZpbmVkPik6IHN0cmluZyB7XG4gIHJldHVybiBhcmdzLmpvaW4oJy8nKS5yZXBsYWNlKC8oXi4qKShodHRwcz86XFwvXFwvKXwoXFwvKSsvZywgJyQyJDMnKTtcbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3V0aWxzL3NyYy9saWIvaGVscGVycy9idWlsZC11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQUcsSUFBd0Q7SUFDbEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25zdHJ1Y3RzIGEgVVJMIHN0cmluZyBmcm9tIHByb3ZpZGVkIHNlZ21lbnRzLCBlbnN1cmluZyBwcm9wZXIgc2xhc2ggc2VwYXJhdGlvbiB3aXRob3V0IGR1cGxpY2F0aW9ucy5cbiAqIEl0IGdyYWNlZnVsbHkgaGFuZGxlcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBhbmQgc3ltYm9sIHZhbHVlcyBieSBvbWl0dGluZyB0aGVtIGZyb20gdGhlIGZpbmFsIFVSTC5cbiAqIEFkZGl0aW9uYWxseSwgdGhlIGZ1bmN0aW9uIHByZXNlcnZlcyB0aGUgcHJvdG9jb2wgcGFydCBvZiB0aGUgVVJMLCBpZiBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIHsuLi5BcnJheTxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wgfCBudWxsIHwgdW5kZWZpbmVkPn0gYXJncyAtIFRoZSBzZWdtZW50cyB0byBjb25jYXRlbmF0ZSBpbnRvIGEgVVJMLlxuICogQ2FuIGJlIGEgbWl4IG9mIHN0cmluZ3MsIG51bWJlcnMsIHN5bWJvbHMgKGNvbnZlcnRlZCB0byBzdHJpbmdzKSwgb3IgYG51bGxgL2B1bmRlZmluZWRgICh3aGljaCBhcmUgb21pdHRlZCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29uc3RydWN0ZWQgVVJMIHN0cmluZyB3aXRoIGNvcnJlY3RseSBmb3JtYXR0ZWQgc2xhc2hlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEJhc2ljIHVzYWdlXG4gKiBjb25zb2xlLmxvZyhidWlsZFVybCgnaHR0cDovL2V4YW1wbGUuY29tJywgJ3BhdGgnLCAndG8nLCAncmVzb3VyY2UnKSk7XG4gKiAvLyBPdXRwdXRzOiBcImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlXCJcbiAqXG4gKiAvLyBSZW1vdmluZyBkdXBsaWNhdGUgc2xhc2hlc1xuICogY29uc29sZS5sb2coYnVpbGRVcmwoJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLCAnL3BhdGgvJywgJy8vdG8nLCAnL3Jlc291cmNlLycpKTtcbiAqIC8vIE91dHB1dHM6IFwiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVcmwoLi4uYXJnczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBzdHJpbmcge1xuICByZXR1cm4gYXJncy5qb2luKCcvJykucmVwbGFjZSgvKF4uKikoaHR0cHM/OlxcL1xcLyl8KFxcLykrL2csICckMiQzJyk7XG59XG4iXX0=
@@ -16,14 +16,15 @@ export const DRAEGER_WEBSITE_URL = 'https://www.draeger.com';
16
16
  * @returns {string} The fully constructed URL, including the base URL and all provided path segments.
17
17
  *
18
18
  * @example
19
+ * ```ts
19
20
  * // Returns 'https://www.draeger.com/about-us'
20
21
  * const url = buildWebsiteUrl('about-us');
21
22
  *
22
- * @example
23
23
  * // Can also handle multiple segments, returning 'https://www.draeger.com/products/search/123'
24
24
  * const productUrl = buildWebsiteUrl('products', 'search', 123);
25
+ * ```
25
26
  */
26
27
  export function buildWebsiteUrl(...segments) {
27
28
  return buildUrl(DRAEGER_WEBSITE_URL, ...segments);
28
29
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd2Vic2l0ZS11cmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2J1aWxkLXdlYnNpdGUtdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBRyxRQUE0RDtJQUM3RixPQUFPLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFVybCB9IGZyb20gJy4vYnVpbGQtdXJsJztcblxuLyoqXG4gKiBBIGNvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBEcmFlZ2VyIHdlYnNpdGUuXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAZGVmYXVsdCAnaHR0cHM6Ly93d3cuZHJhZWdlci5jb20nXG4gKi9cbmV4cG9ydCBjb25zdCBEUkFFR0VSX1dFQlNJVEVfVVJMID0gJ2h0dHBzOi8vd3d3LmRyYWVnZXIuY29tJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgZnVsbCBVUkwgZm9yIHRoZSBEcmFlZ2VyIHdlYnNpdGUgYnkgYXBwZW5kaW5nIHRoZSBwcm92aWRlZCBwYXRoIHNlZ21lbnRzIHRvIHRoZSBiYXNlIFVSTC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSB1dGlsaXR5IGZvciBjcmVhdGluZyBmdWxseSBxdWFsaWZpZWQgVVJMcyB0byB2YXJpb3VzIHJlc291cmNlcyBvciBwYWdlcyB3aXRoaW4gdGhlIERyYWVnZXIgd2Vic2l0ZS5cbiAqXG4gKiBAZnVuY3Rpb24gYnVpbGRXZWJzaXRlVXJsXG4gKiBAcGFyYW0gey4uLihzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wgfCBudWxsIHwgdW5kZWZpbmVkKX0gc2VnbWVudHMgLSBUaGUgcGF0aCBzZWdtZW50cyB0byBhcHBlbmQgdG8gdGhlIGJhc2UgVVJMLlxuICogVGhlc2UgY2FuIGluY2x1ZGUgc3RyaW5ncywgbnVtYmVycywgc3ltYm9scywgb3IgbnVsbC91bmRlZmluZWQgdmFsdWVzICh0aGUgbGF0dGVyIHR3byBhcmUgaWdub3JlZCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbHkgY29uc3RydWN0ZWQgVVJMLCBpbmNsdWRpbmcgdGhlIGJhc2UgVVJMIGFuZCBhbGwgcHJvdmlkZWQgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmV0dXJucyAnaHR0cHM6Ly93d3cuZHJhZWdlci5jb20vYWJvdXQtdXMnXG4gKiBjb25zdCB1cmwgPSBidWlsZFdlYnNpdGVVcmwoJ2Fib3V0LXVzJyk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENhbiBhbHNvIGhhbmRsZSBtdWx0aXBsZSBzZWdtZW50cywgcmV0dXJuaW5nICdodHRwczovL3d3dy5kcmFlZ2VyLmNvbS9wcm9kdWN0cy9zZWFyY2gvMTIzJ1xuICogY29uc3QgcHJvZHVjdFVybCA9IGJ1aWxkV2Vic2l0ZVVybCgncHJvZHVjdHMnLCAnc2VhcmNoJywgMTIzKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV2Vic2l0ZVVybCguLi5zZWdtZW50czogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRVcmwoRFJBRUdFUl9XRUJTSVRFX1VSTCwgLi4uc2VnbWVudHMpO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd2Vic2l0ZS11cmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvdXRpbHMvc3JjL2xpYi9oZWxwZXJzL2J1aWxkLXdlYnNpdGUtdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQUcsUUFBNEQ7SUFDN0YsT0FBTyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRVcmwgfSBmcm9tICcuL2J1aWxkLXVybCc7XG5cbi8qKlxuICogQSBjb25zdGFudCByZXByZXNlbnRpbmcgdGhlIGJhc2UgVVJMIGZvciB0aGUgRHJhZWdlciB3ZWJzaXRlLlxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGRlZmF1bHQgJ2h0dHBzOi8vd3d3LmRyYWVnZXIuY29tJ1xuICovXG5leHBvcnQgY29uc3QgRFJBRUdFUl9XRUJTSVRFX1VSTCA9ICdodHRwczovL3d3dy5kcmFlZ2VyLmNvbSc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIGZ1bGwgVVJMIGZvciB0aGUgRHJhZWdlciB3ZWJzaXRlIGJ5IGFwcGVuZGluZyB0aGUgcHJvdmlkZWQgcGF0aCBzZWdtZW50cyB0byB0aGUgYmFzZSBVUkwuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgdXRpbGl0eSBmb3IgY3JlYXRpbmcgZnVsbHkgcXVhbGlmaWVkIFVSTHMgdG8gdmFyaW91cyByZXNvdXJjZXMgb3IgcGFnZXMgd2l0aGluIHRoZSBEcmFlZ2VyIHdlYnNpdGUuXG4gKlxuICogQGZ1bmN0aW9uIGJ1aWxkV2Vic2l0ZVVybFxuICogQHBhcmFtIHsuLi4oc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZCl9IHNlZ21lbnRzIC0gVGhlIHBhdGggc2VnbWVudHMgdG8gYXBwZW5kIHRvIHRoZSBiYXNlIFVSTC5cbiAqIFRoZXNlIGNhbiBpbmNsdWRlIHN0cmluZ3MsIG51bWJlcnMsIHN5bWJvbHMsIG9yIG51bGwvdW5kZWZpbmVkIHZhbHVlcyAodGhlIGxhdHRlciB0d28gYXJlIGlnbm9yZWQpLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGx5IGNvbnN0cnVjdGVkIFVSTCwgaW5jbHVkaW5nIHRoZSBiYXNlIFVSTCBhbmQgYWxsIHByb3ZpZGVkIHBhdGggc2VnbWVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBSZXR1cm5zICdodHRwczovL3d3dy5kcmFlZ2VyLmNvbS9hYm91dC11cydcbiAqIGNvbnN0IHVybCA9IGJ1aWxkV2Vic2l0ZVVybCgnYWJvdXQtdXMnKTtcbiAqXG4gKiAvLyBDYW4gYWxzbyBoYW5kbGUgbXVsdGlwbGUgc2VnbWVudHMsIHJldHVybmluZyAnaHR0cHM6Ly93d3cuZHJhZWdlci5jb20vcHJvZHVjdHMvc2VhcmNoLzEyMydcbiAqIGNvbnN0IHByb2R1Y3RVcmwgPSBidWlsZFdlYnNpdGVVcmwoJ3Byb2R1Y3RzJywgJ3NlYXJjaCcsIDEyMyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV2Vic2l0ZVVybCguLi5zZWdtZW50czogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRVcmwoRFJBRUdFUl9XRUJTSVRFX1VSTCwgLi4uc2VnbWVudHMpO1xufVxuIl19