@coreui/angular-pro 4.1.0 → 4.2.0-next.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 (279) hide show
  1. package/README.md +174 -174
  2. package/esm2020/lib/accordion/accordion/accordion.component.mjs +3 -3
  3. package/esm2020/lib/accordion/accordion-button/accordion-button.directive.mjs +3 -3
  4. package/esm2020/lib/accordion/accordion-item/accordion-item.component.mjs +3 -3
  5. package/esm2020/lib/accordion/accordion.module.mjs +4 -4
  6. package/esm2020/lib/accordion/accordion.service.mjs +3 -3
  7. package/esm2020/lib/alert/alert-heading.directive.mjs +3 -3
  8. package/esm2020/lib/alert/alert-link.directive.mjs +3 -3
  9. package/esm2020/lib/alert/alert.component.mjs +3 -3
  10. package/esm2020/lib/alert/alert.module.mjs +4 -4
  11. package/esm2020/lib/avatar/avatar.component.mjs +3 -3
  12. package/esm2020/lib/avatar/avatar.module.mjs +4 -4
  13. package/esm2020/lib/backdrop/backdrop.service.mjs +3 -3
  14. package/esm2020/lib/badge/badge.component.mjs +3 -3
  15. package/esm2020/lib/badge/badge.module.mjs +4 -4
  16. package/esm2020/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +3 -3
  17. package/esm2020/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +3 -3
  18. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +3 -3
  19. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +3 -3
  20. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +4 -4
  21. package/esm2020/lib/button/button-close.directive.mjs +3 -3
  22. package/esm2020/lib/button/button.directive.mjs +3 -3
  23. package/esm2020/lib/button/button.module.mjs +4 -4
  24. package/esm2020/lib/button-group/button-group/button-group.component.mjs +3 -3
  25. package/esm2020/lib/button-group/button-group.module.mjs +4 -4
  26. package/esm2020/lib/button-group/button-toolbar/button-toolbar.component.mjs +3 -3
  27. package/esm2020/lib/calendar/calendar/calendar-class-view.pipe.mjs +19 -0
  28. package/esm2020/lib/calendar/calendar/calendar.component.mjs +366 -0
  29. package/esm2020/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +28 -0
  30. package/esm2020/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +21 -0
  31. package/esm2020/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +21 -0
  32. package/esm2020/lib/calendar/calendar-month/calendar-day.directive.mjs +81 -0
  33. package/esm2020/lib/calendar/calendar-month/calendar-day.pipe.mjs +18 -0
  34. package/esm2020/lib/calendar/calendar-month/calendar-month.component.mjs +320 -0
  35. package/esm2020/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +20 -0
  36. package/esm2020/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +79 -0
  37. package/esm2020/lib/calendar/calendar.module.mjs +59 -0
  38. package/esm2020/lib/calendar/calendar.service.mjs +60 -0
  39. package/esm2020/lib/calendar/calendar.utils.mjs +273 -0
  40. package/esm2020/lib/calendar/index.mjs +2 -0
  41. package/esm2020/lib/calendar/public_api.mjs +5 -0
  42. package/esm2020/lib/callout/callout.component.mjs +3 -3
  43. package/esm2020/lib/callout/callout.module.mjs +4 -4
  44. package/esm2020/lib/card/card-body.component.mjs +3 -3
  45. package/esm2020/lib/card/card-footer.component.mjs +3 -3
  46. package/esm2020/lib/card/card-group.component.mjs +3 -3
  47. package/esm2020/lib/card/card-header-actions.component.mjs +3 -3
  48. package/esm2020/lib/card/card-header.component.mjs +3 -3
  49. package/esm2020/lib/card/card-img-overlay/card-img-overlay.component.mjs +3 -3
  50. package/esm2020/lib/card/card-img.directive.mjs +3 -3
  51. package/esm2020/lib/card/card-link.directive.mjs +3 -3
  52. package/esm2020/lib/card/card-subtitle.directive.mjs +3 -3
  53. package/esm2020/lib/card/card-text.directive.mjs +3 -3
  54. package/esm2020/lib/card/card-title.directive.mjs +3 -3
  55. package/esm2020/lib/card/card.component.mjs +3 -3
  56. package/esm2020/lib/card/card.module.mjs +4 -4
  57. package/esm2020/lib/carousel/carousel/carousel.component.mjs +3 -3
  58. package/esm2020/lib/carousel/carousel-caption/carousel-caption.component.mjs +3 -3
  59. package/esm2020/lib/carousel/carousel-control/carousel-control.component.mjs +3 -3
  60. package/esm2020/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -3
  61. package/esm2020/lib/carousel/carousel-inner/carousel-inner.component.mjs +3 -3
  62. package/esm2020/lib/carousel/carousel-item/carousel-item.component.mjs +3 -3
  63. package/esm2020/lib/carousel/carousel-state.mjs +3 -3
  64. package/esm2020/lib/carousel/carousel.config.mjs +3 -3
  65. package/esm2020/lib/carousel/carousel.module.mjs +4 -4
  66. package/esm2020/lib/carousel/carousel.service.mjs +3 -3
  67. package/esm2020/lib/collapse/collapse.directive.mjs +3 -3
  68. package/esm2020/lib/collapse/collapse.module.mjs +4 -4
  69. package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +516 -0
  70. package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +61 -0
  71. package/esm2020/lib/date-range-picker/end-date.directive.mjs +17 -0
  72. package/esm2020/lib/date-range-picker/index.mjs +2 -0
  73. package/esm2020/lib/date-range-picker/public_api.mjs +3 -0
  74. package/esm2020/lib/date-range-picker/start-date.directive.mjs +17 -0
  75. package/esm2020/lib/dropdown/dropdown/dropdown.component.mjs +6 -6
  76. package/esm2020/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +3 -3
  77. package/esm2020/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +3 -3
  78. package/esm2020/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +3 -3
  79. package/esm2020/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +3 -3
  80. package/esm2020/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +3 -3
  81. package/esm2020/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +3 -3
  82. package/esm2020/lib/dropdown/dropdown.module.mjs +4 -4
  83. package/esm2020/lib/dropdown/dropdown.service.mjs +3 -3
  84. package/esm2020/lib/element-cover/element-cover.component.mjs +3 -3
  85. package/esm2020/lib/element-cover/element-cover.module.mjs +4 -4
  86. package/esm2020/lib/footer/footer.component.mjs +3 -3
  87. package/esm2020/lib/footer/footer.module.mjs +4 -4
  88. package/esm2020/lib/form/form/form.directive.mjs +3 -3
  89. package/esm2020/lib/form/form-check/form-check-input.directive.mjs +3 -3
  90. package/esm2020/lib/form/form-check/form-check-label.directive.mjs +3 -3
  91. package/esm2020/lib/form/form-check/form-check.component.mjs +3 -3
  92. package/esm2020/lib/form/form-control/form-control.directive.mjs +3 -3
  93. package/esm2020/lib/form/form-feedback/form-feedback.component.mjs +3 -3
  94. package/esm2020/lib/form/form-floating/form-floating.directive.mjs +3 -3
  95. package/esm2020/lib/form/form-label/form-label.directive.mjs +3 -3
  96. package/esm2020/lib/form/form-select/form-select.directive.mjs +3 -3
  97. package/esm2020/lib/form/form-text/form-text.directive.mjs +3 -3
  98. package/esm2020/lib/form/form.module.mjs +4 -4
  99. package/esm2020/lib/form/input-group/input-group.component.mjs +3 -3
  100. package/esm2020/lib/form/input-group-text/input-group-text.directive.mjs +3 -3
  101. package/esm2020/lib/grid/col.component.mjs +3 -3
  102. package/esm2020/lib/grid/col.directive.mjs +3 -3
  103. package/esm2020/lib/grid/container.component.mjs +3 -3
  104. package/esm2020/lib/grid/grid.module.mjs +4 -4
  105. package/esm2020/lib/grid/gutter.directive.mjs +3 -3
  106. package/esm2020/lib/grid/row.component.mjs +3 -3
  107. package/esm2020/lib/grid/row.directive.mjs +3 -3
  108. package/esm2020/lib/header/header/header.component.mjs +3 -3
  109. package/esm2020/lib/header/header-brand/header-brand.component.mjs +3 -3
  110. package/esm2020/lib/header/header-divider/header-divider.component.mjs +3 -3
  111. package/esm2020/lib/header/header-nav/header-nav.component.mjs +3 -3
  112. package/esm2020/lib/header/header-text/header-text.component.mjs +3 -3
  113. package/esm2020/lib/header/header-toggler/header-toggler.directive.mjs +3 -3
  114. package/esm2020/lib/header/header.module.mjs +4 -4
  115. package/esm2020/lib/image/img.directive.mjs +3 -3
  116. package/esm2020/lib/image/img.module.mjs +4 -4
  117. package/esm2020/lib/list-group/list-group-item.directive.mjs +3 -3
  118. package/esm2020/lib/list-group/list-group.directive.mjs +3 -3
  119. package/esm2020/lib/list-group/list-group.module.mjs +4 -4
  120. package/esm2020/lib/loading-button/loading-button.component.mjs +3 -3
  121. package/esm2020/lib/loading-button/loading-button.module.mjs +4 -4
  122. package/esm2020/lib/modal/modal/modal.component.mjs +3 -3
  123. package/esm2020/lib/modal/modal-body/modal-body.component.mjs +3 -3
  124. package/esm2020/lib/modal/modal-content/modal-content.component.mjs +3 -3
  125. package/esm2020/lib/modal/modal-dialog/modal-dialog.component.mjs +3 -3
  126. package/esm2020/lib/modal/modal-dismiss/modal-toggle.directive.mjs +3 -3
  127. package/esm2020/lib/modal/modal-footer/modal-footer.component.mjs +3 -3
  128. package/esm2020/lib/modal/modal-header/modal-header.component.mjs +3 -3
  129. package/esm2020/lib/modal/modal-title/modal-title.directive.mjs +3 -3
  130. package/esm2020/lib/modal/modal.module.mjs +4 -4
  131. package/esm2020/lib/modal/modal.service.mjs +3 -3
  132. package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +3 -3
  133. package/esm2020/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +3 -3
  134. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +3 -3
  135. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +3 -3
  136. package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +3 -3
  137. package/esm2020/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +3 -3
  138. package/esm2020/lib/multi-select/multi-select.module.mjs +4 -4
  139. package/esm2020/lib/multi-select/multi-select.service.mjs +3 -3
  140. package/esm2020/lib/nav/nav-item.component.mjs +3 -3
  141. package/esm2020/lib/nav/nav-link.directive.mjs +3 -3
  142. package/esm2020/lib/nav/nav.component.mjs +3 -3
  143. package/esm2020/lib/nav/nav.module.mjs +4 -4
  144. package/esm2020/lib/navbar/navbar-brand/navbar-brand.directive.mjs +3 -3
  145. package/esm2020/lib/navbar/navbar-nav/navbar-nav.component.mjs +3 -3
  146. package/esm2020/lib/navbar/navbar-text/navbar-text.component.mjs +3 -3
  147. package/esm2020/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +3 -3
  148. package/esm2020/lib/navbar/navbar.component.mjs +3 -3
  149. package/esm2020/lib/navbar/navbar.module.mjs +4 -4
  150. package/esm2020/lib/offcanvas/offcanvas/offcanvas.component.mjs +3 -3
  151. package/esm2020/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +3 -3
  152. package/esm2020/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +3 -3
  153. package/esm2020/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +3 -3
  154. package/esm2020/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +3 -3
  155. package/esm2020/lib/offcanvas/offcanvas.module.mjs +4 -4
  156. package/esm2020/lib/offcanvas/offcanvas.service.mjs +3 -3
  157. package/esm2020/lib/pagination/page-item/page-item.component.mjs +3 -3
  158. package/esm2020/lib/pagination/page-item/page-item.directive.mjs +3 -3
  159. package/esm2020/lib/pagination/page-link/page-link.directive.mjs +3 -3
  160. package/esm2020/lib/pagination/pagination/pagination.component.mjs +3 -3
  161. package/esm2020/lib/pagination/pagination.module.mjs +4 -4
  162. package/esm2020/lib/placeholder/placeholder-animation.directive.mjs +3 -3
  163. package/esm2020/lib/placeholder/placeholder.directive.mjs +3 -3
  164. package/esm2020/lib/placeholder/placeholder.module.mjs +4 -4
  165. package/esm2020/lib/popover/popover/popover.component.mjs +3 -3
  166. package/esm2020/lib/popover/popover.directive.mjs +3 -3
  167. package/esm2020/lib/popover/popover.module.mjs +4 -4
  168. package/esm2020/lib/progress/progress-bar.component.mjs +3 -3
  169. package/esm2020/lib/progress/progress.component.mjs +3 -3
  170. package/esm2020/lib/progress/progress.module.mjs +4 -4
  171. package/esm2020/lib/services/class-toggle.service.mjs +3 -3
  172. package/esm2020/lib/services/intersection.service.mjs +3 -3
  173. package/esm2020/lib/services/listeners.service.mjs +3 -3
  174. package/esm2020/lib/shared/html-attr.directive.mjs +3 -3
  175. package/esm2020/lib/shared/shared.module.mjs +4 -4
  176. package/esm2020/lib/shared/template-id.directive.mjs +3 -3
  177. package/esm2020/lib/sidebar/sidebar/sidebar.component.mjs +3 -3
  178. package/esm2020/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +3 -3
  179. package/esm2020/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +3 -3
  180. package/esm2020/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +3 -3
  181. package/esm2020/lib/sidebar/sidebar-header/sidebar-header.component.mjs +3 -3
  182. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +3 -3
  183. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +3 -3
  184. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +3 -3
  185. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +3 -3
  186. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +3 -3
  187. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +6 -6
  188. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +3 -3
  189. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +3 -3
  190. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -6
  191. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +6 -6
  192. package/esm2020/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +3 -3
  193. package/esm2020/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +3 -3
  194. package/esm2020/lib/sidebar/sidebar.module.mjs +4 -4
  195. package/esm2020/lib/sidebar/sidebar.service.mjs +3 -3
  196. package/esm2020/lib/smart-pagination/smart-pagination.component.mjs +3 -3
  197. package/esm2020/lib/smart-pagination/smart-pagination.module.mjs +4 -4
  198. package/esm2020/lib/smart-table/smart-table/smart-table.component.mjs +3 -3
  199. package/esm2020/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +3 -3
  200. package/esm2020/lib/smart-table/smart-table-head/smart-table-head.component.mjs +3 -3
  201. package/esm2020/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -3
  202. package/esm2020/lib/smart-table/smart-table.module.mjs +4 -4
  203. package/esm2020/lib/spinner/spinner.component.mjs +3 -3
  204. package/esm2020/lib/spinner/spinner.module.mjs +4 -4
  205. package/esm2020/lib/table/table-active.directive.mjs +3 -3
  206. package/esm2020/lib/table/table-color.directive.mjs +3 -3
  207. package/esm2020/lib/table/table.directive.mjs +3 -3
  208. package/esm2020/lib/table/table.module.mjs +4 -4
  209. package/esm2020/lib/tabs/tab-content/tab-content.component.mjs +3 -3
  210. package/esm2020/lib/tabs/tab-content-ref.directive.mjs +3 -3
  211. package/esm2020/lib/tabs/tab-pane/tab-pane.component.mjs +3 -3
  212. package/esm2020/lib/tabs/tab.service.mjs +3 -3
  213. package/esm2020/lib/tabs/tabs.module.mjs +4 -4
  214. package/esm2020/lib/time-picker/index.mjs +2 -0
  215. package/esm2020/lib/time-picker/public_api.mjs +3 -0
  216. package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +103 -0
  217. package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +104 -0
  218. package/esm2020/lib/time-picker/time-picker.component.mjs +458 -0
  219. package/esm2020/lib/time-picker/time-picker.module.mjs +50 -0
  220. package/esm2020/lib/time-picker/time.utils.mjs +645 -0
  221. package/esm2020/lib/toast/toast/toast.component.mjs +3 -3
  222. package/esm2020/lib/toast/toast-body/toast-body.component.mjs +3 -3
  223. package/esm2020/lib/toast/toast-close.directive.mjs +3 -3
  224. package/esm2020/lib/toast/toast-header/toast-header.component.mjs +3 -3
  225. package/esm2020/lib/toast/toast.module.mjs +4 -4
  226. package/esm2020/lib/toast/toaster/toaster-host.directive.mjs +3 -3
  227. package/esm2020/lib/toast/toaster/toaster.component.mjs +3 -3
  228. package/esm2020/lib/toast/toaster/toaster.service.mjs +3 -3
  229. package/esm2020/lib/tooltip/tooltip/tooltip.component.mjs +3 -3
  230. package/esm2020/lib/tooltip/tooltip.directive.mjs +3 -3
  231. package/esm2020/lib/tooltip/tooltip.module.mjs +4 -4
  232. package/esm2020/lib/utilities/align.directive.mjs +3 -3
  233. package/esm2020/lib/utilities/bg-color.directive.mjs +3 -3
  234. package/esm2020/lib/utilities/border.directive.mjs +3 -3
  235. package/esm2020/lib/utilities/rounded.directive.mjs +3 -3
  236. package/esm2020/lib/utilities/text-color.directive.mjs +3 -3
  237. package/esm2020/lib/utilities/utilities.module.mjs +4 -4
  238. package/esm2020/lib/widget/widget-stat-a/widget-stat-a.component.mjs +3 -3
  239. package/esm2020/lib/widget/widget-stat-b/widget-stat-b.component.mjs +3 -3
  240. package/esm2020/lib/widget/widget-stat-c/widget-stat-c.component.mjs +3 -3
  241. package/esm2020/lib/widget/widget-stat-d/widget-stat-d.component.mjs +3 -3
  242. package/esm2020/lib/widget/widget-stat-e/widget-stat-e.component.mjs +3 -3
  243. package/esm2020/lib/widget/widget-stat-f/widget-stat-f.component.mjs +3 -3
  244. package/esm2020/lib/widget/widget.module.mjs +4 -4
  245. package/esm2020/public-api.mjs +4 -1
  246. package/fesm2015/coreui-angular-pro.mjs +5734 -2501
  247. package/fesm2015/coreui-angular-pro.mjs.map +1 -1
  248. package/fesm2020/coreui-angular-pro.mjs +5586 -2388
  249. package/fesm2020/coreui-angular-pro.mjs.map +1 -1
  250. package/lib/calendar/calendar/calendar-class-view.pipe.d.ts +7 -0
  251. package/lib/calendar/calendar/calendar.component.d.ts +155 -0
  252. package/lib/calendar/calendar-month/calendar-class-day.pipe.d.ts +15 -0
  253. package/lib/calendar/calendar-month/calendar-class-month.pipe.d.ts +7 -0
  254. package/lib/calendar/calendar-month/calendar-class-year.pipe.d.ts +7 -0
  255. package/lib/calendar/calendar-month/calendar-day.directive.d.ts +29 -0
  256. package/lib/calendar/calendar-month/calendar-day.pipe.d.ts +8 -0
  257. package/lib/calendar/calendar-month/calendar-month.component.d.ts +121 -0
  258. package/lib/calendar/calendar-month/calendar-weekday.pipe.d.ts +8 -0
  259. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +30 -0
  260. package/lib/calendar/calendar.module.d.ts +18 -0
  261. package/lib/calendar/calendar.service.d.ts +33 -0
  262. package/lib/calendar/calendar.utils.d.ts +26 -0
  263. package/lib/calendar/index.d.ts +1 -0
  264. package/lib/calendar/public_api.d.ts +4 -0
  265. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +239 -0
  266. package/lib/date-range-picker/date-range-picker.module.d.ts +17 -0
  267. package/lib/date-range-picker/end-date.directive.d.ts +8 -0
  268. package/lib/date-range-picker/index.d.ts +1 -0
  269. package/lib/date-range-picker/public_api.d.ts +2 -0
  270. package/lib/date-range-picker/start-date.directive.d.ts +8 -0
  271. package/lib/time-picker/index.d.ts +1 -0
  272. package/lib/time-picker/public_api.d.ts +2 -0
  273. package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +39 -0
  274. package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +38 -0
  275. package/lib/time-picker/time-picker.component.d.ts +183 -0
  276. package/lib/time-picker/time-picker.module.d.ts +14 -0
  277. package/lib/time-picker/time.utils.d.ts +57 -0
  278. package/package.json +8 -2
  279. package/public-api.d.ts +3 -0
@@ -0,0 +1,516 @@
1
+ import { Component, ContentChildren, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
4
+ import { Breakpoints } from '@angular/cdk/layout';
5
+ import { CalendarComponent } from '../../calendar';
6
+ import { getLocalDateFromString, isDateDisabled } from '../../calendar/calendar.utils';
7
+ import { StartDateDirective } from '../start-date.directive';
8
+ import { EndDateDirective } from '../end-date.directive';
9
+ import { TemplateIdDirective } from '../../shared';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/cdk/layout";
12
+ import * as i2 from "@angular/common";
13
+ import * as i3 from "@angular/forms";
14
+ import * as i4 from "../../button/button.directive";
15
+ import * as i5 from "../../calendar/calendar/calendar.component";
16
+ import * as i6 from "../../form/form-control/form-control.directive";
17
+ import * as i7 from "../../form/input-group/input-group.component";
18
+ import * as i8 from "../../form/input-group-text/input-group-text.directive";
19
+ import * as i9 from "../../dropdown/dropdown/dropdown.component";
20
+ import * as i10 from "../../dropdown/dropdown-menu/dropdown-menu.directive";
21
+ import * as i11 from "../../time-picker/time-picker.component";
22
+ import * as i12 from "../start-date.directive";
23
+ import * as i13 from "../end-date.directive";
24
+ /** Must be a valid date string */
25
+ // todo: validation
26
+ // export function invalidDateStringValidator(locale: string): ValidatorFn {
27
+ // return (control: AbstractControl): ValidationErrors | null => {
28
+ // // const validDate = !isNaN(Date.parse(control.value));
29
+ // stringToDateConvert(control.value, locale);
30
+ // const dateShim = cvtDate(control.value, locale);
31
+ // // @ts-ignore
32
+ // // control.setValue(new Date(dateShim.year, dateShim.month, dateShim.day))
33
+ // console.log('dateShim', dateShim, locale);
34
+ // const validDate = isValidDate(control.value);
35
+ // console.log('invalidDateStringValidator', control, control.value, validDate);
36
+ // return validDate ? { invalidDateStringValidator: { value: control.value } } : null;
37
+ // };
38
+ // }
39
+ export class DateRangePickerComponent {
40
+ constructor(breakpointObserver) {
41
+ this.breakpointObserver = breakpointObserver;
42
+ /**
43
+ * Set the format of day name.
44
+ * @default 'numeric'
45
+ * @type DayFormatType
46
+ */
47
+ this.dayFormat = 'numeric';
48
+ this._calendars = 2;
49
+ this._cleaner = true;
50
+ this._indicator = true;
51
+ this._inputReadOnly = false;
52
+ this._navYearFirst = false;
53
+ /**
54
+ * Specifies short hints that are visible in start date and end date inputs.
55
+ * type string
56
+ */
57
+ this.placeholder = ['Start date', 'End date'];
58
+ /**
59
+ * Sets the color context of the cancel button to one of CoreUI’s themed colors.
60
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
61
+ * @default 'secondary'
62
+ */
63
+ this.rangesButtonsColor = 'secondary';
64
+ /**
65
+ * Set the ranges button variant to an outlined button or a ghost button.
66
+ * @type 'outline' | 'ghost' | undefined
67
+ */
68
+ this.rangesButtonsVariant = 'ghost';
69
+ this._separator = true;
70
+ this._timepicker = false;
71
+ /**
72
+ * Toggle visibility or set the content of today button.
73
+ * @type string
74
+ * @default 'Today'
75
+ */
76
+ this.todayButton = 'Today';
77
+ /**
78
+ * Sets the color context of the today button to one of CoreUI’s themed colors.
79
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
80
+ * @default 'primary'
81
+ */
82
+ this.todayButtonColor = 'primary';
83
+ /**
84
+ * Size the today button small or large.
85
+ * @type 'sm' | 'lg'
86
+ * @default 'sm'
87
+ */
88
+ this.todayButtonSize = 'sm';
89
+ this._visible = false;
90
+ this.disabledDates = [];
91
+ this._firstDayOfWeek = 1;
92
+ this.locale = 'default';
93
+ this.maxDate = null;
94
+ this.minDate = null;
95
+ this._navigation = true;
96
+ this._range = true;
97
+ this._disabled = false;
98
+ this._value = [];
99
+ /**
100
+ * Set length or format of day name.
101
+ * @type WeekdayFormatType
102
+ * @default 'short'
103
+ */
104
+ this.weekdayFormat = 'short';
105
+ this.valueChange = new EventEmitter();
106
+ this.calendarCellHover = new EventEmitter();
107
+ this.calendarDateChange = new EventEmitter();
108
+ this.endDateChange = new EventEmitter();
109
+ this.startDateChange = new EventEmitter();
110
+ this.templates = {};
111
+ this.isMobile = true;
112
+ this._startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
113
+ this._endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
114
+ this.startDatePlaceholder = this.placeholder[0];
115
+ this.endDatePlaceholder = this.placeholder[1];
116
+ // todo: validation
117
+ this.startDateInput = new FormControl({ value: this.startDateValue, disabled: this.disabled }, [
118
+ Validators.required
119
+ // Validators.minLength(8),
120
+ // Validators.maxLength(10),
121
+ // invalidDateStringValidator(this.locale)
122
+ ]);
123
+ this.endDateInput = new FormControl({ value: this.endDateValue, disabled: this.disabled }, [
124
+ Validators.required
125
+ // Validators.minLength(8),
126
+ // Validators.maxLength(10),
127
+ // invalidDateStringValidator(this.locale)
128
+ ]);
129
+ this.setInputValue = (elementRef, date) => {
130
+ if (!elementRef) {
131
+ return;
132
+ }
133
+ elementRef.nativeElement.value = date?.toLocaleDateString(this.locale) ?? '';
134
+ return;
135
+ };
136
+ this.onChange = (value) => { };
137
+ this.onTouched = () => { };
138
+ }
139
+ /**
140
+ * The number of calendars that render on desktop devices.
141
+ * @type number
142
+ * @default 2
143
+ */
144
+ set calendars(value) {
145
+ this._calendars = coerceNumberProperty(value);
146
+ }
147
+ get calendars() {
148
+ return this._calendars;
149
+ }
150
+ /**
151
+ * Toggle visibility or set the content of the cleaner button.
152
+ * @type boolean
153
+ * @default true
154
+ */
155
+ set cleaner(value) {
156
+ this._cleaner = coerceBooleanProperty(value);
157
+ }
158
+ get cleaner() {
159
+ return this._cleaner;
160
+ }
161
+ /**
162
+ * Toggle visibility or set the content of the input indicator.
163
+ * @type boolean
164
+ * @default true
165
+ */
166
+ set indicator(value) {
167
+ this._indicator = coerceBooleanProperty(value);
168
+ }
169
+ get indicator() {
170
+ return this._indicator;
171
+ }
172
+ /**
173
+ * Toggle the readonly state for the component.
174
+ * @type boolean
175
+ * @default false
176
+ */
177
+ set inputReadOnly(value) {
178
+ this._inputReadOnly = coerceBooleanProperty(value);
179
+ }
180
+ get inputReadOnly() {
181
+ return this._inputReadOnly;
182
+ }
183
+ /**
184
+ * Reorder year-month navigation, and render year first.
185
+ * @type boolean
186
+ * @default false
187
+ */
188
+ set navYearFirst(value) {
189
+ this._navYearFirst = coerceBooleanProperty(value);
190
+ }
191
+ get navYearFirst() {
192
+ return this._navYearFirst;
193
+ }
194
+ /**
195
+ * Default icon or character that separates two dates.
196
+ * @type boolean
197
+ * @default true
198
+ */
199
+ set separator(value) {
200
+ this._separator = coerceBooleanProperty(value);
201
+ }
202
+ get separator() {
203
+ return this._separator;
204
+ }
205
+ /**
206
+ * Provide an additional time selection by adding select boxes to choose time.
207
+ * @type boolean
208
+ * @default false
209
+ */
210
+ set timepicker(value) {
211
+ this._timepicker = coerceBooleanProperty(value);
212
+ }
213
+ get timepicker() {
214
+ return this._timepicker;
215
+ }
216
+ /**
217
+ * Toggle the visibility of the component.
218
+ * @type boolean
219
+ * @default false
220
+ */
221
+ set visible(value) {
222
+ this._visible = coerceBooleanProperty(value);
223
+ }
224
+ get visible() {
225
+ return this._visible;
226
+ }
227
+ set firstDayOfWeek(value) {
228
+ this._firstDayOfWeek = coerceNumberProperty(value);
229
+ }
230
+ get firstDayOfWeek() {
231
+ return this._firstDayOfWeek;
232
+ }
233
+ set navigation(value) {
234
+ this._navigation = coerceBooleanProperty(value);
235
+ }
236
+ get navigation() {
237
+ return this._navigation;
238
+ }
239
+ /**
240
+ * Allow range selection.
241
+ * @type boolean
242
+ * @default false
243
+ */
244
+ set range(value) {
245
+ this._range = coerceBooleanProperty(value);
246
+ }
247
+ get range() {
248
+ return this._range;
249
+ }
250
+ set disabled(value) {
251
+ this._disabled = coerceBooleanProperty(value);
252
+ }
253
+ get disabled() {
254
+ return this._disabled;
255
+ }
256
+ set value(value) {
257
+ const newValue = Array.isArray(value) ? [...value] : [];
258
+ if (this._value.toString() !== newValue.toString()) {
259
+ this._value = newValue;
260
+ this.onChange(newValue);
261
+ this.onTouched();
262
+ this.valueChange.emit(this.value);
263
+ }
264
+ }
265
+ get value() {
266
+ return this._value;
267
+ }
268
+ onBlur() {
269
+ this.onTouched();
270
+ }
271
+ set startDateValue(value) {
272
+ this.startDateInput.setValue(value);
273
+ this._startDateValue = value;
274
+ }
275
+ get startDateValue() {
276
+ return this._startDateValue;
277
+ }
278
+ set endDateValue(value) {
279
+ this.endDateInput.setValue(value);
280
+ this._endDateValue = value;
281
+ }
282
+ get endDateValue() {
283
+ return this._endDateValue;
284
+ }
285
+ set inputStartHoverValue(value) {
286
+ this._inputStartHoverValue = value;
287
+ }
288
+ get inputStartHoverValue() {
289
+ return this._inputStartHoverValue;
290
+ }
291
+ set inputEndHoverValue(value) {
292
+ this._inputEndHoverValue = value;
293
+ }
294
+ get inputEndHoverValue() {
295
+ return this._inputEndHoverValue;
296
+ }
297
+ ngOnInit() {
298
+ this.layoutChanges = this.breakpointObserver.observe([
299
+ Breakpoints.Handset,
300
+ Breakpoints.Tablet
301
+ ]).subscribe(result => {
302
+ this.isMobile = result.matches;
303
+ });
304
+ this.customRanges = this.ranges ? Object.entries(this.ranges) : [];
305
+ this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
306
+ this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
307
+ }
308
+ ngOnDestroy() {
309
+ this.layoutChanges.unsubscribe();
310
+ }
311
+ ngAfterViewInit() {
312
+ setTimeout(() => {
313
+ this.contentTemplates.forEach((child) => {
314
+ this.templates[child.id] = child.templateRef;
315
+ });
316
+ });
317
+ }
318
+ getCustomRangeKey(customRange) {
319
+ return customRange[0];
320
+ }
321
+ setCustomRange(customRange) {
322
+ const key = this.getCustomRangeKey(customRange);
323
+ this.startDate = customRange[1][0];
324
+ this.endDate = customRange[1][1];
325
+ }
326
+ handleCalendarCellHover($event) {
327
+ this.calendarCellHover.emit($event);
328
+ if (!this.startDate) {
329
+ this.setInputValue(this.startDateDirective?.elementRef, $event);
330
+ this.inputStartHoverValue = $event;
331
+ return;
332
+ }
333
+ if (!this.endDate) {
334
+ this.setInputValue(this.endDateDirective?.elementRef, $event);
335
+ this.inputEndHoverValue = $event;
336
+ return;
337
+ }
338
+ }
339
+ handleCalendarDateChange($event) {
340
+ this.calendarDateChange.emit($event);
341
+ }
342
+ handleStartDateChange(date) {
343
+ // if (date?.getTime() !== this.startDate?.getTime()) {
344
+ this.startDateChange.emit(date);
345
+ this.startDateValue = date ? date.toLocaleDateString(this.locale) : '';
346
+ this.inputStartHoverValue = null;
347
+ this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
348
+ // }
349
+ }
350
+ handleEndDateChange(date) {
351
+ // if (date?.getTime() !== this.endDate?.getTime()) {
352
+ this.endDateChange.emit(date);
353
+ this.endDateValue = date ? date.toLocaleDateString(this.locale) : '';
354
+ this.inputEndHoverValue = null;
355
+ this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
356
+ // }
357
+ }
358
+ handleClear($event) {
359
+ this.calendarComponent?.clearDates();
360
+ }
361
+ handleStartDateInputChange($event) {
362
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
363
+ if (!date) {
364
+ this.calendarComponent?.clearDates();
365
+ }
366
+ if (date instanceof Date && date.getTime()) {
367
+ if (!(this.forbiddenDate(date) || (this.endDate && this.endDate < date))) {
368
+ this.calendarDate = date;
369
+ this.startDate = date;
370
+ }
371
+ }
372
+ this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
373
+ }
374
+ handleEndDateInputChange($event) {
375
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
376
+ if (!date) {
377
+ this.endDate = null;
378
+ }
379
+ if (date instanceof Date && date.getTime()) {
380
+ if (!(this.forbiddenDate(date) || (this.startDate && this.startDate > date))) {
381
+ this.calendarDate = date;
382
+ this.endDate = date;
383
+ }
384
+ }
385
+ this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
386
+ }
387
+ forbiddenDate(date) {
388
+ return isDateDisabled(date, this.minDate, this.maxDate, this.disabledDates) && (this.dateFilter ? !this.dateFilter(date) : false);
389
+ }
390
+ registerOnChange(fn) {
391
+ this.onChange = fn;
392
+ }
393
+ registerOnTouched(fn) {
394
+ this.onTouched = fn;
395
+ }
396
+ setDisabledState(isDisabled) {
397
+ this.disabled = isDisabled;
398
+ }
399
+ writeValue(value) {
400
+ if (value !== null) {
401
+ this.value = value;
402
+ }
403
+ }
404
+ }
405
+ DateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
406
+ DateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: DateRangePickerComponent, selector: "c-date-range-picker", inputs: { dayFormat: "dayFormat", calendars: "calendars", cleaner: "cleaner", format: "format", indicator: "indicator", inputReadOnly: "inputReadOnly", navYearFirst: "navYearFirst", placeholder: "placeholder", ranges: "ranges", rangesButtonsColor: "rangesButtonsColor", rangesButtonsSize: "rangesButtonsSize", rangesButtonsVariant: "rangesButtonsVariant", separator: "separator", size: "size", timepicker: "timepicker", todayButton: "todayButton", todayButtonColor: "todayButtonColor", todayButtonSize: "todayButtonSize", todayButtonVariant: "todayButtonVariant", visible: "visible", startDate: "startDate", endDate: "endDate", calendarDate: "calendarDate", disabledDates: "disabledDates", firstDayOfWeek: "firstDayOfWeek", locale: "locale", maxDate: "maxDate", minDate: "minDate", navigation: "navigation", range: "range", dateFilter: "dateFilter", disabled: "disabled", value: "value", weekdayFormat: "weekdayFormat" }, outputs: { valueChange: "valueChange", calendarCellHover: "calendarCellHover", calendarDateChange: "calendarDateChange", endDateChange: "endDateChange", startDateChange: "startDateChange" }, host: { listeners: { "blur": "onBlur()" } }, providers: [
407
+ {
408
+ provide: NG_VALUE_ACCESSOR,
409
+ useExisting: forwardRef(() => DateRangePickerComponent),
410
+ multi: true
411
+ }
412
+ ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "calendarComponent", first: true, predicate: CalendarComponent, descendants: true }, { propertyName: "startDateDirective", first: true, predicate: StartDateDirective, descendants: true }, { propertyName: "endDateDirective", first: true, predicate: EndDateDirective, descendants: true }], exportAs: ["cDateRangePicker"], ngImport: i0, template: "<c-dropdown #dropdown=\"cDropdown\" autoClose=\"outside\" class=\"date-picker picker\" [visible]=\"visible\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\"\n >\n <input (change)=\"handleStartDateInputChange($event)\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\n cFormControl\n cStartDate\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n >\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\n </span>\n <input (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\n cEndDate\n cFormControl\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\n role=\"button\">\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu>\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!isMobile\">\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{getCustomRangeKey(customRange)}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "component", type: i5.CalendarComponent, selector: "c-calendar", inputs: ["calendarDate", "calendars", "dayFormat", "disabledDates", "startDate", "endDate", "firstDayOfWeek", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "range", "view", "weekdayFormat", "dateFilter"], outputs: ["calendarCellHover", "calendarDateChange", "endDateChange", "startDateChange", "viewChange"], exportAs: ["cCalendar"] }, { kind: "directive", type: i6.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "component", type: i7.InputGroupComponent, selector: "c-input-group", inputs: ["sizing"] }, { kind: "directive", type: i8.InputGroupTextDirective, selector: "[cInputGroupText]" }, { kind: "component", type: i9.DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "dark", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: i9.DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: i10.DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible", "dark"], exportAs: ["cDropdownMenu"] }, { kind: "component", type: i11.TimePickerComponent, selector: "c-time-picker", inputs: ["cleaner", "dateTimeFormatOptions", "disabled", "filterHours", "filterMinutes", "filterSeconds", "indicator", "inputReadOnly", "locale", "placeholder", "seconds", "size", "time", "variant", "visible"], outputs: ["timeChange"], exportAs: ["cTimePicker"] }, { kind: "directive", type: i12.StartDateDirective, selector: "[cStartDate]", exportAs: ["cStartDate"] }, { kind: "directive", type: i13.EndDateDirective, selector: "[cEndDate]", exportAs: ["cEndDate"] }] });
413
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DateRangePickerComponent, decorators: [{
414
+ type: Component,
415
+ args: [{ selector: 'c-date-range-picker', exportAs: 'cDateRangePicker', providers: [
416
+ {
417
+ provide: NG_VALUE_ACCESSOR,
418
+ useExisting: forwardRef(() => DateRangePickerComponent),
419
+ multi: true
420
+ }
421
+ ], template: "<c-dropdown #dropdown=\"cDropdown\" autoClose=\"outside\" class=\"date-picker picker\" [visible]=\"visible\">\n <c-input-group [caret]=\"false\"\n [disabled]=\"disabled ?? dropdown.visible\"\n [sizing]=\"size ?? ''\"\n cDropdownToggle\n class=\"picker-input-group\"\n >\n <input (change)=\"handleStartDateInputChange($event)\"\n [formControl]=\"startDateInput\"\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\n cFormControl\n cStartDate\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n >\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\n </span>\n <input (change)=\"handleEndDateInputChange($event)\"\n *ngIf=\"range\"\n [formControl]=\"endDateInput\"\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\n cEndDate\n cFormControl\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.disabled]=\"disabled ? '' : null\"\n pattern=\"[1-9]*\"\n [readonly]=\"inputReadOnly ?? null\"\n >\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\n </span>\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\n role=\"button\">\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\n </span>\n </span>\n\n </c-input-group>\n <div cDropdownMenu>\n <div class=\"date-picker-body\">\n <ng-template [ngIf]=\"!isMobile\">\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\n <button (click)=\"setCustomRange(customRange)\"\n *ngFor=\"let customRange of customRanges\"\n [color]=\"rangesButtonsColor\"\n [size]=\"rangesButtonsSize\"\n [variant]=\"rangesButtonsVariant\"\n cButton>\n {{getCustomRangeKey(customRange)}}\n </button>\n </div>\n </ng-template>\n <c-calendar\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\n (endDateChange)=\"handleEndDateChange($event)\"\n (startDateChange)=\"handleStartDateChange($event)\"\n [calendarDate]=\"calendarDate\"\n [calendars]=\"isMobile ? 1 : calendars\"\n [dateFilter]=\"dateFilter\"\n [disabledDates]=\"disabledDates\"\n [endDate]=\"endDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [locale]=\"locale\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [navigation]=\"navigation\"\n [range]=\"range\"\n [startDate]=\"startDate\"\n [navYearFirst]=\"navYearFirst\"\n [dayFormat]=\"dayFormat\"\n [weekdayFormat]=\"weekdayFormat\"\n class=\"date-picker-calendars\"\n ></c-calendar>\n <div *ngIf=\"false && timepicker\" class=\"date-picker-timepickers\">\n <!-- todo-->\n <c-time-picker\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!startDate\"\n [time]=\"startDate ?? undefined\"\n ></c-time-picker>\n <c-time-picker\n *ngIf=\"range\"\n variant=\"select\"\n [locale]=\"locale\"\n [disabled]=\"!endDate\"\n [time]=\"endDate ?? undefined\"\n ></c-time-picker>\n </div>\n </div>\n <div *ngIf=\"templates?.datePickerFooter\" class=\"picker-footer\">\n <ng-container *ngTemplateOutlet=\"templates?.datePickerFooter; context: {$implicit: dropdown}\"></ng-container>\n </div>\n </div>\n <ng-content></ng-content>\n</c-dropdown>\n" }]
422
+ }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; }, propDecorators: { dayFormat: [{
423
+ type: Input
424
+ }], calendars: [{
425
+ type: Input
426
+ }], cleaner: [{
427
+ type: Input
428
+ }], format: [{
429
+ type: Input
430
+ }], indicator: [{
431
+ type: Input
432
+ }], inputReadOnly: [{
433
+ type: Input
434
+ }], navYearFirst: [{
435
+ type: Input
436
+ }], placeholder: [{
437
+ type: Input
438
+ }], ranges: [{
439
+ type: Input
440
+ }], rangesButtonsColor: [{
441
+ type: Input
442
+ }], rangesButtonsSize: [{
443
+ type: Input
444
+ }], rangesButtonsVariant: [{
445
+ type: Input
446
+ }], separator: [{
447
+ type: Input
448
+ }], size: [{
449
+ type: Input
450
+ }], timepicker: [{
451
+ type: Input
452
+ }], todayButton: [{
453
+ type: Input
454
+ }], todayButtonColor: [{
455
+ type: Input
456
+ }], todayButtonSize: [{
457
+ type: Input
458
+ }], todayButtonVariant: [{
459
+ type: Input
460
+ }], visible: [{
461
+ type: Input
462
+ }], startDate: [{
463
+ type: Input
464
+ }], endDate: [{
465
+ type: Input
466
+ }], calendarDate: [{
467
+ type: Input
468
+ }], disabledDates: [{
469
+ type: Input
470
+ }], firstDayOfWeek: [{
471
+ type: Input
472
+ }], locale: [{
473
+ type: Input
474
+ }], maxDate: [{
475
+ type: Input
476
+ }], minDate: [{
477
+ type: Input
478
+ }], navigation: [{
479
+ type: Input
480
+ }], range: [{
481
+ type: Input
482
+ }], dateFilter: [{
483
+ type: Input
484
+ }], disabled: [{
485
+ type: Input
486
+ }], value: [{
487
+ type: Input
488
+ }], weekdayFormat: [{
489
+ type: Input
490
+ }], valueChange: [{
491
+ type: Output
492
+ }], calendarCellHover: [{
493
+ type: Output
494
+ }], calendarDateChange: [{
495
+ type: Output
496
+ }], endDateChange: [{
497
+ type: Output
498
+ }], startDateChange: [{
499
+ type: Output
500
+ }], calendarComponent: [{
501
+ type: ViewChild,
502
+ args: [CalendarComponent]
503
+ }], startDateDirective: [{
504
+ type: ViewChild,
505
+ args: [StartDateDirective]
506
+ }], endDateDirective: [{
507
+ type: ViewChild,
508
+ args: [EndDateDirective]
509
+ }], contentTemplates: [{
510
+ type: ContentChildren,
511
+ args: [TemplateIdDirective, { descendants: true }]
512
+ }], onBlur: [{
513
+ type: HostListener,
514
+ args: ['blur']
515
+ }] } });
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVFuRCxrQ0FBa0M7QUFDbEMsbUJBQW1CO0FBQ25C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QWdCO3NCQUE1RSxlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFckMsTUFBTTtzQkFBM0IsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbG9ycyB9IGZyb20gJy4uLy4uL2NvcmV1aS50eXBlcyc7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IGdldExvY2FsRGF0ZUZyb21TdHJpbmcsIGlzRGF0ZURpc2FibGVkIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIudXRpbHMnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlclR5cGUsIERheUZvcm1hdFR5cGUsIFdlZWtkYXlGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdGFydERhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9zdGFydC1kYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbmREYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZW5kLWRhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDYWxlbmRhclJhbmdlIHtcbiAgW2tleTogc3RyaW5nXTogRGF0ZVtdO1xufVxuXG5leHBvcnQgdHlwZSBUQ3VzdG9tUmFuZ2UgPSBbc3RyaW5nLCBEYXRlW11dXG5cbi8qKiBNdXN0IGJlIGEgdmFsaWQgZGF0ZSBzdHJpbmcgKi9cbi8vIHRvZG86IHZhbGlkYXRpb25cbi8vIGV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcihsb2NhbGU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbi8vICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4vLyAgICAgLy8gY29uc3QgdmFsaWREYXRlID0gIWlzTmFOKERhdGUucGFyc2UoY29udHJvbC52YWx1ZSkpO1xuLy8gICAgIHN0cmluZ1RvRGF0ZUNvbnZlcnQoY29udHJvbC52YWx1ZSwgbG9jYWxlKTtcbi8vICAgICBjb25zdCBkYXRlU2hpbSA9IGN2dERhdGUoY29udHJvbC52YWx1ZSwgbG9jYWxlKTtcbi8vICAgICAvLyBAdHMtaWdub3JlXG4vLyAgICAgLy8gY29udHJvbC5zZXRWYWx1ZShuZXcgRGF0ZShkYXRlU2hpbS55ZWFyLCBkYXRlU2hpbS5tb250aCwgZGF0ZVNoaW0uZGF5KSlcbi8vICAgICBjb25zb2xlLmxvZygnZGF0ZVNoaW0nLCBkYXRlU2hpbSwgbG9jYWxlKTtcbi8vICAgICBjb25zdCB2YWxpZERhdGUgPSBpc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKTtcbi8vICAgICBjb25zb2xlLmxvZygnaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3InLCBjb250cm9sLCBjb250cm9sLnZhbHVlLCB2YWxpZERhdGUpO1xuLy8gICAgIHJldHVybiB2YWxpZERhdGUgPyB7IGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yOiB7IHZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XG4vLyAgIH07XG4vLyB9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtZGF0ZS1yYW5nZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NEYXRlUmFuZ2VQaWNrZXInLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbmF2WWVhckZpcnN0OiBCb29sZWFuSW5wdXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvcm1hdCBvZiBkYXkgbmFtZS5cbiAgICogQGRlZmF1bHQgJ251bWVyaWMnXG4gICAqIEB0eXBlIERheUZvcm1hdFR5cGVcbiAgICovXG4gIEBJbnB1dCgpIGRheUZvcm1hdDogRGF5Rm9ybWF0VHlwZSA9ICdudW1lcmljJztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjYWxlbmRhcnMgdGhhdCByZW5kZXIgb24gZGVza3RvcCBkZXZpY2VzLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGNhbGVuZGFycyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY2FsZW5kYXJzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNhbGVuZGFycygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXJzOiBudW1iZXIgPSAyO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNsZWFuZXIgYnV0dG9uLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhbmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYW5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY2xlYW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYW5lcjtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFuZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgZGF0ZSBmb3JtYXQuXG4gICAqIFdlIHVzZSBkYXRlLWZucyB0byBmb3JtYXQgZGF0ZXMuIFZpc2l0IGh0dHBzOi8vZGF0ZS1mbnMub3JnL3YyLjI4LjAvZG9jcy9mb3JtYXQgdG8gY2hlY2sgYWNjZXB0ZWQgcGF0dGVybnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgaW5wdXQgaW5kaWNhdG9yLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBpbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmRpY2F0b3IgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IGluZGljYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5faW5kaWNhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5kaWNhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGlucHV0UmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbnB1dFJlYWRPbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbnB1dFJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFJlYWRPbmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5wdXRSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSZW9yZGVyIHllYXItbW9udGggbmF2aWdhdGlvbiwgYW5kIHJlbmRlciB5ZWFyIGZpcnN0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbmF2WWVhckZpcnN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmF2WWVhckZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBuYXZZZWFyRmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdlllYXJGaXJzdDtcbiAgfVxuXG4gIHByaXZhdGUgX25hdlllYXJGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludHMgdGhhdCBhcmUgdmlzaWJsZSBpbiBzdGFydCBkYXRlIGFuZCBlbmQgZGF0ZSBpbnB1dHMuXG4gICAqIHR5cGUgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgc3RyaW5nW10gPSBbJ1N0YXJ0IGRhdGUnLCAnRW5kIGRhdGUnXTtcblxuICAvKipcbiAgICogUHJlZGVmaW5lZCBkYXRlIHJhbmdlcyB0aGUgdXNlciBjYW4gc2VsZWN0IGZyb20uXG4gICAqIEB0eXBlIElDYWxlbmRhclJhbmdlXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXM/OiBvYmplY3Q7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbG9yIGNvbnRleHQgb2YgdGhlIGNhbmNlbCBidXR0b24gdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICogQHR5cGUgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdkYXJrJyB8ICdsaWdodCcgfCBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ3NlY29uZGFyeSdcbiAgICovXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNDb2xvcj86IENvbG9ycyA9ICdzZWNvbmRhcnknO1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSByYW5nZXMgYnV0dG9uIHNtYWxsIG9yIGxhcmdlLlxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc1NpemU/OiAnc20nIHwgJ2xnJztcblxuICAvKipcbiAgICogU2V0IHRoZSByYW5nZXMgYnV0dG9uIHZhcmlhbnQgdG8gYW4gb3V0bGluZWQgYnV0dG9uIG9yIGEgZ2hvc3QgYnV0dG9uLlxuICAgKiBAdHlwZSAnb3V0bGluZScgfCAnZ2hvc3QnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSByYW5nZXNCdXR0b25zVmFyaWFudD86ICdvdXRsaW5lJyB8ICdnaG9zdCcgPSAnZ2hvc3QnO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGljb24gb3IgY2hhcmFjdGVyIHRoYXQgc2VwYXJhdGVzIHR3byBkYXRlcy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VwYXJhdG9yID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzZXBhcmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcGFyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgX3NlcGFyYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYWRkaXRpb25hbCB0aW1lIHNlbGVjdGlvbiBieSBhZGRpbmcgc2VsZWN0IGJveGVzIHRvIGNob29zZSB0aW1lLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdGltZXBpY2tlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3RpbWVwaWNrZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHRpbWVwaWNrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVwaWNrZXI7XG4gIH1cblxuICBwcml2YXRlIF90aW1lcGlja2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0b2RheSBidXR0b24uXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnVG9kYXknXG4gICAqL1xuICBASW5wdXQoKSB0b2RheUJ1dHRvbjogc3RyaW5nID0gJ1RvZGF5JztcblxuICAvKipcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgdG9kYXkgYnV0dG9uIHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXG4gICAqIEB0eXBlICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbycgfCAnZGFyaycgfCAnbGlnaHQnIHwgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgdG9kYXlCdXR0b25Db2xvcjogQ29sb3JzID0gJ3ByaW1hcnknO1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSB0b2RheSBidXR0b24gc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnXG4gICAqIEBkZWZhdWx0ICdzbSdcbiAgICovXG4gIEBJbnB1dCgpIHRvZGF5QnV0dG9uU2l6ZTogJ3NtJyB8ICdsZycgPSAnc20nO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRvZGF5IGJ1dHRvbiB2YXJpYW50IHRvIGFuIG91dGxpbmVkIGJ1dHRvbiBvciBhIGdob3N0IGJ1dHRvbi5cbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgdG9kYXlCdXR0b25WYXJpYW50PzogJ291dGxpbmUnIHwgJ2dob3N0JztcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmlzaWJsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzdGFydERhdGU/OiBEYXRlIHwgbnVsbDtcbiAgQElucHV0KCkgZW5kRGF0ZT86IERhdGUgfCBudWxsO1xuICBASW5wdXQoKSBjYWxlbmRhckRhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZERhdGVzOiBEYXRlW10gfCBEYXRlW11bXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmaXJzdERheU9mV2Vlayh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZmlyc3REYXlPZldlZWsgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZmlyc3REYXlPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlyc3REYXlPZldlZWs6IG51bWJlciA9IDE7XG5cbiAgQElucHV0KCkgbG9jYWxlOiBzdHJpbmcgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBuYXZpZ2F0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbmF2aWdhdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBBbGxvdyByYW5nZSBzZWxlY3Rpb24uXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCByYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JhbmdlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCByYW5nZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XG4gIH1cblxuICBwcml2YXRlIF9yYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZGF0ZUZpbHRlcj86IERhdGVGaWx0ZXJUeXBlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZVtdKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbXTtcbiAgICBpZiAodGhpcy5fdmFsdWUudG9TdHJpbmcoKSAhPT0gbmV3VmFsdWUudG9TdHJpbmcoKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZXQgbGVuZ3RoIG9yIGZvcm1hdCBvZiBkYXkgbmFtZS5cbiAgICogQHR5cGUgV2Vla2RheUZvcm1hdFR5cGVcbiAgICogQGRlZmF1bHQgJ3Nob3J0J1xuICAgKi9cbiAgQElucHV0KCkgd2Vla2RheUZvcm1hdDogV2Vla2RheUZvcm1hdFR5cGUgPSAnc2hvcnQnO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IERhdGVbXSB8IHVuZGVmaW5lZD4oKTtcblxuICBAT3V0cHV0KCkgY2FsZW5kYXJDZWxsSG92ZXI6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgY2FsZW5kYXJEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBlbmREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHN0YXJ0RGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG5cbiAgQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCkgY2FsZW5kYXJDb21wb25lbnQhOiBDYWxlbmRhckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChTdGFydERhdGVEaXJlY3RpdmUpIHN0YXJ0RGF0ZURpcmVjdGl2ZSE6IFN0YXJ0RGF0ZURpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZChFbmREYXRlRGlyZWN0aXZlKSBlbmREYXRlRGlyZWN0aXZlITogRW5kRGF0ZURpcmVjdGl2ZTtcblxuICB0ZW1wbGF0ZXM6IGFueSA9IHt9O1xuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY29udGVudFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcblxuICBASG9zdExpc3RlbmVyKCdibHVyJykgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUgPSB0cnVlO1xuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XG5cbiAgc2V0IHN0YXJ0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9zdGFydERhdGVWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhcnREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuc3RhcnREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xuXG4gIHNldCBlbmREYXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW5kRGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLl9lbmREYXRlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBlbmREYXRlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kRGF0ZVZhbHVlO1xuICB9XG5cbiAgcHVibGljIF9lbmREYXRlVmFsdWU6IHN0cmluZyA9IHRoaXMuZW5kRGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcblxuICBwdWJsaWMgc3RhcnREYXRlUGxhY2Vob2xkZXI6IHN0cmluZyA9IHRoaXMucGxhY2Vob2xkZXJbMF07XG4gIHB1YmxpYyBlbmREYXRlUGxhY2Vob2xkZXI6IHN0cmluZyA9IHRoaXMucGxhY2Vob2xkZXJbMV07XG5cbiAgcHJpdmF0ZSBsYXlvdXRDaGFuZ2VzITogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIHRvZG86IHZhbGlkYXRpb25cbiAgc3RhcnREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5zdGFydERhdGVWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSwgW1xuICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAvLyBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcbiAgICAvLyBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksXG4gICAgLy8gaW52YWxpZERhdGVTdHJpbmdWYWxpZGF0b3IodGhpcy5sb2NhbGUpXG4gIF0pO1xuICBlbmREYXRlSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5lbmREYXRlVmFsdWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH0sIFtcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXG4gICAgLy8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTApLFxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxuICBdKTtcbiAgZGF0ZVJhbmdlR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgc2V0IGlucHV0U3RhcnRIb3ZlclZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dFN0YXJ0SG92ZXJWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pbnB1dFN0YXJ0SG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIHNldCBpbnB1dEVuZEhvdmVyVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9pbnB1dEVuZEhvdmVyVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbnB1dEVuZEhvdmVyVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RW5kSG92ZXJWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lucHV0RW5kSG92ZXJWYWx1ZSE6IERhdGUgfCBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubGF5b3V0Q2hhbmdlcyA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoW1xuICAgICAgQnJlYWtwb2ludHMuSGFuZHNldCxcbiAgICAgIEJyZWFrcG9pbnRzLlRhYmxldFxuICAgIF0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5pc01vYmlsZSA9IHJlc3VsdC5tYXRjaGVzO1xuICAgIH0pO1xuICAgIHRoaXMuY3VzdG9tUmFuZ2VzID0gdGhpcy5yYW5nZXMgPyBPYmplY3QuZW50cmllcyh0aGlzLnJhbmdlcykgOiBbXTtcblxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcbiAgICB0aGlzLmVuZERhdGVWYWx1ZSA9IHRoaXMuZW5kRGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubGF5b3V0Q2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVzLmZvckVhY2goKGNoaWxkOiBUZW1wbGF0ZUlkRGlyZWN0aXZlKSA9PiB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZTogYW55KSB7XG4gICAgcmV0dXJuIGN1c3RvbVJhbmdlWzBdO1xuICB9XG5cbiAgc2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2U6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpO1xuICAgIHRoaXMuc3RhcnREYXRlID0gY3VzdG9tUmFuZ2VbMV1bMF07XG4gICAgdGhpcy5lbmREYXRlID0gY3VzdG9tUmFuZ2VbMV1bMV07XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckNlbGxIb3ZlcigkZXZlbnQ6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5jYWxlbmRhckNlbGxIb3Zlci5lbWl0KCRldmVudCk7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuc3RhcnREYXRlRGlyZWN0aXZlPy5lbGVtZW50UmVmLCAkZXZlbnQpO1xuICAgICAgdGhpcy5pbnB1dFN0YXJ0SG92ZXJWYWx1ZSA9ICRldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLmVuZERhdGVEaXJlY3RpdmU/LmVsZW1lbnRSZWYsICRldmVudCk7XG4gICAgICB0aGlzLmlucHV0RW5kSG92ZXJWYWx1ZSA9ICRldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50OiBEYXRlKSB7XG4gICAgdGhpcy5jYWxlbmRhckRhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlU3RhcnREYXRlQ2hhbmdlKGRhdGU6IERhdGUgfCBudWxsKSB7XG4gICAgLy8gaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5zdGFydERhdGU/LmdldFRpbWUoKSkge1xuICAgIHRoaXMuc3RhcnREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgdGhpcy5zdGFydERhdGVWYWx1ZSA9IGRhdGUgPyBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgOiAnJztcbiAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5zdGFydERhdGUgJiYgdGhpcy5lbmREYXRlID8gW3RoaXMuc3RhcnREYXRlLCB0aGlzLmVuZERhdGVdIDogW107XG4gICAgLy8gfVxuICB9XG5cbiAgaGFuZGxlRW5kRGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xuICAgIC8vIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuZW5kRGF0ZT8uZ2V0VGltZSgpKSB7XG4gICAgdGhpcy5lbmREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgdGhpcy5lbmREYXRlVmFsdWUgPSBkYXRlID8gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpIDogJyc7XG4gICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSBudWxsO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUgPyBbdGhpcy5zdGFydERhdGUsIHRoaXMuZW5kRGF0ZV0gOiBbXTtcbiAgICAvLyB9XG4gIH1cblxuICBoYW5kbGVDbGVhcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNhbGVuZGFyQ29tcG9uZW50Py5jbGVhckRhdGVzKCk7XG4gIH1cblxuICBoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRhdGUgPSBnZXRMb2NhbERhdGVGcm9tU3RyaW5nKCRldmVudC50YXJnZXQ/LnZhbHVlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJDb21wb25lbnQ/LmNsZWFyRGF0ZXMoKTtcbiAgICB9XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuZW5kRGF0ZSAmJiB0aGlzLmVuZERhdGUgPCBkYXRlKSkpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhckRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcbiAgfVxuXG4gIGhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRhdGUgPSBnZXRMb2NhbERhdGVGcm9tU3RyaW5nKCRldmVudC50YXJnZXQ/LnZhbHVlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgaWYgKCEodGhpcy5mb3JiaWRkZW5EYXRlKGRhdGUpIHx8ICh0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLnN0YXJ0RGF0ZSA+IGRhdGUpKSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5lbmREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xuICB9XG5cbiAgZm9yYmlkZGVuRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZURpc2FibGVkKGRhdGUsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLmRpc2FibGVkRGF0ZXMpICYmICh0aGlzLmRhdGVGaWx0ZXIgPyAhdGhpcy5kYXRlRmlsdGVyKGRhdGUpIDogZmFsc2UpO1xuICB9XG5cbiAgc2V0SW5wdXRWYWx1ZSA9IChlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBkYXRlOiBEYXRlIHwgbnVsbCkgPT4ge1xuICAgIGlmICghZWxlbWVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IGRhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IChEYXRlW10pKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG59XG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIiBhdXRvQ2xvc2U9XCJvdXRzaWRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlciBwaWNrZXJcIiBbdmlzaWJsZV09XCJ2aXNpYmxlXCI+XG4gIDxjLWlucHV0LWdyb3VwIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCA/PyBkcm9wZG93bi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgW3NpemluZ109XCJzaXplID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgY0Ryb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwXCJcbiAgPlxuICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic3RhcnREYXRlSW5wdXRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRTdGFydEhvdmVyVmFsdWV9XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyID8/IHBsYWNlaG9sZGVyWzBdXCJcbiAgICAgICAgICAgY0Zvcm1Db250cm9sXG4gICAgICAgICAgIGNTdGFydERhdGVcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgIHBhdHRlcm49XCJbMS05XSpcIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSA/PyBudWxsXCJcbiAgICA+XG4gICAgPHNwYW4gKm5nSWY9XCJyYW5nZSAmJiBzZXBhcmF0b3IgIT09IGZhbHNlXCIgY0lucHV0R3JvdXBUZXh0PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIGRhdGUtcGlja2VyLWFycm93LWljb25cIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPGlucHV0IChjaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImVuZERhdGVJbnB1dFwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cIntob3ZlcjogISFpbnB1dEVuZEhvdmVyVmFsdWV9XCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVuZERhdGVQbGFjZWhvbGRlciA/PyBwbGFjZWhvbGRlclsxXVwiXG4gICAgICAgICAgIGNFbmREYXRlXG4gICAgICAgICAgIGNGb3JtQ29udHJvbFxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgcGF0dGVybj1cIlsxLTldKlwiXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxuICAgID5cbiAgICA8c3BhbiAqbmdJZj1cImluZGljYXRvciB8fCBjbGVhbmVyXCIgY0lucHV0R3JvdXBUZXh0PlxuICAgICAgPHNwYW4gKm5nSWY9XCJpbmRpY2F0b3JcIiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pbmRpY2F0b3JcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtaWNvbiBkYXRlLXBpY2tlci1pbnB1dC1pY29uXCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCIgKm5nSWY9XCJjbGVhbmVyICYmIHN0YXJ0RGF0ZSAmJiFkaXNhYmxlZFwiIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWNsZWFuZXJcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIGRhdGUtcGlja2VyLWNsZWFuZXItaWNvblwiPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG5cbiAgPC9jLWlucHV0LWdyb3VwPlxuICA8ZGl2IGNEcm9wZG93bk1lbnU+XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWJvZHlcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNNb2JpbGVcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInJhbmdlc1wiIGNsYXNzPVwiZGF0ZS1waWNrZXItcmFuZ2VzXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0Q3VzdG9tUmFuZ2UoY3VzdG9tUmFuZ2UpXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjdXN0b21SYW5nZSBvZiBjdXN0b21SYW5nZXNcIlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInJhbmdlc0J1dHRvbnNDb2xvclwiXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCJyYW5nZXNCdXR0b25zU2l6ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJyYW5nZXNCdXR0b25zVmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICBjQnV0dG9uPlxuICAgICAgICAgICAge3tnZXRDdXN0b21SYW5nZUtleShjdXN0b21SYW5nZSl9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8Yy1jYWxlbmRhclxuICAgICAgICAoY2FsZW5kYXJDZWxsSG92ZXIpPVwiaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50KVwiXG4gICAgICAgIChjYWxlbmRhckRhdGVDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZW5kRGF0ZUNoYW5nZSk9XCJoYW5kbGVFbmREYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc3RhcnREYXRlQ2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2NhbGVuZGFyRGF0ZV09XCJjYWxlbmRhckRhdGVcIlxuICAgICAgICBbY2FsZW5kYXJzXT1cImlzTW9iaWxlID8gMSA6IGNhbGVuZGFyc1wiXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZVwiXG4gICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgW3JhbmdlXT1cInJhbmdlXCJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGVcIlxuICAgICAgICBbbmF2WWVhckZpcnN0XT1cIm5hdlllYXJGaXJzdFwiXG4gICAgICAgIFtkYXlGb3JtYXRdPVwiZGF5Rm9ybWF0XCJcbiAgICAgICAgW3dlZWtkYXlGb3JtYXRdPVwid2Vla2RheUZvcm1hdFwiXG4gICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJzXCJcbiAgICAgID48L2MtY2FsZW5kYXI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZmFsc2UgJiYgdGltZXBpY2tlclwiIGNsYXNzPVwiZGF0ZS1waWNrZXItdGltZXBpY2tlcnNcIj5cbiAgICAgICAgPCEtLSB0b2RvLS0+XG4gICAgICAgIDxjLXRpbWUtcGlja2VyXG4gICAgICAgICAgdmFyaWFudD1cInNlbGVjdFwiXG4gICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RhcnREYXRlXCJcbiAgICAgICAgICBbdGltZV09XCJzdGFydERhdGUgPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgPjwvYy10aW1lLXBpY2tlcj5cbiAgICAgICAgPGMtdGltZS1waWNrZXJcbiAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcbiAgICAgICAgICB2YXJpYW50PVwic2VsZWN0XCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFlbmREYXRlXCJcbiAgICAgICAgICBbdGltZV09XCJlbmREYXRlID8/IHVuZGVmaW5lZFwiXG4gICAgICAgID48L2MtdGltZS1waWNrZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidGVtcGxhdGVzPy5kYXRlUGlja2VyRm9vdGVyXCIgY2xhc3M9XCJwaWNrZXItZm9vdGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy5kYXRlUGlja2VyRm9vdGVyOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkcm9wZG93bn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvYy1kcm9wZG93bj5cbiJdfQ==