@energycap/components 0.41.1-ECAP-26841-date-input-features.20250108-1149 → 0.42.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 (357) hide show
  1. package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components.module.mjs +423 -423
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/{esm2020 → esm2022}/lib/controls/calendar/calendar.types.mjs +1 -1
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2022/lib/controls/date-input/date-input.component.mjs +465 -0
  23. package/{esm2020 → esm2022}/lib/controls/date-input/date-input.types.mjs +44 -44
  24. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2022/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
  35. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  41. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2022/lib/core/cache.service.mjs +105 -0
  46. package/esm2022/lib/core/custom-validators.mjs +29 -0
  47. package/esm2022/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2022/lib/core/error.service.mjs +61 -0
  49. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2022/lib/core/scroll.service.mjs +89 -0
  51. package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
  52. package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
  55. package/esm2022/lib/core/window.service.mjs +186 -0
  56. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
  65. package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  68. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
  73. package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
  76. package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
  77. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
  82. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2022/lib/display/table/table.component.mjs +249 -0
  86. package/esm2022/lib/display/tags/tag.mjs +18 -0
  87. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
  90. package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
  93. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
  96. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/{esm2020 → esm2022}/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -100
  103. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  104. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2022/lib/shared/display.mjs +6 -0
  110. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2022/lib/shared/json-helper.mjs +19 -0
  112. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  113. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
  115. package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  118. package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  119. package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  122. package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  123. package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  124. package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  127. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  128. package/{esm2020 → esm2022}/public-api.mjs +116 -116
  129. package/{fesm2020 → fesm2022}/energycap-components.mjs +12956 -12952
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -5
  132. package/lib/components.module.d.ts +92 -92
  133. package/lib/controls/banner/banner.component.d.ts +50 -50
  134. package/lib/controls/button/button.component.d.ts +78 -78
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -22
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -52
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -11
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -42
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -21
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -21
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -21
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -18
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -18
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -21
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -20
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -115
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -62
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -28
  157. package/lib/controls/form-control-base.d.ts +110 -110
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  163. package/lib/controls/menu/menu.component.d.ts +255 -255
  164. package/lib/controls/navigation/link-item.d.ts +32 -32
  165. package/lib/controls/navigation/nav-group.d.ts +18 -18
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  167. package/lib/controls/navigation/nav-item.d.ts +31 -31
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  169. package/lib/controls/popover/popover.component.d.ts +51 -51
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  172. package/lib/controls/select/select.component.d.ts +44 -44
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  175. package/lib/core/cache.service.d.ts +33 -33
  176. package/lib/core/custom-validators.d.ts +20 -20
  177. package/lib/core/date-time-helper.d.ts +101 -101
  178. package/lib/core/error.service.d.ts +20 -20
  179. package/lib/core/router-helper.service.d.ts +48 -48
  180. package/lib/core/scroll.service.d.ts +36 -36
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  182. package/lib/core/telemetry.service.d.ts +31 -31
  183. package/lib/core/validation-message.service.d.ts +26 -26
  184. package/lib/core/validation-patterns.d.ts +22 -22
  185. package/lib/core/window.service.d.ts +116 -116
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  187. package/lib/display/avatar/avatar.component.d.ts +35 -35
  188. package/lib/display/avatar/avatar.service.d.ts +24 -24
  189. package/lib/display/confirm/confirm.component.d.ts +123 -123
  190. package/lib/display/dialog/dialog-content.d.ts +19 -19
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  192. package/lib/display/dialog/dialog-types.d.ts +130 -130
  193. package/lib/display/dialog/dialog.component.d.ts +120 -120
  194. package/lib/display/dialog/dialog.service.d.ts +48 -48
  195. package/lib/display/help/help-types.d.ts +33 -33
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  199. package/lib/display/item-display/item-display.component.d.ts +43 -43
  200. package/lib/display/json-display/json-display.component.d.ts +16 -16
  201. package/lib/display/resizable/resizable-base.d.ts +67 -67
  202. package/lib/display/resizable/resizable.component.d.ts +31 -31
  203. package/lib/display/spinner/spinner.component.d.ts +5 -5
  204. package/lib/display/splash/splash.component.d.ts +16 -16
  205. package/lib/display/splash/splash.service.d.ts +22 -22
  206. package/lib/display/table/resizable-column.component.d.ts +10 -10
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  208. package/lib/display/table/searchable-table.component.d.ts +206 -206
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  212. package/lib/display/table/table-master-row.component.d.ts +113 -113
  213. package/lib/display/table/table-pagination.component.d.ts +91 -91
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  215. package/lib/display/table/table.component.d.ts +121 -121
  216. package/lib/display/tags/tag.d.ts +18 -18
  217. package/lib/display/tags/tags.component.d.ts +48 -48
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  219. package/lib/display/toast/toast-types.d.ts +24 -24
  220. package/lib/display/toast/toast.service.d.ts +20 -20
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  225. package/lib/display/tour/tour-types.d.ts +70 -70
  226. package/lib/display/tour/tour.component.d.ts +147 -147
  227. package/lib/display/tour/tour.service.d.ts +38 -38
  228. package/lib/display/tree/tree.component.d.ts +75 -75
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -23
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  239. package/lib/shared/display.d.ts +42 -42
  240. package/lib/shared/form-group.helper.d.ts +31 -31
  241. package/lib/shared/json-helper.d.ts +7 -7
  242. package/lib/shared/lodash-helper.d.ts +18 -18
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  244. package/lib/shared/page/page-statuses.d.ts +13 -13
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  254. package/lib/shared/user-preference.service.d.ts +13 -13
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  258. package/package.json +12 -18
  259. package/public-api.d.ts +113 -113
  260. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  261. package/schematics/rxjs-7-upgrade/index.js +67 -67
  262. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  263. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  264. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  265. package/schematics/utilities/typescript.d.ts +7 -7
  266. package/schematics/utilities/typescript.js +41 -41
  267. package/schematics/utilities/workspace.d.ts +8 -8
  268. package/schematics/utilities/workspace.js +71 -71
  269. package/schematics/utilities/workspace.js.map +1 -1
  270. package/esm2020/lib/controls/banner/banner.component.mjs +0 -109
  271. package/esm2020/lib/controls/button/button.component.mjs +0 -106
  272. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +0 -67
  273. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +0 -43
  274. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +0 -91
  275. package/esm2020/lib/controls/calendar/calendar.component.mjs +0 -248
  276. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +0 -140
  277. package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -879
  278. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  279. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  280. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  281. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  282. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  283. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  284. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  285. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  286. package/esm2020/lib/controls/date-input/date-input.component.mjs +0 -465
  287. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +0 -243
  288. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +0 -261
  289. package/esm2020/lib/controls/form-control/form-control.component.mjs +0 -98
  290. package/esm2020/lib/controls/form-control-base.mjs +0 -151
  291. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  292. package/esm2020/lib/controls/form-group/form-group.component.mjs +0 -261
  293. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +0 -329
  294. package/esm2020/lib/controls/menu/menu.component.mjs +0 -485
  295. package/esm2020/lib/controls/navigation/nav-group.mjs +0 -39
  296. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  297. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +0 -372
  298. package/esm2020/lib/controls/popover/popover.component.mjs +0 -117
  299. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +0 -82
  300. package/esm2020/lib/controls/select/select.component.mjs +0 -88
  301. package/esm2020/lib/controls/tabs/tabs.component.mjs +0 -47
  302. package/esm2020/lib/controls/textbox/textbox.component.mjs +0 -155
  303. package/esm2020/lib/core/cache.service.mjs +0 -105
  304. package/esm2020/lib/core/custom-validators.mjs +0 -29
  305. package/esm2020/lib/core/date-time-helper.mjs +0 -228
  306. package/esm2020/lib/core/error.service.mjs +0 -61
  307. package/esm2020/lib/core/router-helper.service.mjs +0 -111
  308. package/esm2020/lib/core/scroll.service.mjs +0 -89
  309. package/esm2020/lib/core/validation-message.service.mjs +0 -185
  310. package/esm2020/lib/core/window.service.mjs +0 -186
  311. package/esm2020/lib/display/app-bar/app-bar.component.mjs +0 -46
  312. package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
  313. package/esm2020/lib/display/avatar/avatar.service.mjs +0 -64
  314. package/esm2020/lib/display/confirm/confirm.component.mjs +0 -168
  315. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  316. package/esm2020/lib/display/dialog/dialog.component.mjs +0 -281
  317. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  318. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  319. package/esm2020/lib/display/item-display/item-display.component.mjs +0 -81
  320. package/esm2020/lib/display/json-display/json-display.component.mjs +0 -47
  321. package/esm2020/lib/display/resizable/resizable-base.mjs +0 -120
  322. package/esm2020/lib/display/splash/splash.component.mjs +0 -42
  323. package/esm2020/lib/display/table/resizable-table.directive.mjs +0 -227
  324. package/esm2020/lib/display/table/searchable-table.component.mjs +0 -342
  325. package/esm2020/lib/display/table/table-locked-column.component.mjs +0 -58
  326. package/esm2020/lib/display/table/table-master-row.component.mjs +0 -163
  327. package/esm2020/lib/display/table/table-pagination.component.mjs +0 -155
  328. package/esm2020/lib/display/table/table-selectable-row.component.mjs +0 -235
  329. package/esm2020/lib/display/table/table.component.mjs +0 -249
  330. package/esm2020/lib/display/tags/tag.mjs +0 -18
  331. package/esm2020/lib/display/tags/tags.component.mjs +0 -77
  332. package/esm2020/lib/display/toast/toast/toast.component.mjs +0 -77
  333. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +0 -114
  334. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  335. package/esm2020/lib/display/tour/tour.component.mjs +0 -398
  336. package/esm2020/lib/display/tour/tour.service.mjs +0 -75
  337. package/esm2020/lib/display/tree/tree.component.mjs +0 -135
  338. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  339. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  340. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  341. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
  342. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  343. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  344. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  345. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  346. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  347. package/esm2020/lib/shared/display.mjs +0 -6
  348. package/esm2020/lib/shared/form-group.helper.mjs +0 -67
  349. package/esm2020/lib/shared/json-helper.mjs +0 -19
  350. package/esm2020/lib/shared/lodash-helper.mjs +0 -51
  351. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +0 -387
  352. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +0 -147
  353. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  354. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  355. package/fesm2015/energycap-components.mjs +0 -13373
  356. package/fesm2015/energycap-components.mjs.map +0 -1
  357. package/fesm2020/energycap-components.mjs.map +0 -1
@@ -1,100 +1,100 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';
3
- import { fromEvent, Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/cdk/a11y";
7
- /**
8
- * A basic helper directive to determine when focus leaves the host element.
9
- *
10
- * NOTE: This directive utilizes hidden anchor elements. These will disrupt tab order for elements
11
- * within a form. It is recommended to only use this directive when you need to redirect focus when
12
- * focus leaves a container. Also make sure this directive is disabled when the focus out events
13
- * are not needed to avoid keyboard nav problems.
14
- */
15
- export class KeyboardNavContainerDirective {
16
- constructor(hostEl, _document, interactivityChecker) {
17
- this.hostEl = hostEl;
18
- this._document = _document;
19
- this.interactivityChecker = interactivityChecker;
20
- this.enabled = true;
21
- this.focusOutStart = new EventEmitter();
22
- this.focusOutEnd = new EventEmitter();
23
- this.destroyed = new Subject();
24
- // Create the start and end anchors.
25
- this.startAnchor = this._document.createElement('div');
26
- this.endAnchor = this._document.createElement('div');
27
- // Hide the anchors from screen readers.
28
- this.startAnchor.setAttribute('aria-hidden', 'true');
29
- this.endAnchor.setAttribute('aria-hidden', 'true');
30
- }
31
- ngOnChanges() {
32
- this.toggleAnchors(this.enabled);
33
- }
34
- ngAfterViewInit() {
35
- // Insert the anchors into the DOM before and after the host element.
36
- this.hostEl.nativeElement.parentNode?.insertBefore(this.startAnchor, this.hostEl.nativeElement);
37
- this.hostEl.nativeElement.parentNode?.insertBefore(this.endAnchor, this.hostEl.nativeElement.nextSibling);
38
- // Listen for focus events on the anchors.
39
- fromEvent(this.startAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutStart.emit());
40
- fromEvent(this.endAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutEnd.emit());
41
- this.toggleAnchors(this.enabled);
42
- }
43
- ngOnDestroy() {
44
- this.destroyed.next();
45
- this.destroyed.complete();
46
- // Cleanup the anchors
47
- this.startAnchor.remove();
48
- this.endAnchor.remove();
49
- }
50
- focus() {
51
- const firstFocusableElement = this.getFirstFocusableElement(this.hostEl.nativeElement);
52
- firstFocusableElement?.focus();
53
- }
54
- getFirstFocusableElement(element) {
55
- // These are only possibly focusable. Some may be disabled or not visible.
56
- const elements = element.querySelectorAll('input, textarea, select, button, a, [tabindex], [contenteditable]');
57
- // Use the Angular CDK interactivity checker to determine if an element is actually focusable and tabbable.
58
- // This checks for disabledness among other things.
59
- const first = Array.from(elements).find(el => {
60
- return this.interactivityChecker.isFocusable(el) && this.interactivityChecker.isTabbable(el);
61
- });
62
- return first || null;
63
- }
64
- toggleAnchors(enabled) {
65
- // Make the anchors focusable if the container is enabled and we have subscribers for the events.
66
- // Otherwise, remove the tabindexes so they cannot receive focus and disrupt the tab order.
67
- if (enabled && this.focusOutStart.observers.length > 0) {
68
- this.startAnchor.setAttribute('tabindex', '0');
69
- }
70
- else {
71
- this.startAnchor.removeAttribute('tabindex');
72
- }
73
- if (enabled && this.focusOutEnd.observers.length > 0) {
74
- this.endAnchor.setAttribute('tabindex', '0');
75
- }
76
- else {
77
- this.endAnchor.removeAttribute('tabindex');
78
- }
79
- }
80
- }
81
- KeyboardNavContainerDirectivefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: KeyboardNavContainerDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.InteractivityChecker }], target: i0.ɵɵFactoryTarget.Directive });
82
- KeyboardNavContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: KeyboardNavContainerDirective, selector: "[ecKeyboardNavContainer]", inputs: { enabled: ["ecKeyboardNavContainer", "enabled"] }, outputs: { focusOutStart: "focusOutStart", focusOutEnd: "focusOutEnd" }, exportAs: ["ecKeyboardNavContainer"], usesOnChanges: true, ngImport: i0 });
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: KeyboardNavContainerDirective, decorators: [{
84
- type: Directive,
85
- args: [{
86
- selector: '[ecKeyboardNavContainer]',
87
- exportAs: 'ecKeyboardNavContainer'
88
- }]
89
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: Document, decorators: [{
90
- type: Inject,
91
- args: [DOCUMENT]
92
- }] }, { type: i1.InteractivityChecker }]; }, propDecorators: { enabled: [{
93
- type: Input,
94
- args: ['ecKeyboardNavContainer']
95
- }], focusOutStart: [{
96
- type: Output
97
- }], focusOutEnd: [{
98
- type: Output
99
- }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtbmF2LWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2RpcmVjdGl2ZXMva2V5Ym9hcmQtbmF2LWNvbnRhaW5lci9rZXlib2FyZC1uYXYtY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU0zQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLDZCQUE2QjtJQVl4QyxZQUNVLE1BQStCLEVBQ2IsU0FBbUIsRUFDckMsb0JBQTBDO1FBRjFDLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBQ2IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBYm5CLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFFL0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtuQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQU90QyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtB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V0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7OzBIQXRGVSw2QkFBNkIsNENBYzlCLFFBQVE7OEdBZFAsNkJBQTZCOzJGQUE3Qiw2QkFBNkI7a0JBWnpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7OzBCQXVCSSxNQUFNOzJCQUFDLFFBQVE7K0VBWmUsT0FBTztzQkFBdkMsS0FBSzt1QkFBQyx3QkFBd0I7Z0JBRXJCLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVyYWN0aXZpdHlDaGVja2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tlY0tleWJvYXJkTmF2Q29udGFpbmVyXScsXHJcbiAgZXhwb3J0QXM6ICdlY0tleWJvYXJkTmF2Q29udGFpbmVyJ1xyXG59KVxyXG4vKipcclxuICogQSBiYXNpYyBoZWxwZXIgZGlyZWN0aXZlIHRvIGRldGVybWluZSB3aGVuIGZvY3VzIGxlYXZlcyB0aGUgaG9zdCBlbGVtZW50LlxyXG4gKiBcclxuICogTk9URTogVGhpcyBkaXJlY3RpdmUgdXRpbGl6ZXMgaGlkZGVuIGFuY2hvciBlbGVtZW50cy4gVGhlc2Ugd2lsbCBkaXNydXB0IHRhYiBvcmRlciBmb3IgZWxlbWVudHNcclxuICogd2l0aGluIGEgZm9ybS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSB1c2UgdGhpcyBkaXJlY3RpdmUgd2hlbiB5b3UgbmVlZCB0byByZWRpcmVjdCBmb2N1cyB3aGVuXHJcbiAqIGZvY3VzIGxlYXZlcyBhIGNvbnRhaW5lci4gQWxzbyBtYWtlIHN1cmUgdGhpcyBkaXJlY3RpdmUgaXMgZGlzYWJsZWQgd2hlbiB0aGUgZm9jdXMgb3V0IGV2ZW50c1xyXG4gKiBhcmUgbm90IG5lZWRlZCB0byBhdm9pZCBrZXlib2FyZCBuYXYgcHJvYmxlbXMuIFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEtleWJvYXJkTmF2Q29udGFpbmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoJ2VjS2V5Ym9hcmROYXZDb250YWluZXInKSBlbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQE91dHB1dCgpIGZvY3VzT3V0U3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzT3V0RW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIHN0YXJ0QW5jaG9yOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIGVuZEFuY2hvcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGhvc3RFbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQsXHJcbiAgICBwcml2YXRlIGludGVyYWN0aXZpdHlDaGVja2VyOiBJbnRlcmFjdGl2aXR5Q2hlY2tlcixcclxuICApIHtcclxuICAgIC8vIENyZWF0ZSB0aGUgc3RhcnQgYW5kIGVuZCBhbmNob3JzLlxyXG4gICAgdGhpcy5zdGFydEFuY2hvciA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5lbmRBbmNob3IgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIC8vIEhpZGUgdGhlIGFuY2hvcnMgZnJvbSBzY3JlZW4gcmVhZGVycy5cclxuICAgIHRoaXMuc3RhcnRBbmNob3Iuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgICB0aGlzLmVuZEFuY2hvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50b2dnbGVBbmNob3JzKHRoaXMuZW5hYmxlZCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBJbnNlcnQgdGhlIGFuY2hvcnMgaW50byB0aGUgRE9NIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGhvc3QgZWxlbWVudC5cclxuICAgIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHRoaXMuc3RhcnRBbmNob3IsIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUodGhpcy5lbmRBbmNob3IsIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQubmV4dFNpYmxpbmcpO1xyXG5cclxuICAgIC8vIExpc3RlbiBmb3IgZm9jdXMgZXZlbnRzIG9uIHRoZSBhbmNob3JzLlxyXG4gICAgZnJvbUV2ZW50KHRoaXMuc3RhcnRBbmNob3IsICdmb2N1cycpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZm9jdXNPdXRTdGFydC5lbWl0KCkpO1xyXG5cclxuICAgIGZyb21FdmVudCh0aGlzLmVuZEFuY2hvciwgJ2ZvY3VzJykucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5mb2N1c091dEVuZC5lbWl0KCkpO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlQW5jaG9ycyh0aGlzLmVuYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpO1xyXG4gICAgLy8gQ2xlYW51cCB0aGUgYW5jaG9yc1xyXG4gICAgdGhpcy5zdGFydEFuY2hvci5yZW1vdmUoKTtcclxuICAgIHRoaXMuZW5kQW5jaG9yLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICBmaXJzdEZvY3VzYWJsZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICAvLyBUaGVzZSBhcmUgb25seSBwb3NzaWJseSBmb2N1c2FibGUuIFNvbWUgbWF5IGJlIGRpc2FibGVkIG9yIG5vdCB2aXNpYmxlLlxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgYnV0dG9uLCBhLCBbdGFiaW5kZXhdLCBbY29udGVudGVkaXRhYmxlXScpO1xyXG5cclxuICAgIC8vIFVzZSB0aGUgQW5ndWxhciBDREsgaW50ZXJhY3Rpdml0eSBjaGVja2VyIHRvIGRldGVybWluZSBpZiBhbiBlbGVtZW50IGlzIGFjdHVhbGx5IGZvY3VzYWJsZSBhbmQgdGFiYmFibGUuXHJcbiAgICAvLyBUaGlzIGNoZWNrcyBmb3IgZGlzYWJsZWRuZXNzIGFtb25nIG90aGVyIHRoaW5ncy5cclxuICAgIGNvbnN0IGZpcnN0ID0gQXJyYXkuZnJvbShlbGVtZW50cykuZmluZChlbCA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGVsKSAmJiB0aGlzLmludGVyYWN0aXZpdHlDaGVja2VyLmlzVGFiYmFibGUoZWwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpcnN0IHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUFuY2hvcnMoZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgLy8gTWFrZSB0aGUgYW5jaG9ycyBmb2N1c2FibGUgaWYgdGhlIGNvbnRhaW5lciBpcyBlbmFibGVkIGFuZCB3ZSBoYXZlIHN1YnNjcmliZXJzIGZvciB0aGUgZXZlbnRzLlxyXG4gICAgLy8gT3RoZXJ3aXNlLCByZW1vdmUgdGhlIHRhYmluZGV4ZXMgc28gdGhleSBjYW5ub3QgcmVjZWl2ZSBmb2N1cyBhbmQgZGlzcnVwdCB0aGUgdGFiIG9yZGVyLlxyXG4gICAgaWYgKGVuYWJsZWQgJiYgdGhpcy5mb2N1c091dFN0YXJ0Lm9ic2VydmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRBbmNob3Iuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0QW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW5hYmxlZCAmJiB0aGlzLmZvY3VzT3V0RW5kLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZW5kQW5jaG9yLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmRBbmNob3IucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';
3
+ import { fromEvent, Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/cdk/a11y";
7
+ /**
8
+ * A basic helper directive to determine when focus leaves the host element.
9
+ *
10
+ * NOTE: This directive utilizes hidden anchor elements. These will disrupt tab order for elements
11
+ * within a form. It is recommended to only use this directive when you need to redirect focus when
12
+ * focus leaves a container. Also make sure this directive is disabled when the focus out events
13
+ * are not needed to avoid keyboard nav problems.
14
+ */
15
+ export class KeyboardNavContainerDirective {
16
+ constructor(hostEl, _document, interactivityChecker) {
17
+ this.hostEl = hostEl;
18
+ this._document = _document;
19
+ this.interactivityChecker = interactivityChecker;
20
+ this.enabled = true;
21
+ this.focusOutStart = new EventEmitter();
22
+ this.focusOutEnd = new EventEmitter();
23
+ this.destroyed = new Subject();
24
+ // Create the start and end anchors.
25
+ this.startAnchor = this._document.createElement('div');
26
+ this.endAnchor = this._document.createElement('div');
27
+ // Hide the anchors from screen readers.
28
+ this.startAnchor.setAttribute('aria-hidden', 'true');
29
+ this.endAnchor.setAttribute('aria-hidden', 'true');
30
+ }
31
+ ngOnChanges() {
32
+ this.toggleAnchors(this.enabled);
33
+ }
34
+ ngAfterViewInit() {
35
+ // Insert the anchors into the DOM before and after the host element.
36
+ this.hostEl.nativeElement.parentNode?.insertBefore(this.startAnchor, this.hostEl.nativeElement);
37
+ this.hostEl.nativeElement.parentNode?.insertBefore(this.endAnchor, this.hostEl.nativeElement.nextSibling);
38
+ // Listen for focus events on the anchors.
39
+ fromEvent(this.startAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutStart.emit());
40
+ fromEvent(this.endAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutEnd.emit());
41
+ this.toggleAnchors(this.enabled);
42
+ }
43
+ ngOnDestroy() {
44
+ this.destroyed.next();
45
+ this.destroyed.complete();
46
+ // Cleanup the anchors
47
+ this.startAnchor.remove();
48
+ this.endAnchor.remove();
49
+ }
50
+ focus() {
51
+ const firstFocusableElement = this.getFirstFocusableElement(this.hostEl.nativeElement);
52
+ firstFocusableElement?.focus();
53
+ }
54
+ getFirstFocusableElement(element) {
55
+ // These are only possibly focusable. Some may be disabled or not visible.
56
+ const elements = element.querySelectorAll('input, textarea, select, button, a, [tabindex], [contenteditable]');
57
+ // Use the Angular CDK interactivity checker to determine if an element is actually focusable and tabbable.
58
+ // This checks for disabledness among other things.
59
+ const first = Array.from(elements).find(el => {
60
+ return this.interactivityChecker.isFocusable(el) && this.interactivityChecker.isTabbable(el);
61
+ });
62
+ return first || null;
63
+ }
64
+ toggleAnchors(enabled) {
65
+ // Make the anchors focusable if the container is enabled and we have subscribers for the events.
66
+ // Otherwise, remove the tabindexes so they cannot receive focus and disrupt the tab order.
67
+ if (enabled && this.focusOutStart.observers.length > 0) {
68
+ this.startAnchor.setAttribute('tabindex', '0');
69
+ }
70
+ else {
71
+ this.startAnchor.removeAttribute('tabindex');
72
+ }
73
+ if (enabled && this.focusOutEnd.observers.length > 0) {
74
+ this.endAnchor.setAttribute('tabindex', '0');
75
+ }
76
+ else {
77
+ this.endAnchor.removeAttribute('tabindex');
78
+ }
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KeyboardNavContainerDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.InteractivityChecker }], target: i0.ɵɵFactoryTarget.Directive }); }
81
+ static { thisdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: KeyboardNavContainerDirective, selector: "[ecKeyboardNavContainer]", inputs: { enabled: ["ecKeyboardNavContainer", "enabled"] }, outputs: { focusOutStart: "focusOutStart", focusOutEnd: "focusOutEnd" }, exportAs: ["ecKeyboardNavContainer"], usesOnChanges: true, ngImport: i0 }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KeyboardNavContainerDirective, decorators: [{
84
+ type: Directive,
85
+ args: [{
86
+ selector: '[ecKeyboardNavContainer]',
87
+ exportAs: 'ecKeyboardNavContainer'
88
+ }]
89
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: Document, decorators: [{
90
+ type: Inject,
91
+ args: [DOCUMENT]
92
+ }] }, { type: i1.InteractivityChecker }], propDecorators: { enabled: [{
93
+ type: Input,
94
+ args: ['ecKeyboardNavContainer']
95
+ }], focusOutStart: [{
96
+ type: Output
97
+ }], focusOutEnd: [{
98
+ type: Output
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtbmF2LWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2RpcmVjdGl2ZXMva2V5Ym9hcmQtbmF2LWNvbnRhaW5lci9rZXlib2FyZC1uYXYtY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU0zQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLDZCQUE2QjtJQVl4QyxZQUNVLE1BQStCLEVBQ2IsU0FBbUIsRUFDckMsb0JBQTBDO1FBRjFDLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBQ2IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBYm5CLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFFL0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtuQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQU90QyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtB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WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDOytHQXRGVSw2QkFBNkIsNENBYzlCLFFBQVE7bUdBZFAsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQVp6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzswQkF1QkksTUFBTTsyQkFBQyxRQUFROzRFQVplLE9BQU87c0JBQXZDLEtBQUs7dUJBQUMsd0JBQXdCO2dCQUVyQixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcmFjdGl2aXR5Q2hlY2tlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZWNLZXlib2FyZE5hdkNvbnRhaW5lcl0nLFxyXG4gIGV4cG9ydEFzOiAnZWNLZXlib2FyZE5hdkNvbnRhaW5lcidcclxufSlcclxuLyoqXHJcbiAqIEEgYmFzaWMgaGVscGVyIGRpcmVjdGl2ZSB0byBkZXRlcm1pbmUgd2hlbiBmb2N1cyBsZWF2ZXMgdGhlIGhvc3QgZWxlbWVudC5cclxuICogXHJcbiAqIE5PVEU6IFRoaXMgZGlyZWN0aXZlIHV0aWxpemVzIGhpZGRlbiBhbmNob3IgZWxlbWVudHMuIFRoZXNlIHdpbGwgZGlzcnVwdCB0YWIgb3JkZXIgZm9yIGVsZW1lbnRzXHJcbiAqIHdpdGhpbiBhIGZvcm0uIEl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIHRoaXMgZGlyZWN0aXZlIHdoZW4geW91IG5lZWQgdG8gcmVkaXJlY3QgZm9jdXMgd2hlblxyXG4gKiBmb2N1cyBsZWF2ZXMgYSBjb250YWluZXIuIEFsc28gbWFrZSBzdXJlIHRoaXMgZGlyZWN0aXZlIGlzIGRpc2FibGVkIHdoZW4gdGhlIGZvY3VzIG91dCBldmVudHNcclxuICogYXJlIG5vdCBuZWVkZWQgdG8gYXZvaWQga2V5Ym9hcmQgbmF2IHByb2JsZW1zLiBcclxuICovXHJcbmV4cG9ydCBjbGFzcyBLZXlib2FyZE5hdkNvbnRhaW5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCdlY0tleWJvYXJkTmF2Q29udGFpbmVyJykgZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c091dFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1c091dEVuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSBzdGFydEFuY2hvcjogSFRNTEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBlbmRBbmNob3I6IEhUTUxFbGVtZW50O1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBob3N0RWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxyXG4gICAgcHJpdmF0ZSBpbnRlcmFjdGl2aXR5Q2hlY2tlcjogSW50ZXJhY3Rpdml0eUNoZWNrZXIsXHJcbiAgKSB7XHJcbiAgICAvLyBDcmVhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgYW5jaG9ycy5cclxuICAgIHRoaXMuc3RhcnRBbmNob3IgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMuZW5kQW5jaG9yID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAvLyBIaWRlIHRoZSBhbmNob3JzIGZyb20gc2NyZWVuIHJlYWRlcnMuXHJcbiAgICB0aGlzLnN0YXJ0QW5jaG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgdGhpcy5lbmRBbmNob3Iuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudG9nZ2xlQW5jaG9ycyh0aGlzLmVuYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0IHRoZSBhbmNob3JzIGludG8gdGhlIERPTSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBob3N0IGVsZW1lbnQuXHJcbiAgICB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh0aGlzLnN0YXJ0QW5jaG9yLCB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHRoaXMuZW5kQW5jaG9yLCB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50Lm5leHRTaWJsaW5nKTtcclxuXHJcbiAgICAvLyBMaXN0ZW4gZm9yIGZvY3VzIGV2ZW50cyBvbiB0aGUgYW5jaG9ycy5cclxuICAgIGZyb21FdmVudCh0aGlzLnN0YXJ0QW5jaG9yLCAnZm9jdXMnKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZvY3VzT3V0U3RhcnQuZW1pdCgpKTtcclxuXHJcbiAgICBmcm9tRXZlbnQodGhpcy5lbmRBbmNob3IsICdmb2N1cycpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZm9jdXNPdXRFbmQuZW1pdCgpKTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZUFuY2hvcnModGhpcy5lbmFibGVkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcclxuICAgIC8vIENsZWFudXAgdGhlIGFuY2hvcnNcclxuICAgIHRoaXMuc3RhcnRBbmNob3IucmVtb3ZlKCk7XHJcbiAgICB0aGlzLmVuZEFuY2hvci5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgZmlyc3RGb2N1c2FibGVFbGVtZW50Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xyXG4gICAgLy8gVGhlc2UgYXJlIG9ubHkgcG9zc2libHkgZm9jdXNhYmxlLiBTb21lIG1heSBiZSBkaXNhYmxlZCBvciBub3QgdmlzaWJsZS5cclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbiwgYSwgW3RhYmluZGV4XSwgW2NvbnRlbnRlZGl0YWJsZV0nKTtcclxuXHJcbiAgICAvLyBVc2UgdGhlIEFuZ3VsYXIgQ0RLIGludGVyYWN0aXZpdHkgY2hlY2tlciB0byBkZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyBhY3R1YWxseSBmb2N1c2FibGUgYW5kIHRhYmJhYmxlLlxyXG4gICAgLy8gVGhpcyBjaGVja3MgZm9yIGRpc2FibGVkbmVzcyBhbW9uZyBvdGhlciB0aGluZ3MuXHJcbiAgICBjb25zdCBmaXJzdCA9IEFycmF5LmZyb20oZWxlbWVudHMpLmZpbmQoZWwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGl2aXR5Q2hlY2tlci5pc0ZvY3VzYWJsZShlbCkgJiYgdGhpcy5pbnRlcmFjdGl2aXR5Q2hlY2tlci5pc1RhYmJhYmxlKGVsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaXJzdCB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVBbmNob3JzKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIC8vIE1ha2UgdGhlIGFuY2hvcnMgZm9jdXNhYmxlIGlmIHRoZSBjb250YWluZXIgaXMgZW5hYmxlZCBhbmQgd2UgaGF2ZSBzdWJzY3JpYmVycyBmb3IgdGhlIGV2ZW50cy5cclxuICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoZSB0YWJpbmRleGVzIHNvIHRoZXkgY2Fubm90IHJlY2VpdmUgZm9jdXMgYW5kIGRpc3J1cHQgdGhlIHRhYiBvcmRlci5cclxuICAgIGlmIChlbmFibGVkICYmIHRoaXMuZm9jdXNPdXRTdGFydC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0YXJ0QW5jaG9yLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydEFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuYWJsZWQgJiYgdGhpcy5mb2N1c091dEVuZC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmVuZEFuY2hvci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,166 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, EventEmitter, Inject, Input } from '@angular/core';
3
+ import Popper from 'popper.js';
4
+ import { fromEvent } from "rxjs";
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Primitive directive that popups a container using PopperJS
8
+ *
9
+ * @export
10
+ */
11
+ export class PopupContainerDirective {
12
+ /**
13
+ * Global reference to the currently displayed popup; only
14
+ * one popup directive can be in `show` state at a given time.
15
+ *
16
+ * @memberof PopupContainerDirective
17
+ */
18
+ static { this.GlobalPopupRef = undefined; }
19
+ /**
20
+ * Creates an instance of PopupContainerDirective.
21
+ * @param templateRef Reference to the popup template
22
+ * @param viewContainer Reference to the view container
23
+ * @param document Reference to Document
24
+ * @memberof PopupContainerDirective
25
+ */
26
+ constructor(templateRef, viewContainer, document, renderer) {
27
+ this.templateRef = templateRef;
28
+ this.viewContainer = viewContainer;
29
+ this.document = document;
30
+ this.renderer = renderer;
31
+ /**
32
+ * Emit the {@link PopupStatus} when it changes
33
+ */
34
+ this.popperStatusChange = new EventEmitter();
35
+ }
36
+ /**
37
+ * Angular onInit lifecycle hook
38
+ * @see https://angular.io/guide/lifecycle-hooks
39
+ */
40
+ ngOnInit() {
41
+ this.templateViewRef = this.viewContainer.createEmbeddedView(this.templateRef);
42
+ }
43
+ /**
44
+ * Angular onDestroy lifecycle hook. Close and delete references. Unsubscribe observables
45
+ * @see https://angular.io/guide/lifecycle-hooks
46
+ */
47
+ ngOnDestroy() {
48
+ this.hide();
49
+ }
50
+ /**
51
+ * Displays the templateRef as a popup
52
+ *
53
+ * @memberof PopupContainerDirective
54
+ */
55
+ show() {
56
+ if (PopupContainerDirective.GlobalPopupRef) {
57
+ if (PopupContainerDirective.GlobalPopupRef != this) {
58
+ PopupContainerDirective.GlobalPopupRef.hide();
59
+ PopupContainerDirective.GlobalPopupRef = undefined;
60
+ }
61
+ }
62
+ if (!this.globalCloseSubscription) {
63
+ this.globalCloseSubscription = fromEvent(this.document.body, "click").subscribe((event) => {
64
+ this.hide();
65
+ });
66
+ }
67
+ if (!this.popperRef) {
68
+ // Add the popper template as an embedded view since PopperJS
69
+ // manipulates DOM elements.
70
+ this.popupViewRef = this.viewContainer.createEmbeddedView(this.popup);
71
+ // Since popper needs real DOM elements, grab the first non-comment
72
+ // DOM element to use as our anchor.
73
+ let anchorElement = this.popupViewRef.rootNodes.find(elem => { return elem.nodeName !== "#text"; });
74
+ // Use the parents elements as our DOM elements to Popper
75
+ this.popperRef = new Popper(this.templateViewRef.rootNodes[0], anchorElement, this.popperOptions);
76
+ PopupContainerDirective.GlobalPopupRef = this;
77
+ this.popperStatusChange.emit('visible');
78
+ }
79
+ }
80
+ /**
81
+ * Hides the templateRef
82
+ *
83
+ * @memberof PopupContainerDirective
84
+ */
85
+ hide() {
86
+ if (this.globalCloseSubscription) {
87
+ this.globalCloseSubscription.unsubscribe();
88
+ this.globalCloseSubscription = undefined;
89
+ }
90
+ if (this.popperRef && this.popupViewRef) {
91
+ this.popupViewRef.destroy();
92
+ this.popperRef.destroy();
93
+ this.popperRef = undefined;
94
+ this.popperStatusChange.emit('hidden');
95
+ }
96
+ }
97
+ /**
98
+ * Updates the popup container position
99
+ */
100
+ update() {
101
+ if (this.popperRef) {
102
+ this.popperRef.update();
103
+ }
104
+ }
105
+ fixPosition(minWidthNone, appendToBody = false) {
106
+ // @ts-ignore
107
+ if (this.popperRef && this.popperRef['reference'] && this.popperRef['popper']) {
108
+ // @ts-ignore
109
+ let popupEl = this.popperRef['popper'];
110
+ // Reset width style previously assigned because the content may have
111
+ // changed and the auto width would be different
112
+ this.renderer.removeStyle(popupEl, 'width');
113
+ this.renderer.setStyle(popupEl, 'position', 'fixed');
114
+ if (appendToBody) {
115
+ const bodyEl = this.document.querySelector('body');
116
+ const popupParent = this.renderer.parentNode(popupEl);
117
+ if (popupParent !== bodyEl) {
118
+ this.renderer.appendChild(bodyEl, popupEl);
119
+ }
120
+ }
121
+ // @ts-ignore
122
+ let toggleEl = this.popperRef['reference'];
123
+ let width = popupEl.offsetWidth;
124
+ let boundaries = popupEl.getBoundingClientRect();
125
+ let left = boundaries.left;
126
+ let coords = toggleEl.getBoundingClientRect();
127
+ // Set the top of our menu to the bottom of the toggle element
128
+ let top = coords.bottom;
129
+ if (this.popperOptions && this.popperOptions.placement) {
130
+ if (this.popperOptions.placement === 'bottom-start' || this.popperOptions.placement === 'top-start') {
131
+ left = coords.left;
132
+ }
133
+ else {
134
+ left = coords.right - ((minWidthNone || width > coords.width) ? width : coords.width);
135
+ }
136
+ }
137
+ // if it won't fit (with 10px space before hitting the window edge), flip it
138
+ if (boundaries.height + top + 10 > window.innerHeight) {
139
+ top = coords.top - boundaries.height;
140
+ }
141
+ this.renderer.setStyle(popupEl, 'transform', 'none');
142
+ this.renderer.setStyle(popupEl, 'left', left + 'px');
143
+ this.renderer.setStyle(popupEl, 'top', top + 'px');
144
+ this.renderer.setStyle(popupEl, 'width', width + 'px');
145
+ if (!minWidthNone) {
146
+ this.renderer.setStyle(popupEl, 'min-width', coords.width + 'px');
147
+ }
148
+ }
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopupContainerDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
151
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PopupContainerDirective, selector: "[ecPopup]", inputs: { popup: ["ecPopup", "popup"], popperOptions: ["options", "popperOptions"] }, ngImport: i0 }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopupContainerDirective, decorators: [{
154
+ type: Directive,
155
+ args: [{ selector: '[ecPopup]' }]
156
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
157
+ type: Inject,
158
+ args: [DOCUMENT]
159
+ }] }, { type: i0.Renderer2 }], propDecorators: { popup: [{
160
+ type: Input,
161
+ args: ['ecPopup']
162
+ }], popperOptions: [{
163
+ type: Input,
164
+ args: ['options']
165
+ }] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAtY29udGFpbmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvZGlyZWN0aXZlcy9wb3B1cC9wb3B1cC1jb250YWluZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFtQixZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0QsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOztBQUsvQzs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQUVoQzs7Ozs7T0FLRzthQUNXLG1CQUFjLEdBQTZCLFNBQVMsQUFBdEMsQ0FBdUM7SUE2Q25FOzs7Ozs7T0FNRztJQUNILFlBQ1ksV0FBNkIsRUFDN0IsYUFBK0IsRUFDYixRQUFhLEVBQy9CLFFBQW1CO1FBSG5CLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDYixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFxQi9COztXQUVHO1FBQ0ksdUJBQWtCLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUF2QnBGLENBQUM7SUFFSjs7O09BR0c7SUFDSCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBU0Q7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QWpESyxLQUFLO3NCQUE3QixLQUFLO3VCQUFDLFNBQVM7Z0JBT1MsYUFBYTtzQkFBckMsS0FBSzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFBvcHVwUGxhY2VtZW50ID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAndG9wLXN0YXJ0JyB8ICd0b3AtZW5kJyB8ICdib3R0b20tc3RhcnQnIHwgJ2JvdHRvbS1lbmQnO1xyXG5leHBvcnQgdHlwZSBQb3B1cFN0YXR1cyA9ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xyXG5cclxuLyoqXHJcbiAqIFByaW1pdGl2ZSBkaXJlY3RpdmUgdGhhdCBwb3B1cHMgYSBjb250YWluZXIgdXNpbmcgUG9wcGVySlNcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2VjUG9wdXBdJyB9KVxyXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBHbG9iYWwgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBvcHVwOyBvbmx5XHJcbiAgICAgKiAgb25lIHBvcHVwIGRpcmVjdGl2ZSBjYW4gYmUgaW4gYHNob3dgIHN0YXRlIGF0IGEgZ2l2ZW4gdGltZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHbG9iYWxQb3B1cFJlZj86IFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGVSZWYgb2YgY29udGFpbmVyIHRvIHBvcHVwXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoJ2VjUG9wdXAnKSBwdWJsaWMgcG9wdXAhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wcGVyIG9wdGlvbnNcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCdvcHRpb25zJykgcHVibGljIHBvcHBlck9wdGlvbnM/OiBQb3BwZXIuUG9wcGVyT3B0aW9ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIFZpZXcgUmVmZXJlbmNlXHJcbiAgICAgKlxyXG4gICAgICogQG1lbWJlcm9mIFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdGVtcGxhdGVWaWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3B1cCBWaWV3IFJlZmVyZW5jZSAoY29udGFpbmVyKVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvcHVwVmlld1JlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wcGVyIFJlZmVyZW5jZVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvcHBlclJlZj86IFBvcHBlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlLXRvLWNsaWNrIFN1YnNjcmlwdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8gY2xvc2UgdGhlIG1lbnUgd2hlbiB5b3UgY2xpY2sgb24gdGhlIGJvZHkuXHJcbiAgICAgKiBXZSBhdHRhY2ggaXQgd2hlbiB0aGUgbWVudSBpcyBvcGVuIGFuZCBkZXRhY2ggaXQgb24gY2xvc2UsIHRvIGxpbWl0IHRoZSBsaWZldGltZSBvZiB0aGUgY2xpY2sgaGFuZGxlclxyXG4gICAgICogd2hpY2ggaGVscHMgd2l0aCBwZXJmb3JtYW5jZSBvbiBhIHBhZ2Ugd2l0aCBtYW55IHBvcHVwIGNvbnRhaW5lcnNcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxDbG9zZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmUuXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVSZWYgUmVmZXJlbmNlIHRvIHRoZSBwb3B1cCB0ZW1wbGF0ZVxyXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgUmVmZXJlbmNlIHRvIHRoZSB2aWV3IGNvbnRhaW5lclxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50IFJlZmVyZW5jZSB0byBEb2N1bWVudFxyXG4gICAgICogQG1lbWJlcm9mIFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICAgICkge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25Jbml0IGxpZmVjeWNsZSBob29rXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25EZXN0cm95IGxpZmVjeWNsZSBob29rLiBDbG9zZSBhbmQgZGVsZXRlIHJlZmVyZW5jZXMuIFVuc3Vic2NyaWJlIG9ic2VydmFibGVzXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdCB0aGUge0BsaW5rIFBvcHVwU3RhdHVzfSB3aGVuIGl0IGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvcHBlclN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPFBvcHVwU3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9wdXBTdGF0dXM+KCk7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgdGhlIHRlbXBsYXRlUmVmIGFzIGEgcG9wdXBcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLkdsb2JhbFBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIGlmIChQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiAhPSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZi5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZ2xvYmFsQ2xvc2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxDbG9zZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmRvY3VtZW50LmJvZHksIFwiY2xpY2tcIikuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHBlclJlZikge1xyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHBvcHBlciB0ZW1wbGF0ZSBhcyBhbiBlbWJlZGRlZCB2aWV3IHNpbmNlIFBvcHBlckpTXHJcbiAgICAgICAgICAgIC8vIG1hbmlwdWxhdGVzIERPTSBlbGVtZW50cy5cclxuICAgICAgICAgICAgdGhpcy5wb3B1cFZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucG9wdXApO1xyXG5cclxuICAgICAgICAgICAgLy8gU2luY2UgcG9wcGVyIG5lZWRzIHJlYWwgRE9NIGVsZW1lbnRzLCBncmFiIHRoZSBmaXJzdCBub24tY29tbWVudFxyXG4gICAgICAgICAgICAvLyBET00gZWxlbWVudCB0byB1c2UgYXMgb3VyIGFuY2hvci5cclxuICAgICAgICAgICAgbGV0IGFuY2hvckVsZW1lbnQgPSAodGhpcy5wb3B1cFZpZXdSZWYucm9vdE5vZGVzIGFzIGFueVtdKS5maW5kKGVsZW0gPT4geyByZXR1cm4gZWxlbS5ub2RlTmFtZSAhPT0gXCIjdGV4dFwiIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50cyBlbGVtZW50cyBhcyBvdXIgRE9NIGVsZW1lbnRzIHRvIFBvcHBlclxyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclJlZiA9IG5ldyBQb3BwZXIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVmlld1JlZi5yb290Tm9kZXNbMF0sXHJcbiAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BwZXJPcHRpb25zKTtcclxuXHJcblxyXG4gICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclN0YXR1c0NoYW5nZS5lbWl0KCd2aXNpYmxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGVzIHRoZSB0ZW1wbGF0ZVJlZlxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxDbG9zZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbENsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ2xvc2VTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wb3BwZXJSZWYgJiYgdGhpcy5wb3B1cFZpZXdSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1cFZpZXdSZWYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9wcGVyUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclN0YXR1c0NoYW5nZS5lbWl0KCdoaWRkZW4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBwb3B1cCBjb250YWluZXIgcG9zaXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wb3BwZXJSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3BwZXJSZWYudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaXhQb3NpdGlvbihtaW5XaWR0aE5vbmU/OmJvb2xlYW4sIGFwcGVuZFRvQm9keT1mYWxzZSApOnZvaWQge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBpZih0aGlzLnBvcHBlclJlZiAmJiB0aGlzLnBvcHBlclJlZlsncmVmZXJlbmNlJ10gJiYgdGhpcy5wb3BwZXJSZWZbJ3BvcHBlciddKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgbGV0IHBvcHVwRWwgPSB0aGlzLnBvcHBlclJlZlsncG9wcGVyJ107XHJcblxyXG4gICAgICAgICAgICAvLyBSZXNldCB3aWR0aCBzdHlsZSBwcmV2aW91c2x5IGFzc2lnbmVkIGJlY2F1c2UgdGhlIGNvbnRlbnQgbWF5IGhhdmVcclxuICAgICAgICAgICAgLy8gY2hhbmdlZCBhbmQgdGhlIGF1dG8gd2lkdGggd291bGQgYmUgZGlmZmVyZW50XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUocG9wdXBFbCwgJ3dpZHRoJyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvcHVwRWwsICdwb3NpdGlvbicsICdmaXhlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcGVuZFRvQm9keSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUVsID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3B1cFBhcmVudCA9IHRoaXMucmVuZGVyZXIucGFyZW50Tm9kZShwb3B1cEVsKTtcclxuICAgICAgICAgICAgICAgIGlmIChwb3B1cFBhcmVudCAhPT0gYm9keUVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChib2R5RWwsIHBvcHVwRWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGxldCB0b2dnbGVFbCA9IHRoaXMucG9wcGVyUmVmWydyZWZlcmVuY2UnXTtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gcG9wdXBFbC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgbGV0IGJvdW5kYXJpZXMgPSBwb3B1cEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgbGVmdDpudW1iZXIgPSBib3VuZGFyaWVzLmxlZnQ7XHJcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSB0b2dnbGVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdG9wIG9mIG91ciBtZW51IHRvIHRoZSBib3R0b20gb2YgdGhlIHRvZ2dsZSBlbGVtZW50XHJcbiAgICAgICAgICAgIGxldCB0b3A6bnVtYmVyID0gY29vcmRzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcHBlck9wdGlvbnMgJiYgdGhpcy5wb3BwZXJPcHRpb25zLnBsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPT09ICdib3R0b20tc3RhcnQnIHx8IHRoaXMucG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPT09ICd0b3Atc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNvb3Jkcy5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY29vcmRzLnJpZ2h0IC0gKChtaW5XaWR0aE5vbmUgfHwgd2lkdGggPiBjb29yZHMud2lkdGgpID8gd2lkdGggOiBjb29yZHMud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBpdCB3b24ndCBmaXQgKHdpdGggMTBweCBzcGFjZSBiZWZvcmUgaGl0dGluZyB0aGUgd2luZG93IGVkZ2UpLCBmbGlwIGl0XHJcbiAgICAgICAgICAgIGlmIChib3VuZGFyaWVzLmhlaWdodCArIHRvcCArIDEwID4gd2luZG93LmlubmVySGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0b3AgPSBjb29yZHMudG9wIC0gYm91bmRhcmllcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ3RyYW5zZm9ybScsICdub25lJyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ2xlZnQnLCBsZWZ0ICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ3RvcCcsIHRvcCArICdweCcpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvcHVwRWwsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1pbldpZHRoTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwb3B1cEVsLCAnbWluLXdpZHRoJywgY29vcmRzLndpZHRoICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,50 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { DateTimeHelper } from '../../../core/date-time-helper';
3
+ import moment from 'moment';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../user-preference.service";
6
+ /**
7
+ * Format a date to the user's preference for display
8
+ */
9
+ export class DateDisplayPipe {
10
+ constructor(userPreferenceService) {
11
+ this.userPreferenceService = userPreferenceService;
12
+ this.lastFormatString = 'MM/DD/YYYY';
13
+ }
14
+ /**
15
+ * Format a date for display, accounting for user's display preferences.
16
+ *
17
+ * If {@see date} is null or undefined, or the end of time, returns empty string
18
+ */
19
+ transform(date, showEndOfTime, showTime, showSeconds) {
20
+ let display = '';
21
+ let formatString = '';
22
+ if (date && moment(date).isValid() && (showEndOfTime || !DateTimeHelper.isEndOfTime(date))) {
23
+ // use user-preferred formats
24
+ this.userPreferenceService.getPreferences().subscribe(result => {
25
+ //if preferences exist then format date to users preference
26
+ //otherwise use the last user preference
27
+ if (result.preference) {
28
+ formatString = result.preference.dateFormat;
29
+ if (showTime) {
30
+ let timeFormat = result.preference.timeFormat;
31
+ if (!showSeconds) {
32
+ timeFormat = timeFormat.replace(':ss', '');
33
+ }
34
+ formatString += ` ${timeFormat}`;
35
+ }
36
+ this.lastFormatString = formatString;
37
+ }
38
+ });
39
+ display = moment(date).format(this.lastFormatString);
40
+ }
41
+ return display;
42
+ }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateDisplayPipe, deps: [{ token: i1.UserPreferenceService }], target: i0.ɵɵFactoryTarget.Pipe }); }
44
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DateDisplayPipe, name: "dateDisplay" }); }
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateDisplayPipe, decorators: [{
47
+ type: Pipe,
48
+ args: [{ name: 'dateDisplay' }]
49
+ }], ctorParameters: () => [{ type: i1.UserPreferenceService }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kaXNwbGF5LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2Rpc3BsYXkvcGlwZXMvZGF0ZS1kaXNwbGF5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBSTVCOztHQUVHO0FBRUgsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBb0IscUJBQTRDO1FBQTVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFFeEQscUJBQWdCLEdBQVcsWUFBWSxDQUFDO0lBRm9CLENBQUM7SUFJckU7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFrQixFQUFFLGFBQXVCLEVBQUUsUUFBa0IsRUFBRSxXQUFxQjtRQUM5RixJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTlCLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRTNGLDZCQUE2QjtZQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUU3RCw0REFBNEQ7Z0JBQzVELHdDQUF3QztnQkFDeEMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3RCLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVyxDQUFDLFVBQVcsQ0FBQztvQkFDOUMsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDYixJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVyxDQUFDLFVBQVcsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNqQixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzdDLENBQUM7d0JBQ0QsWUFBWSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ25DLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBckNVLGVBQWU7NkdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsSUFBSTttQkFBQyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kYXRlLXRpbWUtaGVscGVyJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBEYXRlRGlzcGxheSA9IERhdGUgfCBtb21lbnQuTW9tZW50IHwgc3RyaW5nIHwgbnVsbDtcclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgYSBkYXRlIHRvIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZSBmb3IgZGlzcGxheVxyXG4gKi9cclxuQFBpcGUoe25hbWU6ICdkYXRlRGlzcGxheSd9KVxyXG5leHBvcnQgY2xhc3MgRGF0ZURpc3BsYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZVNlcnZpY2UpIHsgfVxyXG5cclxuICBwcml2YXRlIGxhc3RGb3JtYXRTdHJpbmc6IHN0cmluZyA9ICdNTS9ERC9ZWVlZJztcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGEgZGF0ZSBmb3IgZGlzcGxheSwgYWNjb3VudGluZyBmb3IgdXNlcidzIGRpc3BsYXkgcHJlZmVyZW5jZXMuXHJcbiAgICogXHJcbiAgICogSWYge0BzZWUgZGF0ZX0gaXMgbnVsbCBvciB1bmRlZmluZWQsIG9yIHRoZSBlbmQgb2YgdGltZSwgcmV0dXJucyBlbXB0eSBzdHJpbmdcclxuICAgKi9cclxuICB0cmFuc2Zvcm0oZGF0ZT86IERhdGVEaXNwbGF5LCBzaG93RW5kT2ZUaW1lPzogYm9vbGVhbiwgc2hvd1RpbWU/OiBib29sZWFuLCBzaG93U2Vjb25kcz86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IGZvcm1hdFN0cmluZzogc3RyaW5nID0gJyc7XHJcbiAgICBcclxuICAgIGlmIChkYXRlICYmIG1vbWVudChkYXRlKS5pc1ZhbGlkKCkgJiYgKHNob3dFbmRPZlRpbWUgfHwgIURhdGVUaW1lSGVscGVyLmlzRW5kT2ZUaW1lKGRhdGUpKSkge1xyXG5cclxuICAgICAgLy8gdXNlIHVzZXItcHJlZmVycmVkIGZvcm1hdHNcclxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuZ2V0UHJlZmVyZW5jZXMoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgLy9pZiBwcmVmZXJlbmNlcyBleGlzdCB0aGVuIGZvcm1hdCBkYXRlIHRvIHVzZXJzIHByZWZlcmVuY2UgXHJcbiAgICAgICAgLy9vdGhlcndpc2UgdXNlIHRoZSBsYXN0IHVzZXIgcHJlZmVyZW5jZVxyXG4gICAgICAgIGlmIChyZXN1bHQucHJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgZm9ybWF0U3RyaW5nID0gcmVzdWx0LnByZWZlcmVuY2UhLmRhdGVGb3JtYXQhO1xyXG4gICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lRm9ybWF0OiBzdHJpbmcgPSByZXN1bHQucHJlZmVyZW5jZSEudGltZUZvcm1hdCE7XHJcbiAgICAgICAgICAgIGlmICghc2hvd1NlY29uZHMpIHtcclxuICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gdGltZUZvcm1hdC5yZXBsYWNlKCc6c3MnLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybWF0U3RyaW5nICs9IGAgJHt0aW1lRm9ybWF0fWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxhc3RGb3JtYXRTdHJpbmcgPSBmb3JtYXRTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgZGlzcGxheSA9IG1vbWVudChkYXRlKS5mb3JtYXQodGhpcy5sYXN0Rm9ybWF0U3RyaW5nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkaXNwbGF5O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,30 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class HighlightTextPipe {
4
+ transform(value, searchText) {
5
+ let transformedValue = '';
6
+ if (value && searchText) {
7
+ const regex = new RegExp(this.escapeRegex(searchText), 'gi');
8
+ transformedValue = value.replace(regex, this.strongWrap);
9
+ }
10
+ else {
11
+ transformedValue = value;
12
+ }
13
+ return transformedValue;
14
+ }
15
+ strongWrap(match) {
16
+ return `<strong class="text-highlight">${match}</strong>`;
17
+ }
18
+ escapeRegex(value) {
19
+ return value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
22
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: HighlightTextPipe, name: "highlightText" }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighlightTextPipe, decorators: [{
25
+ type: Pipe,
26
+ args: [{
27
+ name: 'highlightText'
28
+ }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRleHQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvZGlzcGxheS9waXBlcy9oaWdobGlnaHQtdGV4dC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7UUFDekMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RCxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sa0NBQWtDLEtBQUssV0FBVyxDQUFDO0lBQzVELENBQUM7SUFFTyxXQUFXLENBQUMsS0FBYTtRQUMvQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQzsrR0FwQlUsaUJBQWlCOzZHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBSDdCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGVBQWU7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdoaWdobGlnaHRUZXh0J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0VGV4dFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIHNlYXJjaFRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRWYWx1ZSA9ICcnO1xyXG4gICAgaWYgKHZhbHVlICYmIHNlYXJjaFRleHQpIHtcclxuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuZXNjYXBlUmVnZXgoc2VhcmNoVGV4dCksICdnaScpO1xyXG4gICAgICB0cmFuc2Zvcm1lZFZhbHVlID0gdmFsdWUucmVwbGFjZShyZWdleCwgdGhpcy5zdHJvbmdXcmFwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZm9ybWVkVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Ryb25nV3JhcChtYXRjaDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LWhpZ2hsaWdodFwiPiR7bWF0Y2h9PC9zdHJvbmc+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXNjYXBlUmVnZXgodmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,62 @@
1
+ import { Pipe } from '@angular/core';
2
+ import moment from 'moment';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./date-display.pipe";
5
+ import * as i2 from "./time-display.pipe";
6
+ import * as i3 from "@ngx-translate/core";
7
+ export class RelativeDatePipe {
8
+ constructor(dateDisplayPipe, timeDisplayPipe, translateService) {
9
+ this.dateDisplayPipe = dateDisplayPipe;
10
+ this.timeDisplayPipe = timeDisplayPipe;
11
+ this.translateService = translateService;
12
+ }
13
+ /**
14
+ * If dateOnly is true, returns timeSelected formatted according to the user's date preference.
15
+ * If dateOnly is true and showTimeForToday is false and timeSelected is today, returns 'today' or todayLabel
16
+ * If dateOnly and showTimeForToday is true and timeSelected is today, returns timeSelected formatted according to the user's time preference.
17
+ * If dateOnly is false, returns timeSelected formatted according to the user's time preference.
18
+ * If dateOnly is false and timeSelected is not today/yesterday, returns timeSelected formatted according to the user's date plus time preference.
19
+ * If any of todayLabel, yesterdayLabel is supplied, use the supplied label.
20
+ */
21
+ transform(timeSelected, options) {
22
+ const selected = moment(timeSelected);
23
+ const today = moment();
24
+ const yesterday = moment().subtract(1, 'day');
25
+ const timeDisplay = options?.dateOnly ? `` : ` ${this.timeDisplayPipe.transform(timeSelected)}`;
26
+ let displayValue = null;
27
+ let prefixValue = '';
28
+ if (selected.isSame(today, 'day') && !options?.showTimeForToday) {
29
+ displayValue = this.translateService.instant(options?.todayLabel ? options?.todayLabel : 'today');
30
+ prefixValue = options?.todayPrefix ?? '';
31
+ }
32
+ else if (selected.isSame(today, 'day') && options?.showTimeForToday && !timeDisplay) {
33
+ displayValue = this.timeDisplayPipe.transform(timeSelected);
34
+ prefixValue = options?.todayTimePrefix ?? '';
35
+ }
36
+ else if (selected.isSame(yesterday, 'day')) {
37
+ displayValue = this.translateService.instant(options?.yesterdayLabel ? options?.yesterdayLabel : 'yesterday');
38
+ prefixValue = options?.yesterdayPrefix ?? '';
39
+ }
40
+ else {
41
+ displayValue = this.dateDisplayPipe.transform(timeSelected);
42
+ }
43
+ // If we have a default prefix and no specific ones were set earlier apply the default prefix
44
+ if (options?.defaultPrefix && prefixValue === '') {
45
+ prefixValue = options.defaultPrefix;
46
+ }
47
+ // Add a space after our prefix if defined
48
+ if (prefixValue !== '') {
49
+ prefixValue = `${prefixValue} `;
50
+ }
51
+ return `${prefixValue}${displayValue}${timeDisplay}`;
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RelativeDatePipe, deps: [{ token: i1.DateDisplayPipe }, { token: i2.TimeDisplayPipe }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
54
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: RelativeDatePipe, name: "relativeDate" }); }
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RelativeDatePipe, decorators: [{
57
+ type: Pipe,
58
+ args: [{
59
+ name: 'relativeDate'
60
+ }]
61
+ }], ctorParameters: () => [{ type: i1.DateDisplayPipe }, { type: i2.TimeDisplayPipe }, { type: i3.TranslateService }] });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmUtZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC9kaXNwbGF5L3BpcGVzL3JlbGF0aXZlLWRhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7Ozs7O0FBMEI1QixNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBRmxDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUN4QyxDQUFDO0lBRUw7Ozs7Ozs7T0FPRztJQUNILFNBQVMsQ0FDUCxZQUFvQixFQUNwQixPQUE2QjtRQUU3QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUVoRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXJCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDM0MsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLGdCQUFnQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEYsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVELFdBQVcsR0FBRyxPQUFPLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQTtRQUM5QyxDQUFDO2FBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlHLFdBQVcsR0FBRyxPQUFPLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsNkZBQTZGO1FBQzdGLElBQUksT0FBTyxFQUFFLGFBQWEsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakQsV0FBVyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDdEMsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QixXQUFXLEdBQUcsR0FBRyxXQUFXLEdBQUcsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxHQUFHLFdBQVcsR0FBRyxZQUFZLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDdkQsQ0FBQzsrR0FwRFUsZ0JBQWdCOzZHQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBSDVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgRGF0ZURpc3BsYXlQaXBlIH0gZnJvbSAnLi9kYXRlLWRpc3BsYXkucGlwZSc7XHJcbmltcG9ydCB7IFRpbWVEaXNwbGF5UGlwZSB9IGZyb20gJy4vdGltZS1kaXNwbGF5LnBpcGUnO1xyXG5cclxuZXhwb3J0IHR5cGUgUmVsYXRpdmVEYXRlT3B0aW9ucyA9IHtcclxuICBkYXRlT25seT86IGJvb2xlYW4sIFxyXG4gIHNob3dUaW1lRm9yVG9kYXk/IDogYm9vbGVhbixcclxuICB0b2RheUxhYmVsPzogc3RyaW5nLCBcclxuICB5ZXN0ZXJkYXlMYWJlbD86IHN0cmluZywgXHJcblxyXG4gIC8qKiBQcmVmaXggZm9yIHdoZW4gc2hvd2luZyB0b2RheSBhcyB0aW1lIGZvciB0aGUgdmFsdWUgKi9cclxuICB0b2RheVRpbWVQcmVmaXg/OiBzdHJpbmcsXHJcblxyXG4gIC8qKiBQcmVmaXggZm9yIHdoZW4gZGlzcGxheWluZyBcInRvZGF5XCIgYXMgdGhlIHZhbHVlICovXHJcbiAgdG9kYXlQcmVmaXg/OiBzdHJpbmcsXHJcblxyXG4gIC8qKiBQcmVmaXggZm9yIHdoZW4gZGlzcGxheWluZyBcInllc3RlcmRheVwiIGFzIHRoZSB2YWx1ZSAqL1xyXG4gIHllc3RlcmRheVByZWZpeD86IHN0cmluZyxcclxuXHJcbiAgLyoqIERlZmF1bHQgcHJlZml4LiBXaWxsIGJlIGFwcGxpZWQgdG8gYWxsIGRpc3BsYXkgb3B0aW9ucyBpZiBkZWZpbmVkIGFuZCBvdGhlcnMgYXJlIG5vdCAqL1xyXG4gIGRlZmF1bHRQcmVmaXg/OiBzdHJpbmdcclxufVxyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdyZWxhdGl2ZURhdGUnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZURhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZSwgXHJcbiAgICBwcml2YXRlIHRpbWVEaXNwbGF5UGlwZTogVGltZURpc3BsYXlQaXBlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGF0ZU9ubHkgaXMgdHJ1ZSwgcmV0dXJucyB0aW1lU2VsZWN0ZWQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgdXNlcidzIGRhdGUgcHJlZmVyZW5jZS5cclxuICAgKiBJZiBkYXRlT25seSBpcyB0cnVlIGFuZCBzaG93VGltZUZvclRvZGF5IGlzIGZhbHNlIGFuZCB0aW1lU2VsZWN0ZWQgaXMgdG9kYXksIHJldHVybnMgJ3RvZGF5JyBvciB0b2RheUxhYmVsXHJcbiAgICogSWYgZGF0ZU9ubHkgYW5kIHNob3dUaW1lRm9yVG9kYXkgaXMgdHJ1ZSBhbmQgdGltZVNlbGVjdGVkIGlzIHRvZGF5LCByZXR1cm5zIHRpbWVTZWxlY3RlZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MgdGltZSBwcmVmZXJlbmNlLlxyXG4gICAqIElmIGRhdGVPbmx5IGlzIGZhbHNlLCByZXR1cm5zIHRpbWVTZWxlY3RlZCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MgdGltZSBwcmVmZXJlbmNlLlxyXG4gICAqIElmIGRhdGVPbmx5IGlzIGZhbHNlIGFuZCB0aW1lU2VsZWN0ZWQgaXMgbm90IHRvZGF5L3llc3RlcmRheSwgcmV0dXJucyB0aW1lU2VsZWN0ZWQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgdXNlcidzIGRhdGUgcGx1cyB0aW1lIHByZWZlcmVuY2UuXHJcbiAgICogSWYgYW55IG9mIHRvZGF5TGFiZWwsIHllc3RlcmRheUxhYmVsIGlzIHN1cHBsaWVkLCB1c2UgdGhlIHN1cHBsaWVkIGxhYmVsLlxyXG4gICAqL1xyXG4gIHRyYW5zZm9ybShcclxuICAgIHRpbWVTZWxlY3RlZDogc3RyaW5nLCBcclxuICAgIG9wdGlvbnM/OiBSZWxhdGl2ZURhdGVPcHRpb25zXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gbW9tZW50KHRpbWVTZWxlY3RlZCk7XHJcbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xyXG4gICAgY29uc3QgeWVzdGVyZGF5ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpO1xyXG4gICAgY29uc3QgdGltZURpc3BsYXkgPSBvcHRpb25zPy5kYXRlT25seSA/IGBgIDogYCAke3RoaXMudGltZURpc3BsYXlQaXBlLnRyYW5zZm9ybSh0aW1lU2VsZWN0ZWQpfWA7XHJcblxyXG4gICAgbGV0IGRpc3BsYXlWYWx1ZSA9IG51bGw7XHJcbiAgICBsZXQgcHJlZml4VmFsdWUgPSAnJztcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQuaXNTYW1lKHRvZGF5LCAnZGF5JykgJiYgIW9wdGlvbnM/LnNob3dUaW1lRm9yVG9kYXkpIHtcclxuICAgICAgZGlzcGxheVZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQob3B0aW9ucz8udG9kYXlMYWJlbCA/IG9wdGlvbnM/LnRvZGF5TGFiZWwgOiAndG9kYXknKTtcclxuICAgICAgcHJlZml4VmFsdWUgPSBvcHRpb25zPy50b2RheVByZWZpeCA/PyAnJztcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQuaXNTYW1lKHRvZGF5LCAnZGF5JykgJiYgb3B0aW9ucz8uc2hvd1RpbWVGb3JUb2RheSAmJiAhdGltZURpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheVZhbHVlID0gdGhpcy50aW1lRGlzcGxheVBpcGUudHJhbnNmb3JtKHRpbWVTZWxlY3RlZCk7XHJcbiAgICAgIHByZWZpeFZhbHVlID0gb3B0aW9ucz8udG9kYXlUaW1lUHJlZml4ID8/ICcnXHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkLmlzU2FtZSh5ZXN0ZXJkYXksICdkYXknKSkge1xyXG4gICAgICBkaXNwbGF5VmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChvcHRpb25zPy55ZXN0ZXJkYXlMYWJlbCA/IG9wdGlvbnM/Lnllc3RlcmRheUxhYmVsIDogJ3llc3RlcmRheScpO1xyXG4gICAgICBwcmVmaXhWYWx1ZSA9IG9wdGlvbnM/Lnllc3RlcmRheVByZWZpeCA/PyAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpc3BsYXlWYWx1ZSA9IHRoaXMuZGF0ZURpc3BsYXlQaXBlLnRyYW5zZm9ybSh0aW1lU2VsZWN0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlIGhhdmUgYSBkZWZhdWx0IHByZWZpeCBhbmQgbm8gc3BlY2lmaWMgb25lcyB3ZXJlIHNldCBlYXJsaWVyIGFwcGx5IHRoZSBkZWZhdWx0IHByZWZpeFxyXG4gICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRQcmVmaXggJiYgcHJlZml4VmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHByZWZpeFZhbHVlID0gb3B0aW9ucy5kZWZhdWx0UHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBhIHNwYWNlIGFmdGVyIG91ciBwcmVmaXggaWYgZGVmaW5lZFxyXG4gICAgaWYgKHByZWZpeFZhbHVlICE9PSAnJykge1xyXG4gICAgICBwcmVmaXhWYWx1ZSA9IGAke3ByZWZpeFZhbHVlfSBgO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gYCR7cHJlZml4VmFsdWV9JHtkaXNwbGF5VmFsdWV9JHt0aW1lRGlzcGxheX1gO1xyXG4gIH1cclxufVxyXG4iXX0=