@onemrvapublic/design-system 18.2.25 → 18.3.0-develop.2

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 (439) hide show
  1. package/_index.scss +0 -1
  2. package/_utils.scss +3 -3
  3. package/fesm2022/onemrvapublic-design-system-core.mjs +7 -7
  4. package/fesm2022/onemrvapublic-design-system-core.mjs.map +1 -1
  5. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +3 -3
  6. package/fesm2022/onemrvapublic-design-system-flag-icon.mjs.map +1 -1
  7. package/fesm2022/onemrvapublic-design-system-layout.mjs +188 -97
  8. package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
  9. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +11 -11
  10. package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs.map +1 -1
  11. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +27 -18
  12. package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +6 -6
  14. package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
  15. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +3 -3
  16. package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs.map +1 -1
  17. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +3 -3
  18. package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs.map +1 -1
  19. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +3 -3
  20. package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs.map +1 -1
  21. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +107 -86
  22. package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs.map +1 -1
  23. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +6 -6
  24. package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs.map +1 -1
  25. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +3 -3
  26. package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs.map +1 -1
  27. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +3 -3
  28. package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs.map +1 -1
  29. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +26 -14
  30. package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs.map +1 -1
  31. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +6 -6
  32. package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs.map +1 -1
  33. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +10 -13
  34. package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs.map +1 -1
  35. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +31 -51
  36. package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs.map +1 -1
  37. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +3 -3
  38. package/fesm2022/onemrvapublic-design-system-mat-notification.mjs.map +1 -1
  39. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +24 -35
  40. package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs.map +1 -1
  41. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +28 -29
  42. package/fesm2022/onemrvapublic-design-system-mat-panel.mjs.map +1 -1
  43. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +20 -20
  44. package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs.map +1 -1
  45. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +3 -3
  46. package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs.map +1 -1
  47. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +48 -149
  48. package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs.map +1 -1
  49. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +21 -53
  50. package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs.map +1 -1
  51. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +14 -17
  52. package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs.map +1 -1
  53. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +11 -12
  54. package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs.map +1 -1
  55. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +12 -13
  56. package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs.map +1 -1
  57. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +16 -41
  58. package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs.map +1 -1
  59. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +11 -11
  60. package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs.map +1 -1
  61. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +9 -9
  62. package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs.map +1 -1
  63. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +26 -41
  64. package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs.map +1 -1
  65. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs +51 -64
  66. package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs.map +1 -1
  67. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +12 -12
  68. package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
  69. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +18 -18
  70. package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs.map +1 -1
  71. package/fesm2022/onemrvapublic-design-system-page-error.mjs +6 -6
  72. package/fesm2022/onemrvapublic-design-system-page-error.mjs.map +1 -1
  73. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +32 -26
  74. package/fesm2022/onemrvapublic-design-system-page-not-found.mjs.map +1 -1
  75. package/fesm2022/onemrvapublic-design-system-shared.mjs +70 -62
  76. package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
  77. package/layout/index.d.ts +5 -5
  78. package/layout/src/components/layout/_layout-mixin.component.scss +5 -5
  79. package/layout/src/components/layout/layout.component.d.ts +1 -1
  80. package/layout/src/components/layout/layout.component.scss +7 -0
  81. package/layout/src/components/layout-after-nav/layout-after-nav.component.d.ts +1 -1
  82. package/layout/src/components/layout-content/layout-content.component.d.ts +1 -1
  83. package/layout/src/components/layout-footer/layout-footer.component.d.ts +1 -1
  84. package/layout/src/components/layout-login-menu/layout-login-menu.component.d.ts +1 -1
  85. package/layout/src/components/layout-route/layout-route.component.d.ts +1 -1
  86. package/layout/src/components/layout-sidenav/layout-sidenav.component.d.ts +1 -1
  87. package/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.d.ts +1 -1
  88. package/layout/src/components/layout-subroute/layout-subroute.component.d.ts +1 -1
  89. package/layout/src/components/layout-title/layout-title.component.d.ts +1 -1
  90. package/layout/src/decorators/coerce-boolean-input.decorator.d.ts +1 -0
  91. package/layout/src/decorators/index.d.ts +2 -0
  92. package/layout/src/decorators/observable-content.decorator.d.ts +1 -0
  93. package/layout/src/directives/drawer-host.directive.d.ts +1 -1
  94. package/layout/src/directives/index.d.ts +2 -0
  95. package/layout/src/{striphtml.pipe.d.ts → directives/striphtml.pipe.d.ts} +1 -1
  96. package/layout/src/enums/index.d.ts +1 -0
  97. package/layout/src/layout.module.d.ts +3 -3
  98. package/layout/src/models/index.d.ts +2 -0
  99. package/layout/src/services/index.d.ts +1 -0
  100. package/mat-avatar/src/onemrva-mat-avatar.component.d.ts +1 -1
  101. package/mat-avatar/src/onemrva-mat-avatar.module.d.ts +1 -3
  102. package/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.d.ts +1 -1
  103. package/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.d.ts +5 -5
  104. package/mat-datepicker-header/src/_onemrva-mat-datepicker-header.component.scss +1 -1
  105. package/mat-file-upload/index.d.ts +1 -0
  106. package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.d.ts +1 -1
  107. package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.scss +3 -3
  108. package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.d.ts +1 -1
  109. package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.scss +2 -1
  110. package/mat-file-upload/src/directives/dnd.directive.d.ts +1 -1
  111. package/mat-file-upload/src/onemrva-mat-file-upload.module.d.ts +1 -1
  112. package/mat-input-iban/src/onemrva-mat-input-iban.component.d.ts +5 -3
  113. package/mat-message-box/src/onemrva-mat-message-box.component.d.ts +1 -1
  114. package/mat-message-box/src/onemrva-mat-message-box.module.d.ts +1 -4
  115. package/mat-multi-select/src/onemrva-mat-multi-select.component.d.ts +1 -1
  116. package/mat-multi-select/src/onemrva-mat-multi-select.module.d.ts +1 -9
  117. package/mat-paginator/src/onemrva-mat-paginator.component.d.ts +1 -1
  118. package/mat-paginator/src/onemrva-mat-paginator.module.d.ts +1 -6
  119. package/mat-panel/src/onemrva-mat-panel-content.component.d.ts +1 -1
  120. package/mat-panel/src/onemrva-mat-panel-icon.component.d.ts +1 -1
  121. package/mat-panel/src/onemrva-mat-panel-title-action.component.d.ts +1 -1
  122. package/mat-panel/src/onemrva-mat-panel-title.component.d.ts +1 -1
  123. package/mat-panel/src/onemrva-mat-panel.component.d.ts +1 -1
  124. package/mat-panel/src/onemrva-mat-panel.module.d.ts +1 -2
  125. package/mat-pop-over/src/onemrva-mat-pop-over-content.component.d.ts +1 -1
  126. package/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.d.ts +1 -1
  127. package/mat-pop-over/src/onemrva-mat-pop-over.component.d.ts +1 -1
  128. package/mat-pop-over/src/onemrva-mat-pop-over.module.d.ts +1 -3
  129. package/mat-select-search/src/mat-select-no-entries-found.directive.d.ts +1 -1
  130. package/mat-select-search/src/mat-select-search-clear.directive.d.ts +1 -1
  131. package/mat-select-search/src/mat-select-search.component.d.ts +1 -79
  132. package/mat-select-search/src/mat-select-search.module.d.ts +1 -12
  133. package/mat-selectable-box/src/onemrva-mat-selectable-box.component.d.ts +1 -1
  134. package/mat-selectable-box/src/onemrva-mat-selectable-box.module.d.ts +1 -11
  135. package/mat-side-menu/src/onemrva-mat-side-menu.component.d.ts +1 -1
  136. package/mat-side-menu/src/onemrva-mat-side-menu.module.d.ts +1 -5
  137. package/mat-skeleton/src/onemrva-mat-skeleton.component.d.ts +1 -1
  138. package/mat-skeleton/src/onemrva-mat-skeleton.module.d.ts +1 -2
  139. package/mat-spinner/src/onemrva-mat-spinner.component.d.ts +1 -1
  140. package/mat-spinner/src/onemrva-mat-spinner.module.d.ts +1 -1
  141. package/mat-stepper/src/onemrva-mat-stepper.component.d.ts +1 -1
  142. package/mat-stepper/src/onemrva-mat-stepper.module.d.ts +2 -7
  143. package/mat-stepper/src/onemrva-mat-stepper.scss +1 -1
  144. package/mat-sticker/src/onemrva-mat-sticker.component.d.ts +1 -1
  145. package/mat-sticker/src/onemrva-mat-sticker.module.d.ts +1 -2
  146. package/mat-task-list/src/onemrva-mat-task-content.component.d.ts +1 -1
  147. package/mat-task-list/src/onemrva-mat-task-list.component.d.ts +1 -1
  148. package/mat-task-list/src/onemrva-mat-task-list.module.d.ts +1 -5
  149. package/mat-task-list/src/onemrva-mat-task-title.component.d.ts +1 -1
  150. package/mat-task-list/src/onemrva-mat-task.component.d.ts +1 -1
  151. package/mat-timepicker/src/clock/clock.component.d.ts +1 -1
  152. package/mat-timepicker/src/onemrva-mat-timepicker.component.d.ts +1 -1
  153. package/mat-timepicker/src/onemrva-mat-timepicker.module.d.ts +1 -7
  154. package/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.d.ts +1 -1
  155. package/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.d.ts +2 -2
  156. package/mat-timepicker/src/timepicker.directive.d.ts +1 -1
  157. package/mat-toast/src/onemrva-mat-toast.component.d.ts +1 -1
  158. package/mat-toast/src/onemrva-mat-toast.module.d.ts +2 -3
  159. package/mat-tooltip/src/onemrva-mat-tooltip.component.d.ts +1 -1
  160. package/mat-tooltip/src/onemrva-mat-tooltip.directive.d.ts +1 -1
  161. package/mat-tooltip/src/onemrva-mat-tooltip.module.d.ts +1 -2
  162. package/package.json +1 -85
  163. package/page-not-found/src/page-not-found-action.component.d.ts +1 -1
  164. package/page-not-found/src/page-not-found-extra.component.d.ts +1 -1
  165. package/page-not-found/src/page-not-found-invader.component.d.ts +1 -1
  166. package/page-not-found/src/page-not-found-mixin.component.scss +1 -1
  167. package/page-not-found/src/page-not-found.component.d.ts +1 -1
  168. package/page-not-found/src/page-not-found.module.d.ts +1 -3
  169. package/shared/src/lib/directives/clipboard.directive.d.ts +1 -1
  170. package/shared/src/lib/directives/color.directive.d.ts +1 -1
  171. package/shared/src/lib/directives/digit-only.directive.d.ts +1 -1
  172. package/shared/src/lib/directives/iconRight.directive.d.ts +1 -1
  173. package/shared/src/lib/directives/if-width-is.directive.d.ts +1 -1
  174. package/shared/src/lib/directives/mask.directive.d.ts +1 -1
  175. package/shared/src/lib/directives/mat-row-clickable.directive.d.ts +1 -1
  176. package/shared/src/lib/shared.module.d.ts +1 -2
  177. package/esm2022/core/index.mjs +0 -4
  178. package/esm2022/core/onemrvapublic-design-system-core.mjs +0 -5
  179. package/esm2022/core/src/lib/core.module.mjs +0 -39
  180. package/esm2022/core/src/lib/services/index.mjs +0 -3
  181. package/esm2022/core/src/lib/services/onemrva-error-handler.service.mjs +0 -26
  182. package/esm2022/core/src/lib/services/onemrva-missing-translation.service.mjs +0 -6
  183. package/esm2022/flag-icon/index.mjs +0 -2
  184. package/esm2022/flag-icon/onemrvapublic-design-system-flag-icon.mjs +0 -5
  185. package/esm2022/flag-icon/src/flag-icon.component.mjs +0 -41
  186. package/esm2022/layout/index.mjs +0 -8
  187. package/esm2022/layout/onemrvapublic-design-system-layout.mjs +0 -5
  188. package/esm2022/layout/src/components/index.mjs +0 -36
  189. package/esm2022/layout/src/components/layout/layout.component.mjs +0 -177
  190. package/esm2022/layout/src/components/layout-after-nav/layout-after-nav.component.mjs +0 -25
  191. package/esm2022/layout/src/components/layout-content/layout-content.component.mjs +0 -25
  192. package/esm2022/layout/src/components/layout-drawer-actions/layout-drawer-actions.component.mjs +0 -16
  193. package/esm2022/layout/src/components/layout-drawer-content/layout-drawer-content.component.mjs +0 -16
  194. package/esm2022/layout/src/components/layout-drawer-title/layout-drawer-title.component.mjs +0 -20
  195. package/esm2022/layout/src/components/layout-footer/layout-footer.component.mjs +0 -17
  196. package/esm2022/layout/src/components/layout-login-menu/layout-login-menu.component.mjs +0 -25
  197. package/esm2022/layout/src/components/layout-route/layout-route.component.mjs +0 -65
  198. package/esm2022/layout/src/components/layout-sidenav/layout-sidenav.component.mjs +0 -83
  199. package/esm2022/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.mjs +0 -17
  200. package/esm2022/layout/src/components/layout-subroute/layout-subroute.component.mjs +0 -55
  201. package/esm2022/layout/src/components/layout-title/layout-title.component.mjs +0 -25
  202. package/esm2022/layout/src/directives/drawer-host.directive.mjs +0 -41
  203. package/esm2022/layout/src/enums/environment.enum.mjs +0 -8
  204. package/esm2022/layout/src/layout.module.mjs +0 -95
  205. package/esm2022/layout/src/models/onem-language.model.mjs +0 -2
  206. package/esm2022/layout/src/models/onemrva-profile.model.mjs +0 -46
  207. package/esm2022/layout/src/services/drawer.service.mjs +0 -31
  208. package/esm2022/layout/src/striphtml.pipe.mjs +0 -16
  209. package/esm2022/mat-avatar/index.mjs +0 -3
  210. package/esm2022/mat-avatar/onemrvapublic-design-system-mat-avatar.mjs +0 -5
  211. package/esm2022/mat-avatar/src/onemrva-mat-avatar.component.mjs +0 -440
  212. package/esm2022/mat-avatar/src/onemrva-mat-avatar.module.mjs +0 -19
  213. package/esm2022/mat-badge/index.mjs +0 -6
  214. package/esm2022/mat-badge/onemrvapublic-design-system-mat-badge.mjs +0 -5
  215. package/esm2022/mat-badge/src/onemrva-mat-badge.component.mjs +0 -250
  216. package/esm2022/mat-badge/src/onemrva-mat-badge.module.mjs +0 -16
  217. package/esm2022/mat-breadcrumb/index.mjs +0 -7
  218. package/esm2022/mat-breadcrumb/onemrvapublic-design-system-mat-breadcrumb.mjs +0 -5
  219. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.mjs +0 -19
  220. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.model.mjs +0 -2
  221. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.mjs +0 -20
  222. package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.service.mjs +0 -59
  223. package/esm2022/mat-carousel/index.mjs +0 -3
  224. package/esm2022/mat-carousel/onemrvapublic-design-system-mat-carousel.mjs +0 -5
  225. package/esm2022/mat-carousel/src/mat-carousel-item/onemrva-mat-carousel-item.component.mjs +0 -23
  226. package/esm2022/mat-carousel/src/onemrva-mat-carousel.component.mjs +0 -175
  227. package/esm2022/mat-copy-to-clipboard/index.mjs +0 -2
  228. package/esm2022/mat-copy-to-clipboard/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +0 -5
  229. package/esm2022/mat-copy-to-clipboard/src/components/copy-to-clipboard.component.mjs +0 -85
  230. package/esm2022/mat-datepicker-header/index.mjs +0 -5
  231. package/esm2022/mat-datepicker-header/onemrvapublic-design-system-mat-datepicker-header.mjs +0 -5
  232. package/esm2022/mat-datepicker-header/src/onemrva-mat-datepicker-header.component.mjs +0 -203
  233. package/esm2022/mat-empty-row/index.mjs +0 -2
  234. package/esm2022/mat-empty-row/onemrvapublic-design-system-mat-empty-row.mjs +0 -5
  235. package/esm2022/mat-empty-row/src/onemrva-mat-empty-row.component.mjs +0 -35
  236. package/esm2022/mat-file-upload/index.mjs +0 -11
  237. package/esm2022/mat-file-upload/onemrvapublic-design-system-mat-file-upload.mjs +0 -5
  238. package/esm2022/mat-file-upload/src/components/index.mjs +0 -9
  239. package/esm2022/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.mjs +0 -88
  240. package/esm2022/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.mjs +0 -195
  241. package/esm2022/mat-file-upload/src/directives/dnd.directive.mjs +0 -53
  242. package/esm2022/mat-file-upload/src/models/action-config.model.mjs +0 -2
  243. package/esm2022/mat-file-upload/src/models/progress-file.model.mjs +0 -49
  244. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload-itf.store.mjs +0 -2
  245. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.module.mjs +0 -51
  246. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.service.mjs +0 -49
  247. package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.store.mjs +0 -320
  248. package/esm2022/mat-input-birthplace/index.mjs +0 -5
  249. package/esm2022/mat-input-birthplace/onemrvapublic-design-system-mat-input-birthplace.mjs +0 -5
  250. package/esm2022/mat-input-birthplace/src/country-item.component.mjs +0 -31
  251. package/esm2022/mat-input-birthplace/src/onemrva-mat-input-birthplace.component.mjs +0 -120
  252. package/esm2022/mat-input-country/index.mjs +0 -5
  253. package/esm2022/mat-input-country/onemrvapublic-design-system-mat-input-country.mjs +0 -5
  254. package/esm2022/mat-input-country/src/onemrva-mat-input-country.component.mjs +0 -90
  255. package/esm2022/mat-input-enterprise-number/index.mjs +0 -5
  256. package/esm2022/mat-input-enterprise-number/onemrvapublic-design-system-mat-input-enterprise-number.mjs +0 -5
  257. package/esm2022/mat-input-enterprise-number/src/onemrva-mat-input-enterprise-number.component.mjs +0 -180
  258. package/esm2022/mat-input-iban/index.mjs +0 -5
  259. package/esm2022/mat-input-iban/onemrvapublic-design-system-mat-input-iban.mjs +0 -5
  260. package/esm2022/mat-input-iban/src/onemrva-mat-input-iban.component.mjs +0 -283
  261. package/esm2022/mat-input-phone/index.mjs +0 -6
  262. package/esm2022/mat-input-phone/onemrvapublic-design-system-mat-input-phone.mjs +0 -5
  263. package/esm2022/mat-input-phone/src/onemrva-mat-input-phone.component.mjs +0 -234
  264. package/esm2022/mat-input-phone/src/phone-number.directive.mjs +0 -51
  265. package/esm2022/mat-message-box/index.mjs +0 -3
  266. package/esm2022/mat-message-box/onemrvapublic-design-system-mat-message-box.mjs +0 -5
  267. package/esm2022/mat-message-box/src/onemrva-mat-message-box.component.mjs +0 -175
  268. package/esm2022/mat-message-box/src/onemrva-mat-message-box.module.mjs +0 -20
  269. package/esm2022/mat-multi-select/index.mjs +0 -3
  270. package/esm2022/mat-multi-select/onemrvapublic-design-system-mat-multi-select.mjs +0 -5
  271. package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.component.mjs +0 -200
  272. package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.module.mjs +0 -51
  273. package/esm2022/mat-notification/index.mjs +0 -2
  274. package/esm2022/mat-notification/onemrvapublic-design-system-mat-notification.mjs +0 -5
  275. package/esm2022/mat-notification/src/onemrva-mat-notification.component.mjs +0 -165
  276. package/esm2022/mat-paginator/index.mjs +0 -6
  277. package/esm2022/mat-paginator/onemrvapublic-design-system-mat-paginator.mjs +0 -5
  278. package/esm2022/mat-paginator/src/onemrva-mat-paginator.component.mjs +0 -217
  279. package/esm2022/mat-paginator/src/onemrva-mat-paginator.module.mjs +0 -36
  280. package/esm2022/mat-panel/index.mjs +0 -7
  281. package/esm2022/mat-panel/onemrvapublic-design-system-mat-panel.mjs +0 -5
  282. package/esm2022/mat-panel/src/onemrva-mat-panel-content.component.mjs +0 -17
  283. package/esm2022/mat-panel/src/onemrva-mat-panel-icon.component.mjs +0 -17
  284. package/esm2022/mat-panel/src/onemrva-mat-panel-title-action.component.mjs +0 -17
  285. package/esm2022/mat-panel/src/onemrva-mat-panel-title.component.mjs +0 -27
  286. package/esm2022/mat-panel/src/onemrva-mat-panel.component.mjs +0 -132
  287. package/esm2022/mat-panel/src/onemrva-mat-panel.module.mjs +0 -42
  288. package/esm2022/mat-pop-over/index.mjs +0 -5
  289. package/esm2022/mat-pop-over/onemrvapublic-design-system-mat-pop-over.mjs +0 -5
  290. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-content.component.mjs +0 -23
  291. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.mjs +0 -23
  292. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.component.mjs +0 -46
  293. package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.module.mjs +0 -30
  294. package/esm2022/mat-progress-bar/index.mjs +0 -2
  295. package/esm2022/mat-progress-bar/onemrvapublic-design-system-mat-progress-bar.mjs +0 -5
  296. package/esm2022/mat-progress-bar/src/onemrva-mat-progress-bar.component.mjs +0 -29
  297. package/esm2022/mat-select-search/index.mjs +0 -4
  298. package/esm2022/mat-select-search/onemrvapublic-design-system-mat-select-search.mjs +0 -5
  299. package/esm2022/mat-select-search/src/default-options.mjs +0 -35
  300. package/esm2022/mat-select-search/src/mat-select-no-entries-found.directive.mjs +0 -22
  301. package/esm2022/mat-select-search/src/mat-select-search-clear.directive.mjs +0 -20
  302. package/esm2022/mat-select-search/src/mat-select-search.component.mjs +0 -589
  303. package/esm2022/mat-select-search/src/mat-select-search.module.mjs +0 -79
  304. package/esm2022/mat-selectable-box/index.mjs +0 -6
  305. package/esm2022/mat-selectable-box/onemrvapublic-design-system-mat-selectable-box.mjs +0 -5
  306. package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.component.mjs +0 -56
  307. package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.module.mjs +0 -56
  308. package/esm2022/mat-side-menu/index.mjs +0 -6
  309. package/esm2022/mat-side-menu/onemrvapublic-design-system-mat-side-menu.mjs +0 -5
  310. package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.component.mjs +0 -48
  311. package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.module.mjs +0 -21
  312. package/esm2022/mat-skeleton/index.mjs +0 -4
  313. package/esm2022/mat-skeleton/onemrvapublic-design-system-mat-skeleton.mjs +0 -5
  314. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton-enums.mjs +0 -20
  315. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.component.mjs +0 -202
  316. package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.module.mjs +0 -18
  317. package/esm2022/mat-spinner/index.mjs +0 -7
  318. package/esm2022/mat-spinner/onemrvapublic-design-system-mat-spinner.mjs +0 -5
  319. package/esm2022/mat-spinner/src/onemrva-mat-loading.directive.mjs +0 -33
  320. package/esm2022/mat-spinner/src/onemrva-mat-spinner.component.mjs +0 -73
  321. package/esm2022/mat-spinner/src/onemrva-mat-spinner.module.mjs +0 -18
  322. package/esm2022/mat-stepper/index.mjs +0 -6
  323. package/esm2022/mat-stepper/onemrvapublic-design-system-mat-stepper.mjs +0 -5
  324. package/esm2022/mat-stepper/src/onemrva-mat-stepper.component.mjs +0 -74
  325. package/esm2022/mat-stepper/src/onemrva-mat-stepper.module.mjs +0 -44
  326. package/esm2022/mat-stepper/src/onemrva-stepper-animations.mjs +0 -28
  327. package/esm2022/mat-sticker/index.mjs +0 -6
  328. package/esm2022/mat-sticker/onemrvapublic-design-system-mat-sticker.mjs +0 -5
  329. package/esm2022/mat-sticker/src/onemrva-mat-sticker.component.mjs +0 -69
  330. package/esm2022/mat-sticker/src/onemrva-mat-sticker.module.mjs +0 -18
  331. package/esm2022/mat-table-of-content/index.mjs +0 -8
  332. package/esm2022/mat-table-of-content/onemrvapublic-design-system-mat-table-of-content.mjs +0 -5
  333. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.component.mjs +0 -104
  334. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.directive.mjs +0 -60
  335. package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.service.mjs +0 -46
  336. package/esm2022/mat-table-of-content/src/onemrva-mat-toc-anchor.model.mjs +0 -11
  337. package/esm2022/mat-task-list/index.mjs +0 -6
  338. package/esm2022/mat-task-list/onemrvapublic-design-system-mat-task-list.mjs +0 -5
  339. package/esm2022/mat-task-list/src/onemrva-mat-task-content.component.mjs +0 -17
  340. package/esm2022/mat-task-list/src/onemrva-mat-task-list.component.mjs +0 -36
  341. package/esm2022/mat-task-list/src/onemrva-mat-task-list.module.mjs +0 -51
  342. package/esm2022/mat-task-list/src/onemrva-mat-task-title.component.mjs +0 -23
  343. package/esm2022/mat-task-list/src/onemrva-mat-task.component.mjs +0 -140
  344. package/esm2022/mat-timepicker/index.mjs +0 -7
  345. package/esm2022/mat-timepicker/onemrvapublic-design-system-mat-timepicker.mjs +0 -5
  346. package/esm2022/mat-timepicker/src/clock/clock.component.mjs +0 -232
  347. package/esm2022/mat-timepicker/src/interfaces-and-types.mjs +0 -2
  348. package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.component.mjs +0 -279
  349. package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.module.mjs +0 -62
  350. package/esm2022/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.mjs +0 -129
  351. package/esm2022/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.mjs +0 -115
  352. package/esm2022/mat-timepicker/src/timepicker.directive.mjs +0 -512
  353. package/esm2022/mat-timepicker/src/util.mjs +0 -83
  354. package/esm2022/mat-toast/index.mjs +0 -6
  355. package/esm2022/mat-toast/onemrvapublic-design-system-mat-toast.mjs +0 -5
  356. package/esm2022/mat-toast/src/onemrva-mat-toast.component.mjs +0 -52
  357. package/esm2022/mat-toast/src/onemrva-mat-toast.module.mjs +0 -19
  358. package/esm2022/mat-tooltip/index.mjs +0 -5
  359. package/esm2022/mat-tooltip/onemrvapublic-design-system-mat-tooltip.mjs +0 -5
  360. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.component.mjs +0 -36
  361. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.directive.mjs +0 -111
  362. package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.module.mjs +0 -19
  363. package/esm2022/onemrvapublic-design-system.mjs +0 -5
  364. package/esm2022/page-error/index.mjs +0 -3
  365. package/esm2022/page-error/onemrvapublic-design-system-page-error.mjs +0 -5
  366. package/esm2022/page-error/src/page-error-action.component.mjs +0 -18
  367. package/esm2022/page-error/src/page-error.component.mjs +0 -61
  368. package/esm2022/page-not-found/index.mjs +0 -6
  369. package/esm2022/page-not-found/onemrvapublic-design-system-page-not-found.mjs +0 -5
  370. package/esm2022/page-not-found/src/page-not-found-action.component.mjs +0 -17
  371. package/esm2022/page-not-found/src/page-not-found-extra.component.mjs +0 -17
  372. package/esm2022/page-not-found/src/page-not-found-invader.component.mjs +0 -94
  373. package/esm2022/page-not-found/src/page-not-found.component.mjs +0 -54
  374. package/esm2022/page-not-found/src/page-not-found.module.mjs +0 -38
  375. package/esm2022/public-api.mjs +0 -5
  376. package/esm2022/shared/index.mjs +0 -19
  377. package/esm2022/shared/onemrvapublic-design-system-shared.mjs +0 -5
  378. package/esm2022/shared/src/lib/adapters/index.mjs +0 -3
  379. package/esm2022/shared/src/lib/adapters/luxon.date.adapter.mjs +0 -251
  380. package/esm2022/shared/src/lib/adapters/luxon.utils.mjs +0 -23
  381. package/esm2022/shared/src/lib/adapters/native.date.adapter.mjs +0 -66
  382. package/esm2022/shared/src/lib/components/clipboard-icon/clipboard-icon.component.mjs +0 -20
  383. package/esm2022/shared/src/lib/components/index.mjs +0 -2
  384. package/esm2022/shared/src/lib/constants/CDNUrlModeOptions.mjs +0 -6
  385. package/esm2022/shared/src/lib/constants/cdn.mjs +0 -3
  386. package/esm2022/shared/src/lib/constants/constants.mjs +0 -7
  387. package/esm2022/shared/src/lib/constants/date.format.mjs +0 -95
  388. package/esm2022/shared/src/lib/constants/index.mjs +0 -5
  389. package/esm2022/shared/src/lib/containers/WebComponentOverlayContainer.mjs +0 -84
  390. package/esm2022/shared/src/lib/containers/index.mjs +0 -2
  391. package/esm2022/shared/src/lib/decorators/HttpCacheDecorator.mjs +0 -123
  392. package/esm2022/shared/src/lib/decorators/index.mjs +0 -2
  393. package/esm2022/shared/src/lib/directives/clipboard.directive.mjs +0 -39
  394. package/esm2022/shared/src/lib/directives/color.directive.mjs +0 -64
  395. package/esm2022/shared/src/lib/directives/digit-only.directive.mjs +0 -52
  396. package/esm2022/shared/src/lib/directives/iconRight.directive.mjs +0 -22
  397. package/esm2022/shared/src/lib/directives/if-width-is.directive.mjs +0 -34
  398. package/esm2022/shared/src/lib/directives/index.mjs +0 -24
  399. package/esm2022/shared/src/lib/directives/mask.directive.mjs +0 -198
  400. package/esm2022/shared/src/lib/directives/mat-row-clickable.directive.mjs +0 -74
  401. package/esm2022/shared/src/lib/helpers/index.mjs +0 -2
  402. package/esm2022/shared/src/lib/helpers/translation-helper.mjs +0 -58
  403. package/esm2022/shared/src/lib/interfaces/OnemRvaCommonCountry.interface.mjs +0 -2
  404. package/esm2022/shared/src/lib/interfaces/index.mjs +0 -2
  405. package/esm2022/shared/src/lib/loaders/index.mjs +0 -3
  406. package/esm2022/shared/src/lib/loaders/onemrva-translate-cdn-loader.mjs +0 -15
  407. package/esm2022/shared/src/lib/loaders/onemrva-translate-http-loader.mjs +0 -30
  408. package/esm2022/shared/src/lib/pipes/index.mjs +0 -3
  409. package/esm2022/shared/src/lib/pipes/onemrva-bce.pipe.mjs +0 -20
  410. package/esm2022/shared/src/lib/pipes/onemrva-niss.pipe.mjs +0 -20
  411. package/esm2022/shared/src/lib/providers/index.mjs +0 -5
  412. package/esm2022/shared/src/lib/providers/onemrva.date.luxon.provider.mjs +0 -16
  413. package/esm2022/shared/src/lib/providers/onemrva.date.luxon.year.month.provider.mjs +0 -16
  414. package/esm2022/shared/src/lib/providers/onemrva.date.native.provider.mjs +0 -16
  415. package/esm2022/shared/src/lib/providers/onemrva.date.native.year.month.provider.mjs +0 -16
  416. package/esm2022/shared/src/lib/services/cache.service.mjs +0 -31
  417. package/esm2022/shared/src/lib/services/cdn.service.mjs +0 -105
  418. package/esm2022/shared/src/lib/services/country-cdn.service.mjs +0 -75
  419. package/esm2022/shared/src/lib/services/country-lookup.service.mjs +0 -43
  420. package/esm2022/shared/src/lib/services/index.mjs +0 -5
  421. package/esm2022/shared/src/lib/services/mime-cdn.service.mjs +0 -45
  422. package/esm2022/shared/src/lib/shared.module.mjs +0 -25
  423. package/esm2022/shared/src/lib/tokens/index.mjs +0 -2
  424. package/esm2022/shared/src/lib/tokens/lookup.token.mjs +0 -7
  425. package/esm2022/shared/src/lib/validators/bank-account.validator.utils.mjs +0 -56
  426. package/esm2022/shared/src/lib/validators/index.mjs +0 -3
  427. package/esm2022/shared/src/lib/validators/onemrva-validators.mjs +0 -75
  428. package/esm2022/utils/index.mjs +0 -3
  429. package/esm2022/utils/onemrvapublic-design-system-utils.mjs +0 -5
  430. package/esm2022/utils/src/enum.utils.mjs +0 -7
  431. package/esm2022/utils/src/enums/color.enum.mjs +0 -12
  432. package/esm2022/utils/src/enums/index.mjs +0 -3
  433. package/esm2022/utils/src/enums/size.enum.mjs +0 -9
  434. package/fesm2022/onemrvapublic-design-system-mat-badge.mjs +0 -274
  435. package/fesm2022/onemrvapublic-design-system-mat-badge.mjs.map +0 -1
  436. package/mat-badge/index.d.ts +0 -2
  437. package/mat-badge/src/onemrva-mat-badge.component.d.ts +0 -89
  438. package/mat-badge/src/onemrva-mat-badge.component.scss +0 -157
  439. package/mat-badge/src/onemrva-mat-badge.module.d.ts +0 -7
@@ -1,512 +0,0 @@
1
- import { Validators, } from '@angular/forms';
2
- import { Directive, EventEmitter, Input, Optional, HostBinding, Self, Output, HostListener, } from '@angular/core';
3
- import { MatFormFieldControl, } from '@angular/material/form-field';
4
- import { twoDigits, isAllowed, isDateInRange, isTimeInRange } from './util';
5
- import { Subject, Subscription } from 'rxjs';
6
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/forms";
9
- import * as i2 from "@angular/cdk/a11y";
10
- import * as i3 from "@angular/cdk/platform";
11
- import * as i4 from "@angular/material/form-field";
12
- import * as i5 from "@angular/material/core";
13
- export class MatTimepickerDirective {
14
- static { this.nextId = 0; }
15
- /** The datepicker that this input is associated with. */
16
- set matTimepicker(timepicker) {
17
- if (timepicker) {
18
- this._timepicker = timepicker;
19
- this._timepicker.setTimepickerInput(this);
20
- this._closedSubscription = timepicker.closedStream.subscribe(() => this._onTouched());
21
- //this._registerModel(datepicker.registerInput(this));
22
- }
23
- }
24
- get errorState() {
25
- const oldState = this._errorState;
26
- const parent = this._parentFormGroup || this._parentForm;
27
- const control = this.ngControl
28
- ? this.ngControl.control
29
- : null;
30
- const newState = this.errorStateMatcher
31
- ? this.errorStateMatcher.isErrorState(control, parent)
32
- : oldState;
33
- if (newState !== oldState) {
34
- this._errorState = newState;
35
- this.stateChanges.next();
36
- }
37
- return newState;
38
- }
39
- get disabled() {
40
- if (this.ngControl && this.ngControl.disabled !== null) {
41
- return this.ngControl.disabled;
42
- }
43
- return this._disabled;
44
- }
45
- set disabled(value) {
46
- this._disabled = coerceBooleanProperty(value);
47
- // Browsers may not fire the blur event if the input is disabled too quickly.
48
- // Reset from here to ensure that the element doesn't become stuck.
49
- if (this.focused) {
50
- this.focused = false;
51
- }
52
- this.stateChanges.next();
53
- }
54
- get id() {
55
- return this._id;
56
- }
57
- set id(value) {
58
- this._id = value || this._uid;
59
- }
60
- get readonly() {
61
- return this._readonly;
62
- }
63
- set readonly(value) {
64
- this._readonly = coerceBooleanProperty(value);
65
- }
66
- get shouldLabelFloat() {
67
- return this.focused || !this.empty;
68
- }
69
- get required() {
70
- if (this.ngControl?.control) {
71
- return this.ngControl.control.hasValidator(Validators.required);
72
- }
73
- return this._required;
74
- }
75
- set required(req) {
76
- this._required = coerceBooleanProperty(req);
77
- this.stateChanges.next();
78
- }
79
- get placeholder() {
80
- return this._placeholder;
81
- }
82
- set placeholder(plh) {
83
- this._placeholder = plh;
84
- this.stateChanges.next();
85
- }
86
- set value(value) {
87
- if (value === this._value) {
88
- return;
89
- }
90
- this._value = value;
91
- if (!value) {
92
- this._formattedValueString = '';
93
- this.setInputElementValue(value);
94
- this.currentValue = value ?? new Date();
95
- return;
96
- }
97
- this._formattedValueString = `${twoDigits(value.getHours())}:${twoDigits(value.getMinutes())}`;
98
- if (!this.isInputFocused) {
99
- this.setInputElementValue(this.formattedValueString);
100
- }
101
- this.currentValue = value;
102
- this.stateChanges.next();
103
- if (this._skipValueChangeEmission) {
104
- return;
105
- }
106
- this.timeChange.emit(this.currentValue);
107
- if (this.onChangeFn)
108
- this.onChangeFn(this.value);
109
- }
110
- get value() {
111
- return this._value;
112
- }
113
- get empty() {
114
- return !(this.currentValue instanceof Date);
115
- }
116
- get formattedValueString() {
117
- return this._formattedValueString;
118
- }
119
- inputHandler() {
120
- const value = this.elRef.nativeElement.value;
121
- const length = value.length;
122
- if (length === 0) {
123
- this.writeValue(null, true);
124
- this._value = null;
125
- this._skipValueChangeEmission = true;
126
- Promise.resolve().then(() => (this._skipValueChangeEmission = false));
127
- if (this.onChangeFn) {
128
- this.onChangeFn(null);
129
- }
130
- return;
131
- }
132
- const valueHasColumn = value.includes(':');
133
- let [hours, minutes] = length === 1
134
- ? [value, 0]
135
- : length === 2 && !valueHasColumn
136
- ? [value, 0]
137
- : valueHasColumn
138
- ? value.split(':')
139
- : value.split(/(\d\d)/).filter(v => v);
140
- hours = +hours;
141
- if (/\s/.test(minutes)) {
142
- let other;
143
- [minutes, other] = minutes.split(/\s/);
144
- if (other === 'pm' && !isNaN(hours) && hours < 12) {
145
- hours += 12;
146
- }
147
- }
148
- minutes = +minutes;
149
- if (isNaN(hours) || isNaN(minutes)) {
150
- //this.writeValue(null, true);
151
- this._skipValueChangeEmission = true;
152
- Promise.resolve().then(() => (this._skipValueChangeEmission = false));
153
- return;
154
- }
155
- if (+hours > 24) {
156
- hours = '24';
157
- }
158
- else if (+hours < 0) {
159
- hours = '0';
160
- }
161
- if (+minutes > 59) {
162
- minutes = '59';
163
- }
164
- else if (+minutes < 0) {
165
- minutes = '0';
166
- }
167
- const d = this.value ? new Date(this.value.getTime()) : new Date();
168
- d.setHours(+hours);
169
- d.setMinutes(+minutes);
170
- d.setSeconds(0);
171
- d.setMilliseconds(0);
172
- const isValueInRange = isDateInRange(this.minDate, this.maxDate, d);
173
- if (!isValueInRange) {
174
- this.invalidInput.emit();
175
- }
176
- this.writeValue(d, true);
177
- if (this.onChangeFn) {
178
- this.onChangeFn(d);
179
- }
180
- }
181
- keydownHandler(event) {
182
- const e = event;
183
- const allowedKey = [
184
- '0',
185
- '1',
186
- '2',
187
- '3',
188
- '4',
189
- '5',
190
- '6',
191
- '7',
192
- '8',
193
- '9',
194
- ':',
195
- 'Backspace',
196
- 'Delete',
197
- 'Tab',
198
- 'Enter',
199
- 'ArrowLeft',
200
- 'ArrowRight',
201
- 'ArrowUp',
202
- 'ArrowDown',
203
- 'Home',
204
- 'End',
205
- ];
206
- if (allowedKey.indexOf(e.key) >= 0)
207
- return;
208
- const allowedCtrlShortcuts = ['a', 'c', 'x', 'v'];
209
- if (e.ctrlKey && allowedCtrlShortcuts.indexOf(e.key) >= 0)
210
- return;
211
- if (event.metaKey || event.ctrlKey || event.altKey) {
212
- this.combination = this.combination.concat(event.code);
213
- return;
214
- }
215
- const target = event.target;
216
- const tValue = target.value;
217
- const value = `${tValue.slice(0, target.selectionStart)}${event.key}${tValue.slice(target.selectionEnd)}`;
218
- if (value.match(this.pattern) || this.combination.length > 0) {
219
- return true;
220
- }
221
- event.preventDefault();
222
- event.stopImmediatePropagation();
223
- return;
224
- }
225
- keyupHandler(event) {
226
- this.combination = this.combination.filter(v => v !== event.code);
227
- }
228
- focusHandler() {
229
- this.isInputFocused = true;
230
- }
231
- focusoutHandler() {
232
- this.isInputFocused = false;
233
- this.setInputElementValue(this.formattedValueString);
234
- if (this.onTouchedFn && !this._timepicker.modalRef) {
235
- this.onTouchedFn();
236
- }
237
- }
238
- constructor(ngControl, renderer, zone, fm, elRef, ngZone, _platform, _parentForm, _matFormFiled, _parentFormGroup, _defaultErrorStateMatcher) {
239
- this.ngControl = ngControl;
240
- this.renderer = renderer;
241
- this.zone = zone;
242
- this.fm = fm;
243
- this.elRef = elRef;
244
- this.ngZone = ngZone;
245
- this._platform = _platform;
246
- this._parentForm = _parentForm;
247
- this._matFormFiled = _matFormFiled;
248
- this._parentFormGroup = _parentFormGroup;
249
- this._closedSubscription = Subscription.EMPTY;
250
- this._errorState = false;
251
- // eslint-disable-next-line @typescript-eslint/no-empty-function
252
- this._onTouched = () => { };
253
- this._disabled = false;
254
- this._id = '0';
255
- this._readonly = false;
256
- this.stateChanges = new Subject();
257
- this._uid = `mat-input-${MatTimepickerDirective.nextId++}`;
258
- this.describedBy = '';
259
- this._required = false;
260
- this._placeholder = '';
261
- this.focused = false;
262
- this.pattern = new RegExp('[0-2]?[0-9]:[0-6]?[0-9]');
263
- this.allowed24HourMap = this.generateAllowedMap();
264
- this.isInputFocused = false;
265
- /** Override the label of the ok button. */
266
- this.okLabel = 'Ok';
267
- /** Override the label of the cancel button. */
268
- this.cancelLabel = 'Cancel';
269
- /** Sets the clock mode, 12-hour or 24-hour clocks are supported. */
270
- this.color = 'primary';
271
- this.disableDialogOpenOnClick = false;
272
- this.strict = true;
273
- this.controlType = 'angular-material-timepicker';
274
- this._value = null;
275
- this._formattedValueString = '';
276
- this._skipValueChangeEmission = true;
277
- this.combination = [];
278
- this.timeChange = new EventEmitter();
279
- this.invalidInput = new EventEmitter();
280
- this.errorStateMatcher = _defaultErrorStateMatcher;
281
- if (this.ngControl != null) {
282
- this.ngControl.valueAccessor = this;
283
- }
284
- if (_platform.IOS) {
285
- ngZone.runOutsideAngular(() => {
286
- elRef.nativeElement.addEventListener('keyup', (event) => {
287
- const el = event.target;
288
- if (!el.value && !el.selectionStart && !el.selectionEnd) {
289
- // Note: Just setting `0, 0` doesn't fix the issue. Setting
290
- // `1, 1` fixes it for the first time that you type text and
291
- // then hold delete. Toggling to `1, 1` and then back to
292
- // `0, 0` seems to completely fix it.
293
- el.setSelectionRange(1, 1);
294
- el.setSelectionRange(0, 0);
295
- }
296
- });
297
- });
298
- }
299
- this._isServer = !this._platform.isBrowser;
300
- }
301
- setDescribedByIds(ids) {
302
- this.describedBy = ids.join(' ');
303
- }
304
- onContainerClick(event) {
305
- if (event.target.tagName.toLowerCase() !== 'input') {
306
- this.elRef.nativeElement.focus();
307
- }
308
- }
309
- setInputElementValue(value) {
310
- Promise.resolve().then(() => {
311
- this.zone.runOutsideAngular(() => {
312
- this.renderer.setProperty(this.elRef.nativeElement, 'value', value);
313
- });
314
- });
315
- }
316
- validate() {
317
- const isValueInRange = this.strict
318
- ? isDateInRange(this.minDate, this.maxDate, this.currentValue)
319
- : isTimeInRange(this.minDate, this.maxDate, this.currentValue);
320
- return isValueInRange ? null : { dateRange: true };
321
- }
322
- ngOnInit() {
323
- if (this._platform.isBrowser) {
324
- this.fm.monitor(this.elRef.nativeElement, true).subscribe(origin => {
325
- this.focused = !!origin;
326
- this.stateChanges.next();
327
- });
328
- }
329
- if (!this.value) {
330
- const hasMaxDate = !!this.maxDate;
331
- const hasMinDate = !!this.minDate;
332
- //if (hasMinDate || hasMaxDate) {
333
- if (hasMinDate) {
334
- this.minDate.setSeconds(0);
335
- this.minDate.setMilliseconds(0);
336
- }
337
- if (hasMaxDate) {
338
- this.maxDate.setSeconds(0);
339
- this.maxDate.setMilliseconds(0);
340
- }
341
- if (!this.ngControl._rawValidators.find((v) => v === this)) {
342
- this.ngControl._rawValidators.push(this);
343
- }
344
- //}
345
- }
346
- this._skipValueChangeEmission = false;
347
- }
348
- generateAllowedMap() {
349
- const isStrictMode = this.strict && this.value instanceof Date;
350
- const a24hm = {};
351
- for (let h = 0; h < 24; h++) {
352
- for (let m = 0; m < 60; m++) {
353
- const hourMap = a24hm[h] || {};
354
- if (isStrictMode && this.value) {
355
- const currentDate = new Date(this.value.getTime());
356
- currentDate.setHours(h);
357
- currentDate.setMinutes(m);
358
- currentDate.setSeconds(0);
359
- currentDate.setMilliseconds(0);
360
- hourMap[m] = isDateInRange(this.minDate, this.maxDate, currentDate);
361
- }
362
- else {
363
- hourMap[m] = isAllowed(h, m, this.minDate, this.maxDate);
364
- }
365
- a24hm[h] = hourMap;
366
- }
367
- }
368
- return a24hm;
369
- }
370
- ngOnChanges() {
371
- this.pattern = /^[0-9]{1,2}:?([0-9]{1,2})?$/;
372
- if (!this._timepicker.modalRef ||
373
- !this._timepicker.modalRef.componentInstance) {
374
- return;
375
- }
376
- this._timepicker.modalRef.componentInstance.data = {
377
- value: this.currentValue,
378
- okLabel: this.okLabel,
379
- cancelLabel: this.cancelLabel,
380
- color: this.color,
381
- minDate: this.minDate,
382
- maxDate: this.maxDate,
383
- allowed24HourMap: this.allowed24HourMap,
384
- };
385
- }
386
- checkValidity(value) {
387
- if (!value) {
388
- return false;
389
- }
390
- const hour = value.getHours();
391
- const minutes = value.getMinutes();
392
- return isAllowed(hour, minutes, this.minDate, this.maxDate);
393
- }
394
- writeValue(value, isInnerCall = false) {
395
- if (!isInnerCall) {
396
- this._skipValueChangeEmission = true;
397
- Promise.resolve().then(() => (this._skipValueChangeEmission = false));
398
- }
399
- if (value) {
400
- value.setSeconds(0);
401
- value.setMilliseconds(0);
402
- }
403
- if (this.value && +this.value === +(value ?? 0)) {
404
- return;
405
- }
406
- else {
407
- this.value = value;
408
- }
409
- }
410
- registerOnChange(fn) {
411
- this.onChangeFn = fn;
412
- }
413
- registerOnTouched(fn) {
414
- this.onTouchedFn = fn;
415
- }
416
- setDisabledState(isDisabled) {
417
- this.disabled = isDisabled;
418
- }
419
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTimepickerDirective, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: i1.NgForm, optional: true }, { token: i4.MatFormField, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i5.ErrorStateMatcher }], target: i0.ɵɵFactoryTarget.Directive }); }
420
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: MatTimepickerDirective, selector: "input[matTimepicker]", inputs: { matTimepicker: "matTimepicker", disabled: "disabled", id: "id", readonly: "readonly", errorStateMatcher: "errorStateMatcher", required: "required", placeholder: "placeholder", okLabel: "okLabel", cancelLabel: "cancelLabel", color: "color", disableDialogOpenOnClick: "disableDialogOpenOnClick", strict: "strict", minDate: "minDate", maxDate: "maxDate", value: "value" }, outputs: { timeChange: "timeChange", invalidInput: "invalidInput" }, host: { listeners: { "input": "inputHandler()", "keydown": "keydownHandler($event)", "keyup": "keyupHandler($event)", "focus": "focusHandler()", "focusout": "focusoutHandler()" }, properties: { "class.mat-input-server": "_isServer", "attr.id": "id", "attr.placeholder": "placeholder", "disabled": "disabled", "required": "required", "attr.readonly": "readonly || null", "attr.aria-invalid": "errorState", "attr.aria-required": "required.toString()", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" }, classAttribute: "mat-input-element mat-form-field-autofill-control" }, providers: [
421
- { provide: MatFormFieldControl, useExisting: MatTimepickerDirective },
422
- ], exportAs: ["matTimepicker"], usesOnChanges: true, ngImport: i0 }); }
423
- }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatTimepickerDirective, decorators: [{
425
- type: Directive,
426
- args: [{
427
- selector: 'input[matTimepicker]',
428
- providers: [
429
- { provide: MatFormFieldControl, useExisting: MatTimepickerDirective },
430
- ],
431
- host: {
432
- class: 'mat-input-element mat-form-field-autofill-control',
433
- '[class.mat-input-server]': '_isServer',
434
- // Native input properties that are overwritten by Angular inputs need to be synced with
435
- // the native input element. Otherwise property bindings for those don't work.
436
- '[attr.id]': 'id',
437
- '[attr.placeholder]': 'placeholder',
438
- '[disabled]': 'disabled',
439
- '[required]': 'required',
440
- '[attr.readonly]': 'readonly || null',
441
- '[attr.aria-invalid]': 'errorState',
442
- '[attr.aria-required]': 'required.toString()',
443
- },
444
- exportAs: 'matTimepicker',
445
- }]
446
- }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
447
- type: Optional
448
- }, {
449
- type: Self
450
- }] }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i3.Platform }, { type: i1.NgForm, decorators: [{
451
- type: Optional
452
- }] }, { type: i4.MatFormField, decorators: [{
453
- type: Optional
454
- }] }, { type: i1.FormGroupDirective, decorators: [{
455
- type: Optional
456
- }] }, { type: i5.ErrorStateMatcher }], propDecorators: { matTimepicker: [{
457
- type: Input
458
- }], disabled: [{
459
- type: Input
460
- }], id: [{
461
- type: Input
462
- }], readonly: [{
463
- type: Input
464
- }], shouldLabelFloat: [{
465
- type: HostBinding,
466
- args: ['class.floating']
467
- }], describedBy: [{
468
- type: HostBinding,
469
- args: ['attr.aria-describedby']
470
- }], errorStateMatcher: [{
471
- type: Input
472
- }], required: [{
473
- type: Input
474
- }], placeholder: [{
475
- type: Input
476
- }], okLabel: [{
477
- type: Input
478
- }], cancelLabel: [{
479
- type: Input
480
- }], color: [{
481
- type: Input
482
- }], disableDialogOpenOnClick: [{
483
- type: Input
484
- }], strict: [{
485
- type: Input
486
- }], minDate: [{
487
- type: Input
488
- }], maxDate: [{
489
- type: Input
490
- }], value: [{
491
- type: Input
492
- }], timeChange: [{
493
- type: Output
494
- }], invalidInput: [{
495
- type: Output
496
- }], inputHandler: [{
497
- type: HostListener,
498
- args: ['input']
499
- }], keydownHandler: [{
500
- type: HostListener,
501
- args: ['keydown', ['$event']]
502
- }], keyupHandler: [{
503
- type: HostListener,
504
- args: ['keyup', ['$event']]
505
- }], focusHandler: [{
506
- type: HostListener,
507
- args: ['focus']
508
- }], focusoutHandler: [{
509
- type: HostListener,
510
- args: ['focusout']
511
- }] } });
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmVtcnZhL2Rlc2lnbi1zeXN0ZW0vbWF0LXRpbWVwaWNrZXIvc3JjL3RpbWVwaWNrZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxJQUFJLEVBQ0osTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7OztBQTBCOUQsTUFBTSxPQUFPLHNCQUFzQjthQUcxQixXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFNbEIseURBQXlEO0lBQ3pELElBQ0ksYUFBYSxDQUFDLFVBQXlDO1FBQ3pELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUNsQixDQUFDO1lBQ0Ysc0RBQXNEO1FBQ3hELENBQUM7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RUFBRSxZQUFZO3dCQUNuQyxzQkFBc0IsRUFBRSxxQkFBcUI7cUJBQzlDO29CQUNELFFBQVEsRUFBRSxlQUFlO2lCQUMxQjs7MEJBdVZJLFFBQVE7OzBCQUFJLElBQUk7OzBCQU9oQixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRO3lFQXBWUCxhQUFhO3NCQURoQixLQUFLO2dCQXFDRixRQUFRO3NCQURYLEtBQUs7Z0JBcUJPLEVBQUU7c0JBQWQsS0FBSztnQkFVTyxRQUFRO3NCQUFwQixLQUFLO2dCQWM2QixnQkFBZ0I7c0JBQWxELFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUlTLFdBQVc7c0JBQWhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUUzQixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRU8sUUFBUTtzQkFBcEIsS0FBSztnQkFjTyxXQUFXO3NCQUF2QixLQUFLO2dCQW1CRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQU9PLEtBQUs7c0JBQWpCLEtBQUs7Z0JBZ0RJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFZ0IsWUFBWTtzQkFBbEMsWUFBWTt1QkFBQyxPQUFPO2dCQTJFZ0IsY0FBYztzQkFBbEQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0RBLFlBQVk7c0JBQTlDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUlWLFlBQVk7c0JBQWxDLFlBQVk7dUJBQUMsT0FBTztnQkFJSyxlQUFlO3NCQUF4QyxZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTmdGb3JtLFxuICBOZ0NvbnRyb2wsXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgT25Jbml0LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIFJlbmRlcmVyMixcbiAgT3B0aW9uYWwsXG4gIE5nWm9uZSxcbiAgSG9zdEJpbmRpbmcsXG4gIFNlbGYsXG4gIE91dHB1dCxcbiAgSG9zdExpc3RlbmVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIE1hdEZvcm1GaWVsZENvbnRyb2wsXG4gIE1hdEZvcm1GaWVsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBJQWxsb3dlZDI0SG91ck1hcCB9IGZyb20gJy4vaW50ZXJmYWNlcy1hbmQtdHlwZXMnO1xuaW1wb3J0IHsgdHdvRGlnaXRzLCBpc0FsbG93ZWQsIGlzRGF0ZUluUmFuZ2UsIGlzVGltZUluUmFuZ2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IE9uZW1ydmFNYXRUaW1lcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9vbmVtcnZhLW1hdC10aW1lcGlja2VyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W21hdFRpbWVwaWNrZXJdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogTWF0VGltZXBpY2tlckRpcmVjdGl2ZSB9LFxuICBdLFxuXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ21hdC1pbnB1dC1lbGVtZW50IG1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2wnLFxuICAgICdbY2xhc3MubWF0LWlucHV0LXNlcnZlcl0nOiAnX2lzU2VydmVyJyxcbiAgICAvLyBOYXRpdmUgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBvdmVyd3JpdHRlbiBieSBBbmd1bGFyIGlucHV0cyBuZWVkIHRvIGJlIHN5bmNlZCB3aXRoXG4gICAgLy8gdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50LiBPdGhlcndpc2UgcHJvcGVydHkgYmluZGluZ3MgZm9yIHRob3NlIGRvbid0IHdvcmsuXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5IHx8IG51bGwnLFxuICAgICdbYXR0ci5hcmlhLWludmFsaWRdJzogJ2Vycm9yU3RhdGUnLFxuICAgICdbYXR0ci5hcmlhLXJlcXVpcmVkXSc6ICdyZXF1aXJlZC50b1N0cmluZygpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdtYXRUaW1lcGlja2VyJyxcbn0pXG5leHBvcnQgY2xhc3MgTWF0VGltZXBpY2tlckRpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+XG57XG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgcmVuZGVyZWQgb24gdGhlIHNlcnZlci4gKi9cbiAgcmVhZG9ubHkgX2lzU2VydmVyOiBib29sZWFuO1xuICBwcml2YXRlIF9jbG9zZWRTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgLyoqIFRoZSBkYXRlcGlja2VyIHRoYXQgdGhpcyBpbnB1dCBpcyBhc3NvY2lhdGVkIHdpdGguICovXG4gIEBJbnB1dCgpXG4gIHNldCBtYXRUaW1lcGlja2VyKHRpbWVwaWNrZXI6IE9uZW1ydmFNYXRUaW1lcGlja2VyQ29tcG9uZW50KSB7XG4gICAgaWYgKHRpbWVwaWNrZXIpIHtcbiAgICAgIHRoaXMuX3RpbWVwaWNrZXIgPSB0aW1lcGlja2VyO1xuICAgICAgdGhpcy5fdGltZXBpY2tlci5zZXRUaW1lcGlja2VySW5wdXQodGhpcyk7XG4gICAgICB0aGlzLl9jbG9zZWRTdWJzY3JpcHRpb24gPSB0aW1lcGlja2VyLmNsb3NlZFN0cmVhbS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCksXG4gICAgICApO1xuICAgICAgLy90aGlzLl9yZWdpc3Rlck1vZGVsKGRhdGVwaWNrZXIucmVnaXN0ZXJJbnB1dCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgX3RpbWVwaWNrZXIhOiBPbmVtcnZhTWF0VGltZXBpY2tlckNvbXBvbmVudDtcblxuICBfZXJyb3JTdGF0ZSA9IGZhbHNlO1xuICBnZXQgZXJyb3JTdGF0ZSgpIHtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuX2Vycm9yU3RhdGU7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50Rm9ybUdyb3VwIHx8IHRoaXMuX3BhcmVudEZvcm07XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sXG4gICAgICA/ICh0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5lcnJvclN0YXRlTWF0Y2hlclxuICAgICAgPyB0aGlzLmVycm9yU3RhdGVNYXRjaGVyLmlzRXJyb3JTdGF0ZShjb250cm9sLCBwYXJlbnQpXG4gICAgICA6IG9sZFN0YXRlO1xuXG4gICAgaWYgKG5ld1N0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgICAgdGhpcy5fZXJyb3JTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgLy8gQnJvd3NlcnMgbWF5IG5vdCBmaXJlIHRoZSBibHVyIGV2ZW50IGlmIHRoZSBpbnB1dCBpcyBkaXNhYmxlZCB0b28gcXVpY2tseS5cbiAgICAvLyBSZXNldCBmcm9tIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGVsZW1lbnQgZG9lc24ndCBiZWNvbWUgc3R1Y2suXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy5fdWlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9pZCA9ICcwJztcblxuICBASW5wdXQoKSBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcblxuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCBfdWlkID0gYG1hdC1pbnB1dC0ke01hdFRpbWVwaWNrZXJEaXJlY3RpdmUubmV4dElkKyt9YDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJykgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcblxuICBASW5wdXQoKSBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgQElucHV0KCkgZ2V0IHJlcXVpcmVkKCkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBzZXQgcmVxdWlyZWQocmVxKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICBzZXQgcGxhY2Vob2xkZXIocGxoKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXIgPSAnJztcblxuICBmb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgcGF0dGVybiA9IG5ldyBSZWdFeHAoJ1swLTJdP1swLTldOlswLTZdP1swLTldJyk7XG5cbiAgcHJpdmF0ZSBhbGxvd2VkMjRIb3VyTWFwOiBJQWxsb3dlZDI0SG91ck1hcCA9IHRoaXMuZ2VuZXJhdGVBbGxvd2VkTWFwKCk7XG5cbiAgcHJpdmF0ZSBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuXG4gIC8qKiBPdmVycmlkZSB0aGUgbGFiZWwgb2YgdGhlIG9rIGJ1dHRvbi4gKi9cbiAgQElucHV0KCkgb2tMYWJlbCA9ICdPayc7XG4gIC8qKiBPdmVycmlkZSB0aGUgbGFiZWwgb2YgdGhlIGNhbmNlbCBidXR0b24uICovXG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsID0gJ0NhbmNlbCc7XG5cbiAgLyoqIFNldHMgdGhlIGNsb2NrIG1vZGUsIDEyLWhvdXIgb3IgMjQtaG91ciBjbG9ja3MgYXJlIHN1cHBvcnRlZC4gKi9cbiAgQElucHV0KCkgY29sb3IgPSAncHJpbWFyeSc7XG4gIEBJbnB1dCgpIGRpc2FibGVEaWFsb2dPcGVuT25DbGljayA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHJpY3QgPSB0cnVlO1xuXG4gIGNvbnRyb2xUeXBlID0gJ2FuZ3VsYXItbWF0ZXJpYWwtdGltZXBpY2tlcic7XG5cbiAgQElucHV0KCkgbWluRGF0ZSE6IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGUhOiBEYXRlO1xuXG4gIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2Zvcm1hdHRlZFZhbHVlU3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBfc2tpcFZhbHVlQ2hhbmdlRW1pc3Npb24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5fZm9ybWF0dGVkVmFsdWVTdHJpbmcgPSAnJztcbiAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZSA/PyBuZXcgRGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm1hdHRlZFZhbHVlU3RyaW5nID0gYCR7dHdvRGlnaXRzKHZhbHVlLmdldEhvdXJzKCkpfToke3R3b0RpZ2l0cyhcbiAgICAgIHZhbHVlLmdldE1pbnV0ZXMoKSxcbiAgICApfWA7XG5cbiAgICBpZiAoIXRoaXMuaXNJbnB1dEZvY3VzZWQpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUodGhpcy5mb3JtYXR0ZWRWYWx1ZVN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuXG4gICAgaWYgKHRoaXMuX3NraXBWYWx1ZUNoYW5nZUVtaXNzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudGltZUNoYW5nZS5lbWl0KHRoaXMuY3VycmVudFZhbHVlKTtcblxuICAgIGlmICh0aGlzLm9uQ2hhbmdlRm4pIHRoaXMub25DaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBnZXQgZW1wdHkoKSB7XG4gICAgcmV0dXJuICEodGhpcy5jdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZvcm1hdHRlZFZhbHVlU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRWYWx1ZVN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFZhbHVlITogRGF0ZTtcblxuICBwcml2YXRlIG9uQ2hhbmdlRm46IGFueTtcbiAgcHJpdmF0ZSBvblRvdWNoZWRGbjogYW55O1xuICBwcml2YXRlIGNvbWJpbmF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSB0aW1lQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW52YWxpZElucHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JykgaW5wdXRIYW5kbGVyKCkge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBhbnkpLnZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCwgdHJ1ZSk7XG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLl9za2lwVmFsdWVDaGFuZ2VFbWlzc2lvbiA9IHRydWU7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+ICh0aGlzLl9za2lwVmFsdWVDaGFuZ2VFbWlzc2lvbiA9IGZhbHNlKSk7XG5cbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlRm4pIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVIYXNDb2x1bW4gPSB2YWx1ZS5pbmNsdWRlcygnOicpO1xuICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdOiBhbnkgPVxuICAgICAgbGVuZ3RoID09PSAxXG4gICAgICAgID8gW3ZhbHVlLCAwXVxuICAgICAgICA6IGxlbmd0aCA9PT0gMiAmJiAhdmFsdWVIYXNDb2x1bW5cbiAgICAgICAgICA/IFt2YWx1ZSwgMF1cbiAgICAgICAgICA6IHZhbHVlSGFzQ29sdW1uXG4gICAgICAgICAgICA/IHZhbHVlLnNwbGl0KCc6JylcbiAgICAgICAgICAgIDogdmFsdWUuc3BsaXQoLyhcXGRcXGQpLykuZmlsdGVyKHYgPT4gdik7XG5cbiAgICBob3VycyA9ICtob3VycztcblxuICAgIGlmICgvXFxzLy50ZXN0KG1pbnV0ZXMpKSB7XG4gICAgICBsZXQgb3RoZXI7XG4gICAgICBbbWludXRlcywgb3RoZXJdID0gbWludXRlcy5zcGxpdCgvXFxzLyk7XG4gICAgICBpZiAob3RoZXIgPT09ICdwbScgJiYgIWlzTmFOKGhvdXJzKSAmJiBob3VycyA8IDEyKSB7XG4gICAgICAgIGhvdXJzICs9IDEyO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1pbnV0ZXMgPSArbWludXRlcztcblxuICAgIGlmIChpc05hTihob3VycykgfHwgaXNOYU4obWludXRlcykpIHtcbiAgICAgIC8vdGhpcy53cml0ZVZhbHVlKG51bGwsIHRydWUpO1xuICAgICAgdGhpcy5fc2tpcFZhbHVlQ2hhbmdlRW1pc3Npb24gPSB0cnVlO1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAodGhpcy5fc2tpcFZhbHVlQ2hhbmdlRW1pc3Npb24gPSBmYWxzZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgraG91cnMgPiAyNCkge1xuICAgICAgaG91cnMgPSAnMjQnO1xuICAgIH0gZWxzZSBpZiAoK2hvdXJzIDwgMCkge1xuICAgICAgaG91cnMgPSAnMCc7XG4gICAgfVxuXG4gICAgaWYgKCttaW51dGVzID4gNTkpIHtcbiAgICAgIG1pbnV0ZXMgPSAnNTknO1xuICAgIH0gZWxzZSBpZiAoK21pbnV0ZXMgPCAwKSB7XG4gICAgICBtaW51dGVzID0gJzAnO1xuICAgIH1cblxuICAgIGNvbnN0IGQgPSB0aGlzLnZhbHVlID8gbmV3IERhdGUodGhpcy52YWx1ZS5nZXRUaW1lKCkpIDogbmV3IERhdGUoKTtcbiAgICBkLnNldEhvdXJzKCtob3Vycyk7XG4gICAgZC5zZXRNaW51dGVzKCttaW51dGVzKTtcbiAgICBkLnNldFNlY29uZHMoMCk7XG4gICAgZC5zZXRNaWxsaXNlY29uZHMoMCk7XG5cbiAgICBjb25zdCBpc1ZhbHVlSW5SYW5nZSA9IGlzRGF0ZUluUmFuZ2UodGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIGQpO1xuICAgIGlmICghaXNWYWx1ZUluUmFuZ2UpIHtcbiAgICAgIHRoaXMuaW52YWxpZElucHV0LmVtaXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLndyaXRlVmFsdWUoZCwgdHJ1ZSk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2VGbikge1xuICAgICAgdGhpcy5vbkNoYW5nZUZuKGQpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBrZXlkb3duSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgY29uc3QgZSA9IGV2ZW50IGFzIEtleWJvYXJkRXZlbnQ7XG5cbiAgICBjb25zdCBhbGxvd2VkS2V5ID0gW1xuICAgICAgJzAnLFxuICAgICAgJzEnLFxuICAgICAgJzInLFxuICAgICAgJzMnLFxuICAgICAgJzQnLFxuICAgICAgJzUnLFxuICAgICAgJzYnLFxuICAgICAgJzcnLFxuICAgICAgJzgnLFxuICAgICAgJzknLFxuICAgICAgJzonLFxuICAgICAgJ0JhY2tzcGFjZScsXG4gICAgICAnRGVsZXRlJyxcbiAgICAgICdUYWInLFxuICAgICAgJ0VudGVyJyxcbiAgICAgICdBcnJvd0xlZnQnLFxuICAgICAgJ0Fycm93UmlnaHQnLFxuICAgICAgJ0Fycm93VXAnLFxuICAgICAgJ0Fycm93RG93bicsXG4gICAgICAnSG9tZScsXG4gICAgICAnRW5kJyxcbiAgICBdO1xuICAgIGlmIChhbGxvd2VkS2V5LmluZGV4T2YoZS5rZXkpID49IDApIHJldHVybjtcblxuICAgIGNvbnN0IGFsbG93ZWRDdHJsU2hvcnRjdXRzID0gWydhJywgJ2MnLCAneCcsICd2J107XG4gICAgaWYgKGUuY3RybEtleSAmJiBhbGxvd2VkQ3RybFNob3J0Y3V0cy5pbmRleE9mKGUua2V5KSA+PSAwKSByZXR1cm47XG5cbiAgICBpZiAoZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSkge1xuICAgICAgdGhpcy5jb21iaW5hdGlvbiA9IHRoaXMuY29tYmluYXRpb24uY29uY2F0KGV2ZW50LmNvZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgY29uc3QgdFZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlID0gYCR7dFZhbHVlLnNsaWNlKDAsIHRhcmdldC5zZWxlY3Rpb25TdGFydCl9JHtcbiAgICAgIGV2ZW50LmtleVxuICAgIH0ke3RWYWx1ZS5zbGljZSh0YXJnZXQuc2VsZWN0aW9uRW5kKX1gO1xuICAgIGlmICh2YWx1ZS5tYXRjaCh0aGlzLnBhdHRlcm4pIHx8IHRoaXMuY29tYmluYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKSBrZXl1cEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY29tYmluYXRpb24gPSB0aGlzLmNvbWJpbmF0aW9uLmZpbHRlcih2ID0+IHYgIT09IGV2ZW50LmNvZGUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKSBmb2N1c0hhbmRsZXIoKSB7XG4gICAgdGhpcy5pc0lucHV0Rm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpIGZvY3Vzb3V0SGFuZGxlcigpIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5zZXRJbnB1dEVsZW1lbnRWYWx1ZSh0aGlzLmZvcm1hdHRlZFZhbHVlU3RyaW5nKTtcbiAgICBpZiAodGhpcy5vblRvdWNoZWRGbiAmJiAhdGhpcy5fdGltZXBpY2tlci5tb2RhbFJlZikge1xuICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGZtOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcm90ZWN0ZWQgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfbWF0Rm9ybUZpbGVkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICkge1xuICAgIHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXIgPSBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoX3BsYXRmb3JtLklPUykge1xuICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgIGlmICghZWwudmFsdWUgJiYgIWVsLnNlbGVjdGlvblN0YXJ0ICYmICFlbC5zZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICAgIC8vIE5vdGU6IEp1c3Qgc2V0dGluZyBgMCwgMGAgZG9lc24ndCBmaXggdGhlIGlzc3VlLiBTZXR0aW5nXG4gICAgICAgICAgICAvLyBgMSwgMWAgZml4ZXMgaXQgZm9yIHRoZSBmaXJzdCB0aW1lIHRoYXQgeW91IHR5cGUgdGV4dCBhbmRcbiAgICAgICAgICAgIC8vIHRoZW4gaG9sZCBkZWxldGUuIFRvZ2dsaW5nIHRvIGAxLCAxYCBhbmQgdGhlbiBiYWNrIHRvXG4gICAgICAgICAgICAvLyBgMCwgMGAgc2VlbXMgdG8gY29tcGxldGVseSBmaXggaXQuXG4gICAgICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZSgxLCAxKTtcbiAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlcnZlciA9ICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI7XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XG4gIH1cblxuICBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICBjb25zdCBpc1ZhbHVlSW5SYW5nZSA9IHRoaXMuc3RyaWN0XG4gICAgICA/IGlzRGF0ZUluUmFuZ2UodGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgOiBpc1RpbWVJblJhbmdlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICByZXR1cm4gaXNWYWx1ZUluUmFuZ2UgPyBudWxsIDogeyBkYXRlUmFuZ2U6IHRydWUgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuZm0ubW9uaXRvcih0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSAhIW9yaWdpbjtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgY29uc3QgaGFzTWF4RGF0ZSA9ICEhdGhpcy5tYXhEYXRlO1xuICAgICAgY29uc3QgaGFzTWluRGF0ZSA9ICEhdGhpcy5taW5EYXRlO1xuXG4gICAgICAvL2lmIChoYXNNaW5EYXRlIHx8IGhhc01heERhdGUpIHtcbiAgICAgIGlmIChoYXNNaW5EYXRlKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZS5zZXRTZWNvbmRzKDApO1xuICAgICAgICB0aGlzLm1pbkRhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgfVxuICAgICAgaWYgKGhhc01heERhdGUpIHtcbiAgICAgICAgdGhpcy5tYXhEYXRlLnNldFNlY29uZHMoMCk7XG4gICAgICAgIHRoaXMubWF4RGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgISh0aGlzLm5nQ29udHJvbCBhcyBhbnkpLl9yYXdWYWxpZGF0b3JzLmZpbmQoKHY6IGFueSkgPT4gdiA9PT0gdGhpcylcbiAgICAgICkge1xuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgYXMgYW55KS5fcmF3VmFsaWRhdG9ycy5wdXNoKHRoaXMpO1xuICAgICAgfVxuICAgICAgLy99XG4gICAgfVxuICAgIHRoaXMuX3NraXBWYWx1ZUNoYW5nZUVtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBnZW5lcmF0ZUFsbG93ZWRNYXAoKTogSUFsbG93ZWQyNEhvdXJNYXAge1xuICAgIGNvbnN0IGlzU3RyaWN0TW9kZSA9IHRoaXMuc3RyaWN0ICYmIHRoaXMudmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuICAgIGNvbnN0IGEyNGhtOiBJQWxsb3dlZDI0SG91ck1hcCA9IHt9O1xuICAgIGZvciAobGV0IGggPSAwOyBoIDwgMjQ7IGgrKykge1xuICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCA2MDsgbSsrKSB7XG4gICAgICAgIGNvbnN0IGhvdXJNYXAgPSBhMjRobVtoXSB8fCB7fTtcbiAgICAgICAgaWYgKGlzU3RyaWN0TW9kZSAmJiB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlLmdldFRpbWUoKSk7XG4gICAgICAgICAgY3VycmVudERhdGUuc2V0SG91cnMoaCk7XG4gICAgICAgICAgY3VycmVudERhdGUuc2V0TWludXRlcyhtKTtcbiAgICAgICAgICBjdXJyZW50RGF0ZS5zZXRTZWNvbmRzKDApO1xuICAgICAgICAgIGN1cnJlbnREYXRlLnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgICBob3VyTWFwW21dID0gaXNEYXRlSW5SYW5nZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgY3VycmVudERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhvdXJNYXBbbV0gPSBpc0FsbG93ZWQoaCwgbSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGEyNGhtW2hdID0gaG91ck1hcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYTI0aG07XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSAvXlswLTldezEsMn06PyhbMC05XXsxLDJ9KT8kLztcblxuICAgIGlmIChcbiAgICAgICF0aGlzLl90aW1lcGlja2VyLm1vZGFsUmVmIHx8XG4gICAgICAhdGhpcy5fdGltZXBpY2tlci5tb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RpbWVwaWNrZXIubW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmN1cnJlbnRWYWx1ZSxcbiAgICAgIG9rTGFiZWw6IHRoaXMub2tMYWJlbCxcbiAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmNhbmNlbExhYmVsLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUsXG4gICAgICBtYXhEYXRlOiB0aGlzLm1heERhdGUsXG4gICAgICBhbGxvd2VkMjRIb3VyTWFwOiB0aGlzLmFsbG93ZWQyNEhvdXJNYXAsXG4gICAgfTtcbiAgfVxuXG4gIGNoZWNrVmFsaWRpdHkodmFsdWU6IERhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhvdXIgPSB2YWx1ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgcmV0dXJuIGlzQWxsb3dlZChob3VyLCBtaW51dGVzLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCwgaXNJbm5lckNhbGwgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghaXNJbm5lckNhbGwpIHtcbiAgICAgIHRoaXMuX3NraXBWYWx1ZUNoYW5nZUVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gKHRoaXMuX3NraXBWYWx1ZUNoYW5nZUVtaXNzaW9uID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHZhbHVlLnNldFNlY29uZHMoMCk7XG4gICAgICB2YWx1ZS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWUgJiYgK3RoaXMudmFsdWUgPT09ICsodmFsdWUgPz8gMCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxufVxuIl19