@coreui/angular-pro 4.1.0 → 4.2.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +503 -0
  70. package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +57 -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 +434 -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 +5009 -1813
  247. package/fesm2015/coreui-angular-pro.mjs.map +1 -1
  248. package/fesm2020/coreui-angular-pro.mjs +4989 -1828
  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 +235 -0
  266. package/lib/date-range-picker/date-range-picker.module.d.ts +16 -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 +169 -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,503 @@
1
+ import { Component, 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 * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/cdk/layout";
11
+ import * as i2 from "@angular/common";
12
+ import * as i3 from "@angular/forms";
13
+ import * as i4 from "../../button/button.directive";
14
+ import * as i5 from "../../calendar/calendar/calendar.component";
15
+ import * as i6 from "../../form/form-control/form-control.directive";
16
+ import * as i7 from "../../form/input-group/input-group.component";
17
+ import * as i8 from "../../form/input-group-text/input-group-text.directive";
18
+ import * as i9 from "../../dropdown/dropdown/dropdown.component";
19
+ import * as i10 from "../../dropdown/dropdown-menu/dropdown-menu.directive";
20
+ import * as i11 from "../start-date.directive";
21
+ import * as i12 from "../end-date.directive";
22
+ /** Must be a valid date string */
23
+ // todo: validation
24
+ // export function invalidDateStringValidator(locale: string): ValidatorFn {
25
+ // return (control: AbstractControl): ValidationErrors | null => {
26
+ // // const validDate = !isNaN(Date.parse(control.value));
27
+ // stringToDateConvert(control.value, locale);
28
+ // const dateShim = cvtDate(control.value, locale);
29
+ // // @ts-ignore
30
+ // // control.setValue(new Date(dateShim.year, dateShim.month, dateShim.day))
31
+ // console.log('dateShim', dateShim, locale);
32
+ // const validDate = isValidDate(control.value);
33
+ // console.log('invalidDateStringValidator', control, control.value, validDate);
34
+ // return validDate ? { invalidDateStringValidator: { value: control.value } } : null;
35
+ // };
36
+ // }
37
+ export class DateRangePickerComponent {
38
+ constructor(breakpointObserver) {
39
+ this.breakpointObserver = breakpointObserver;
40
+ /**
41
+ * Set the format of day name.
42
+ * @default 'numeric'
43
+ * @type DayFormatType
44
+ */
45
+ this.dayFormat = 'numeric';
46
+ this._calendars = 2;
47
+ this._cleaner = true;
48
+ this._indicator = true;
49
+ this._inputReadOnly = false;
50
+ this._navYearFirst = false;
51
+ /**
52
+ * Specifies short hints that are visible in start date and end date inputs.
53
+ * type string
54
+ */
55
+ this.placeholder = ['Start date', 'End date'];
56
+ /**
57
+ * Sets the color context of the cancel button to one of CoreUI’s themed colors.
58
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
59
+ * @default 'secondary'
60
+ */
61
+ this.rangesButtonsColor = 'secondary';
62
+ /**
63
+ * Set the ranges button variant to an outlined button or a ghost button.
64
+ * @type 'outline' | 'ghost' | undefined
65
+ */
66
+ this.rangesButtonsVariant = 'ghost';
67
+ this._separator = true;
68
+ this._timepicker = false;
69
+ /**
70
+ * Toggle visibility or set the content of today button.
71
+ * @type string
72
+ * @default 'Today'
73
+ */
74
+ this.todayButton = 'Today';
75
+ /**
76
+ * Sets the color context of the today button to one of CoreUI’s themed colors.
77
+ * @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | string
78
+ * @default 'primary'
79
+ */
80
+ this.todayButtonColor = 'primary';
81
+ /**
82
+ * Size the today button small or large.
83
+ * @type 'sm' | 'lg'
84
+ * @default 'sm'
85
+ */
86
+ this.todayButtonSize = 'sm';
87
+ this._visible = false;
88
+ this.disabledDates = [];
89
+ this._firstDayOfWeek = 1;
90
+ this.locale = 'default';
91
+ this.maxDate = null;
92
+ this.minDate = null;
93
+ this._navigation = true;
94
+ this._range = true;
95
+ this._disabled = false;
96
+ this._value = [];
97
+ /**
98
+ * Set length or format of day name.
99
+ * @type WeekdayFormatType
100
+ * @default 'short'
101
+ */
102
+ this.weekdayFormat = 'short';
103
+ this.valueChange = new EventEmitter();
104
+ this.calendarCellHover = new EventEmitter();
105
+ this.calendarDateChange = new EventEmitter();
106
+ this.endDateChange = new EventEmitter();
107
+ this.startDateChange = new EventEmitter();
108
+ this.isMobile = true;
109
+ this._startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
110
+ this._endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
111
+ this.startDatePlaceholder = this.placeholder[0];
112
+ this.endDatePlaceholder = this.placeholder[1];
113
+ // todo: validation
114
+ this.startDateInput = new FormControl({ value: this.startDateValue, disabled: this.disabled }, [
115
+ Validators.required
116
+ // Validators.minLength(8),
117
+ // Validators.maxLength(10),
118
+ // invalidDateStringValidator(this.locale)
119
+ ]);
120
+ this.endDateInput = new FormControl({ value: this.endDateValue, disabled: this.disabled }, [
121
+ Validators.required
122
+ // Validators.minLength(8),
123
+ // Validators.maxLength(10),
124
+ // invalidDateStringValidator(this.locale)
125
+ ]);
126
+ this.setInputValue = (elementRef, date) => {
127
+ if (!elementRef) {
128
+ return;
129
+ }
130
+ elementRef.nativeElement.value = date?.toLocaleDateString(this.locale) ?? '';
131
+ return;
132
+ };
133
+ this.onChange = (value) => { };
134
+ this.onTouched = () => { };
135
+ }
136
+ /**
137
+ * The number of calendars that render on desktop devices.
138
+ * @type number
139
+ * @default 2
140
+ */
141
+ set calendars(value) {
142
+ this._calendars = coerceNumberProperty(value);
143
+ }
144
+ get calendars() {
145
+ return this._calendars;
146
+ }
147
+ /**
148
+ * Toggle visibility or set the content of the cleaner button.
149
+ * @type boolean
150
+ * @default true
151
+ */
152
+ set cleaner(value) {
153
+ this._cleaner = coerceBooleanProperty(value);
154
+ }
155
+ get cleaner() {
156
+ return this._cleaner;
157
+ }
158
+ /**
159
+ * Toggle visibility or set the content of the input indicator.
160
+ * @type boolean
161
+ * @default true
162
+ */
163
+ set indicator(value) {
164
+ this._indicator = coerceBooleanProperty(value);
165
+ }
166
+ get indicator() {
167
+ return this._indicator;
168
+ }
169
+ /**
170
+ * Toggle the readonly state for the component.
171
+ * @type boolean
172
+ * @default false
173
+ */
174
+ set inputReadOnly(value) {
175
+ this._inputReadOnly = coerceBooleanProperty(value);
176
+ }
177
+ get inputReadOnly() {
178
+ return this._inputReadOnly;
179
+ }
180
+ /**
181
+ * Reorder year-month navigation, and render year first.
182
+ * @type boolean
183
+ * @default false
184
+ */
185
+ set navYearFirst(value) {
186
+ this._navYearFirst = coerceBooleanProperty(value);
187
+ }
188
+ get navYearFirst() {
189
+ return this._navYearFirst;
190
+ }
191
+ /**
192
+ * Default icon or character that separates two dates.
193
+ * @type boolean
194
+ * @default true
195
+ */
196
+ set separator(value) {
197
+ this._separator = coerceBooleanProperty(value);
198
+ }
199
+ get separator() {
200
+ return this._separator;
201
+ }
202
+ /**
203
+ * Provide an additional time selection by adding select boxes to choose time.
204
+ * @type boolean
205
+ * @default false
206
+ */
207
+ set timepicker(value) {
208
+ this._timepicker = coerceBooleanProperty(value);
209
+ }
210
+ get timepicker() {
211
+ return this._timepicker;
212
+ }
213
+ /**
214
+ * Toggle the visibility of the component.
215
+ * @type boolean
216
+ * @default false
217
+ */
218
+ set visible(value) {
219
+ this._visible = coerceBooleanProperty(value);
220
+ }
221
+ get visible() {
222
+ return this._visible;
223
+ }
224
+ set firstDayOfWeek(value) {
225
+ this._firstDayOfWeek = coerceNumberProperty(value);
226
+ }
227
+ get firstDayOfWeek() {
228
+ return this._firstDayOfWeek;
229
+ }
230
+ set navigation(value) {
231
+ this._navigation = coerceBooleanProperty(value);
232
+ }
233
+ get navigation() {
234
+ return this._navigation;
235
+ }
236
+ /**
237
+ * Allow range selection.
238
+ * @type boolean
239
+ * @default false
240
+ */
241
+ set range(value) {
242
+ this._range = coerceBooleanProperty(value);
243
+ }
244
+ get range() {
245
+ return this._range;
246
+ }
247
+ set disabled(value) {
248
+ this._disabled = coerceBooleanProperty(value);
249
+ }
250
+ get disabled() {
251
+ return this._disabled;
252
+ }
253
+ set value(value) {
254
+ const newValue = Array.isArray(value) ? [...value] : [];
255
+ if (this._value.toString() !== newValue.toString()) {
256
+ this._value = newValue;
257
+ this.onChange(newValue);
258
+ this.onTouched();
259
+ this.valueChange.emit(this.value);
260
+ }
261
+ }
262
+ get value() {
263
+ return this._value;
264
+ }
265
+ onBlur() {
266
+ this.onTouched();
267
+ }
268
+ set startDateValue(value) {
269
+ this.startDateInput.setValue(value);
270
+ this._startDateValue = value;
271
+ }
272
+ get startDateValue() {
273
+ return this._startDateValue;
274
+ }
275
+ set endDateValue(value) {
276
+ this.endDateInput.setValue(value);
277
+ this._endDateValue = value;
278
+ }
279
+ get endDateValue() {
280
+ return this._endDateValue;
281
+ }
282
+ set inputStartHoverValue(value) {
283
+ this._inputStartHoverValue = value;
284
+ }
285
+ get inputStartHoverValue() {
286
+ return this._inputStartHoverValue;
287
+ }
288
+ set inputEndHoverValue(value) {
289
+ this._inputEndHoverValue = value;
290
+ }
291
+ get inputEndHoverValue() {
292
+ return this._inputEndHoverValue;
293
+ }
294
+ ngOnInit() {
295
+ this.layoutChanges = this.breakpointObserver.observe([
296
+ Breakpoints.Handset,
297
+ Breakpoints.Tablet
298
+ ]).subscribe(result => {
299
+ this.isMobile = result.matches;
300
+ });
301
+ this.customRanges = this.ranges ? Object.entries(this.ranges) : [];
302
+ this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
303
+ this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
304
+ }
305
+ ngOnDestroy() {
306
+ this.layoutChanges.unsubscribe();
307
+ }
308
+ getCustomRangeKey(customRange) {
309
+ return customRange[0];
310
+ }
311
+ setCustomRange(customRange) {
312
+ const key = this.getCustomRangeKey(customRange);
313
+ this.startDate = customRange[1][0];
314
+ this.endDate = customRange[1][1];
315
+ }
316
+ handleCalendarCellHover($event) {
317
+ this.calendarCellHover.emit($event);
318
+ if (!this.startDate) {
319
+ this.setInputValue(this.startDateDirective?.elementRef, $event);
320
+ this.inputStartHoverValue = $event;
321
+ return;
322
+ }
323
+ if (!this.endDate) {
324
+ this.setInputValue(this.endDateDirective?.elementRef, $event);
325
+ this.inputEndHoverValue = $event;
326
+ return;
327
+ }
328
+ }
329
+ handleCalendarDateChange($event) {
330
+ this.calendarDateChange.emit($event);
331
+ }
332
+ handleStartDateChange(date) {
333
+ // if (date?.getTime() !== this.startDate?.getTime()) {
334
+ this.startDateChange.emit(date);
335
+ this.startDateValue = date ? date.toLocaleDateString(this.locale) : '';
336
+ this.inputStartHoverValue = null;
337
+ this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
338
+ // }
339
+ }
340
+ handleEndDateChange(date) {
341
+ // if (date?.getTime() !== this.endDate?.getTime()) {
342
+ this.endDateChange.emit(date);
343
+ this.endDateValue = date ? date.toLocaleDateString(this.locale) : '';
344
+ this.inputEndHoverValue = null;
345
+ this.value = this.startDate && this.endDate ? [this.startDate, this.endDate] : [];
346
+ // }
347
+ }
348
+ handleClear($event) {
349
+ this.calendarComponent?.clearDates();
350
+ }
351
+ handleStartDateInputChange($event) {
352
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
353
+ if (!date) {
354
+ this.calendarComponent?.clearDates();
355
+ }
356
+ if (date instanceof Date && date.getTime()) {
357
+ if (!(this.forbiddenDate(date) || (this.endDate && this.endDate < date))) {
358
+ this.calendarDate = date;
359
+ this.startDate = date;
360
+ }
361
+ }
362
+ this.startDateValue = this.startDate?.toLocaleDateString(this.locale) ?? '';
363
+ }
364
+ handleEndDateInputChange($event) {
365
+ const date = getLocalDateFromString($event.target?.value, this.locale, this.timepicker);
366
+ if (!date) {
367
+ this.endDate = null;
368
+ }
369
+ if (date instanceof Date && date.getTime()) {
370
+ if (!(this.forbiddenDate(date) || (this.startDate && this.startDate > date))) {
371
+ this.calendarDate = date;
372
+ this.endDate = date;
373
+ }
374
+ }
375
+ this.endDateValue = this.endDate?.toLocaleDateString(this.locale) ?? '';
376
+ }
377
+ forbiddenDate(date) {
378
+ return isDateDisabled(date, this.minDate, this.maxDate, this.disabledDates) && (this.dateFilter ? !this.dateFilter(date) : false);
379
+ }
380
+ registerOnChange(fn) {
381
+ this.onChange = fn;
382
+ }
383
+ registerOnTouched(fn) {
384
+ this.onTouched = fn;
385
+ }
386
+ setDisabledState(isDisabled) {
387
+ this.disabled = isDisabled;
388
+ }
389
+ writeValue(value) {
390
+ if (value !== null) {
391
+ this.value = value;
392
+ }
393
+ }
394
+ }
395
+ DateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
396
+ DateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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: [
397
+ {
398
+ provide: NG_VALUE_ACCESSOR,
399
+ useExisting: forwardRef(() => DateRangePickerComponent),
400
+ multi: true
401
+ }
402
+ ], 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\">\r\n <c-input-group [caret]=\"false\"\r\n [disabled]=\"disabled ?? dropdown.visible\"\r\n [sizing]=\"size ?? ''\"\r\n cDropdownToggle\r\n class=\"picker-input-group\"\r\n >\r\n <input (change)=\"handleStartDateInputChange($event)\"\r\n [formControl]=\"startDateInput\"\r\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\r\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\r\n cFormControl\r\n cStartDate\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\r\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\r\n </span>\r\n <input (change)=\"handleEndDateInputChange($event)\"\r\n *ngIf=\"range\"\r\n [formControl]=\"endDateInput\"\r\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\r\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\r\n cEndDate\r\n cFormControl\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\r\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\r\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\r\n </span>\r\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\r\n role=\"button\">\r\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\r\n </span>\r\n </span>\r\n\r\n </c-input-group>\r\n <div [visible]=\"true\" cDropdownMenu>\r\n <div class=\"date-picker-body\">\r\n <ng-template [ngIf]=\"!isMobile\">\r\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\r\n <button (click)=\"setCustomRange(customRange)\"\r\n *ngFor=\"let customRange of customRanges\"\r\n [color]=\"rangesButtonsColor\"\r\n [size]=\"rangesButtonsSize\"\r\n [variant]=\"rangesButtonsVariant\"\r\n cButton>\r\n {{getCustomRangeKey(customRange)}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n <c-calendar\r\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\r\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\r\n (endDateChange)=\"handleEndDateChange($event)\"\r\n (startDateChange)=\"handleStartDateChange($event)\"\r\n [calendarDate]=\"calendarDate\"\r\n [calendars]=\"isMobile ? 1 : calendars\"\r\n [dateFilter]=\"dateFilter\"\r\n [disabledDates]=\"disabledDates\"\r\n [endDate]=\"endDate\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [locale]=\"locale\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n [navigation]=\"navigation\"\r\n [range]=\"range\"\r\n [startDate]=\"startDate\"\r\n [navYearFirst]=\"navYearFirst\"\r\n [dayFormat]=\"dayFormat\"\r\n [weekdayFormat]=\"weekdayFormat\"\r\n class=\"date-picker-calendars\"\r\n ></c-calendar>\r\n </div>\r\n </div>\r\n <ng-content></ng-content>\r\n</c-dropdown>\r\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: 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: "directive", type: i11.StartDateDirective, selector: "[cStartDate]", exportAs: ["cStartDate"] }, { kind: "directive", type: i12.EndDateDirective, selector: "[cEndDate]", exportAs: ["cEndDate"] }] });
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: DateRangePickerComponent, decorators: [{
404
+ type: Component,
405
+ args: [{ selector: 'c-date-range-picker', exportAs: 'cDateRangePicker', providers: [
406
+ {
407
+ provide: NG_VALUE_ACCESSOR,
408
+ useExisting: forwardRef(() => DateRangePickerComponent),
409
+ multi: true
410
+ }
411
+ ], template: "<c-dropdown #dropdown=\"cDropdown\" [autoClose]=\"'outside'\" class=\"date-picker picker\">\r\n <c-input-group [caret]=\"false\"\r\n [disabled]=\"disabled ?? dropdown.visible\"\r\n [sizing]=\"size ?? ''\"\r\n cDropdownToggle\r\n class=\"picker-input-group\"\r\n >\r\n <input (change)=\"handleStartDateInputChange($event)\"\r\n [formControl]=\"startDateInput\"\r\n [ngClass]=\"{hover: !!inputStartHoverValue}\"\r\n [placeholder]=\"startDatePlaceholder ?? placeholder[0]\"\r\n cFormControl\r\n cStartDate\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"range && separator !== false\" cInputGroupText>\r\n <span class=\"picker-input-group-icon date-picker-arrow-icon\"></span>\r\n </span>\r\n <input (change)=\"handleEndDateInputChange($event)\"\r\n *ngIf=\"range\"\r\n [formControl]=\"endDateInput\"\r\n [ngClass]=\"{hover: !!inputEndHoverValue}\"\r\n [placeholder]=\"endDatePlaceholder ?? placeholder[1]\"\r\n cEndDate\r\n cFormControl\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.disabled]=\"disabled ? '' : null\"\r\n pattern=\"[1-9]*\"\r\n [readonly]=\"inputReadOnly ?? null\"\r\n >\r\n <span *ngIf=\"indicator || cleaner\" cInputGroupText>\r\n <span *ngIf=\"indicator\" class=\"picker-input-group-indicator\">\r\n <span class=\"picker-input-group-icon date-picker-input-icon\"></span>\r\n </span>\r\n <span (click)=\"!disabled && handleClear($event)\" *ngIf=\"cleaner && startDate &&!disabled\" class=\"picker-input-group-cleaner\"\r\n role=\"button\">\r\n <span class=\"picker-input-group-icon date-picker-cleaner-icon\"></span>\r\n </span>\r\n </span>\r\n\r\n </c-input-group>\r\n <div [visible]=\"true\" cDropdownMenu>\r\n <div class=\"date-picker-body\">\r\n <ng-template [ngIf]=\"!isMobile\">\r\n <div *ngIf=\"ranges\" class=\"date-picker-ranges\">\r\n <button (click)=\"setCustomRange(customRange)\"\r\n *ngFor=\"let customRange of customRanges\"\r\n [color]=\"rangesButtonsColor\"\r\n [size]=\"rangesButtonsSize\"\r\n [variant]=\"rangesButtonsVariant\"\r\n cButton>\r\n {{getCustomRangeKey(customRange)}}\r\n </button>\r\n </div>\r\n </ng-template>\r\n <c-calendar\r\n (calendarCellHover)=\"handleCalendarCellHover($event)\"\r\n (calendarDateChange)=\"handleCalendarDateChange($event)\"\r\n (endDateChange)=\"handleEndDateChange($event)\"\r\n (startDateChange)=\"handleStartDateChange($event)\"\r\n [calendarDate]=\"calendarDate\"\r\n [calendars]=\"isMobile ? 1 : calendars\"\r\n [dateFilter]=\"dateFilter\"\r\n [disabledDates]=\"disabledDates\"\r\n [endDate]=\"endDate\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [locale]=\"locale\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n [navigation]=\"navigation\"\r\n [range]=\"range\"\r\n [startDate]=\"startDate\"\r\n [navYearFirst]=\"navYearFirst\"\r\n [dayFormat]=\"dayFormat\"\r\n [weekdayFormat]=\"weekdayFormat\"\r\n class=\"date-picker-calendars\"\r\n ></c-calendar>\r\n </div>\r\n </div>\r\n <ng-content></ng-content>\r\n</c-dropdown>\r\n" }]
412
+ }], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; }, propDecorators: { dayFormat: [{
413
+ type: Input
414
+ }], calendars: [{
415
+ type: Input
416
+ }], cleaner: [{
417
+ type: Input
418
+ }], format: [{
419
+ type: Input
420
+ }], indicator: [{
421
+ type: Input
422
+ }], inputReadOnly: [{
423
+ type: Input
424
+ }], navYearFirst: [{
425
+ type: Input
426
+ }], placeholder: [{
427
+ type: Input
428
+ }], ranges: [{
429
+ type: Input
430
+ }], rangesButtonsColor: [{
431
+ type: Input
432
+ }], rangesButtonsSize: [{
433
+ type: Input
434
+ }], rangesButtonsVariant: [{
435
+ type: Input
436
+ }], separator: [{
437
+ type: Input
438
+ }], size: [{
439
+ type: Input
440
+ }], timepicker: [{
441
+ type: Input
442
+ }], todayButton: [{
443
+ type: Input
444
+ }], todayButtonColor: [{
445
+ type: Input
446
+ }], todayButtonSize: [{
447
+ type: Input
448
+ }], todayButtonVariant: [{
449
+ type: Input
450
+ }], visible: [{
451
+ type: Input
452
+ }], startDate: [{
453
+ type: Input
454
+ }], endDate: [{
455
+ type: Input
456
+ }], calendarDate: [{
457
+ type: Input
458
+ }], disabledDates: [{
459
+ type: Input
460
+ }], firstDayOfWeek: [{
461
+ type: Input
462
+ }], locale: [{
463
+ type: Input
464
+ }], maxDate: [{
465
+ type: Input
466
+ }], minDate: [{
467
+ type: Input
468
+ }], navigation: [{
469
+ type: Input
470
+ }], range: [{
471
+ type: Input
472
+ }], dateFilter: [{
473
+ type: Input
474
+ }], disabled: [{
475
+ type: Input
476
+ }], value: [{
477
+ type: Input
478
+ }], weekdayFormat: [{
479
+ type: Input
480
+ }], valueChange: [{
481
+ type: Output
482
+ }], calendarCellHover: [{
483
+ type: Output
484
+ }], calendarDateChange: [{
485
+ type: Output
486
+ }], endDateChange: [{
487
+ type: Output
488
+ }], startDateChange: [{
489
+ type: Output
490
+ }], calendarComponent: [{
491
+ type: ViewChild,
492
+ args: [CalendarComponent]
493
+ }], startDateDirective: [{
494
+ type: ViewChild,
495
+ args: [StartDateDirective]
496
+ }], endDateDirective: [{
497
+ type: ViewChild,
498
+ args: [EndDateDirective]
499
+ }], onBlur: [{
500
+ type: HostListener,
501
+ args: ['blur']
502
+ }] } });
503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQWEsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVF6RCxrQ0FBa0M7QUFDbEMsbUJBQW1CO0FBQ25CLDRFQUE0RTtBQUM1RSxvRUFBb0U7QUFDcEUsOERBQThEO0FBQzlELGtEQUFrRDtBQUNsRCx1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T0FBTztzQkFEVixLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFHRixjQUFjO3NCQURqQixLQUFLO2dCQVNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdGLFVBQVU7c0JBRGIsS0FBSztnQkFlRixLQUFLO3NCQURSLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQW9CRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVhLFdBQVc7c0JBQTdCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRXVCLGlCQUFpQjtzQkFBOUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0csa0JBQWtCO3NCQUFoRCxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDQSxnQkFBZ0I7c0JBQTVDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUVMLE1BQU07c0JBQTNCLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDb2xvcnMgfSBmcm9tICcuLi8uLi9jb3JldWkudHlwZXMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NhbGVuZGFyJztcclxuaW1wb3J0IHsgZ2V0TG9jYWxEYXRlRnJvbVN0cmluZywgaXNEYXRlRGlzYWJsZWQgfSBmcm9tICcuLi8uLi9jYWxlbmRhci9jYWxlbmRhci51dGlscyc7XHJcbmltcG9ydCB7IERhdGVGaWx0ZXJUeXBlLCBEYXlGb3JtYXRUeXBlLCBXZWVrZGF5Rm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGFydERhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9zdGFydC1kYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEVuZERhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9lbmQtZGF0ZS5kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2FsZW5kYXJSYW5nZSB7XHJcbiAgW2tleTogc3RyaW5nXTogRGF0ZVtdO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUQ3VzdG9tUmFuZ2UgPSBbc3RyaW5nLCBEYXRlW11dXHJcblxyXG4vKiogTXVzdCBiZSBhIHZhbGlkIGRhdGUgc3RyaW5nICovXHJcbi8vIHRvZG86IHZhbGlkYXRpb25cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKGxvY2FsZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4vLyAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4vLyAgICAgLy8gY29uc3QgdmFsaWREYXRlID0gIWlzTmFOKERhdGUucGFyc2UoY29udHJvbC52YWx1ZSkpO1xyXG4vLyAgICAgc3RyaW5nVG9EYXRlQ29udmVydChjb250cm9sLnZhbHVlLCBsb2NhbGUpO1xyXG4vLyAgICAgY29uc3QgZGF0ZVNoaW0gPSBjdnREYXRlKGNvbnRyb2wudmFsdWUsIGxvY2FsZSk7XHJcbi8vICAgICAvLyBAdHMtaWdub3JlXHJcbi8vICAgICAvLyBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGRhdGVTaGltLnllYXIsIGRhdGVTaGltLm1vbnRoLCBkYXRlU2hpbS5kYXkpKVxyXG4vLyAgICAgY29uc29sZS5sb2coJ2RhdGVTaGltJywgZGF0ZVNoaW0sIGxvY2FsZSk7XHJcbi8vICAgICBjb25zdCB2YWxpZERhdGUgPSBpc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKTtcclxuLy8gICAgIGNvbnNvbGUubG9nKCdpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcicsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIHZhbGlkRGF0ZSk7XHJcbi8vICAgICByZXR1cm4gdmFsaWREYXRlID8geyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcjogeyB2YWx1ZTogY29udHJvbC52YWx1ZSB9IH0gOiBudWxsO1xyXG4vLyAgIH07XHJcbi8vIH1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYy1kYXRlLXJhbmdlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGV4cG9ydEFzOiAnY0RhdGVSYW5nZVBpY2tlcicsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbmF2WWVhckZpcnN0OiBCb29sZWFuSW5wdXQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlclxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgZm9ybWF0IG9mIGRheSBuYW1lLlxyXG4gICAqIEBkZWZhdWx0ICdudW1lcmljJ1xyXG4gICAqIEB0eXBlIERheUZvcm1hdFR5cGVcclxuICAgKi9cclxuICBASW5wdXQoKSBkYXlGb3JtYXQ6IERheUZvcm1hdFR5cGUgPSAnbnVtZXJpYyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBudW1iZXIgb2YgY2FsZW5kYXJzIHRoYXQgcmVuZGVyIG9uIGRlc2t0b3AgZGV2aWNlcy5cclxuICAgKiBAdHlwZSBudW1iZXJcclxuICAgKiBAZGVmYXVsdCAyXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY2FsZW5kYXJzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NhbGVuZGFycyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGNhbGVuZGFycygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NhbGVuZGFyczogbnVtYmVyID0gMjtcclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSBjb250ZW50IG9mIHRoZSBjbGVhbmVyIGJ1dHRvbi5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsZWFuZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NsZWFuZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgY2xlYW5lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGVhbmVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGVhbmVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGUgZm9ybWF0LlxyXG4gICAqIFdlIHVzZSBkYXRlLWZucyB0byBmb3JtYXQgZGF0ZXMuIFZpc2l0IGh0dHBzOi8vZGF0ZS1mbnMub3JnL3YyLjI4LjAvZG9jcy9mb3JtYXQgdG8gY2hlY2sgYWNjZXB0ZWQgcGF0dGVybnMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBmb3JtYXQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9yIHNldCB0aGUgY29udGVudCBvZiB0aGUgaW5wdXQgaW5kaWNhdG9yLlxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbmRpY2F0b3IgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgaW5kaWNhdG9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGljYXRvcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5kaWNhdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSByZWFkb25seSBzdGF0ZSBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpbnB1dFJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnB1dFJlYWRPbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGlucHV0UmVhZE9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5wdXRSZWFkT25seTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5wdXRSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBSZW9yZGVyIHllYXItbW9udGggbmF2aWdhdGlvbiwgYW5kIHJlbmRlciB5ZWFyIGZpcnN0LlxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG5hdlllYXJGaXJzdCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbmF2WWVhckZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IG5hdlllYXJGaXJzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9uYXZZZWFyRmlyc3Q7XHJcbiAgfVxyXG4gIHByaXZhdGUgX25hdlllYXJGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgc2hvcnQgaGludHMgdGhhdCBhcmUgdmlzaWJsZSBpbiBzdGFydCBkYXRlIGFuZCBlbmQgZGF0ZSBpbnB1dHMuXHJcbiAgICogdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgc3RyaW5nW10gPSBbJ1N0YXJ0IGRhdGUnLCAnRW5kIGRhdGUnXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlZGVmaW5lZCBkYXRlIHJhbmdlcyB0aGUgdXNlciBjYW4gc2VsZWN0IGZyb20uXHJcbiAgICogQHR5cGUgSUNhbGVuZGFyUmFuZ2VcclxuICAgKi9cclxuICBASW5wdXQoKSByYW5nZXM/OiBvYmplY3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbG9yIGNvbnRleHQgb2YgdGhlIGNhbmNlbCBidXR0b24gdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cclxuICAgKiBAdHlwZSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nIHwgJ2RhcmsnIHwgJ2xpZ2h0JyB8IHN0cmluZ1xyXG4gICAqIEBkZWZhdWx0ICdzZWNvbmRhcnknXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmFuZ2VzQnV0dG9uc0NvbG9yPzogQ29sb3JzID0gJ3NlY29uZGFyeSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpemUgdGhlIHJhbmdlcyBidXR0b24gc21hbGwgb3IgbGFyZ2UuXHJcbiAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCB1bmRlZmluZWRcclxuICAgKi9cclxuICBASW5wdXQoKSByYW5nZXNCdXR0b25zU2l6ZT86ICdzbScgfCAnbGcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHJhbmdlcyBidXR0b24gdmFyaWFudCB0byBhbiBvdXRsaW5lZCBidXR0b24gb3IgYSBnaG9zdCBidXR0b24uXHJcbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJhbmdlc0J1dHRvbnNWYXJpYW50PzogJ291dGxpbmUnIHwgJ2dob3N0JyA9ICdnaG9zdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgaWNvbiBvciBjaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMgdHdvIGRhdGVzLlxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc2VwYXJhdG9yKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zZXBhcmF0b3IgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgc2VwYXJhdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcGFyYXRvcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2VwYXJhdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsIG9yIGxhcmdlLlxyXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXHJcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2l6ZT86ICdzbScgfCAnbGcnO1xyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlIGFuIGFkZGl0aW9uYWwgdGltZSBzZWxlY3Rpb24gYnkgYWRkaW5nIHNlbGVjdCBib3hlcyB0byBjaG9vc2UgdGltZS5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB0aW1lcGlja2VyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90aW1lcGlja2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IHRpbWVwaWNrZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZXBpY2tlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGltZXBpY2tlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIGNvbnRlbnQgb2YgdG9kYXkgYnV0dG9uLlxyXG4gICAqIEB0eXBlIHN0cmluZ1xyXG4gICAqIEBkZWZhdWx0ICdUb2RheSdcclxuICAgKi9cclxuICBASW5wdXQoKSB0b2RheUJ1dHRvbjogc3RyaW5nID0gJ1RvZGF5JztcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sb3IgY29udGV4dCBvZiB0aGUgdG9kYXkgYnV0dG9uIHRvIG9uZSBvZiBDb3JlVUnigJlzIHRoZW1lZCBjb2xvcnMuXHJcbiAgICogQHR5cGUgJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJyB8ICdkYXJrJyB8ICdsaWdodCcgfCBzdHJpbmdcclxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcclxuICAgKi9cclxuICBASW5wdXQoKSB0b2RheUJ1dHRvbkNvbG9yOiBDb2xvcnMgPSAncHJpbWFyeSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpemUgdGhlIHRvZGF5IGJ1dHRvbiBzbWFsbCBvciBsYXJnZS5cclxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJ1xyXG4gICAqIEBkZWZhdWx0ICdzbSdcclxuICAgKi9cclxuICBASW5wdXQoKSB0b2RheUJ1dHRvblNpemU6ICdzbScgfCAnbGcnID0gJ3NtJztcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB0b2RheSBidXR0b24gdmFyaWFudCB0byBhbiBvdXRsaW5lZCBidXR0b24gb3IgYSBnaG9zdCBidXR0b24uXHJcbiAgICogQHR5cGUgJ291dGxpbmUnIHwgJ2dob3N0JyB8IHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRvZGF5QnV0dG9uVmFyaWFudD86ICdvdXRsaW5lJyB8ICdnaG9zdCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHN0YXJ0RGF0ZT86IERhdGUgfCBudWxsO1xyXG4gIEBJbnB1dCgpIGVuZERhdGU/OiBEYXRlIHwgbnVsbDtcclxuICBASW5wdXQoKSBjYWxlbmRhckRhdGU/OiBEYXRlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSB8IERhdGVbXVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGZpcnN0RGF5T2ZXZWVrKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgZmlyc3REYXlPZldlZWsoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWs7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSAxO1xyXG5cclxuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBuYXZpZ2F0aW9uKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IG5hdmlnYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IHJhbmdlIHNlbGVjdGlvbi5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCByYW5nZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmFuZ2UgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgcmFuZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3JhbmdlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZGF0ZUZpbHRlcj86IERhdGVGaWx0ZXJUeXBlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBEYXRlW10pIHtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW107XHJcbiAgICBpZiAodGhpcy5fdmFsdWUudG9TdHJpbmcoKSAhPT0gbmV3VmFsdWUudG9TdHJpbmcoKSkge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZhbHVlOiBEYXRlW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxlbmd0aCBvciBmb3JtYXQgb2YgZGF5IG5hbWUuXHJcbiAgICogQHR5cGUgV2Vla2RheUZvcm1hdFR5cGVcclxuICAgKiBAZGVmYXVsdCAnc2hvcnQnXHJcbiAgICovXHJcbiAgQElucHV0KCkgd2Vla2RheUZvcm1hdDogV2Vla2RheUZvcm1hdFR5cGUgPSAnc2hvcnQnO1xyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBEYXRlW10gfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBjYWxlbmRhckNlbGxIb3ZlcjogRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XHJcbiAgQE91dHB1dCgpIGNhbGVuZGFyRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gIEBPdXRwdXQoKSBlbmREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcclxuICBAT3V0cHV0KCkgc3RhcnREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChDYWxlbmRhckNvbXBvbmVudCkgY2FsZW5kYXJDb21wb25lbnQhOiBDYWxlbmRhckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFN0YXJ0RGF0ZURpcmVjdGl2ZSkgc3RhcnREYXRlRGlyZWN0aXZlITogU3RhcnREYXRlRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoRW5kRGF0ZURpcmVjdGl2ZSkgZW5kRGF0ZURpcmVjdGl2ZSE6IEVuZERhdGVEaXJlY3RpdmU7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzTW9iaWxlID0gdHJ1ZTtcclxuICBwdWJsaWMgY3VzdG9tUmFuZ2VzITogVEN1c3RvbVJhbmdlW107XHJcblxyXG4gIHNldCBzdGFydERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0LnNldFZhbHVlKHZhbHVlKTtcclxuICAgIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBzdGFydERhdGVWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RGF0ZVZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9zdGFydERhdGVWYWx1ZTogc3RyaW5nID0gdGhpcy5zdGFydERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XHJcblxyXG4gIHNldCBlbmREYXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5lbmREYXRlSW5wdXQuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgdGhpcy5fZW5kRGF0ZVZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBlbmREYXRlVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmREYXRlVmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBfZW5kRGF0ZVZhbHVlOiBzdHJpbmcgPSB0aGlzLmVuZERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XHJcblxyXG4gIHB1YmxpYyBzdGFydERhdGVQbGFjZWhvbGRlcjogc3RyaW5nID0gdGhpcy5wbGFjZWhvbGRlclswXTtcclxuICBwdWJsaWMgZW5kRGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmcgPSB0aGlzLnBsYWNlaG9sZGVyWzFdO1xyXG5cclxuICBwcml2YXRlIGxheW91dENoYW5nZXMhOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8vIHRvZG86IHZhbGlkYXRpb25cclxuICBzdGFydERhdGVJbnB1dCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLnN0YXJ0RGF0ZVZhbHVlLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LCBbXHJcbiAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAvLyBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcclxuICAgIC8vIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSxcclxuICAgIC8vIGludmFsaWREYXRlU3RyaW5nVmFsaWRhdG9yKHRoaXMubG9jYWxlKVxyXG4gIF0pO1xyXG4gIGVuZERhdGVJbnB1dCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLmVuZERhdGVWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSwgW1xyXG4gICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgLy8gVmFsaWRhdG9ycy5taW5MZW5ndGgoOCksXHJcbiAgICAvLyBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksXHJcbiAgICAvLyBpbnZhbGlkRGF0ZVN0cmluZ1ZhbGlkYXRvcih0aGlzLmxvY2FsZSlcclxuICBdKTtcclxuICBkYXRlUmFuZ2VHcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgc2V0IGlucHV0U3RhcnRIb3ZlclZhbHVlKHZhbHVlKSB7XHJcbiAgICB0aGlzLl9pbnB1dFN0YXJ0SG92ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgaW5wdXRTdGFydEhvdmVyVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5wdXRTdGFydEhvdmVyVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2lucHV0U3RhcnRIb3ZlclZhbHVlITogRGF0ZSB8IG51bGw7XHJcblxyXG4gIHNldCBpbnB1dEVuZEhvdmVyVmFsdWUodmFsdWUpIHtcclxuICAgIHRoaXMuX2lucHV0RW5kSG92ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgaW5wdXRFbmRIb3ZlclZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RW5kSG92ZXJWYWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5wdXRFbmRIb3ZlclZhbHVlITogRGF0ZSB8IG51bGw7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VzID0gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbXHJcbiAgICAgIEJyZWFrcG9pbnRzLkhhbmRzZXQsXHJcbiAgICAgIEJyZWFrcG9pbnRzLlRhYmxldFxyXG4gICAgXSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSByZXN1bHQubWF0Y2hlcztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jdXN0b21SYW5nZXMgPSB0aGlzLnJhbmdlcyA/IE9iamVjdC5lbnRyaWVzKHRoaXMucmFuZ2VzKSA6IFtdO1xyXG5cclxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gdGhpcy5lbmREYXRlPy50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpID8/ICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmxheW91dENoYW5nZXMudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbVJhbmdlS2V5KGN1c3RvbVJhbmdlOiBhbnkpIHtcclxuICAgIHJldHVybiBjdXN0b21SYW5nZVswXTtcclxuICB9XHJcblxyXG4gIHNldEN1c3RvbVJhbmdlKGN1c3RvbVJhbmdlOiBhbnkpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q3VzdG9tUmFuZ2VLZXkoY3VzdG9tUmFuZ2UpO1xyXG4gICAgdGhpcy5zdGFydERhdGUgPSBjdXN0b21SYW5nZVsxXVswXTtcclxuICAgIHRoaXMuZW5kRGF0ZSA9IGN1c3RvbVJhbmdlWzFdWzFdO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50OiBEYXRlIHwgbnVsbCkge1xyXG4gICAgdGhpcy5jYWxlbmRhckNlbGxIb3Zlci5lbWl0KCRldmVudCk7XHJcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKSB7XHJcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnN0YXJ0RGF0ZURpcmVjdGl2ZT8uZWxlbWVudFJlZiwgJGV2ZW50KTtcclxuICAgICAgdGhpcy5pbnB1dFN0YXJ0SG92ZXJWYWx1ZSA9ICRldmVudDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmVuZERhdGUpIHtcclxuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMuZW5kRGF0ZURpcmVjdGl2ZT8uZWxlbWVudFJlZiwgJGV2ZW50KTtcclxuICAgICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSAkZXZlbnQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbGVuZGFyRGF0ZUNoYW5nZSgkZXZlbnQ6IERhdGUpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJEYXRlQ2hhbmdlLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xyXG4gICAgLy8gaWYgKGRhdGU/LmdldFRpbWUoKSAhPT0gdGhpcy5zdGFydERhdGU/LmdldFRpbWUoKSkge1xyXG4gICAgdGhpcy5zdGFydERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgIHRoaXMuc3RhcnREYXRlVmFsdWUgPSBkYXRlID8gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcodGhpcy5sb2NhbGUpIDogJyc7XHJcbiAgICB0aGlzLmlucHV0U3RhcnRIb3ZlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0YXJ0RGF0ZSAmJiB0aGlzLmVuZERhdGUgPyBbdGhpcy5zdGFydERhdGUsIHRoaXMuZW5kRGF0ZV0gOiBbXTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUVuZERhdGVDaGFuZ2UoZGF0ZTogRGF0ZSB8IG51bGwpIHtcclxuICAgIC8vIGlmIChkYXRlPy5nZXRUaW1lKCkgIT09IHRoaXMuZW5kRGF0ZT8uZ2V0VGltZSgpKSB7XHJcbiAgICB0aGlzLmVuZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgIHRoaXMuZW5kRGF0ZVZhbHVlID0gZGF0ZSA/IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA6ICcnO1xyXG4gICAgdGhpcy5pbnB1dEVuZEhvdmVyVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RhcnREYXRlICYmIHRoaXMuZW5kRGF0ZSA/IFt0aGlzLnN0YXJ0RGF0ZSwgdGhpcy5lbmREYXRlXSA6IFtdO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xlYXIoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyQ29tcG9uZW50Py5jbGVhckRhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTdGFydERhdGVJbnB1dENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZSA9IGdldExvY2FsRGF0ZUZyb21TdHJpbmcoJGV2ZW50LnRhcmdldD8udmFsdWUsIHRoaXMubG9jYWxlLCB0aGlzLnRpbWVwaWNrZXIpO1xyXG4gICAgaWYgKCFkYXRlKSB7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJDb21wb25lbnQ/LmNsZWFyRGF0ZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiBkYXRlLmdldFRpbWUoKSkge1xyXG4gICAgICBpZiAoISh0aGlzLmZvcmJpZGRlbkRhdGUoZGF0ZSkgfHwgKHRoaXMuZW5kRGF0ZSAmJiB0aGlzLmVuZERhdGUgPCBkYXRlKSkpIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0RGF0ZVZhbHVlID0gdGhpcy5zdGFydERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFbmREYXRlSW5wdXRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGUgPSBnZXRMb2NhbERhdGVGcm9tU3RyaW5nKCRldmVudC50YXJnZXQ/LnZhbHVlLCB0aGlzLmxvY2FsZSwgdGhpcy50aW1lcGlja2VyKTtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICB0aGlzLmVuZERhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIGRhdGUuZ2V0VGltZSgpKSB7XHJcbiAgICAgIGlmICghKHRoaXMuZm9yYmlkZGVuRGF0ZShkYXRlKSB8fCAodGhpcy5zdGFydERhdGUgJiYgdGhpcy5zdGFydERhdGUgPiBkYXRlKSkpIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRGF0ZSA9IGRhdGU7XHJcbiAgICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lbmREYXRlVmFsdWUgPSB0aGlzLmVuZERhdGU/LnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLmxvY2FsZSkgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBmb3JiaWRkZW5EYXRlKGRhdGU6IERhdGUpIHtcclxuICAgIHJldHVybiBpc0RhdGVEaXNhYmxlZChkYXRlLCB0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5kaXNhYmxlZERhdGVzKSAmJiAodGhpcy5kYXRlRmlsdGVyID8gIXRoaXMuZGF0ZUZpbHRlcihkYXRlKSA6IGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNldElucHV0VmFsdWUgPSAoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGF0ZTogRGF0ZSB8IG51bGwpID0+IHtcclxuICAgIGlmICghZWxlbWVudFJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gZGF0ZT8udG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMubG9jYWxlKSA/PyAnJztcclxuICAgIHJldHVybjtcclxuICB9O1xyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKHZhbHVlOiBhbnkpID0+IHt9O1xyXG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiAoRGF0ZVtdKSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGMtZHJvcGRvd24gI2Ryb3Bkb3duPVwiY0Ryb3Bkb3duXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiBjbGFzcz1cImRhdGUtcGlja2VyIHBpY2tlclwiPlxyXG4gIDxjLWlucHV0LWdyb3VwIFtjYXJldF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkID8/IGRyb3Bkb3duLnZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgIFtzaXppbmddPVwic2l6ZSA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgY0Ryb3Bkb3duVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXBcIlxyXG4gID5cclxuICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzdGFydERhdGVJbnB1dFwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwie2hvdmVyOiAhIWlucHV0U3RhcnRIb3ZlclZhbHVlfVwiXHJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN0YXJ0RGF0ZVBsYWNlaG9sZGVyID8/IHBsYWNlaG9sZGVyWzBdXCJcclxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcclxuICAgICAgICAgICBjU3RhcnREYXRlXHJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxyXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcclxuICAgICAgICAgICBwYXR0ZXJuPVwiWzEtOV0qXCJcclxuICAgICAgICAgICBbcmVhZG9ubHldPVwiaW5wdXRSZWFkT25seSA/PyBudWxsXCJcclxuICAgID5cclxuICAgIDxzcGFuICpuZ0lmPVwicmFuZ2UgJiYgc2VwYXJhdG9yICE9PSBmYWxzZVwiIGNJbnB1dEdyb3VwVGV4dD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIGRhdGUtcGlja2VyLWFycm93LWljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZUVuZERhdGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAqbmdJZj1cInJhbmdlXCJcclxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kRGF0ZUlucHV0XCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7aG92ZXI6ICEhaW5wdXRFbmRIb3ZlclZhbHVlfVwiXHJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVuZERhdGVQbGFjZWhvbGRlciA/PyBwbGFjZWhvbGRlclsxXVwiXHJcbiAgICAgICAgICAgY0VuZERhdGVcclxuICAgICAgICAgICBjRm9ybUNvbnRyb2xcclxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXHJcbiAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxyXG4gICAgICAgICAgIHBhdHRlcm49XCJbMS05XSpcIlxyXG4gICAgICAgICAgIFtyZWFkb25seV09XCJpbnB1dFJlYWRPbmx5ID8/IG51bGxcIlxyXG4gICAgPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpbmRpY2F0b3IgfHwgY2xlYW5lclwiIGNJbnB1dEdyb3VwVGV4dD5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJpbmRpY2F0b3JcIiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pbmRpY2F0b3JcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tlci1pbnB1dC1ncm91cC1pY29uIGRhdGUtcGlja2VyLWlucHV0LWljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBoYW5kbGVDbGVhcigkZXZlbnQpXCIgKm5nSWY9XCJjbGVhbmVyICYmIHN0YXJ0RGF0ZSAmJiFkaXNhYmxlZFwiIGNsYXNzPVwicGlja2VyLWlucHV0LWdyb3VwLWNsZWFuZXJcIlxyXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrZXItaW5wdXQtZ3JvdXAtaWNvbiBkYXRlLXBpY2tlci1jbGVhbmVyLWljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuXHJcbiAgPC9jLWlucHV0LWdyb3VwPlxyXG4gIDxkaXYgW3Zpc2libGVdPVwidHJ1ZVwiIGNEcm9wZG93bk1lbnU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItYm9keVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInJhbmdlc1wiIGNsYXNzPVwiZGF0ZS1waWNrZXItcmFuZ2VzXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRDdXN0b21SYW5nZShjdXN0b21SYW5nZSlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VzdG9tUmFuZ2Ugb2YgY3VzdG9tUmFuZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInJhbmdlc0J1dHRvbnNDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaXplXT1cInJhbmdlc0J1dHRvbnNTaXplXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwicmFuZ2VzQnV0dG9uc1ZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICBjQnV0dG9uPlxyXG4gICAgICAgICAgICB7e2dldEN1c3RvbVJhbmdlS2V5KGN1c3RvbVJhbmdlKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGMtY2FsZW5kYXJcclxuICAgICAgICAoY2FsZW5kYXJDZWxsSG92ZXIpPVwiaGFuZGxlQ2FsZW5kYXJDZWxsSG92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNhbGVuZGFyRGF0ZUNoYW5nZSk9XCJoYW5kbGVDYWxlbmRhckRhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKGVuZERhdGVDaGFuZ2UpPVwiaGFuZGxlRW5kRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoc3RhcnREYXRlQ2hhbmdlKT1cImhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICBbY2FsZW5kYXJEYXRlXT1cImNhbGVuZGFyRGF0ZVwiXHJcbiAgICAgICAgW2NhbGVuZGFyc109XCJpc01vYmlsZSA/IDEgOiBjYWxlbmRhcnNcIlxyXG4gICAgICAgIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxyXG4gICAgICAgIFtlbmREYXRlXT1cImVuZERhdGVcIlxyXG4gICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXHJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxyXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgIFtuYXZpZ2F0aW9uXT1cIm5hdmlnYXRpb25cIlxyXG4gICAgICAgIFtyYW5nZV09XCJyYW5nZVwiXHJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGVcIlxyXG4gICAgICAgIFtuYXZZZWFyRmlyc3RdPVwibmF2WWVhckZpcnN0XCJcclxuICAgICAgICBbZGF5Rm9ybWF0XT1cImRheUZvcm1hdFwiXHJcbiAgICAgICAgW3dlZWtkYXlGb3JtYXRdPVwid2Vla2RheUZvcm1hdFwiXHJcbiAgICAgICAgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhcnNcIlxyXG4gICAgICA+PC9jLWNhbGVuZGFyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2MtZHJvcGRvd24+XHJcbiJdfQ==