ngx-bootstrap 5.6.1 → 6.2.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 (483) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +8 -1
  3. package/accordion/accordion-group.component.d.ts +3 -2
  4. package/accordion/accordion.module.d.ts +1 -1
  5. package/accordion/bundles/ngx-bootstrap-accordion.umd.js +5 -2
  6. package/accordion/bundles/ngx-bootstrap-accordion.umd.js.map +1 -1
  7. package/accordion/bundles/ngx-bootstrap-accordion.umd.min.js +1 -1
  8. package/accordion/bundles/ngx-bootstrap-accordion.umd.min.js.map +1 -1
  9. package/accordion/esm2015/accordion.config.js +6 -2
  10. package/accordion/esm2015/accordion.module.js +2 -3
  11. package/accordion/esm5/accordion.config.js +6 -2
  12. package/accordion/esm5/accordion.module.js +2 -3
  13. package/accordion/fesm2015/ngx-bootstrap-accordion.js +6 -3
  14. package/accordion/fesm2015/ngx-bootstrap-accordion.js.map +1 -1
  15. package/accordion/fesm5/ngx-bootstrap-accordion.js +6 -3
  16. package/accordion/fesm5/ngx-bootstrap-accordion.js.map +1 -1
  17. package/accordion/ngx-bootstrap-accordion.metadata.json +1 -1
  18. package/accordion/package.json +2 -2
  19. package/alert/alert.module.d.ts +1 -1
  20. package/alert/bundles/ngx-bootstrap-alert.umd.js +5 -2
  21. package/alert/bundles/ngx-bootstrap-alert.umd.js.map +1 -1
  22. package/alert/bundles/ngx-bootstrap-alert.umd.min.js +2 -2
  23. package/alert/bundles/ngx-bootstrap-alert.umd.min.js.map +1 -1
  24. package/alert/esm2015/alert.component.js +3 -3
  25. package/alert/esm2015/alert.config.js +6 -2
  26. package/alert/esm2015/alert.module.js +2 -3
  27. package/alert/esm5/alert.component.js +3 -3
  28. package/alert/esm5/alert.config.js +6 -2
  29. package/alert/esm5/alert.module.js +2 -3
  30. package/alert/fesm2015/ngx-bootstrap-alert.js +6 -3
  31. package/alert/fesm2015/ngx-bootstrap-alert.js.map +1 -1
  32. package/alert/fesm5/ngx-bootstrap-alert.js +6 -3
  33. package/alert/fesm5/ngx-bootstrap-alert.js.map +1 -1
  34. package/alert/ngx-bootstrap-alert.metadata.json +1 -1
  35. package/alert/package.json +2 -2
  36. package/buttons/bundles/ngx-bootstrap-buttons.umd.js +293 -16
  37. package/buttons/bundles/ngx-bootstrap-buttons.umd.js.map +1 -1
  38. package/buttons/bundles/ngx-bootstrap-buttons.umd.min.js +1 -1
  39. package/buttons/bundles/ngx-bootstrap-buttons.umd.min.js.map +1 -1
  40. package/buttons/button-checkbox.directive.d.ts +2 -2
  41. package/buttons/button-radio-group.directive.d.ts +12 -1
  42. package/buttons/button-radio.directive.d.ts +19 -7
  43. package/buttons/buttons.module.d.ts +1 -1
  44. package/buttons/esm2015/button-radio-group.directive.js +140 -3
  45. package/buttons/esm2015/button-radio.directive.js +98 -18
  46. package/buttons/esm2015/buttons.module.js +1 -1
  47. package/buttons/esm5/button-radio-group.directive.js +171 -3
  48. package/buttons/esm5/button-radio.directive.js +126 -17
  49. package/buttons/esm5/buttons.module.js +1 -1
  50. package/buttons/fesm2015/ngx-bootstrap-buttons.js +235 -18
  51. package/buttons/fesm2015/ngx-bootstrap-buttons.js.map +1 -1
  52. package/buttons/fesm5/ngx-bootstrap-buttons.js +294 -17
  53. package/buttons/fesm5/ngx-bootstrap-buttons.js.map +1 -1
  54. package/buttons/ngx-bootstrap-buttons.metadata.json +1 -1
  55. package/buttons/package.json +2 -2
  56. package/carousel/bundles/ngx-bootstrap-carousel.umd.js +5 -3
  57. package/carousel/bundles/ngx-bootstrap-carousel.umd.js.map +1 -1
  58. package/carousel/bundles/ngx-bootstrap-carousel.umd.min.js +1 -1
  59. package/carousel/bundles/ngx-bootstrap-carousel.umd.min.js.map +1 -1
  60. package/carousel/carousel.component.d.ts +7 -5
  61. package/carousel/carousel.module.d.ts +1 -1
  62. package/carousel/esm2015/carousel.config.js +6 -2
  63. package/carousel/esm2015/carousel.module.js +2 -4
  64. package/carousel/esm5/carousel.component.js +4 -4
  65. package/carousel/esm5/carousel.config.js +6 -2
  66. package/carousel/esm5/carousel.module.js +2 -4
  67. package/carousel/fesm2015/ngx-bootstrap-carousel.js +6 -4
  68. package/carousel/fesm2015/ngx-bootstrap-carousel.js.map +1 -1
  69. package/carousel/fesm5/ngx-bootstrap-carousel.js +6 -4
  70. package/carousel/fesm5/ngx-bootstrap-carousel.js.map +1 -1
  71. package/carousel/ngx-bootstrap-carousel.metadata.json +1 -1
  72. package/carousel/package.json +2 -2
  73. package/chronos/bundles/ngx-bootstrap-chronos.umd.js +90 -73
  74. package/chronos/bundles/ngx-bootstrap-chronos.umd.js.map +1 -1
  75. package/chronos/bundles/ngx-bootstrap-chronos.umd.min.js +69 -1
  76. package/chronos/bundles/ngx-bootstrap-chronos.umd.min.js.map +1 -1
  77. package/chronos/esm2015/create/from-anything.js +2 -2
  78. package/chronos/esm2015/duration/valid.js +4 -6
  79. package/chronos/esm2015/i18n/ar.js +1 -4
  80. package/chronos/esm2015/i18n/bg.js +18 -20
  81. package/chronos/esm2015/i18n/cs.js +45 -47
  82. package/chronos/esm2015/i18n/et.js +1 -3
  83. package/chronos/esm2015/i18n/th-be.js +21 -1
  84. package/chronos/esm2015/locale/locale.class.js +5 -3
  85. package/chronos/esm5/create/from-anything.js +2 -2
  86. package/chronos/esm5/duration/valid.js +4 -6
  87. package/chronos/esm5/i18n/ar.js +1 -4
  88. package/chronos/esm5/i18n/bg.js +18 -20
  89. package/chronos/esm5/i18n/cs.js +45 -47
  90. package/chronos/esm5/i18n/et.js +1 -3
  91. package/chronos/esm5/i18n/th-be.js +21 -1
  92. package/chronos/esm5/locale/locale.class.js +6 -3
  93. package/chronos/esm5/test/chain.js +4 -4
  94. package/chronos/fesm2015/ngx-bootstrap-chronos.js +89 -73
  95. package/chronos/fesm2015/ngx-bootstrap-chronos.js.map +1 -1
  96. package/chronos/fesm5/ngx-bootstrap-chronos.js +90 -73
  97. package/chronos/fesm5/ngx-bootstrap-chronos.js.map +1 -1
  98. package/chronos/locale/locale.class.d.ts +4 -3
  99. package/chronos/package.json +2 -2
  100. package/collapse/bundles/ngx-bootstrap-collapse.umd.js.map +1 -1
  101. package/collapse/bundles/ngx-bootstrap-collapse.umd.min.js.map +1 -1
  102. package/collapse/collapse.directive.d.ts +3 -2
  103. package/collapse/collapse.module.d.ts +1 -1
  104. package/collapse/esm2015/collapse.module.js +1 -1
  105. package/collapse/esm5/collapse.module.js +1 -1
  106. package/collapse/fesm2015/ngx-bootstrap-collapse.js.map +1 -1
  107. package/collapse/fesm5/ngx-bootstrap-collapse.js.map +1 -1
  108. package/collapse/package.json +2 -2
  109. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.js +5 -4
  110. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.js.map +1 -1
  111. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.min.js +1 -1
  112. package/component-loader/bundles/ngx-bootstrap-component-loader.umd.min.js.map +1 -1
  113. package/component-loader/component-loader.class.d.ts +4 -3
  114. package/component-loader/esm2015/component-loader.class.js +5 -5
  115. package/component-loader/esm5/component-loader.class.js +6 -5
  116. package/component-loader/fesm2015/ngx-bootstrap-component-loader.js +4 -4
  117. package/component-loader/fesm2015/ngx-bootstrap-component-loader.js.map +1 -1
  118. package/component-loader/fesm5/ngx-bootstrap-component-loader.js +5 -4
  119. package/component-loader/fesm5/ngx-bootstrap-component-loader.js.map +1 -1
  120. package/component-loader/package.json +2 -2
  121. package/datepicker/base/bs-datepicker-container.d.ts +20 -8
  122. package/datepicker/bs-datepicker-inline.component.d.ts +6 -2
  123. package/datepicker/bs-datepicker.component.d.ts +14 -5
  124. package/datepicker/bs-datepicker.config.d.ts +41 -1
  125. package/datepicker/bs-datepicker.css +126 -5
  126. package/datepicker/bs-datepicker.css.map +4 -4
  127. package/datepicker/bs-datepicker.module.d.ts +1 -1
  128. package/datepicker/bs-datepicker.scss +25 -5
  129. package/datepicker/bs-daterangepicker-inline.component.d.ts +1 -1
  130. package/datepicker/bs-daterangepicker.component.d.ts +9 -4
  131. package/datepicker/bs-locale.service.d.ts +3 -3
  132. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.js +604 -93
  133. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.js.map +1 -1
  134. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.min.js +2 -2
  135. package/datepicker/bundles/ngx-bootstrap-datepicker.umd.min.js.map +1 -1
  136. package/datepicker/datepicker-inner.component.d.ts +2 -1
  137. package/datepicker/datepicker.component.d.ts +2 -1
  138. package/datepicker/datepicker.module.d.ts +1 -1
  139. package/datepicker/daypicker.component.d.ts +1 -1
  140. package/datepicker/engine/flag-days-calendar.d.ts +2 -1
  141. package/datepicker/engine/flag-months-calendar.d.ts +1 -0
  142. package/datepicker/engine/flag-years-calendar.d.ts +1 -0
  143. package/datepicker/esm2015/base/bs-datepicker-container.js +38 -1
  144. package/datepicker/esm2015/bs-datepicker-inline.component.js +12 -1
  145. package/datepicker/esm2015/bs-datepicker-inline.config.js +6 -2
  146. package/datepicker/esm2015/bs-datepicker-input.directive.js +9 -1
  147. package/datepicker/esm2015/bs-datepicker.component.js +45 -6
  148. package/datepicker/esm2015/bs-datepicker.config.js +88 -2
  149. package/datepicker/esm2015/bs-datepicker.module.js +3 -10
  150. package/datepicker/esm2015/bs-daterangepicker-inline.component.js +3 -2
  151. package/datepicker/esm2015/bs-daterangepicker-inline.config.js +6 -2
  152. package/datepicker/esm2015/bs-daterangepicker-input.directive.js +11 -3
  153. package/datepicker/esm2015/bs-daterangepicker.component.js +36 -7
  154. package/datepicker/esm2015/bs-daterangepicker.config.js +6 -2
  155. package/datepicker/esm2015/datepicker.config.js +6 -2
  156. package/datepicker/esm2015/datepicker.module.js +1 -1
  157. package/datepicker/esm2015/engine/flag-days-calendar.js +22 -3
  158. package/datepicker/esm2015/engine/flag-months-calendar.js +14 -3
  159. package/datepicker/esm2015/engine/flag-years-calendar.js +14 -3
  160. package/datepicker/esm2015/models/index.js +13 -1
  161. package/datepicker/esm2015/public_api.js +1 -1
  162. package/datepicker/esm2015/reducer/bs-datepicker.actions.js +14 -1
  163. package/datepicker/esm2015/reducer/bs-datepicker.effects.js +27 -33
  164. package/datepicker/esm2015/reducer/bs-datepicker.reducer.js +10 -2
  165. package/datepicker/esm2015/reducer/bs-datepicker.state.js +3 -1
  166. package/datepicker/esm2015/themes/bs/bs-custom-dates-view.component.js +5 -2
  167. package/datepicker/esm2015/themes/bs/bs-datepicker-container.component.js +57 -5
  168. package/datepicker/esm2015/themes/bs/bs-datepicker-inline-container.component.js +2 -2
  169. package/datepicker/esm2015/themes/bs/bs-daterangepicker-container.component.js +73 -4
  170. package/datepicker/esm2015/themes/bs/bs-daterangepicker-inline-container.component.js +2 -2
  171. package/datepicker/esm2015/themes/bs/bs-days-calendar-view.component.js +42 -4
  172. package/datepicker/esm5/base/bs-datepicker-container.js +52 -1
  173. package/datepicker/esm5/bs-datepicker-inline.component.js +12 -1
  174. package/datepicker/esm5/bs-datepicker-inline.config.js +8 -4
  175. package/datepicker/esm5/bs-datepicker-input.directive.js +9 -1
  176. package/datepicker/esm5/bs-datepicker.component.js +58 -8
  177. package/datepicker/esm5/bs-datepicker.config.js +88 -2
  178. package/datepicker/esm5/bs-datepicker.module.js +3 -10
  179. package/datepicker/esm5/bs-daterangepicker-inline.component.js +3 -2
  180. package/datepicker/esm5/bs-daterangepicker-inline.config.js +8 -4
  181. package/datepicker/esm5/bs-daterangepicker-input.directive.js +11 -3
  182. package/datepicker/esm5/bs-daterangepicker.component.js +49 -9
  183. package/datepicker/esm5/bs-daterangepicker.config.js +8 -4
  184. package/datepicker/esm5/datepicker.config.js +6 -2
  185. package/datepicker/esm5/datepicker.module.js +1 -1
  186. package/datepicker/esm5/engine/flag-days-calendar.js +22 -3
  187. package/datepicker/esm5/engine/flag-months-calendar.js +14 -3
  188. package/datepicker/esm5/engine/flag-years-calendar.js +14 -3
  189. package/datepicker/esm5/engine/format-days-calendar.js +3 -3
  190. package/datepicker/esm5/models/index.js +13 -1
  191. package/datepicker/esm5/public_api.js +1 -1
  192. package/datepicker/esm5/reducer/bs-datepicker.actions.js +18 -1
  193. package/datepicker/esm5/reducer/bs-datepicker.effects.js +33 -35
  194. package/datepicker/esm5/reducer/bs-datepicker.reducer.js +10 -2
  195. package/datepicker/esm5/reducer/bs-datepicker.state.js +3 -1
  196. package/datepicker/esm5/reducer/bs-datepicker.store.js +3 -3
  197. package/datepicker/esm5/themes/bs/bs-custom-dates-view.component.js +5 -2
  198. package/datepicker/esm5/themes/bs/bs-datepicker-container.component.js +74 -8
  199. package/datepicker/esm5/themes/bs/bs-datepicker-inline-container.component.js +4 -4
  200. package/datepicker/esm5/themes/bs/bs-daterangepicker-container.component.js +92 -7
  201. package/datepicker/esm5/themes/bs/bs-daterangepicker-inline-container.component.js +4 -4
  202. package/datepicker/esm5/themes/bs/bs-days-calendar-view.component.js +25 -2
  203. package/datepicker/fesm2015/ngx-bootstrap-datepicker.js +549 -96
  204. package/datepicker/fesm2015/ngx-bootstrap-datepicker.js.map +1 -1
  205. package/datepicker/fesm5/ngx-bootstrap-datepicker.js +606 -94
  206. package/datepicker/fesm5/ngx-bootstrap-datepicker.js.map +1 -1
  207. package/datepicker/models/index.d.ts +5 -0
  208. package/datepicker/monthpicker.component.d.ts +1 -1
  209. package/datepicker/ngx-bootstrap-datepicker.metadata.json +1 -1
  210. package/datepicker/package.json +2 -2
  211. package/datepicker/public_api.d.ts +1 -1
  212. package/datepicker/reducer/bs-datepicker.actions.d.ts +3 -1
  213. package/datepicker/reducer/bs-datepicker.effects.d.ts +2 -1
  214. package/datepicker/reducer/bs-datepicker.state.d.ts +2 -1
  215. package/datepicker/themes/bs/bs-custom-dates-view.component.d.ts +1 -0
  216. package/datepicker/themes/bs/bs-datepicker-container.component.d.ts +9 -5
  217. package/datepicker/themes/bs/bs-daterangepicker-container.component.d.ts +9 -5
  218. package/datepicker/themes/bs/bs-days-calendar-view.component.d.ts +2 -0
  219. package/datepicker/utils/scss/mixins.css.map +2 -2
  220. package/datepicker/utils/scss/mixins.scss +98 -0
  221. package/datepicker/utils/scss/variables.css.map +1 -1
  222. package/datepicker/utils/scss/variables.scss +14 -0
  223. package/datepicker/yearpicker.component.d.ts +1 -1
  224. package/dropdown/bs-dropdown-container.component.d.ts +1 -1
  225. package/dropdown/bs-dropdown.directive.d.ts +12 -7
  226. package/dropdown/bs-dropdown.module.d.ts +1 -1
  227. package/dropdown/bundles/ngx-bootstrap-dropdown.umd.js +13 -8
  228. package/dropdown/bundles/ngx-bootstrap-dropdown.umd.js.map +1 -1
  229. package/dropdown/bundles/ngx-bootstrap-dropdown.umd.min.js +1 -1
  230. package/dropdown/bundles/ngx-bootstrap-dropdown.umd.min.js.map +1 -1
  231. package/dropdown/esm2015/bs-dropdown.config.js +6 -2
  232. package/dropdown/esm2015/bs-dropdown.directive.js +8 -3
  233. package/dropdown/esm2015/bs-dropdown.module.js +2 -7
  234. package/dropdown/esm5/bs-dropdown-toggle.directive.js +3 -3
  235. package/dropdown/esm5/bs-dropdown.config.js +6 -2
  236. package/dropdown/esm5/bs-dropdown.directive.js +11 -5
  237. package/dropdown/esm5/bs-dropdown.module.js +2 -7
  238. package/dropdown/fesm2015/ngx-bootstrap-dropdown.js +13 -9
  239. package/dropdown/fesm2015/ngx-bootstrap-dropdown.js.map +1 -1
  240. package/dropdown/fesm5/ngx-bootstrap-dropdown.js +14 -9
  241. package/dropdown/fesm5/ngx-bootstrap-dropdown.js.map +1 -1
  242. package/dropdown/ngx-bootstrap-dropdown.metadata.json +1 -1
  243. package/dropdown/package.json +2 -2
  244. package/locale/package.json +2 -2
  245. package/mini-ngrx/bundles/ngx-bootstrap-mini-ngrx.umd.js.map +1 -1
  246. package/mini-ngrx/bundles/ngx-bootstrap-mini-ngrx.umd.min.js.map +1 -1
  247. package/mini-ngrx/esm5/state.class.js +3 -3
  248. package/mini-ngrx/esm5/store.class.js +3 -3
  249. package/mini-ngrx/fesm5/ngx-bootstrap-mini-ngrx.js.map +1 -1
  250. package/mini-ngrx/package.json +2 -2
  251. package/modal/bs-modal-ref.service.d.ts +15 -2
  252. package/modal/bs-modal.service.d.ts +7 -4
  253. package/modal/bundles/ngx-bootstrap-modal.umd.js +154 -59
  254. package/modal/bundles/ngx-bootstrap-modal.umd.js.map +1 -1
  255. package/modal/bundles/ngx-bootstrap-modal.umd.min.js +1 -1
  256. package/modal/bundles/ngx-bootstrap-modal.umd.min.js.map +1 -1
  257. package/modal/esm2015/bs-modal-ref.service.js +20 -1
  258. package/modal/esm2015/bs-modal.service.js +102 -47
  259. package/modal/esm2015/modal-container.component.js +10 -2
  260. package/modal/esm2015/modal-options.class.js +14 -3
  261. package/modal/esm2015/modal.directive.js +10 -7
  262. package/modal/esm2015/modal.module.js +1 -1
  263. package/modal/esm2015/models/index.js +3 -1
  264. package/modal/esm2015/ngx-bootstrap-modal.js +2 -2
  265. package/modal/esm2015/public_api.js +2 -2
  266. package/modal/esm5/bs-modal-ref.service.js +19 -1
  267. package/modal/esm5/bs-modal.service.js +109 -57
  268. package/modal/esm5/modal-container.component.js +13 -2
  269. package/modal/esm5/modal-options.class.js +14 -3
  270. package/modal/esm5/modal.directive.js +9 -7
  271. package/modal/esm5/modal.module.js +1 -1
  272. package/modal/esm5/models/index.js +3 -1
  273. package/modal/esm5/ngx-bootstrap-modal.js +2 -2
  274. package/modal/esm5/public_api.js +2 -2
  275. package/modal/fesm2015/ngx-bootstrap-modal.js +148 -52
  276. package/modal/fesm2015/ngx-bootstrap-modal.js.map +1 -1
  277. package/modal/fesm5/ngx-bootstrap-modal.js +155 -61
  278. package/modal/fesm5/ngx-bootstrap-modal.js.map +1 -1
  279. package/modal/modal-backdrop.component.d.ts +4 -2
  280. package/modal/modal-container.component.d.ts +1 -0
  281. package/modal/modal-options.class.d.ts +8 -3
  282. package/modal/modal.directive.d.ts +5 -4
  283. package/modal/modal.module.d.ts +2 -2
  284. package/modal/models/index.d.ts +1 -0
  285. package/modal/ngx-bootstrap-modal.metadata.json +1 -1
  286. package/modal/package.json +2 -2
  287. package/modal/public_api.d.ts +1 -1
  288. package/package.json +2 -2
  289. package/pagination/bundles/ngx-bootstrap-pagination.umd.js +5 -2
  290. package/pagination/bundles/ngx-bootstrap-pagination.umd.js.map +1 -1
  291. package/pagination/bundles/ngx-bootstrap-pagination.umd.min.js +1 -1
  292. package/pagination/bundles/ngx-bootstrap-pagination.umd.min.js.map +1 -1
  293. package/pagination/esm2015/pagination.config.js +6 -2
  294. package/pagination/esm2015/pagination.module.js +2 -3
  295. package/pagination/esm5/pagination.config.js +6 -2
  296. package/pagination/esm5/pagination.module.js +2 -3
  297. package/pagination/fesm2015/ngx-bootstrap-pagination.js +6 -3
  298. package/pagination/fesm2015/ngx-bootstrap-pagination.js.map +1 -1
  299. package/pagination/fesm5/ngx-bootstrap-pagination.js +6 -3
  300. package/pagination/fesm5/ngx-bootstrap-pagination.js.map +1 -1
  301. package/pagination/ngx-bootstrap-pagination.metadata.json +1 -1
  302. package/pagination/package.json +2 -2
  303. package/pagination/pager.component.d.ts +8 -4
  304. package/pagination/pagination.component.d.ts +8 -4
  305. package/pagination/pagination.module.d.ts +1 -1
  306. package/popover/bundles/ngx-bootstrap-popover.umd.js +55 -3
  307. package/popover/bundles/ngx-bootstrap-popover.umd.js.map +1 -1
  308. package/popover/bundles/ngx-bootstrap-popover.umd.min.js +1 -1
  309. package/popover/bundles/ngx-bootstrap-popover.umd.min.js.map +1 -1
  310. package/popover/esm2015/popover-container.component.js +4 -1
  311. package/popover/esm2015/popover.config.js +6 -2
  312. package/popover/esm2015/popover.directive.js +39 -2
  313. package/popover/esm2015/popover.module.js +2 -3
  314. package/popover/esm5/popover-container.component.js +4 -1
  315. package/popover/esm5/popover.config.js +6 -2
  316. package/popover/esm5/popover.directive.js +48 -2
  317. package/popover/esm5/popover.module.js +2 -3
  318. package/popover/fesm2015/ngx-bootstrap-popover.js +47 -4
  319. package/popover/fesm2015/ngx-bootstrap-popover.js.map +1 -1
  320. package/popover/fesm5/ngx-bootstrap-popover.js +56 -4
  321. package/popover/fesm5/ngx-bootstrap-popover.js.map +1 -1
  322. package/popover/ngx-bootstrap-popover.metadata.json +1 -1
  323. package/popover/package.json +2 -2
  324. package/popover/popover-container.component.d.ts +2 -1
  325. package/popover/popover.directive.d.ts +10 -1
  326. package/popover/popover.module.d.ts +1 -1
  327. package/positioning/bundles/ngx-bootstrap-positioning.umd.js +7 -7
  328. package/positioning/bundles/ngx-bootstrap-positioning.umd.js.map +1 -1
  329. package/positioning/bundles/ngx-bootstrap-positioning.umd.min.js +1 -1
  330. package/positioning/bundles/ngx-bootstrap-positioning.umd.min.js.map +1 -1
  331. package/positioning/esm2015/modifiers/flip.js +3 -3
  332. package/positioning/esm2015/modifiers/preventOverflow.js +2 -2
  333. package/positioning/esm2015/modifiers/shift.js +2 -2
  334. package/positioning/esm2015/utils/computeAutoPlacement.js +2 -2
  335. package/positioning/esm2015/utils/getClientRect.js +2 -2
  336. package/positioning/esm5/modifiers/flip.js +4 -4
  337. package/positioning/esm5/modifiers/preventOverflow.js +4 -4
  338. package/positioning/esm5/modifiers/shift.js +3 -3
  339. package/positioning/esm5/utils/computeAutoPlacement.js +3 -3
  340. package/positioning/esm5/utils/getClientRect.js +3 -3
  341. package/positioning/fesm2015/ngx-bootstrap-positioning.js +6 -6
  342. package/positioning/fesm2015/ngx-bootstrap-positioning.js.map +1 -1
  343. package/positioning/fesm5/ngx-bootstrap-positioning.js +7 -7
  344. package/positioning/fesm5/ngx-bootstrap-positioning.js.map +1 -1
  345. package/positioning/package.json +2 -2
  346. package/positioning/positioning.service.d.ts +1 -1
  347. package/progressbar/bar.component.d.ts +4 -5
  348. package/progressbar/bundles/ngx-bootstrap-progressbar.umd.js +45 -66
  349. package/progressbar/bundles/ngx-bootstrap-progressbar.umd.js.map +1 -1
  350. package/progressbar/bundles/ngx-bootstrap-progressbar.umd.min.js +1 -1
  351. package/progressbar/bundles/ngx-bootstrap-progressbar.umd.min.js.map +1 -1
  352. package/progressbar/esm2015/bar.component.js +33 -48
  353. package/progressbar/esm2015/progressbar.component.js +5 -8
  354. package/progressbar/esm2015/progressbar.config.js +6 -2
  355. package/progressbar/esm2015/progressbar.module.js +2 -3
  356. package/progressbar/esm5/bar.component.js +37 -58
  357. package/progressbar/esm5/progressbar.component.js +5 -8
  358. package/progressbar/esm5/progressbar.config.js +6 -2
  359. package/progressbar/esm5/progressbar.module.js +2 -3
  360. package/progressbar/fesm2015/ngx-bootstrap-progressbar.js +42 -57
  361. package/progressbar/fesm2015/ngx-bootstrap-progressbar.js.map +1 -1
  362. package/progressbar/fesm5/ngx-bootstrap-progressbar.js +46 -67
  363. package/progressbar/fesm5/ngx-bootstrap-progressbar.js.map +1 -1
  364. package/progressbar/ngx-bootstrap-progressbar.metadata.json +1 -1
  365. package/progressbar/package.json +2 -2
  366. package/progressbar/progressbar.component.d.ts +7 -6
  367. package/progressbar/progressbar.module.d.ts +1 -1
  368. package/rating/bundles/ngx-bootstrap-rating.umd.js +5 -2
  369. package/rating/bundles/ngx-bootstrap-rating.umd.js.map +1 -1
  370. package/rating/bundles/ngx-bootstrap-rating.umd.min.js +1 -1
  371. package/rating/bundles/ngx-bootstrap-rating.umd.min.js.map +1 -1
  372. package/rating/esm2015/rating.config.js +6 -2
  373. package/rating/esm2015/rating.module.js +2 -3
  374. package/rating/esm5/rating.config.js +6 -2
  375. package/rating/esm5/rating.module.js +2 -3
  376. package/rating/fesm2015/ngx-bootstrap-rating.js +6 -3
  377. package/rating/fesm2015/ngx-bootstrap-rating.js.map +1 -1
  378. package/rating/fesm5/ngx-bootstrap-rating.js +6 -3
  379. package/rating/fesm5/ngx-bootstrap-rating.js.map +1 -1
  380. package/rating/ngx-bootstrap-rating.metadata.json +1 -1
  381. package/rating/package.json +2 -2
  382. package/rating/rating.module.d.ts +1 -1
  383. package/schematics/ng-add/index.spec.js +30 -27
  384. package/schematics/ng-add/index.spec.js.map +1 -1
  385. package/schematics/utils/index.js +18 -5
  386. package/schematics/utils/index.js.map +1 -1
  387. package/sortable/bundles/ngx-bootstrap-sortable.umd.js.map +1 -1
  388. package/sortable/bundles/ngx-bootstrap-sortable.umd.min.js.map +1 -1
  389. package/sortable/esm2015/sortable.module.js +1 -1
  390. package/sortable/esm5/sortable.component.js +4 -4
  391. package/sortable/esm5/sortable.module.js +1 -1
  392. package/sortable/fesm2015/ngx-bootstrap-sortable.js.map +1 -1
  393. package/sortable/fesm5/ngx-bootstrap-sortable.js.map +1 -1
  394. package/sortable/package.json +2 -2
  395. package/sortable/sortable.component.d.ts +2 -1
  396. package/sortable/sortable.module.d.ts +1 -1
  397. package/tabs/bundles/ngx-bootstrap-tabs.umd.js +40 -3
  398. package/tabs/bundles/ngx-bootstrap-tabs.umd.js.map +1 -1
  399. package/tabs/bundles/ngx-bootstrap-tabs.umd.min.js +1 -1
  400. package/tabs/bundles/ngx-bootstrap-tabs.umd.min.js.map +1 -1
  401. package/tabs/esm2015/tab.directive.js +2 -2
  402. package/tabs/esm2015/tabs.module.js +2 -3
  403. package/tabs/esm2015/tabset.component.js +22 -1
  404. package/tabs/esm2015/tabset.config.js +15 -2
  405. package/tabs/esm5/tab.directive.js +2 -2
  406. package/tabs/esm5/tabs.module.js +2 -3
  407. package/tabs/esm5/tabset.component.js +26 -1
  408. package/tabs/esm5/tabset.config.js +15 -2
  409. package/tabs/fesm2015/ngx-bootstrap-tabs.js +37 -4
  410. package/tabs/fesm2015/ngx-bootstrap-tabs.js.map +1 -1
  411. package/tabs/fesm5/ngx-bootstrap-tabs.js +41 -4
  412. package/tabs/fesm5/ngx-bootstrap-tabs.js.map +1 -1
  413. package/tabs/ng-transclude.directive.d.ts +2 -2
  414. package/tabs/ngx-bootstrap-tabs.metadata.json +1 -1
  415. package/tabs/package.json +2 -2
  416. package/tabs/tab.directive.d.ts +5 -3
  417. package/tabs/tabs.module.d.ts +1 -1
  418. package/tabs/tabset.component.d.ts +9 -3
  419. package/tabs/tabset.config.d.ts +2 -0
  420. package/timepicker/bundles/ngx-bootstrap-timepicker.umd.js +11 -6
  421. package/timepicker/bundles/ngx-bootstrap-timepicker.umd.js.map +1 -1
  422. package/timepicker/bundles/ngx-bootstrap-timepicker.umd.min.js +1 -1
  423. package/timepicker/bundles/ngx-bootstrap-timepicker.umd.min.js.map +1 -1
  424. package/timepicker/esm2015/timepicker-controls.util.js +4 -2
  425. package/timepicker/esm2015/timepicker.component.js +2 -2
  426. package/timepicker/esm2015/timepicker.config.js +8 -4
  427. package/timepicker/esm2015/timepicker.module.js +2 -3
  428. package/timepicker/esm5/reducer/timepicker.store.js +3 -3
  429. package/timepicker/esm5/timepicker-controls.util.js +4 -2
  430. package/timepicker/esm5/timepicker.component.js +2 -2
  431. package/timepicker/esm5/timepicker.config.js +8 -4
  432. package/timepicker/esm5/timepicker.module.js +2 -3
  433. package/timepicker/fesm2015/ngx-bootstrap-timepicker.js +12 -7
  434. package/timepicker/fesm2015/ngx-bootstrap-timepicker.js.map +1 -1
  435. package/timepicker/fesm5/ngx-bootstrap-timepicker.js +12 -7
  436. package/timepicker/fesm5/ngx-bootstrap-timepicker.js.map +1 -1
  437. package/timepicker/ngx-bootstrap-timepicker.metadata.json +1 -1
  438. package/timepicker/package.json +2 -2
  439. package/timepicker/timepicker.component.d.ts +3 -3
  440. package/timepicker/timepicker.config.d.ts +1 -1
  441. package/timepicker/timepicker.module.d.ts +1 -1
  442. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.js +5 -2
  443. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.js.map +1 -1
  444. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.min.js +1 -1
  445. package/tooltip/bundles/ngx-bootstrap-tooltip.umd.min.js.map +1 -1
  446. package/tooltip/esm2015/tooltip.config.js +6 -2
  447. package/tooltip/esm2015/tooltip.directive.js +3 -3
  448. package/tooltip/esm2015/tooltip.module.js +2 -3
  449. package/tooltip/esm5/tooltip.config.js +6 -2
  450. package/tooltip/esm5/tooltip.directive.js +3 -3
  451. package/tooltip/esm5/tooltip.module.js +2 -3
  452. package/tooltip/fesm2015/ngx-bootstrap-tooltip.js +6 -3
  453. package/tooltip/fesm2015/ngx-bootstrap-tooltip.js.map +1 -1
  454. package/tooltip/fesm5/ngx-bootstrap-tooltip.js +6 -3
  455. package/tooltip/fesm5/ngx-bootstrap-tooltip.js.map +1 -1
  456. package/tooltip/ngx-bootstrap-tooltip.metadata.json +1 -1
  457. package/tooltip/package.json +2 -2
  458. package/tooltip/tooltip-container.component.d.ts +1 -1
  459. package/tooltip/tooltip.directive.d.ts +15 -10
  460. package/tooltip/tooltip.module.d.ts +1 -1
  461. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.js +170 -19
  462. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.js.map +1 -1
  463. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.min.js +1 -1
  464. package/typeahead/bundles/ngx-bootstrap-typeahead.umd.min.js.map +1 -1
  465. package/typeahead/esm2015/typeahead-utils.js +35 -4
  466. package/typeahead/esm2015/typeahead.config.js +6 -2
  467. package/typeahead/esm2015/typeahead.directive.js +121 -16
  468. package/typeahead/esm2015/typeahead.module.js +2 -3
  469. package/typeahead/esm5/typeahead-utils.js +37 -6
  470. package/typeahead/esm5/typeahead.config.js +6 -2
  471. package/typeahead/esm5/typeahead.directive.js +135 -18
  472. package/typeahead/esm5/typeahead.module.js +2 -3
  473. package/typeahead/fesm2015/ngx-bootstrap-typeahead.js +160 -21
  474. package/typeahead/fesm2015/ngx-bootstrap-typeahead.js.map +1 -1
  475. package/typeahead/fesm5/ngx-bootstrap-typeahead.js +172 -21
  476. package/typeahead/fesm5/ngx-bootstrap-typeahead.js.map +1 -1
  477. package/typeahead/ngx-bootstrap-typeahead.metadata.json +1 -1
  478. package/typeahead/package.json +2 -2
  479. package/typeahead/typeahead-container.component.d.ts +14 -12
  480. package/typeahead/typeahead-utils.d.ts +1 -1
  481. package/typeahead/typeahead.directive.d.ts +20 -1
  482. package/typeahead/typeahead.module.d.ts +1 -1
  483. package/utils/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-bootstrap/datepicker/bs-datepicker.config.ts","ng://ngx-bootstrap/datepicker/base/bs-datepicker-container.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.actions.ts","ng://ngx-bootstrap/datepicker/bs-locale.service.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.effects.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.state.ts","ng://ngx-bootstrap/datepicker/reducer/_defaults.ts","ng://ngx-bootstrap/datepicker/utils/bs-calendar-utils.ts","ng://ngx-bootstrap/datepicker/utils/matrix-utils.ts","ng://ngx-bootstrap/datepicker/engine/calc-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/format-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/flag-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/view-mode.ts","ng://ngx-bootstrap/datepicker/engine/format-months-calendar.ts","ng://ngx-bootstrap/datepicker/engine/format-years-calendar.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.reducer.ts","ng://ngx-bootstrap/datepicker/engine/flag-months-calendar.ts","ng://ngx-bootstrap/datepicker/engine/flag-years-calendar.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.store.ts","ng://ngx-bootstrap/datepicker/datepicker-animations.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-container.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-inline.config.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-inline-container.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-inline.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-inline.config.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-daterangepicker-container.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-daterangepicker-inline-container.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-inline.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-input.directive.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker.config.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-input.directive.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-calendar-layout.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-current-date-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-custom-dates-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-day-decorator.directive.ts","ng://ngx-bootstrap/datepicker/models/index.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-navigation-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-days-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-months-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-timepicker-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-years-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker.module.ts","ng://ngx-bootstrap/datepicker/date-formatter.ts","ng://ngx-bootstrap/datepicker/datepicker-inner.component.ts","ng://ngx-bootstrap/datepicker/datepicker.config.ts","ng://ngx-bootstrap/datepicker/datepicker.component.ts","ng://ngx-bootstrap/datepicker/daypicker.component.ts","ng://ngx-bootstrap/datepicker/monthpicker.component.ts","ng://ngx-bootstrap/datepicker/yearpicker.component.ts","ng://ngx-bootstrap/datepicker/datepicker.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__values","o","m","Symbol","iterator","i","call","next","length","value","done","__read","n","r","e","ar","push","error","BsDatepickerConfig","adaptivePosition","useUtc","isAnimated","returnFocusToInput","containerClass","displayMonths","showWeekNumbers","dateInputFormat","rangeSeparator","rangeInputFormat","monthTitle","yearTitle","dayLabel","monthLabel","yearLabel","weekNumbers","Injectable","BsDatepickerAbstractComponent","customRanges","defineProperty","_effects","setMinDate","setMaxDate","setDaysDisabled","setDatesDisabled","setDatesEnabled","setDisabled","setDateCustomClasses","setViewMode","event","navigateTo","dayHoverHandler","weekHoverHandler","monthHoverHandler","yearHoverHandler","daySelectHandler","day","monthSelectHandler","yearSelectHandler","_stopPropagation","stopPropagation","BsDatepickerActions","calculate","type","CALCULATE","format","FORMAT","flag","FLAG","select","date","SELECT","payload","changeViewMode","CHANGE_VIEWMODE","NAVIGATE_TO","navigateStep","step","NAVIGATE_OFFSET","setOptions","options","SET_OPTIONS","selectRange","SELECT_RANGE","hoverDay","HOVER","isHovered","cell","minDate","SET_MIN_DATE","maxDate","SET_MAX_DATE","daysDisabled","days","SET_DAYSDISABLED","datesDisabled","dates","SET_DATESDISABLED","datesEnabled","SET_DATESENABLED","isDisabled","SET_IS_DISABLED","SET_DATE_CUSTOM_CLASSES","setLocale","locale","SET_LOCALE","BsLocaleService","_defaultLocale","_locale","BehaviorSubject","_localeChange","asObservable","getValue","use","currentLocale","BsDatepickerEffects","_actions","_localeService","_subs","init","_bsDatepickerStore","_store","setValue","dispatch","setRangeValue","_config","_options","assign","setBindings","container","daysCalendar","state","flaggedMonths","pipe","filter","months","monthsCalendar","flaggedMonthsCalendar","yearsCalendar","yearsCalendarFlagged","years","viewMode","view","mode","map","setEventHandlers","_this","_cell","isOtherMonth","unit","month","getMonth","year","getFullYear","registerDatepickerSideEffects","subscribe","monthsModel","monthModel","formattedMonths","selectedDate","selectedRange","yearsCalendarModel","hoveredDate","dateCustomClasses","localeChange","destroy","_b","tslib_1.__values","_c","unsubscribe","_initialView","Date","initialDatepickerState","monthViewOptions","width","height","isMonthDisabled","min","max","minBound","isBefore","endOf","maxBound","isAfter","startOf","isYearDisabled","getYearsCalendarInitialDate","calendarIndex","model","createMatrix","fn","prevValue","initialDate","matrix","j","shiftDate","shift","calcDaysCalendar","startingDate","firstDay","getFirstDayOfMonth","isFirstDayOfWeek","firstDayOfWeek","offset","weekday","startingDayOffset","calculateDateOffset","getDay","getStartingDayOfCalendar","daysMatrix","getShiftedWeekdays","getLocale","weekdays","weekdaysShort","arguments","concat","__spread","slice","flagDaysCalendar","formattedMonth","weeks","forEach","week","dayIndex","isSameMonth","isSameDay","isSelectionStart","isSelectionEnd","isSelected","isInRange","isDateInRange","isDisabledDay","isArray","some","dateDisabled","isSame","enabledDate","isEnabledDate","currentDate","isToday","customClasses","dcc","classes","reduce","previousValue","currentValue","join","newDay","hideLeftArrow","monthIndex","hideRightArrow","disableLeftArrow","disableRightArrow","canSwitchMode","minMode","formatMonthsCalendar","viewDate","formatOptions","label","formatDate","initialYearShift","Math","floor","yearsPerCalendar","formatYearsCalendar","previousInitialDate","yearsMatrix","calculateInitialDate","shift$1","from","to","formatYearRangeTitle","bsDatepickerReducer","action","displayOneMonthRange","isDisplayOneMonth","showPreviousMonth","getFormatOptions","undefined","calculateReducer","weekIndex","formatDaysCalendar","formatReducer","monthCalendar","hoveredMonth","rowIndex","newMonth","yearIndex","isSameYear","hoveredYear","flagYearsCalendar","flagReducer","newState","shiftViewDate","navigateOffsetReducer","setFullDate","getViewDate","isDateValid","middleDate","_date","BsDatepickerStore","_dispatcher","MiniState","_super","tslib_1.__extends","MiniStore","datepickerAnimation","trigger","style","overflow","transition","animate","BsDatepickerContainerComponent","_renderer","_element","_positionService","valueChange","EventEmitter","animationState","setStyle","nativeElement","ngOnInit","modifiers","flip","enabled","allowedPositions","event$","take","disable","isTopPosition","isOtherMonthsActive","selectFromOtherMonth","emit","classList","contains","positionServiceEnable","enable","ngOnDestroy","Component","args","selector","providers","template","host","class","(click)","role","aria-label","animations","Renderer2","ElementRef","PositioningService","BsDatepickerDirective","_elementRef","_viewContainerRef","cis","placement","triggers","outsideClick","outsideEsc","bsValueChange","_datepicker","createLoader","onShown","onHidden","isOpen$","isOpen","isShown","_bsValue","getTime","isDestroy$","Subject","listen","show","setConfig","ngOnChanges","changes","_datepickerRef","instance","ngAfterViewInit","takeUntil","toggle","provide","useValue","attach","position","attachment","bsValue","hide","selectRootElement","focus","bsConfig","dispose","complete","Directive","exportAs","ViewContainerRef","ComponentLoaderFactory","Input","Output","BsDatepickerInlineConfig","BsDatepickerInlineContainerComponent","_positioningService","BsDatepickerInlineDirective","BsDaterangepickerInlineConfig","apply","BsDaterangepickerContainerComponent","_rangeStack","chosenRange","ranges","setRangeOnCalendar","BsDaterangepickerInlineContainerComponent","BsDaterangepickerInlineDirective","range","BS_DATEPICKER_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","useExisting","forwardRef","BsDatepickerInputDirective","multi","BS_DATEPICKER_VALIDATOR","NG_VALIDATORS","_picker","_elRef","changeDetection","_onChange","Function","_onTouched","_validatorChange","_setInputValue","_value","markForCheck","onKeydownEvent","keyCode","code","setProperty","onChange","writeValue","validate","c","isDate","bsDate","invalid","registerOnValidatorChange","_localeKey","Error","parseDate","utcAsLocal","setDisabledState","setAttribute","removeAttribute","registerOnChange","registerOnTouched","onBlur","blur","(change)","(keyup.esc)","(keydown)","(blur)","decorators","Host","ChangeDetectorRef","BsDaterangepickerConfig","BsDaterangepickerDirective","BS_DATERANGEPICKER_VALUE_ACCESSOR","BsDaterangepickerInputDirective","BS_DATERANGEPICKER_VALIDATOR","start","end","errors","sort","a","_isFirstDateValid","_isSecondDateValid","_input","split","_val","isNaN","valueOf","BsCalendarLayoutComponent","BsCurrentDateViewComponent","BsCustomDatesViewComponent","onSelect","customRange","selectFromRanges","checkRange","ChangeDetectionStrategy","OnPush","BsDatepickerDayDecoratorComponent","customTodayClass","addClass","className","[class.disabled]","[class.is-highlighted]","[class.is-other-month]","[class.is-active-other-month]","[class.in-range]","[class.select-start]","[class.select-end]","[class.selected]","UP","DOWN","BsDatepickerNavigationViewComponent","onNavigate","onViewMode","navTo","down","BsNavigationDirection","BsDaysCalendarViewComponent","onHover","onHoverWeek","selectDay","selectWeek","selectWeekDateRange","selectedDay","find","lastDayOfRange","reverse","isWeekHovered","isOtherMonthHovered","BsMonthCalendarViewComponent","viewMonth","hoverMonth","BsTimepickerViewComponent","ampm","hours","minutes","BsYearsCalendarViewComponent","viewYear","hoverYear","BsDatepickerModule","forRoot","ngModule","NgModule","imports","CommonModule","declarations","entryComponents","exports","DateFormatter","DatePickerInnerComponent","selectionDone","update","activeDateChange","stepDay","stepMonth","stepYear","modes","dateFormatter","_activeDate","uniqueId","random","initDate","activeDate","refreshView","checkIfActiveDateGotUpdated","firstChange","setCompareHandler","handler","compareHandlerDay","compareHandlerMonth","compareHandlerYear","compare","date1","date2","datepickerMode","setRefreshViewHandler","refreshViewHandlerDay","refreshViewHandlerMonth","refreshViewHandlerYear","dateFilter","isActive","dateObject","activeDateId","uid","createDateObject","getDate","fixTimeZone","selected","disabled","current","customClass","getCustomClassForDate","arr","size","arrays","splice","getHours","isManual","indexOf","move","direction","expectedStep","toggleMode","_direction","maxMode","customClassObject","clazz","compareDateDisabled","date1Disabled","isDateDisabled","disabledDate","dayDisabled","DatepickerConfig","startingDay","yearRange","showWeeks","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","onlyCurrentMonth","monthColLimit","yearColLimit","shortcutPropagation","DATEPICKER_CONTROL_VALUE_ACCESSOR","DatePickerComponent","config","onTouched","_now","configureOptions","onUpdate","onSelectionDone","onActiveDateChange","_datePicker","ViewChild","static","DayPickerComponent","datePicker","labels","rows","isBs3","self","firstDayOfMonth","difference","numDisplayedFromPreviousMonth","firstDate","setDate","_days","getDates","_dateObject","secondary","abbr","full","title","thursdayIndex","numWeeks","curWeek","getISO8601WeekNumber","d1","d2","startDate","checkDate","time","setMonth","round","MonthPickerComponent","YearPickerComponent","getStartingYear","DatepickerModule","FormsModule"],"mappings":";;;;;;;;;;;;;;oFAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,IAGrB,SAASO,EAAUR,EAAGC,GAEzB,SAASQ,IAAOC,KAAKC,YAAcX,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEY,UAAkB,OAANX,EAAaC,OAAOW,OAAOZ,IAAMQ,EAAGG,UAAYX,EAAEW,UAAW,IAAIH,GAgF5E,SAASK,EAASC,GACrB,IAAIC,EAAsB,mBAAXC,QAAyBF,EAAEE,OAAOC,UAAWC,EAAI,EAChE,OAAIH,EAAUA,EAAEI,KAAKL,GACd,CACHM,KAAM,WAEF,OADIN,GAAKI,GAAKJ,EAAEO,SAAQP,OAAI,GACrB,CAAEQ,MAAOR,GAAKA,EAAEI,KAAMK,MAAOT,KAKzC,SAASU,EAAOV,EAAGW,GACtB,IAAIV,EAAsB,mBAAXC,QAAyBF,EAAEE,OAAOC,UACjD,IAAKF,EAAG,OAAOD,EACf,IAAmBY,EAAYC,EAA3BT,EAAIH,EAAEI,KAAKL,GAAOc,EAAK,GAC3B,IACI,WAAc,IAANH,GAAgBA,KAAM,MAAQC,EAAIR,EAAEE,QAAQG,MAAMK,EAAGC,KAAKH,EAAEJ,OAExE,MAAOQ,GAASH,EAAI,CAAEG,MAAOA,GACjC,QACQ,IACQJ,IAAMA,EAAEH,OAASR,EAAIG,EAAU,SAAIH,EAAEI,KAAKD,GAE1D,QAAkB,GAAIS,EAAG,MAAMA,EAAEG,OAE7B,OAAOF,mBCtHX,SAAAG,IAGEtB,KAAAuB,kBAAmB,EAEnBvB,KAAAwB,QAAS,EAETxB,KAAAyB,YAAa,EAkEbzB,KAAA0B,oBAAqB,EAKrB1B,KAAA2B,eAAiB,cAGjB3B,KAAA4B,cAAgB,EAIhB5B,KAAA6B,iBAAkB,EAElB7B,KAAA8B,gBAAkB,IAElB9B,KAAA+B,eAAiB,MAIjB/B,KAAAgC,iBAAmB,IAQnBhC,KAAAiC,WAAa,OACbjC,KAAAkC,UAAY,OACZlC,KAAAmC,SAAW,IACXnC,KAAAoC,WAAa,OACbpC,KAAAqC,UAAY,OACZrC,KAAAsC,YAAc,IAChB,2BA3GCC,EAAAA,aA2GDjB,KCrGA,iBAAA,SAAAkB,IAKExC,KAAAyC,aAAgC,GAwDlC,OAtDEjD,OAAAkD,eAAIF,EAAAtC,UAAA,UAAO,KAAX,SAAYW,GACVb,KAAK2C,SAASC,WAAW/B,oCAG3BrB,OAAAkD,eAAIF,EAAAtC,UAAA,UAAO,KAAX,SAAYW,GACVb,KAAK2C,SAASE,WAAWhC,oCAE3BrB,OAAAkD,eAAIF,EAAAtC,UAAA,eAAY,KAAhB,SAAiBW,GACfb,KAAK2C,SAASG,gBAAgBjC,oCAEhCrB,OAAAkD,eAAIF,EAAAtC,UAAA,gBAAa,KAAjB,SAAkBW,GAChBb,KAAK2C,SAASI,iBAAiBlC,oCAGjCrB,OAAAkD,eAAIF,EAAAtC,UAAA,eAAY,KAAhB,SAAiBW,GACfb,KAAK2C,SAASK,gBAAgBnC,oCAGhCrB,OAAAkD,eAAIF,EAAAtC,UAAA,aAAU,KAAd,SAAeW,GACbb,KAAK2C,SAASM,YAAYpC,oCAG5BrB,OAAAkD,eAAIF,EAAAtC,UAAA,oBAAiB,KAArB,SAAsBW,GACpBb,KAAK2C,SAASO,qBAAqBrC,oCASrC2B,EAAAtC,UAAAiD,YAAA,SAAYC,KAEZZ,EAAAtC,UAAAmD,WAAA,SAAWD,KAEXZ,EAAAtC,UAAAoD,gBAAA,SAAgBF,KAEhBZ,EAAAtC,UAAAqD,iBAAA,SAAiBH,KAEjBZ,EAAAtC,UAAAsD,kBAAA,SAAkBJ,KAElBZ,EAAAtC,UAAAuD,iBAAA,SAAiBL,KAEjBZ,EAAAtC,UAAAwD,iBAAA,SAAiBC,KAEjBnB,EAAAtC,UAAA0D,mBAAA,SAAmBR,KAEnBZ,EAAAtC,UAAA2D,kBAAA,SAAkBT,KAGlBZ,EAAAtC,UAAA4D,iBAAA,SAAiBV,GACfA,EAAMW,mBAEVvB,KChFA,IAAAwB,EAAA,WAWA,SAAAA,KA6IA,OArHEA,EAAA9D,UAAA+D,UAAA,WACE,MAAO,CAAEC,KAAMF,EAAoBG,YAGrCH,EAAA9D,UAAAkE,OAAA,WACE,MAAO,CAAEF,KAAMF,EAAoBK,SAGrCL,EAAA9D,UAAAoE,KAAA,WACE,MAAO,CAAEJ,KAAMF,EAAoBO,OAGrCP,EAAA9D,UAAAsE,OAAA,SAAOC,GACL,MAAO,CACLP,KAAMF,EAAoBU,OAC1BC,QAASF,IAIbT,EAAA9D,UAAA0E,eAAA,SAAexB,GACb,MAAO,CACLc,KAAMF,EAAoBa,gBAC1BF,QAASvB,IAIbY,EAAA9D,UAAAmD,WAAA,SAAWD,GACT,MAAO,CACLc,KAAMF,EAAoBc,YAC1BH,QAASvB,IAIbY,EAAA9D,UAAA6E,aAAA,SAAaC,GACX,MAAO,CACLd,KAAMF,EAAoBiB,gBAC1BN,QAASK,IAIbhB,EAAA9D,UAAAgF,WAAA,SAAWC,GACT,MAAO,CACLjB,KAAMF,EAAoBoB,YAC1BT,QAASQ,IAKbnB,EAAA9D,UAAAmF,YAAA,SAAYxE,GACV,MAAO,CACLqD,KAAMF,EAAoBsB,aAC1BX,QAAS9D,IAIbmD,EAAA9D,UAAAqF,SAAA,SAASnC,GACP,MAAO,CACLc,KAAMF,EAAoBwB,MAC1Bb,QAASvB,EAAMqC,UAAYrC,EAAMsC,KAAKjB,KAAO,OAIjDT,EAAA9D,UAAAyF,QAAA,SAAQlB,GACN,MAAO,CACLP,KAAMF,EAAoB4B,aAC1BjB,QAASF,IAIbT,EAAA9D,UAAA2F,QAAA,SAAQpB,GACN,MAAO,CACLP,KAAMF,EAAoB8B,aAC1BnB,QAASF,IAIbT,EAAA9D,UAAA6F,aAAA,SAAaC,GACX,MAAO,CACL9B,KAAMF,EAAoBiC,iBAC1BtB,QAASqB,IAIbhC,EAAA9D,UAAAgG,cAAA,SAAcC,GACZ,MAAO,CACLjC,KAAMF,EAAoBoC,kBAC1BzB,QAASwB,IAIbnC,EAAA9D,UAAAmG,aAAA,SAAaF,GACX,MAAO,CACLjC,KAAMF,EAAoBsC,iBAC1B3B,QAASwB,IAIbnC,EAAA9D,UAAAqG,WAAA,SAAW1F,GACT,MAAO,CACLqD,KAAMF,EAAoBwC,gBAC1B7B,QAAS9D,IAIbmD,EAAA9D,UAAAgD,qBAAA,SAAqBrC,GACnB,MAAO,CACLqD,KAAMF,EAAoByC,wBAC1B9B,QAAS9D,IAIbmD,EAAA9D,UAAAwG,UAAA,SAAUC,GACR,MAAO,CACLzC,KAAMF,EAAoB4C,WAC1BjC,QAASgC,IAxIG3C,EAAAG,UAAY,sCACZH,EAAAK,OAAS,wCACTL,EAAAO,KAAO,yBACPP,EAAAU,OAAS,2BACTV,EAAAiB,gBAAkB,+BAClBjB,EAAAc,YAAc,gCACdd,EAAAoB,YAAc,qCACdpB,EAAAwB,MAAQ,0BACRxB,EAAAa,gBAAkB,gCAElBb,EAAA4B,aAAe,4BACf5B,EAAA8B,aAAe,4BACf9B,EAAAiC,iBAAmB,iCACnBjC,EAAAoC,kBAAoB,kCACpBpC,EAAAsC,iBAAmB,iCACnBtC,EAAAwC,gBAAkB,+BAClBxC,EAAAyC,wBAA0B,uCAE1BzC,EAAA4C,WAAa,qCAEb5C,EAAAsB,aAAe,2DAtBhC/C,EAAAA,aA6IDyB,EAxJA,GCAA,IAAA6C,EAAA,WAGA,SAAAA,IAEU7G,KAAA8G,eAAiB,KACjB9G,KAAA+G,QAAU,IAAIC,EAAAA,gBAAwBhH,KAAK8G,gBAC3C9G,KAAAiH,cAAoCjH,KAAK+G,QAAQG,eAqB3D,OAnBE1H,OAAAkD,eAAImE,EAAA3G,UAAA,SAAM,KAAV,WACE,OAAOF,KAAK+G,yCAGdvH,OAAAkD,eAAImE,EAAA3G,UAAA,eAAY,KAAhB,WACE,OAAOF,KAAKiH,+CAGdzH,OAAAkD,eAAImE,EAAA3G,UAAA,gBAAa,KAAjB,WACE,OAAOF,KAAK+G,QAAQI,4CAGtBN,EAAA3G,UAAAkH,IAAA,SAAIT,GACEA,IAAW3G,KAAKqH,eAIpBrH,KAAK+G,QAAQpG,KAAKgG,wBAvBrBpE,EAAAA,aAyBDsE,EA5BA,oBCsCE,SAAAS,EAAoBC,EACAC,GADAxH,KAAAuH,SAAAA,EACAvH,KAAAwH,eAAAA,EAHZxH,KAAAyH,MAAwB,GAsQlC,OAjQEH,EAAApH,UAAAwH,KAAA,SAAKC,GAGH,OAFA3H,KAAK4H,OAASD,EAEP3H,MAKTsH,EAAApH,UAAA2H,SAAA,SAAShH,GACPb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAAS/C,OAAO3D,KAG5CyG,EAAApH,UAAA6H,cAAA,SAAclH,GACZb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASlC,YAAYxE,KAGjDyG,EAAApH,UAAA0C,WAAA,SAAW/B,GAGT,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAAS5B,QAAQ9E,IAEpCb,MAGTsH,EAAApH,UAAA2C,WAAA,SAAWhC,GAGT,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAAS1B,QAAQhF,IAEpCb,MAGTsH,EAAApH,UAAA4C,gBAAA,SAAgBjC,GAGd,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASxB,aAAalF,IAEzCb,MAGTsH,EAAApH,UAAA6C,iBAAA,SAAiBlC,GAGf,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASrB,cAAcrF,IAE1Cb,MAGTsH,EAAApH,UAAA8C,gBAAA,SAAgBnC,GAGd,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASlB,aAAaxF,IAEzCb,MAGTsH,EAAApH,UAAA+C,YAAA,SAAYpC,GAGV,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAAShB,WAAW1F,IAEvCb,MAGTsH,EAAApH,UAAAgD,qBAAA,SAAqBrC,GAGnB,OAFAb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASrE,qBAAqBrC,IAEjDb,MAITsH,EAAApH,UAAAgF,WAAA,SAAW8C,OACHC,EAAWzI,OAAO0I,OAAO,CAACvB,OAAQ3G,KAAKwH,eAAeH,eAAgBW,GAG5E,OAFAhI,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASrC,WAAW+C,IAEvCjI,MAITsH,EAAApH,UAAAiI,YAAA,SAAYC,GA6BV,OA5BAA,EAAUC,aAAerI,KAAK4H,OAC3BpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMC,iBACtBC,KACCC,EAAAA,QAAM,SAACC,GAAU,QAAEA,MAIvBN,EAAUO,eAAiB3I,KAAK4H,OAC7BpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMM,yBACtBJ,KACCC,EAAAA,QAAM,SAACC,GAAU,QAAEA,MAIvBN,EAAUS,cAAgB7I,KAAK4H,OAC5BpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMQ,wBACtBN,KACCC,EAAAA,QAAM,SAACM,GAAS,QAAEA,MAGtBX,EAAUY,SAAWhJ,KAAK4H,OAAOpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMW,KAAKC,QAE5Dd,EAAUjD,QAAUnF,KAAK4H,OACtBpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMzG,mBACtB2G,KACCW,EAAAA,KAAG,SAACtH,GAAmB,MAAA,CAAEA,gBAAeA,OAGrC7B,MAITsH,EAAApH,UAAAkJ,iBAAA,SAAiBhB,GAAjB,IAAAiB,EAAArJ,KAwDE,OAvDAoI,EAAUjF,YAAW,SAAIC,GACvBiG,EAAKzB,OAAOE,SAASuB,EAAK9B,SAAS3C,eAAexB,KAGpDgF,EAAU/E,WAAU,SAAID,GACtBiG,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASxC,aAAa3B,EAAM4B,QAGxDoD,EAAU9E,gBAAe,SAAIF,OACrBkG,EAAQlG,EAAU,KACpBkG,EAAMC,cAAgBD,EAAM/C,aAIhC8C,EAAKzB,OAAOE,SAASuB,EAAK9B,SAAShC,SAASnC,IAC5CkG,EAAM7D,UAAYrC,EAAMqC,YAG1B2C,EAAU5E,kBAAiB,SAAIJ,GAC7BA,EAAMsC,KAAKD,UAAYrC,EAAMqC,WAG/B2C,EAAU3E,iBAAgB,SAAIL,GAC5BA,EAAMsC,KAAKD,UAAYrC,EAAMqC,WAG/B2C,EAAUxE,mBAAkB,SAAIR,GAC1BA,EAAMmD,YAGV8C,EAAKzB,OAAOE,SACVuB,EAAK9B,SAASlE,WAAW,CACvBmG,KAAM,CACJC,MAAOC,EAAAA,SAAStG,EAAMqB,MACtBkF,KAAMC,EAAAA,YAAYxG,EAAMqB,OAE1BuE,SAAU,UAKhBZ,EAAUvE,kBAAiB,SAAIT,GACzBA,EAAMmD,YAGV8C,EAAKzB,OAAOE,SACVuB,EAAK9B,SAASlE,WAAW,CACvBmG,KAAM,CACJG,KAAMC,EAAAA,YAAYxG,EAAMqB,OAE1BuE,SAAU,YAKThJ,MAGTsH,EAAApH,UAAA2J,8BAAA,WAAA,IAAAR,EAAArJ,KA0FE,OAzFAA,KAAKyH,MAAMrG,KACTpB,KAAK4H,OAAOpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMW,QAAMa,WAAS,SAACb,GAChDI,EAAKzB,OAAOE,SAASuB,EAAK9B,SAAStD,iBAKvCjE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMyB,eACtBvB,KACCC,EAAAA,QAAM,SAACuB,GAAc,QAAEA,MAExBF,WAAS,SAACL,GAAS,OAAAJ,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASnD,cAI3DpE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM2B,mBACtBzB,KACCC,EAAAA,QAAM,SAACgB,GAAS,QAAEA,MAEnBK,WAAS,SAACL,GAAS,OAAAJ,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAI3DtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM4B,gBACtB1B,KACCC,EAAAA,QAAM,SAACyB,GAAgB,QAAEA,MAE1BJ,WAAS,SAACI,GAAgB,OAAAb,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAIlEtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM6B,iBACtB3B,KACCC,EAAAA,QAAM,SAAC0B,GAAiB,QAAEA,MAE3BL,WAAS,SAACK,GAAiB,OAAAd,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAInEtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMK,kBACtBmB,WAAS,WAAO,OAAAT,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAIxDtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM8B,sBACtB5B,KACCC,EAAAA,QAAM,SAACH,GAAS,QAAEA,MAEnBwB,WAAS,WAAO,OAAAT,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAIxDtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM+B,eACtB7B,KACCC,EAAAA,QAAM,SAAC4B,GAAe,QAAEA,MAEzBP,WAAS,SAACO,GAAe,OAAAhB,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAIjEtE,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAMgC,qBACtB9B,KACCC,EAAAA,QAAM,SAAC6B,GAAqB,QAAEA,MAE/BR,WAAS,SAACQ,GAAqB,OAAAjB,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASjD,YAIvEtE,KAAKyH,MAAMrG,KACTpB,KAAKwH,eAAe+C,aACjBT,WAAS,SAACnD,GAAU,OAAA0C,EAAKzB,OAAOE,SAASuB,EAAK9B,SAASb,UAAUC,QAG/D3G,MAGTsH,EAAApH,UAAAsK,QAAA,uBACE,IAAkB,IAAAC,EAAAC,EAAA1K,KAAKyH,OAAKkD,EAAAF,EAAA9J,QAAAgK,EAAA7J,KAAA6J,EAAAF,EAAA9J,OAAE,CAAhBgK,EAAA9J,MACR+J,sIA5QTrI,EAAAA,sDAnBQyB,SAGA6C,KA+RTS,SC3NMuD,EAAsC,CAAEpG,KAAM,IAAIqG,KAAQ5B,KAAM,OAEzD6B,EAA4CvL,OAAO0I,OAC9D,IAAI5G,EACJ,CACEqF,OAAQ,KACRsC,KAAM4B,EACNV,cAAe,GACfa,iBCnFiD,CACnDC,MAAO,EACPC,OAAQ,KC6BV,SAAgBC,EAAgB1G,EAAY2G,EAAWC,OAC/CC,EAAWF,GAAOG,EAAAA,SAASC,EAAAA,MAAM/G,EAAM,SAAU2G,EAAK,OACtDK,EAAWJ,GAAOK,EAAAA,QAAQC,EAAAA,QAAQlH,EAAM,SAAU4G,EAAK,OAE7D,OAAOC,GAAYG,EAGrB,SAAgBG,EAAenH,EAAY2G,EAAWC,OAC9CC,EAAWF,GAAOG,EAAAA,SAASC,EAAAA,MAAM/G,EAAM,QAAS2G,EAAK,OACrDK,EAAWJ,GAAOK,EAAAA,QAAQC,EAAAA,QAAQlH,EAAM,QAAS4G,EAAK,OAE5D,OAAOC,GAAYG,EAmBrB,SAAgBI,EAA4BvD,EAA0BwD,QAAA,IAAAA,IAAAA,EAAA,OAC9DC,EAAQzD,GAASA,EAAM8B,oBAAsB9B,EAAM8B,mBAAmB0B,GAE5E,OAAOC,GAASA,EAAMhD,OAASgD,EAAMhD,MAAM,IAAMgD,EAAMhD,MAAM,GAAG,IAAMgD,EAAMhD,MAAM,GAAG,GAAGtE,KCzD1F,SAAgBuH,EACd7G,EACA8G,GAIA,QAFIC,EAAY/G,EAAQgH,YAClBC,EAAgB,IAAIzM,MAAMwF,EAAQ+F,QAC/BzK,EAAI,EAAGA,EAAI0E,EAAQ+F,OAAQzK,IAAK,CACvC2L,EAAO3L,GAAK,IAAId,MAAMwF,EAAQ8F,OAC9B,IAAK,IAAIoB,EAAI,EAAGA,EAAIlH,EAAQ8F,MAAOoB,IACjCD,EAAO3L,GAAG4L,GAAKJ,EAAGC,GAClBA,EAAYI,EAAAA,UAAUJ,EAAW/G,EAAQoH,OAI7C,OAAOH,ECjBT,SAAgBI,EACdC,EACAtH,OAEMuH,EAAWC,EAAAA,mBAAmBF,GAC9BN,EFAR,SAAyC1H,EACAU,GACvC,GAAIyH,EAAAA,iBAAiBnI,EAAMU,EAAQ0H,gBACjC,OAAOpI,MAIHqI,EAKR,SAAoCC,EAAiBC,GACnD,GAA0B,IAAtBA,EACF,OAAOD,MAGHD,EAASC,EAAUC,EAAoB,EAE7C,OAAOF,EAAS,EAAIA,EAAS,EAAIA,EAZlBG,CADCC,EAAAA,OAAOzI,GACqBU,EAAQ0H,gBAEpD,OAAOP,EAAAA,UAAU7H,EAAM,CAACd,KAAMmJ,IETVK,CAAyBT,EAAUvH,GAUvD,MAAO,CACLiI,WAHiBpB,EANG,CACpBf,MAAO9F,EAAQ8F,MACfC,OAAQ/F,EAAQ+F,OAChBiB,YAAWA,EACXI,MAAO,CAAE5I,IAAK,KAEmC,SAAEc,GAAQ,OAAAA,KAI3DgF,MAAOiD,GCuBX,SAAgBW,EAAmB1G,OAC3BI,EAAUuG,EAAAA,UAAU3G,GACpB4G,EAAWxG,EAAQyG,gBACnBX,EAAiB9F,EAAQ8F,iBAE/B,OXiFK,WACH,IAAK,IAAI1L,EAAK,GAAIV,EAAI,EAAGA,EAAIgN,UAAU7M,OAAQH,IAC3CU,EAAKA,EAAGuM,OAAO3M,EAAO0M,UAAUhN,KACpC,OAAOU,EWpFTwM,CAAWJ,EAASK,MAAMf,GAAoBU,EAASK,MAAM,EAAGf,ICpBlE,SAAgBgB,EACdC,EACA3I,GAgGA,OA9FA2I,EAAeC,MAAMC,SAAO,SAAEC,GAE5BA,EAAKjI,KAAKgI,SAAO,SAAErK,EAAmBuK,OJUXzJ,EAAYyB,EIR/BqD,GAAgB4E,EAAAA,YAAYxK,EAAIc,KAAMqJ,EAAerE,OAErDhE,GACH8D,GAAgB6E,EAAAA,UAAUzK,EAAIc,KAAMU,EAAQkF,aAEzCgE,GACH9E,GACDpE,EAAQgF,eACRiE,EAAAA,UAAUzK,EAAIc,KAAMU,EAAQgF,cAAc,IACtCmE,GACH/E,GACDpE,EAAQgF,eACRiE,EAAAA,UAAUzK,EAAIc,KAAMU,EAAQgF,cAAc,IAEtCoE,GACFhF,GAAgB6E,EAAAA,UAAUzK,EAAIc,KAAMU,EAAQ+E,eAC9CmE,GACAC,EAEIE,GACHjF,GACDpE,EAAQgF,eAwEhB,SACE1F,EACA0F,EACAE,GAEA,IAAK5F,IAAS0F,EAAc,GAC1B,OAAO,EAGT,GAAIA,EAAc,GAChB,OAAO1F,EAAO0F,EAAc,IAAM1F,GAAQ0F,EAAc,GAG1D,GAAIE,EACF,OAAO5F,EAAO0F,EAAc,IAAM1F,GAAQ4F,EAG5C,OAAO,EAxFDoE,CAAc9K,EAAIc,KAAMU,EAAQgF,cAAehF,EAAQkF,aAEnD9D,EACJpB,EAAQoB,YACRgF,EAAAA,SAAS5H,EAAIc,KAAMU,EAAQQ,QAAS,QACpC+F,EAAAA,QAAQ/H,EAAIc,KAAMU,EAAQU,QAAS,QACnC6I,EAAAA,cAAc/K,EAAIc,KAAMU,EAAQY,gBJpBTtB,EIqBRd,EAAIc,SJrBgByB,EIqBVf,EAAQe,gBJpBfyI,EAAAA,QAAQzI,IAAmBA,EAActF,SAI1DsF,EAAc0I,MAAI,SAAEC,GAAuB,OAAAC,EAAAA,OAAOrK,EAAMoK,EAAc,aAG/E,SAA8BpK,EAAY4B,GACxC,SAAKA,GAAiBsI,EAAAA,QAAQtI,IAAkBA,EAAazF,UAIrDyF,EAAauI,MAAI,SAAEG,GAAsB,OAAAD,EAAAA,OAAOrK,EAAMsK,EAAa,WISrEC,CAAcrL,EAAIc,KAAMU,EAAQkB,cAE5B4I,EAAc,IAAInE,KAClBoE,GAAW3F,GAAgB6E,EAAAA,UAAUzK,EAAIc,KAAMwK,GAE/CE,EAAgBhK,EAAQmF,mBAAqBnF,EAAQmF,kBACxDnB,KAAG,SAACiG,GAAO,OAAAhB,EAAAA,UAAUzK,EAAIc,KAAM2K,EAAI3K,MAAQ2K,EAAIC,QAAU,MACzDC,QAAM,SAAEC,EAAeC,GAAiB,OAAAD,EAAc7B,OAAO8B,KAAe,IAC5EC,KAAK,MACH,GAICC,EAASlQ,OAAO0I,OAAO,GAAIvE,EAAK,CACpC4F,aAAYA,EACZ9D,UAASA,EACT8I,WAAUA,EACVF,iBAAgBA,EAChBC,eAAcA,EACdE,UAASA,EACTjI,WAAUA,EACV2I,QAAOA,EACPC,cAAaA,IAIbxL,EAAI4F,eAAiBmG,EAAOnG,cAC5B5F,EAAI8B,YAAciK,EAAOjK,WACzB9B,EAAI4K,aAAemB,EAAOnB,YAC1B5K,EAAI0K,mBAAqBqB,EAAOrB,kBAChC1K,EAAI2K,iBAAmBoB,EAAOpB,gBAC9B3K,EAAI4C,aAAemJ,EAAOnJ,YAC1B5C,EAAI6K,YAAckB,EAAOlB,WACzB7K,EAAIwL,gBAAkBO,EAAOP,gBAE7BlB,EAAKjI,KAAKkI,GAAYwB,SAM5B5B,EAAe6B,cACbxK,EAAQoB,YACPpB,EAAQyK,WAAa,GAAKzK,EAAQyK,aAAezK,EAAQvD,cAC5DkM,EAAe+B,eACb1K,EAAQoB,YACPpB,EAAQyK,WAAazK,EAAQvD,eAC5BuD,EAAQyK,WAAa,IAAMzK,EAAQvD,cAEvCkM,EAAegC,iBAAmB3E,EAChCmB,EAAAA,UAAUwB,EAAerE,MAAO,CAAEA,OAAQ,IAC1CtE,EAAQQ,QACRR,EAAQU,SAEViI,EAAeiC,kBAAoB5E,EACjCmB,EAAAA,UAAUwB,EAAerE,MAAO,CAAEA,MAAO,IACzCtE,EAAQQ,QACRR,EAAQU,SAGHiI,ECjIT,SAAgBkC,EAAc9G,EAA4B+G,GACxD,OAAOA,GAAU/G,GAAQ+G,MCOrB1D,EAAQ,CAAE9C,MAAO,GAEvB,SAAgByG,EACdC,EACAC,GAWA,MAAO,CACL1H,OARkBsD,EADE,CAAEf,MARZ,EAQmBC,OATlB,EAS0BiB,YADnBR,EAAAA,QAAQwE,EAAU,QACc5D,MAAKA,IAG1C,SAAE9H,GAAQ,MAAA,CACvBA,KAAIA,EACJ4L,MAAOC,EAAAA,WAAW7L,EAAM2L,EAAchO,WAAYgO,EAAczJ,YAKhE1E,WAAY,GACZC,UAAWoO,EAAAA,WACTH,EACAC,EAAclO,UACdkO,EAAczJ,aCpBP4J,GAA6D,GAAzCC,KAAKC,MAAMC,GAAwB,GAC9DnE,EAAQ,CAAE5C,KAAM,GAEtB,SAAgBgH,EACdR,EACAC,EACAQ,OAIMC,EAAc7E,EADE,CAAEf,MAXZ,EAWmBC,OAZlB,EAY0BiB,YAgBzC,SAA8BgE,EAAgBS,GAC5C,GAAIA,GACCT,EAASvG,eAAiBgH,EAAoBhH,eAC9CuG,EAASvG,cAAgBgH,EAAoBhH,cA7BpBsB,GA8B5B,OAAO0F,EAGT,OAAOtE,EAAAA,UAAU6D,EAAU,CAAExG,KAAM4G,IAxBfO,CAAqBX,EAAUS,GACCrE,MAAKwE,IAG1C,SAAEtM,GAAQ,MAAA,CACvBA,KAAIA,EACJ4L,MAAOC,EAAAA,WAAW7L,EAAM2L,EAAc/N,UAAW+N,EAAczJ,YAIjE,MAAO,CACLoC,MAAO8H,EACP5O,WAAY,GACZC,UAcJ,SACE2O,EACAT,OAEMY,EAAOV,EAAAA,WACXO,EAAY,GAAG,GAAGpM,KAClB2L,EAAclO,UACdkO,EAAczJ,QAEVsK,EAAKX,EAAAA,WACTO,EAAY3F,GAAYD,GAAWxG,KACnC2L,EAAclO,UACdkO,EAAczJ,QAGhB,OAAUqK,EAAI,MAAMC,EAlCFC,CAAqBL,EAAaT,ICCtD,SAAgBe,EAAoB7I,EACA8I,GAClC,YAFkC,IAAA9I,IAAAA,EAAAyC,GAE1BqG,EAAOlN,MACb,KAAKF,EAAoBG,UACvB,OAkIN,SAA0BmE,OAElB1G,EAAiB0G,EAAM+I,sBAC3BC,EAAkBhJ,EAAMW,KAAKxE,KAAM6D,EAAM3C,QAAS2C,EAAMzC,SAAY,EAAIyC,EAAM1G,cAG5EuO,EAAW7H,EAAMW,KAAKxE,KAE1B,GAAwB,QAApB6D,EAAMW,KAAKC,KAAgB,CACzBZ,EAAMiJ,mBAAoD,IAA/BjJ,EAAM6B,cAAcvJ,SACjDuP,EAAW7D,EAAAA,UAAU6D,EAAU,CAAE1G,OAAQ,KAG3CnB,EAAM0C,iBAAiB6B,eAAiBS,EAAAA,UAAUhF,EAAM3B,QAAQkG,iBAEhE,QADM9C,EAAc,IAAIpK,MAAMiC,GACrBgO,EAAa,EAAGA,EAAahO,EAAegO,IAEnD7F,EAAY6F,GAAcpD,EACxB2D,EACA7H,EAAM0C,kBAERmF,EAAW7D,EAAAA,UAAU6D,EAAU,CAAE1G,MAAO,IAG1C,OAAOjK,OAAO0I,OAAO,GAAII,EAAO,CAAEyB,YAAWA,IAG/C,GAAwB,UAApBzB,EAAMW,KAAKC,KAAkB,CAE/B,QADMP,EAAiB,IAAIhJ,MAAMiC,GAE3BkK,EAAgB,EACpBA,EAAgBlK,EAChBkK,IAGAnD,EAAemD,GAAiBoE,EAC9BC,EACAqB,EAAiBlJ,IAEnB6H,EAAW7D,EAAAA,UAAU6D,EAAU,CAAExG,KAAM,IAGzC,OAAOnK,OAAO0I,OAAO,GAAII,EAAO,CAAEK,eAAcA,IAGlD,GAAwB,SAApBL,EAAMW,KAAKC,KAAiB,KACxBkB,EAAqB,IAAIzK,MAAMiC,GAErC,IACMkK,EAAgB,EACpBA,EAAgBlK,EAChBkK,IAGA1B,EAAmB0B,GAAiB6E,EAClCR,EACAqB,EAAiBlJ,GACC,SAAlBA,EAAM2H,QAAqBpE,EAA4BvD,EAAOwD,QAAiB2F,GAEjFtB,EAAW7D,EAAAA,UAAU6D,EAAU,CAAExG,KDnNPuB,KCsN5B,OAAO1L,OAAO0I,OAAO,GAAII,EAAO,CAAE8B,mBAAkBA,IAGtD,OAAO9B,EAnMIoJ,CAAiBpJ,GAG1B,KAAKtE,EAAoBK,OACvB,OAkMN,SAAuBiE,EACA8I,GACrB,GAAwB,QAApB9I,EAAMW,KAAKC,KAAgB,KACvBe,EAAkB3B,EAAMyB,YAAYZ,KAAG,SAAEM,EAAOmG,GACpD,OLnON,SAAmCvH,EACA+H,EACAR,GACjC,MAAO,CACLnG,MAAOpB,EAAaoB,MACpBxH,WAAYqO,EAAAA,WACVjI,EAAaoB,MACb2G,EAAcnO,WACdmO,EAAczJ,QAEhBzE,UAAWoO,EAAAA,WACTjI,EAAaoB,MACb2G,EAAclO,UACdkO,EAAczJ,QAEhBrE,aAkB2B8K,EAjBzB/E,EAAa+E,WAkBYhJ,EAjBzBgM,EAAc9N,YAkBWqE,EAjBzByJ,EAAczJ,OAkBXyG,EAAWjE,KAAG,SAClBnD,GAAiB,OAACA,EAAK,GAAKsK,EAAAA,WAAWtK,EAAK,GAAI5B,EAAQuC,GAAU,OAjBnE4G,SAAUF,EAAmB+C,EAAczJ,QAC3CoH,MAAO1F,EAAa+E,WAAWjE,KAAG,SAAE8E,EAAc0D,GAAsB,MAAA,CACtE3L,KAAMiI,EAAK9E,KAAG,SAAE1E,EAAYyJ,GAAqB,MAAA,CAC/CzJ,KAAIA,EACJ4L,MAAOC,EAAAA,WAAW7L,EAAM2L,EAAcjO,SAAUiO,EAAczJ,QAC9DiJ,WAAUA,EACV+B,UAASA,EACTzD,SAAQA,WAMhB,IAA+Bd,EACAhJ,EACAuC,EKgMzBiL,CAAmBnI,EAAO+H,EAAiBlJ,GAAQsH,MAGrD,OAAOpQ,OAAO0I,OAAO,GAAII,EAAO,CAAE2B,gBAAeA,QAI7CrI,EAAgB0G,EAAM1G,cAGxBuO,EAAW7H,EAAMW,KAAKxE,KAE1B,GAAwB,UAApB6D,EAAMW,KAAKC,KAAkB,CAE/B,QADMP,EAAiB,IAAIhJ,MAAMiC,GAE3BkK,EAAgB,EACpBA,EAAgBlK,EAChBkK,IAGAnD,EAAemD,GAAiBoE,EAC9BC,EACAqB,EAAiBlJ,IAEnB6H,EAAW7D,EAAAA,UAAU6D,EAAU,CAAExG,KAAM,IAGzC,OAAOnK,OAAO0I,OAAO,GAAII,EAAO,CAAEK,eAAcA,IAGlD,GAAwB,SAApBL,EAAMW,KAAKC,KAAiB,KACxBkB,EAAqB,IAAIzK,MAAMiC,GACrC,IACMkK,EAAgB,EACpBA,EAAgBlK,EAChBkK,IAGA1B,EAAmB0B,GAAiB6E,EAClCR,EACAqB,EAAiBlJ,IAEnB6H,EAAW7D,EAAAA,UAAU6D,EAAU,CAAExG,KAAM,KAGzC,OAAOnK,OAAO0I,OAAO,GAAII,EAAO,CAAE8B,mBAAkBA,IAGtD,OAAO9B,EAtPIuJ,CAAcvJ,GAGvB,KAAKtE,EAAoBO,KACvB,OAqPN,SAAqB+D,EACA8I,OACbxP,EAAgB0P,EAAkBhJ,EAAMW,KAAKxE,KAAM6D,EAAM3C,QAAS2C,EAAMzC,SAAW,EAAIyC,EAAM1G,cACnG,GAAwB,QAApB0G,EAAMW,KAAKC,KAAgB,KACvBX,EAAgBD,EAAM2B,gBAAgBd,KAAG,SAC5C2E,EAAgB8B,GACf,OAAA/B,EAAiBC,EAAgB,CAC/BvH,WAAY+B,EAAM/B,WAClBZ,QAAS2C,EAAM3C,QACfE,QAASyC,EAAMzC,QACfE,aAAcuC,EAAMvC,aACpBG,cAAeoC,EAAMpC,cACrBG,aAAciC,EAAMjC,aACpBgE,YAAa/B,EAAM+B,YACnBH,aAAc5B,EAAM4B,aACpBC,cAAe7B,EAAM6B,cACrBvI,cAAaA,EACb0I,kBAAmBhC,EAAMgC,kBACzBsF,WAAUA,OAIhB,OAAOpQ,OAAO0I,OAAO,GAAII,EAAO,CAAEC,cAAaA,IAGjD,GAAwB,UAApBD,EAAMW,KAAKC,KAAkB,KACzBN,EAAwBN,EAAMK,eAAeQ,KAAG,SACnD2E,EAAgB8B,GACf,OCvSNkC,EDuSyBhE,ECtSzB3I,EDsSyC,CACjCoB,WAAY+B,EAAM/B,WAClBZ,QAAS2C,EAAM3C,QACfE,QAASyC,EAAMzC,QACfkM,aAAczJ,EAAMyJ,aACpB7H,aAAc5B,EAAM4B,aACpBtI,cAAaA,EACbgO,WAAUA,GC3SlBkC,EAAcpJ,OAAOsF,SAAO,SACzBtF,EAAiCsJ,GAChCtJ,EAAOsF,SAAO,SAAEvE,EAA8BmG,OACtCnK,EAAY0I,EAAAA,YAAY1E,EAAMhF,KAAMU,EAAQ4M,cAC5CxL,EACJpB,EAAQoB,YACR4E,EAAgB1B,EAAMhF,KAAMU,EAAQQ,QAASR,EAAQU,SACjD0I,EAAaJ,EAAAA,YAAY1E,EAAMhF,KAAMU,EAAQ+E,cAC7C+H,EAAWzS,OAAO0I,OAAeuB,EAAO,CAC5ChE,UAASA,EACTc,WAAUA,EACVgI,WAAUA,IAGV9E,EAAMhE,YAAcwM,EAASxM,WAC7BgE,EAAMlD,aAAe0L,EAAS1L,YAC9BkD,EAAM8E,aAAe0D,EAAS1D,aAE9BuD,EAAcpJ,OAAOsJ,GAAUpC,GAAcqC,SAOrDH,EAAcnC,cACZxK,EAAQyK,WAAa,GAAKzK,EAAQyK,aAAezK,EAAQvD,cAC3DkQ,EAAcjC,eACZ1K,EAAQyK,WAAazK,EAAQvD,eAC7BuD,EAAQyK,WAAa,IAAMzK,EAAQvD,cAErCkQ,EAAchC,iBAAmBlE,EAC/BU,EAAAA,UAAUwF,EAAcpJ,OAAO,GAAG,GAAGjE,KAAM,CAAEkF,MAAO,IACpDxE,EAAQQ,QACRR,EAAQU,SAEViM,EAAc/B,kBAAoBnE,EAChCU,EAAAA,UAAUwF,EAAcpJ,OAAO,GAAG,GAAGjE,KAAM,CAAEkF,KAAM,IACnDxE,EAAQQ,QACRR,EAAQU,SAGHiM,EA9CT,IACEA,EACA3M,KDiTE,OAAO3F,OAAO0I,OAAO,GAAII,EAAO,CAAEM,sBAAqBA,IAGzD,GAAwB,SAApBN,EAAMW,KAAKC,KAAiB,KACxBJ,EAAuBR,EAAM8B,mBAAmBjB,KAAG,SACtD2E,EAAgBoE,GACf,OE5TR,SACErJ,EACA1D,GAEA0D,EAAcE,MAAMiF,SAAO,SACxBjF,EAAgCiJ,GAC/BjJ,EAAMiF,SAAO,SAAErE,EAA6BuI,OACpCzM,EAAY0M,EAAAA,WAAWxI,EAAKlF,KAAMU,EAAQiN,aAC1C7L,EACJpB,EAAQoB,YACRqF,EAAejC,EAAKlF,KAAMU,EAAQQ,QAASR,EAAQU,SAC/C0I,EAAa4D,EAAAA,WAAWxI,EAAKlF,KAAMU,EAAQ+E,cAE3C+H,EAAWzS,OAAO0I,OAAeyB,EAAM,CAAElE,UAASA,EAAEc,WAAUA,EAAEgI,WAAUA,IAE9E5E,EAAKlE,YAAcwM,EAASxM,WAC5BkE,EAAKpD,aAAe0L,EAAS1L,YAC7BoD,EAAK4E,aAAe0D,EAAS1D,aAE7B1F,EAAcE,MAAMiJ,GAAUE,GAAaD,SAOnDpJ,EAAc8G,cACZxK,EAAQ+M,UAAY,GAAK/M,EAAQ+M,YAAc/M,EAAQvD,cACzDiH,EAAcgH,eACZ1K,EAAQ+M,UAAY/M,EAAQvD,eAC5BuD,EAAQ+M,UAAY,IAAM/M,EAAQvD,cAEpCiH,EAAciH,iBAAmBlE,EAC/BU,EAAAA,UAAUzD,EAAcE,MAAM,GAAG,GAAGtE,KAAM,CAAEkF,MAAO,IACnDxE,EAAQQ,QACRR,EAAQU,aAEJpF,EAAIoI,EAAcE,MAAMnI,OAAS,EACjCyL,EAAIxD,EAAcE,MAAMtI,GAAGG,OAAS,EAO1C,OANAiI,EAAckH,kBAAoBnE,EAChCU,EAAAA,UAAUzD,EAAcE,MAAMtI,GAAG4L,GAAG5H,KAAM,CAAEkF,KAAM,IAClDxE,EAAQQ,QACRR,EAAQU,SAGHgD,EF+QDwJ,CAAkBvE,EAAgB,CAChCvH,WAAY+B,EAAM/B,WAClBZ,QAAS2C,EAAM3C,QACfE,QAASyC,EAAMzC,QACfuM,YAAa9J,EAAM8J,YACnBlI,aAAc5B,EAAM4B,aACpBtI,cAAaA,EACbsQ,UAASA,OAIf,OAAO1S,OAAO0I,OAAO,GAAII,EAAO,CAAEQ,qBAAoBA,IAGxD,OAAOR,EAhTIgK,CAAYhK,GAGrB,KAAKtE,EAAoBiB,gBACvB,OA+SN,SAA+BqD,EAA0B8I,OACjDmB,EAAW,CACftJ,KAAM,CACJC,KAAMZ,EAAMW,KAAKC,KACjBzE,KAAM+N,EAAclK,EAAO8I,KAI/B,OAAO5R,OAAO0I,OAAO,GAAII,EAAOiK,GAvTrBE,CAAsBnK,EAAO8I,GAGtC,KAAKpN,EAAoBc,gBACjBH,EAAiCyM,EAAOzM,QAExCF,EAAOiO,EAAAA,YAAYpK,EAAMW,KAAKxE,KAAME,EAAQ6E,MAC9C+I,OAAQ,EACRrJ,OAAI,EASR,OANEqJ,EAFEvC,EAAcrL,EAAQqE,SAAUV,EAAM2H,SAE7B,CAAEhH,KAAM,CAAExE,KAAIA,EAAEyE,KAD3BA,EAAOvE,EAAQqE,WAIJ,CAAEkB,aAAczF,EAAMwE,KAAM,CAAExE,KAAIA,EAAEyE,KAD/CA,EAAOZ,EAAMW,KAAKC,OAIb1J,OAAO0I,OAAO,GAAII,EAAOiK,GAGlC,KAAKvO,EAAoBa,gBACvB,IAAKmL,EAAcoB,EAAOzM,QAAS2D,EAAM2H,SACvC,OAAO3H,EAIHiK,EAAW,CAAEtJ,KAAM,CAAExE,KAFrBA,EAAO6D,EAAMW,KAAKxE,KAESyE,KAD3BA,EAAOkI,EAAOzM,UAGpB,OAAOnF,OAAO0I,OAAO,GAAII,EAAOiK,GAGlC,KAAKvO,EAAoBwB,MACvB,OAAOhG,OAAO0I,OAAO,GAAII,EAAO,CAAE+B,YAAa+G,EAAOzM,UAGxD,KAAKX,EAAoBU,OACjB6N,EAAW,CACfrI,aAAckH,EAAOzM,QACrBsE,KAAMX,EAAMW,MAGRC,EAAOZ,EAAMW,KAAKC,KAElBzE,EAAOkO,EADCvB,EAAOzM,SAAW2D,EAAMW,KAAKxE,KACX6D,EAAM3C,QAAS2C,EAAMzC,SAGrD,OAFA0M,EAAStJ,KAAO,CAAEC,KAAIA,EAAEzE,KAAIA,GAErBjF,OAAO0I,OAAO,GAAII,EAAOiK,GAGlC,KAAKvO,EAAoBoB,YAGjB8D,GAFAqJ,EAAWnB,EAAOzM,SAEFsL,QAAUsC,EAAStC,QAAU3H,EAAMW,KAAKC,KAIxDzE,EAAOkO,EAHKC,EAAAA,YAAYL,EAAS1R,QAAU0R,EAAS1R,OACrD8N,EAAAA,QAAQ4D,EAAS1R,QAAU+R,EAAAA,YAAYL,EAAS1R,MAAM,KAAO0R,EAAS1R,MAAM,IAC5EyH,EAAMW,KAAKxE,KACoB8N,EAAS5M,QAAS4M,EAAS1M,SAkB/D,OAjBA0M,EAAStJ,KAAO,CAAEC,KAAIA,EAAEzE,KAAIA,GAExB8N,EAAS1R,QAEP8N,EAAAA,QAAQ4D,EAAS1R,SACnB0R,EAASpI,cAAgBoI,EAAS1R,OAIhC0R,EAAS1R,iBAAiBiK,OAC5ByH,EAASrI,aAAeqI,EAAS1R,QAO9BrB,OAAO0I,OAAO,GAAII,EAAOiK,GAIlC,KAAKvO,EAAoBsB,aACjBiN,EAAW,CACfpI,cAAeiH,EAAOzM,QACtBsE,KAAMX,EAAMW,MAGRC,EAAOZ,EAAMW,KAAKC,KAElBzE,EAAOkO,EADCvB,EAAOzM,SAAWyM,EAAOzM,QAAQ,IAAM2D,EAAMW,KAAKxE,KAChC6D,EAAM3C,QAAS2C,EAAMzC,SAGrD,OAFA0M,EAAStJ,KAAO,CAAEC,KAAIA,EAAEzE,KAAIA,GAErBjF,OAAO0I,OAAO,GAAII,EAAOiK,GAGlC,KAAKvO,EAAoB4B,aACvB,OAAOpG,OAAO0I,OAAO,GAAII,EAAO,CAC9B3C,QAASyL,EAAOzM,UAGpB,KAAKX,EAAoB8B,aACvB,OAAOtG,OAAO0I,OAAO,GAAII,EAAO,CAC9BzC,QAASuL,EAAOzM,UAGpB,KAAKX,EAAoBwC,gBACvB,OAAOhH,OAAO0I,OAAO,GAAII,EAAO,CAC9B/B,WAAY6K,EAAOzM,UAGvB,KAAKX,EAAoByC,wBACvB,OAAOjH,OAAO0I,OAAO,GAAII,EAAO,CAC9BgC,kBAAmB8G,EAAOzM,UAI9B,QACE,OAAO2D,GAwMb,SAASkK,EAAclK,EAA0B8I,GAC/C,GAAwB,SAApB9I,EAAMW,KAAKC,MAAqC,SAAlBZ,EAAM2H,QAAoB,KACpD9D,EAAcN,EAA4BvD,EAAO,GACjDuK,EAAavG,EAAAA,UAAUH,EAAa,CAAExC,MAAO4G,IAEnD,OAAOjE,EAAAA,UAAUuG,EAAYzB,EAAOzM,SAGtC,OAAO2H,EAAAA,UAAUX,EAAAA,QAAQrD,EAAMW,KAAKxE,KAAM,SAAU2M,EAAOzM,SAG7D,SAAS6M,EAAiBlJ,GACxB,MAAO,CACL3B,OAAQ2B,EAAM3B,OAEd1E,WAAYqG,EAAMrG,WAClBC,UAAWoG,EAAMpG,UAEjBC,SAAUmG,EAAMnG,SAChBC,WAAYkG,EAAMlG,WAClBC,UAAWiG,EAAMjG,UAEjBC,YAAagG,EAAMhG,aAUvB,SAASqQ,EAAYxC,EAAyBxK,EAAeE,OACrDiN,EAAQnT,MAAMgP,QAAQwB,GAAYA,EAAS,GAAKA,EAEtD,OAAIxK,GAAW+F,EAAAA,QAAQ/F,EAASmN,EAAO,OAC9BnN,EAGLE,GAAW0F,EAAAA,SAAS1F,EAASiN,EAAO,OAC/BjN,EAGFiN,EAGT,SAASxB,EAAkBnB,EAAgBxK,EAAeE,GACxD,SAAIA,IAAWiJ,EAAAA,OAAOjJ,EAASsK,EAAU,YAIrCxK,IAAWE,GAAYF,EAAQ+D,aAAe7D,EAAQ6D,8BGjZ1D,SAAAqJ,IAAA,IACQC,EAAc,IAAIhM,EAAAA,gBAAwB,CAC9C9C,KAAM,iCAEFoE,EAAQ,IAAI2K,EAAAA,UAChBlI,EACAiI,EACA7B,UAEF+B,EAAAxS,KAAAV,KAAMgT,EAAa7B,EAAqB7I,IAAMtI,KAElD,OAZuCmT,EAAAA,EAAAA,uBADtC5Q,EAAAA,mDAaDwQ,GAZuCK,EAAAA,WCI1BC,EACXC,EAAAA,QAAQ,sBAAuB,CAC7BhL,EAAAA,MAAM,gBAAiBiL,EAAAA,MAAM,CAAErI,OAAQ,IAAKsI,SAAU,YACtDC,EAAAA,WAAW,qBAAsB,CAC/BF,EAAAA,MAAM,CAAErI,OAAQ,EAAGsI,SAAU,WAC7BE,EAAAA,QAPqC,sCASvCpL,EAAAA,MAAM,cAAeiL,EAAAA,MAAM,CAAErI,OAAQ,IAAKsI,SAAU,YACpDC,EAAAA,WAAW,mBAAoB,CAC7BF,EAAAA,MAAM,CAAErI,OAAQ,IAAKsI,SAAU,WAC/BE,EAAAA,QAZqC,sCAcvCD,EAAAA,WAAW,kBAAmBC,EAAAA,QAAQ,uBCcxC,SAAAC,EACEC,EACQ5L,EACAJ,EACAiM,EACAtM,EACR5E,EACQmR,GAPV,IAAAzK,EASE6J,EAAAxS,KAAAV,OAAOA,YAPCqJ,EAAArB,QAAAA,EACAqB,EAAAzB,OAAAA,EACAyB,EAAAwK,SAAAA,EACAxK,EAAA9B,SAAAA,EAEA8B,EAAAyK,iBAAAA,EAXVzK,EAAA0K,YAAkC,IAAIC,EAAAA,aACtC3K,EAAA4K,eAAiB,OAEjB5K,EAAA5B,MAAwB,GAWtB4B,EAAK1G,SAAWA,EAEhBiR,EAAUM,SAASL,EAASM,cAAe,UAAW,SACtDP,EAAUM,SAASL,EAASM,cAAe,WAAY,cA4E3D,OApGoDhB,EAAAA,EAAAA,GAGlD3T,OAAAkD,eAAIiR,EAAAzT,UAAA,QAAK,KAAT,SAAUW,GACRb,KAAK2C,SAASkF,SAAShH,oCAuBzB8S,EAAAzT,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACEA,KAAK8T,iBAAiB5O,WAAW,CAC/BmP,UAAW,CAAEC,KAAM,CAAEC,QAASvU,KAAKgI,QAAQzG,mBAC3CiT,iBAAkB,CAAC,MAAO,YAG5BxU,KAAK8T,iBAAiBW,OACnBjM,KACCkM,EAAAA,KAAK,IAEN5K,WAAS,WACRT,EAAKyK,iBAAiBa,UAElBtL,EAAKrB,QAAQvG,WACf4H,EAAK4K,eAAiB5K,EAAKuL,cAAgB,cAAgB,gBAK7DvL,EAAK4K,eAAiB,gBAG1BjU,KAAK6U,oBAAsB7U,KAAKgI,QAAQ8M,qBACxC9U,KAAK2B,eAAiB3B,KAAKgI,QAAQrG,eACnC3B,KAAK2C,SACF+E,KAAK1H,KAAK4H,QAEV1C,WAAWlF,KAAKgI,SAEhBG,YAAYnI,MAEZoJ,iBAAiBpJ,MACjB6J,gCAIH7J,KAAKyH,MAAMrG,KACTpB,KAAK4H,OAEFpD,QAAM,SAAE8D,GAAe,OAAAA,EAAM4B,gBAE7BJ,WAAS,SAAErF,GAAc,OAAA4E,EAAK0K,YAAYgB,KAAKtQ,QAItDjF,OAAAkD,eAAIiR,EAAAzT,UAAA,gBAAa,KAAjB,WACE,OAAOF,KAAK6T,SAASM,cAAca,UAAUC,SAAS,wCAGxDtB,EAAAzT,UAAAgV,sBAAA,WACElV,KAAK8T,iBAAiBqB,UAGxBxB,EAAAzT,UAAAwD,iBAAA,SAAiBC,GACVA,KAIc3D,KAAK6U,oBAAsBlR,EAAI4C,WAAc5C,EAAI4F,cAAgB5F,EAAI4C,aAMxFvG,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAAS/C,OAAOb,EAAIc,SAGhDkP,EAAAzT,UAAAkV,YAAA,uBACE,IAAkB,IAAA3K,EAAAC,EAAA1K,KAAKyH,OAAKkD,EAAAF,EAAA9J,QAAAgK,EAAA7J,KAAA6J,EAAAF,EAAA9J,OAAE,CAAhBgK,EAAA9J,MACR+J,gHAEN5K,KAAK2C,SAAS6H,+BA9GjB6K,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,0BACVC,UAAW,CAACzC,EAAmBzL,GAC/BmO,SAAA,ooFACAC,KAAM,CACJC,MAAO,SACPC,UAAW,2BACXC,KAAM,SACNC,aAAc,YAEhBC,WAAY,CAAC1C,gDAxBkD2C,EAAAA,iBAGxD1U,SAIAyR,SAPWkD,EAAAA,kBAKXjS,SACAsD,SAEA4O,EAAAA,sBAsHTvC,GApGoDnR,oBCiGlD,SAAA2T,EAAmBnO,EACEoO,EACAxC,EACTyC,EACAC,GAJOtW,KAAAgI,QAAAA,EACEhI,KAAAoW,YAAAA,EACApW,KAAA4T,UAAAA,EA1GZ5T,KAAAuW,UAAiD,SAKjDvW,KAAAwW,SAAW,QAIXxW,KAAAyW,cAAe,EAIfzW,KAAAoI,UAAY,OAEZpI,KAAA0W,YAAa,EAkFZ1W,KAAA2W,cAAoC,IAAI3C,EAAAA,aAExChU,KAAAyH,MAAwB,GAWhCjI,OAAO0I,OAAOlI,KAAMA,KAAKgI,SACzBhI,KAAK4W,YAAcN,EAAIO,aACrBT,EACAC,EACAzC,GAEF5T,KAAK8W,QAAU9W,KAAK4W,YAAYE,QAChC9W,KAAK+W,SAAW/W,KAAK4W,YAAYG,SACjC/W,KAAKgX,QAAU,IAAIhQ,EAAAA,gBAAgBhH,KAAKiX,QAgJ5C,OAlPEzX,OAAAkD,eACIyT,EAAAjW,UAAA,SAAM,KADV,WAEE,OAAOF,KAAK4W,YAAYM,aAG1B,SAAWrW,GACTb,KAAKgX,QAAQrW,KAAKE,oCAoBpBrB,OAAAkD,eACIyT,EAAAjW,UAAA,UAAO,KADX,SACYW,GACNb,KAAKmX,UAAYtW,GAASb,KAAKmX,SAASC,YAAcvW,EAAMuW,YAGhEpX,KAAKmX,SAAWtW,EAChBb,KAAK2W,cAAc5B,KAAKlU,qCAqE1BsV,EAAAjW,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACEA,KAAKqX,WAAa,IAAIC,EAAAA,QACtBtX,KAAK4W,YAAYW,OAAO,CACtBd,aAAczW,KAAKyW,aACnBC,WAAY1W,KAAK0W,WACjBF,SAAUxW,KAAKwW,SACfgB,KAAI,WAAQ,OAAAnO,EAAKmO,UAEnBxX,KAAKyX,aAGPtB,EAAAjW,UAAAwX,YAAA,SAAYC,GACL3X,KAAK4X,gBAAmB5X,KAAK4X,eAAeC,WAI7CF,EAAQhS,UACV3F,KAAK4X,eAAeC,SAASlS,QAAU3F,KAAK2F,SAG1CgS,EAAQ9R,UACV7F,KAAK4X,eAAeC,SAAShS,QAAU7F,KAAK6F,SAG1C8R,EAAQ5R,eACV/F,KAAK4X,eAAeC,SAAS9R,aAAe/F,KAAK+F,cAG/C4R,EAAQzR,gBACVlG,KAAK4X,eAAeC,SAAS3R,cAAgBlG,KAAKkG,eAGhDyR,EAAQtR,eACVrG,KAAK4X,eAAeC,SAASxR,aAAerG,KAAKqG,cAG/CsR,EAAQpR,aACVvG,KAAK4X,eAAeC,SAAStR,WAAavG,KAAKuG,YAG7CoR,EAAQrN,oBACVtK,KAAK4X,eAAeC,SAASvN,kBAAoBtK,KAAKsK,qBAI1D6L,EAAAjW,UAAA4X,gBAAA,WAAA,IAAAzO,EAAArJ,KACEA,KAAKgX,QAAQxO,KACXC,EAAAA,QAAM,SAACwO,GAAU,OAAAA,IAAW5N,EAAK4N,UACjCc,EAAAA,UAAU/X,KAAKqX,aAEhBvN,WAAS,WAAO,OAAAT,EAAK2O,aAOxB7B,EAAAjW,UAAAsX,KAAA,WAAA,IAAAnO,EAAArJ,KACMA,KAAK4W,YAAYM,UAIrBlX,KAAKyX,YAELzX,KAAK4X,eAAiB5X,KAAK4W,YACxBqB,QAAQ,CAACA,QAAS3W,EAAoB4W,SAAUlY,KAAKgI,UACrDmQ,OAAOxE,GACP1C,GAAGjR,KAAKoI,WACRgQ,SAAS,CAACC,WAAYrY,KAAKuW,YAC3BiB,KAAK,CAACjB,UAAWvW,KAAKuW,YAGzBvW,KAAKyH,MAAMrG,KACTpB,KAAK2W,cAAc7M,WAAS,SAAEjJ,GAC5BwI,EAAKuO,eAAeC,SAAShX,MAAQA,MAKzCb,KAAKyH,MAAMrG,KACTpB,KAAK4X,eAAeC,SAAS9D,YAAYjK,WAAS,SAAEjJ,GAClDwI,EAAKiP,QAAUzX,EACfwI,EAAKkP,aASXpC,EAAAjW,UAAAqY,KAAA,mBACMvY,KAAKiX,QACPjX,KAAK4W,YAAY2B,WAEnB,IAAkB,IAAA9N,EAAAC,EAAA1K,KAAKyH,OAAKkD,EAAAF,EAAA9J,QAAAgK,EAAA7J,KAAA6J,EAAAF,EAAA9J,OAAE,CAAhBgK,EAAA9J,MACR+J,gHAGF5K,KAAKgI,QAAQtG,oBACf1B,KAAK4T,UAAU4E,kBAAkBxY,KAAKoW,YAAYjC,eAAesE,SAQrEtC,EAAAjW,UAAA8X,OAAA,WACE,GAAIhY,KAAKiX,OACP,OAAOjX,KAAKuY,OAGdvY,KAAKwX,QAMPrB,EAAAjW,UAAAuX,UAAA,WACEzX,KAAKgI,QAAUxI,OAAO0I,OAAO,GAAIlI,KAAKgI,QAAShI,KAAK0Y,SAAU,CAC5D7X,MAAOb,KAAKmX,SACZ5Q,WAAYvG,KAAKuG,WACjBZ,QAAS3F,KAAK2F,SAAW3F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS/S,QACxDE,QAAS7F,KAAK6F,SAAW7F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS7S,QACxDE,aAAc/F,KAAK+F,cAAgB/F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS3S,aAClEuE,kBAAmBtK,KAAKsK,mBAAqBtK,KAAK0Y,UAAY1Y,KAAK0Y,SAASpO,kBAC5EpE,cAAelG,KAAKkG,eAAiBlG,KAAK0Y,UAAY1Y,KAAK0Y,SAASxS,cACpEG,aAAcrG,KAAKqG,cAAgBrG,KAAK0Y,UAAY1Y,KAAK0Y,SAASrS,aAClE4J,QAASjQ,KAAKiQ,SAAWjQ,KAAK0Y,UAAY1Y,KAAK0Y,SAASzI,WAI5DkG,EAAAjW,UAAAkV,YAAA,WACEpV,KAAK4W,YAAY+B,UACjB3Y,KAAKgX,QAAQrW,MAAK,GACdX,KAAKqX,aACPrX,KAAKqX,WAAW1W,OAChBX,KAAKqX,WAAWuB,iCA3QrBC,EAAAA,UAASvD,KAAA,CAAC,CACTC,SAAU,iBACVuD,SAAU,4DALHxX,SAPkB2U,EAAAA,kBACED,EAAAA,iBAA0B+C,EAAAA,wBAE7BC,EAAAA,6DAevBC,EAAAA,wBAKAA,EAAAA,4BAIAA,EAAAA,yBAIAA,EAAAA,0BAEAA,EAAAA,sBAKAA,EAAAA,uBAaAC,EAAAA,yBAKAA,EAAAA,wBAQAD,EAAAA,wBAYAA,EAAAA,0BAIAA,EAAAA,uBAIAA,EAAAA,uBAIAA,EAAAA,uBAKAA,EAAAA,4BAKAA,EAAAA,6BAKAA,EAAAA,4BAIAA,EAAAA,iCAIAA,EAAAA,6BAIAC,EAAAA,UAqKH/C,uBCtRA,SAAAgD,mDACmE,OAArBhG,EAAAA,EAAAA,uBAD7C5Q,EAAAA,aACkE4W,GAArB7X,iBCmB5C,SAAA8X,EACExF,EACA5L,EACAJ,EACAiM,EACAtM,EACA5E,EACA0W,GAPF,IAAAhQ,EASE6J,EAAAxS,KAAAV,KAAM4T,EAAW5L,EAASJ,EAAQiM,EAAUtM,EAAU5E,EAAU0W,IAAoBrZ,YAEpF4T,EAAUM,SAASL,EAASM,cAAe,UAAW,gBACtDP,EAAUM,SAASL,EAASM,cAAe,WAAY,YAE3D,OAjB0DhB,EAAAA,EAAAA,uBATzDkC,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,iCACVC,UAAW,CAACzC,EAAmBzL,GAC/BmO,SAAA,ooFACAC,KAAM,CACJE,UAAW,4BAEbG,WAAY,CAAC1C,gDAlBoC2C,EAAAA,iBAI1C1U,SAEAyR,SANWkD,EAAAA,kBAGXjS,SAEAsD,SAGA4O,EAAAA,sBA6BTkD,GAjB0DzF,GCpB1D2F,EAAA,WAsEE,SAAAA,EACStR,EACCoO,EACRxC,EACAyC,EACAC,GAJOtW,KAAAgI,QAAAA,EACChI,KAAAoW,YAAAA,EATApW,KAAA2W,cAAoC,IAAI3C,EAAAA,aAExChU,KAAAyH,MAAwB,GAahCjI,OAAO0I,OAAOlI,KAAMA,KAAKgI,SACzBhI,KAAK4W,YAAcN,EAAIO,aACrBT,EACAC,EACAzC,GAuFN,OAlJEpU,OAAAkD,eACI4W,EAAApZ,UAAA,UAAO,KADX,SACYW,GACNb,KAAKmX,WAAatW,IAGtBb,KAAKmX,SAAWtW,EAChBb,KAAK2W,cAAc5B,KAAKlU,qCAyD1ByY,EAAApZ,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACEA,KAAKyX,YAGLzX,KAAKyH,MAAMrG,KACTpB,KAAK2W,cAAc7M,WAAS,SAAEjJ,GAC5BwI,EAAKuO,eAAeC,SAAShX,MAAQA,MAKzCb,KAAKyH,MAAMrG,KACTpB,KAAK4X,eAAeC,SAAS9D,YAAYjK,WAAS,SAAEjJ,GAClDwI,EAAKiP,QAAUzX,OAKrByY,EAAApZ,UAAAwX,YAAA,SAAYC,GACL3X,KAAK4X,gBAAmB5X,KAAK4X,eAAeC,WAI7CF,EAAQhS,UACV3F,KAAK4X,eAAeC,SAASlS,QAAU3F,KAAK2F,QAC5C3F,KAAKyX,aAGHE,EAAQ9R,UACV7F,KAAK4X,eAAeC,SAAShS,QAAU7F,KAAK6F,QAC5C7F,KAAKyX,aAGHE,EAAQzR,gBACVlG,KAAK4X,eAAeC,SAAS3R,cAAgBlG,KAAKkG,cAClDlG,KAAKyX,aAGHE,EAAQtR,eACVrG,KAAK4X,eAAeC,SAASxR,aAAerG,KAAKqG,aACjDrG,KAAK4X,eAAeC,SAAShX,MAAQb,KAAKmX,UAGxCQ,EAAQpR,aACVvG,KAAK4X,eAAeC,SAAStR,WAAavG,KAAKuG,WAC/CvG,KAAKyX,aAGHE,EAAQrN,oBACVtK,KAAK4X,eAAeC,SAASvN,kBAAoBtK,KAAKsK,kBACtDtK,KAAKyX,eAOT6B,EAAApZ,UAAAuX,UAAA,WACMzX,KAAK4W,aACP5W,KAAK4W,YAAY2B,OAGnBvY,KAAKgI,QAAUxI,OAAO0I,OAAO,GAAIlI,KAAKgI,QAAShI,KAAK0Y,SAAU,CAC5D7X,MAAOb,KAAKmX,SACZ5Q,WAAYvG,KAAKuG,WACjBZ,QAAS3F,KAAK2F,SAAW3F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS/S,QACxDE,QAAS7F,KAAK6F,SAAW7F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS7S,QACxDyE,kBAAmBtK,KAAKsK,mBAAqBtK,KAAK0Y,UAAY1Y,KAAK0Y,SAASpO,kBAC5EpE,cAAelG,KAAKkG,eAAiBlG,KAAK0Y,UAAY1Y,KAAK0Y,SAASxS,cACpEG,aAAcrG,KAAKqG,cAAgBrG,KAAK0Y,UAAY1Y,KAAK0Y,SAASrS,eAIpErG,KAAK4X,eAAiB5X,KAAK4W,YACxBqB,QAAQ,CAACA,QAAS3W,EAAoB4W,SAAUlY,KAAKgI,UACrDmQ,OAAOiB,GACPnI,GAAGjR,KAAKoW,aACRoB,QAGL8B,EAAApZ,UAAAkV,YAAA,WACEpV,KAAK4W,YAAY+B,+BAzJpBE,EAAAA,UAASvD,KAAA,CAAC,CACTC,SAAU,uBACVuD,SAAU,kEANHK,SATkBlD,EAAAA,kBACED,EAAAA,iBAA0B+C,EAAAA,wBAG7BC,EAAAA,2DAkBvBC,EAAAA,wBAYAA,EAAAA,0BAIAA,EAAAA,uBAIAA,EAAAA,uBAIAA,EAAAA,iCAIAA,EAAAA,4BAIAA,EAAAA,6BAIAA,EAAAA,6BAIAC,EAAAA,UA0GHI,EAzKA,qBCGA,SAAAC,IAAA,IAAAlQ,EAAA,OAAA6J,GAAAA,EAAAsG,MAAAxZ,KAAAyN,YAAAzN,YAGIqJ,EAAAzH,cAAgB,EAEhByH,EAAA5H,YAAa,IACjB,OALmD0R,EAAAA,EAAAA,uBADlD5Q,EAAAA,aAMDgX,GALmDjY,qBCoCjD,SAAAmY,EACE7F,EACQ5L,EACAJ,EACAiM,EACAtM,EACR5E,EACQmR,GAPV,IAAAzK,EASE6J,EAAAxS,KAAAV,OAAOA,YAPCqJ,EAAArB,QAAAA,EACAqB,EAAAzB,OAAAA,EACAyB,EAAAwK,SAAAA,EACAxK,EAAA9B,SAAAA,EAEA8B,EAAAyK,iBAAAA,EAdVzK,EAAA0K,YAAc,IAAIC,EAAAA,aAClB3K,EAAA4K,eAAiB,OAEjB5K,EAAAqQ,YAAsB,GACtBrQ,EAAAsQ,YAAsB,GACtBtQ,EAAA5B,MAAwB,GAYtB4B,EAAK1G,SAAWA,EAEhB0G,EAAK5G,aAAe4G,EAAKrB,QAAQ4R,OAEjChG,EAAUM,SAASL,EAASM,cAAe,UAAW,SACtDP,EAAUM,SAASL,EAASM,cAAe,WAAY,cAsG3D,OAlIyDhB,EAAAA,EAAAA,GAEvD3T,OAAAkD,eAAI+W,EAAAvZ,UAAA,QAAK,KAAT,SAAUW,GACRb,KAAK2C,SAASoF,cAAclH,oCA4B9B4Y,EAAAvZ,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACEA,KAAK8T,iBAAiB5O,WAAW,CAC/BmP,UAAW,CAAEC,KAAM,CAAEC,QAASvU,KAAKgI,QAAQzG,mBAC3CiT,iBAAkB,CAAC,MAAO,YAG5BxU,KAAK8T,iBAAiBW,OACnBjM,KACCkM,EAAAA,KAAK,IAEN5K,WAAS,WACRT,EAAKyK,iBAAiBa,UAElBtL,EAAKrB,QAAQvG,WACf4H,EAAK4K,eAAiB5K,EAAKuL,cAAgB,cAAgB,gBAK7DvL,EAAK4K,eAAiB,gBAE1BjU,KAAK2B,eAAiB3B,KAAKgI,QAAQrG,eACnC3B,KAAK6U,oBAAsB7U,KAAKgI,QAAQ8M,qBACxC9U,KAAK2C,SACF+E,KAAK1H,KAAK4H,QAGV1C,WAAWlF,KAAKgI,SAEhBG,YAAYnI,MAEZoJ,iBAAiBpJ,MACjB6J,gCAIH7J,KAAKyH,MAAMrG,KACTpB,KAAK4H,OACFpD,QAAM,SAAC8D,GAAS,OAAAA,EAAM6B,iBACtBL,WAAS,SAACrF,GACT4E,EAAK0K,YAAYgB,KAAKtQ,GACtB4E,EAAKsQ,YAAclV,OAK3BjF,OAAAkD,eAAI+W,EAAAvZ,UAAA,gBAAa,KAAjB,WACE,OAAOF,KAAK6T,SAASM,cAAca,UAAUC,SAAS,wCAGxDwE,EAAAvZ,UAAAgV,sBAAA,WACElV,KAAK8T,iBAAiBqB,UAGxBsE,EAAAvZ,UAAAwD,iBAAA,SAAiBC,GACVA,KAGc3D,KAAK6U,oBAAsBlR,EAAI4C,WAAc5C,EAAI4F,cAAgB5F,EAAI4C,cAWxD,IAA5BvG,KAAK0Z,YAAY9Y,SACnBZ,KAAK0Z,YACH/V,EAAIc,MAAQzE,KAAK0Z,YAAY,GACzB,CAAC1Z,KAAK0Z,YAAY,GAAI/V,EAAIc,MAC1B,CAACd,EAAIc,OAGmB,IAA5BzE,KAAK0Z,YAAY9Y,SACnBZ,KAAK0Z,YAAc,CAAC/V,EAAIc,OAG1BzE,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASlC,YAAYrF,KAAK0Z,cAEpB,IAA5B1Z,KAAK0Z,YAAY9Y,SACnBZ,KAAK0Z,YAAc,OAIvBD,EAAAvZ,UAAAkV,YAAA,uBACE,IAAkB,IAAA3K,EAAAC,EAAA1K,KAAKyH,OAAKkD,EAAAF,EAAA9J,QAAAgK,EAAA7J,KAAA6J,EAAAF,EAAA9J,OAAE,CAAhBgK,EAAA9J,MACR+J,gHAEN5K,KAAK2C,SAAS6H,WAGhBiP,EAAAvZ,UAAA2Z,mBAAA,SAAmB1T,GACjBnG,KAAK0Z,YAAyB,OAAVvT,EAAkB,GAAMA,EAAMtF,iBAAiBiK,KAAO,CAAC3E,EAAMtF,OAASsF,EAAMtF,MAChGb,KAAK4H,OAAOE,SAAS9H,KAAKuH,SAASlC,YAAYrF,KAAK0Z,mCA3IvDrE,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,+BACVC,UAAW,CAACzC,EAAmBzL,GAC/BmO,SAAA,ooFACAC,KAAM,CACJC,MAAO,SACPC,UAAW,2BACXC,KAAM,SACNC,aAAc,YAEhBC,WAAY,CAAC1C,gDAzBkD2C,EAAAA,iBAGxD1U,SAIAyR,SAPWkD,EAAAA,kBAKXjS,SACAsD,SAEA4O,EAAAA,sBAqJTuD,GAlIyDjX,qBCJvD,SAAAsX,EACElG,EACA5L,EACAJ,EACAiM,EACAtM,EACA5E,EACA0W,GAPF,IAAAhQ,EASE6J,EAAAxS,KAAAV,KAAM4T,EAAW5L,EAASJ,EAAQiM,EAAUtM,EAAU5E,EAAU0W,IAAoBrZ,YAEpF4T,EAAUM,SAASL,EAASM,cAAe,UAAW,gBACtDP,EAAUM,SAASL,EAASM,cAAe,WAAY,YAE3D,OAjB+DhB,EAAAA,EAAAA,uBAT9DkC,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,sCACVC,UAAW,CAACzC,EAAmBzL,GAC/BmO,SAAA,ooFACAC,KAAM,CACJE,UAAW,4BAEbG,WAAY,CAAC1C,gDAlBoC2C,EAAAA,iBAI1C1U,SAEAyR,SANmBkD,EAAAA,kBAGnBjS,SAEAsD,SAGA4O,EAAAA,sBA6BT4D,GAjB+DL,GCpB/DM,EAAA,WA2EI,SAAAA,EACS/R,EACCoO,EACRxC,EACAyC,EACAC,GAJOtW,KAAAgI,QAAAA,EACChI,KAAAoW,YAAAA,EATApW,KAAA2W,cAAsC,IAAI3C,EAAAA,aAE1ChU,KAAAyH,MAAwB,GAahCjI,OAAO0I,OAAOlI,KAAMA,KAAKgI,SACzBhI,KAAK4W,YAAcN,EAAIO,aACrBT,EACAC,EACAzC,GAiGR,OAhKIpU,OAAAkD,eACIqX,EAAA7Z,UAAA,UAAO,KADX,SACYW,GACNb,KAAKmX,WAAatW,IAGtBb,KAAKmX,SAAWtW,EAChBb,KAAK2W,cAAc5B,KAAKlU,qCA6D1BkZ,EAAA7Z,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACIA,KAAKyX,YAGLzX,KAAKyH,MAAMrG,KACTpB,KAAK2W,cAAc7M,WAAS,SAAEjJ,GAC5BwI,EAAKuO,eAAeC,SAAShX,MAAQA,MAKzCb,KAAKyH,MAAMrG,KACTpB,KAAK4X,eAAeC,SAAS9D,YAC1BvL,KACGC,EAAAA,QAAM,SAAEuR,GAAkB,OAAAA,GAASA,EAAM,MAAQA,EAAM,OAE1DlQ,WAAS,SAAEjJ,GACVwI,EAAKiP,QAAUzX,OAKzBkZ,EAAA7Z,UAAAwX,YAAA,SAAYC,GACH3X,KAAK4X,gBAAmB5X,KAAK4X,eAAeC,WAI7CF,EAAQhS,UACV3F,KAAK4X,eAAeC,SAASlS,QAAU3F,KAAK2F,QAC5C3F,KAAKyX,aAGHE,EAAQ9R,UACV7F,KAAK4X,eAAeC,SAAShS,QAAU7F,KAAK6F,QAC5C7F,KAAKyX,aAGHE,EAAQtR,eACVrG,KAAK4X,eAAeC,SAASxR,aAAerG,KAAKqG,cAG/CsR,EAAQzR,gBACVlG,KAAK4X,eAAeC,SAAS3R,cAAgBlG,KAAKkG,cAClDlG,KAAKyX,aAGHE,EAAQ5R,eACV/F,KAAK4X,eAAeC,SAAS9R,aAAe/F,KAAK+F,aACjD/F,KAAKyX,aAGHE,EAAQpR,aACVvG,KAAK4X,eAAeC,SAAStR,WAAavG,KAAKuG,WAC/CvG,KAAKyX,aAGHE,EAAQrN,oBACVtK,KAAK4X,eAAeC,SAASvN,kBAAoBtK,KAAKsK,kBACtDtK,KAAKyX,eAOXsC,EAAA7Z,UAAAuX,UAAA,WACMzX,KAAK4W,aACP5W,KAAK4W,YAAY2B,OAGnBvY,KAAKgI,QAAUxI,OAAO0I,OAAO,GAAIlI,KAAKgI,QAAShI,KAAK0Y,SAAU,CAC5D7X,MAAOb,KAAKmX,SACZ5Q,WAAYvG,KAAKuG,WACjBZ,QAAS3F,KAAK2F,SAAW3F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS/S,QACxDE,QAAS7F,KAAK6F,SAAW7F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS7S,QACxDE,aAAc/F,KAAK+F,cAAgB/F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS3S,aAClEuE,kBAAmBtK,KAAKsK,mBAAqBtK,KAAK0Y,UAAY1Y,KAAK0Y,SAASpO,kBAC5EpE,cAAelG,KAAKkG,eAAiBlG,KAAK0Y,UAAY1Y,KAAK0Y,SAASxS,cACpEG,aAAcrG,KAAKqG,cAAgBrG,KAAK0Y,UAAY1Y,KAAK0Y,SAASrS,aAClEuT,OAAQ5Z,KAAK0Y,UAAY1Y,KAAK0Y,SAASkB,SAIzC5Z,KAAK4X,eAAiB5X,KAAK4W,YACxBqB,QAAQ,CAACA,QAAS3W,EAAoB4W,SAAUlY,KAAKgI,UACrDmQ,OAAO2B,GACP7I,GAAGjR,KAAKoW,aACRoB,QAGLuC,EAAA7Z,UAAAkV,YAAA,WACEpV,KAAK4W,YAAY+B,+BAvKtBE,EAAAA,UAASvD,KAAA,CAAC,CACPC,SAAU,4BACVuD,SAAU,uEANLS,SAVkBtD,EAAAA,kBACED,EAAAA,iBAA0B+C,EAAAA,wBAG7BC,EAAAA,2DAmBrBC,EAAAA,wBAYAA,EAAAA,0BAIAA,EAAAA,uBAIAA,EAAAA,uBAIAA,EAAAA,iCAIAA,EAAAA,4BAIAA,EAAAA,6BAIAA,EAAAA,4BAIAA,EAAAA,6BAIAC,EAAAA,UAoHLa,EAxLA,OCiCME,EAAyC,CAC7ChC,QAASiC,EAAAA,kBAETC,YAAaC,EAAAA,YAAU,WAAO,OAAAC,MAC9BC,OAAO,GAGHC,EAAoC,CACxCtC,QAASuC,EAAAA,cAETL,YAAaC,EAAAA,YAAU,WAAO,OAAAC,MAC9BC,OAAO,GAGTD,GAAA,WAkBE,SAAAA,EAA4BI,EACRjT,EACAoM,EACA8G,EACAC,GAJpB,IAAAtR,EAAArJ,KAA4BA,KAAAya,QAAAA,EACRza,KAAAwH,eAAAA,EACAxH,KAAA4T,UAAAA,EACA5T,KAAA0a,OAAAA,EACA1a,KAAA2a,gBAAAA,EAVZ3a,KAAA4a,UAAYC,SAAS3a,UACrBF,KAAA8a,WAAaD,SAAS3a,UAEtBF,KAAA+a,iBAAmBF,SAAS3a,UASlCF,KAAKya,QAAQ9D,cAAc7M,WAAS,SAAEjJ,GACpCwI,EAAK2R,eAAena,GAChBwI,EAAK4R,SAAWpa,IAClBwI,EAAK4R,OAASpa,EACdwI,EAAKuR,UAAU/Z,GACfwI,EAAKyR,cAEPzR,EAAKsR,gBAAgBO,kBAIvBlb,KAAKwH,eAAe+C,aAAaT,WAAS,WACxCT,EAAK2R,eAAe3R,EAAK4R,WA8G/B,OA1GEZ,EAAAna,UAAAib,eAAA,SAAe/X,GACS,KAAlBA,EAAMgY,SAAiC,UAAfhY,EAAMiY,MAChCrb,KAAKuY,QAIT8B,EAAAna,UAAA8a,eAAA,SAAena,OACPsL,EAAetL,EACjByP,EAAAA,WAAWzP,EAAOb,KAAKya,QAAQzS,QAAQlG,gBAAiB9B,KAAKwH,eAAeH,eADnD,GAG7BrH,KAAK4T,UAAU0H,YAAYtb,KAAK0a,OAAOvG,cAAe,QAAShI,IAGjEkO,EAAAna,UAAAqb,SAAA,SAASnY,GAEPpD,KAAKwb,WAAYpY,EAAY,OAASvC,OACtCb,KAAK4a,UAAU5a,KAAKib,QAChBjb,KAAKya,QAAQzS,QAAQtG,oBACvB1B,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesE,QAE9DzY,KAAK8a,cAGPT,EAAAna,UAAAub,SAAA,SAASC,OACDT,EAAwBS,EAAE7a,MAGhC,GAAIoa,MAAAA,GAAsD,KAAXA,EAC7C,OAAO,KAGT,GAAIU,EAAAA,OAAOV,GAAS,CAElB,IADqBrI,EAAAA,YAAYqI,GAE/B,MAAO,CAAEW,OAAQ,CAAEC,QAASZ,IAG9B,GAAIjb,KAAKya,SAAWza,KAAKya,QAAQ9U,SAAW4F,EAAAA,SAAS0P,EAAQjb,KAAKya,QAAQ9U,QAAS,QAGjF,OAFA3F,KAAKwb,WAAWxb,KAAKya,QAAQ9U,SAEtB,CAAEiW,OAAQ,CAAEjW,QAAS3F,KAAKya,QAAQ9U,UAG3C,GAAI3F,KAAKya,SAAWza,KAAKya,QAAQ5U,SAAW6F,EAAAA,QAAQuP,EAAQjb,KAAKya,QAAQ5U,QAAS,QAGhF,OAFA7F,KAAKwb,WAAWxb,KAAKya,QAAQ5U,SAEtB,CAAE+V,OAAQ,CAAE/V,QAAS7F,KAAKya,QAAQ5U,YAK/CwU,EAAAna,UAAA4b,0BAAA,SAA0B7P,GACxBjM,KAAK+a,iBAAmB9O,GAG1BoO,EAAAna,UAAAsb,WAAA,SAAW3a,GACT,GAAKA,EAEE,KACCkb,EAAa/b,KAAKwH,eAAeH,cAEvC,IADgBiG,EAAAA,UAAUyO,GAExB,MAAM,IAAIC,MACR,WAAWD,EAAU,4DAIzB/b,KAAKib,OAASgB,EAAAA,UAAUpb,EAAOb,KAAKya,QAAQzS,QAAQlG,gBAAiB9B,KAAKwH,eAAeH,eAErFrH,KAAKya,QAAQzS,QAAQxG,SACvBxB,KAAKib,OAASiB,EAAAA,WAAWlc,KAAKib,cAbhCjb,KAAKib,OAAS,KAiBhBjb,KAAKya,QAAQnC,QAAUtY,KAAKib,QAG9BZ,EAAAna,UAAAic,iBAAA,SAAiB5V,GACfvG,KAAKya,QAAQlU,WAAaA,EACtBA,EACFvG,KAAK4T,UAAUwI,aAAapc,KAAK0a,OAAOvG,cAAe,WAAY,YAIrEnU,KAAK4T,UAAUyI,gBAAgBrc,KAAK0a,OAAOvG,cAAe,aAG5DkG,EAAAna,UAAAoc,iBAAA,SAAiBrQ,GACfjM,KAAK4a,UAAY3O,GAGnBoO,EAAAna,UAAAqc,kBAAA,SAAkBtQ,GAChBjM,KAAK8a,WAAa7O,GAGpBoO,EAAAna,UAAAsc,OAAA,WACExc,KAAK8a,cAGPT,EAAAna,UAAAqY,KAAA,WACEvY,KAAKya,QAAQlC,OACbvY,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesI,OACxDzc,KAAKya,QAAQzS,QAAQtG,oBACvB1B,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesE,6BA/IjEI,EAAAA,UAASvD,KAAA,CAAC,CACTC,SAAU,sBACVG,KAAM,CACJgH,WAAY,mBACZC,cAAe,SACfC,YAAa,yBACbC,SAAU,YAEZrH,UAAW,CAACyE,EAA8BM,gDAzBnCpE,EAAqB2G,WAAA,CAAA,CAAA5Y,KAmCf6Y,EAAAA,cAlCNlW,SAxBPmP,EAAAA,iBAJAC,EAAAA,kBAFA+G,EAAAA,qBAgMF3C,EAlJA,sBC5CA,SAAA4C,IAAA,IAAA5T,EAAA,OAAA6J,GAAAA,EAAAsG,MAAAxZ,KAAAyN,YAAAzN,YAGEqJ,EAAAzH,cAAgB,IAClB,OAH6CuR,EAAAA,EAAAA,uBAD5C5Q,EAAAA,aAID0a,GAH6C3b,qBC+H3C,SAAA4b,EAAmBlV,EACEoO,EACAxC,EACTyC,EACAC,GAJOtW,KAAAgI,QAAAA,EACEhI,KAAAoW,YAAAA,EACApW,KAAA4T,UAAAA,EArGZ5T,KAAAuW,UAAiD,SAKjDvW,KAAAwW,SAAW,QAIXxW,KAAAyW,cAAe,EAIfzW,KAAAoI,UAAY,OAEZpI,KAAA0W,YAAa,EA6EZ1W,KAAA2W,cAAsC,IAAI3C,EAAAA,aAE1ChU,KAAAyH,MAAwB,GAUhCzH,KAAK4W,YAAcN,EAAIO,aACrBT,EACAC,EACAzC,GAEFpU,OAAO0I,OAAOlI,KAAMgI,GACpBhI,KAAK8W,QAAU9W,KAAK4W,YAAYE,QAChC9W,KAAK+W,SAAW/W,KAAK4W,YAAYG,SACjC/W,KAAKgX,QAAU,IAAIhQ,EAAAA,gBAAgBhH,KAAKiX,QAyJ5C,OArPEzX,OAAAkD,eACIwa,EAAAhd,UAAA,SAAM,KADV,WAEE,OAAOF,KAAK4W,YAAYM,aAG1B,SAAWrW,GACTb,KAAKgX,QAAQrW,KAAKE,oCAqBpBrB,OAAAkD,eACIwa,EAAAhd,UAAA,UAAO,KADX,SACYW,GACNb,KAAKmX,WAAatW,IAGtBb,KAAKmX,SAAWtW,EAChBb,KAAK2W,cAAc5B,KAAKlU,qCA8D1Bqc,EAAAhd,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACEA,KAAKqX,WAAa,IAAIC,EAAAA,QACtBtX,KAAK4W,YAAYW,OAAO,CACtBd,aAAczW,KAAKyW,aACnBC,WAAY1W,KAAK0W,WACjBF,SAAUxW,KAAKwW,SACfgB,KAAI,WAAQ,OAAAnO,EAAKmO,UAEnBxX,KAAKyX,aAGPyF,EAAAhd,UAAAwX,YAAA,SAAYC,GACL3X,KAAK4X,gBAAmB5X,KAAK4X,eAAeC,WAI7CF,EAAQhS,UACV3F,KAAK4X,eAAeC,SAASlS,QAAU3F,KAAK2F,SAG1CgS,EAAQ9R,UACV7F,KAAK4X,eAAeC,SAAShS,QAAU7F,KAAK6F,SAG1C8R,EAAQzR,gBACVlG,KAAK4X,eAAeC,SAAS3R,cAAgBlG,KAAKkG,eAGhDyR,EAAQtR,eACVrG,KAAK4X,eAAeC,SAASxR,aAAerG,KAAKqG,cAG/CsR,EAAQ5R,eACV/F,KAAK4X,eAAeC,SAAS9R,aAAe/F,KAAK+F,cAG/C4R,EAAQpR,aACVvG,KAAK4X,eAAeC,SAAStR,WAAavG,KAAKuG,YAG7CoR,EAAQrN,oBACVtK,KAAK4X,eAAeC,SAASvN,kBAAoBtK,KAAKsK,qBAI1D4S,EAAAhd,UAAA4X,gBAAA,WAAA,IAAAzO,EAAArJ,KACEA,KAAKgX,QAAQxO,KACXC,EAAAA,QAAM,SAACwO,GAAU,OAAAA,IAAW5N,EAAK4N,UACjCc,EAAAA,UAAU/X,KAAKqX,aAEdvN,WAAS,WAAO,OAAAT,EAAK2O,aAO1BkF,EAAAhd,UAAAsX,KAAA,WAAA,IAAAnO,EAAArJ,KACMA,KAAK4W,YAAYM,UAIrBlX,KAAKyX,YAELzX,KAAK4X,eAAiB5X,KAAK4W,YACxBqB,QAAQ,CAAEA,QAAS3W,EAAoB4W,SAAUlY,KAAKgI,UACtDmQ,OAAOsB,GACPxI,GAAGjR,KAAKoI,WACRgQ,SAAS,CAAEC,WAAYrY,KAAKuW,YAC5BiB,KAAK,CAAEjB,UAAWvW,KAAKuW,YAG1BvW,KAAKyH,MAAMrG,KACTpB,KAAK2W,cAAc7M,WAAS,SAAEjJ,GAC5BwI,EAAKuO,eAAeC,SAAShX,MAAQA,MAKzCb,KAAKyH,MAAMrG,KACTpB,KAAK4X,eAAeC,SAAS9D,YAC1BvL,KACCC,EAAAA,QAAM,SAAEuR,GAAkB,OAAAA,GAASA,EAAM,MAAQA,EAAM,OAExDlQ,WAAS,SAAEjJ,GACVwI,EAAKiP,QAAUzX,EACfwI,EAAKkP,aAQb2E,EAAAhd,UAAAuX,UAAA,WACEzX,KAAKgI,QAAUxI,OAAO0I,OACpB,GACAlI,KAAKgI,QACLhI,KAAK0Y,SACL,CACE7X,MAAOb,KAAKmX,SACZ5Q,WAAYvG,KAAKuG,WACjBZ,QAAS3F,KAAK2F,SAAW3F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS/S,QACxDE,QAAS7F,KAAK6F,SAAW7F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS7S,QACxDE,aAAc/F,KAAK+F,cAAgB/F,KAAK0Y,UAAY1Y,KAAK0Y,SAAS3S,aAClEuE,kBAAmBtK,KAAKsK,mBAAqBtK,KAAK0Y,UAAY1Y,KAAK0Y,SAASpO,kBAC5EpE,cAAelG,KAAKkG,eAAiBlG,KAAK0Y,UAAY1Y,KAAK0Y,SAASxS,cACpEG,aAAcrG,KAAKqG,cAAgBrG,KAAK0Y,UAAY1Y,KAAK0Y,SAASrS,aAClEuT,OAAQ5Z,KAAK0Y,UAAY1Y,KAAK0Y,SAASkB,UAS7CsD,EAAAhd,UAAAqY,KAAA,mBACMvY,KAAKiX,QACPjX,KAAK4W,YAAY2B,WAEnB,IAAkB,IAAA9N,EAAAC,EAAA1K,KAAKyH,OAAKkD,EAAAF,EAAA9J,QAAAgK,EAAA7J,KAAA6J,EAAAF,EAAA9J,OAAE,CAAhBgK,EAAA9J,MACR+J,gHAGF5K,KAAKgI,QAAQtG,oBACf1B,KAAK4T,UAAU4E,kBAAkBxY,KAAKoW,YAAYjC,eAAesE,SAQrEyE,EAAAhd,UAAA8X,OAAA,WACE,GAAIhY,KAAKiX,OACP,OAAOjX,KAAKuY,OAGdvY,KAAKwX,QAGP0F,EAAAhd,UAAAkV,YAAA,WACEpV,KAAK4W,YAAY+B,UACjB3Y,KAAKgX,QAAQrW,MAAK,GACdX,KAAKqX,aACPrX,KAAKqX,WAAW1W,OAChBX,KAAKqX,WAAWuB,iCA/QrBC,EAAAA,UAASvD,KAAA,CAAC,CACTC,SAAU,sBACVuD,SAAU,iEAVHmE,UAXPhH,EAAAA,kBAOAD,EAAAA,iBAEA+C,EAAAA,wBAMOC,EAAAA,6DAaNC,EAAAA,wBAKAA,EAAAA,4BAIAA,EAAAA,yBAIAA,EAAAA,0BAEAA,EAAAA,sBAKAA,EAAAA,uBAaAC,EAAAA,yBAKAA,EAAAA,wBASAD,EAAAA,wBAYAA,EAAAA,0BAIAA,EAAAA,uBAIAA,EAAAA,uBAIAA,EAAAA,iCAIAA,EAAAA,4BAIAA,EAAAA,6BAIAA,EAAAA,4BAKAA,EAAAA,6BAIAC,EAAAA,UA6KHgE,SCxQMC,GAA8C,CAClDlF,QAASiC,EAAAA,kBAETC,YAAaC,EAAAA,YAAU,WAAO,OAAAgD,MAC9B9C,OAAO,GAGH+C,GAAyC,CAC7CpF,QAASuC,EAAAA,cAETL,YAAaC,EAAAA,YAAU,WAAO,OAAAgD,MAC9B9C,OAAO,GAIT8C,GAAA,WAkBE,SAAAA,EAA4B3C,EACRjT,EACAoM,EACA8G,EACAC,GAJpB,IAAAtR,EAAArJ,KAA4BA,KAAAya,QAAAA,EACRza,KAAAwH,eAAAA,EACAxH,KAAA4T,UAAAA,EACA5T,KAAA0a,OAAAA,EACA1a,KAAA2a,gBAAAA,EAVZ3a,KAAA4a,UAAYC,SAAS3a,UACrBF,KAAA8a,WAAaD,SAAS3a,UAEtBF,KAAA+a,iBAAmBF,SAAS3a,UASlCF,KAAKya,QAAQ9D,cAAc7M,WAAS,SAAEjJ,GACpCwI,EAAK2R,eAAena,GAChBwI,EAAK4R,SAAWpa,IAClBwI,EAAK4R,OAASpa,EACdwI,EAAKuR,UAAU/Z,GACfwI,EAAKyR,cAEPzR,EAAKsR,gBAAgBO,kBAIvBlb,KAAKwH,eAAe+C,aAAaT,WAAS,WACxCT,EAAK2R,eAAe3R,EAAK4R,WAuJ/B,OAnJEmC,EAAAld,UAAAib,eAAA,SAAe/X,GACS,KAAlBA,EAAMgY,SAAiC,UAAfhY,EAAMiY,MAChCrb,KAAKuY,QAIT6E,EAAAld,UAAA8a,eAAA,SAAevW,OACTuV,EAAQ,GACZ,GAAIvV,EAAM,KACF6Y,EAAiB7Y,EAAK,GACxB6L,EAAAA,WAAW7L,EAAK,GAChBzE,KAAKya,QAAQzS,QAAQhG,iBACrBhC,KAAKwH,eAAeH,eAHS,GAK3BkW,EAAe9Y,EAAK,GACtB6L,EAAAA,WACA7L,EAAK,GACLzE,KAAKya,QAAQzS,QAAQhG,iBACrBhC,KAAKwH,eAAeH,eAJO,GAM/B2S,EAASsD,GAASC,EAAOD,EAAQtd,KAAKya,QAAQzS,QAAQjG,eAAiBwb,EAAM,GAE/Evd,KAAK4T,UAAU0H,YAAYtb,KAAK0a,OAAOvG,cAAe,QAAS6F,IAGjEoD,EAAAld,UAAAqb,SAAA,SAASnY,GAEPpD,KAAKwb,WAAYpY,EAAY,OAASvC,OACtCb,KAAK4a,UAAU5a,KAAKib,QAChBjb,KAAKya,QAAQzS,QAAQtG,oBACvB1B,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesE,QAE9DzY,KAAK8a,cAGPsC,EAAAld,UAAAub,SAAA,SAASC,OACDT,EAAuBS,EAAE7a,MACzB2c,EAAmB,GAEzB,GAAIvC,MAAAA,IAA4CtM,EAAAA,QAAQsM,GACtD,OAAO,KAITA,EAAOwC,MAAI,SAAEC,EAAGne,GAAM,OAAAme,EAAIne,SAEpBoe,EAAoB/K,EAAAA,YAAYqI,EAAO,IACvC2C,EAAqBhL,EAAAA,YAAYqI,EAAO,IAE9C,OAAK0C,EAIAC,GAID5d,KAAKya,SAAWza,KAAKya,QAAQ9U,SAAW4F,EAAAA,SAAS0P,EAAO,GAAIjb,KAAKya,QAAQ9U,QAAS,UACpFsV,EAAO,GAAKjb,KAAKya,QAAQ9U,QACzB6X,EAAOpc,KAAK,CAAEwa,OAAQ,CAAEjW,QAAS3F,KAAKya,QAAQ9U,YAG5C3F,KAAKya,SAAWza,KAAKya,QAAQ5U,SAAW6F,EAAAA,QAAQuP,EAAO,GAAIjb,KAAKya,QAAQ5U,QAAS,UACnFoV,EAAO,GAAKjb,KAAKya,QAAQ5U,QACzB2X,EAAOpc,KAAK,CAAEwa,OAAQ,CAAE/V,QAAS7F,KAAKya,QAAQ5U,YAE5C2X,EAAO5c,OAAS,GAClBZ,KAAKwb,WAAWP,GAETuC,QAHT,GAZS,CAAE5B,OAAQ,CAAEC,QAASZ,EAAO,KAJ5B,CAAEW,OAAQ,CAAEC,QAASZ,EAAO,MAuBvCmC,EAAAld,UAAA4b,0BAAA,SAA0B7P,GACxBjM,KAAK+a,iBAAmB9O,GAG1BmR,EAAAld,UAAAsb,WAAA,SAAW3a,GAAX,IAAAwI,EAAArJ,KACE,GAAKa,EAEE,KACCkb,EAAa/b,KAAKwH,eAAeH,cAEvC,IADgBiG,EAAAA,UAAUyO,GAExB,MAAM,IAAIC,MACR,WAAWD,EAAU,gEAIrB8B,EAA8B,GACb,iBAAVhd,IACTgd,EAAShd,EAAMid,MAAM9d,KAAKya,QAAQzS,QAAQjG,iBAGxCpC,MAAMgP,QAAQ9N,KAChBgd,EAAShd,GAGXb,KAAKib,OAAS,EACX9R,KAAG,SAAE4U,GACF,OAAI1U,EAAKoR,QAAQzS,QAAQxG,OAChB0a,EAAAA,WACLD,EAAAA,UAAU8B,EAAM1U,EAAKoR,QAAQzS,QAAQlG,gBAAiBuH,EAAK7B,eAAeH,gBAIvE4U,EAAAA,UAAU8B,EAAM1U,EAAKoR,QAAQzS,QAAQlG,gBAAiBuH,EAAK7B,eAAeH,kBAGpF8B,KAAG,SAAE1E,GAAe,OAACuZ,MAAMvZ,EAAKwZ,WAAa,KAAOxZ,UA9BvDzE,KAAKib,OAAS,KAiChBjb,KAAKya,QAAQnC,QAAUtY,KAAKib,QAG9BmC,EAAAld,UAAAic,iBAAA,SAAiB5V,GACfvG,KAAKya,QAAQlU,WAAaA,EACtBA,EACFvG,KAAK4T,UAAUwI,aAAapc,KAAK0a,OAAOvG,cAAe,WAAY,YAIrEnU,KAAK4T,UAAUyI,gBAAgBrc,KAAK0a,OAAOvG,cAAe,aAI5DiJ,EAAAld,UAAAoc,iBAAA,SAAiBrQ,GACfjM,KAAK4a,UAAY3O,GAInBmR,EAAAld,UAAAqc,kBAAA,SAAkBtQ,GAChBjM,KAAK8a,WAAa7O,GAGpBmR,EAAAld,UAAAsc,OAAA,WACExc,KAAK8a,cAGPsC,EAAAld,UAAAqY,KAAA,WACEvY,KAAKya,QAAQlC,OACbvY,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesI,OAExDzc,KAAKya,QAAQzS,QAAQtG,oBACvB1B,KAAK4T,UAAU4E,kBAAkBxY,KAAK0a,OAAOvG,eAAesE,6BAxLjEI,EAAAA,UAASvD,KAAA,CAAC,CACTC,SAAU,2BACVG,KAAM,CACJgH,WAAY,mBACZC,cAAe,SACfC,YAAa,yBACbC,SAAU,YAEZrH,UAAW,CAAC2H,GAAmCE,iDA1BxCH,GAA0BJ,WAAA,CAAA,CAAA5Y,KAoCpB6Y,EAAAA,cAnCNlW,SAxBPmP,EAAAA,iBAJAC,EAAAA,kBAFA+G,EAAAA,qBA0OFI,EA3LA,GChDA,IAAAc,GAAA,WAEA,SAAAA,KAmBwC,2BAnBvC7I,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,qBACVE,SAAU,wdAiB4ByI,EArBxC,GCAAC,GAAA,WAEA,SAAAA,KAMA,2BANC9I,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,kBACVE,SAAU,kGAGTwD,EAAAA,SACHkF,EARA,GCOA,IAAAC,GAAA,WAAA,SAAAA,IAyBYpe,KAAAqe,SAAW,IAAIrK,EAAAA,aAEzBhU,KAAAse,YAAmB,KAUrB,OAREF,EAAAle,UAAAqe,iBAAA,SAAiBvE,GACfha,KAAKqe,SAAStJ,KAAKiF,IAGrBoE,EAAAle,UAAAse,WAAA,WAAA,IAAAnV,EAAArJ,KACE,QAAOA,KAAK4Z,QAAS5Z,KAAK4Z,OAAOnR,QAAM,SAACuR,GAAS,OAAAA,EAAMnZ,QAAUwI,EAAKc,iBAAevJ,OAAS,uBAlCjGyU,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,sBACVE,SAAU,4eAkBVkF,gBAAiB8D,EAAAA,wBAAwBC,2CAGxCzF,EAAAA,6BACAA,EAAAA,wBACAC,EAAAA,UAYHkF,EArCA,GCPA,IAAAO,GAAA,WA8BE,SAAAA,EACU3W,EACA0S,EACA9G,GAFA5T,KAAAgI,QAAAA,EACAhI,KAAA0a,OAAAA,EACA1a,KAAA4T,UAAAA,EAgBZ,OAbE+K,EAAAze,UAAAkU,SAAA,WAAA,IAAA/K,EAAArJ,KACMA,KAAK2D,IAAIuL,SAAWlP,KAAKgI,SAAWhI,KAAKgI,QAAQ4W,kBACnD5e,KAAK4T,UAAUiL,SAAS7e,KAAK0a,OAAOvG,cAAenU,KAAKgI,QAAQ4W,kBAG5B,iBAA3B5e,KAAK2D,IAAIwL,eAClBnP,KAAK2D,IAAIwL,cAAc2O,MAAM,KAC1BrV,QAAM,SAAEqW,GAAsB,OAAAA,KAC9B9Q,SAAO,SAAE8Q,GACRzV,EAAKuK,UAAUiL,SAASxV,EAAKqR,OAAOvG,cAAe2K,2BAjC5DzJ,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,6BACVoF,gBAAiB8D,EAAAA,wBAAwBC,OACzChJ,KAAM,CACJqJ,mBAAoB,iBACpBC,yBAA0B,gBAC1BC,yBAA0B,mBAC1BC,gCAAiC,0BACjCC,mBAAoB,gBACpBC,uBAAwB,uBACxBC,qBAAsB,qBACtBC,mBAAoB,kBAEtB7J,SAAU,+DAhBHnU,SANP2U,EAAAA,kBAGAD,EAAAA,0CAsBCiD,EAAAA,SAqBH0F,EAjDA,WCiHEY,GAAA,EACAC,KAAA,qCClHF,IAAAC,GAAA,WAaA,SAAAA,IA4CYzf,KAAA0f,WAAa,IAAI1L,EAAAA,aACjBhU,KAAA2f,WAAa,IAAI3L,EAAAA,aAW7B,OATEyL,EAAAvf,UAAA0f,MAAA,SAAMC,GACJ7f,KAAK0f,WAAW3K,KACd8K,EAAOC,GAAsBN,KAAOM,GAAsBP,KAI9DE,EAAAvf,UAAA+I,KAAA,SAAKD,GACHhJ,KAAK2f,WAAW5K,KAAK/L,wBAtDxBqM,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,gCACVoF,gBAAiB8D,EAAAA,wBAAwBC,OACzCjJ,SAAU,y1CAuCTwD,EAAAA,0BAEAC,EAAAA,2BACAA,EAAAA,UAWHuG,EArEA,GCAA,IAAAM,GAAA,WA4EE,SAAAA,EAAoB/X,GAAAhI,KAAAgI,QAAAA,EATVhI,KAAA0f,WAAa,IAAI1L,EAAAA,aACjBhU,KAAA2f,WAAa,IAAI3L,EAAAA,aAEjBhU,KAAAqe,SAAW,IAAIrK,EAAAA,aACfhU,KAAAggB,QAAU,IAAIhM,EAAAA,aACdhU,KAAAigB,YAAc,IAAIjM,EAAAA,aAkF9B,OA5EE+L,EAAA7f,UAAAmD,WAAA,SAAWD,OACH4B,EAAO8a,GAAsBN,OAASpc,GAAS,EAAI,EACzDpD,KAAK0f,WAAW3K,KAAK,CAAE/P,KAAM,CAAEyE,MAAOzE,MAGxC+a,EAAA7f,UAAA0E,eAAA,SAAexB,GACbpD,KAAK2f,WAAW5K,KAAK3R,IAGvB2c,EAAA7f,UAAAggB,UAAA,SAAU9c,GACRpD,KAAKqe,SAAStJ,KAAK3R,IAGrB2c,EAAA7f,UAAAigB,WAAA,SAAWlS,GAAX,IAAA5E,EAAArJ,KACE,IAAKA,KAAKgI,QAAQmY,YAAengB,KAAKgI,QAAQoY,sBAIrB,IAArBnS,EAAKjI,KAAKpF,OAId,GAAIZ,KAAKgI,QAAQmY,YAAclS,EAAKjI,KAAK,KACjCiI,EAAKjI,KAAK,GAAGO,YACdvG,KAAKgI,QAAQ8M,qBAEhB9U,KAAKqe,SAAStJ,KAAK9G,EAAKjI,KAAK,QAJjC,KASMqa,EAAcpS,EAAKjI,KAAKsa,MAAI,SAAE3c,GAClC,OAAO0F,EAAKrB,QAAQ8M,sBACfnR,EAAI4C,YACJ5C,EAAI4F,eAAiB5F,EAAI4C,cAKhC,GAFAvG,KAAKqe,SAAStJ,KAAKsL,GAEfrgB,KAAKgI,QAAQoY,oBAAqB,KAE9BG,EADOtS,EAAKjI,KAAK4H,MAAM,GACD4S,UAAUF,MAAI,SAAE3c,GAC1C,OAAO0F,EAAKrB,QAAQ8M,sBACfnR,EAAI4C,YACJ5C,EAAI4F,eAAiB5F,EAAI4C,cAGhCvG,KAAKqe,SAAStJ,KAAKwL,MAIvBR,EAAA7f,UAAAqD,iBAAA,SAAiBmC,EAAqBD,GAAtC,IAAA4D,EAAArJ,MACOA,KAAKgI,QAAQmY,YAAengB,KAAKgI,QAAQoY,uBAIxB1a,EAAKM,KAAKsa,MAAI,SAAE3c,GACpC,OAAO0F,EAAKrB,QAAQ8M,sBACfnR,EAAI4C,YACJ5C,EAAI4F,eAAiB5F,EAAI4C,gBAI9Bb,EAAKD,UAAYA,EACjBzF,KAAKygB,cAAgBhb,EACrBzF,KAAKigB,YAAYlL,KAAKrP,MAI1Bqa,EAAA7f,UAAAqF,SAAA,SAASG,EAAoBD,GACvBzF,KAAKgI,QAAQ8M,sBAAwBpP,EAAK6D,eAC5C7D,EAAKgb,oBAAsBjb,GAG7BzF,KAAKggB,QAAQjL,KAAK,CAAErP,KAAIA,EAAED,UAASA,yBArItC4P,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,wBAEVE,SAAU,28CALHnU,uCA+CN2X,EAAAA,uBACAA,EAAAA,0BAEAC,EAAAA,2BACAA,EAAAA,yBAEAA,EAAAA,wBACAA,EAAAA,4BACAA,EAAAA,UAkFH6G,EA1JA,GCAA,IAAAY,GAAA,WAUA,SAAAA,IA8BY3gB,KAAA0f,WAAa,IAAI1L,EAAAA,aACjBhU,KAAA2f,WAAa,IAAI3L,EAAAA,aAEjBhU,KAAAqe,SAAW,IAAIrK,EAAAA,aACfhU,KAAAggB,QAAU,IAAIhM,EAAAA,aAkB1B,OAhBE2M,EAAAzgB,UAAAmD,WAAA,SAAWD,OACH4B,EAAO8a,GAAsBN,OAASpc,GAAS,EAAI,EACzDpD,KAAK0f,WAAW3K,KAAK,CAAE/P,KAAM,CAAE2E,KAAM3E,MAGvC2b,EAAAzgB,UAAA0gB,UAAA,SAAUnX,GACRzJ,KAAKqe,SAAStJ,KAAKtL,IAGrBkX,EAAAzgB,UAAA2gB,WAAA,SAAWnb,EAA6BD,GACtCzF,KAAKggB,QAAQjL,KAAK,CAAErP,KAAIA,EAAED,UAASA,KAGrCkb,EAAAzgB,UAAA0E,eAAA,SAAexB,GACbpD,KAAK2f,WAAW5K,KAAK3R,wBAlDxBiS,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,yBACVE,SAAU,u2BA0BTwD,EAAAA,0BAEAC,EAAAA,2BACAA,EAAAA,yBAEAA,EAAAA,wBACAA,EAAAA,UAkBHyH,EA9DA,qBCGA,SAAAG,IAuBE9gB,KAAA+gB,KAAO,KACP/gB,KAAAghB,MAAQ,EACRhhB,KAAAihB,QAAU,EACZ,2BA1BC5L,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,gBACVE,SAAU,6sCAwBZqL,KC7BA,IAAAI,GAAA,WAWA,SAAAA,IA8BYlhB,KAAA0f,WAAa,IAAI1L,EAAAA,aACjBhU,KAAA2f,WAAa,IAAI3L,EAAAA,aAEjBhU,KAAAqe,SAAW,IAAIrK,EAAAA,aACfhU,KAAAggB,QAAU,IAAIhM,EAAAA,aAkB1B,OAhBEkN,EAAAhhB,UAAAmD,WAAA,SAAWD,OACH4B,EAAO8a,GAAsBN,OAASpc,GAAS,EAAI,EACzDpD,KAAK0f,WAAW3K,KAAK,CAAE/P,KAAM,CAAE2E,K5BvCHuB,G4BuCSlG,MAGvCkc,EAAAhhB,UAAAihB,SAAA,SAASxX,GACP3J,KAAKqe,SAAStJ,KAAKpL,IAGrBuX,EAAAhhB,UAAAkhB,UAAA,SAAU1b,EAA6BD,GACrCzF,KAAKggB,QAAQjL,KAAK,CAAErP,KAAIA,EAAED,UAASA,KAGrCyb,EAAAhhB,UAAA0E,eAAA,SAAexB,GACbpD,KAAK2f,WAAW5K,KAAK3R,wBAlDxBiS,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,yBACVE,SAAU,01BA0BTwD,EAAAA,0BAEAC,EAAAA,2BACAA,EAAAA,yBAEAA,EAAAA,wBACAA,EAAAA,UAkBHgI,EA/DA,GCAA,IAAAG,GAAA,WAsCA,SAAAA,KA4DA,OAjBSA,EAAAC,QAAP,WACE,MAAO,CACLC,SAAUF,EACV7L,UAAW,CACTwD,EAAAA,uBACA9C,EAAAA,mBACAnD,EACA/O,EACA1C,EACA2b,GACA9D,EACAI,EACAjS,EACAT,yBAxDP2a,EAAAA,SAAQlM,KAAA,CAAC,CACRmM,QAAS,CAACC,EAAAA,cACVC,aAAc,CACZzD,GACAC,GACAC,GACAO,GACAc,GACAM,GACAY,GACAG,GACAI,GACAvN,EACAwC,EACAiD,EACAE,EACAe,GACAZ,EACAyD,GACApD,EACAC,EACAqD,IAEFwE,gBAAiB,CACfjO,EACA8F,EACAL,EACAU,GAEF+H,QAAS,CACPlO,EACAwC,EACAiD,EACAE,EACAe,GACAZ,EACAyD,GACApD,EACAC,EACAqD,QAqBJiE,EAlGA,GCAAS,GAAA,WAEA,SAAAA,KAIA,OAHEA,EAAA5hB,UAAAkE,OAAA,SAAOK,EAAYL,EAAgBuC,GACjC,OAAO2J,EAAAA,WAAW7L,EAAML,EAAQuC,IAEpCmb,EANA,iBCcA,SAAAC,IAmCY/hB,KAAAgiB,cAAoC,IAAIhO,EAAAA,kBAAmBvC,GAC3DzR,KAAAiiB,OAA6B,IAAIjO,EAAAA,cAAmB,GACpDhU,KAAAkiB,iBAAuC,IAAIlO,EAAAA,kBAAmBvC,GAGxEzR,KAAAmiB,QAAe,GAEfniB,KAAAoiB,UAAiB,GAEjBpiB,KAAAqiB,SAAgB,GAINriB,KAAAsiB,MAAkB,CAAC,MAAO,QAAS,QACnCtiB,KAAAuiB,cAA+B,IAAIT,GAqU/C,OAzTEtiB,OAAAkD,eACIqf,EAAA7hB,UAAA,aAAU,KADd,WAEE,OAAOF,KAAKwiB,iBAGd,SAAe3hB,GACbb,KAAKwiB,YAAc3hB,mCAIrBkhB,EAAA7hB,UAAAkU,SAAA,WAEEpU,KAAKyiB,SAAY,eAAejS,KAAKC,MAAsB,IAAhBD,KAAKkS,UAE5C1iB,KAAK2iB,UACP3iB,KAAK4iB,WAAa5iB,KAAK2iB,SACvB3iB,KAAKkK,aAAe,IAAIY,KAAK9K,KAAK4iB,WAAW3E,WAC7Cje,KAAKiiB,OAAOlN,KAAK/U,KAAK4iB,kBACOnR,IAApBzR,KAAK4iB,aACd5iB,KAAK4iB,WAAa,IAAI9X,OAM1BiX,EAAA7hB,UAAAwX,YAAA,SAAYC,GACV3X,KAAK6iB,cACL7iB,KAAK8iB,4BAA4BnL,EAAQiL,aAK3Cb,EAAA7hB,UAAA4iB,4BAAA,SAA4BF,GAC1B,GAAIA,IAAeA,EAAWG,YAAa,KACnCxT,EAAgBqT,EAAWrT,cAE/BA,GACAA,aAAyBzE,MACzByE,EAAc6H,YAAcwL,EAAWpT,aAAa4H,WAEpDpX,KAAKkiB,iBAAiBnN,KAAK/U,KAAK4iB,cAKtCb,EAAA7hB,UAAA8iB,kBAAA,SAAkBC,EAAmB/e,GACtB,QAATA,IACFlE,KAAKkjB,kBAAoBD,GAGd,UAAT/e,IACFlE,KAAKmjB,oBAAsBF,GAGhB,SAAT/e,IACFlE,KAAKojB,mBAAqBH,IAI9BlB,EAAA7hB,UAAAmjB,QAAA,SAAQC,EAAaC,GACnB,QAAc9R,IAAV6R,QAAiC7R,IAAV8R,EAI3B,MAA4B,QAAxBvjB,KAAKwjB,gBAA4BxjB,KAAKkjB,kBACjCljB,KAAKkjB,kBAAkBI,EAAOC,GAGX,UAAxBvjB,KAAKwjB,gBAA8BxjB,KAAKmjB,oBACnCnjB,KAAKmjB,oBAAoBG,EAAOC,GAGb,SAAxBvjB,KAAKwjB,gBAA6BxjB,KAAKojB,mBAClCpjB,KAAKojB,mBAAmBE,EAAOC,QADxC,GAOFxB,EAAA7hB,UAAAujB,sBAAA,SAAsBR,EAAmB/e,GAC1B,QAATA,IACFlE,KAAK0jB,sBAAwBT,GAGlB,UAAT/e,IACFlE,KAAK2jB,wBAA0BV,GAGpB,SAAT/e,IACFlE,KAAK4jB,uBAAyBX,IAIlClB,EAAA7hB,UAAA2iB,YAAA,WAC8B,QAAxB7iB,KAAKwjB,gBAA4BxjB,KAAK0jB,uBACxC1jB,KAAK0jB,wBAGqB,UAAxB1jB,KAAKwjB,gBAA8BxjB,KAAK2jB,yBAC1C3jB,KAAK2jB,0BAGqB,SAAxB3jB,KAAKwjB,gBAA6BxjB,KAAK4jB,wBACzC5jB,KAAK4jB,0BAIT7B,EAAA7hB,UAAA2jB,WAAA,SAAWpf,EAAYL,GACrB,OAAOpE,KAAKuiB,cAAcne,OAAOK,EAAML,EAAQpE,KAAK2G,SAItDob,EAAA7hB,UAAA4jB,SAAA,SAASC,GACP,OAAuD,IAAnD/jB,KAAKqjB,QAAQU,EAAWtf,KAAMzE,KAAK4iB,cACrC5iB,KAAKgkB,aAAeD,EAAWE,KAExB,IAOXlC,EAAA7hB,UAAAgkB,iBAAA,SAAiBzf,EAAYL,OAErB2f,EAAkB,GAaxB,OAZAA,EAAWtf,KAAO,IAAIqG,KACpBrG,EAAKmF,cACLnF,EAAKiF,WACLjF,EAAK0f,WAEPJ,EAAWtf,KAAOzE,KAAKokB,YAAYL,EAAWtf,MAC9Csf,EAAW1T,MAAQrQ,KAAK6jB,WAAWpf,EAAML,GACzC2f,EAAWM,SAAqD,IAA1CrkB,KAAKqjB,QAAQ5e,EAAMzE,KAAKkK,cAC9C6Z,EAAWO,SAAWtkB,KAAKuG,WAAW9B,GACtCsf,EAAWQ,QAA6C,IAAnCvkB,KAAKqjB,QAAQ5e,EAAM,IAAIqG,MAC5CiZ,EAAWS,YAAcxkB,KAAKykB,sBAAsBV,EAAWtf,MAExDsf,GAIThC,EAAA7hB,UAAA4d,MAAA,SAAM4G,EAAYC,GAGhB,QADMC,EAAgB,GACfF,EAAI9jB,OAAS,GAClBgkB,EAAOxjB,KAAKsjB,EAAIG,OAAO,EAAGF,IAG5B,OAAOC,GAST7C,EAAA7hB,UAAAkkB,YAAA,SAAY3f,OACJuc,EAAQvc,EAAKqgB,WAEnB,OAAO,IAAIha,KACTrG,EAAKmF,cACLnF,EAAKiF,WACLjF,EAAK0f,UACK,KAAVnD,EAAeA,EAAQ,EAAI,IAI/Be,EAAA7hB,UAAAsE,OAAA,SAAOC,EAAYsgB,QAAA,IAAAA,IAAAA,GAAA,GACb/kB,KAAKwjB,iBAAmBxjB,KAAKiQ,SAC1BjQ,KAAK4iB,aACR5iB,KAAK4iB,WAAa,IAAI9X,KAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAG/C9K,KAAK4iB,WAAa,IAAI9X,KACpBrG,EAAKmF,cACLnF,EAAKiF,WACLjF,EAAK0f,WAEPnkB,KAAK4iB,WAAa5iB,KAAKokB,YAAYpkB,KAAK4iB,YACpCmC,GACF/kB,KAAKgiB,cAAcjN,KAAK/U,KAAK4iB,cAG/B5iB,KAAK4iB,WAAa,IAAI9X,KACpBrG,EAAKmF,cACLnF,EAAKiF,WACLjF,EAAK0f,WAEPnkB,KAAK4iB,WAAa5iB,KAAKokB,YAAYpkB,KAAK4iB,YACpCmC,IACF/kB,KAAKwjB,eAAiBxjB,KAAKsiB,MACzBtiB,KAAKsiB,MAAM0C,QAAQhlB,KAAKwjB,gBAAkB,KAKhDxjB,KAAKkK,aAAe,IAAIY,KAAK9K,KAAK4iB,WAAW3E,WAC7Cje,KAAKiiB,OAAOlN,KAAK/U,KAAK4iB,YACtB5iB,KAAK6iB,eAGPd,EAAA7hB,UAAA+kB,KAAA,SAAKC,OAECC,EAaJ,GAZ4B,QAAxBnlB,KAAKwjB,iBACP2B,EAAenlB,KAAKmiB,SAGM,UAAxBniB,KAAKwjB,iBACP2B,EAAenlB,KAAKoiB,WAGM,SAAxBpiB,KAAKwjB,iBACP2B,EAAenlB,KAAKqiB,UAGlB8C,EAAc,KACVxb,EACJ3J,KAAK4iB,WAAWhZ,cAAgBsb,GAAaC,EAAapc,OAAS,GAC/DU,EACJzJ,KAAK4iB,WAAWlZ,WAAawb,GAAaC,EAAazc,QAAU,GACnE1I,KAAK4iB,WAAa,IAAI9X,KAAKnB,EAAMF,EAAO,GAExCzJ,KAAK6iB,cACL7iB,KAAKkiB,iBAAiBnN,KAAK/U,KAAK4iB,cAIpCb,EAAA7hB,UAAAklB,WAAA,SAAWC,OACHH,EAAYG,GAAc,EAG7BrlB,KAAKwjB,iBAAmBxjB,KAAKslB,SAAyB,IAAdJ,GACxCllB,KAAKwjB,iBAAmBxjB,KAAKiQ,UAA0B,IAAfiV,IAK3CllB,KAAKwjB,eAAiBxjB,KAAKsiB,MACzBtiB,KAAKsiB,MAAM0C,QAAQhlB,KAAKwjB,gBAAkB0B,GAE5CllB,KAAK6iB,gBAGGd,EAAA7hB,UAAAukB,sBAAV,SAAgChgB,GAAhC,IAAA4E,EAAArJ,KACE,IAAKA,KAAKwkB,YACR,MAAO,OAGHe,EAKFvlB,KAAKwkB,YAAYlE,MAAI,SAAEkE,GACzB,OACEA,EAAY/f,KAAKwZ,YAAcxZ,EAAKwZ,WACpCuG,EAAYtb,OAASG,EAAKma,iBAE3BxjB,MAEH,YAA6ByR,IAAtB8T,EAAkC,GAAKA,EAAkBC,OAGxDzD,EAAA7hB,UAAAulB,oBAAV,SACEC,EACAnC,GAEA,QAAsB9R,IAAlBiU,QAAyCjU,IAAV8R,EAInC,MAA2B,QAAvBmC,EAAcxc,MAAkBlJ,KAAKkjB,kBAChCljB,KAAKkjB,kBAAkBwC,EAAcjhB,KAAM8e,GAGzB,UAAvBmC,EAAcxc,MAAoBlJ,KAAKmjB,oBAClCnjB,KAAKmjB,oBAAoBuC,EAAcjhB,KAAM8e,GAG3B,SAAvBmC,EAAcxc,MAAmBlJ,KAAKojB,mBACjCpjB,KAAKojB,mBAAmBsC,EAAcjhB,KAAM8e,QADrD,GAOQxB,EAAA7hB,UAAAqG,WAAV,SAAqB9B,GAArB,IAAA4E,EAAArJ,KACM2lB,GAAiB,EAiBrB,OAhBI3lB,KAAK6O,cACP7O,KAAK6O,aAAab,SAAO,SACtB4X,GACsD,IAAjDvc,EAAKoc,oBAAoBG,EAAcnhB,KACzCkhB,GAAiB,MAMrB3lB,KAAK6lB,cACPF,EACEA,GACA3lB,KAAK6lB,YAAYb,QAAQvgB,EAAKyI,WAAa,GAI7CyY,GACC3lB,KAAK2F,SAAW3F,KAAKqjB,QAAQ5e,EAAMzE,KAAK2F,SAAW,GACnD3F,KAAK6F,SAAW7F,KAAKqjB,QAAQ5e,EAAMzE,KAAK6F,SAAW,uBAnXzDwP,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,mBACVE,SAAU,2PAQTwD,EAAAA,8BACAA,EAAAA,2BACAA,EAAAA,yBACAA,EAAAA,uBAEAA,EAAAA,uBACAA,EAAAA,uBACAA,EAAAA,uBACAA,EAAAA,yBACAA,EAAAA,yBACAA,EAAAA,2BACAA,EAAAA,0BACAA,EAAAA,+BACAA,EAAAA,8BACAA,EAAAA,gCACAA,EAAAA,gCACAA,EAAAA,mCACAA,EAAAA,2BACAA,EAAAA,6BACAA,EAAAA,4BACAA,EAAAA,4BACAA,EAAAA,2BACAA,EAAAA,wBACAA,EAAAA,6BAEAC,EAAAA,uBACAA,EAAAA,iCACAA,EAAAA,2BAwBAD,EAAAA,SAyTH8I,KCpYA,IAAA+D,GAAA,WAEA,SAAAA,IAEE9lB,KAAA2G,OAAS,KACT3G,KAAAwjB,eAAiB,MACjBxjB,KAAA+lB,YAAc,EACd/lB,KAAAgmB,UAAY,GACZhmB,KAAAiQ,QAAU,MACVjQ,KAAAslB,QAAU,OACVtlB,KAAAimB,WAAY,EACZjmB,KAAAkmB,UAAY,KACZlmB,KAAAmmB,YAAc,OACdnmB,KAAAomB,WAAa,OACbpmB,KAAAqmB,gBAAkB,KAClBrmB,KAAAsmB,eAAiB,YACjBtmB,KAAAumB,iBAAmB,OACnBvmB,KAAAwmB,kBAAmB,EACnBxmB,KAAAymB,cAAgB,EAChBzmB,KAAA0mB,aAAe,EACf1mB,KAAA2mB,qBAAsB,EACxB,2BAnBCpkB,EAAAA,aAmBDujB,EArBA,GCaA,IAAac,GAA8C,CACzD3O,QAASiC,EAAAA,kBAETC,YAAaC,EAAAA,YAAU,WAAO,OAAAyM,MAC9BvM,OAAO,GAITuM,GAAA,WAoHE,SAAAA,EAAYC,GA5EH9mB,KAAAwjB,eAAiB,MAYjBxjB,KAAAimB,WAAY,EA2CrBjmB,KAAAgiB,cAAoC,IAAIhO,EAAAA,kBAAmBvC,GAI3DzR,KAAAkiB,iBAAuC,IAAIlO,EAAAA,kBACzCvC,GAOFzR,KAAAub,SAAgBV,SAAS3a,UAEzBF,KAAA+mB,UAAiBlM,SAAS3a,UAIhBF,KAAAgnB,KAAa,IAAIlc,KAIzB9K,KAAK8mB,OAASA,EACd9mB,KAAKinB,mBA0CT,OA3EEznB,OAAAkD,eACImkB,EAAA3mB,UAAA,aAAU,KADd,WAEE,OAAOF,KAAKwiB,aAAexiB,KAAKgnB,UAGlC,SAAenmB,GACbb,KAAKwiB,YAAc3hB,mCA8BrBgmB,EAAA3mB,UAAA+mB,iBAAA,WACEznB,OAAO0I,OAAOlI,KAAMA,KAAK8mB,SAG3BD,EAAA3mB,UAAAgnB,SAAA,SAAS9jB,GACPpD,KAAK4iB,WAAaxf,EAClBpD,KAAKub,SAASnY,IAGhByjB,EAAA3mB,UAAAinB,gBAAA,SAAgB/jB,GACdpD,KAAKgiB,cAAcjN,KAAK3R,IAG1ByjB,EAAA3mB,UAAAknB,mBAAA,SAAmBhkB,GACjBpD,KAAKkiB,iBAAiBnN,KAAK3R,IAI7ByjB,EAAA3mB,UAAAsb,WAAA,SAAW3a,GACT,GAA0D,IAAtDb,KAAKqnB,YAAYhE,QAAQxiB,EAAOb,KAAKwiB,aAGzC,OAAI3hB,GAASA,aAAiBiK,MAC5B9K,KAAK4iB,WAAa/hB,OAClBb,KAAKqnB,YAAY7iB,OAAO3D,GAAO,SAKjCb,KAAK4iB,WAAa/hB,EAAQ,IAAIiK,KAAKjK,QAAS,IAG9CgmB,EAAA3mB,UAAAoc,iBAAA,SAAiBrQ,GACfjM,KAAKub,SAAWtP,GAGlB4a,EAAA3mB,UAAAqc,kBAAA,SAAkBtQ,GAChBjM,KAAK+mB,UAAY9a,uBA9JpBoJ,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,aACVE,SAAU,ujDAiCVD,UAAW,CAACoR,iDA7CLd,8CAkDN7M,EAAAA,wBAEAA,EAAAA,uBAEAA,EAAAA,uBAEAA,EAAAA,uBAEAA,EAAAA,uBAEAA,EAAAA,yBAEAA,EAAAA,yBAEAA,EAAAA,2BAEAA,EAAAA,0BAEAA,EAAAA,+BAEAA,EAAAA,8BAEAA,EAAAA,gCAEAA,EAAAA,2BAEAA,EAAAA,yBAEAA,EAAAA,gCAEAA,EAAAA,mCAEAA,EAAAA,6BAEAA,EAAAA,4BAEAA,EAAAA,2BAEAA,EAAAA,4BAEAA,EAAAA,2BAEAA,EAAAA,0BAGAA,EAAAA,6BASAC,EAAAA,iCAIAA,EAAAA,4BAKAoO,EAAAA,UAAShS,KAAA,CAACyM,GAA0B,CAAEwF,QAAQ,OAyDjDV,EAhKA,qBCyEE,SAAAW,EAAYC,GANZznB,KAAA0nB,OAAgB,GAEhB1nB,KAAA2nB,KAAc,GACd3nB,KAAAsC,YAAwB,GAItBtC,KAAKynB,WAAaA,EA4GtB,OAzGEjoB,OAAAkD,eAAI8kB,EAAAtnB,UAAA,QAAK,KAAT,WACE,OAAQ0nB,EAAAA,yCAOVJ,EAAAtnB,UAAAkU,SAAA,eACQyT,EAAO7nB,KAEbA,KAAKynB,WAAWtF,QAAU,CAAEzZ,OAAQ,GAEpC1I,KAAKynB,WAAWhE,uBAAqB,eAC7B9Z,EAAO3J,KAAK4iB,WAAWhZ,cACvBH,EAAQzJ,KAAK4iB,WAAWlZ,WACxBoe,EAAkB,IAAIhd,KAAKnB,EAAMF,EAAO,GACxCse,EAAa/nB,KAAK+lB,YAAc+B,EAAgB5a,SAChD8a,EACJD,EAAa,EAAI,EAAIA,GAAcA,EAC/BE,EAAY,IAAInd,KAAKgd,EAAgB1Q,WAEvC4Q,EAAgC,GAClCC,EAAUC,QAAyC,EAAhCF,GAMrB,QAFMG,EAAgBN,EAAKO,SAASH,EAAW,IACzCjiB,EAAc,GACXvF,EAAI,EAAGA,EAAI,GAAIA,IAAK,KACrB4nB,EAAcroB,KAAKkkB,iBAAiBiE,EAAM1nB,GAAIT,KAAKkmB,WACzDmC,EAAYC,UAAYH,EAAM1nB,GAAGiJ,aAAeD,EAChD4e,EAAYpE,IAAMjkB,KAAKyiB,SAAW,IAAMhiB,EACxCuF,EAAKvF,GAAK4nB,EAGZR,EAAKH,OAAS,GACd,IAAK,IAAIrb,EAAI,EAAGA,EAAI,EAAGA,IACrBwb,EAAKH,OAAOrb,GAAK,GACjBwb,EAAKH,OAAOrb,GAAGkc,KAAOvoB,KAAK6jB,WACzB7d,EAAKqG,GAAG5H,KACRzE,KAAKqmB,iBAEPwB,EAAKH,OAAOrb,GAAGmc,KAAOxoB,KAAK6jB,WAAW7d,EAAKqG,GAAG5H,KAAM,QAMtD,GAHAojB,EAAKY,MAAQzoB,KAAK6jB,WAAW7jB,KAAK4iB,WAAY5iB,KAAKsmB,gBACnDuB,EAAKF,KAAO3nB,KAAK8d,MAAM9X,EAAM,GAEzBhG,KAAKimB,UAAW,CAClB4B,EAAKvlB,YAAc,GAGnB,QAFMomB,GAAiB,GAAQ1oB,KAAK+lB,aAAe,EAC7C4C,EAAWd,EAAKF,KAAK/mB,OAClBgoB,EAAU,EAAGA,EAAUD,EAAUC,IACxCf,EAAKvlB,YAAYlB,KACfymB,EAAKgB,qBAAqBhB,EAAKF,KAAKiB,GAASF,GAAejkB,UAIjE,OAEHzE,KAAKynB,WAAWzE,mBAAiB,SAC/BM,EACAC,OAEMuF,EAAK,IAAIhe,KAAKwY,EAAM1Z,cAAe0Z,EAAM5Z,WAAY4Z,EAAMa,WAC3D4E,EAAK,IAAIje,KAAKyY,EAAM3Z,cAAe2Z,EAAM7Z,WAAY6Z,EAAMY,WACjE,OAAO2E,EAAG1R,UAAY2R,EAAG3R,YACxB,OAEHpX,KAAKynB,WAAW5E,eAGR2E,EAAAtnB,UAAAkoB,SAAV,SAAmBY,EAAiBhoB,GAKlC,QADIyD,EAHE0B,EAAgB,IAAIxG,MAAMqB,GAC5BujB,EAAU,IAAIzZ,KAAKke,EAAU5R,WAC7B3W,EAAI,EAEDA,EAAIO,GACTyD,EAAO,IAAIqG,KAAKyZ,EAAQnN,WACxB3S,EAAOzE,KAAKynB,WAAWrD,YAAY3f,GACnC0B,EAAM1F,KAAOgE,EACb8f,EAAU,IAAIzZ,KACZrG,EAAKmF,cACLnF,EAAKiF,WACLjF,EAAK0f,UAAY,GAGrB,OAAOhe,GAGCqhB,EAAAtnB,UAAA2oB,qBAAV,SAA+BpkB,OACvBwkB,EAAY,IAAIne,KAAKrG,EAAK2S,WAEhC6R,EAAUf,QAAQe,EAAU9E,UAAY,GAAK8E,EAAU/b,UAAY,QAC7Dgc,EAAOD,EAAU7R,UAIvB,OAFA6R,EAAUE,SAAS,GACnBF,EAAUf,QAAQ,GAEhB1X,KAAKC,MAAMD,KAAK4Y,OAAOF,EAAOD,EAAU7R,WAAa,OAAY,GAAK,uBAhM3E/B,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,YACVE,SAAU,gjGAmER,qPAvEKsM,MAuMTyF,uBChJE,SAAA6B,EAAY5B,GAJZznB,KAAA2nB,KAAc,GAKZ3nB,KAAKynB,WAAaA,EAyCtB,OAtCEjoB,OAAAkD,eAAI2mB,EAAAnpB,UAAA,QAAK,KAAT,WACE,OAAQ0nB,EAAAA,yCAGVyB,EAAAnpB,UAAAkU,SAAA,eACQyT,EAAO7nB,KAEbA,KAAKynB,WAAWrF,UAAY,CAAErZ,MAAO,GAErC/I,KAAKynB,WAAWhE,uBAAqB,WAKnC,QAFIhf,EAFEiE,EAAgB,IAAI/I,MAAM,IAC1BgK,EAAe3J,KAAK4iB,WAAWhZ,cAG5BnJ,EAAI,EAAGA,EAAI,GAAIA,IACtBgE,EAAO,IAAIqG,KAAKnB,EAAMlJ,EAAG,GACzBgE,EAAOzE,KAAKokB,YAAY3f,GACxBiE,EAAOjI,GAAKT,KAAKkkB,iBAAiBzf,EAAMzE,KAAKmmB,aAC7Czd,EAAOjI,GAAGwjB,IAAMjkB,KAAKyiB,SAAW,IAAMhiB,EAGxConB,EAAKY,MAAQzoB,KAAK6jB,WAAW7jB,KAAK4iB,WAAY5iB,KAAKumB,kBACnDsB,EAAKF,KAAO3nB,KAAK8d,MAAMpV,EAAQmf,EAAKJ,WAAWhB,iBAC9C,SAEHzmB,KAAKynB,WAAWzE,mBAAiB,SAC/BM,EACAC,OAEMuF,EAAK,IAAIhe,KAAKwY,EAAM1Z,cAAe0Z,EAAM5Z,YACzCqf,EAAK,IAAIje,KAAKyY,EAAM3Z,cAAe2Z,EAAM7Z,YAC/C,OAAOof,EAAG1R,UAAY2R,EAAG3R,YACxB,SAEHpX,KAAKynB,WAAW5E,mCA1FnBxN,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,cACVE,SAAU,oxDAqCR,gIAzCKsM,MAgGTsH,uBC1CE,SAAAC,EAAY7B,GAFZznB,KAAA2nB,KAAc,GAGZ3nB,KAAKynB,WAAaA,EA8CtB,OA3CEjoB,OAAAkD,eAAI4mB,EAAAppB,UAAA,QAAK,KAAT,WACE,OAAQ0nB,EAAAA,yCAGV0B,EAAAppB,UAAAkU,SAAA,eACQyT,EAAO7nB,KAEbA,KAAKynB,WAAWpF,SAAW,CAAEtZ,MAAO/I,KAAKynB,WAAWzB,WAEpDhmB,KAAKynB,WAAWhE,uBAAqB,WAKnC,QAHIhf,EADEsE,EAAe,IAAIpJ,MAAMK,KAAKgmB,WAE9B1I,EAAQuK,EAAK0B,gBAAgBvpB,KAAK4iB,WAAWhZ,eAE1CnJ,EAAI,EAAGA,EAAIT,KAAKgmB,UAAWvlB,IAClCgE,EAAO,IAAIqG,KAAKwS,EAAQ7c,EAAG,EAAG,GAC9BgE,EAAOzE,KAAKokB,YAAY3f,GACxBsE,EAAMtI,GAAKT,KAAKkkB,iBAAiBzf,EAAMzE,KAAKomB,YAC5Crd,EAAMtI,GAAGwjB,IAAMjkB,KAAKyiB,SAAW,IAAMhiB,EAGvConB,EAAKY,MAAQ,CAAC1f,EAAM,GAAGsH,MAAOtH,EAAM/I,KAAKgmB,UAAY,GAAG3V,OAAOZ,KAC7D,OAEFoY,EAAKF,KAAO3nB,KAAK8d,MAAM/U,EAAO8e,EAAKJ,WAAWf,gBAC7C,QAEH1mB,KAAKynB,WAAWzE,mBAAiB,SAC/BM,EACAC,GAEA,OAAOD,EAAM1Z,cAAgB2Z,EAAM3Z,gBAClC,QAEH5J,KAAKynB,WAAW5E,eAGRyG,EAAAppB,UAAAqpB,gBAAV,SAA0B5f,GAExB,OACGA,EAAO,GAAK3J,KAAKynB,WAAWzB,UAAYhmB,KAAKynB,WAAWzB,UAAY,uBAhG1E3Q,EAAAA,UAASC,KAAA,CAAC,CACTC,SAAU,aACVE,SAAU,iyDAsCR,gIA1CKsM,MAqGTuH,KC1GA,IAAAE,GAAA,WAWA,SAAAA,KAsBA,OAHSA,EAAAlI,QAAP,WACE,MAAO,CAAEC,SAAUiI,EAAkBhU,UAAW,CAACsQ,0BApBpDtE,EAAAA,SAAQlM,KAAA,CAAC,CACRmM,QAAS,CAACC,EAAAA,aAAc+H,EAAAA,aACxB9H,aAAc,CACZkF,GACA9E,GACAyF,GACA6B,GACAC,IAEFzH,QAAS,CACPgF,GACA9E,GACAyF,GACA6B,GACAC,IAEF1H,gBAAiB,CAACiF,QAMpB2C,EAjCA","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {\n DatepickerRenderOptions,\n BsDatepickerViewMode,\n DatepickerDateCustomClasses\n} from './models';\nimport { BsCustomDates } from './themes/bs/bs-custom-dates-view.component';\n\n\n/**\n * For date range picker there are `BsDaterangepickerConfig` which inherits all properties,\n * except `displayMonths`, for range picker it default to `2`\n */\n@Injectable()\nexport class BsDatepickerConfig implements DatepickerRenderOptions {\n /** sets use adaptive position */\n adaptivePosition = false;\n /** sets use UTC date time format */\n useUtc = false;\n /** turn on/off animation */\n isAnimated = false;\n value?: Date | Date[];\n isDisabled?: boolean;\n /**\n * Default min date for all date/range pickers\n */\n minDate?: Date;\n /**\n * Default max date for all date/range pickers\n */\n maxDate?: Date;\n /**\n * Default date custom classes for all date/range pickers\n */\n dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n datesDisabled?: Date[];\n /**\n * Show one months for special cases (only for dateRangePicker)\n * 1. maxDate is equal to today's date\n * 2. minDate's month is equal to maxDate's month\n */\n displayOneMonthRange?: boolean;\n /**\n * Enable specific dates\n */\n datesEnabled?: Date[];\n /**\n * Makes dates from other months active\n */\n selectFromOtherMonth?: boolean;\n\n /**\n * Allows select first date of the week by click on week number\n */\n selectWeek?: boolean;\n\n /**\n * Allows select daterange as first and last day of week by click on week number (dateRangePicker only)\n */\n selectWeekDateRange?: boolean;\n\n /**\n * Shows previous and current month, instead of current and next (dateRangePicker only)\n */\n showPreviousMonth?: boolean;\n\n /**\n * Add class to current day\n */\n customTodayClass?: string;\n\n /**\n * Default mode for all date pickers\n */\n minMode?: BsDatepickerViewMode;\n\n /**\n * If true, returns focus to the datepicker / daterangepicker input after date selection\n */\n returnFocusToInput = false;\n\n /** CSS class which will be applied to datepicker container,\n * usually used to set color theme\n */\n containerClass = 'theme-green';\n\n // DatepickerRenderOptions\n displayMonths = 1;\n /**\n * Allows to hide week numbers in datepicker\n */\n showWeekNumbers = true;\n\n dateInputFormat = 'L';\n // range picker\n rangeSeparator = ' - ';\n /**\n * Date format for date range input field\n */\n rangeInputFormat = 'L';\n\n /**\n * Predefined ranges\n */\n ranges?: BsCustomDates[];\n\n // DatepickerFormatOptions\n monthTitle = 'MMMM';\n yearTitle = 'YYYY';\n dayLabel = 'D';\n monthLabel = 'MMMM';\n yearLabel = 'YYYY';\n weekNumbers = 'w';\n}\n","// datepicker container component\n/* tslint:disable:no-empty */\nimport { BsCustomDates } from '../themes/bs/bs-custom-dates-view.component';\nimport { BsDatepickerEffects } from '../reducer/bs-datepicker.effects';\nimport { Observable } from 'rxjs';\nimport {\n BsDatepickerViewMode,\n BsNavigationEvent,\n CalendarCellViewModel,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DaysCalendarViewModel,\n DayViewModel,\n MonthsCalendarViewModel,\n WeekViewModel,\n YearsCalendarViewModel\n} from '../models';\n\nexport abstract class BsDatepickerAbstractComponent {\n containerClass: string;\n isOtherMonthsActive: boolean;\n\n _effects: BsDatepickerEffects;\n customRanges: BsCustomDates[] = [];\n\n set minDate(value: Date) {\n this._effects.setMinDate(value);\n }\n\n set maxDate(value: Date) {\n this._effects.setMaxDate(value);\n }\n set daysDisabled(value: number[]) {\n this._effects.setDaysDisabled(value);\n }\n set datesDisabled(value: Date[]) {\n this._effects.setDatesDisabled(value);\n }\n\n set datesEnabled(value: Date[]) {\n this._effects.setDatesEnabled(value);\n }\n\n set isDisabled(value: boolean) {\n this._effects.setDisabled(value);\n }\n\n set dateCustomClasses(value: DatepickerDateCustomClasses[]) {\n this._effects.setDateCustomClasses(value);\n }\n\n viewMode: Observable<BsDatepickerViewMode>;\n daysCalendar: Observable<DaysCalendarViewModel[]>;\n monthsCalendar: Observable<MonthsCalendarViewModel[]>;\n yearsCalendar: Observable<YearsCalendarViewModel[]>;\n options: Observable<DatepickerRenderOptions>;\n\n setViewMode(event: BsDatepickerViewMode): void {}\n\n navigateTo(event: BsNavigationEvent): void {}\n\n dayHoverHandler(event: CellHoverEvent): void {}\n\n weekHoverHandler(event: WeekViewModel): void {}\n\n monthHoverHandler(event: CellHoverEvent): void {}\n\n yearHoverHandler(event: CellHoverEvent): void {}\n\n daySelectHandler(day: DayViewModel): void {}\n\n monthSelectHandler(event: CalendarCellViewModel): void {}\n\n yearSelectHandler(event: CalendarCellViewModel): void {}\n\n /* tslint:disable-next-line: no-any */\n _stopPropagation(event: any): void {\n event.stopPropagation();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TimeUnit } from 'ngx-bootstrap/chronos';\nimport { Action } from 'ngx-bootstrap/mini-ngrx';\nimport {\n BsDatepickerViewMode,\n BsViewNavigationEvent,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses\n} from '../models';\n\n@Injectable()\nexport class BsDatepickerActions {\n static readonly CALCULATE = '[datepicker] calculate dates matrix';\n static readonly FORMAT = '[datepicker] format datepicker values';\n static readonly FLAG = '[datepicker] set flags';\n static readonly SELECT = '[datepicker] select date';\n static readonly NAVIGATE_OFFSET = '[datepicker] shift view date';\n static readonly NAVIGATE_TO = '[datepicker] change view date';\n static readonly SET_OPTIONS = '[datepicker] update render options';\n static readonly HOVER = '[datepicker] hover date';\n static readonly CHANGE_VIEWMODE = '[datepicker] switch view mode';\n\n static readonly SET_MIN_DATE = '[datepicker] set min date';\n static readonly SET_MAX_DATE = '[datepicker] set max date';\n static readonly SET_DAYSDISABLED = '[datepicker] set days disabled';\n static readonly SET_DATESDISABLED = '[datepicker] set dates disabled';\n static readonly SET_DATESENABLED = '[datepicker] set dates enabled';\n static readonly SET_IS_DISABLED = '[datepicker] set is disabled';\n static readonly SET_DATE_CUSTOM_CLASSES = '[datepicker] set date custom classes';\n\n static readonly SET_LOCALE = '[datepicker] set datepicker locale';\n\n static readonly SELECT_RANGE = '[daterangepicker] select dates range';\n\n calculate(): Action {\n return { type: BsDatepickerActions.CALCULATE };\n }\n\n format(): Action {\n return { type: BsDatepickerActions.FORMAT };\n }\n\n flag(): Action {\n return { type: BsDatepickerActions.FLAG };\n }\n\n select(date: Date): Action {\n return {\n type: BsDatepickerActions.SELECT,\n payload: date\n };\n }\n\n changeViewMode(event: BsDatepickerViewMode): Action {\n return {\n type: BsDatepickerActions.CHANGE_VIEWMODE,\n payload: event\n };\n }\n\n navigateTo(event: BsViewNavigationEvent): Action {\n return {\n type: BsDatepickerActions.NAVIGATE_TO,\n payload: event\n };\n }\n\n navigateStep(step: TimeUnit): Action {\n return {\n type: BsDatepickerActions.NAVIGATE_OFFSET,\n payload: step\n };\n }\n\n setOptions(options: DatepickerRenderOptions): Action {\n return {\n type: BsDatepickerActions.SET_OPTIONS,\n payload: options\n };\n }\n\n // date range picker\n selectRange(value: Date[]): Action {\n return {\n type: BsDatepickerActions.SELECT_RANGE,\n payload: value\n };\n }\n\n hoverDay(event: CellHoverEvent): Action {\n return {\n type: BsDatepickerActions.HOVER,\n payload: event.isHovered ? event.cell.date : null\n };\n }\n\n minDate(date: Date): Action {\n return {\n type: BsDatepickerActions.SET_MIN_DATE,\n payload: date\n };\n }\n\n maxDate(date: Date): Action {\n return {\n type: BsDatepickerActions.SET_MAX_DATE,\n payload: date\n };\n }\n\n daysDisabled(days: number[]): Action {\n return {\n type: BsDatepickerActions.SET_DAYSDISABLED,\n payload: days\n };\n }\n\n datesDisabled(dates: Date[]): Action {\n return {\n type: BsDatepickerActions.SET_DATESDISABLED,\n payload: dates\n };\n }\n\n datesEnabled(dates: Date[]): Action {\n return {\n type: BsDatepickerActions.SET_DATESENABLED,\n payload: dates\n };\n }\n\n isDisabled(value: boolean): Action {\n return {\n type: BsDatepickerActions.SET_IS_DISABLED,\n payload: value\n };\n }\n\n setDateCustomClasses(value: DatepickerDateCustomClasses[]): Action {\n return {\n type: BsDatepickerActions.SET_DATE_CUSTOM_CLASSES,\n payload: value\n };\n }\n\n setLocale(locale: string): Action {\n return {\n type: BsDatepickerActions.SET_LOCALE,\n payload: locale\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class BsLocaleService {\n private _defaultLocale = 'en';\n private _locale = new BehaviorSubject<string>(this._defaultLocale);\n private _localeChange: Observable<string> = this._locale.asObservable();\n\n get locale(): BehaviorSubject<string> {\n return this._locale;\n }\n\n get localeChange(): Observable<string> {\n return this._localeChange;\n }\n\n get currentLocale(): string {\n return this._locale.getValue();\n }\n\n use(locale: string): void {\n if (locale === this.currentLocale) {\n return;\n }\n\n this._locale.next(locale);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { getFullYear, getMonth } from 'ngx-bootstrap/chronos';\n\nimport { BsDatepickerAbstractComponent } from '../base/bs-datepicker-container';\nimport { BsDatepickerActions } from './bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../bs-datepicker.config';\nimport { BsDatepickerStore } from './bs-datepicker.store';\nimport { BsLocaleService } from '../bs-locale.service';\n\nimport {\n BsDatepickerViewMode,\n BsNavigationEvent,\n CalendarCellViewModel,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DaysCalendarViewModel,\n DayViewModel,\n MonthsCalendarViewModel,\n YearsCalendarViewModel\n} from '../models';\n\n\n@Injectable()\nexport class BsDatepickerEffects {\n viewMode: Observable<BsDatepickerViewMode>;\n daysCalendar: Observable<DaysCalendarViewModel[]>;\n monthsCalendar: Observable<MonthsCalendarViewModel[]>;\n yearsCalendar: Observable<YearsCalendarViewModel[]>;\n options: Observable<DatepickerRenderOptions>;\n\n private _store: BsDatepickerStore;\n private _subs: Subscription[] = [];\n\n constructor(private _actions: BsDatepickerActions,\n private _localeService: BsLocaleService) {}\n\n init(_bsDatepickerStore: BsDatepickerStore): BsDatepickerEffects {\n this._store = _bsDatepickerStore;\n\n return this;\n }\n\n /** setters */\n\n setValue(value: Date): void {\n this._store.dispatch(this._actions.select(value));\n }\n\n setRangeValue(value: Date[]): void {\n this._store.dispatch(this._actions.selectRange(value));\n }\n\n setMinDate(value: Date): BsDatepickerEffects {\n this._store.dispatch(this._actions.minDate(value));\n\n return this;\n }\n\n setMaxDate(value: Date): BsDatepickerEffects {\n this._store.dispatch(this._actions.maxDate(value));\n\n return this;\n }\n\n setDaysDisabled(value: number[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.daysDisabled(value));\n\n return this;\n }\n\n setDatesDisabled(value: Date[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.datesDisabled(value));\n\n return this;\n }\n\n setDatesEnabled(value: Date[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.datesEnabled(value));\n\n return this;\n }\n\n setDisabled(value: boolean): BsDatepickerEffects {\n this._store.dispatch(this._actions.isDisabled(value));\n\n return this;\n }\n\n setDateCustomClasses(value: DatepickerDateCustomClasses[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.setDateCustomClasses(value));\n\n return this;\n }\n\n /* Set rendering options */\n setOptions(_config: BsDatepickerConfig): BsDatepickerEffects {\n const _options = Object.assign({locale: this._localeService.currentLocale}, _config);\n this._store.dispatch(this._actions.setOptions(_options));\n\n return this;\n }\n\n /** view to mode bindings */\n setBindings(container: BsDatepickerAbstractComponent): BsDatepickerEffects {\n container.daysCalendar = this._store\n .select(state => state.flaggedMonths)\n .pipe(\n filter(months => !!months)\n );\n\n // month calendar\n container.monthsCalendar = this._store\n .select(state => state.flaggedMonthsCalendar)\n .pipe(\n filter(months => !!months)\n );\n\n // year calendar\n container.yearsCalendar = this._store\n .select(state => state.yearsCalendarFlagged)\n .pipe(\n filter(years => !!years)\n );\n\n container.viewMode = this._store.select(state => state.view.mode);\n\n container.options = this._store\n .select(state => state.showWeekNumbers)\n .pipe(\n map(showWeekNumbers => ({showWeekNumbers}))\n );\n\n return this;\n }\n\n /** event handlers */\n setEventHandlers(container: BsDatepickerAbstractComponent): BsDatepickerEffects {\n container.setViewMode = (event: BsDatepickerViewMode): void => {\n this._store.dispatch(this._actions.changeViewMode(event));\n };\n\n container.navigateTo = (event: BsNavigationEvent): void => {\n this._store.dispatch(this._actions.navigateStep(event.step));\n };\n\n container.dayHoverHandler = (event: CellHoverEvent): void => {\n const _cell = event.cell as DayViewModel;\n if (_cell.isOtherMonth || _cell.isDisabled) {\n return;\n }\n\n this._store.dispatch(this._actions.hoverDay(event));\n _cell.isHovered = event.isHovered;\n };\n\n container.monthHoverHandler = (event: CellHoverEvent): void => {\n event.cell.isHovered = event.isHovered;\n };\n\n container.yearHoverHandler = (event: CellHoverEvent): void => {\n event.cell.isHovered = event.isHovered;\n };\n\n container.monthSelectHandler = (event: CalendarCellViewModel): void => {\n if (event.isDisabled) {\n return;\n }\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n month: getMonth(event.date),\n year: getFullYear(event.date)\n },\n viewMode: 'day'\n })\n );\n };\n\n container.yearSelectHandler = (event: CalendarCellViewModel): void => {\n if (event.isDisabled) {\n return;\n }\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n year: getFullYear(event.date)\n },\n viewMode: 'month'\n })\n );\n };\n\n return this;\n }\n\n registerDatepickerSideEffects(): BsDatepickerEffects {\n this._subs.push(\n this._store.select(state => state.view).subscribe(view => {\n this._store.dispatch(this._actions.calculate());\n })\n );\n\n // format calendar values on month model change\n this._subs.push(\n this._store\n .select(state => state.monthsModel)\n .pipe(\n filter(monthModel => !!monthModel)\n )\n .subscribe(month => this._store.dispatch(this._actions.format()))\n );\n\n // flag day values\n this._subs.push(\n this._store\n .select(state => state.formattedMonths)\n .pipe(\n filter(month => !!month)\n )\n .subscribe(month => this._store.dispatch(this._actions.flag()))\n );\n\n // flag day values\n this._subs.push(\n this._store\n .select(state => state.selectedDate)\n .pipe(\n filter(selectedDate => !!selectedDate)\n )\n .subscribe(selectedDate => this._store.dispatch(this._actions.flag()))\n );\n\n // flag for date range picker\n this._subs.push(\n this._store\n .select(state => state.selectedRange)\n .pipe(\n filter(selectedRange => !!selectedRange)\n )\n .subscribe(selectedRange => this._store.dispatch(this._actions.flag()))\n );\n\n // monthsCalendar\n this._subs.push(\n this._store\n .select(state => state.monthsCalendar)\n .subscribe(() => this._store.dispatch(this._actions.flag()))\n );\n\n // years calendar\n this._subs.push(\n this._store\n .select(state => state.yearsCalendarModel)\n .pipe(\n filter(state => !!state)\n )\n .subscribe(() => this._store.dispatch(this._actions.flag()))\n );\n\n // on hover\n this._subs.push(\n this._store\n .select(state => state.hoveredDate)\n .pipe(\n filter(hoveredDate => !!hoveredDate)\n )\n .subscribe(hoveredDate => this._store.dispatch(this._actions.flag()))\n );\n\n // date custom classes\n this._subs.push(\n this._store\n .select(state => state.dateCustomClasses)\n .pipe(\n filter(dateCustomClasses => !!dateCustomClasses)\n )\n .subscribe(dateCustomClasses => this._store.dispatch(this._actions.flag()))\n );\n\n // on locale change\n this._subs.push(\n this._localeService.localeChange\n .subscribe(locale => this._store.dispatch(this._actions.setLocale(locale)))\n );\n\n return this;\n }\n\n destroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n }\n}\n","import {\n BsDatepickerViewMode,\n DatepickerFormatOptions,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DaysCalendarModel,\n DaysCalendarViewModel,\n MonthsCalendarViewModel,\n MonthViewOptions,\n YearsCalendarViewModel\n} from '../models';\nimport { defaultMonthOptions } from './_defaults';\nimport { BsDatepickerConfig } from '../bs-datepicker.config';\n\nexport interface BsDatepickerViewState {\n date: Date;\n mode: BsDatepickerViewMode;\n}\n\nexport class BsDatepickerState\n implements DatepickerRenderOptions, DatepickerFormatOptions {\n // date picker\n selectedDate?: Date;\n // daterange picker\n selectedRange?: Date[];\n\n // initial date of calendar, today by default\n view: BsDatepickerViewState;\n\n isDisabled?: boolean;\n // bounds\n minDate?: Date;\n maxDate?: Date;\n daysDisabled?: number[];\n datesDisabled?: Date[];\n datesEnabled?: Date[];\n minMode?: BsDatepickerViewMode;\n dateCustomClasses?: DatepickerDateCustomClasses[];\n\n hoveredDate?: Date;\n hoveredMonth?: Date;\n hoveredYear?: Date;\n\n // days calendar\n monthsModel?: DaysCalendarModel[];\n formattedMonths?: DaysCalendarViewModel[];\n flaggedMonths?: DaysCalendarViewModel[];\n selectFromOtherMonth?: boolean;\n showPreviousMonth?: boolean; // dateRangePicker only;\n displayOneMonthRange?: boolean; // dateRangePicker only;\n\n // months calendar\n monthsCalendar?: MonthsCalendarViewModel[];\n flaggedMonthsCalendar?: MonthsCalendarViewModel[];\n\n // years calendar\n yearsCalendarModel?: YearsCalendarViewModel[];\n yearsCalendarFlagged?: YearsCalendarViewModel[];\n\n // options\n monthViewOptions: MonthViewOptions;\n\n // DatepickerRenderOptions\n showWeekNumbers?: boolean;\n displayMonths?: number;\n\n // DatepickerFormatOptions\n locale: string;\n\n monthTitle: string;\n yearTitle: string;\n\n dayLabel: string;\n monthLabel: string;\n yearLabel: string;\n\n weekNumbers: string;\n}\n\nconst _initialView: BsDatepickerViewState = { date: new Date(), mode: 'day' };\n\nexport const initialDatepickerState: BsDatepickerState = Object.assign(\n new BsDatepickerConfig(),\n {\n locale: 'en',\n view: _initialView,\n selectedRange: [],\n monthViewOptions: defaultMonthOptions\n }\n);\n","import {\n MonthViewOptions\n} from '../models';\n\nexport const defaultMonthOptions: MonthViewOptions = {\n width: 7,\n height: 6\n};\n","import {\n getDay,\n isFirstDayOfWeek,\n isAfter,\n isBefore,\n shiftDate,\n endOf,\n startOf,\n isArray,\n isSame\n} from 'ngx-bootstrap/chronos';\nimport { BsDatepickerState } from '../reducer/bs-datepicker.state';\n\nexport function getStartingDayOfCalendar(date: Date,\n options: { firstDayOfWeek?: number }): Date {\n if (isFirstDayOfWeek(date, options.firstDayOfWeek)) {\n return date;\n }\n\n const weekDay = getDay(date);\n const offset = calculateDateOffset(weekDay, options.firstDayOfWeek);\n\n return shiftDate(date, {day: -offset});\n}\n\nexport function calculateDateOffset(weekday: number, startingDayOffset: number): number {\n if (startingDayOffset === 0) {\n return weekday;\n }\n\n const offset = weekday - startingDayOffset % 7;\n\n return offset < 0 ? offset + 7 : offset;\n}\n\nexport function isMonthDisabled(date: Date, min: Date, max: Date): boolean {\n const minBound = min && isBefore(endOf(date, 'month'), min, 'day');\n const maxBound = max && isAfter(startOf(date, 'month'), max, 'day');\n\n return minBound || maxBound;\n}\n\nexport function isYearDisabled(date: Date, min: Date, max: Date): boolean {\n const minBound = min && isBefore(endOf(date, 'year'), min, 'day');\n const maxBound = max && isAfter(startOf(date, 'year'), max, 'day');\n\n return minBound || maxBound;\n}\n\nexport function isDisabledDate(date: Date, datesDisabled: Date[]): boolean {\n if (!datesDisabled || !isArray(datesDisabled) || !datesDisabled.length) {\n return false;\n }\n\n return datesDisabled.some((dateDisabled: Date) => isSame(date, dateDisabled, 'date'));\n}\n\nexport function isEnabledDate(date: Date, datesEnabled: Date[]): boolean {\n if (!datesEnabled || !isArray(datesEnabled) || !datesEnabled.length) {\n return false;\n }\n\n return !datesEnabled.some((enabledDate: Date) => isSame(date, enabledDate, 'date'));\n}\n\nexport function getYearsCalendarInitialDate(state: BsDatepickerState, calendarIndex = 0): Date {\n const model = state && state.yearsCalendarModel && state.yearsCalendarModel[calendarIndex];\n\n return model && model.years && model.years[0] && model.years[0][0] && model.years[0][0].date;\n}\n","import { TimeUnit, shiftDate } from 'ngx-bootstrap/chronos';\n\nexport type CreateMatrixCb<T> = (date: Date) => T;\n\nexport interface MatrixOptions {\n height: number;\n width: number;\n initialDate: Date;\n shift: TimeUnit;\n}\n\nexport function createMatrix<T>(\n options: MatrixOptions,\n fn: CreateMatrixCb<T>\n): T[][] {\n let prevValue = options.initialDate;\n const matrix: T[][] = new Array(options.height);\n for (let i = 0; i < options.height; i++) {\n matrix[i] = new Array(options.width);\n for (let j = 0; j < options.width; j++) {\n matrix[i][j] = fn(prevValue);\n prevValue = shiftDate(prevValue, options.shift);\n }\n }\n\n return matrix;\n}\n","// user and model input should handle parsing and validating input values\n// should accept some options\n// todo: split out formatting\nimport { DaysCalendarModel, MonthViewOptions } from '../models';\nimport { getFirstDayOfMonth } from 'ngx-bootstrap/chronos';\nimport { getStartingDayOfCalendar } from '../utils/bs-calendar-utils';\nimport { createMatrix } from '../utils/matrix-utils';\n\nexport function calcDaysCalendar(\n startingDate: Date,\n options: MonthViewOptions\n): DaysCalendarModel {\n const firstDay = getFirstDayOfMonth(startingDate);\n const initialDate = getStartingDayOfCalendar(firstDay, options);\n\n const matrixOptions = {\n width: options.width,\n height: options.height,\n initialDate,\n shift: { day: 1 }\n };\n const daysMatrix = createMatrix<Date>(matrixOptions, date => date);\n\n return {\n daysMatrix,\n month: firstDay\n };\n}\n","import {\n DatepickerFormatOptions,\n DaysCalendarModel,\n DaysCalendarViewModel\n} from '../models';\nimport { formatDate, getLocale } from 'ngx-bootstrap/chronos';\n\nexport function formatDaysCalendar(daysCalendar: DaysCalendarModel,\n formatOptions: DatepickerFormatOptions,\n monthIndex: number): DaysCalendarViewModel {\n return {\n month: daysCalendar.month,\n monthTitle: formatDate(\n daysCalendar.month,\n formatOptions.monthTitle,\n formatOptions.locale\n ),\n yearTitle: formatDate(\n daysCalendar.month,\n formatOptions.yearTitle,\n formatOptions.locale\n ),\n weekNumbers: getWeekNumbers(\n daysCalendar.daysMatrix,\n formatOptions.weekNumbers,\n formatOptions.locale\n ),\n weekdays: getShiftedWeekdays(formatOptions.locale),\n weeks: daysCalendar.daysMatrix.map((week: Date[], weekIndex: number) => ({\n days: week.map((date: Date, dayIndex: number) => ({\n date,\n label: formatDate(date, formatOptions.dayLabel, formatOptions.locale),\n monthIndex,\n weekIndex,\n dayIndex\n }))\n }))\n };\n}\n\nexport function getWeekNumbers(daysMatrix: Date[][],\n format: string,\n locale: string): string[] {\n return daysMatrix.map(\n (days: Date[]) => (days[0] ? formatDate(days[0], format, locale) : '')\n );\n}\n\nexport function getShiftedWeekdays(locale: string): string[] {\n const _locale = getLocale(locale);\n const weekdays = _locale.weekdaysShort() as string[];\n const firstDayOfWeek = _locale.firstDayOfWeek();\n\n return [...weekdays.slice(firstDayOfWeek), ...weekdays.slice(0, firstDayOfWeek)];\n}\n","import {\n DaysCalendarViewModel,\n DayViewModel,\n WeekViewModel,\n DatepickerDateCustomClasses\n} from '../models';\n\nimport {\n isAfter,\n isBefore,\n isDisabledDay,\n isSameDay,\n isSameMonth,\n shiftDate\n} from 'ngx-bootstrap/chronos';\n\nimport { isMonthDisabled, isDisabledDate, isEnabledDate } from '../utils/bs-calendar-utils';\n\nexport interface FlagDaysCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n daysDisabled: number[];\n datesDisabled: Date[];\n datesEnabled: Date[];\n hoveredDate: Date;\n selectedDate: Date;\n selectedRange: Date[];\n displayMonths: number;\n monthIndex: number;\n dateCustomClasses: DatepickerDateCustomClasses[];\n}\n\nexport function flagDaysCalendar(\n formattedMonth: DaysCalendarViewModel,\n options: FlagDaysCalendarOptions\n): DaysCalendarViewModel {\n formattedMonth.weeks.forEach((week: WeekViewModel) => {\n /* tslint:disable-next-line: cyclomatic-complexity */\n week.days.forEach((day: DayViewModel, dayIndex: number) => {\n // datepicker\n const isOtherMonth = !isSameMonth(day.date, formattedMonth.month);\n\n const isHovered =\n !isOtherMonth && isSameDay(day.date, options.hoveredDate);\n // date range picker\n const isSelectionStart =\n !isOtherMonth &&\n options.selectedRange &&\n isSameDay(day.date, options.selectedRange[0]);\n const isSelectionEnd =\n !isOtherMonth &&\n options.selectedRange &&\n isSameDay(day.date, options.selectedRange[1]);\n\n const isSelected =\n (!isOtherMonth && isSameDay(day.date, options.selectedDate)) ||\n isSelectionStart ||\n isSelectionEnd;\n\n const isInRange =\n !isOtherMonth &&\n options.selectedRange &&\n isDateInRange(day.date, options.selectedRange, options.hoveredDate);\n\n const isDisabled =\n options.isDisabled ||\n isBefore(day.date, options.minDate, 'day') ||\n isAfter(day.date, options.maxDate, 'day') ||\n isDisabledDay(day.date, options.daysDisabled) ||\n isDisabledDate(day.date, options.datesDisabled) ||\n isEnabledDate(day.date, options.datesEnabled);\n\n const currentDate = new Date();\n const isToday = !isOtherMonth && isSameDay(day.date, currentDate);\n\n const customClasses = options.dateCustomClasses && options.dateCustomClasses\n .map(dcc => isSameDay(day.date, dcc.date) ? dcc.classes : [])\n .reduce((previousValue, currentValue) => previousValue.concat(currentValue), [])\n .join(' ')\n || '';\n\n\n // decide update or not\n const newDay = Object.assign({}, day, {\n isOtherMonth,\n isHovered,\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isInRange,\n isDisabled,\n isToday,\n customClasses\n });\n\n if (\n day.isOtherMonth !== newDay.isOtherMonth ||\n day.isHovered !== newDay.isHovered ||\n day.isSelected !== newDay.isSelected ||\n day.isSelectionStart !== newDay.isSelectionStart ||\n day.isSelectionEnd !== newDay.isSelectionEnd ||\n day.isDisabled !== newDay.isDisabled ||\n day.isInRange !== newDay.isInRange ||\n day.customClasses !== newDay.customClasses\n ) {\n week.days[dayIndex] = newDay;\n }\n });\n });\n\n // todo: add check for linked calendars\n formattedMonth.hideLeftArrow =\n options.isDisabled ||\n (options.monthIndex > 0 && options.monthIndex !== options.displayMonths);\n formattedMonth.hideRightArrow =\n options.isDisabled ||\n (options.monthIndex < options.displayMonths &&\n options.monthIndex + 1 !== options.displayMonths);\n\n formattedMonth.disableLeftArrow = isMonthDisabled(\n shiftDate(formattedMonth.month, { month: -1 }),\n options.minDate,\n options.maxDate\n );\n formattedMonth.disableRightArrow = isMonthDisabled(\n shiftDate(formattedMonth.month, { month: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return formattedMonth;\n}\n\nfunction isDateInRange(\n date: Date,\n selectedRange: Date[],\n hoveredDate: Date\n): boolean {\n if (!date || !selectedRange[0]) {\n return false;\n }\n\n if (selectedRange[1]) {\n return date > selectedRange[0] && date <= selectedRange[1];\n }\n\n if (hoveredDate) {\n return date > selectedRange[0] && date <= hoveredDate;\n }\n\n return false;\n}\n","import { BsDatepickerViewMode } from '../models';\n\nexport function canSwitchMode(mode: BsDatepickerViewMode, minMode?: BsDatepickerViewMode): boolean {\n return minMode ? mode >= minMode : true;\n}\n","import {\n DatepickerFormatOptions,\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { startOf, formatDate } from 'ngx-bootstrap/chronos';\nimport { createMatrix } from '../utils/matrix-utils';\n\nconst height = 4;\nconst width = 3;\nconst shift = { month: 1 };\n\nexport function formatMonthsCalendar(\n viewDate: Date,\n formatOptions: DatepickerFormatOptions\n): MonthsCalendarViewModel {\n const initialDate = startOf(viewDate, 'year');\n const matrixOptions = { width, height, initialDate, shift };\n const monthMatrix = createMatrix<\n CalendarCellViewModel\n >(matrixOptions, date => ({\n date,\n label: formatDate(date, formatOptions.monthLabel, formatOptions.locale)\n }));\n\n return {\n months: monthMatrix,\n monthTitle: '',\n yearTitle: formatDate(\n viewDate,\n formatOptions.yearTitle,\n formatOptions.locale\n )\n };\n}\n","import {\n DatepickerFormatOptions,\n YearsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { shiftDate, formatDate } from 'ngx-bootstrap/chronos';\nimport { createMatrix } from '../utils/matrix-utils';\n\nconst height = 4;\nconst width = 4;\nexport const yearsPerCalendar = height * width;\nexport const initialYearShift = (Math.floor(yearsPerCalendar / 2) - 1) * -1;\nconst shift = { year: 1 };\n\nexport function formatYearsCalendar(\n viewDate: Date,\n formatOptions: DatepickerFormatOptions,\n previousInitialDate?: Date\n): YearsCalendarViewModel {\n const initialDate = calculateInitialDate(viewDate, previousInitialDate);\n const matrixOptions = { width, height, initialDate, shift };\n const yearsMatrix = createMatrix<\n CalendarCellViewModel\n >(matrixOptions, date => ({\n date,\n label: formatDate(date, formatOptions.yearLabel, formatOptions.locale)\n }));\n const yearTitle = formatYearRangeTitle(yearsMatrix, formatOptions);\n\n return {\n years: yearsMatrix,\n monthTitle: '',\n yearTitle\n };\n}\n\nfunction calculateInitialDate(viewDate: Date, previousInitialDate?: Date): Date {\n if (previousInitialDate\n && viewDate.getFullYear() >= previousInitialDate.getFullYear()\n && viewDate.getFullYear() < previousInitialDate.getFullYear() + yearsPerCalendar) {\n return previousInitialDate;\n }\n\n return shiftDate(viewDate, { year: initialYearShift });\n}\n\nfunction formatYearRangeTitle(\n yearsMatrix: CalendarCellViewModel[][],\n formatOptions: DatepickerFormatOptions\n): string {\n const from = formatDate(\n yearsMatrix[0][0].date,\n formatOptions.yearTitle,\n formatOptions.locale\n );\n const to = formatDate(\n yearsMatrix[height - 1][width - 1].date,\n formatOptions.yearTitle,\n formatOptions.locale\n );\n\n return `${from} - ${to}`;\n}\n","// tslint:disable:max-file-line-count\nimport { BsDatepickerState, initialDatepickerState } from './bs-datepicker.state';\nimport { Action } from 'ngx-bootstrap/mini-ngrx';\nimport { BsDatepickerActions } from './bs-datepicker.actions';\nimport { calcDaysCalendar } from '../engine/calc-days-calendar';\nimport { formatDaysCalendar } from '../engine/format-days-calendar';\nimport { flagDaysCalendar } from '../engine/flag-days-calendar';\nimport {\n setFullDate,\n shiftDate,\n isArray,\n isDateValid,\n startOf,\n getLocale,\n isAfter,\n isBefore,\n isSame\n} from 'ngx-bootstrap/chronos';\nimport { canSwitchMode } from '../engine/view-mode';\nimport { formatMonthsCalendar } from '../engine/format-months-calendar';\nimport { flagMonthsCalendar } from '../engine/flag-months-calendar';\nimport { formatYearsCalendar, initialYearShift, yearsPerCalendar } from '../engine/format-years-calendar';\nimport { flagYearsCalendar } from '../engine/flag-years-calendar';\nimport { BsViewNavigationEvent, DatepickerFormatOptions, BsDatepickerViewMode } from '../models';\nimport { getYearsCalendarInitialDate } from '../utils/bs-calendar-utils';\n\n\n/* tslint:disable-next-line: cyclomatic-complexity */\nexport function bsDatepickerReducer(state = initialDatepickerState,\n action: Action): BsDatepickerState {\n switch (action.type) {\n case BsDatepickerActions.CALCULATE: {\n return calculateReducer(state);\n }\n\n case BsDatepickerActions.FORMAT: {\n return formatReducer(state, action);\n }\n\n case BsDatepickerActions.FLAG: {\n return flagReducer(state, action);\n }\n\n case BsDatepickerActions.NAVIGATE_OFFSET: {\n return navigateOffsetReducer(state, action);\n }\n\n case BsDatepickerActions.NAVIGATE_TO: {\n const payload: BsViewNavigationEvent = action.payload;\n\n const date = setFullDate(state.view.date, payload.unit);\n let newState;\n let mode: BsDatepickerViewMode;\n if (canSwitchMode(payload.viewMode, state.minMode)) {\n mode = payload.viewMode;\n newState = { view: { date, mode } };\n } else {\n mode = state.view.mode;\n newState = { selectedDate: date, view: { date, mode } };\n }\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.CHANGE_VIEWMODE: {\n if (!canSwitchMode(action.payload, state.minMode)) {\n return state;\n }\n const date = state.view.date;\n const mode = action.payload;\n const newState = { view: { date, mode } };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.HOVER: {\n return Object.assign({}, state, { hoveredDate: action.payload });\n }\n\n case BsDatepickerActions.SELECT: {\n const newState = {\n selectedDate: action.payload,\n view: state.view\n };\n\n const mode = state.view.mode;\n const _date = action.payload || state.view.date;\n const date = getViewDate(_date, state.minDate, state.maxDate);\n newState.view = { mode, date };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.SET_OPTIONS: {\n const newState = action.payload;\n // preserve view mode\n const mode = newState.minMode ? newState.minMode : state.view.mode;\n const _viewDate = isDateValid(newState.value) && newState.value\n || isArray(newState.value) && isDateValid(newState.value[0]) && newState.value[0]\n || state.view.date;\n const date = getViewDate(_viewDate, newState.minDate, newState.maxDate);\n newState.view = { mode, date };\n // update selected value\n if (newState.value) {\n // if new value is array we work with date range\n if (isArray(newState.value)) {\n newState.selectedRange = newState.value;\n }\n\n // if new value is a date -> datepicker\n if (newState.value instanceof Date) {\n newState.selectedDate = newState.value;\n }\n\n // provided value is not supported :)\n // need to report it somehow\n }\n\n return Object.assign({}, state, newState);\n }\n\n // date range picker\n case BsDatepickerActions.SELECT_RANGE: {\n const newState = {\n selectedRange: action.payload,\n view: state.view\n };\n\n const mode = state.view.mode;\n const _date = action.payload && action.payload[0] || state.view.date;\n const date = getViewDate(_date, state.minDate, state.maxDate);\n newState.view = { mode, date };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.SET_MIN_DATE: {\n return Object.assign({}, state, {\n minDate: action.payload\n });\n }\n case BsDatepickerActions.SET_MAX_DATE: {\n return Object.assign({}, state, {\n maxDate: action.payload\n });\n }\n case BsDatepickerActions.SET_IS_DISABLED: {\n return Object.assign({}, state, {\n isDisabled: action.payload\n });\n }\n case BsDatepickerActions.SET_DATE_CUSTOM_CLASSES: {\n return Object.assign({}, state, {\n dateCustomClasses: action.payload\n });\n }\n\n default:\n return state;\n }\n}\n\nfunction calculateReducer(state: BsDatepickerState): BsDatepickerState {\n // how many calendars\n const displayMonths = (state.displayOneMonthRange &&\n isDisplayOneMonth(state.view.date, state.minDate, state.maxDate)) ? 1 : state.displayMonths;\n\n // use selected date on initial rendering if set\n let viewDate = state.view.date;\n\n if (state.view.mode === 'day') {\n if (state.showPreviousMonth && state.selectedRange.length === 0) {\n viewDate = shiftDate(viewDate, { month: -1 });\n }\n\n state.monthViewOptions.firstDayOfWeek = getLocale(state.locale).firstDayOfWeek();\n const monthsModel = new Array(displayMonths);\n for (let monthIndex = 0; monthIndex < displayMonths; monthIndex++) {\n // todo: for unlinked calendars it will be harder\n monthsModel[monthIndex] = calcDaysCalendar(\n viewDate,\n state.monthViewOptions\n );\n viewDate = shiftDate(viewDate, { month: 1 });\n }\n\n return Object.assign({}, state, { monthsModel });\n }\n\n if (state.view.mode === 'month') {\n const monthsCalendar = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n monthsCalendar[calendarIndex] = formatMonthsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 1 });\n }\n\n return Object.assign({}, state, { monthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarModel = new Array(displayMonths);\n\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n yearsCalendarModel[calendarIndex] = formatYearsCalendar(\n viewDate,\n getFormatOptions(state),\n state.minMode === 'year' ? getYearsCalendarInitialDate(state, calendarIndex) : undefined\n );\n viewDate = shiftDate(viewDate, { year: yearsPerCalendar });\n }\n\n return Object.assign({}, state, { yearsCalendarModel });\n }\n\n return state;\n}\n\nfunction formatReducer(state: BsDatepickerState,\n action: Action): BsDatepickerState {\n if (state.view.mode === 'day') {\n const formattedMonths = state.monthsModel.map((month, monthIndex) =>\n formatDaysCalendar(month, getFormatOptions(state), monthIndex)\n );\n\n return Object.assign({}, state, { formattedMonths });\n }\n\n // how many calendars\n const displayMonths = state.displayMonths;\n // check initial rendering\n // use selected date on initial rendering if set\n let viewDate = state.view.date;\n\n if (state.view.mode === 'month') {\n const monthsCalendar = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n monthsCalendar[calendarIndex] = formatMonthsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 1 });\n }\n\n return Object.assign({}, state, { monthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarModel = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n yearsCalendarModel[calendarIndex] = formatYearsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 16 });\n }\n\n return Object.assign({}, state, { yearsCalendarModel });\n }\n\n return state;\n}\n\nfunction flagReducer(state: BsDatepickerState,\n action: Action): BsDatepickerState {\n const displayMonths = isDisplayOneMonth(state.view.date, state.minDate, state.maxDate) ? 1 : state.displayMonths;\n if (state.view.mode === 'day') {\n const flaggedMonths = state.formattedMonths.map(\n (formattedMonth, monthIndex) =>\n flagDaysCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n daysDisabled: state.daysDisabled,\n datesDisabled: state.datesDisabled,\n datesEnabled: state.datesEnabled,\n hoveredDate: state.hoveredDate,\n selectedDate: state.selectedDate,\n selectedRange: state.selectedRange,\n displayMonths,\n dateCustomClasses: state.dateCustomClasses,\n monthIndex\n })\n );\n\n return Object.assign({}, state, { flaggedMonths });\n }\n\n if (state.view.mode === 'month') {\n const flaggedMonthsCalendar = state.monthsCalendar.map(\n (formattedMonth, monthIndex) =>\n flagMonthsCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n hoveredMonth: state.hoveredMonth,\n selectedDate: state.selectedDate,\n displayMonths,\n monthIndex\n })\n );\n\n return Object.assign({}, state, { flaggedMonthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarFlagged = state.yearsCalendarModel.map(\n (formattedMonth, yearIndex) =>\n flagYearsCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n hoveredYear: state.hoveredYear,\n selectedDate: state.selectedDate,\n displayMonths,\n yearIndex\n })\n );\n\n return Object.assign({}, state, { yearsCalendarFlagged });\n }\n\n return state;\n}\n\nfunction navigateOffsetReducer(state: BsDatepickerState, action: Action): BsDatepickerState {\n const newState = {\n view: {\n mode: state.view.mode,\n date: shiftViewDate(state, action)\n }\n };\n\n return Object.assign({}, state, newState);\n}\n\nfunction shiftViewDate(state: BsDatepickerState, action: Action): Date {\n if (state.view.mode === 'year' && state.minMode === 'year') {\n const initialDate = getYearsCalendarInitialDate(state, 0);\n const middleDate = shiftDate(initialDate, { year: -initialYearShift });\n\n return shiftDate(middleDate, action.payload);\n }\n\n return shiftDate(startOf(state.view.date, 'month'), action.payload);\n}\n\nfunction getFormatOptions(state: BsDatepickerState): DatepickerFormatOptions {\n return {\n locale: state.locale,\n\n monthTitle: state.monthTitle,\n yearTitle: state.yearTitle,\n\n dayLabel: state.dayLabel,\n monthLabel: state.monthLabel,\n yearLabel: state.yearLabel,\n\n weekNumbers: state.weekNumbers\n };\n}\n\n/**\n * if view date is provided (bsValue|ngModel) it should be shown\n * if view date is not provider:\n * if minDate>currentDate (default view value), show minDate\n * if maxDate<currentDate(default view value) show maxDate\n */\nfunction getViewDate(viewDate: Date | Date[], minDate: Date, maxDate: Date) {\n const _date = Array.isArray(viewDate) ? viewDate[0] : viewDate;\n\n if (minDate && isAfter(minDate, _date, 'day')) {\n return minDate;\n }\n\n if (maxDate && isBefore(maxDate, _date, 'day')) {\n return maxDate;\n }\n\n return _date;\n}\n\nfunction isDisplayOneMonth(viewDate: Date, minDate: Date, maxDate: Date) {\n if (maxDate && isSame(maxDate, viewDate, 'day')) {\n return true;\n }\n\n if (minDate && maxDate && minDate.getMonth() === maxDate.getMonth()) {\n return true;\n }\n\n return false;\n}\n","import { isSameMonth, shiftDate } from 'ngx-bootstrap/chronos';\nimport {\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { isMonthDisabled, isYearDisabled } from '../utils/bs-calendar-utils';\n\nexport interface FlagMonthCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n hoveredMonth: Date;\n selectedDate: Date;\n displayMonths: number;\n monthIndex: number;\n}\n\nexport function flagMonthsCalendar(\n monthCalendar: MonthsCalendarViewModel,\n options: FlagMonthCalendarOptions\n): MonthsCalendarViewModel {\n monthCalendar.months.forEach(\n (months: CalendarCellViewModel[], rowIndex: number) => {\n months.forEach((month: CalendarCellViewModel, monthIndex: number) => {\n const isHovered = isSameMonth(month.date, options.hoveredMonth);\n const isDisabled =\n options.isDisabled ||\n isMonthDisabled(month.date, options.minDate, options.maxDate);\n const isSelected = isSameMonth(month.date, options.selectedDate);\n const newMonth = Object.assign(/*{},*/ month, {\n isHovered,\n isDisabled,\n isSelected\n });\n if (\n month.isHovered !== newMonth.isHovered ||\n month.isDisabled !== newMonth.isDisabled ||\n month.isSelected !== newMonth.isSelected\n ) {\n monthCalendar.months[rowIndex][monthIndex] = newMonth;\n }\n });\n }\n );\n\n // todo: add check for linked calendars\n monthCalendar.hideLeftArrow =\n options.monthIndex > 0 && options.monthIndex !== options.displayMonths;\n monthCalendar.hideRightArrow =\n options.monthIndex < options.displayMonths &&\n options.monthIndex + 1 !== options.displayMonths;\n\n monthCalendar.disableLeftArrow = isYearDisabled(\n shiftDate(monthCalendar.months[0][0].date, { year: -1 }),\n options.minDate,\n options.maxDate\n );\n monthCalendar.disableRightArrow = isYearDisabled(\n shiftDate(monthCalendar.months[0][0].date, { year: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return monthCalendar;\n}\n","import { isSameYear, shiftDate } from 'ngx-bootstrap/chronos';\nimport { YearsCalendarViewModel, CalendarCellViewModel } from '../models';\nimport { isYearDisabled } from '../utils/bs-calendar-utils';\n\nexport interface FlagYearsCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n hoveredYear: Date;\n selectedDate: Date;\n displayMonths: number;\n yearIndex: number;\n}\n\nexport function flagYearsCalendar(\n yearsCalendar: YearsCalendarViewModel,\n options: FlagYearsCalendarOptions\n): YearsCalendarViewModel {\n yearsCalendar.years.forEach(\n (years: CalendarCellViewModel[], rowIndex: number) => {\n years.forEach((year: CalendarCellViewModel, yearIndex: number) => {\n const isHovered = isSameYear(year.date, options.hoveredYear);\n const isDisabled =\n options.isDisabled ||\n isYearDisabled(year.date, options.minDate, options.maxDate);\n const isSelected = isSameYear(year.date, options.selectedDate);\n\n const newMonth = Object.assign(/*{},*/ year, { isHovered, isDisabled, isSelected });\n if (\n year.isHovered !== newMonth.isHovered ||\n year.isDisabled !== newMonth.isDisabled ||\n year.isSelected !== newMonth.isSelected\n ) {\n yearsCalendar.years[rowIndex][yearIndex] = newMonth;\n }\n });\n }\n );\n\n // todo: add check for linked calendars\n yearsCalendar.hideLeftArrow =\n options.yearIndex > 0 && options.yearIndex !== options.displayMonths;\n yearsCalendar.hideRightArrow =\n options.yearIndex < options.displayMonths &&\n options.yearIndex + 1 !== options.displayMonths;\n\n yearsCalendar.disableLeftArrow = isYearDisabled(\n shiftDate(yearsCalendar.years[0][0].date, { year: -1 }),\n options.minDate,\n options.maxDate\n );\n const i = yearsCalendar.years.length - 1;\n const j = yearsCalendar.years[i].length - 1;\n yearsCalendar.disableRightArrow = isYearDisabled(\n shiftDate(yearsCalendar.years[i][j].date, { year: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return yearsCalendar;\n}\n","import { Injectable } from '@angular/core';\nimport { MiniStore, Action, MiniState } from 'ngx-bootstrap/mini-ngrx';\nimport { BsDatepickerState, initialDatepickerState } from './bs-datepicker.state';\nimport { BehaviorSubject } from 'rxjs';\nimport { bsDatepickerReducer } from './bs-datepicker.reducer';\n\n@Injectable()\nexport class BsDatepickerStore extends MiniStore<BsDatepickerState> {\n constructor() {\n const _dispatcher = new BehaviorSubject<Action>({\n type: '[datepicker] dispatcher init'\n });\n const state = new MiniState<BsDatepickerState>(\n initialDatepickerState,\n _dispatcher,\n bsDatepickerReducer\n );\n super(_dispatcher, bsDatepickerReducer, state);\n }\n}\n","import {\n animate,\n style,\n AnimationTriggerMetadata,\n state,\n transition,\n trigger\n} from '@angular/animations';\n\nexport const DATEPICKER_ANIMATION_TIMING = '220ms cubic-bezier(0, 0, 0.2, 1)';\n\nexport const datepickerAnimation: AnimationTriggerMetadata =\n trigger('datepickerAnimation', [\n state('animated-down', style({ height: '*', overflow: 'hidden'})),\n transition('* => animated-down', [\n style({ height: 0, overflow: 'hidden' }),\n animate(DATEPICKER_ANIMATION_TIMING)\n ]),\n state('animated-up', style({ height: '*', overflow: 'hidden'})),\n transition('* => animated-up', [\n style({ height: '*', overflow: 'hidden' }),\n animate(DATEPICKER_ANIMATION_TIMING)\n ]),\n transition('* => unanimated', animate('0s'))\n ]);\n","import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { BsDatepickerAbstractComponent } from '../../base/bs-datepicker-container';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { DayViewModel } from '../../models';\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { Subscription } from 'rxjs';\nimport { datepickerAnimation } from '../../datepicker-animations';\nimport { take } from 'rxjs/operators';\n\n@Component({\n selector: 'bs-datepicker-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n class: 'bottom',\n '(click)': '_stopPropagation($event)',\n role: 'dialog',\n 'aria-label': 'calendar'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDatepickerContainerComponent extends BsDatepickerAbstractComponent\n implements OnInit, OnDestroy {\n\n set value(value: Date) {\n this._effects.setValue(value);\n }\n\n valueChange: EventEmitter<Date> = new EventEmitter<Date>();\n animationState = 'void';\n\n _subs: Subscription[] = [];\n constructor(\n _renderer: Renderer2,\n private _config: BsDatepickerConfig,\n private _store: BsDatepickerStore,\n private _element: ElementRef,\n private _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n private _positionService: PositioningService\n ) {\n super();\n this._effects = _effects;\n\n _renderer.setStyle(_element.nativeElement, 'display', 'block');\n _renderer.setStyle(_element.nativeElement, 'position', 'absolute');\n }\n\n ngOnInit(): void {\n this._positionService.setOptions({\n modifiers: { flip: { enabled: this._config.adaptivePosition } },\n allowedPositions: ['top', 'bottom']\n });\n\n this._positionService.event$\n .pipe(\n take(1)\n )\n .subscribe(() => {\n this._positionService.disable();\n\n if (this._config.isAnimated) {\n this.animationState = this.isTopPosition ? 'animated-up' : 'animated-down';\n\n return;\n }\n\n this.animationState = 'unanimated';\n });\n\n this.isOtherMonthsActive = this._config.selectFromOtherMonth;\n this.containerClass = this._config.containerClass;\n this._effects\n .init(this._store)\n // intial state options\n .setOptions(this._config)\n // data binding view --> model\n .setBindings(this)\n // set event handlers\n .setEventHandlers(this)\n .registerDatepickerSideEffects();\n\n // todo: move it somewhere else\n // on selected date change\n this._subs.push(\n this._store\n /* tslint:disable-next-line: no-any */\n .select((state: any) => state.selectedDate)\n /* tslint:disable-next-line: no-any */\n .subscribe((date: any) => this.valueChange.emit(date))\n );\n }\n\n get isTopPosition(): boolean {\n return this._element.nativeElement.classList.contains('top');\n }\n\n positionServiceEnable(): void {\n this._positionService.enable();\n }\n\n daySelectHandler(day: DayViewModel): void {\n if (!day) {\n return;\n }\n\n const isDisabled = this.isOtherMonthsActive ? day.isDisabled : (day.isOtherMonth || day.isDisabled);\n\n if (isDisabled) {\n return;\n }\n\n this._store.dispatch(this._actions.select(day.date));\n }\n\n ngOnDestroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n this._effects.destroy();\n }\n}\n","import {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef, AfterViewInit\n} from '@angular/core';\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { BsDatepickerContainerComponent } from './themes/bs/bs-datepicker-container.component';\nimport { Subscription, Subject, BehaviorSubject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDatepickerViewMode, DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: '[bsDatepicker]',\n exportAs: 'bsDatepicker'\n})\nexport class BsDatepickerDirective implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n /**\n * Placement of a datepicker. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n @Input() triggers = 'click';\n /**\n * Close datepicker on outside click\n */\n @Input() outsideClick = true;\n /**\n * A selector specifying the element the datepicker should be appended to.\n */\n @Input() container = 'body';\n\n @Input() outsideEsc = true;\n\n /**\n * Returns whether or not the datepicker is currently being shown\n */\n @Input()\n get isOpen(): boolean {\n return this._datepicker.isShown;\n }\n\n set isOpen(value: boolean) {\n this.isOpen$.next(value);\n }\n\n /**\n * Emits an event when the datepicker is shown\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onShown: EventEmitter<any>;\n /**\n * Emits an event when the datepicker is hidden\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onHidden: EventEmitter<any>;\n\n _bsValue: Date;\n isOpen$: BehaviorSubject<boolean>;\n isDestroy$: Subject<void>;\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date) {\n if (this._bsValue && value && this._bsValue.getTime() === value.getTime()) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() bsConfig: Partial<BsDatepickerConfig>;\n /**\n * Indicates whether datepicker's content is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n\n /**\n * Minimum view mode : day, month, or year\n */\n @Input() minMode: BsDatepickerViewMode;\n\n /**\n * Disable Certain days in the week\n */\n @Input() daysDisabled: number[];\n\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Enable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Emits when datepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDatepickerContainerComponent>;\n private _datepickerRef: ComponentRef<BsDatepickerContainerComponent>;\n\n constructor(public _config: BsDatepickerConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDatepickerContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n this.onShown = this._datepicker.onShown;\n this.onHidden = this._datepicker.onHidden;\n this.isOpen$ = new BehaviorSubject(this.isOpen);\n }\n\n ngOnInit(): void {\n this.isDestroy$ = new Subject();\n this._datepicker.listen({\n outsideClick: this.outsideClick,\n outsideEsc: this.outsideEsc,\n triggers: this.triggers,\n show: () => this.show()\n });\n this.setConfig();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n }\n\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n }\n }\n\n ngAfterViewInit(): void {\n this.isOpen$.pipe(\n filter(isOpen => isOpen !== this.isOpen),\n takeUntil(this.isDestroy$)\n )\n .subscribe(() => this.toggle());\n }\n\n /**\n * Opens an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n show(): void {\n if (this._datepicker.isShown) {\n return;\n }\n\n this.setConfig();\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDatepickerContainerComponent)\n .to(this.container)\n .position({attachment: this.placement})\n .show({placement: this.placement});\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange.subscribe((value: Date) => {\n this.bsValue = value;\n this.hide();\n })\n );\n }\n\n /**\n * Closes an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n hide(): void {\n if (this.isOpen) {\n this._datepicker.hide();\n }\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n\n if (this._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elementRef.nativeElement).focus();\n }\n }\n\n /**\n * Toggles an element’s datepicker. This is considered a “manual” triggering\n * of the datepicker.\n */\n toggle(): void {\n if (this.isOpen) {\n return this.hide();\n }\n\n this.show();\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n minMode: this.minMode || this.bsConfig && this.bsConfig.minMode\n });\n }\n\n ngOnDestroy(): void {\n this._datepicker.dispose();\n this.isOpen$.next(false);\n if (this.isDestroy$) {\n this.isDestroy$.next();\n this.isDestroy$.complete();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable()\nexport class BsDatepickerInlineConfig extends BsDatepickerConfig { }\n","import { Component, ElementRef, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { BsDatepickerContainerComponent } from './bs-datepicker-container.component';\n\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\n\nimport { PositioningService } from 'ngx-bootstrap/positioning';\nimport { datepickerAnimation } from '../../datepicker-animations';\n\n@Component({\n selector: 'bs-datepicker-inline-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n '(click)': '_stopPropagation($event)'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDatepickerInlineContainerComponent extends BsDatepickerContainerComponent\n implements OnInit, OnDestroy {\n\n constructor(\n _renderer: Renderer2,\n _config: BsDatepickerConfig,\n _store: BsDatepickerStore,\n _element: ElementRef,\n _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n _positioningService: PositioningService\n ) {\n super(_renderer, _config, _store, _element, _actions, _effects, _positioningService);\n\n _renderer.setStyle(_element.nativeElement, 'display', 'inline-block');\n _renderer.setStyle(_element.nativeElement, 'position', 'static');\n }\n}\n","import {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef\n} from '@angular/core';\n\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\n\nimport { Subscription } from 'rxjs';\n\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDatepickerInlineConfig } from './bs-datepicker-inline.config';\nimport { BsDatepickerInlineContainerComponent } from './themes/bs/bs-datepicker-inline-container.component';\nimport { DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: 'bs-datepicker-inline',\n exportAs: 'bsDatepickerInline'\n})\nexport class BsDatepickerInlineDirective implements OnInit, OnDestroy, OnChanges {\n _bsValue: Date;\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() bsConfig: Partial<BsDatepickerInlineConfig>;\n /**\n * Indicates whether datepicker is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Enable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Emits when datepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDatepickerInlineContainerComponent>;\n private _datepickerRef: ComponentRef<BsDatepickerInlineContainerComponent>;\n\n constructor(\n public _config: BsDatepickerInlineConfig,\n private _elementRef: ElementRef,\n _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory\n ) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDatepickerInlineContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n }\n\n ngOnInit(): void {\n this.setConfig();\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange.subscribe((value: Date) => {\n this.bsValue = value;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n this.setConfig();\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n this.setConfig();\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n this.setConfig();\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n this._datepickerRef.instance.value = this._bsValue;\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n this.setConfig();\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n this.setConfig();\n }\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n if (this._datepicker) {\n this._datepicker.hide();\n }\n\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled\n });\n\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDatepickerInlineContainerComponent)\n .to(this._elementRef)\n .show();\n }\n\n ngOnDestroy(): any {\n this._datepicker.dispose();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable()\nexport class BsDaterangepickerInlineConfig extends BsDatepickerConfig {\n // DatepickerRenderOptions\n displayMonths = 2;\n /** turn on/off animation */\n isAnimated = false;\n}\n","import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { BsDatepickerAbstractComponent } from '../../base/bs-datepicker-container';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { DayViewModel } from '../../models';\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { Subscription } from 'rxjs';\nimport { datepickerAnimation } from '../../datepicker-animations';\nimport { take } from 'rxjs/operators';\nimport { BsCustomDates } from './bs-custom-dates-view.component';\n\n@Component({\n selector: 'bs-daterangepicker-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n class: 'bottom',\n '(click)': '_stopPropagation($event)',\n role: 'dialog',\n 'aria-label': 'calendar'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDaterangepickerContainerComponent extends BsDatepickerAbstractComponent\n implements OnInit, OnDestroy {\n set value(value: Date[]) {\n this._effects.setRangeValue(value);\n }\n\n valueChange = new EventEmitter<Date[]>();\n animationState = 'void';\n\n _rangeStack: Date[] = [];\n chosenRange: Date[] = [];\n _subs: Subscription[] = [];\n\n constructor(\n _renderer: Renderer2,\n private _config: BsDatepickerConfig,\n private _store: BsDatepickerStore,\n private _element: ElementRef,\n private _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n private _positionService: PositioningService\n ) {\n super();\n this._effects = _effects;\n\n this.customRanges = this._config.ranges;\n\n _renderer.setStyle(_element.nativeElement, 'display', 'block');\n _renderer.setStyle(_element.nativeElement, 'position', 'absolute');\n }\n\n ngOnInit(): void {\n this._positionService.setOptions({\n modifiers: { flip: { enabled: this._config.adaptivePosition } },\n allowedPositions: ['top', 'bottom']\n });\n\n this._positionService.event$\n .pipe(\n take(1)\n )\n .subscribe(() => {\n this._positionService.disable();\n\n if (this._config.isAnimated) {\n this.animationState = this.isTopPosition ? 'animated-up' : 'animated-down';\n\n return;\n }\n\n this.animationState = 'unanimated';\n });\n this.containerClass = this._config.containerClass;\n this.isOtherMonthsActive = this._config.selectFromOtherMonth;\n this._effects\n .init(this._store)\n // intial state options\n // todo: fix this, split configs\n .setOptions(this._config)\n // data binding view --> model\n .setBindings(this)\n // set event handlers\n .setEventHandlers(this)\n .registerDatepickerSideEffects();\n\n // todo: move it somewhere else\n // on selected date change\n this._subs.push(\n this._store\n .select(state => state.selectedRange)\n .subscribe(date => {\n this.valueChange.emit(date);\n this.chosenRange = date;\n })\n );\n }\n\n get isTopPosition(): boolean {\n return this._element.nativeElement.classList.contains('top');\n }\n\n positionServiceEnable(): void {\n this._positionService.enable();\n }\n\n daySelectHandler(day: DayViewModel): void {\n if (!day) {\n return;\n }\n const isDisabled = this.isOtherMonthsActive ? day.isDisabled : (day.isOtherMonth || day.isDisabled);\n\n if (isDisabled) {\n return;\n }\n\n // if only one date is already selected\n // and user clicks on previous date\n // start selection from new date\n // but if new date is after initial one\n // than finish selection\n if (this._rangeStack.length === 1) {\n this._rangeStack =\n day.date >= this._rangeStack[0]\n ? [this._rangeStack[0], day.date]\n : [day.date];\n }\n\n if (this._rangeStack.length === 0) {\n this._rangeStack = [day.date];\n }\n\n this._store.dispatch(this._actions.selectRange(this._rangeStack));\n\n if (this._rangeStack.length === 2) {\n this._rangeStack = [];\n }\n }\n\n ngOnDestroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n this._effects.destroy();\n }\n\n setRangeOnCalendar(dates: BsCustomDates) {\n this._rangeStack = (dates === null) ? [] : (dates.value instanceof Date ? [dates.value] : dates.value);\n this._store.dispatch(this._actions.selectRange(this._rangeStack));\n }\n\n}\n","import { OnInit, OnDestroy, ElementRef, Component, Renderer2 } from '@angular/core';\nimport { BsDaterangepickerContainerComponent } from './bs-daterangepicker-container.component';\n\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\n\nimport { PositioningService } from 'ngx-bootstrap/positioning';\nimport { datepickerAnimation } from '../../datepicker-animations';\n\n@Component({\n selector: 'bs-daterangepicker-inline-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n '(click)': '_stopPropagation($event)'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDaterangepickerInlineContainerComponent extends BsDaterangepickerContainerComponent\n implements OnInit, OnDestroy {\n\n constructor(\n _renderer: Renderer2,\n _config: BsDatepickerConfig,\n _store: BsDatepickerStore,\n _element: ElementRef,\n _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n _positioningService: PositioningService\n ) {\n super(_renderer, _config, _store, _element, _actions, _effects, _positioningService);\n\n _renderer.setStyle(_element.nativeElement, 'display', 'inline-block');\n _renderer.setStyle(_element.nativeElement, 'position', 'static');\n }\n}\n","import {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef\n} from '@angular/core';\n\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\n\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDaterangepickerInlineConfig } from './bs-daterangepicker-inline.config';\nimport { BsDaterangepickerInlineContainerComponent } from './themes/bs/bs-daterangepicker-inline-container.component';\nimport { DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: 'bs-daterangepicker-inline',\n exportAs: 'bsDaterangepickerInline'\n})\nexport class BsDaterangepickerInlineDirective implements OnInit, OnDestroy, OnChanges {\n _bsValue: Date[];\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date[]) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() bsConfig: Partial<BsDaterangepickerInlineConfig>;\n /**\n * Indicates whether datepicker is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n @Input() daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Disable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Emits when daterangepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date[]> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDaterangepickerInlineContainerComponent>;\n private _datepickerRef: ComponentRef<BsDaterangepickerInlineContainerComponent>;\n\n constructor(\n public _config: BsDaterangepickerInlineConfig,\n private _elementRef: ElementRef,\n _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory\n ) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDaterangepickerInlineContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n }\n\n ngOnInit(): void {\n this.setConfig();\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date[]) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange\n .pipe(\n filter((range: Date[]) => range && range[0] && !!range[1])\n )\n .subscribe((value: Date[]) => {\n this.bsValue = value;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n this.setConfig();\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n this.setConfig();\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n this.setConfig();\n }\n\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n this.setConfig();\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n this.setConfig();\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n this.setConfig();\n }\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n if (this._datepicker) {\n this._datepicker.hide();\n }\n\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n ranges: this.bsConfig && this.bsConfig.ranges\n });\n\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDaterangepickerInlineContainerComponent)\n .to(this._elementRef)\n .show();\n }\n\n ngOnDestroy(): any {\n this._datepicker.dispose();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Provider,\n Renderer2\n} from '@angular/core';\n\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport {\n formatDate,\n getLocale,\n isAfter,\n isBefore,\n isDate,\n isDateValid,\n parseDate,\n utcAsLocal\n} from 'ngx-bootstrap/chronos';\n\nimport { BsDatepickerDirective } from './bs-datepicker.component';\nimport { BsLocaleService } from './bs-locale.service';\n\nconst BS_DATEPICKER_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDatepickerInputDirective),\n multi: true\n};\n\nconst BS_DATEPICKER_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDatepickerInputDirective),\n multi: true\n};\n\n@Directive({\n selector: `input[bsDatepicker]`,\n host: {\n '(change)': 'onChange($event)',\n '(keyup.esc)': 'hide()',\n '(keydown)': 'onKeydownEvent($event)',\n '(blur)': 'onBlur()'\n },\n providers: [BS_DATEPICKER_VALUE_ACCESSOR, BS_DATEPICKER_VALIDATOR]\n})\nexport class BsDatepickerInputDirective\n implements ControlValueAccessor, Validator {\n private _onChange = Function.prototype;\n private _onTouched = Function.prototype;\n /* tslint:disable-next-line: no-unused-variable */\n private _validatorChange = Function.prototype;\n private _value: Date;\n\n constructor(@Host() private _picker: BsDatepickerDirective,\n private _localeService: BsLocaleService,\n private _renderer: Renderer2,\n private _elRef: ElementRef,\n private changeDetection: ChangeDetectorRef) {\n // update input value on datepicker value update\n this._picker.bsValueChange.subscribe((value: Date) => {\n this._setInputValue(value);\n if (this._value !== value) {\n this._value = value;\n this._onChange(value);\n this._onTouched();\n }\n this.changeDetection.markForCheck();\n });\n\n // update input value on locale change\n this._localeService.localeChange.subscribe(() => {\n this._setInputValue(this._value);\n });\n }\n\n onKeydownEvent(event) {\n if (event.keyCode === 13 || event.code === 'Enter') {\n this.hide();\n }\n }\n\n _setInputValue(value: Date): void {\n const initialDate = !value ? ''\n : formatDate(value, this._picker._config.dateInputFormat, this._localeService.currentLocale);\n\n this._renderer.setProperty(this._elRef.nativeElement, 'value', initialDate);\n }\n\n onChange(event: Event) {\n /* tslint:disable-next-line: no-any*/\n this.writeValue((event.target as any).value);\n this._onChange(this._value);\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n this._onTouched();\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n const _value: Date | string = c.value;\n\n /* tslint:disable-next-line: prefer-switch */\n if (_value === null || _value === undefined || _value === '') {\n return null;\n }\n\n if (isDate(_value)) {\n const _isDateValid = isDateValid(_value);\n if (!_isDateValid) {\n return { bsDate: { invalid: _value } };\n }\n\n if (this._picker && this._picker.minDate && isBefore(_value, this._picker.minDate, 'date')) {\n this.writeValue(this._picker.minDate);\n\n return { bsDate: { minDate: this._picker.minDate } };\n }\n\n if (this._picker && this._picker.maxDate && isAfter(_value, this._picker.maxDate, 'date')) {\n this.writeValue(this._picker.maxDate);\n\n return { bsDate: { maxDate: this._picker.maxDate } };\n }\n }\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorChange = fn;\n }\n\n writeValue(value: Date | string) {\n if (!value) {\n this._value = null;\n } else {\n const _localeKey = this._localeService.currentLocale;\n const _locale = getLocale(_localeKey);\n if (!_locale) {\n throw new Error(\n `Locale \"${_localeKey}\" is not defined, please add it with \"defineLocale(...)\"`\n );\n }\n\n this._value = parseDate(value, this._picker._config.dateInputFormat, this._localeService.currentLocale);\n\n if (this._picker._config.useUtc) {\n this._value = utcAsLocal(this._value);\n }\n }\n\n this._picker.bsValue = this._value;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._picker.isDisabled = isDisabled;\n if (isDisabled) {\n this._renderer.setAttribute(this._elRef.nativeElement, 'disabled', 'disabled');\n\n return;\n }\n this._renderer.removeAttribute(this._elRef.nativeElement, 'disabled');\n }\n\n registerOnChange(fn: () => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n onBlur() {\n this._onTouched();\n }\n\n hide() {\n this._picker.hide();\n this._renderer.selectRootElement(this._elRef.nativeElement).blur();\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable()\nexport class BsDaterangepickerConfig extends BsDatepickerConfig {\n // DatepickerRenderOptions\n displayMonths = 2;\n}\n","import {\n AfterViewInit,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { BsDaterangepickerConfig } from './bs-daterangepicker.config';\nimport { BsDaterangepickerContainerComponent } from './themes/bs/bs-daterangepicker-container.component';\nimport { Subscription, Subject, BehaviorSubject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ComponentLoaderFactory, ComponentLoader } from 'ngx-bootstrap/component-loader';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: '[bsDaterangepicker]',\n exportAs: 'bsDaterangepicker'\n})\nexport class BsDaterangepickerDirective\n implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n /**\n * Placement of a daterangepicker. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n @Input() triggers = 'click';\n /**\n * Close daterangepicker on outside click\n */\n @Input() outsideClick = true;\n /**\n * A selector specifying the element the daterangepicker should be appended to.\n */\n @Input() container = 'body';\n\n @Input() outsideEsc = true;\n\n /**\n * Returns whether or not the daterangepicker is currently being shown\n */\n @Input()\n get isOpen(): boolean {\n return this._datepicker.isShown;\n }\n\n set isOpen(value: boolean) {\n this.isOpen$.next(value);\n }\n\n /**\n * Emits an event when the daterangepicker is shown\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onShown: EventEmitter<any>;\n /**\n * Emits an event when the daterangepicker is hidden\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onHidden: EventEmitter<any>;\n\n _bsValue: Date[];\n isOpen$: BehaviorSubject<boolean>;\n isDestroy$: Subject<void>;\n\n /**\n * Initial value of daterangepicker\n */\n @Input()\n set bsValue(value: Date[]) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for daterangepicker\n */\n @Input() bsConfig: Partial<BsDaterangepickerConfig>;\n /**\n * Indicates whether daterangepicker's content is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n @Input() daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n\n /**\n * Enable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Emits when daterangepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date[]> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDaterangepickerContainerComponent>;\n private _datepickerRef: ComponentRef<BsDaterangepickerContainerComponent>;\n\n constructor(public _config: BsDaterangepickerConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory) {\n this._datepicker = cis.createLoader<BsDaterangepickerContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n Object.assign(this, _config);\n this.onShown = this._datepicker.onShown;\n this.onHidden = this._datepicker.onHidden;\n this.isOpen$ = new BehaviorSubject(this.isOpen);\n }\n\n ngOnInit(): void {\n this.isDestroy$ = new Subject();\n this._datepicker.listen({\n outsideClick: this.outsideClick,\n outsideEsc: this.outsideEsc,\n triggers: this.triggers,\n show: () => this.show()\n });\n this.setConfig();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n }\n }\n\n ngAfterViewInit(): void {\n this.isOpen$.pipe(\n filter(isOpen => isOpen !== this.isOpen),\n takeUntil(this.isDestroy$)\n )\n .subscribe(() => this.toggle());\n }\n\n /**\n * Opens an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n show(): void {\n if (this._datepicker.isShown) {\n return;\n }\n\n this.setConfig();\n\n this._datepickerRef = this._datepicker\n .provide({ provide: BsDatepickerConfig, useValue: this._config })\n .attach(BsDaterangepickerContainerComponent)\n .to(this.container)\n .position({ attachment: this.placement })\n .show({ placement: this.placement });\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date[]) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange\n .pipe(\n filter((range: Date[]) => range && range[0] && !!range[1])\n )\n .subscribe((value: Date[]) => {\n this.bsValue = value;\n this.hide();\n })\n );\n }\n\n /**\n * Set config for daterangepicker\n */\n setConfig() {\n this._config = Object.assign(\n {},\n this._config,\n this.bsConfig,\n {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n ranges: this.bsConfig && this.bsConfig.ranges\n }\n );\n }\n\n /**\n * Closes an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n hide(): void {\n if (this.isOpen) {\n this._datepicker.hide();\n }\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n\n if (this._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elementRef.nativeElement).focus();\n }\n }\n\n /**\n * Toggles an element’s datepicker. This is considered a “manual” triggering\n * of the datepicker.\n */\n toggle(): void {\n if (this.isOpen) {\n return this.hide();\n }\n\n this.show();\n }\n\n ngOnDestroy(): void {\n this._datepicker.dispose();\n this.isOpen$.next(false);\n if (this.isDestroy$) {\n this.isDestroy$.next();\n this.isDestroy$.complete();\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Provider,\n Renderer2\n} from '@angular/core';\n\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport {\n parseDate,\n formatDate,\n getLocale,\n isAfter,\n isBefore,\n isArray,\n isDateValid,\n utcAsLocal\n} from 'ngx-bootstrap/chronos';\n\nimport { BsDaterangepickerDirective } from './bs-daterangepicker.component';\nimport { BsLocaleService } from './bs-locale.service';\n\nconst BS_DATERANGEPICKER_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDaterangepickerInputDirective),\n multi: true\n};\n\nconst BS_DATERANGEPICKER_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDaterangepickerInputDirective),\n multi: true\n};\n\n\n@Directive({\n selector: `input[bsDaterangepicker]`,\n host: {\n '(change)': 'onChange($event)',\n '(keyup.esc)': 'hide()',\n '(keydown)': 'onKeydownEvent($event)',\n '(blur)': 'onBlur()'\n },\n providers: [BS_DATERANGEPICKER_VALUE_ACCESSOR, BS_DATERANGEPICKER_VALIDATOR]\n})\nexport class BsDaterangepickerInputDirective\n implements ControlValueAccessor, Validator {\n private _onChange = Function.prototype;\n private _onTouched = Function.prototype;\n /* tslint:disable-next-line: no-unused-variable */\n private _validatorChange = Function.prototype;\n private _value: Date[];\n\n constructor(@Host() private _picker: BsDaterangepickerDirective,\n private _localeService: BsLocaleService,\n private _renderer: Renderer2,\n private _elRef: ElementRef,\n private changeDetection: ChangeDetectorRef) {\n // update input value on datepicker value update\n this._picker.bsValueChange.subscribe((value: Date[]) => {\n this._setInputValue(value);\n if (this._value !== value) {\n this._value = value;\n this._onChange(value);\n this._onTouched();\n }\n this.changeDetection.markForCheck();\n });\n\n // update input value on locale change\n this._localeService.localeChange.subscribe(() => {\n this._setInputValue(this._value);\n });\n }\n\n onKeydownEvent(event) {\n if (event.keyCode === 13 || event.code === 'Enter') {\n this.hide();\n }\n }\n\n _setInputValue(date: Date[]): void {\n let range = '';\n if (date) {\n const start: string = !date[0] ? ''\n : formatDate(date[0],\n this._picker._config.rangeInputFormat,\n this._localeService.currentLocale\n );\n const end: string = !date[1] ? ''\n : formatDate(\n date[1],\n this._picker._config.rangeInputFormat,\n this._localeService.currentLocale\n );\n range = (start && end) ? start + this._picker._config.rangeSeparator + end : '';\n }\n this._renderer.setProperty(this._elRef.nativeElement, 'value', range);\n }\n\n onChange(event: Event) {\n /* tslint:disable-next-line: no-any*/\n this.writeValue((event.target as any).value);\n this._onChange(this._value);\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n this._onTouched();\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n const _value: [Date, Date] = c.value;\n const errors: object[] = [];\n\n if (_value === null || _value === undefined || !isArray(_value)) {\n return null;\n }\n\n // @ts-ignore\n _value.sort((a, b) => a - b);\n\n const _isFirstDateValid = isDateValid(_value[0]);\n const _isSecondDateValid = isDateValid(_value[1]);\n\n if (!_isFirstDateValid) {\n return { bsDate: { invalid: _value[0] } };\n }\n\n if (!_isSecondDateValid) {\n return { bsDate: { invalid: _value[1] } };\n }\n\n if (this._picker && this._picker.minDate && isBefore(_value[0], this._picker.minDate, 'date')) {\n _value[0] = this._picker.minDate;\n errors.push({ bsDate: { minDate: this._picker.minDate } });\n }\n\n if (this._picker && this._picker.maxDate && isAfter(_value[1], this._picker.maxDate, 'date')) {\n _value[1] = this._picker.maxDate;\n errors.push({ bsDate: { maxDate: this._picker.maxDate } });\n }\n if (errors.length > 0) {\n this.writeValue(_value);\n\n return errors;\n }\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorChange = fn;\n }\n\n writeValue(value: Date[] | string) {\n if (!value) {\n this._value = null;\n } else {\n const _localeKey = this._localeService.currentLocale;\n const _locale = getLocale(_localeKey);\n if (!_locale) {\n throw new Error(\n `Locale \"${_localeKey}\" is not defined, please add it with \"defineLocale(...)\"`\n );\n }\n\n let _input: (string[] | Date[]) = [];\n if (typeof value === 'string') {\n _input = value.split(this._picker._config.rangeSeparator);\n }\n\n if (Array.isArray(value)) {\n _input = value;\n }\n\n this._value = (_input as string[])\n .map((_val: string): Date => {\n if (this._picker._config.useUtc) {\n return utcAsLocal(\n parseDate(_val, this._picker._config.dateInputFormat, this._localeService.currentLocale)\n );\n }\n\n return parseDate(_val, this._picker._config.dateInputFormat, this._localeService.currentLocale);\n }\n )\n .map((date: Date) => (isNaN(date.valueOf()) ? null : date));\n }\n\n this._picker.bsValue = this._value;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._picker.isDisabled = isDisabled;\n if (isDisabled) {\n this._renderer.setAttribute(this._elRef.nativeElement, 'disabled', 'disabled');\n\n return;\n }\n this._renderer.removeAttribute(this._elRef.nativeElement, 'disabled');\n }\n\n /* tslint:disable-next-line: no-any*/\n registerOnChange(fn: () => void): void {\n this._onChange = fn;\n }\n\n /* tslint:disable-next-line: no-any*/\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n onBlur() {\n this._onTouched();\n }\n\n hide() {\n this._picker.hide();\n this._renderer.selectRootElement(this._elRef.nativeElement).blur();\n\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bs-calendar-layout',\n template: `\n <!-- current date, will be added in nearest releases -->\n <bs-current-date title=\"hey there\" *ngIf=\"false\"></bs-current-date>\n\n <!--navigation-->\n <div class=\"bs-datepicker-head\">\n <ng-content select=\"bs-datepicker-navigation-view\"></ng-content>\n </div>\n\n <div class=\"bs-datepicker-body\">\n <ng-content></ng-content>\n </div>\n\n <!--timepicker-->\n <bs-timepicker *ngIf=\"false\"></bs-timepicker>\n `\n})\nexport class BsCalendarLayoutComponent {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'bs-current-date',\n template: `<div class=\"current-timedate\"><span>{{ title }}</span></div>`\n})\nexport class BsCurrentDateViewComponent {\n @Input() title: string;\n}\n","import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\n\nexport interface BsCustomDates {\n label: string;\n value: Date | Date[];\n}\n\n@Component({\n selector: 'bs-custom-date-view',\n template: `\n <div class=\"bs-datepicker-predefined-btns\">\n <button *ngFor=\"let range of ranges\"\n type=\"button\"\n class=\"btn\"\n (click)=\"selectFromRanges(range)\"\n [class.selected]=\"range.value === selectedRange\">\n {{ range.label }}\n </button>\n <button\n type=\"button\"\n class=\"btn\"\n (click)=\"selectFromRanges(customRange)\"\n [class.selected]=\"!checkRange()\">\n Custom Range\n </button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BsCustomDatesViewComponent {\n @Input() ranges: BsCustomDates[];\n @Input() selectedRange: Date[];\n @Output() onSelect = new EventEmitter<BsCustomDates>();\n\n customRange: any = null;\n\n selectFromRanges(range: BsCustomDates) {\n this.onSelect.emit(range);\n }\n\n checkRange() {\n return this.ranges ? this.ranges.filter(range => range.value === this.selectedRange).length > 0 : false;\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n Renderer2\n} from '@angular/core';\n\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { DayViewModel } from '../../models';\n\n@Component({\n selector: '[bsDatepickerDayDecorator]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'day.isDisabled',\n '[class.is-highlighted]': 'day.isHovered',\n '[class.is-other-month]': 'day.isOtherMonth',\n '[class.is-active-other-month]': 'day.isOtherMonthHovered',\n '[class.in-range]': 'day.isInRange',\n '[class.select-start]': 'day.isSelectionStart',\n '[class.select-end]': 'day.isSelectionEnd',\n '[class.selected]': 'day.isSelected'\n },\n template: `{{ day.label }}`\n})\nexport class BsDatepickerDayDecoratorComponent implements OnInit {\n @Input() day: DayViewModel;\n\n constructor(\n private _config: BsDatepickerConfig,\n private _elRef: ElementRef,\n private _renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n if (this.day.isToday && this._config && this._config.customTodayClass) {\n this._renderer.addClass(this._elRef.nativeElement, this._config.customTodayClass);\n }\n\n if (typeof this.day.customClasses === 'string') {\n this.day.customClasses.split(' ')\n .filter((className: string) => className)\n .forEach((className: string) => {\n this._renderer.addClass(this._elRef.nativeElement, className);\n });\n }\n }\n}\n","import { TimeUnit } from 'ngx-bootstrap/chronos';\n\nexport type BsDatepickerViewMode = 'day' | 'month' | 'year';\n\n/** *************** */\n// navigation bar settings\nexport interface NavigationViewModel {\n monthTitle: string;\n yearTitle: string;\n hideLeftArrow?: boolean;\n hideRightArrow?: boolean;\n disableLeftArrow?: boolean;\n disableRightArrow?: boolean;\n}\n\nexport interface CalendarCellViewModel {\n date: Date;\n label: string;\n isDisabled?: boolean;\n isHovered?: boolean;\n isSelected?: boolean;\n}\n\n/** *************** */\n// days matrix: day cell view model\nexport interface DayViewModel extends CalendarCellViewModel {\n isOtherMonthHovered?: boolean;\n isOtherMonth?: boolean;\n isInRange?: boolean;\n isSelectionStart?: boolean;\n isSelectionEnd?: boolean;\n isToday?: boolean;\n customClasses?: string;\n // day index\n monthIndex?: number;\n weekIndex?: number;\n dayIndex?: number;\n}\n\nexport interface WeekViewModel {\n days: DayViewModel[];\n isHovered?: boolean;\n}\n\n// todo: split navigation settings\nexport interface DaysCalendarViewModel extends NavigationViewModel {\n weeks: WeekViewModel[];\n // additional information\n month: Date;\n weekNumbers: string[];\n weekdays: string[];\n}\n\n/** *************** */\n// months calendar\nexport interface MonthsCalendarViewModel extends NavigationViewModel {\n months: CalendarCellViewModel[][];\n}\n\n/** *************** */\n// years calendar\nexport interface YearsCalendarViewModel extends NavigationViewModel {\n years: CalendarCellViewModel[][];\n}\n\n/** *************** */\n\n// math model\n/** *************** */\n\n// days Date's array\nexport interface DaysCalendarModel {\n daysMatrix: Date[][];\n month: Date;\n}\n\n/** *************** */\n// some func options\nexport interface MonthViewOptions {\n width?: number;\n height?: number;\n firstDayOfWeek?: number;\n}\n\n/** *************** */\n// rendering options\nexport interface DatepickerFormatOptions {\n locale: string;\n\n monthTitle: string;\n yearTitle: string;\n\n dayLabel: string;\n monthLabel: string;\n yearLabel: string;\n\n weekNumbers: string;\n}\n\nexport interface DatepickerRenderOptions {\n showWeekNumbers?: boolean;\n displayMonths?: number;\n}\n\nexport interface DatepickerDateCustomClasses {\n date: Date;\n classes: string[];\n}\n\n/** *************** */\n// events\n/** *************** */\nexport enum BsNavigationDirection {\n UP,\n DOWN\n}\n\n// used for navigation events, to change view date in state\nexport interface BsNavigationEvent {\n direction?: BsNavigationDirection;\n step?: TimeUnit;\n}\n\nexport interface BsViewNavigationEvent {\n unit?: TimeUnit;\n viewMode: BsDatepickerViewMode;\n}\n\nexport interface CellHoverEvent {\n cell: CalendarCellViewModel;\n isHovered: boolean;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n DaysCalendarViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-datepicker-navigation-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button class=\"previous\"\n [disabled]=\"calendar.disableLeftArrow\"\n [style.visibility]=\"calendar.hideLeftArrow ? 'hidden' : 'visible'\"\n type=\"button\"\n (click)=\"navTo(true)\">\n <span>&lsaquo;</span>\n </button>\n\n <ng-container *ngIf=\"calendar.monthTitle\">\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"current\"\n type=\"button\"\n (click)=\"view('month')\"\n ><span>{{ calendar.monthTitle }}</span>\n </button>\n </ng-container>\n\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"current\" (click)=\"view('year')\" type=\"button\">\n <span>{{ calendar.yearTitle }}</span>\n </button>\n\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"next\"\n [disabled]=\"calendar.disableRightArrow\"\n [style.visibility]=\"calendar.hideRightArrow ? 'hidden' : 'visible'\"\n type=\"button\"\n (click)=\"navTo(false)\"><span>&rsaquo;</span>\n </button>\n `\n})\nexport class BsDatepickerNavigationViewComponent {\n @Input() calendar: DaysCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationDirection>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n navTo(down: boolean): void {\n this.onNavigate.emit(\n down ? BsNavigationDirection.DOWN : BsNavigationDirection.UP\n );\n }\n\n view(viewMode: BsDatepickerViewMode): void {\n this.onViewMode.emit(viewMode);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CellHoverEvent,\n DatepickerRenderOptions,\n DaysCalendarViewModel,\n DayViewModel, WeekViewModel\n} from '../../models';\n\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\n\n@Component({\n selector: 'bs-days-calendar-view',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <!--days matrix-->\n <table role=\"grid\" class=\"days weeks\">\n <thead>\n <tr>\n <!--if show weeks-->\n <th *ngIf=\"options.showWeekNumbers\"></th>\n <th *ngFor=\"let weekday of calendar.weekdays; let i = index\"\n aria-label=\"weekday\">{{ calendar.weekdays[i] }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of calendar.weeks; let i = index\">\n <td class=\"week\" [class.active-week]=\"isWeekHovered\" *ngIf=\"options.showWeekNumbers\">\n <span\n (click)=\"selectWeek(week)\"\n (mouseenter)=\"weekHoverHandler(week, true)\"\n (mouseleave)=\"weekHoverHandler(week, false)\">{{ calendar.weekNumbers[i] }}</span>\n </td>\n <td *ngFor=\"let day of week.days\" role=\"gridcell\">\n <span bsDatepickerDayDecorator\n [day]=\"day\"\n (click)=\"selectDay(day)\"\n (mouseenter)=\"hoverDay(day, true)\"\n (mouseleave)=\"hoverDay(day, false)\">{{ day.label }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n\n </bs-calendar-layout>\n `\n})\nexport class BsDaysCalendarViewComponent {\n @Input() calendar: DaysCalendarViewModel;\n @Input() options: DatepickerRenderOptions;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<DayViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n @Output() onHoverWeek = new EventEmitter<WeekViewModel>();\n\n isWeekHovered: boolean;\n\n constructor(private _config: BsDatepickerConfig) { }\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { month: step } });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n\n selectDay(event: DayViewModel): void {\n this.onSelect.emit(event);\n }\n\n selectWeek(week: WeekViewModel): void {\n if (!this._config.selectWeek && !this._config.selectWeekDateRange) {\n return;\n }\n\n if (week.days.length === 0) {\n return;\n }\n\n if (this._config.selectWeek && week.days[0]\n && !week.days[0].isDisabled\n && this._config.selectFromOtherMonth) {\n\n this.onSelect.emit(week.days[0]);\n\n return;\n }\n\n const selectedDay = week.days.find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n this.onSelect.emit(selectedDay);\n\n if (this._config.selectWeekDateRange) {\n const days = week.days.slice(0);\n const lastDayOfRange = days.reverse().find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n this.onSelect.emit(lastDayOfRange);\n }\n }\n\n weekHoverHandler(cell: WeekViewModel, isHovered: boolean): void {\n if (!this._config.selectWeek && !this._config.selectWeekDateRange) {\n return;\n }\n\n const hasActiveDays = cell.days.find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n if (hasActiveDays) {\n cell.isHovered = isHovered;\n this.isWeekHovered = isHovered;\n this.onHoverWeek.emit(cell);\n }\n }\n\n hoverDay(cell: DayViewModel, isHovered: boolean): void {\n if (this._config.selectFromOtherMonth && cell.isOtherMonth) {\n cell.isOtherMonthHovered = isHovered;\n }\n\n this.onHover.emit({ cell, isHovered });\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CellHoverEvent,\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-month-calendar-view',\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <table role=\"grid\" class=\"months\">\n <tbody>\n <tr *ngFor=\"let row of calendar.months\">\n <td *ngFor=\"let month of row\" role=\"gridcell\"\n (click)=\"viewMonth(month)\"\n (mouseenter)=\"hoverMonth(month, true)\"\n (mouseleave)=\"hoverMonth(month, false)\"\n [class.disabled]=\"month.isDisabled\"\n [class.is-highlighted]=\"month.isHovered\">\n <span [class.selected]=\"month.isSelected\">{{ month.label }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </bs-calendar-layout>\n `\n})\nexport class BsMonthCalendarViewComponent {\n @Input() calendar: MonthsCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<CalendarCellViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { year: step } });\n }\n\n viewMonth(month: CalendarCellViewModel) {\n this.onSelect.emit(month);\n }\n\n hoverMonth(cell: CalendarCellViewModel, isHovered: boolean) {\n this.onHover.emit({ cell, isHovered });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n}\n","// tslint:disable:max-line-length\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'bs-timepicker',\n template: `\n <div class=\"bs-timepicker-container\">\n <div class=\"bs-timepicker-controls\">\n <button class=\"bs-decrease\" type=\"button\">-</button>\n <input type=\"text\" [value]=\"hours\" placeholder=\"00\">\n <button class=\"bs-increase\" type=\"button\">+</button>\n </div>\n <div class=\"bs-timepicker-controls\">\n <button class=\"bs-decrease\" type=\"button\">-</button>\n <input type=\"text\" [value]=\"minutes\" placeholder=\"00\">\n <button class=\"bs-increase\" type=\"button\">+</button>\n </div>\n <button class=\"switch-time-format\" type=\"button\">{{ ampm }}\n <img\n src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAYAAABi8KSDAAABSElEQVQYV3XQPUvDUBQG4HNuagtVqc6KgouCv6GIuIntYBLB9hcIQpLStCAIV7DYmpTcRWcXqZio3Vwc/UCc/QEqfgyKGbr0I7nS1EiHeqYzPO/h5SD0jaxUZjmSLCB+OFb+UFINFwASAEAdpu9gaGXVyAHHFQBkHpKHc6a9dzECvADyY9sqlAMsK9W0jzxDXqeytr3mhQckxSji27TJJ5/rPmIpwJJq3HrtduriYOurv1a4i1p5HnhkG9OFymi0ReoO05cGwb+ayv4dysVygjeFmsP05f8wpZQ8fsdvfmuY9zjWSNqUtgYFVnOVReILYoBFzdQI5/GGFzNHhGbeZnopDGU29sZbscgldmC99w35VOATTycIMMcBXIfpSVGzZhA6C8hh00conln6VQ9TGgV32OEAKQC4DrBq7CJwd0ggR7Vq/rPrfgB+C3sGypY5DAAAAABJRU5ErkJggg==\"\n alt=\"\">\n </button>\n </div>\n `\n})\nexport class BsTimepickerViewComponent {\n ampm = 'ok';\n hours = 0;\n minutes = 0;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { yearsPerCalendar } from '../../engine/format-years-calendar';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CalendarCellViewModel,\n CellHoverEvent,\n YearsCalendarViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-years-calendar-view',\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <table role=\"grid\" class=\"years\">\n <tbody>\n <tr *ngFor=\"let row of calendar.years\">\n <td *ngFor=\"let year of row\" role=\"gridcell\"\n (click)=\"viewYear(year)\"\n (mouseenter)=\"hoverYear(year, true)\"\n (mouseleave)=\"hoverYear(year, false)\"\n [class.disabled]=\"year.isDisabled\"\n [class.is-highlighted]=\"year.isHovered\">\n <span [class.selected]=\"year.isSelected\">{{ year.label }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </bs-calendar-layout>\n `\n})\nexport class BsYearsCalendarViewComponent {\n @Input() calendar: YearsCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<CalendarCellViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { year: step * yearsPerCalendar } });\n }\n\n viewYear(year: CalendarCellViewModel) {\n this.onSelect.emit(year);\n }\n\n hoverYear(cell: CalendarCellViewModel, isHovered: boolean) {\n this.onHover.emit({ cell, isHovered });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { BsDatepickerInputDirective } from './bs-datepicker-input.directive';\nimport { BsDatepickerDirective } from './bs-datepicker.component';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDaterangepickerInputDirective } from './bs-daterangepicker-input.directive';\nimport { BsDaterangepickerDirective } from './bs-daterangepicker.component';\nimport { BsDaterangepickerConfig } from './bs-daterangepicker.config';\n\nimport { BsDatepickerInlineDirective } from './bs-datepicker-inline.component';\nimport { BsDatepickerInlineConfig } from './bs-datepicker-inline.config';\n\nimport { BsLocaleService } from './bs-locale.service';\nimport { BsDatepickerActions } from './reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from './reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from './reducer/bs-datepicker.store';\nimport { BsDatepickerContainerComponent } from './themes/bs/bs-datepicker-container.component';\nimport { BsDaterangepickerContainerComponent } from './themes/bs/bs-daterangepicker-container.component';\n\nimport { BsDatepickerInlineContainerComponent } from './themes/bs/bs-datepicker-inline-container.component';\nimport { BsDaterangepickerInlineContainerComponent } from './themes/bs/bs-daterangepicker-inline-container.component';\n\nimport { BsDaterangepickerInlineDirective } from './bs-daterangepicker-inline.component';\nimport { BsDaterangepickerInlineConfig } from './bs-daterangepicker-inline.config';\n\nimport { BsCalendarLayoutComponent } from './themes/bs/bs-calendar-layout.component';\nimport { BsCurrentDateViewComponent } from './themes/bs/bs-current-date-view.component';\nimport { BsCustomDatesViewComponent } from './themes/bs/bs-custom-dates-view.component';\nimport { BsDatepickerDayDecoratorComponent } from './themes/bs/bs-datepicker-day-decorator.directive';\nimport { BsDatepickerNavigationViewComponent } from './themes/bs/bs-datepicker-navigation-view.component';\nimport { BsDaysCalendarViewComponent } from './themes/bs/bs-days-calendar-view.component';\nimport { BsMonthCalendarViewComponent } from './themes/bs/bs-months-calendar-view.component';\nimport { BsTimepickerViewComponent } from './themes/bs/bs-timepicker-view.component';\nimport { BsYearsCalendarViewComponent } from './themes/bs/bs-years-calendar-view.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n BsCalendarLayoutComponent,\n BsCurrentDateViewComponent,\n BsCustomDatesViewComponent,\n BsDatepickerDayDecoratorComponent,\n BsDatepickerNavigationViewComponent,\n BsDaysCalendarViewComponent,\n BsMonthCalendarViewComponent,\n BsTimepickerViewComponent,\n BsYearsCalendarViewComponent,\n BsDatepickerContainerComponent,\n BsDatepickerDirective,\n BsDatepickerInlineContainerComponent,\n BsDatepickerInlineDirective,\n BsDatepickerInputDirective,\n BsDaterangepickerContainerComponent,\n BsDaterangepickerDirective,\n BsDaterangepickerInlineContainerComponent,\n BsDaterangepickerInlineDirective,\n BsDaterangepickerInputDirective\n ],\n entryComponents: [\n BsDatepickerContainerComponent,\n BsDaterangepickerContainerComponent,\n BsDatepickerInlineContainerComponent,\n BsDaterangepickerInlineContainerComponent\n ],\n exports: [\n BsDatepickerContainerComponent,\n BsDatepickerDirective,\n BsDatepickerInlineContainerComponent,\n BsDatepickerInlineDirective,\n BsDatepickerInputDirective,\n BsDaterangepickerContainerComponent,\n BsDaterangepickerDirective,\n BsDaterangepickerInlineContainerComponent,\n BsDaterangepickerInlineDirective,\n BsDaterangepickerInputDirective\n ]\n})\nexport class BsDatepickerModule {\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: BsDatepickerModule,\n providers: [\n ComponentLoaderFactory,\n PositioningService,\n BsDatepickerStore,\n BsDatepickerActions,\n BsDatepickerConfig,\n BsDaterangepickerConfig,\n BsDatepickerInlineConfig,\n BsDaterangepickerInlineConfig,\n BsDatepickerEffects,\n BsLocaleService\n ]\n };\n }\n}\n","import { formatDate } from 'ngx-bootstrap/chronos';\n\nexport class DateFormatter {\n format(date: Date, format: string, locale: string): string {\n return formatDate(date, format, locale);\n }\n}\n","/* tslint:disable: max-file-line-count */\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport { DateFormatter } from './date-formatter';\n\n\n@Component({\n selector: 'datepicker-inner',\n template: `\n <!--&lt;!&ndash;ng-keydown=\"keydown($event)\"&ndash;&gt;-->\n <div *ngIf=\"datepickerMode\" class=\"well well-sm bg-faded p-a card\" role=\"application\" >\n <ng-content></ng-content>\n </div>\n `\n})\nexport class DatePickerInnerComponent implements OnInit, OnChanges {\n @Input() locale: string;\n @Input() datepickerMode: string;\n @Input() startingDay: number;\n @Input() yearRange: number;\n\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() minMode: string;\n @Input() maxMode: string;\n @Input() showWeeks: boolean;\n @Input() formatDay: string;\n @Input() formatMonth: string;\n @Input() formatYear: string;\n @Input() formatDayHeader: string;\n @Input() formatDayTitle: string;\n @Input() formatMonthTitle: string;\n @Input() onlyCurrentMonth: boolean;\n @Input() shortcutPropagation: boolean;\n @Input() customClass: { date: Date; mode: string; clazz: string }[];\n @Input() monthColLimit: number;\n @Input() yearColLimit: number;\n @Input() dateDisabled: { date: Date; mode: string }[];\n @Input() dayDisabled: number[];\n @Input() initDate: Date;\n\n @Output() selectionDone: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n @Output() update: EventEmitter<Date> = new EventEmitter<Date>(false);\n @Output() activeDateChange: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n\n /* tslint:disable-next-line: no-any*/\n stepDay: any = {};\n /* tslint:disable-next-line: no-any*/\n stepMonth: any = {};\n /* tslint:disable-next-line: no-any*/\n stepYear: any = {};\n\n uniqueId: string;\n\n protected modes: string[] = ['day', 'month', 'year'];\n protected dateFormatter: DateFormatter = new DateFormatter();\n protected _activeDate: Date;\n protected selectedDate: Date;\n protected activeDateId: string;\n\n protected refreshViewHandlerDay: Function;\n protected compareHandlerDay: Function;\n protected refreshViewHandlerMonth: Function;\n protected compareHandlerMonth: Function;\n protected refreshViewHandlerYear: Function;\n protected compareHandlerYear: Function;\n\n @Input()\n get activeDate(): Date {\n return this._activeDate;\n }\n\n set activeDate(value: Date) {\n this._activeDate = value;\n }\n\n // todo: add formatter value to Date object\n ngOnInit(): void {\n // todo: use date for unique value\n this.uniqueId = `datepicker--${Math.floor(Math.random() * 10000)}`;\n\n if (this.initDate) {\n this.activeDate = this.initDate;\n this.selectedDate = new Date(this.activeDate.valueOf());\n this.update.emit(this.activeDate);\n } else if (this.activeDate === undefined) {\n this.activeDate = new Date();\n }\n }\n\n // this.refreshView should be called here to reflect the changes on the fly\n // tslint:disable-next-line:no-unused-variable\n ngOnChanges(changes: SimpleChanges): void {\n this.refreshView();\n this.checkIfActiveDateGotUpdated(changes.activeDate);\n }\n\n // Check if activeDate has been update and then emit the activeDateChange with the new date\n /* tslint:disable-next-line: no-any */\n checkIfActiveDateGotUpdated(activeDate: any): void {\n if (activeDate && !activeDate.firstChange) {\n const previousValue = activeDate.previousValue;\n if (\n previousValue &&\n previousValue instanceof Date &&\n previousValue.getTime() !== activeDate.currentValue.getTime()\n ) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n }\n\n setCompareHandler(handler: Function, type: string): void {\n if (type === 'day') {\n this.compareHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.compareHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.compareHandlerYear = handler;\n }\n }\n\n compare(date1: Date, date2: Date): number | undefined {\n if (date1 === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (this.datepickerMode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1, date2);\n }\n\n if (this.datepickerMode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1, date2);\n }\n\n if (this.datepickerMode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1, date2);\n }\n\n return void 0;\n }\n\n setRefreshViewHandler(handler: Function, type: string): void {\n if (type === 'day') {\n this.refreshViewHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.refreshViewHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.refreshViewHandlerYear = handler;\n }\n }\n\n refreshView(): void {\n if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {\n this.refreshViewHandlerDay();\n }\n\n if (this.datepickerMode === 'month' && this.refreshViewHandlerMonth) {\n this.refreshViewHandlerMonth();\n }\n\n if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {\n this.refreshViewHandlerYear();\n }\n }\n\n dateFilter(date: Date, format: string): string {\n return this.dateFormatter.format(date, format, this.locale);\n }\n\n /* tslint:disable-next-line: no-any*/\n isActive(dateObject: any): boolean {\n if (this.compare(dateObject.date, this.activeDate) === 0) {\n this.activeDateId = dateObject.uid;\n\n return true;\n }\n\n return false;\n }\n\n /* tslint:disable-next-line: no-any*/\n createDateObject(date: Date, format: string): any {\n /* tslint:disable-next-line: no-any*/\n const dateObject: any = {};\n dateObject.date = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n dateObject.date = this.fixTimeZone(dateObject.date);\n dateObject.label = this.dateFilter(date, format);\n dateObject.selected = this.compare(date, this.selectedDate) === 0;\n dateObject.disabled = this.isDisabled(date);\n dateObject.current = this.compare(date, new Date()) === 0;\n dateObject.customClass = this.getCustomClassForDate(dateObject.date);\n\n return dateObject;\n }\n\n /* tslint:disable-next-line: no-any*/\n split(arr: any[], size: number): any[] {\n /* tslint:disable-next-line: no-any*/\n const arrays: any[] = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n\n return arrays;\n }\n\n // Fix a hard-reproducible bug with timezones\n // The bug depends on OS, browser, current timezone and current date\n // i.e.\n // var date = new Date(2014, 0, 1);\n // console.log(date.getFullYear(), date.getMonth(), date.getDate(),\n // date.getHours()); can result in \"2013 11 31 23\" because of the bug.\n fixTimeZone(date: Date): Date {\n const hours = date.getHours();\n\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n hours === 23 ? hours + 2 : 0\n );\n }\n\n select(date: Date, isManual = true): void {\n if (this.datepickerMode === this.minMode) {\n if (!this.activeDate) {\n this.activeDate = new Date(0, 0, 0, 0, 0, 0, 0);\n }\n\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n this.activeDate = this.fixTimeZone(this.activeDate);\n if (isManual) {\n this.selectionDone.emit(this.activeDate);\n }\n } else {\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n this.activeDate = this.fixTimeZone(this.activeDate);\n if (isManual) {\n this.datepickerMode = this.modes[\n this.modes.indexOf(this.datepickerMode) - 1\n ];\n }\n }\n\n this.selectedDate = new Date(this.activeDate.valueOf());\n this.update.emit(this.activeDate);\n this.refreshView();\n }\n\n move(direction: number): void {\n /* tslint:disable-next-line: no-any*/\n let expectedStep: any;\n if (this.datepickerMode === 'day') {\n expectedStep = this.stepDay;\n }\n\n if (this.datepickerMode === 'month') {\n expectedStep = this.stepMonth;\n }\n\n if (this.datepickerMode === 'year') {\n expectedStep = this.stepYear;\n }\n\n if (expectedStep) {\n const year =\n this.activeDate.getFullYear() + direction * (expectedStep.years || 0);\n const month =\n this.activeDate.getMonth() + direction * (expectedStep.months || 0);\n this.activeDate = new Date(year, month, 1);\n\n this.refreshView();\n this.activeDateChange.emit(this.activeDate);\n }\n }\n\n toggleMode(_direction: number): void {\n const direction = _direction || 1;\n\n if (\n (this.datepickerMode === this.maxMode && direction === 1) ||\n (this.datepickerMode === this.minMode && direction === -1)\n ) {\n return;\n }\n\n this.datepickerMode = this.modes[\n this.modes.indexOf(this.datepickerMode) + direction\n ];\n this.refreshView();\n }\n\n protected getCustomClassForDate(date: Date): string {\n if (!this.customClass) {\n return '';\n }\n // todo: build a hash of custom classes, it will work faster\n const customClassObject: {\n date: Date;\n mode: string;\n clazz: string;\n /* tslint:disable-next-line: no-any */\n } = this.customClass.find((customClass: any) => {\n return (\n customClass.date.valueOf() === date.valueOf() &&\n customClass.mode === this.datepickerMode\n );\n }, this);\n\n return customClassObject === undefined ? '' : customClassObject.clazz;\n }\n\n protected compareDateDisabled(\n date1Disabled: { date: Date; mode: string },\n date2: Date\n ): number {\n if (date1Disabled === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (date1Disabled.mode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1Disabled.date, date2);\n }\n\n if (date1Disabled.mode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1Disabled.date, date2);\n }\n\n if (date1Disabled.mode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1Disabled.date, date2);\n }\n\n return undefined;\n }\n\n protected isDisabled(date: Date): boolean {\n let isDateDisabled = false;\n if (this.dateDisabled) {\n this.dateDisabled.forEach(\n (disabledDate: { date: Date; mode: string }) => {\n if (this.compareDateDisabled(disabledDate, date) === 0) {\n isDateDisabled = true;\n }\n }\n );\n }\n\n if (this.dayDisabled) {\n isDateDisabled =\n isDateDisabled ||\n this.dayDisabled.indexOf(date.getDay()) > -1;\n }\n\n return (\n isDateDisabled ||\n (this.minDate && this.compare(date, this.minDate) < 0) ||\n (this.maxDate && this.compare(date, this.maxDate) > 0)\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DatepickerConfig {\n locale = 'en';\n datepickerMode = 'day';\n startingDay = 0;\n yearRange = 20;\n minMode = 'day';\n maxMode = 'year';\n showWeeks = true;\n formatDay = 'DD';\n formatMonth = 'MMMM';\n formatYear = 'YYYY';\n formatDayHeader = 'dd';\n formatDayTitle = 'MMMM YYYY';\n formatMonthTitle = 'YYYY';\n onlyCurrentMonth = false;\n monthColLimit = 3;\n yearColLimit = 5;\n shortcutPropagation = false;\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n Provider,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\nimport { DatepickerConfig } from './datepicker.config';\n\nexport const DATEPICKER_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n};\n\n/* tslint:disable:component-selector-name component-selector-type */\n@Component({\n selector: 'datepicker',\n template: `\n <datepicker-inner [activeDate]=\"activeDate\"\n (update)=\"onUpdate($event)\"\n [locale]=\"config.locale\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n [dayDisabled]=\"dayDisabled\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [monthColLimit]=\"monthColLimit\"\n [yearColLimit]=\"yearColLimit\"\n (selectionDone)=\"onSelectionDone($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\">\n <daypicker tabindex=\"0\"></daypicker>\n <monthpicker tabindex=\"0\"></monthpicker>\n <yearpicker tabindex=\"0\"></yearpicker>\n </datepicker-inner>\n `,\n providers: [DATEPICKER_CONTROL_VALUE_ACCESSOR]\n})\n/* tslint:enable:component-selector-name component-selector-type */\nexport class DatePickerComponent implements ControlValueAccessor {\n /** sets datepicker mode, supports: `day`, `month`, `year` */\n @Input() datepickerMode = 'day';\n /** default date to show if `ng-model` value is not specified */\n @Input() initDate: Date;\n /** oldest selectable date */\n @Input() minDate: Date;\n /** latest selectable date */\n @Input() maxDate: Date;\n /** set lower datepicker mode, supports: `day`, `month`, `year` */\n @Input() minMode: string;\n /** sets upper datepicker mode, supports: `day`, `month`, `year` */\n @Input() maxMode: string;\n /** if false week numbers will be hidden */\n @Input() showWeeks = true;\n /** format of day in month */\n @Input() formatDay: string;\n /** format of month in year */\n @Input() formatMonth: string;\n /** format of year in year range */\n @Input() formatYear: string;\n /** format of day in week header */\n @Input() formatDayHeader: string;\n /** format of title when selecting day */\n @Input() formatDayTitle: string;\n /** format of title when selecting month */\n @Input() formatMonthTitle: string;\n /** starting day of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input() startingDay: number;\n /** number of years displayed in year selection */\n @Input() yearRange: number;\n /** if true only dates from the currently displayed month will be shown */\n @Input() onlyCurrentMonth: boolean;\n /** if true shortcut`s event propagation will be disabled */\n @Input() shortcutPropagation: boolean;\n /** number of months displayed in a single row of month picker */\n @Input() monthColLimit: number;\n /** number of years displayed in a single row of year picker */\n @Input() yearColLimit: number;\n /** array of custom css classes to be applied to targeted dates */\n @Input() customClass: { date: Date; mode: string; clazz: string }[];\n /** array of disabled dates */\n @Input() dateDisabled: { date: Date; mode: string }[];\n /** disabled days of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input() dayDisabled: number[];\n\n /** currently active date */\n @Input()\n get activeDate(): Date {\n return this._activeDate || this._now;\n }\n\n set activeDate(value: Date) {\n this._activeDate = value;\n }\n\n @Output()\n selectionDone: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n\n /** callback to invoke when the activeDate is changed. */\n @Output()\n activeDateChange: EventEmitter<Date> = new EventEmitter<Date>(\n undefined\n );\n\n @ViewChild(DatePickerInnerComponent, { static: true })\n _datePicker: DatePickerInnerComponent;\n\n /* tslint:disable-next-line: no-any*/\n onChange: any = Function.prototype;\n /* tslint:disable-next-line: no-any*/\n onTouched: any = Function.prototype;\n\n config: DatepickerConfig;\n\n protected _now: Date = new Date();\n protected _activeDate: Date;\n\n constructor(config: DatepickerConfig) {\n this.config = config;\n this.configureOptions();\n }\n\n configureOptions(): void {\n Object.assign(this, this.config);\n }\n\n onUpdate(event: Date): void {\n this.activeDate = event;\n this.onChange(event);\n }\n\n onSelectionDone(event: Date): void {\n this.selectionDone.emit(event);\n }\n\n onActiveDateChange(event: Date): void {\n this.activeDateChange.emit(event);\n }\n // todo: support null value\n /* tslint:disable-next-line: no-any*/\n writeValue(value: any): void {\n if (this._datePicker.compare(value, this._activeDate) === 0) {\n return;\n }\n if (value && value instanceof Date) {\n this.activeDate = value;\n this._datePicker.select(value, false);\n\n return;\n }\n\n this.activeDate = value ? new Date(value) : void 0;\n }\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'daypicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode === 'day'\" role=\"grid\" [attr.aria-labelledby]=\"datePicker.uniqueId + '-title'\" aria-activedescendant=\"activeDateId\">\n <thead>\n <tr>\n <th>\n <button *ngIf=\"!isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\"\n tabindex=\"-1\">‹</button>\n <button *ngIf=\"isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\"\n tabindex=\"-1\">&lt;</button>\n </th>\n <th [attr.colspan]=\"5 + (datePicker.showWeeks ? 1 : 0)\">\n <button [id]=\"datePicker.uniqueId + '-title'\"\n type=\"button\" class=\"btn btn-default btn-secondary btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === datePicker.maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === datePicker.maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong>\n </button>\n </th>\n <th>\n <button *ngIf=\"!isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\"\n tabindex=\"-1\">›</button>\n <button *ngIf=\"isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\"\n tabindex=\"-1\">&gt;\n </button>\n </th>\n </tr>\n <tr>\n <th *ngIf=\"datePicker.showWeeks\"></th>\n <th *ngFor=\"let labelz of labels\" class=\"text-center\">\n <small aria-label=\"labelz.full\"><b>{{ labelz.abbr }}</b></small>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-template ngFor [ngForOf]=\"rows\" let-rowz=\"$implicit\" let-index=\"index\">\n <tr *ngIf=\"!(datePicker.onlyCurrentMonth && rowz[0].secondary && rowz[6].secondary)\">\n <td *ngIf=\"datePicker.showWeeks\" class=\"h6\" class=\"text-center\">\n <em>{{ weekNumbers[index] }}</em>\n </td>\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [id]=\"dtz.uid\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-sm {{dtz.customClass}}\"\n *ngIf=\"!(datePicker.onlyCurrentMonth && dtz.secondary)\"\n [ngClass]=\"{'btn-secondary': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected, disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz), 'btn-default': !isBs4}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-muted': dtz.secondary || dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </ng-template>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-secondary {\n color: #292b2c;\n background-color: #fff;\n border-color: #ccc;\n }\n :host .btn-info .text-muted {\n color: #292b2c !important;\n }\n `\n ]\n})\nexport class DayPickerComponent implements OnInit {\n labels: any[] = [];\n title: string;\n rows: any[] = [];\n weekNumbers: number[] = [];\n datePicker: DatePickerInnerComponent;\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n /*protected getDaysInMonth(year:number, month:number) {\n return ((month === 1) && (year % 4 === 0) &&\n ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];\n }*/\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepDay = { months: 1 };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const year = this.activeDate.getFullYear();\n const month = this.activeDate.getMonth();\n const firstDayOfMonth = new Date(year, month, 1);\n const difference = this.startingDay - firstDayOfMonth.getDay();\n const numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference;\n const firstDate = new Date(firstDayOfMonth.getTime());\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n const _days: Date[] = self.getDates(firstDate, 42);\n const days: any[] = [];\n for (let i = 0; i < 42; i++) {\n const _dateObject = this.createDateObject(_days[i], this.formatDay);\n _dateObject.secondary = _days[i].getMonth() !== month;\n _dateObject.uid = this.uniqueId + '-' + i;\n days[i] = _dateObject;\n }\n\n self.labels = [];\n for (let j = 0; j < 7; j++) {\n self.labels[j] = {};\n self.labels[j].abbr = this.dateFilter(\n days[j].date,\n this.formatDayHeader\n );\n self.labels[j].full = this.dateFilter(days[j].date, 'EEEE');\n }\n\n self.title = this.dateFilter(this.activeDate, this.formatDayTitle);\n self.rows = this.split(days, 7);\n\n if (this.showWeeks) {\n self.weekNumbers = [];\n const thursdayIndex = (4 + 7 - this.startingDay) % 7;\n const numWeeks = self.rows.length;\n for (let curWeek = 0; curWeek < numWeeks; curWeek++) {\n self.weekNumbers.push(\n self.getISO8601WeekNumber(self.rows[curWeek][thursdayIndex].date)\n );\n }\n }\n }, 'day');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n }, 'day');\n\n this.datePicker.refreshView();\n }\n\n protected getDates(startDate: Date, n: number): Date[] {\n const dates: Date[] = new Array(n);\n let current = new Date(startDate.getTime());\n let i = 0;\n let date: Date;\n while (i < n) {\n date = new Date(current.getTime());\n date = this.datePicker.fixTimeZone(date);\n dates[i++] = date;\n current = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + 1\n );\n }\n return dates;\n }\n\n protected getISO8601WeekNumber(date: Date): number {\n const checkDate = new Date(date.getTime());\n // Thursday\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n const time = checkDate.getTime();\n // Compare with Jan 1\n checkDate.setMonth(0);\n checkDate.setDate(1);\n return (\n Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1\n );\n }\n\n // todo: key events implementation\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\n\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'monthpicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode==='month'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\" tabindex=\"-1\">‹</button></th>\n <th [attr.colspan]=\"((datePicker.monthColLimit - 2) <= 0) ? 1 : datePicker.monthColLimit - 2\">\n <button [id]=\"datePicker.uniqueId + '-title'\"\n type=\"button\" class=\"btn btn-default btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong> \n </button>\n </th>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\" tabindex=\"-1\">›</button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rowz of rows\">\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [attr.id]=\"dtz.uid\" [ngClass]=\"dtz.customClass\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n [ngClass]=\"{'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)), disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz)}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-info .text-success {\n color: #fff !important;\n }\n `\n ]\n})\nexport class MonthPickerComponent implements OnInit {\n title: string;\n rows: any[] = [];\n datePicker: DatePickerInnerComponent;\n maxMode: string;\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepMonth = { years: 1 };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const months: any[] = new Array(12);\n const year: number = this.activeDate.getFullYear();\n let date: Date;\n\n for (let i = 0; i < 12; i++) {\n date = new Date(year, i, 1);\n date = this.fixTimeZone(date);\n months[i] = this.createDateObject(date, this.formatMonth);\n months[i].uid = this.uniqueId + '-' + i;\n }\n\n self.title = this.dateFilter(this.activeDate, this.formatMonthTitle);\n self.rows = this.split(months, self.datePicker.monthColLimit);\n }, 'month');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth());\n const d2 = new Date(date2.getFullYear(), date2.getMonth());\n return d1.getTime() - d2.getTime();\n }, 'month');\n\n this.datePicker.refreshView();\n }\n\n // todo: key events implementation\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\n\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'yearpicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode==='year'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\" tabindex=\"-1\">‹</button>\n </th>\n <th [attr.colspan]=\"((datePicker.yearColLimit - 2) <= 0) ? 1 : datePicker.yearColLimit - 2\">\n <button [id]=\"datePicker.uniqueId + '-title'\" role=\"heading\"\n type=\"button\" class=\"btn btn-default btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === datePicker.maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === datePicker.maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong>\n </button>\n </th>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\" tabindex=\"-1\">›</button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rowz of rows\">\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [attr.id]=\"dtz.uid\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n [ngClass]=\"{'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)), disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz)}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-info .text-success {\n color: #fff !important;\n }\n `\n ]\n})\nexport class YearPickerComponent implements OnInit {\n datePicker: DatePickerInnerComponent;\n title: string;\n rows: any[] = [];\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepYear = { years: this.datePicker.yearRange };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const years: any[] = new Array(this.yearRange);\n let date: Date;\n const start = self.getStartingYear(this.activeDate.getFullYear());\n\n for (let i = 0; i < this.yearRange; i++) {\n date = new Date(start + i, 0, 1);\n date = this.fixTimeZone(date);\n years[i] = this.createDateObject(date, this.formatYear);\n years[i].uid = this.uniqueId + '-' + i;\n }\n\n self.title = [years[0].label, years[this.yearRange - 1].label].join(\n ' - '\n );\n self.rows = this.split(years, self.datePicker.yearColLimit);\n }, 'year');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n return date1.getFullYear() - date2.getFullYear();\n }, 'year');\n\n this.datePicker.refreshView();\n }\n\n protected getStartingYear(year: number): number {\n // todo: parseInt\n return (\n (year - 1) / this.datePicker.yearRange * this.datePicker.yearRange + 1\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\nimport { DatePickerComponent } from './datepicker.component';\nimport { DatepickerConfig } from './datepicker.config';\nimport { DayPickerComponent } from './daypicker.component';\nimport { MonthPickerComponent } from './monthpicker.component';\nimport { YearPickerComponent } from './yearpicker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n DatePickerInnerComponent,\n DayPickerComponent,\n MonthPickerComponent,\n YearPickerComponent\n ],\n exports: [\n DatePickerComponent,\n DatePickerInnerComponent,\n DayPickerComponent,\n MonthPickerComponent,\n YearPickerComponent\n ],\n entryComponents: [DatePickerComponent]\n})\nexport class DatepickerModule {\n static forRoot(): ModuleWithProviders {\n return { ngModule: DatepickerModule, providers: [DatepickerConfig] };\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-bootstrap/datepicker/bs-datepicker.config.ts","ng://ngx-bootstrap/datepicker/datepicker-animations.ts","ng://ngx-bootstrap/datepicker/base/bs-datepicker-container.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.actions.ts","ng://ngx-bootstrap/datepicker/bs-locale.service.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.effects.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.state.ts","ng://ngx-bootstrap/datepicker/reducer/_defaults.ts","ng://ngx-bootstrap/datepicker/utils/bs-calendar-utils.ts","ng://ngx-bootstrap/datepicker/utils/matrix-utils.ts","ng://ngx-bootstrap/datepicker/engine/calc-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/format-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/flag-days-calendar.ts","ng://ngx-bootstrap/datepicker/engine/view-mode.ts","ng://ngx-bootstrap/datepicker/engine/format-months-calendar.ts","ng://ngx-bootstrap/datepicker/engine/format-years-calendar.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.reducer.ts","ng://ngx-bootstrap/datepicker/engine/flag-months-calendar.ts","ng://ngx-bootstrap/datepicker/engine/flag-years-calendar.ts","ng://ngx-bootstrap/datepicker/reducer/bs-datepicker.store.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-container.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-inline.config.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-inline-container.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-inline.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-inline.config.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-daterangepicker-container.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-daterangepicker-inline-container.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-inline.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker-input.directive.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker.config.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker.component.ts","ng://ngx-bootstrap/datepicker/bs-daterangepicker-input.directive.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-calendar-layout.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-current-date-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-custom-dates-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-day-decorator.directive.ts","ng://ngx-bootstrap/datepicker/models/index.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-datepicker-navigation-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-days-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-months-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-timepicker-view.component.ts","ng://ngx-bootstrap/datepicker/themes/bs/bs-years-calendar-view.component.ts","ng://ngx-bootstrap/datepicker/bs-datepicker.module.ts","ng://ngx-bootstrap/datepicker/date-formatter.ts","ng://ngx-bootstrap/datepicker/datepicker-inner.component.ts","ng://ngx-bootstrap/datepicker/datepicker.config.ts","ng://ngx-bootstrap/datepicker/datepicker.component.ts","ng://ngx-bootstrap/datepicker/daypicker.component.ts","ng://ngx-bootstrap/datepicker/monthpicker.component.ts","ng://ngx-bootstrap/datepicker/yearpicker.component.ts","ng://ngx-bootstrap/datepicker/datepicker.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__values","o","m","Symbol","iterator","i","call","next","length","value","done","__read","n","r","e","ar","push","error","BsDatepickerConfig","adaptivePosition","useUtc","isAnimated","startView","returnFocusToInput","containerClass","displayMonths","showWeekNumbers","dateInputFormat","rangeSeparator","rangeInputFormat","monthTitle","yearTitle","dayLabel","monthLabel","yearLabel","weekNumbers","showTodayButton","showClearButton","todayPosition","clearPosition","todayButtonLabel","clearButtonLabel","customRangeButtonLabel","Injectable","args","providedIn","datepickerAnimation","trigger","state","style","height","overflow","transition","animate","BsDatepickerAbstractComponent","customRanges","chosenRange","defineProperty","_effects","setMinDate","setMaxDate","setDaysDisabled","setDatesDisabled","setDatesEnabled","setDisabled","setDateCustomClasses","setDateTooltipTexts","setViewMode","event","navigateTo","dayHoverHandler","weekHoverHandler","monthHoverHandler","yearHoverHandler","daySelectHandler","day","monthSelectHandler","yearSelectHandler","setRangeOnCalendar","dates","setToday","clearDate","_stopPropagation","stopPropagation","BsDatepickerActions","calculate","type","CALCULATE","format","FORMAT","flag","FLAG","select","date","SELECT","payload","changeViewMode","CHANGE_VIEWMODE","NAVIGATE_TO","navigateStep","step","NAVIGATE_OFFSET","setOptions","options","SET_OPTIONS","selectRange","SELECT_RANGE","hoverDay","HOVER","isHovered","cell","minDate","SET_MIN_DATE","maxDate","SET_MAX_DATE","daysDisabled","days","SET_DAYSDISABLED","datesDisabled","SET_DATESDISABLED","datesEnabled","SET_DATESENABLED","isDisabled","SET_IS_DISABLED","SET_DATE_CUSTOM_CLASSES","SET_DATE_TOOLTIP_TEXTS","setLocale","locale","SET_LOCALE","BsLocaleService","_defaultLocale","_locale","BehaviorSubject","_localeChange","asObservable","getValue","use","currentLocale","BsDatepickerEffects","_actions","_localeService","_subs","init","_bsDatepickerStore","_store","setValue","dispatch","setRangeValue","_config","_options","assign","setBindings","container","daysCalendar","flaggedMonths","pipe","filter","months","monthsCalendar","flaggedMonthsCalendar","yearsCalendar","yearsCalendarFlagged","years","viewMode","view","mode","map","setEventHandlers","_this","_cell","isOtherMonth","registerDatepickerSideEffects","subscribe","monthsModel","monthModel","month","formattedMonths","selectedDate","selectedRange","yearsCalendarModel","hoveredDate","dateCustomClasses","dateTooltipTexts","localeChange","destroy","_b","_c","unsubscribe","_initialView","Date","initialDatepickerState","monthViewOptions","width","isMonthDisabled","min","max","minBound","isBefore","endOf","maxBound","isAfter","startOf","isYearDisabled","getYearsCalendarInitialDate","calendarIndex","model","createMatrix","fn","prevValue","initialDate","matrix","j","shiftDate","shift","calcDaysCalendar","startingDate","firstDay","getFirstDayOfMonth","isFirstDayOfWeek","firstDayOfWeek","offset","weekday","startingDayOffset","calculateDateOffset","getDay","getStartingDayOfCalendar","daysMatrix","getShiftedWeekdays","getLocale","weekdays","weekdaysShort","arguments","concat","__spread","slice","flagDaysCalendar","formattedMonth","weeks","forEach","week","dayIndex","isSameMonth","isSameDay","isSelectionStart","isSelectionEnd","isSelected","isInRange","isDateInRange","isDisabledDay","isArray","some","dateDisabled","isSame","enabledDate","isEnabledDate","currentDate","isToday","customClasses","dcc","classes","reduce","previousValue","currentValue","join","tooltipText","tt","newDay","hideLeftArrow","monthIndex","hideRightArrow","disableLeftArrow","disableRightArrow","canSwitchMode","minMode","formatMonthsCalendar","viewDate","formatOptions","label","formatDate","initialYearShift","Math","floor","yearsPerCalendar","year","formatYearsCalendar","previousInitialDate","yearsMatrix","getFullYear","calculateInitialDate","shift$1","from","to","formatYearRangeTitle","bsDatepickerReducer","action","displayOneMonthRange","isDisplayOneMonth","showPreviousMonth","getFormatOptions","undefined","calculateReducer","weekIndex","formatDaysCalendar","formatReducer","monthCalendar","hoveredMonth","rowIndex","newMonth","yearIndex","isSameYear","hoveredYear","flagYearsCalendar","flagReducer","newState","shiftViewDate","navigateOffsetReducer","setFullDate","unit","getViewDate","isDateValid","middleDate","_date","getMonth","BsDatepickerStore","_dispatcher","MiniState","_super","MiniStore","BsDatepickerContainerComponent","_renderer","_element","_positionService","valueChange","EventEmitter","animationState","setStyle","nativeElement","ngOnInit","modifiers","flip","enabled","allowedPositions","event$","take","disable","isTopPosition","isOtherMonthsActive","selectFromOtherMonth","showTodayBtn","todayBtnLbl","todayPos","showClearBtn","clearBtnLbl","clearPos","customRangeBtnLbl","emit","classList","contains","positionServiceEnable","enable","ngOnDestroy","Component","selector","providers","template","host","class","(click)","role","aria-label","animations","Renderer2","ElementRef","PositioningService","BsDatepickerDirective","_elementRef","_viewContainerRef","cis","placement","triggers","outsideClick","outsideEsc","bsValueChange","_dateInputFormat$","Subject","_datepicker","createLoader","onShown","onHidden","isOpen$","isOpen","isShown","_bsValue","getTime","_bsConfig","bsConfig","setConfig","isDestroy$","listen","show","ngOnChanges","changes","_datepickerRef","instance","ngAfterViewInit","takeUntil","toggle","provide","useValue","attach","position","attachment","bsValue","hide","selectRootElement","focus","dispose","complete","Directive","exportAs","ViewContainerRef","ComponentLoaderFactory","Input","Output","BsDatepickerInlineConfig","BsDatepickerInlineContainerComponent","_positioningService","BsDatepickerInlineDirective","BsDaterangepickerInlineConfig","apply","BsDaterangepickerContainerComponent","_rangeStack","ranges","rangesProcessing","maxDateRange","setMaxDateRangeOnCalendar","currentSelection","setDate","getDate","BsDaterangepickerInlineContainerComponent","BsDaterangepickerInlineDirective","range","BS_DATEPICKER_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","useExisting","forwardRef","BsDatepickerInputDirective","multi","BS_DATEPICKER_VALIDATOR","NG_VALIDATORS","_picker","_elRef","changeDetection","_onChange","Function","_onTouched","_validatorChange","_setInputValue","_value","markForCheck","dateInputFormat$","distinctUntilChanged","onKeydownEvent","keyCode","code","setProperty","onChange","writeValue","validate","c","isDate","bsDate","invalid","registerOnValidatorChange","_localeKey","Error","parseDate","utcAsLocal","setDisabledState","setAttribute","removeAttribute","registerOnChange","registerOnTouched","onBlur","blur","(change)","(keyup.esc)","(keydown)","(blur)","decorators","Host","ChangeDetectorRef","BsDaterangepickerConfig","BsDaterangepickerDirective","_rangeInputFormat$","BS_DATERANGEPICKER_VALUE_ACCESSOR","BsDaterangepickerInputDirective","BS_DATERANGEPICKER_VALIDATOR","rangeInputFormat$","start","end","errors","sort","a","_isFirstDateValid","_isSecondDateValid","_input","split","_val","isNaN","valueOf","BsCalendarLayoutComponent","BsCurrentDateViewComponent","BsCustomDatesViewComponent","onSelect","customRange","selectFromRanges","checkRange","ChangeDetectionStrategy","OnPush","BsDatepickerDayDecoratorComponent","customTodayClass","addClass","className","[class.disabled]","[class.is-highlighted]","[class.is-other-month]","[class.is-active-other-month]","[class.in-range]","[class.select-start]","[class.select-end]","[class.selected]","UP","DOWN","BsDatepickerNavigationViewComponent","onNavigate","onViewMode","navTo","down","BsNavigationDirection","BsDaysCalendarViewComponent","onHover","onHoverWeek","isiOS","test","navigator","platform","maxTouchPoints","isShowTooltip","selectDay","selectWeek","selectWeekDateRange","selectedDay","find","lastDayOfRange","reverse","isWeekHovered","isOtherMonthHovered","dateData","BsMonthCalendarViewComponent","viewMonth","hoverMonth","BsTimepickerViewComponent","ampm","hours","minutes","BsYearsCalendarViewComponent","viewYear","hoverYear","BsDatepickerModule","forRoot","ngModule","NgModule","imports","CommonModule","TooltipModule","declarations","entryComponents","exports","DateFormatter","DatePickerInnerComponent","selectionDone","update","activeDateChange","stepDay","stepMonth","stepYear","modes","dateFormatter","_activeDate","uniqueId","random","initDate","activeDate","refreshView","checkIfActiveDateGotUpdated","firstChange","setCompareHandler","handler","compareHandlerDay","compareHandlerMonth","compareHandlerYear","compare","date1","date2","datepickerMode","setRefreshViewHandler","refreshViewHandlerDay","refreshViewHandlerMonth","refreshViewHandlerYear","dateFilter","isActive","dateObject","activeDateId","uid","createDateObject","fixTimeZone","selected","disabled","current","customClass","getCustomClassForDate","arr","size","arrays","splice","getHours","isManual","indexOf","move","direction","expectedStep","toggleMode","_direction","maxMode","customClassObject","clazz","compareDateDisabled","date1Disabled","isDateDisabled","disabledDate","dayDisabled","DatepickerConfig","startingDay","yearRange","showWeeks","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","onlyCurrentMonth","monthColLimit","yearColLimit","shortcutPropagation","DATEPICKER_CONTROL_VALUE_ACCESSOR","DatePickerComponent","config","onTouched","_now","configureOptions","onUpdate","onSelectionDone","onActiveDateChange","_datePicker","ViewChild","static","DayPickerComponent","datePicker","labels","rows","isBs3","self","firstDayOfMonth","difference","numDisplayedFromPreviousMonth","firstDate","_days","getDates","_dateObject","secondary","abbr","full","title","thursdayIndex","numWeeks","curWeek","getISO8601WeekNumber","d1","d2","startDate","checkDate","time","setMonth","round","MonthPickerComponent","YearPickerComponent","getStartingYear","DatepickerModule","FormsModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {\n DatepickerRenderOptions,\n BsDatepickerViewMode,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText\n} from './models';\nimport { BsCustomDates } from './themes/bs/bs-custom-dates-view.component';\n\n\n/**\n * For date range picker there are `BsDaterangepickerConfig` which inherits all properties,\n * except `displayMonths`, for range picker it default to `2`\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class BsDatepickerConfig implements DatepickerRenderOptions {\n /** sets use adaptive position */\n adaptivePosition = false;\n /** sets use UTC date time format */\n useUtc = false;\n /** turn on/off animation */\n isAnimated = false;\n value?: Date | Date[];\n isDisabled?: boolean;\n /**\n * Default min date for all date/range pickers\n */\n minDate?: Date;\n /**\n * Default max date for all date/range pickers\n */\n maxDate?: Date;\n /**\n * The view that the datepicker should start in\n */\n startView: BsDatepickerViewMode = 'day';\n /**\n * Default date custom classes for all date/range pickers\n */\n dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Default tooltip text for all date/range pickers\n */\n dateTooltipTexts?: DatepickerDateTooltipText[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n datesDisabled?: Date[];\n /**\n * Show one months for special cases (only for dateRangePicker)\n * 1. maxDate is equal to today's date\n * 2. minDate's month is equal to maxDate's month\n */\n displayOneMonthRange?: boolean;\n /**\n * Enable specific dates\n */\n datesEnabled?: Date[];\n /**\n * Makes dates from other months active\n */\n selectFromOtherMonth?: boolean;\n\n /**\n * Allows select first date of the week by click on week number\n */\n selectWeek?: boolean;\n\n /**\n * Allows select daterange as first and last day of week by click on week number (dateRangePicker only)\n */\n selectWeekDateRange?: boolean;\n\n /**\n * Shows previous and current month, instead of current and next (dateRangePicker only)\n */\n showPreviousMonth?: boolean;\n\n /**\n * Add class to current day\n */\n customTodayClass?: string;\n\n /**\n * Default mode for all date pickers\n */\n minMode?: BsDatepickerViewMode;\n\n /**\n * If true, returns focus to the datepicker / daterangepicker input after date selection\n */\n returnFocusToInput = false;\n\n /** CSS class which will be applied to datepicker container,\n * usually used to set color theme\n */\n containerClass = 'theme-green';\n\n // DatepickerRenderOptions\n displayMonths = 1;\n /**\n * Allows to hide week numbers in datepicker\n */\n showWeekNumbers = true;\n\n dateInputFormat = 'L';\n // range picker\n rangeSeparator = ' - ';\n /**\n * Date format for date range input field\n */\n rangeInputFormat = 'L';\n\n /**\n * Predefined ranges\n */\n ranges?: BsCustomDates[];\n\n /**\n * Max Date Range in days\n */\n maxDateRange?: number;\n\n // DatepickerFormatOptions\n monthTitle = 'MMMM';\n yearTitle = 'YYYY';\n dayLabel = 'D';\n monthLabel = 'MMMM';\n yearLabel = 'YYYY';\n weekNumbers = 'w';\n\n /**\n * Shows 'today' button\n */\n showTodayButton = false;\n\n /**\n * Shows clear button\n */\n showClearButton = false;\n\n /**\n * Positioning of 'today' button\n */\n todayPosition = 'center';\n\n /**\n * Positioning of 'clear' button\n */\n clearPosition = 'right';\n\n /**\n * Label for 'today' button\n */\n todayButtonLabel = 'Today';\n\n /**\n * Label for 'clear' button\n */\n clearButtonLabel = 'Clear';\n\n /**\n * Label for 'custom range' button\n */\n customRangeButtonLabel = 'Custom Range';\n}\n","import {\n animate,\n style,\n AnimationTriggerMetadata,\n state,\n transition,\n trigger\n} from '@angular/animations';\n\nexport const DATEPICKER_ANIMATION_TIMING = '220ms cubic-bezier(0, 0, 0.2, 1)';\n\nexport const datepickerAnimation: AnimationTriggerMetadata =\n trigger('datepickerAnimation', [\n state('animated-down', style({ height: '*', overflow: 'hidden'})),\n transition('* => animated-down', [\n style({ height: 0, overflow: 'hidden' }),\n animate(DATEPICKER_ANIMATION_TIMING)\n ]),\n state('animated-up', style({ height: '*', overflow: 'hidden'})),\n transition('* => animated-up', [\n style({ height: '*', overflow: 'hidden' }),\n animate(DATEPICKER_ANIMATION_TIMING)\n ]),\n transition('* => unanimated', animate('0s'))\n ]);\n","// datepicker container component\n/* tslint:disable:no-empty */\nimport { BsCustomDates } from '../themes/bs/bs-custom-dates-view.component';\nimport { BsDatepickerEffects } from '../reducer/bs-datepicker.effects';\nimport { Observable } from 'rxjs';\nimport {\n BsDatepickerViewMode,\n BsNavigationEvent,\n CalendarCellViewModel,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText,\n DaysCalendarViewModel,\n DayViewModel,\n MonthsCalendarViewModel,\n WeekViewModel,\n YearsCalendarViewModel\n} from '../models';\n\nexport abstract class BsDatepickerAbstractComponent {\n containerClass: string;\n isOtherMonthsActive: boolean;\n showTodayBtn: boolean;\n todayBtnLbl: string;\n todayPos: string;\n showClearBtn: boolean;\n clearBtnLbl: string;\n clearPos: string;\n\n _effects: BsDatepickerEffects;\n customRanges: BsCustomDates[] = [];\n customRangeBtnLbl: string;\n chosenRange: Date[] = [];\n\n set minDate(value: Date) {\n this._effects.setMinDate(value);\n }\n\n set maxDate(value: Date) {\n this._effects.setMaxDate(value);\n }\n set daysDisabled(value: number[]) {\n this._effects.setDaysDisabled(value);\n }\n set datesDisabled(value: Date[]) {\n this._effects.setDatesDisabled(value);\n }\n\n set datesEnabled(value: Date[]) {\n this._effects.setDatesEnabled(value);\n }\n\n set isDisabled(value: boolean) {\n this._effects.setDisabled(value);\n }\n\n set dateCustomClasses(value: DatepickerDateCustomClasses[]) {\n this._effects.setDateCustomClasses(value);\n }\n\n set dateTooltipTexts(value: DatepickerDateTooltipText[]) {\n this._effects.setDateTooltipTexts(value);\n }\n\n viewMode: Observable<BsDatepickerViewMode>;\n daysCalendar: Observable<DaysCalendarViewModel[]>;\n monthsCalendar: Observable<MonthsCalendarViewModel[]>;\n yearsCalendar: Observable<YearsCalendarViewModel[]>;\n options: Observable<DatepickerRenderOptions>;\n\n setViewMode(event: BsDatepickerViewMode): void {}\n\n navigateTo(event: BsNavigationEvent): void {}\n\n dayHoverHandler(event: CellHoverEvent): void {}\n\n weekHoverHandler(event: WeekViewModel): void {}\n\n monthHoverHandler(event: CellHoverEvent): void {}\n\n yearHoverHandler(event: CellHoverEvent): void {}\n\n daySelectHandler(day: DayViewModel): void {}\n\n monthSelectHandler(event: CalendarCellViewModel): void {}\n\n yearSelectHandler(event: CalendarCellViewModel): void {}\n\n setRangeOnCalendar(dates: BsCustomDates): void {}\n\n setToday(): void {}\n\n clearDate(): void {}\n\n /* tslint:disable-next-line: no-any */\n _stopPropagation(event: any): void {\n event.stopPropagation();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TimeUnit } from 'ngx-bootstrap/chronos';\nimport { Action } from 'ngx-bootstrap/mini-ngrx';\nimport {\n BsDatepickerViewMode,\n BsViewNavigationEvent,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText\n} from '../models';\n\n@Injectable()\nexport class BsDatepickerActions {\n static readonly CALCULATE = '[datepicker] calculate dates matrix';\n static readonly FORMAT = '[datepicker] format datepicker values';\n static readonly FLAG = '[datepicker] set flags';\n static readonly SELECT = '[datepicker] select date';\n static readonly NAVIGATE_OFFSET = '[datepicker] shift view date';\n static readonly NAVIGATE_TO = '[datepicker] change view date';\n static readonly SET_OPTIONS = '[datepicker] update render options';\n static readonly HOVER = '[datepicker] hover date';\n static readonly CHANGE_VIEWMODE = '[datepicker] switch view mode';\n\n static readonly SET_MIN_DATE = '[datepicker] set min date';\n static readonly SET_MAX_DATE = '[datepicker] set max date';\n static readonly SET_DAYSDISABLED = '[datepicker] set days disabled';\n static readonly SET_DATESDISABLED = '[datepicker] set dates disabled';\n static readonly SET_DATESENABLED = '[datepicker] set dates enabled';\n static readonly SET_IS_DISABLED = '[datepicker] set is disabled';\n static readonly SET_DATE_CUSTOM_CLASSES = '[datepicker] set date custom classes';\n static readonly SET_DATE_TOOLTIP_TEXTS = '[datepicker] set date tooltip texts';\n static readonly SET_LOCALE = '[datepicker] set datepicker locale';\n\n static readonly SELECT_RANGE = '[daterangepicker] select dates range';\n\n calculate(): Action {\n return { type: BsDatepickerActions.CALCULATE };\n }\n\n format(): Action {\n return { type: BsDatepickerActions.FORMAT };\n }\n\n flag(): Action {\n return { type: BsDatepickerActions.FLAG };\n }\n\n select(date: Date): Action {\n return {\n type: BsDatepickerActions.SELECT,\n payload: date\n };\n }\n\n changeViewMode(event: BsDatepickerViewMode): Action {\n return {\n type: BsDatepickerActions.CHANGE_VIEWMODE,\n payload: event\n };\n }\n\n navigateTo(event: BsViewNavigationEvent): Action {\n return {\n type: BsDatepickerActions.NAVIGATE_TO,\n payload: event\n };\n }\n\n navigateStep(step: TimeUnit): Action {\n return {\n type: BsDatepickerActions.NAVIGATE_OFFSET,\n payload: step\n };\n }\n\n setOptions(options: DatepickerRenderOptions): Action {\n return {\n type: BsDatepickerActions.SET_OPTIONS,\n payload: options\n };\n }\n\n // date range picker\n selectRange(value: Date[]): Action {\n return {\n type: BsDatepickerActions.SELECT_RANGE,\n payload: value\n };\n }\n\n hoverDay(event: CellHoverEvent): Action {\n return {\n type: BsDatepickerActions.HOVER,\n payload: event.isHovered ? event.cell.date : null\n };\n }\n\n minDate(date: Date): Action {\n return {\n type: BsDatepickerActions.SET_MIN_DATE,\n payload: date\n };\n }\n\n maxDate(date: Date): Action {\n return {\n type: BsDatepickerActions.SET_MAX_DATE,\n payload: date\n };\n }\n\n daysDisabled(days: number[]): Action {\n return {\n type: BsDatepickerActions.SET_DAYSDISABLED,\n payload: days\n };\n }\n\n datesDisabled(dates: Date[]): Action {\n return {\n type: BsDatepickerActions.SET_DATESDISABLED,\n payload: dates\n };\n }\n\n datesEnabled(dates: Date[]): Action {\n return {\n type: BsDatepickerActions.SET_DATESENABLED,\n payload: dates\n };\n }\n\n isDisabled(value: boolean): Action {\n return {\n type: BsDatepickerActions.SET_IS_DISABLED,\n payload: value\n };\n }\n\n setDateCustomClasses(value: DatepickerDateCustomClasses[]): Action {\n return {\n type: BsDatepickerActions.SET_DATE_CUSTOM_CLASSES,\n payload: value\n };\n }\n\n setDateTooltipTexts(value: DatepickerDateTooltipText[]): Action {\n return {\n type: BsDatepickerActions.SET_DATE_TOOLTIP_TEXTS,\n payload: value\n };\n }\n\n setLocale(locale: string): Action {\n return {\n type: BsDatepickerActions.SET_LOCALE,\n payload: locale\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class BsLocaleService {\n private _defaultLocale = 'en';\n private _locale = new BehaviorSubject<string>(this._defaultLocale);\n private _localeChange: Observable<string> = this._locale.asObservable();\n\n get locale(): BehaviorSubject<string> {\n return this._locale;\n }\n\n get localeChange(): Observable<string> {\n return this._localeChange;\n }\n\n get currentLocale(): string {\n return this._locale.getValue();\n }\n\n use(locale: string): void {\n if (locale === this.currentLocale) {\n return;\n }\n\n this._locale.next(locale);\n }\n}\n","/* tslint:disable:max-file-line-count */\nimport { Injectable } from '@angular/core';\n\nimport { Observable, Subscription } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nimport { BsDatepickerAbstractComponent } from '../base/bs-datepicker-container';\nimport { BsDatepickerActions } from './bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../bs-datepicker.config';\nimport { BsDatepickerStore } from './bs-datepicker.store';\nimport { BsLocaleService } from '../bs-locale.service';\n\nimport {\n BsDatepickerViewMode,\n BsNavigationEvent,\n CellHoverEvent,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText,\n DaysCalendarViewModel,\n DayViewModel,\n MonthsCalendarViewModel,\n YearsCalendarViewModel\n} from '../models';\n\n\n@Injectable()\nexport class BsDatepickerEffects {\n viewMode: Observable<BsDatepickerViewMode>;\n daysCalendar: Observable<DaysCalendarViewModel[]>;\n monthsCalendar: Observable<MonthsCalendarViewModel[]>;\n yearsCalendar: Observable<YearsCalendarViewModel[]>;\n options: Observable<DatepickerRenderOptions>;\n\n private _store: BsDatepickerStore;\n private _subs: Subscription[] = [];\n\n constructor(private _actions: BsDatepickerActions,\n private _localeService: BsLocaleService) {}\n\n init(_bsDatepickerStore: BsDatepickerStore): BsDatepickerEffects {\n this._store = _bsDatepickerStore;\n\n return this;\n }\n\n /** setters */\n\n setValue(value: Date): void {\n this._store.dispatch(this._actions.select(value));\n }\n\n setRangeValue(value: Date[]): void {\n this._store.dispatch(this._actions.selectRange(value));\n }\n\n setMinDate(value: Date): BsDatepickerEffects {\n this._store.dispatch(this._actions.minDate(value));\n\n return this;\n }\n\n setMaxDate(value: Date): BsDatepickerEffects {\n this._store.dispatch(this._actions.maxDate(value));\n\n return this;\n }\n\n setDaysDisabled(value: number[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.daysDisabled(value));\n\n return this;\n }\n\n setDatesDisabled(value: Date[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.datesDisabled(value));\n\n return this;\n }\n\n setDatesEnabled(value: Date[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.datesEnabled(value));\n\n return this;\n }\n\n setDisabled(value: boolean): BsDatepickerEffects {\n this._store.dispatch(this._actions.isDisabled(value));\n\n return this;\n }\n\n setDateCustomClasses(value: DatepickerDateCustomClasses[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.setDateCustomClasses(value));\n\n return this;\n }\n\n setDateTooltipTexts(value: DatepickerDateTooltipText[]): BsDatepickerEffects {\n this._store.dispatch(this._actions.setDateTooltipTexts(value));\n\n return this;\n }\n\n /* Set rendering options */\n setOptions(_config: BsDatepickerConfig): BsDatepickerEffects {\n const _options = Object.assign({locale: this._localeService.currentLocale}, _config);\n this._store.dispatch(this._actions.setOptions(_options));\n\n return this;\n }\n\n /** view to mode bindings */\n setBindings(container: BsDatepickerAbstractComponent): BsDatepickerEffects {\n container.daysCalendar = this._store\n .select(state => state.flaggedMonths)\n .pipe(\n filter(months => !!months)\n );\n\n // month calendar\n container.monthsCalendar = this._store\n .select(state => state.flaggedMonthsCalendar)\n .pipe(\n filter(months => !!months)\n );\n\n // year calendar\n container.yearsCalendar = this._store\n .select(state => state.yearsCalendarFlagged)\n .pipe(\n filter(years => !!years)\n );\n\n container.viewMode = this._store.select(state => state.view.mode);\n\n container.options = this._store\n .select(state => state.showWeekNumbers)\n .pipe(\n map(showWeekNumbers => ({showWeekNumbers}))\n );\n\n return this;\n }\n\n /** event handlers */\n setEventHandlers(container: BsDatepickerAbstractComponent): BsDatepickerEffects {\n container.setViewMode = (event: BsDatepickerViewMode): void => {\n this._store.dispatch(this._actions.changeViewMode(event));\n };\n\n container.navigateTo = (event: BsNavigationEvent): void => {\n this._store.dispatch(this._actions.navigateStep(event.step));\n };\n\n container.dayHoverHandler = (event: CellHoverEvent): void => {\n const _cell = event.cell as DayViewModel;\n if (_cell.isOtherMonth || _cell.isDisabled) {\n return;\n }\n\n this._store.dispatch(this._actions.hoverDay(event));\n _cell.isHovered = event.isHovered;\n };\n\n container.monthHoverHandler = (event: CellHoverEvent): void => {\n event.cell.isHovered = event.isHovered;\n };\n\n container.yearHoverHandler = (event: CellHoverEvent): void => {\n event.cell.isHovered = event.isHovered;\n };\n\n return this;\n }\n\n registerDatepickerSideEffects(): BsDatepickerEffects {\n this._subs.push(\n this._store.select(state => state.view).subscribe(view => {\n this._store.dispatch(this._actions.calculate());\n })\n );\n\n // format calendar values on month model change\n this._subs.push(\n this._store\n .select(state => state.monthsModel)\n .pipe(\n filter(monthModel => !!monthModel)\n )\n .subscribe(month => this._store.dispatch(this._actions.format()))\n );\n\n // flag day values\n this._subs.push(\n this._store\n .select(state => state.formattedMonths)\n .pipe(\n filter(month => !!month)\n )\n .subscribe(month => this._store.dispatch(this._actions.flag()))\n );\n\n // flag day values\n this._subs.push(\n this._store\n .select(state => state.selectedDate)\n .pipe(\n filter(selectedDate => !!selectedDate)\n )\n .subscribe(selectedDate => this._store.dispatch(this._actions.flag()))\n );\n\n // flag for date range picker\n this._subs.push(\n this._store\n .select(state => state.selectedRange)\n .pipe(\n filter(selectedRange => !!selectedRange)\n )\n .subscribe(selectedRange => this._store.dispatch(this._actions.flag()))\n );\n\n // monthsCalendar\n this._subs.push(\n this._store\n .select(state => state.monthsCalendar)\n .subscribe(() => this._store.dispatch(this._actions.flag()))\n );\n\n // years calendar\n this._subs.push(\n this._store\n .select(state => state.yearsCalendarModel)\n .pipe(\n filter(state => !!state)\n )\n .subscribe(() => this._store.dispatch(this._actions.flag()))\n );\n\n // on hover\n this._subs.push(\n this._store\n .select(state => state.hoveredDate)\n .pipe(\n filter(hoveredDate => !!hoveredDate)\n )\n .subscribe(hoveredDate => this._store.dispatch(this._actions.flag()))\n );\n\n // date custom classes\n this._subs.push(\n this._store\n .select(state => state.dateCustomClasses)\n .pipe(\n filter(dateCustomClasses => !!dateCustomClasses)\n )\n .subscribe(dateCustomClasses => this._store.dispatch(this._actions.flag()))\n );\n\n // date tooltip texts\n this._subs.push(\n this._store\n .select(state => state.dateTooltipTexts)\n .pipe(\n filter(dateTooltipTexts => !!dateTooltipTexts)\n )\n .subscribe(dateTooltipTexts => this._store.dispatch(this._actions.flag()))\n );\n\n // on locale change\n this._subs.push(\n this._localeService.localeChange\n .subscribe(locale => this._store.dispatch(this._actions.setLocale(locale)))\n );\n\n return this;\n }\n\n destroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n }\n}\n","import {\n BsDatepickerViewMode,\n DatepickerFormatOptions,\n DatepickerRenderOptions,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText,\n DaysCalendarModel,\n DaysCalendarViewModel,\n MonthsCalendarViewModel,\n MonthViewOptions,\n YearsCalendarViewModel\n} from '../models';\nimport { defaultMonthOptions } from './_defaults';\nimport { BsDatepickerConfig } from '../bs-datepicker.config';\n\nexport interface BsDatepickerViewState {\n date: Date;\n mode: BsDatepickerViewMode;\n}\n\nexport class BsDatepickerState\n implements DatepickerRenderOptions, DatepickerFormatOptions {\n // date picker\n selectedDate?: Date;\n // daterange picker\n selectedRange?: Date[];\n\n // initial date of calendar, today by default\n view: BsDatepickerViewState;\n\n isDisabled?: boolean;\n // bounds\n minDate?: Date;\n maxDate?: Date;\n daysDisabled?: number[];\n datesDisabled?: Date[];\n datesEnabled?: Date[];\n minMode?: BsDatepickerViewMode;\n dateCustomClasses?: DatepickerDateCustomClasses[];\n dateTooltipTexts?: DatepickerDateTooltipText[];\n\n hoveredDate?: Date;\n hoveredMonth?: Date;\n hoveredYear?: Date;\n\n // days calendar\n monthsModel?: DaysCalendarModel[];\n formattedMonths?: DaysCalendarViewModel[];\n flaggedMonths?: DaysCalendarViewModel[];\n selectFromOtherMonth?: boolean;\n showPreviousMonth?: boolean; // dateRangePicker only;\n displayOneMonthRange?: boolean; // dateRangePicker only;\n\n // months calendar\n monthsCalendar?: MonthsCalendarViewModel[];\n flaggedMonthsCalendar?: MonthsCalendarViewModel[];\n\n // years calendar\n yearsCalendarModel?: YearsCalendarViewModel[];\n yearsCalendarFlagged?: YearsCalendarViewModel[];\n\n // options\n monthViewOptions: MonthViewOptions;\n\n // DatepickerRenderOptions\n showWeekNumbers?: boolean;\n displayMonths?: number;\n\n // DatepickerFormatOptions\n locale: string;\n\n monthTitle: string;\n yearTitle: string;\n\n dayLabel: string;\n monthLabel: string;\n yearLabel: string;\n\n weekNumbers: string;\n}\n\nconst _initialView: BsDatepickerViewState = { date: new Date(), mode: 'day' };\n\nexport const initialDatepickerState: BsDatepickerState = Object.assign(\n new BsDatepickerConfig(),\n {\n locale: 'en',\n view: _initialView,\n selectedRange: [],\n monthViewOptions: defaultMonthOptions\n }\n);\n","import {\n MonthViewOptions\n} from '../models';\n\nexport const defaultMonthOptions: MonthViewOptions = {\n width: 7,\n height: 6\n};\n","import {\n getDay,\n isFirstDayOfWeek,\n isAfter,\n isBefore,\n shiftDate,\n endOf,\n startOf,\n isArray,\n isSame\n} from 'ngx-bootstrap/chronos';\nimport { BsDatepickerState } from '../reducer/bs-datepicker.state';\n\nexport function getStartingDayOfCalendar(date: Date,\n options: { firstDayOfWeek?: number }): Date {\n if (isFirstDayOfWeek(date, options.firstDayOfWeek)) {\n return date;\n }\n\n const weekDay = getDay(date);\n const offset = calculateDateOffset(weekDay, options.firstDayOfWeek);\n\n return shiftDate(date, {day: -offset});\n}\n\nexport function calculateDateOffset(weekday: number, startingDayOffset: number): number {\n if (startingDayOffset === 0) {\n return weekday;\n }\n\n const offset = weekday - startingDayOffset % 7;\n\n return offset < 0 ? offset + 7 : offset;\n}\n\nexport function isMonthDisabled(date: Date, min: Date, max: Date): boolean {\n const minBound = min && isBefore(endOf(date, 'month'), min, 'day');\n const maxBound = max && isAfter(startOf(date, 'month'), max, 'day');\n\n return minBound || maxBound;\n}\n\nexport function isYearDisabled(date: Date, min: Date, max: Date): boolean {\n const minBound = min && isBefore(endOf(date, 'year'), min, 'day');\n const maxBound = max && isAfter(startOf(date, 'year'), max, 'day');\n\n return minBound || maxBound;\n}\n\nexport function isDisabledDate(date: Date, datesDisabled: Date[]): boolean {\n if (!datesDisabled || !isArray(datesDisabled) || !datesDisabled.length) {\n return false;\n }\n\n return datesDisabled.some((dateDisabled: Date) => isSame(date, dateDisabled, 'date'));\n}\n\nexport function isEnabledDate(date: Date, datesEnabled: Date[]): boolean {\n if (!datesEnabled || !isArray(datesEnabled) || !datesEnabled.length) {\n return false;\n }\n\n return !datesEnabled.some((enabledDate: Date) => isSame(date, enabledDate, 'date'));\n}\n\nexport function getYearsCalendarInitialDate(state: BsDatepickerState, calendarIndex = 0): Date {\n const model = state && state.yearsCalendarModel && state.yearsCalendarModel[calendarIndex];\n\n return model && model.years && model.years[0] && model.years[0][0] && model.years[0][0].date;\n}\n","import { TimeUnit, shiftDate } from 'ngx-bootstrap/chronos';\n\nexport type CreateMatrixCb<T> = (date: Date) => T;\n\nexport interface MatrixOptions {\n height: number;\n width: number;\n initialDate: Date;\n shift: TimeUnit;\n}\n\nexport function createMatrix<T>(\n options: MatrixOptions,\n fn: CreateMatrixCb<T>\n): T[][] {\n let prevValue = options.initialDate;\n const matrix: T[][] = new Array(options.height);\n for (let i = 0; i < options.height; i++) {\n matrix[i] = new Array(options.width);\n for (let j = 0; j < options.width; j++) {\n matrix[i][j] = fn(prevValue);\n prevValue = shiftDate(prevValue, options.shift);\n }\n }\n\n return matrix;\n}\n","// user and model input should handle parsing and validating input values\n// should accept some options\n// todo: split out formatting\nimport { DaysCalendarModel, MonthViewOptions } from '../models';\nimport { getFirstDayOfMonth } from 'ngx-bootstrap/chronos';\nimport { getStartingDayOfCalendar } from '../utils/bs-calendar-utils';\nimport { createMatrix } from '../utils/matrix-utils';\n\nexport function calcDaysCalendar(\n startingDate: Date,\n options: MonthViewOptions\n): DaysCalendarModel {\n const firstDay = getFirstDayOfMonth(startingDate);\n const initialDate = getStartingDayOfCalendar(firstDay, options);\n\n const matrixOptions = {\n width: options.width,\n height: options.height,\n initialDate,\n shift: { day: 1 }\n };\n const daysMatrix = createMatrix<Date>(matrixOptions, date => date);\n\n return {\n daysMatrix,\n month: firstDay\n };\n}\n","import {\n DatepickerFormatOptions,\n DaysCalendarModel,\n DaysCalendarViewModel\n} from '../models';\nimport { formatDate, getLocale } from 'ngx-bootstrap/chronos';\n\nexport function formatDaysCalendar(daysCalendar: DaysCalendarModel,\n formatOptions: DatepickerFormatOptions,\n monthIndex: number): DaysCalendarViewModel {\n return {\n month: daysCalendar.month,\n monthTitle: formatDate(\n daysCalendar.month,\n formatOptions.monthTitle,\n formatOptions.locale\n ),\n yearTitle: formatDate(\n daysCalendar.month,\n formatOptions.yearTitle,\n formatOptions.locale\n ),\n weekNumbers: getWeekNumbers(\n daysCalendar.daysMatrix,\n formatOptions.weekNumbers,\n formatOptions.locale\n ),\n weekdays: getShiftedWeekdays(formatOptions.locale),\n weeks: daysCalendar.daysMatrix.map((week: Date[], weekIndex: number) => ({\n days: week.map((date: Date, dayIndex: number) => ({\n date,\n label: formatDate(date, formatOptions.dayLabel, formatOptions.locale),\n monthIndex,\n weekIndex,\n dayIndex\n }))\n }))\n };\n}\n\nexport function getWeekNumbers(daysMatrix: Date[][],\n format: string,\n locale: string): string[] {\n return daysMatrix.map(\n (days: Date[]) => (days[0] ? formatDate(days[0], format, locale) : '')\n );\n}\n\nexport function getShiftedWeekdays(locale: string): string[] {\n const _locale = getLocale(locale);\n const weekdays = _locale.weekdaysShort() as string[];\n const firstDayOfWeek = _locale.firstDayOfWeek();\n\n return [...weekdays.slice(firstDayOfWeek), ...weekdays.slice(0, firstDayOfWeek)];\n}\n","import {\n DaysCalendarViewModel,\n DayViewModel,\n WeekViewModel,\n DatepickerDateCustomClasses,\n DatepickerDateTooltipText\n} from '../models';\n\nimport {\n isAfter,\n isBefore,\n isDisabledDay,\n isSameDay,\n isSameMonth,\n shiftDate\n} from 'ngx-bootstrap/chronos';\n\nimport { isMonthDisabled, isDisabledDate, isEnabledDate } from '../utils/bs-calendar-utils';\n\nexport interface FlagDaysCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n daysDisabled: number[];\n datesDisabled: Date[];\n datesEnabled: Date[];\n hoveredDate: Date;\n selectedDate: Date;\n selectedRange: Date[];\n displayMonths: number;\n monthIndex: number;\n dateCustomClasses: DatepickerDateCustomClasses[];\n dateTooltipTexts: DatepickerDateTooltipText[];\n}\n\nexport function flagDaysCalendar(\n formattedMonth: DaysCalendarViewModel,\n options: FlagDaysCalendarOptions\n): DaysCalendarViewModel {\n formattedMonth.weeks.forEach((week: WeekViewModel) => {\n /* tslint:disable-next-line: cyclomatic-complexity */\n week.days.forEach((day: DayViewModel, dayIndex: number) => {\n // datepicker\n const isOtherMonth = !isSameMonth(day.date, formattedMonth.month);\n\n const isHovered =\n !isOtherMonth && isSameDay(day.date, options.hoveredDate);\n // date range picker\n const isSelectionStart =\n !isOtherMonth &&\n options.selectedRange &&\n isSameDay(day.date, options.selectedRange[0]);\n const isSelectionEnd =\n !isOtherMonth &&\n options.selectedRange &&\n isSameDay(day.date, options.selectedRange[1]);\n\n const isSelected =\n (!isOtherMonth && isSameDay(day.date, options.selectedDate)) ||\n isSelectionStart ||\n isSelectionEnd;\n\n const isInRange =\n !isOtherMonth &&\n options.selectedRange &&\n isDateInRange(day.date, options.selectedRange, options.hoveredDate);\n\n const isDisabled =\n options.isDisabled ||\n isBefore(day.date, options.minDate, 'day') ||\n isAfter(day.date, options.maxDate, 'day') ||\n isDisabledDay(day.date, options.daysDisabled) ||\n isDisabledDate(day.date, options.datesDisabled) ||\n isEnabledDate(day.date, options.datesEnabled);\n\n const currentDate = new Date();\n const isToday = !isOtherMonth && isSameDay(day.date, currentDate);\n\n const customClasses = options.dateCustomClasses && options.dateCustomClasses\n .map(dcc => isSameDay(day.date, dcc.date) ? dcc.classes : [])\n .reduce((previousValue, currentValue) => previousValue.concat(currentValue), [])\n .join(' ')\n || '';\n\n const tooltipText = options.dateTooltipTexts && options.dateTooltipTexts\n .map(tt => isSameDay(day.date, tt.date) ? tt.tooltipText : '')\n .reduce((previousValue, currentValue) => previousValue.concat(currentValue), [])\n .join(' ')\n || '';\n\n // decide update or not\n const newDay = Object.assign({}, day, {\n isOtherMonth,\n isHovered,\n isSelected,\n isSelectionStart,\n isSelectionEnd,\n isInRange,\n isDisabled,\n isToday,\n customClasses,\n tooltipText\n });\n\n if (\n day.isOtherMonth !== newDay.isOtherMonth ||\n day.isHovered !== newDay.isHovered ||\n day.isSelected !== newDay.isSelected ||\n day.isSelectionStart !== newDay.isSelectionStart ||\n day.isSelectionEnd !== newDay.isSelectionEnd ||\n day.isDisabled !== newDay.isDisabled ||\n day.isInRange !== newDay.isInRange ||\n day.customClasses !== newDay.customClasses ||\n day.tooltipText !== newDay.tooltipText\n ) {\n week.days[dayIndex] = newDay;\n }\n });\n });\n\n // todo: add check for linked calendars\n formattedMonth.hideLeftArrow =\n options.isDisabled ||\n (options.monthIndex > 0 && options.monthIndex !== options.displayMonths);\n formattedMonth.hideRightArrow =\n options.isDisabled ||\n (options.monthIndex < options.displayMonths &&\n options.monthIndex + 1 !== options.displayMonths);\n\n formattedMonth.disableLeftArrow = isMonthDisabled(\n shiftDate(formattedMonth.month, { month: -1 }),\n options.minDate,\n options.maxDate\n );\n formattedMonth.disableRightArrow = isMonthDisabled(\n shiftDate(formattedMonth.month, { month: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return formattedMonth;\n}\n\nfunction isDateInRange(\n date: Date,\n selectedRange: Date[],\n hoveredDate: Date\n): boolean {\n if (!date || !selectedRange[0]) {\n return false;\n }\n\n if (selectedRange[1]) {\n return date > selectedRange[0] && date <= selectedRange[1];\n }\n\n if (hoveredDate) {\n return date > selectedRange[0] && date <= hoveredDate;\n }\n\n return false;\n}\n","import { BsDatepickerViewMode } from '../models';\n\nexport function canSwitchMode(mode: BsDatepickerViewMode, minMode?: BsDatepickerViewMode): boolean {\n return minMode ? mode >= minMode : true;\n}\n","import {\n DatepickerFormatOptions,\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { startOf, formatDate } from 'ngx-bootstrap/chronos';\nimport { createMatrix } from '../utils/matrix-utils';\n\nconst height = 4;\nconst width = 3;\nconst shift = { month: 1 };\n\nexport function formatMonthsCalendar(\n viewDate: Date,\n formatOptions: DatepickerFormatOptions\n): MonthsCalendarViewModel {\n const initialDate = startOf(viewDate, 'year');\n const matrixOptions = { width, height, initialDate, shift };\n const monthMatrix = createMatrix<\n CalendarCellViewModel\n >(matrixOptions, date => ({\n date,\n label: formatDate(date, formatOptions.monthLabel, formatOptions.locale)\n }));\n\n return {\n months: monthMatrix,\n monthTitle: '',\n yearTitle: formatDate(\n viewDate,\n formatOptions.yearTitle,\n formatOptions.locale\n )\n };\n}\n","import {\n DatepickerFormatOptions,\n YearsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { shiftDate, formatDate } from 'ngx-bootstrap/chronos';\nimport { createMatrix } from '../utils/matrix-utils';\n\nconst height = 4;\nconst width = 4;\nexport const yearsPerCalendar = height * width;\nexport const initialYearShift = (Math.floor(yearsPerCalendar / 2) - 1) * -1;\nconst shift = { year: 1 };\n\nexport function formatYearsCalendar(\n viewDate: Date,\n formatOptions: DatepickerFormatOptions,\n previousInitialDate?: Date\n): YearsCalendarViewModel {\n const initialDate = calculateInitialDate(viewDate, previousInitialDate);\n const matrixOptions = { width, height, initialDate, shift };\n const yearsMatrix = createMatrix<\n CalendarCellViewModel\n >(matrixOptions, date => ({\n date,\n label: formatDate(date, formatOptions.yearLabel, formatOptions.locale)\n }));\n const yearTitle = formatYearRangeTitle(yearsMatrix, formatOptions);\n\n return {\n years: yearsMatrix,\n monthTitle: '',\n yearTitle\n };\n}\n\nfunction calculateInitialDate(viewDate: Date, previousInitialDate?: Date): Date {\n if (previousInitialDate\n && viewDate.getFullYear() >= previousInitialDate.getFullYear()\n && viewDate.getFullYear() < previousInitialDate.getFullYear() + yearsPerCalendar) {\n return previousInitialDate;\n }\n\n return shiftDate(viewDate, { year: initialYearShift });\n}\n\nfunction formatYearRangeTitle(\n yearsMatrix: CalendarCellViewModel[][],\n formatOptions: DatepickerFormatOptions\n): string {\n const from = formatDate(\n yearsMatrix[0][0].date,\n formatOptions.yearTitle,\n formatOptions.locale\n );\n const to = formatDate(\n yearsMatrix[height - 1][width - 1].date,\n formatOptions.yearTitle,\n formatOptions.locale\n );\n\n return `${from} - ${to}`;\n}\n","// tslint:disable:max-file-line-count\nimport { BsDatepickerState, initialDatepickerState } from './bs-datepicker.state';\nimport { Action } from 'ngx-bootstrap/mini-ngrx';\nimport { BsDatepickerActions } from './bs-datepicker.actions';\nimport { calcDaysCalendar } from '../engine/calc-days-calendar';\nimport { formatDaysCalendar } from '../engine/format-days-calendar';\nimport { flagDaysCalendar } from '../engine/flag-days-calendar';\nimport {\n setFullDate,\n shiftDate,\n isArray,\n isDateValid,\n startOf,\n getLocale,\n isAfter,\n isBefore,\n isSame\n} from 'ngx-bootstrap/chronos';\nimport { canSwitchMode } from '../engine/view-mode';\nimport { formatMonthsCalendar } from '../engine/format-months-calendar';\nimport { flagMonthsCalendar } from '../engine/flag-months-calendar';\nimport { formatYearsCalendar, initialYearShift, yearsPerCalendar } from '../engine/format-years-calendar';\nimport { flagYearsCalendar } from '../engine/flag-years-calendar';\nimport { BsViewNavigationEvent, DatepickerFormatOptions, BsDatepickerViewMode } from '../models';\nimport { getYearsCalendarInitialDate } from '../utils/bs-calendar-utils';\n\n\n/* tslint:disable-next-line: cyclomatic-complexity */\nexport function bsDatepickerReducer(state = initialDatepickerState,\n action: Action): BsDatepickerState {\n switch (action.type) {\n case BsDatepickerActions.CALCULATE: {\n return calculateReducer(state);\n }\n\n case BsDatepickerActions.FORMAT: {\n return formatReducer(state, action);\n }\n\n case BsDatepickerActions.FLAG: {\n return flagReducer(state, action);\n }\n\n case BsDatepickerActions.NAVIGATE_OFFSET: {\n return navigateOffsetReducer(state, action);\n }\n\n case BsDatepickerActions.NAVIGATE_TO: {\n const payload: BsViewNavigationEvent = action.payload;\n\n const date = setFullDate(state.view.date, payload.unit);\n let newState;\n let mode: BsDatepickerViewMode;\n if (canSwitchMode(payload.viewMode, state.minMode)) {\n mode = payload.viewMode;\n newState = { view: { date, mode } };\n } else {\n mode = state.view.mode;\n newState = { selectedDate: date, view: { date, mode } };\n }\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.CHANGE_VIEWMODE: {\n if (!canSwitchMode(action.payload, state.minMode)) {\n return state;\n }\n const date = state.view.date;\n const mode = action.payload;\n const newState = { view: { date, mode } };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.HOVER: {\n return Object.assign({}, state, { hoveredDate: action.payload });\n }\n\n case BsDatepickerActions.SELECT: {\n const newState = {\n selectedDate: action.payload,\n view: state.view\n };\n\n const mode = state.view.mode;\n const _date = action.payload || state.view.date;\n const date = getViewDate(_date, state.minDate, state.maxDate);\n newState.view = { mode, date };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.SET_OPTIONS: {\n const newState = action.payload;\n // preserve view mode\n const mode = newState.minMode ? newState.minMode : state.view.mode;\n const _viewDate = isDateValid(newState.value) && newState.value\n || isArray(newState.value) && isDateValid(newState.value[0]) && newState.value[0]\n || state.view.date;\n const date = getViewDate(_viewDate, newState.minDate, newState.maxDate);\n newState.view = { mode, date };\n // update selected value\n if (newState.value) {\n // if new value is array we work with date range\n if (isArray(newState.value)) {\n newState.selectedRange = newState.value;\n }\n\n // if new value is a date -> datepicker\n if (newState.value instanceof Date) {\n newState.selectedDate = newState.value;\n }\n\n // provided value is not supported :)\n // need to report it somehow\n }\n\n return Object.assign({}, state, newState);\n }\n\n // date range picker\n case BsDatepickerActions.SELECT_RANGE: {\n const newState = {\n selectedRange: action.payload,\n view: state.view\n };\n\n const mode = state.view.mode;\n const _date = action.payload && action.payload[0] || state.view.date;\n const date = getViewDate(_date, state.minDate, state.maxDate);\n newState.view = { mode, date };\n\n return Object.assign({}, state, newState);\n }\n\n case BsDatepickerActions.SET_MIN_DATE: {\n return Object.assign({}, state, {\n minDate: action.payload\n });\n }\n case BsDatepickerActions.SET_MAX_DATE: {\n return Object.assign({}, state, {\n maxDate: action.payload\n });\n }\n case BsDatepickerActions.SET_IS_DISABLED: {\n return Object.assign({}, state, {\n isDisabled: action.payload\n });\n }\n case BsDatepickerActions.SET_DATE_CUSTOM_CLASSES: {\n return Object.assign({}, state, {\n dateCustomClasses: action.payload\n });\n }\n case BsDatepickerActions.SET_DATE_TOOLTIP_TEXTS: {\n return Object.assign({}, state, {\n dateTooltipTexts: action.payload\n });\n }\n\n default:\n return state;\n }\n}\n\nfunction calculateReducer(state: BsDatepickerState): BsDatepickerState {\n // how many calendars\n const displayMonths = (state.displayOneMonthRange &&\n isDisplayOneMonth(state.view.date, state.minDate, state.maxDate)) ? 1 : state.displayMonths;\n\n // use selected date on initial rendering if set\n let viewDate = state.view.date;\n\n if (state.view.mode === 'day') {\n if (state.showPreviousMonth && state.selectedRange && state.selectedRange.length === 0) {\n viewDate = shiftDate(viewDate, { month: -1 });\n }\n\n state.monthViewOptions.firstDayOfWeek = getLocale(state.locale).firstDayOfWeek();\n const monthsModel = new Array(displayMonths);\n for (let monthIndex = 0; monthIndex < displayMonths; monthIndex++) {\n // todo: for unlinked calendars it will be harder\n monthsModel[monthIndex] = calcDaysCalendar(\n viewDate,\n state.monthViewOptions\n );\n viewDate = shiftDate(viewDate, { month: 1 });\n }\n\n return Object.assign({}, state, { monthsModel });\n }\n\n if (state.view.mode === 'month') {\n const monthsCalendar = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n monthsCalendar[calendarIndex] = formatMonthsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 1 });\n }\n\n return Object.assign({}, state, { monthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarModel = new Array(displayMonths);\n\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n yearsCalendarModel[calendarIndex] = formatYearsCalendar(\n viewDate,\n getFormatOptions(state),\n state.minMode === 'year' ? getYearsCalendarInitialDate(state, calendarIndex) : undefined\n );\n viewDate = shiftDate(viewDate, { year: yearsPerCalendar });\n }\n\n return Object.assign({}, state, { yearsCalendarModel });\n }\n\n return state;\n}\n\nfunction formatReducer(state: BsDatepickerState,\n action: Action): BsDatepickerState {\n if (state.view.mode === 'day') {\n const formattedMonths = state.monthsModel.map((month, monthIndex) =>\n formatDaysCalendar(month, getFormatOptions(state), monthIndex)\n );\n\n return Object.assign({}, state, { formattedMonths });\n }\n\n // how many calendars\n const displayMonths = state.displayMonths;\n // check initial rendering\n // use selected date on initial rendering if set\n let viewDate = state.view.date;\n\n if (state.view.mode === 'month') {\n const monthsCalendar = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n monthsCalendar[calendarIndex] = formatMonthsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 1 });\n }\n\n return Object.assign({}, state, { monthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarModel = new Array(displayMonths);\n for (\n let calendarIndex = 0;\n calendarIndex < displayMonths;\n calendarIndex++\n ) {\n // todo: for unlinked calendars it will be harder\n yearsCalendarModel[calendarIndex] = formatYearsCalendar(\n viewDate,\n getFormatOptions(state)\n );\n viewDate = shiftDate(viewDate, { year: 16 });\n }\n\n return Object.assign({}, state, { yearsCalendarModel });\n }\n\n return state;\n}\n\nfunction flagReducer(state: BsDatepickerState,\n action: Action): BsDatepickerState {\n const displayMonths = isDisplayOneMonth(state.view.date, state.minDate, state.maxDate) ? 1 : state.displayMonths;\n if (state.view.mode === 'day') {\n const flaggedMonths = state.formattedMonths.map(\n (formattedMonth, monthIndex) =>\n flagDaysCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n daysDisabled: state.daysDisabled,\n datesDisabled: state.datesDisabled,\n datesEnabled: state.datesEnabled,\n hoveredDate: state.hoveredDate,\n selectedDate: state.selectedDate,\n selectedRange: state.selectedRange,\n displayMonths,\n dateCustomClasses: state.dateCustomClasses,\n dateTooltipTexts: state.dateTooltipTexts,\n monthIndex\n })\n );\n\n return Object.assign({}, state, { flaggedMonths });\n }\n\n if (state.view.mode === 'month') {\n const flaggedMonthsCalendar = state.monthsCalendar.map(\n (formattedMonth, monthIndex) =>\n flagMonthsCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n hoveredMonth: state.hoveredMonth,\n selectedDate: state.selectedDate,\n selectedRange: state.selectedRange,\n displayMonths,\n monthIndex\n })\n );\n\n return Object.assign({}, state, { flaggedMonthsCalendar });\n }\n\n if (state.view.mode === 'year') {\n const yearsCalendarFlagged = state.yearsCalendarModel.map(\n (formattedMonth, yearIndex) =>\n flagYearsCalendar(formattedMonth, {\n isDisabled: state.isDisabled,\n minDate: state.minDate,\n maxDate: state.maxDate,\n hoveredYear: state.hoveredYear,\n selectedDate: state.selectedDate,\n selectedRange: state.selectedRange,\n displayMonths,\n yearIndex\n })\n );\n\n return Object.assign({}, state, { yearsCalendarFlagged });\n }\n\n return state;\n}\n\nfunction navigateOffsetReducer(state: BsDatepickerState, action: Action): BsDatepickerState {\n const newState = {\n view: {\n mode: state.view.mode,\n date: shiftViewDate(state, action)\n }\n };\n\n return Object.assign({}, state, newState);\n}\n\nfunction shiftViewDate(state: BsDatepickerState, action: Action): Date {\n if (state.view.mode === 'year' && state.minMode === 'year') {\n const initialDate = getYearsCalendarInitialDate(state, 0);\n const middleDate = shiftDate(initialDate, { year: -initialYearShift });\n\n return shiftDate(middleDate, action.payload);\n }\n\n return shiftDate(startOf(state.view.date, 'month'), action.payload);\n}\n\nfunction getFormatOptions(state: BsDatepickerState): DatepickerFormatOptions {\n return {\n locale: state.locale,\n\n monthTitle: state.monthTitle,\n yearTitle: state.yearTitle,\n\n dayLabel: state.dayLabel,\n monthLabel: state.monthLabel,\n yearLabel: state.yearLabel,\n\n weekNumbers: state.weekNumbers\n };\n}\n\n/**\n * if view date is provided (bsValue|ngModel) it should be shown\n * if view date is not provider:\n * if minDate>currentDate (default view value), show minDate\n * if maxDate<currentDate(default view value) show maxDate\n */\nfunction getViewDate(viewDate: Date | Date[], minDate: Date, maxDate: Date) {\n const _date = Array.isArray(viewDate) ? viewDate[0] : viewDate;\n\n if (minDate && isAfter(minDate, _date, 'day')) {\n return minDate;\n }\n\n if (maxDate && isBefore(maxDate, _date, 'day')) {\n return maxDate;\n }\n\n return _date;\n}\n\nfunction isDisplayOneMonth(viewDate: Date, minDate: Date, maxDate: Date) {\n if (maxDate && isSame(maxDate, viewDate, 'day')) {\n return true;\n }\n\n if (minDate && maxDate && minDate.getMonth() === maxDate.getMonth()) {\n return true;\n }\n\n return false;\n}\n","import { isSameMonth, shiftDate } from 'ngx-bootstrap/chronos';\nimport {\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../models';\nimport { isMonthDisabled, isYearDisabled } from '../utils/bs-calendar-utils';\n\nexport interface FlagMonthCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n hoveredMonth: Date;\n selectedDate: Date;\n selectedRange: Date[];\n displayMonths: number;\n monthIndex: number;\n}\n\nexport function flagMonthsCalendar(\n monthCalendar: MonthsCalendarViewModel,\n options: FlagMonthCalendarOptions\n): MonthsCalendarViewModel {\n monthCalendar.months.forEach(\n (months: CalendarCellViewModel[], rowIndex: number) => {\n months.forEach((month: CalendarCellViewModel, monthIndex: number) => {\n let isSelected: boolean;\n const isHovered = isSameMonth(month.date, options.hoveredMonth);\n const isDisabled =\n options.isDisabled ||\n isMonthDisabled(month.date, options.minDate, options.maxDate);\n\n if (!options.selectedDate && options.selectedRange) {\n isSelected = isSameMonth(month.date, options.selectedRange[0]);\n if (!isSelected) {\n isSelected = isSameMonth(month.date, options.selectedRange[1]);\n }\n } else {\n isSelected = isSameMonth(month.date, options.selectedDate);\n }\n const newMonth = Object.assign(/*{},*/ month, {\n isHovered,\n isDisabled,\n isSelected\n });\n if (\n month.isHovered !== newMonth.isHovered ||\n month.isDisabled !== newMonth.isDisabled ||\n month.isSelected !== newMonth.isSelected\n ) {\n monthCalendar.months[rowIndex][monthIndex] = newMonth;\n }\n });\n }\n );\n\n // todo: add check for linked calendars\n monthCalendar.hideLeftArrow =\n options.monthIndex > 0 && options.monthIndex !== options.displayMonths;\n monthCalendar.hideRightArrow =\n options.monthIndex < options.displayMonths &&\n options.monthIndex + 1 !== options.displayMonths;\n\n monthCalendar.disableLeftArrow = isYearDisabled(\n shiftDate(monthCalendar.months[0][0].date, { year: -1 }),\n options.minDate,\n options.maxDate\n );\n monthCalendar.disableRightArrow = isYearDisabled(\n shiftDate(monthCalendar.months[0][0].date, { year: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return monthCalendar;\n}\n","import { isSameYear, shiftDate } from 'ngx-bootstrap/chronos';\nimport { YearsCalendarViewModel, CalendarCellViewModel } from '../models';\nimport { isYearDisabled } from '../utils/bs-calendar-utils';\n\nexport interface FlagYearsCalendarOptions {\n isDisabled: boolean;\n minDate: Date;\n maxDate: Date;\n hoveredYear: Date;\n selectedDate: Date;\n selectedRange: Date[];\n displayMonths: number;\n yearIndex: number;\n}\n\nexport function flagYearsCalendar(\n yearsCalendar: YearsCalendarViewModel,\n options: FlagYearsCalendarOptions\n): YearsCalendarViewModel {\n yearsCalendar.years.forEach(\n (years: CalendarCellViewModel[], rowIndex: number) => {\n years.forEach((year: CalendarCellViewModel, yearIndex: number) => {\n let isSelected: boolean;\n const isHovered = isSameYear(year.date, options.hoveredYear);\n const isDisabled =\n options.isDisabled ||\n isYearDisabled(year.date, options.minDate, options.maxDate);\n\n if (!options.selectedDate && options.selectedRange) {\n isSelected = isSameYear(year.date, options.selectedRange[0]);\n if (!isSelected) {\n isSelected = isSameYear(year.date, options.selectedRange[1]);\n }\n } else {\n isSelected = isSameYear(year.date, options.selectedDate);\n }\n\n const newMonth = Object.assign(/*{},*/ year, { isHovered, isDisabled, isSelected });\n if (\n year.isHovered !== newMonth.isHovered ||\n year.isDisabled !== newMonth.isDisabled ||\n year.isSelected !== newMonth.isSelected\n ) {\n yearsCalendar.years[rowIndex][yearIndex] = newMonth;\n }\n });\n }\n );\n\n // todo: add check for linked calendars\n yearsCalendar.hideLeftArrow =\n options.yearIndex > 0 && options.yearIndex !== options.displayMonths;\n yearsCalendar.hideRightArrow =\n options.yearIndex < options.displayMonths &&\n options.yearIndex + 1 !== options.displayMonths;\n\n yearsCalendar.disableLeftArrow = isYearDisabled(\n shiftDate(yearsCalendar.years[0][0].date, { year: -1 }),\n options.minDate,\n options.maxDate\n );\n const i = yearsCalendar.years.length - 1;\n const j = yearsCalendar.years[i].length - 1;\n yearsCalendar.disableRightArrow = isYearDisabled(\n shiftDate(yearsCalendar.years[i][j].date, { year: 1 }),\n options.minDate,\n options.maxDate\n );\n\n return yearsCalendar;\n}\n","import { Injectable } from '@angular/core';\nimport { MiniStore, Action, MiniState } from 'ngx-bootstrap/mini-ngrx';\nimport { BsDatepickerState, initialDatepickerState } from './bs-datepicker.state';\nimport { BehaviorSubject } from 'rxjs';\nimport { bsDatepickerReducer } from './bs-datepicker.reducer';\n\n@Injectable()\nexport class BsDatepickerStore extends MiniStore<BsDatepickerState> {\n constructor() {\n const _dispatcher = new BehaviorSubject<Action>({\n type: '[datepicker] dispatcher init'\n });\n const state = new MiniState<BsDatepickerState>(\n initialDatepickerState,\n _dispatcher,\n bsDatepickerReducer\n );\n super(_dispatcher, bsDatepickerReducer, state);\n }\n}\n","import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { take } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nimport { getFullYear, getMonth } from 'ngx-bootstrap/chronos';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { datepickerAnimation } from '../../datepicker-animations';\nimport { BsDatepickerAbstractComponent } from '../../base/bs-datepicker-container';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { CalendarCellViewModel, DayViewModel } from '../../models';\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\n\n@Component({\n selector: 'bs-datepicker-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n class: 'bottom',\n '(click)': '_stopPropagation($event)',\n role: 'dialog',\n 'aria-label': 'calendar'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDatepickerContainerComponent extends BsDatepickerAbstractComponent\n implements OnInit, OnDestroy {\n\n set value(value: Date) {\n this._effects.setValue(value);\n }\n\n valueChange: EventEmitter<Date> = new EventEmitter<Date>();\n animationState = 'void';\n\n _subs: Subscription[] = [];\n constructor(\n _renderer: Renderer2,\n private _config: BsDatepickerConfig,\n private _store: BsDatepickerStore,\n private _element: ElementRef,\n private _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n private _positionService: PositioningService\n ) {\n super();\n this._effects = _effects;\n\n _renderer.setStyle(_element.nativeElement, 'display', 'block');\n _renderer.setStyle(_element.nativeElement, 'position', 'absolute');\n }\n\n ngOnInit(): void {\n this._positionService.setOptions({\n modifiers: { flip: { enabled: this._config.adaptivePosition } },\n allowedPositions: ['top', 'bottom']\n });\n\n this._positionService.event$\n .pipe(\n take(1)\n )\n .subscribe(() => {\n this._positionService.disable();\n\n if (this._config.isAnimated) {\n this.animationState = this.isTopPosition ? 'animated-up' : 'animated-down';\n\n return;\n }\n\n this.animationState = 'unanimated';\n });\n\n this.isOtherMonthsActive = this._config.selectFromOtherMonth;\n this.containerClass = this._config.containerClass;\n this.showTodayBtn = this._config.showTodayButton;\n this.todayBtnLbl = this._config.todayButtonLabel;\n this.todayPos = this._config.todayPosition;\n this.showClearBtn = this._config.showClearButton;\n this.clearBtnLbl = this._config.clearButtonLabel;\n this.clearPos = this._config.clearPosition;\n this.customRangeBtnLbl = this._config.customRangeButtonLabel;\n this._effects\n .init(this._store)\n // intial state options\n .setOptions(this._config)\n // data binding view --> model\n .setBindings(this)\n // set event handlers\n .setEventHandlers(this)\n .registerDatepickerSideEffects();\n\n // todo: move it somewhere else\n // on selected date change\n this._subs.push(\n this._store\n /* tslint:disable-next-line: no-any */\n .select((state: any) => state.selectedDate)\n /* tslint:disable-next-line: no-any */\n .subscribe((date: any) => this.valueChange.emit(date))\n );\n\n this._store.dispatch(this._actions.changeViewMode(this._config.startView));\n }\n\n get isTopPosition(): boolean {\n return this._element.nativeElement.classList.contains('top');\n }\n\n positionServiceEnable(): void {\n this._positionService.enable();\n }\n\n daySelectHandler(day: DayViewModel): void {\n if (!day) {\n return;\n }\n\n const isDisabled = this.isOtherMonthsActive ? day.isDisabled : (day.isOtherMonth || day.isDisabled);\n\n if (isDisabled) {\n return;\n }\n\n this._store.dispatch(this._actions.select(day.date));\n }\n\n monthSelectHandler(day: CalendarCellViewModel): void {\n if (!day || day.isDisabled) {\n return;\n }\n\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n month: getMonth(day.date),\n year: getFullYear(day.date)\n },\n viewMode: 'day'\n })\n );\n }\n\n yearSelectHandler(day: CalendarCellViewModel): void {\n if (!day || day.isDisabled) {\n return;\n }\n\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n year: getFullYear(day.date)\n },\n viewMode: 'month'\n })\n );\n }\n\n setToday(): void {\n this._store.dispatch(this._actions.select(new Date()));\n }\n\n clearDate(): void {\n this._store.dispatch(this._actions.select(undefined));\n }\n\n ngOnDestroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n this._effects.destroy();\n }\n}\n","// tslint:disable:max-file-line-count\nimport {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef, AfterViewInit\n} from '@angular/core';\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { BsDatepickerContainerComponent } from './themes/bs/bs-datepicker-container.component';\nimport { Observable, Subscription, Subject, BehaviorSubject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDatepickerViewMode, DatepickerDateCustomClasses, DatepickerDateTooltipText } from './models';\n\n@Directive({\n selector: '[bsDatepicker]',\n exportAs: 'bsDatepicker'\n})\nexport class BsDatepickerDirective implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n /**\n * Placement of a datepicker. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n @Input() triggers = 'click';\n /**\n * Close datepicker on outside click\n */\n @Input() outsideClick = true;\n /**\n * A selector specifying the element the datepicker should be appended to.\n */\n @Input() container = 'body';\n\n @Input() outsideEsc = true;\n\n /**\n * Returns whether or not the datepicker is currently being shown\n */\n @Input()\n get isOpen(): boolean {\n return this._datepicker.isShown;\n }\n\n set isOpen(value: boolean) {\n this.isOpen$.next(value);\n }\n\n /**\n * Emits an event when the datepicker is shown\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onShown: EventEmitter<any>;\n /**\n * Emits an event when the datepicker is hidden\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onHidden: EventEmitter<any>;\n\n _bsValue: Date;\n isOpen$: BehaviorSubject<boolean>;\n isDestroy$: Subject<void>;\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date) {\n if (this._bsValue && value && this._bsValue.getTime() === value.getTime()) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() set bsConfig(bsConfig: Partial<BsDatepickerConfig>) {\n this._bsConfig = bsConfig;\n this.setConfig();\n this._dateInputFormat$.next(bsConfig && bsConfig.dateInputFormat);\n }\n get bsConfig(): Partial<BsDatepickerConfig> {\n return this._bsConfig;\n }\n /**\n * Indicates whether datepicker's content is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n\n /**\n * Minimum view mode : day, month, or year\n */\n @Input() minMode: BsDatepickerViewMode;\n\n /**\n * Disable Certain days in the week\n */\n @Input() daysDisabled: number[];\n\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Enable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Date tooltip text\n */\n @Input() dateTooltipTexts: DatepickerDateTooltipText[];\n /**\n * Emits when datepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date> = new EventEmitter();\n\n get dateInputFormat$(): Observable<string> {\n return this._dateInputFormat$;\n }\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDatepickerContainerComponent>;\n private _datepickerRef: ComponentRef<BsDatepickerContainerComponent>;\n private _bsConfig: Partial<BsDatepickerConfig>;\n private readonly _dateInputFormat$ = new Subject<string>();\n\n constructor(public _config: BsDatepickerConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDatepickerContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n this.onShown = this._datepicker.onShown;\n this.onHidden = this._datepicker.onHidden;\n this.isOpen$ = new BehaviorSubject(this.isOpen);\n }\n\n ngOnInit(): void {\n this.isDestroy$ = new Subject();\n this._datepicker.listen({\n outsideClick: this.outsideClick,\n outsideEsc: this.outsideEsc,\n triggers: this.triggers,\n show: () => this.show()\n });\n this.setConfig();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n }\n\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n }\n\n if (changes.dateTooltipTexts) {\n this._datepickerRef.instance.dateTooltipTexts = this.dateTooltipTexts;\n }\n }\n\n ngAfterViewInit(): void {\n this.isOpen$.pipe(\n filter(isOpen => isOpen !== this.isOpen),\n takeUntil(this.isDestroy$)\n )\n .subscribe(() => this.toggle());\n }\n\n /**\n * Opens an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n show(): void {\n if (this._datepicker.isShown) {\n return;\n }\n\n this.setConfig();\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDatepickerContainerComponent)\n .to(this.container)\n .position({attachment: this.placement})\n .show({placement: this.placement});\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange.subscribe((value: Date) => {\n this.bsValue = value;\n this.hide();\n })\n );\n }\n\n /**\n * Closes an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n hide(): void {\n if (this.isOpen) {\n this._datepicker.hide();\n }\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n\n if (this._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elementRef.nativeElement).focus();\n }\n }\n\n /**\n * Toggles an element’s datepicker. This is considered a “manual” triggering\n * of the datepicker.\n */\n toggle(): void {\n if (this.isOpen) {\n return this.hide();\n }\n\n this.show();\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n dateTooltipTexts: this.dateTooltipTexts || this.bsConfig && this.bsConfig.dateTooltipTexts,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n minMode: this.minMode || this.bsConfig && this.bsConfig.minMode\n });\n }\n\n ngOnDestroy(): void {\n this._datepicker.dispose();\n this.isOpen$.next(false);\n if (this.isDestroy$) {\n this.isDestroy$.next();\n this.isDestroy$.complete();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BsDatepickerInlineConfig extends BsDatepickerConfig { }\n","import { Component, ElementRef, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { BsDatepickerContainerComponent } from './bs-datepicker-container.component';\n\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\n\nimport { PositioningService } from 'ngx-bootstrap/positioning';\nimport { datepickerAnimation } from '../../datepicker-animations';\n\n@Component({\n selector: 'bs-datepicker-inline-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n '(click)': '_stopPropagation($event)'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDatepickerInlineContainerComponent extends BsDatepickerContainerComponent\n implements OnInit, OnDestroy {\n\n constructor(\n _renderer: Renderer2,\n _config: BsDatepickerConfig,\n _store: BsDatepickerStore,\n _element: ElementRef,\n _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n _positioningService: PositioningService\n ) {\n super(_renderer, _config, _store, _element, _actions, _effects, _positioningService);\n\n _renderer.setStyle(_element.nativeElement, 'display', 'inline-block');\n _renderer.setStyle(_element.nativeElement, 'position', 'static');\n }\n}\n","import {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef\n} from '@angular/core';\n\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\n\nimport { Subscription } from 'rxjs';\n\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDatepickerInlineConfig } from './bs-datepicker-inline.config';\nimport { BsDatepickerInlineContainerComponent } from './themes/bs/bs-datepicker-inline-container.component';\nimport { DatepickerDateCustomClasses, DatepickerDateTooltipText } from './models';\n\n@Directive({\n selector: 'bs-datepicker-inline',\n exportAs: 'bsDatepickerInline'\n})\nexport class BsDatepickerInlineDirective implements OnInit, OnDestroy, OnChanges {\n _bsValue: Date;\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() bsConfig: Partial<BsDatepickerInlineConfig>;\n /**\n * Indicates whether datepicker is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Date tooltip text\n */\n @Input() dateTooltipTexts: DatepickerDateTooltipText[];\n /**\n * Disable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Enable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Emits when datepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDatepickerInlineContainerComponent>;\n private _datepickerRef: ComponentRef<BsDatepickerInlineContainerComponent>;\n\n constructor(\n public _config: BsDatepickerInlineConfig,\n private _elementRef: ElementRef,\n _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory\n ) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDatepickerInlineContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n }\n\n ngOnInit(): void {\n this.setConfig();\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange.subscribe((value: Date) => {\n this.bsValue = value;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n this.setConfig();\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n this.setConfig();\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n this.setConfig();\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n this._datepickerRef.instance.value = this._bsValue;\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n this.setConfig();\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n this.setConfig();\n }\n\n if (changes.dateTooltipTexts) {\n this._datepickerRef.instance.dateTooltipTexts = this.dateTooltipTexts;\n this.setConfig();\n }\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n if (this._datepicker) {\n this._datepicker.hide();\n }\n\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n dateTooltipTexts: this.dateTooltipTexts || this.bsConfig && this.bsConfig.dateTooltipTexts,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled\n });\n\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDatepickerInlineContainerComponent)\n .to(this._elementRef)\n .show();\n }\n\n ngOnDestroy(): any {\n this._datepicker.dispose();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BsDaterangepickerInlineConfig extends BsDatepickerConfig {\n // DatepickerRenderOptions\n displayMonths = 2;\n /** turn on/off animation */\n isAnimated = false;\n}\n","import { Component, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { take } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nimport { getFullYear, getMonth } from 'ngx-bootstrap/chronos';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { BsDatepickerAbstractComponent } from '../../base/bs-datepicker-container';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { CalendarCellViewModel, DayViewModel } from '../../models';\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\nimport { datepickerAnimation } from '../../datepicker-animations';\nimport { BsCustomDates } from './bs-custom-dates-view.component';\n\n@Component({\n selector: 'bs-daterangepicker-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n class: 'bottom',\n '(click)': '_stopPropagation($event)',\n role: 'dialog',\n 'aria-label': 'calendar'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDaterangepickerContainerComponent extends BsDatepickerAbstractComponent\n implements OnInit, OnDestroy {\n set value(value: Date[]) {\n this._effects.setRangeValue(value);\n }\n\n valueChange = new EventEmitter<Date[]>();\n animationState = 'void';\n\n _rangeStack: Date[] = [];\n chosenRange: Date[] = [];\n _subs: Subscription[] = [];\n\n constructor(\n _renderer: Renderer2,\n private _config: BsDatepickerConfig,\n private _store: BsDatepickerStore,\n private _element: ElementRef,\n private _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n private _positionService: PositioningService\n ) {\n super();\n this._effects = _effects;\n\n this.customRanges = this._config.ranges;\n this.customRangeBtnLbl = this._config.customRangeButtonLabel;\n\n _renderer.setStyle(_element.nativeElement, 'display', 'block');\n _renderer.setStyle(_element.nativeElement, 'position', 'absolute');\n }\n\n ngOnInit(): void {\n this._positionService.setOptions({\n modifiers: { flip: { enabled: this._config.adaptivePosition } },\n allowedPositions: ['top', 'bottom']\n });\n\n this._positionService.event$\n .pipe(\n take(1)\n )\n .subscribe(() => {\n this._positionService.disable();\n\n if (this._config.isAnimated) {\n this.animationState = this.isTopPosition ? 'animated-up' : 'animated-down';\n\n return;\n }\n\n this.animationState = 'unanimated';\n });\n this.containerClass = this._config.containerClass;\n this.isOtherMonthsActive = this._config.selectFromOtherMonth;\n this._effects\n .init(this._store)\n // intial state options\n // todo: fix this, split configs\n .setOptions(this._config)\n // data binding view --> model\n .setBindings(this)\n // set event handlers\n .setEventHandlers(this)\n .registerDatepickerSideEffects();\n\n // todo: move it somewhere else\n // on selected date change\n this._subs.push(\n this._store\n .select(state => state.selectedRange)\n .subscribe(date => {\n this.valueChange.emit(date);\n this.chosenRange = date;\n })\n );\n }\n\n get isTopPosition(): boolean {\n return this._element.nativeElement.classList.contains('top');\n }\n\n positionServiceEnable(): void {\n this._positionService.enable();\n }\n\n daySelectHandler(day: DayViewModel): void {\n if (!day) {\n return;\n }\n const isDisabled = this.isOtherMonthsActive ? day.isDisabled : (day.isOtherMonth || day.isDisabled);\n\n if (isDisabled) {\n return;\n }\n this.rangesProcessing(day);\n }\n\n monthSelectHandler(day: CalendarCellViewModel): void {\n if (!day) {\n return;\n }\n\n day.isSelected = true;\n\n if (this._config.minMode !== 'month') {\n if (day.isDisabled) {\n return;\n }\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n month: getMonth(day.date),\n year: getFullYear(day.date)\n },\n viewMode: 'day'\n })\n );\n\n return;\n }\n this.rangesProcessing(day);\n }\n\n yearSelectHandler(day: CalendarCellViewModel): void {\n if (!day) {\n return;\n }\n\n day.isSelected = true;\n\n if (this._config.minMode !== 'year') {\n if (day.isDisabled) {\n return;\n }\n this._store.dispatch(\n this._actions.navigateTo({\n unit: {\n year: getFullYear(day.date)\n },\n viewMode: 'month'\n })\n );\n\n return;\n }\n this.rangesProcessing(day);\n }\n\n rangesProcessing(day: CalendarCellViewModel): void {\n // if only one date is already selected\n // and user clicks on previous date\n // start selection from new date\n // but if new date is after initial one\n // than finish selection\n\n if (this._rangeStack.length === 1) {\n this._rangeStack =\n day.date >= this._rangeStack[0]\n ? [this._rangeStack[0], day.date]\n : [day.date];\n }\n\n if (this._rangeStack.length === 0) {\n this._rangeStack = [day.date];\n\n if (this._config.maxDateRange) {\n this.setMaxDateRangeOnCalendar(day.date);\n }\n }\n\n this._store.dispatch(this._actions.selectRange(this._rangeStack));\n\n if (this._rangeStack.length === 2) {\n this._rangeStack = [];\n }\n }\n\n ngOnDestroy(): void {\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n this._effects.destroy();\n }\n\n setRangeOnCalendar(dates: BsCustomDates): void {\n this._rangeStack = (dates === null) ? [] : (dates.value instanceof Date ? [dates.value] : dates.value);\n this._store.dispatch(this._actions.selectRange(this._rangeStack));\n }\n\n setMaxDateRangeOnCalendar(currentSelection: Date): void {\n const maxDateRange = new Date(currentSelection);\n maxDateRange.setDate(currentSelection.getDate() + this._config.maxDateRange);\n this._effects.setMaxDate(maxDateRange);\n }\n\n}\n","import { OnInit, OnDestroy, ElementRef, Component, Renderer2 } from '@angular/core';\nimport { BsDaterangepickerContainerComponent } from './bs-daterangepicker-container.component';\n\nimport { BsDatepickerActions } from '../../reducer/bs-datepicker.actions';\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { BsDatepickerEffects } from '../../reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from '../../reducer/bs-datepicker.store';\n\nimport { PositioningService } from 'ngx-bootstrap/positioning';\nimport { datepickerAnimation } from '../../datepicker-animations';\n\n@Component({\n selector: 'bs-daterangepicker-inline-container',\n providers: [BsDatepickerStore, BsDatepickerEffects],\n templateUrl: './bs-datepicker-view.html',\n host: {\n '(click)': '_stopPropagation($event)'\n },\n animations: [datepickerAnimation]\n})\nexport class BsDaterangepickerInlineContainerComponent extends BsDaterangepickerContainerComponent\n implements OnInit, OnDestroy {\n\n constructor(\n _renderer: Renderer2,\n _config: BsDatepickerConfig,\n _store: BsDatepickerStore,\n _element: ElementRef,\n _actions: BsDatepickerActions,\n _effects: BsDatepickerEffects,\n _positioningService: PositioningService\n ) {\n super(_renderer, _config, _store, _element, _actions, _effects, _positioningService);\n\n _renderer.setStyle(_element.nativeElement, 'display', 'inline-block');\n _renderer.setStyle(_element.nativeElement, 'position', 'static');\n }\n}\n","import {\n ComponentRef, Directive, ElementRef, EventEmitter, Input, OnChanges,\n OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewContainerRef\n} from '@angular/core';\n\nimport { ComponentLoader, ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\n\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { BsDaterangepickerInlineConfig } from './bs-daterangepicker-inline.config';\nimport { BsDaterangepickerInlineContainerComponent } from './themes/bs/bs-daterangepicker-inline-container.component';\nimport { DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: 'bs-daterangepicker-inline',\n exportAs: 'bsDaterangepickerInline'\n})\nexport class BsDaterangepickerInlineDirective implements OnInit, OnDestroy, OnChanges {\n _bsValue: Date[];\n /**\n * Initial value of datepicker\n */\n @Input()\n set bsValue(value: Date[]) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for datepicker\n */\n @Input() bsConfig: Partial<BsDaterangepickerInlineConfig>;\n /**\n * Indicates whether datepicker is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n @Input() daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n /**\n * Disable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Emits when daterangepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date[]> = new EventEmitter();\n\n protected _subs: Subscription[] = [];\n\n private _datepicker: ComponentLoader<BsDaterangepickerInlineContainerComponent>;\n private _datepickerRef: ComponentRef<BsDaterangepickerInlineContainerComponent>;\n\n constructor(\n public _config: BsDaterangepickerInlineConfig,\n private _elementRef: ElementRef,\n _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory\n ) {\n // todo: assign only subset of fields\n Object.assign(this, this._config);\n this._datepicker = cis.createLoader<BsDaterangepickerInlineContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n }\n\n ngOnInit(): void {\n this.setConfig();\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date[]) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange\n .pipe(\n filter((range: Date[]) => range && range[0] && !!range[1])\n )\n .subscribe((value: Date[]) => {\n this.bsValue = value;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n this.setConfig();\n }\n\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n this.setConfig();\n }\n\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n this.setConfig();\n }\n\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n this.setConfig();\n }\n\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n this.setConfig();\n }\n\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n this.setConfig();\n }\n }\n\n /**\n * Set config for datepicker\n */\n setConfig(): void {\n if (this._datepicker) {\n this._datepicker.hide();\n }\n\n this._config = Object.assign({}, this._config, this.bsConfig, {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n ranges: this.bsConfig && this.bsConfig.ranges,\n maxDateRange: this.bsConfig && this.bsConfig.maxDateRange\n });\n\n\n this._datepickerRef = this._datepicker\n .provide({provide: BsDatepickerConfig, useValue: this._config})\n .attach(BsDaterangepickerInlineContainerComponent)\n .to(this._elementRef)\n .show();\n }\n\n ngOnDestroy(): any {\n this._datepicker.dispose();\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Provider,\n Renderer2\n} from '@angular/core';\n\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport {\n formatDate,\n getLocale,\n isAfter,\n isBefore,\n isDate,\n isDateValid,\n parseDate,\n utcAsLocal\n} from 'ngx-bootstrap/chronos';\n\nimport { BsDatepickerDirective } from './bs-datepicker.component';\nimport { BsLocaleService } from './bs-locale.service';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nconst BS_DATEPICKER_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDatepickerInputDirective),\n multi: true\n};\n\nconst BS_DATEPICKER_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDatepickerInputDirective),\n multi: true\n};\n\n@Directive({\n selector: `input[bsDatepicker]`,\n host: {\n '(change)': 'onChange($event)',\n '(keyup.esc)': 'hide()',\n '(keydown)': 'onKeydownEvent($event)',\n '(blur)': 'onBlur()'\n },\n providers: [BS_DATEPICKER_VALUE_ACCESSOR, BS_DATEPICKER_VALIDATOR]\n})\nexport class BsDatepickerInputDirective\n implements ControlValueAccessor, Validator {\n private _onChange = Function.prototype;\n private _onTouched = Function.prototype;\n /* tslint:disable-next-line: no-unused-variable */\n private _validatorChange = Function.prototype;\n private _value: Date;\n\n constructor(@Host() private _picker: BsDatepickerDirective,\n private _localeService: BsLocaleService,\n private _renderer: Renderer2,\n private _elRef: ElementRef,\n private changeDetection: ChangeDetectorRef) {\n // update input value on datepicker value update\n this._picker.bsValueChange.subscribe((value: Date) => {\n this._setInputValue(value);\n if (this._value !== value) {\n this._value = value;\n this._onChange(value);\n this._onTouched();\n }\n this.changeDetection.markForCheck();\n });\n\n // update input value on locale change\n this._localeService.localeChange.subscribe(() => {\n this._setInputValue(this._value);\n });\n\n // update input value on format change\n this._picker.dateInputFormat$.pipe(distinctUntilChanged()).subscribe(() => {\n this._setInputValue(this._value);\n });\n }\n\n onKeydownEvent(event) {\n if (event.keyCode === 13 || event.code === 'Enter') {\n this.hide();\n }\n }\n\n _setInputValue(value: Date): void {\n const initialDate = !value ? ''\n : formatDate(value, this._picker._config.dateInputFormat, this._localeService.currentLocale);\n\n this._renderer.setProperty(this._elRef.nativeElement, 'value', initialDate);\n }\n\n onChange(event: Event) {\n /* tslint:disable-next-line: no-any*/\n this.writeValue((event.target as any).value);\n this._onChange(this._value);\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n this._onTouched();\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n const _value: Date | string = c.value;\n\n /* tslint:disable-next-line: prefer-switch */\n if (_value === null || _value === undefined || _value === '') {\n return null;\n }\n\n if (isDate(_value)) {\n const _isDateValid = isDateValid(_value);\n if (!_isDateValid) {\n return { bsDate: { invalid: _value } };\n }\n\n if (this._picker && this._picker.minDate && isBefore(_value, this._picker.minDate, 'date')) {\n this.writeValue(this._picker.minDate);\n\n return { bsDate: { minDate: this._picker.minDate } };\n }\n\n if (this._picker && this._picker.maxDate && isAfter(_value, this._picker.maxDate, 'date')) {\n this.writeValue(this._picker.maxDate);\n\n return { bsDate: { maxDate: this._picker.maxDate } };\n }\n }\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorChange = fn;\n }\n\n writeValue(value: Date | string) {\n if (!value) {\n this._value = null;\n } else {\n const _localeKey = this._localeService.currentLocale;\n const _locale = getLocale(_localeKey);\n if (!_locale) {\n throw new Error(\n `Locale \"${_localeKey}\" is not defined, please add it with \"defineLocale(...)\"`\n );\n }\n\n this._value = parseDate(value, this._picker._config.dateInputFormat, this._localeService.currentLocale);\n\n if (this._picker._config.useUtc) {\n this._value = utcAsLocal(this._value);\n }\n }\n\n this._picker.bsValue = this._value;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._picker.isDisabled = isDisabled;\n if (isDisabled) {\n this._renderer.setAttribute(this._elRef.nativeElement, 'disabled', 'disabled');\n\n return;\n }\n this._renderer.removeAttribute(this._elRef.nativeElement, 'disabled');\n }\n\n registerOnChange(fn: () => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n onBlur() {\n this._onTouched();\n }\n\n hide() {\n this._picker.hide();\n this._renderer.selectRootElement(this._elRef.nativeElement).blur();\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BsDaterangepickerConfig extends BsDatepickerConfig {\n // DatepickerRenderOptions\n displayMonths = 2;\n}\n","import { AfterViewInit, ComponentRef,\n Directive, ElementRef, EventEmitter,\n Input, OnChanges, OnDestroy, OnInit,\n Output, Renderer2, SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { BsDaterangepickerConfig } from './bs-daterangepicker.config';\nimport { BsDaterangepickerContainerComponent } from './themes/bs/bs-daterangepicker-container.component';\nimport { Observable, Subscription, Subject, BehaviorSubject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ComponentLoaderFactory, ComponentLoader } from 'ngx-bootstrap/component-loader';\nimport { BsDatepickerConfig } from './bs-datepicker.config';\nimport { DatepickerDateCustomClasses } from './models';\n\n@Directive({\n selector: '[bsDaterangepicker]',\n exportAs: 'bsDaterangepicker'\n})\nexport class BsDaterangepickerDirective\n implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n /**\n * Placement of a daterangepicker. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n @Input() triggers = 'click';\n /**\n * Close daterangepicker on outside click\n */\n @Input() outsideClick = true;\n /**\n * A selector specifying the element the daterangepicker should be appended to.\n */\n @Input() container = 'body';\n\n @Input() outsideEsc = true;\n\n /**\n * Returns whether or not the daterangepicker is currently being shown\n */\n @Input()\n get isOpen(): boolean {\n return this._datepicker.isShown;\n }\n\n set isOpen(value: boolean) {\n this.isOpen$.next(value);\n }\n\n /**\n * Emits an event when the daterangepicker is shown\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onShown: EventEmitter<any>;\n /**\n * Emits an event when the daterangepicker is hidden\n */\n /* tslint:disable-next-line: no-any*/\n @Output() onHidden: EventEmitter<any>;\n\n _bsValue: Date[];\n isOpen$: BehaviorSubject<boolean>;\n isDestroy$: Subject<void>;\n\n /**\n * Initial value of daterangepicker\n */\n @Input()\n set bsValue(value: Date[]) {\n if (this._bsValue === value) {\n return;\n }\n this._bsValue = value;\n this.bsValueChange.emit(value);\n }\n\n /**\n * Config object for daterangepicker\n */\n @Input() set bsConfig(bsConfig: Partial<BsDaterangepickerConfig>) {\n this._bsConfig = bsConfig;\n this.setConfig();\n this._rangeInputFormat$.next(bsConfig && bsConfig.rangeInputFormat);\n }\n get bsConfig(): Partial<BsDaterangepickerConfig> {\n return this._bsConfig;\n }\n /**\n * Indicates whether daterangepicker's content is enabled or not\n */\n @Input() isDisabled: boolean;\n /**\n * Minimum date which is available for selection\n */\n @Input() minDate: Date;\n /**\n * Maximum date which is available for selection\n */\n @Input() maxDate: Date;\n /**\n * Date custom classes\n */\n @Input() dateCustomClasses: DatepickerDateCustomClasses[];\n /**\n * Disable specific days, e.g. [0,6] will disable all Saturdays and Sundays\n */\n @Input() daysDisabled?: number[];\n /**\n * Disable specific dates\n */\n @Input() datesDisabled: Date[];\n\n /**\n * Enable specific dates\n */\n @Input() datesEnabled: Date[];\n /**\n * Emits when daterangepicker value has been changed\n */\n @Output() bsValueChange: EventEmitter<Date[]> = new EventEmitter();\n\n get rangeInputFormat$(): Observable<string> {\n return this._rangeInputFormat$;\n }\n\n protected _subs: Subscription[] = [];\n private _datepicker: ComponentLoader<BsDaterangepickerContainerComponent>;\n private _datepickerRef: ComponentRef<BsDaterangepickerContainerComponent>;\n private _bsConfig: Partial<BsDaterangepickerConfig>;\n private readonly _rangeInputFormat$ = new Subject<string>();\n\n constructor(public _config: BsDaterangepickerConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n _viewContainerRef: ViewContainerRef,\n cis: ComponentLoaderFactory) {\n this._datepicker = cis.createLoader<BsDaterangepickerContainerComponent>(\n _elementRef,\n _viewContainerRef,\n _renderer\n );\n Object.assign(this, _config);\n this.onShown = this._datepicker.onShown;\n this.onHidden = this._datepicker.onHidden;\n this.isOpen$ = new BehaviorSubject(this.isOpen);\n }\n\n ngOnInit(): void {\n this.isDestroy$ = new Subject();\n this._datepicker.listen({\n outsideClick: this.outsideClick,\n outsideEsc: this.outsideEsc,\n triggers: this.triggers,\n show: () => this.show()\n });\n this.setConfig();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this._datepickerRef || !this._datepickerRef.instance) {\n return;\n }\n if (changes.minDate) {\n this._datepickerRef.instance.minDate = this.minDate;\n }\n if (changes.maxDate) {\n this._datepickerRef.instance.maxDate = this.maxDate;\n }\n if (changes.datesDisabled) {\n this._datepickerRef.instance.datesDisabled = this.datesDisabled;\n }\n if (changes.datesEnabled) {\n this._datepickerRef.instance.datesEnabled = this.datesEnabled;\n }\n if (changes.daysDisabled) {\n this._datepickerRef.instance.daysDisabled = this.daysDisabled;\n }\n if (changes.isDisabled) {\n this._datepickerRef.instance.isDisabled = this.isDisabled;\n }\n if (changes.dateCustomClasses) {\n this._datepickerRef.instance.dateCustomClasses = this.dateCustomClasses;\n }\n }\n\n ngAfterViewInit(): void {\n this.isOpen$.pipe(\n filter(isOpen => isOpen !== this.isOpen),\n takeUntil(this.isDestroy$)\n )\n .subscribe(() => this.toggle());\n }\n\n /**\n * Opens an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n show(): void {\n if (this._datepicker.isShown) {\n return;\n }\n\n this.setConfig();\n\n this._datepickerRef = this._datepicker\n .provide({ provide: BsDatepickerConfig, useValue: this._config })\n .attach(BsDaterangepickerContainerComponent)\n .to(this.container)\n .position({ attachment: this.placement })\n .show({ placement: this.placement });\n\n // if date changes from external source (model -> view)\n this._subs.push(\n this.bsValueChange.subscribe((value: Date[]) => {\n this._datepickerRef.instance.value = value;\n })\n );\n\n // if date changes from picker (view -> model)\n this._subs.push(\n this._datepickerRef.instance.valueChange\n .pipe(\n filter((range: Date[]) => range && range[0] && !!range[1])\n )\n .subscribe((value: Date[]) => {\n this.bsValue = value;\n this.hide();\n })\n );\n }\n\n /**\n * Set config for daterangepicker\n */\n setConfig() {\n this._config = Object.assign(\n {},\n this._config,\n this.bsConfig,\n {\n value: this._bsValue,\n isDisabled: this.isDisabled,\n minDate: this.minDate || this.bsConfig && this.bsConfig.minDate,\n maxDate: this.maxDate || this.bsConfig && this.bsConfig.maxDate,\n daysDisabled: this.daysDisabled || this.bsConfig && this.bsConfig.daysDisabled,\n dateCustomClasses: this.dateCustomClasses || this.bsConfig && this.bsConfig.dateCustomClasses,\n datesDisabled: this.datesDisabled || this.bsConfig && this.bsConfig.datesDisabled,\n datesEnabled: this.datesEnabled || this.bsConfig && this.bsConfig.datesEnabled,\n ranges: this.bsConfig && this.bsConfig.ranges,\n maxDateRange: this.bsConfig && this.bsConfig.maxDateRange\n }\n );\n }\n\n /**\n * Closes an element’s datepicker. This is considered a “manual” triggering of\n * the datepicker.\n */\n hide(): void {\n if (this.isOpen) {\n this._datepicker.hide();\n }\n for (const sub of this._subs) {\n sub.unsubscribe();\n }\n\n if (this._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elementRef.nativeElement).focus();\n }\n }\n\n /**\n * Toggles an element’s datepicker. This is considered a “manual” triggering\n * of the datepicker.\n */\n toggle(): void {\n if (this.isOpen) {\n return this.hide();\n }\n\n this.show();\n }\n\n ngOnDestroy(): void {\n this._datepicker.dispose();\n this.isOpen$.next(false);\n if (this.isDestroy$) {\n this.isDestroy$.next();\n this.isDestroy$.complete();\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n Host,\n Provider,\n Renderer2\n} from '@angular/core';\n\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nimport {\n parseDate,\n formatDate,\n getLocale,\n isAfter,\n isBefore,\n isArray,\n isDateValid,\n utcAsLocal\n} from 'ngx-bootstrap/chronos';\n\nimport { BsDaterangepickerDirective } from './bs-daterangepicker.component';\nimport { BsLocaleService } from './bs-locale.service';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nconst BS_DATERANGEPICKER_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDaterangepickerInputDirective),\n multi: true\n};\n\nconst BS_DATERANGEPICKER_VALIDATOR: Provider = {\n provide: NG_VALIDATORS,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => BsDaterangepickerInputDirective),\n multi: true\n};\n\n\n@Directive({\n selector: `input[bsDaterangepicker]`,\n host: {\n '(change)': 'onChange($event)',\n '(keyup.esc)': 'hide()',\n '(keydown)': 'onKeydownEvent($event)',\n '(blur)': 'onBlur()'\n },\n providers: [BS_DATERANGEPICKER_VALUE_ACCESSOR, BS_DATERANGEPICKER_VALIDATOR]\n})\nexport class BsDaterangepickerInputDirective\n implements ControlValueAccessor, Validator {\n private _onChange = Function.prototype;\n private _onTouched = Function.prototype;\n /* tslint:disable-next-line: no-unused-variable */\n private _validatorChange = Function.prototype;\n private _value: Date[];\n\n constructor(@Host() private _picker: BsDaterangepickerDirective,\n private _localeService: BsLocaleService,\n private _renderer: Renderer2,\n private _elRef: ElementRef,\n private changeDetection: ChangeDetectorRef) {\n // update input value on datepicker value update\n this._picker.bsValueChange.subscribe((value: Date[]) => {\n this._setInputValue(value);\n if (this._value !== value) {\n this._value = value;\n this._onChange(value);\n this._onTouched();\n }\n this.changeDetection.markForCheck();\n });\n\n // update input value on locale change\n this._localeService.localeChange.subscribe(() => {\n this._setInputValue(this._value);\n });\n\n // update input value on format change\n this._picker.rangeInputFormat$.pipe(distinctUntilChanged()).subscribe(() => {\n this._setInputValue(this._value);\n });\n }\n\n onKeydownEvent(event) {\n if (event.keyCode === 13 || event.code === 'Enter') {\n this.hide();\n }\n }\n\n _setInputValue(date: Date[]): void {\n let range = '';\n if (date) {\n const start: string = !date[0] ? ''\n : formatDate(date[0],\n this._picker._config.rangeInputFormat,\n this._localeService.currentLocale\n );\n const end: string = !date[1] ? ''\n : formatDate(\n date[1],\n this._picker._config.rangeInputFormat,\n this._localeService.currentLocale\n );\n range = (start && end) ? start + this._picker._config.rangeSeparator + end : '';\n }\n this._renderer.setProperty(this._elRef.nativeElement, 'value', range);\n }\n\n onChange(event: Event) {\n /* tslint:disable-next-line: no-any*/\n this.writeValue((event.target as any).value);\n this._onChange(this._value);\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n this._onTouched();\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n const _value: [Date, Date] = c.value;\n const errors: object[] = [];\n\n if (_value === null || _value === undefined || !isArray(_value)) {\n return null;\n }\n\n // @ts-ignore\n _value.sort((a, b) => a - b);\n\n const _isFirstDateValid = isDateValid(_value[0]);\n const _isSecondDateValid = isDateValid(_value[1]);\n\n if (!_isFirstDateValid) {\n return { bsDate: { invalid: _value[0] } };\n }\n\n if (!_isSecondDateValid) {\n return { bsDate: { invalid: _value[1] } };\n }\n\n if (this._picker && this._picker.minDate && isBefore(_value[0], this._picker.minDate, 'date')) {\n _value[0] = this._picker.minDate;\n errors.push({ bsDate: { minDate: this._picker.minDate } });\n }\n\n if (this._picker && this._picker.maxDate && isAfter(_value[1], this._picker.maxDate, 'date')) {\n _value[1] = this._picker.maxDate;\n errors.push({ bsDate: { maxDate: this._picker.maxDate } });\n }\n if (errors.length > 0) {\n this.writeValue(_value);\n\n return errors;\n }\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorChange = fn;\n }\n\n writeValue(value: Date[] | string) {\n if (!value) {\n this._value = null;\n } else {\n const _localeKey = this._localeService.currentLocale;\n const _locale = getLocale(_localeKey);\n if (!_locale) {\n throw new Error(\n `Locale \"${_localeKey}\" is not defined, please add it with \"defineLocale(...)\"`\n );\n }\n\n let _input: (string[] | Date[]) = [];\n if (typeof value === 'string') {\n _input = value.split(this._picker._config.rangeSeparator);\n }\n\n if (Array.isArray(value)) {\n _input = value;\n }\n\n this._value = (_input as string[])\n .map((_val: string): Date => {\n if (this._picker._config.useUtc) {\n return utcAsLocal(\n parseDate(_val, this._picker._config.rangeInputFormat, this._localeService.currentLocale)\n );\n }\n\n return parseDate(_val, this._picker._config.rangeInputFormat, this._localeService.currentLocale);\n }\n )\n .map((date: Date) => (isNaN(date.valueOf()) ? null : date));\n }\n\n this._picker.bsValue = this._value;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._picker.isDisabled = isDisabled;\n if (isDisabled) {\n this._renderer.setAttribute(this._elRef.nativeElement, 'disabled', 'disabled');\n\n return;\n }\n this._renderer.removeAttribute(this._elRef.nativeElement, 'disabled');\n }\n\n /* tslint:disable-next-line: no-any*/\n registerOnChange(fn: () => void): void {\n this._onChange = fn;\n }\n\n /* tslint:disable-next-line: no-any*/\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n onBlur() {\n this._onTouched();\n }\n\n hide() {\n this._picker.hide();\n this._renderer.selectRootElement(this._elRef.nativeElement).blur();\n\n if (this._picker._config.returnFocusToInput) {\n this._renderer.selectRootElement(this._elRef.nativeElement).focus();\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'bs-calendar-layout',\n template: `\n <!-- current date, will be added in nearest releases -->\n <bs-current-date title=\"hey there\" *ngIf=\"false\"></bs-current-date>\n\n <!--navigation-->\n <div class=\"bs-datepicker-head\">\n <ng-content select=\"bs-datepicker-navigation-view\"></ng-content>\n </div>\n\n <div class=\"bs-datepicker-body\">\n <ng-content></ng-content>\n </div>\n\n <!--timepicker-->\n <bs-timepicker *ngIf=\"false\"></bs-timepicker>\n `\n})\nexport class BsCalendarLayoutComponent {}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'bs-current-date',\n template: `<div class=\"current-timedate\"><span>{{ title }}</span></div>`\n})\nexport class BsCurrentDateViewComponent {\n @Input() title: string;\n}\n","import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\n\nexport interface BsCustomDates {\n label: string;\n value: Date | Date[];\n}\n\n@Component({\n selector: 'bs-custom-date-view',\n template: `\n <div class=\"bs-datepicker-predefined-btns\">\n <button *ngFor=\"let range of ranges\"\n type=\"button\"\n class=\"btn\"\n (click)=\"selectFromRanges(range)\"\n [class.selected]=\"range.value === selectedRange\">\n {{ range.label }}\n </button>\n <button\n type=\"button\"\n class=\"btn\"\n (click)=\"selectFromRanges(customRange)\"\n [class.selected]=\"!checkRange()\">\n {{customRangeLabel}}\n </button>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BsCustomDatesViewComponent {\n @Input() ranges: BsCustomDates[];\n @Input() selectedRange: Date[];\n @Input() customRangeLabel: string;\n @Output() onSelect = new EventEmitter<BsCustomDates>();\n\n customRange: any = null;\n\n selectFromRanges(range: BsCustomDates) {\n this.onSelect.emit(range);\n }\n\n checkRange() {\n return this.ranges ? this.ranges.filter(range => range.value === this.selectedRange).length > 0 : false;\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n Renderer2\n} from '@angular/core';\n\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\nimport { DayViewModel } from '../../models';\n\n@Component({\n selector: '[bsDatepickerDayDecorator]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.disabled]': 'day.isDisabled',\n '[class.is-highlighted]': 'day.isHovered',\n '[class.is-other-month]': 'day.isOtherMonth',\n '[class.is-active-other-month]': 'day.isOtherMonthHovered',\n '[class.in-range]': 'day.isInRange',\n '[class.select-start]': 'day.isSelectionStart',\n '[class.select-end]': 'day.isSelectionEnd',\n '[class.selected]': 'day.isSelected'\n },\n template: `{{ day.label }}`\n})\nexport class BsDatepickerDayDecoratorComponent implements OnInit {\n @Input() day: DayViewModel;\n\n constructor(\n private _config: BsDatepickerConfig,\n private _elRef: ElementRef,\n private _renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n if (this.day.isToday && this._config && this._config.customTodayClass) {\n this._renderer.addClass(this._elRef.nativeElement, this._config.customTodayClass);\n }\n\n if (typeof this.day.customClasses === 'string') {\n this.day.customClasses.split(' ')\n .filter((className: string) => className)\n .forEach((className: string) => {\n this._renderer.addClass(this._elRef.nativeElement, className);\n });\n }\n }\n}\n","import { TimeUnit } from 'ngx-bootstrap/chronos';\n\nexport type BsDatepickerViewMode = 'day' | 'month' | 'year';\n\n/** *************** */\n// navigation bar settings\nexport interface NavigationViewModel {\n monthTitle: string;\n yearTitle: string;\n hideLeftArrow?: boolean;\n hideRightArrow?: boolean;\n disableLeftArrow?: boolean;\n disableRightArrow?: boolean;\n}\n\nexport interface CalendarCellViewModel {\n date: Date;\n label: string;\n isDisabled?: boolean;\n isHovered?: boolean;\n isSelected?: boolean;\n}\n\n/** *************** */\n// days matrix: day cell view model\nexport interface DayViewModel extends CalendarCellViewModel {\n isOtherMonthHovered?: boolean;\n isOtherMonth?: boolean;\n isInRange?: boolean;\n isSelectionStart?: boolean;\n isSelectionEnd?: boolean;\n isToday?: boolean;\n customClasses?: string;\n tooltipText?: string;\n // day index\n monthIndex?: number;\n weekIndex?: number;\n dayIndex?: number;\n}\n\nexport interface WeekViewModel {\n days: DayViewModel[];\n isHovered?: boolean;\n}\n\n// todo: split navigation settings\nexport interface DaysCalendarViewModel extends NavigationViewModel {\n weeks: WeekViewModel[];\n // additional information\n month: Date;\n weekNumbers: string[];\n weekdays: string[];\n}\n\n/** *************** */\n// months calendar\nexport interface MonthsCalendarViewModel extends NavigationViewModel {\n months: CalendarCellViewModel[][];\n}\n\n/** *************** */\n// years calendar\nexport interface YearsCalendarViewModel extends NavigationViewModel {\n years: CalendarCellViewModel[][];\n}\n\n/** *************** */\n\n// math model\n/** *************** */\n\n// days Date's array\nexport interface DaysCalendarModel {\n daysMatrix: Date[][];\n month: Date;\n}\n\n/** *************** */\n// some func options\nexport interface MonthViewOptions {\n width?: number;\n height?: number;\n firstDayOfWeek?: number;\n}\n\n/** *************** */\n// rendering options\nexport interface DatepickerFormatOptions {\n locale: string;\n\n monthTitle: string;\n yearTitle: string;\n\n dayLabel: string;\n monthLabel: string;\n yearLabel: string;\n\n weekNumbers: string;\n}\n\nexport interface DatepickerRenderOptions {\n showWeekNumbers?: boolean;\n displayMonths?: number;\n}\n\nexport interface DatepickerDateCustomClasses {\n date: Date;\n classes: string[];\n}\n\nexport interface DatepickerDateTooltipText {\n date: Date;\n tooltipText: string;\n}\n\n/** *************** */\n// events\n/** *************** */\nexport enum BsNavigationDirection {\n UP,\n DOWN\n}\n\n// used for navigation events, to change view date in state\nexport interface BsNavigationEvent {\n direction?: BsNavigationDirection;\n step?: TimeUnit;\n}\n\nexport interface BsViewNavigationEvent {\n unit?: TimeUnit;\n viewMode: BsDatepickerViewMode;\n}\n\nexport interface CellHoverEvent {\n cell: CalendarCellViewModel;\n isHovered: boolean;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n DaysCalendarViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-datepicker-navigation-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button class=\"previous\"\n [disabled]=\"calendar.disableLeftArrow\"\n [style.visibility]=\"calendar.hideLeftArrow ? 'hidden' : 'visible'\"\n type=\"button\"\n (click)=\"navTo(true)\">\n <span>&lsaquo;</span>\n </button>\n\n <ng-container *ngIf=\"calendar.monthTitle\">\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"current\"\n type=\"button\"\n (click)=\"view('month')\"\n ><span>{{ calendar.monthTitle }}</span>\n </button>\n </ng-container>\n\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"current\" (click)=\"view('year')\" type=\"button\">\n <span>{{ calendar.yearTitle }}</span>\n </button>\n\n &#8203; <!-- zero-width space needed for correct alignement\n with preserveWhitespaces: false in Angular -->\n\n <button class=\"next\"\n [disabled]=\"calendar.disableRightArrow\"\n [style.visibility]=\"calendar.hideRightArrow ? 'hidden' : 'visible'\"\n type=\"button\"\n (click)=\"navTo(false)\"><span>&rsaquo;</span>\n </button>\n `\n})\nexport class BsDatepickerNavigationViewComponent {\n @Input() calendar: DaysCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationDirection>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n navTo(down: boolean): void {\n this.onNavigate.emit(\n down ? BsNavigationDirection.DOWN : BsNavigationDirection.UP\n );\n }\n\n view(viewMode: BsDatepickerViewMode): void {\n this.onViewMode.emit(viewMode);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n Output\n} from '@angular/core';\n\nimport { isSameDay } from 'ngx-bootstrap/chronos';\n\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CellHoverEvent, DatepickerDateTooltipText,\n DatepickerRenderOptions,\n DaysCalendarViewModel,\n DayViewModel, WeekViewModel\n} from '../../models';\n\nimport { BsDatepickerConfig } from '../../bs-datepicker.config';\n\n@Component({\n selector: 'bs-days-calendar-view',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <!--days matrix-->\n <table role=\"grid\" class=\"days weeks\">\n <thead>\n <tr>\n <!--if show weeks-->\n <th *ngIf=\"options.showWeekNumbers\"></th>\n <th *ngFor=\"let weekday of calendar.weekdays; let i = index\"\n aria-label=\"weekday\">{{ calendar.weekdays[i] }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let week of calendar.weeks; let i = index\">\n <td class=\"week\" [class.active-week]=\"isWeekHovered\" *ngIf=\"options.showWeekNumbers\">\n <span *ngIf=\"isiOS\" (click)=\"selectWeek(week)\">{{ calendar.weekNumbers[i] }}</span>\n <span *ngIf=\"!isiOS\"\n (click)=\"selectWeek(week)\"\n (mouseenter)=\"weekHoverHandler(week, true)\"\n (mouseleave)=\"weekHoverHandler(week, false)\">{{ calendar.weekNumbers[i] }}</span>\n </td>\n <td *ngFor=\"let day of week.days\" role=\"gridcell\">\n\n <!-- When we want to show tooltips for dates -->\n <span *ngIf=\"!isiOS && isShowTooltip\" bsDatepickerDayDecorator\n [day]=\"day\"\n (click)=\"selectDay(day)\"\n tooltip=\"{{day.tooltipText}}\"\n (mouseenter)=\"hoverDay(day, true)\"\n (mouseleave)=\"hoverDay(day, false)\">{{ day.label }} 3</span>\n <!-- When tooltips for dates are disabled -->\n <span *ngIf=\"!isiOS && !isShowTooltip\" bsDatepickerDayDecorator\n [day]=\"day\"\n (click)=\"selectDay(day)\"\n (mouseenter)=\"hoverDay(day, true)\"\n (mouseleave)=\"hoverDay(day, false)\">{{ day.label }} 2</span>\n\n <!-- For mobile iOS view, tooltips are not needed -->\n <span *ngIf=\"isiOS\" bsDatepickerDayDecorator\n [day]=\"day\"\n (click)=\"selectDay(day)\">{{ day.label }} 1</span>\n </td>\n </tr>\n </tbody>\n </table>\n\n </bs-calendar-layout>\n `\n})\nexport class BsDaysCalendarViewComponent {\n @Input() calendar: DaysCalendarViewModel;\n @Input() options: DatepickerRenderOptions;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<DayViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n @Output() onHoverWeek = new EventEmitter<WeekViewModel>();\n\n isWeekHovered: boolean;\n isiOS: boolean;\n isShowTooltip: boolean;\n\n constructor(private _config: BsDatepickerConfig) {\n this.isiOS = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\n if (this._config.dateTooltipTexts && this._config.dateTooltipTexts.length > 0) {\n this.isShowTooltip = true;\n }\n }\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { month: step } });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n\n selectDay(event: DayViewModel): void {\n this.onSelect.emit(event);\n }\n\n selectWeek(week: WeekViewModel): void {\n if (!this._config.selectWeek && !this._config.selectWeekDateRange) {\n return;\n }\n\n if (week.days.length === 0) {\n return;\n }\n\n if (this._config.selectWeek && week.days[0]\n && !week.days[0].isDisabled\n && this._config.selectFromOtherMonth) {\n\n this.onSelect.emit(week.days[0]);\n\n return;\n }\n\n const selectedDay = week.days.find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n this.onSelect.emit(selectedDay);\n\n if (this._config.selectWeekDateRange) {\n const days = week.days.slice(0);\n const lastDayOfRange = days.reverse().find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n this.onSelect.emit(lastDayOfRange);\n }\n }\n\n weekHoverHandler(cell: WeekViewModel, isHovered: boolean): void {\n if (!this._config.selectWeek && !this._config.selectWeekDateRange) {\n return;\n }\n\n const hasActiveDays = cell.days.find((day: DayViewModel) => {\n return this._config.selectFromOtherMonth\n ? !day.isDisabled\n : !day.isOtherMonth && !day.isDisabled;\n });\n\n if (hasActiveDays) {\n cell.isHovered = isHovered;\n this.isWeekHovered = isHovered;\n this.onHoverWeek.emit(cell);\n }\n }\n\n hoverDay(cell: DayViewModel, isHovered: boolean): void {\n if (this._config.selectFromOtherMonth && cell.isOtherMonth) {\n cell.isOtherMonthHovered = isHovered;\n }\n\n if (this._config.dateTooltipTexts) {\n cell.tooltipText = '';\n this._config.dateTooltipTexts.forEach((dateData: DatepickerDateTooltipText) => {\n\n if (isSameDay(dateData.date, cell.date)) {\n cell.tooltipText = dateData.tooltipText;\n\n return;\n }\n });\n }\n\n this.onHover.emit({ cell, isHovered });\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CellHoverEvent,\n MonthsCalendarViewModel,\n CalendarCellViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-month-calendar-view',\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <table role=\"grid\" class=\"months\">\n <tbody>\n <tr *ngFor=\"let row of calendar.months\">\n <td *ngFor=\"let month of row\" role=\"gridcell\"\n (click)=\"viewMonth(month)\"\n (mouseenter)=\"hoverMonth(month, true)\"\n (mouseleave)=\"hoverMonth(month, false)\"\n [class.disabled]=\"month.isDisabled\"\n [class.is-highlighted]=\"month.isHovered\">\n <span [class.selected]=\"month.isSelected\">{{ month.label }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </bs-calendar-layout>\n `\n})\nexport class BsMonthCalendarViewComponent {\n @Input() calendar: MonthsCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<CalendarCellViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { year: step } });\n }\n\n viewMonth(month: CalendarCellViewModel) {\n this.onSelect.emit(month);\n }\n\n hoverMonth(cell: CalendarCellViewModel, isHovered: boolean) {\n this.onHover.emit({ cell, isHovered });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n}\n","// tslint:disable:max-line-length\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'bs-timepicker',\n template: `\n <div class=\"bs-timepicker-container\">\n <div class=\"bs-timepicker-controls\">\n <button class=\"bs-decrease\" type=\"button\">-</button>\n <input type=\"text\" [value]=\"hours\" placeholder=\"00\">\n <button class=\"bs-increase\" type=\"button\">+</button>\n </div>\n <div class=\"bs-timepicker-controls\">\n <button class=\"bs-decrease\" type=\"button\">-</button>\n <input type=\"text\" [value]=\"minutes\" placeholder=\"00\">\n <button class=\"bs-increase\" type=\"button\">+</button>\n </div>\n <button class=\"switch-time-format\" type=\"button\">{{ ampm }}\n <img\n src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAKCAYAAABi8KSDAAABSElEQVQYV3XQPUvDUBQG4HNuagtVqc6KgouCv6GIuIntYBLB9hcIQpLStCAIV7DYmpTcRWcXqZio3Vwc/UCc/QEqfgyKGbr0I7nS1EiHeqYzPO/h5SD0jaxUZjmSLCB+OFb+UFINFwASAEAdpu9gaGXVyAHHFQBkHpKHc6a9dzECvADyY9sqlAMsK9W0jzxDXqeytr3mhQckxSji27TJJ5/rPmIpwJJq3HrtduriYOurv1a4i1p5HnhkG9OFymi0ReoO05cGwb+ayv4dysVygjeFmsP05f8wpZQ8fsdvfmuY9zjWSNqUtgYFVnOVReILYoBFzdQI5/GGFzNHhGbeZnopDGU29sZbscgldmC99w35VOATTycIMMcBXIfpSVGzZhA6C8hh00conln6VQ9TGgV32OEAKQC4DrBq7CJwd0ggR7Vq/rPrfgB+C3sGypY5DAAAAABJRU5ErkJggg==\"\n alt=\"\">\n </button>\n </div>\n `\n})\nexport class BsTimepickerViewComponent {\n ampm = 'ok';\n hours = 0;\n minutes = 0;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { yearsPerCalendar } from '../../engine/format-years-calendar';\nimport {\n BsDatepickerViewMode,\n BsNavigationDirection,\n BsNavigationEvent,\n CalendarCellViewModel,\n CellHoverEvent,\n YearsCalendarViewModel\n} from '../../models';\n\n@Component({\n selector: 'bs-years-calendar-view',\n template: `\n <bs-calendar-layout>\n <bs-datepicker-navigation-view\n [calendar]=\"calendar\"\n (onNavigate)=\"navigateTo($event)\"\n (onViewMode)=\"changeViewMode($event)\"\n ></bs-datepicker-navigation-view>\n\n <table role=\"grid\" class=\"years\">\n <tbody>\n <tr *ngFor=\"let row of calendar.years\">\n <td *ngFor=\"let year of row\" role=\"gridcell\"\n (click)=\"viewYear(year)\"\n (mouseenter)=\"hoverYear(year, true)\"\n (mouseleave)=\"hoverYear(year, false)\"\n [class.disabled]=\"year.isDisabled\"\n [class.is-highlighted]=\"year.isHovered\">\n <span [class.selected]=\"year.isSelected\">{{ year.label }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </bs-calendar-layout>\n `\n})\nexport class BsYearsCalendarViewComponent {\n @Input() calendar: YearsCalendarViewModel;\n\n @Output() onNavigate = new EventEmitter<BsNavigationEvent>();\n @Output() onViewMode = new EventEmitter<BsDatepickerViewMode>();\n\n @Output() onSelect = new EventEmitter<CalendarCellViewModel>();\n @Output() onHover = new EventEmitter<CellHoverEvent>();\n\n navigateTo(event: BsNavigationDirection): void {\n const step = BsNavigationDirection.DOWN === event ? -1 : 1;\n this.onNavigate.emit({ step: { year: step * yearsPerCalendar } });\n }\n\n viewYear(year: CalendarCellViewModel) {\n this.onSelect.emit(year);\n }\n\n hoverYear(cell: CalendarCellViewModel, isHovered: boolean) {\n this.onHover.emit({ cell, isHovered });\n }\n\n changeViewMode(event: BsDatepickerViewMode): void {\n this.onViewMode.emit(event);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { PositioningService } from 'ngx-bootstrap/positioning';\n\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { BsDatepickerInputDirective } from './bs-datepicker-input.directive';\nimport { BsDatepickerDirective } from './bs-datepicker.component';\nimport { BsDaterangepickerInputDirective } from './bs-daterangepicker-input.directive';\nimport { BsDaterangepickerDirective } from './bs-daterangepicker.component';\n\nimport { BsDatepickerInlineDirective } from './bs-datepicker-inline.component';\n\nimport { BsLocaleService } from './bs-locale.service';\nimport { BsDatepickerActions } from './reducer/bs-datepicker.actions';\nimport { BsDatepickerEffects } from './reducer/bs-datepicker.effects';\nimport { BsDatepickerStore } from './reducer/bs-datepicker.store';\nimport { BsDatepickerContainerComponent } from './themes/bs/bs-datepicker-container.component';\nimport { BsDaterangepickerContainerComponent } from './themes/bs/bs-daterangepicker-container.component';\n\nimport { BsDatepickerInlineContainerComponent } from './themes/bs/bs-datepicker-inline-container.component';\nimport { BsDaterangepickerInlineContainerComponent } from './themes/bs/bs-daterangepicker-inline-container.component';\n\nimport { BsDaterangepickerInlineDirective } from './bs-daterangepicker-inline.component';\n\nimport { BsCalendarLayoutComponent } from './themes/bs/bs-calendar-layout.component';\nimport { BsCurrentDateViewComponent } from './themes/bs/bs-current-date-view.component';\nimport { BsCustomDatesViewComponent } from './themes/bs/bs-custom-dates-view.component';\nimport { BsDatepickerDayDecoratorComponent } from './themes/bs/bs-datepicker-day-decorator.directive';\nimport { BsDatepickerNavigationViewComponent } from './themes/bs/bs-datepicker-navigation-view.component';\nimport { BsDaysCalendarViewComponent } from './themes/bs/bs-days-calendar-view.component';\nimport { BsMonthCalendarViewComponent } from './themes/bs/bs-months-calendar-view.component';\nimport { BsTimepickerViewComponent } from './themes/bs/bs-timepicker-view.component';\nimport { BsYearsCalendarViewComponent } from './themes/bs/bs-years-calendar-view.component';\n\n@NgModule({\n imports: [CommonModule, TooltipModule.forRoot()],\n declarations: [\n BsCalendarLayoutComponent,\n BsCurrentDateViewComponent,\n BsCustomDatesViewComponent,\n BsDatepickerDayDecoratorComponent,\n BsDatepickerNavigationViewComponent,\n BsDaysCalendarViewComponent,\n BsMonthCalendarViewComponent,\n BsTimepickerViewComponent,\n BsYearsCalendarViewComponent,\n BsDatepickerContainerComponent,\n BsDatepickerDirective,\n BsDatepickerInlineContainerComponent,\n BsDatepickerInlineDirective,\n BsDatepickerInputDirective,\n BsDaterangepickerContainerComponent,\n BsDaterangepickerDirective,\n BsDaterangepickerInlineContainerComponent,\n BsDaterangepickerInlineDirective,\n BsDaterangepickerInputDirective\n ],\n entryComponents: [\n BsDatepickerContainerComponent,\n BsDaterangepickerContainerComponent,\n BsDatepickerInlineContainerComponent,\n BsDaterangepickerInlineContainerComponent\n ],\n exports: [\n BsDatepickerContainerComponent,\n BsDatepickerDirective,\n BsDatepickerInlineContainerComponent,\n BsDatepickerInlineDirective,\n BsDatepickerInputDirective,\n BsDaterangepickerContainerComponent,\n BsDaterangepickerDirective,\n BsDaterangepickerInlineContainerComponent,\n BsDaterangepickerInlineDirective,\n BsDaterangepickerInputDirective\n ]\n})\nexport class BsDatepickerModule {\n static forRoot(): ModuleWithProviders<BsDatepickerModule> {\n return {\n ngModule: BsDatepickerModule,\n providers: [\n ComponentLoaderFactory,\n PositioningService,\n BsDatepickerStore,\n BsDatepickerActions,\n BsDatepickerEffects,\n BsLocaleService\n ]\n };\n }\n}\n","import { formatDate } from 'ngx-bootstrap/chronos';\n\nexport class DateFormatter {\n format(date: Date, format: string, locale: string): string {\n return formatDate(date, format, locale);\n }\n}\n","/* tslint:disable: max-file-line-count */\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport { DateFormatter } from './date-formatter';\n\n\n@Component({\n selector: 'datepicker-inner',\n template: `\n <!--&lt;!&ndash;ng-keydown=\"keydown($event)\"&ndash;&gt;-->\n <div *ngIf=\"datepickerMode\" class=\"well well-sm bg-faded p-a card\" role=\"application\" >\n <ng-content></ng-content>\n </div>\n `\n})\nexport class DatePickerInnerComponent implements OnInit, OnChanges {\n @Input() locale: string;\n @Input() datepickerMode: string;\n @Input() startingDay: number;\n @Input() yearRange: number;\n\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() minMode: string;\n @Input() maxMode: string;\n @Input() showWeeks: boolean;\n @Input() formatDay: string;\n @Input() formatMonth: string;\n @Input() formatYear: string;\n @Input() formatDayHeader: string;\n @Input() formatDayTitle: string;\n @Input() formatMonthTitle: string;\n @Input() onlyCurrentMonth: boolean;\n @Input() shortcutPropagation: boolean;\n @Input() customClass: { date: Date; mode: string; clazz: string }[];\n @Input() monthColLimit: number;\n @Input() yearColLimit: number;\n @Input() dateDisabled: { date: Date; mode: string }[];\n @Input() dayDisabled: number[];\n @Input() initDate: Date;\n\n @Output() selectionDone: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n @Output() update: EventEmitter<Date> = new EventEmitter<Date>(false);\n @Output() activeDateChange: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n\n /* tslint:disable-next-line: no-any*/\n stepDay: any = {};\n /* tslint:disable-next-line: no-any*/\n stepMonth: any = {};\n /* tslint:disable-next-line: no-any*/\n stepYear: any = {};\n\n uniqueId: string;\n\n protected modes: string[] = ['day', 'month', 'year'];\n protected dateFormatter: DateFormatter = new DateFormatter();\n protected _activeDate: Date;\n protected selectedDate: Date;\n protected activeDateId: string;\n\n protected refreshViewHandlerDay: Function;\n protected compareHandlerDay: Function;\n protected refreshViewHandlerMonth: Function;\n protected compareHandlerMonth: Function;\n protected refreshViewHandlerYear: Function;\n protected compareHandlerYear: Function;\n\n @Input()\n get activeDate(): Date {\n return this._activeDate;\n }\n\n set activeDate(value: Date) {\n this._activeDate = value;\n }\n\n // todo: add formatter value to Date object\n ngOnInit(): void {\n // todo: use date for unique value\n this.uniqueId = `datepicker--${Math.floor(Math.random() * 10000)}`;\n\n if (this.initDate) {\n this.activeDate = this.initDate;\n this.selectedDate = new Date(this.activeDate.valueOf());\n this.update.emit(this.activeDate);\n } else if (this.activeDate === undefined) {\n this.activeDate = new Date();\n }\n }\n\n // this.refreshView should be called here to reflect the changes on the fly\n // tslint:disable-next-line:no-unused-variable\n ngOnChanges(changes: SimpleChanges): void {\n this.refreshView();\n this.checkIfActiveDateGotUpdated(changes.activeDate);\n }\n\n // Check if activeDate has been update and then emit the activeDateChange with the new date\n /* tslint:disable-next-line: no-any */\n checkIfActiveDateGotUpdated(activeDate: any): void {\n if (activeDate && !activeDate.firstChange) {\n const previousValue = activeDate.previousValue;\n if (\n previousValue &&\n previousValue instanceof Date &&\n previousValue.getTime() !== activeDate.currentValue.getTime()\n ) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n }\n\n setCompareHandler(handler: Function, type: string): void {\n if (type === 'day') {\n this.compareHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.compareHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.compareHandlerYear = handler;\n }\n }\n\n compare(date1: Date, date2: Date): number | undefined {\n if (date1 === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (this.datepickerMode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1, date2);\n }\n\n if (this.datepickerMode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1, date2);\n }\n\n if (this.datepickerMode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1, date2);\n }\n\n return void 0;\n }\n\n setRefreshViewHandler(handler: Function, type: string): void {\n if (type === 'day') {\n this.refreshViewHandlerDay = handler;\n }\n\n if (type === 'month') {\n this.refreshViewHandlerMonth = handler;\n }\n\n if (type === 'year') {\n this.refreshViewHandlerYear = handler;\n }\n }\n\n refreshView(): void {\n if (this.datepickerMode === 'day' && this.refreshViewHandlerDay) {\n this.refreshViewHandlerDay();\n }\n\n if (this.datepickerMode === 'month' && this.refreshViewHandlerMonth) {\n this.refreshViewHandlerMonth();\n }\n\n if (this.datepickerMode === 'year' && this.refreshViewHandlerYear) {\n this.refreshViewHandlerYear();\n }\n }\n\n dateFilter(date: Date, format: string): string {\n return this.dateFormatter.format(date, format, this.locale);\n }\n\n /* tslint:disable-next-line: no-any*/\n isActive(dateObject: any): boolean {\n if (this.compare(dateObject.date, this.activeDate) === 0) {\n this.activeDateId = dateObject.uid;\n\n return true;\n }\n\n return false;\n }\n\n /* tslint:disable-next-line: no-any*/\n createDateObject(date: Date, format: string): any {\n /* tslint:disable-next-line: no-any*/\n const dateObject: any = {};\n dateObject.date = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n dateObject.date = this.fixTimeZone(dateObject.date);\n dateObject.label = this.dateFilter(date, format);\n dateObject.selected = this.compare(date, this.selectedDate) === 0;\n dateObject.disabled = this.isDisabled(date);\n dateObject.current = this.compare(date, new Date()) === 0;\n dateObject.customClass = this.getCustomClassForDate(dateObject.date);\n\n return dateObject;\n }\n\n /* tslint:disable-next-line: no-any*/\n split(arr: any[], size: number): any[] {\n /* tslint:disable-next-line: no-any*/\n const arrays: any[] = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n\n return arrays;\n }\n\n // Fix a hard-reproducible bug with timezones\n // The bug depends on OS, browser, current timezone and current date\n // i.e.\n // var date = new Date(2014, 0, 1);\n // console.log(date.getFullYear(), date.getMonth(), date.getDate(),\n // date.getHours()); can result in \"2013 11 31 23\" because of the bug.\n fixTimeZone(date: Date): Date {\n const hours = date.getHours();\n\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n hours === 23 ? hours + 2 : 0\n );\n }\n\n select(date: Date, isManual = true): void {\n if (this.datepickerMode === this.minMode) {\n if (!this.activeDate) {\n this.activeDate = new Date(0, 0, 0, 0, 0, 0, 0);\n }\n\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n this.activeDate = this.fixTimeZone(this.activeDate);\n if (isManual) {\n this.selectionDone.emit(this.activeDate);\n }\n } else {\n this.activeDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n this.activeDate = this.fixTimeZone(this.activeDate);\n if (isManual) {\n this.datepickerMode = this.modes[\n this.modes.indexOf(this.datepickerMode) - 1\n ];\n }\n }\n\n this.selectedDate = new Date(this.activeDate.valueOf());\n this.update.emit(this.activeDate);\n this.refreshView();\n }\n\n move(direction: number): void {\n /* tslint:disable-next-line: no-any*/\n let expectedStep: any;\n if (this.datepickerMode === 'day') {\n expectedStep = this.stepDay;\n }\n\n if (this.datepickerMode === 'month') {\n expectedStep = this.stepMonth;\n }\n\n if (this.datepickerMode === 'year') {\n expectedStep = this.stepYear;\n }\n\n if (expectedStep) {\n const year =\n this.activeDate.getFullYear() + direction * (expectedStep.years || 0);\n const month =\n this.activeDate.getMonth() + direction * (expectedStep.months || 0);\n this.activeDate = new Date(year, month, 1);\n\n this.refreshView();\n this.activeDateChange.emit(this.activeDate);\n }\n }\n\n toggleMode(_direction: number): void {\n const direction = _direction || 1;\n\n if (\n (this.datepickerMode === this.maxMode && direction === 1) ||\n (this.datepickerMode === this.minMode && direction === -1)\n ) {\n return;\n }\n\n this.datepickerMode = this.modes[\n this.modes.indexOf(this.datepickerMode) + direction\n ];\n this.refreshView();\n }\n\n protected getCustomClassForDate(date: Date): string {\n if (!this.customClass) {\n return '';\n }\n // todo: build a hash of custom classes, it will work faster\n const customClassObject: {\n date: Date;\n mode: string;\n clazz: string;\n /* tslint:disable-next-line: no-any */\n } = this.customClass.find((customClass: any) => {\n return (\n customClass.date.valueOf() === date.valueOf() &&\n customClass.mode === this.datepickerMode\n );\n }, this);\n\n return customClassObject === undefined ? '' : customClassObject.clazz;\n }\n\n protected compareDateDisabled(\n date1Disabled: { date: Date; mode: string },\n date2: Date\n ): number {\n if (date1Disabled === undefined || date2 === undefined) {\n return undefined;\n }\n\n if (date1Disabled.mode === 'day' && this.compareHandlerDay) {\n return this.compareHandlerDay(date1Disabled.date, date2);\n }\n\n if (date1Disabled.mode === 'month' && this.compareHandlerMonth) {\n return this.compareHandlerMonth(date1Disabled.date, date2);\n }\n\n if (date1Disabled.mode === 'year' && this.compareHandlerYear) {\n return this.compareHandlerYear(date1Disabled.date, date2);\n }\n\n return undefined;\n }\n\n protected isDisabled(date: Date): boolean {\n let isDateDisabled = false;\n if (this.dateDisabled) {\n this.dateDisabled.forEach(\n (disabledDate: { date: Date; mode: string }) => {\n if (this.compareDateDisabled(disabledDate, date) === 0) {\n isDateDisabled = true;\n }\n }\n );\n }\n\n if (this.dayDisabled) {\n isDateDisabled =\n isDateDisabled ||\n this.dayDisabled.indexOf(date.getDay()) > -1;\n }\n\n return (\n isDateDisabled ||\n (this.minDate && this.compare(date, this.minDate) < 0) ||\n (this.maxDate && this.compare(date, this.maxDate) > 0)\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DatepickerConfig {\n locale = 'en';\n datepickerMode = 'day';\n startingDay = 0;\n yearRange = 20;\n minMode = 'day';\n maxMode = 'year';\n showWeeks = true;\n formatDay = 'DD';\n formatMonth = 'MMMM';\n formatYear = 'YYYY';\n formatDayHeader = 'dd';\n formatDayTitle = 'MMMM YYYY';\n formatMonthTitle = 'YYYY';\n onlyCurrentMonth = false;\n monthColLimit = 3;\n yearColLimit = 5;\n shortcutPropagation = false;\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n Provider,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\nimport { DatepickerConfig } from './datepicker.config';\n\nexport const DATEPICKER_CONTROL_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n /* tslint:disable-next-line: no-use-before-declare */\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n};\n\n/* tslint:disable:component-selector-name component-selector-type */\n@Component({\n selector: 'datepicker',\n template: `\n <datepicker-inner [activeDate]=\"activeDate\"\n (update)=\"onUpdate($event)\"\n [locale]=\"config.locale\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [customClass]=\"customClass\"\n [dateDisabled]=\"dateDisabled\"\n [dayDisabled]=\"dayDisabled\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [shortcutPropagation]=\"shortcutPropagation\"\n [monthColLimit]=\"monthColLimit\"\n [yearColLimit]=\"yearColLimit\"\n (selectionDone)=\"onSelectionDone($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\">\n <daypicker tabindex=\"0\"></daypicker>\n <monthpicker tabindex=\"0\"></monthpicker>\n <yearpicker tabindex=\"0\"></yearpicker>\n </datepicker-inner>\n `,\n providers: [DATEPICKER_CONTROL_VALUE_ACCESSOR]\n})\n/* tslint:enable:component-selector-name component-selector-type */\nexport class DatePickerComponent implements ControlValueAccessor {\n /** sets datepicker mode, supports: `day`, `month`, `year` */\n @Input() datepickerMode = 'day';\n /** default date to show if `ng-model` value is not specified */\n @Input() initDate: Date;\n /** oldest selectable date */\n @Input() minDate: Date;\n /** latest selectable date */\n @Input() maxDate: Date;\n /** set lower datepicker mode, supports: `day`, `month`, `year` */\n @Input() minMode: string;\n /** sets upper datepicker mode, supports: `day`, `month`, `year` */\n @Input() maxMode: string;\n /** if false week numbers will be hidden */\n @Input() showWeeks = true;\n /** format of day in month */\n @Input() formatDay: string;\n /** format of month in year */\n @Input() formatMonth: string;\n /** format of year in year range */\n @Input() formatYear: string;\n /** format of day in week header */\n @Input() formatDayHeader: string;\n /** format of title when selecting day */\n @Input() formatDayTitle: string;\n /** format of title when selecting month */\n @Input() formatMonthTitle: string;\n /** starting day of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input() startingDay: number;\n /** number of years displayed in year selection */\n @Input() yearRange: number;\n /** if true only dates from the currently displayed month will be shown */\n @Input() onlyCurrentMonth: boolean;\n /** if true shortcut`s event propagation will be disabled */\n @Input() shortcutPropagation: boolean;\n /** number of months displayed in a single row of month picker */\n @Input() monthColLimit: number;\n /** number of years displayed in a single row of year picker */\n @Input() yearColLimit: number;\n /** array of custom css classes to be applied to targeted dates */\n @Input() customClass: { date: Date; mode: string; clazz: string }[];\n /** array of disabled dates */\n @Input() dateDisabled: { date: Date; mode: string }[];\n /** disabled days of the week from 0-6 (0=Sunday, ..., 6=Saturday) */\n @Input() dayDisabled: number[];\n\n /** currently active date */\n @Input()\n get activeDate(): Date {\n return this._activeDate || this._now;\n }\n\n set activeDate(value: Date) {\n this._activeDate = value;\n }\n\n @Output()\n selectionDone: EventEmitter<Date> = new EventEmitter<Date>(undefined);\n\n /** callback to invoke when the activeDate is changed. */\n @Output()\n activeDateChange: EventEmitter<Date> = new EventEmitter<Date>(\n undefined\n );\n\n @ViewChild(DatePickerInnerComponent, { static: true })\n _datePicker: DatePickerInnerComponent;\n\n /* tslint:disable-next-line: no-any*/\n onChange: any = Function.prototype;\n /* tslint:disable-next-line: no-any*/\n onTouched: any = Function.prototype;\n\n config: DatepickerConfig;\n\n protected _now: Date = new Date();\n protected _activeDate: Date;\n\n constructor(config: DatepickerConfig) {\n this.config = config;\n this.configureOptions();\n }\n\n configureOptions(): void {\n Object.assign(this, this.config);\n }\n\n onUpdate(event: Date): void {\n this.activeDate = event;\n this.onChange(event);\n }\n\n onSelectionDone(event: Date): void {\n this.selectionDone.emit(event);\n }\n\n onActiveDateChange(event: Date): void {\n this.activeDateChange.emit(event);\n }\n // todo: support null value\n /* tslint:disable-next-line: no-any*/\n writeValue(value: any): void {\n if (this._datePicker.compare(value, this._activeDate) === 0) {\n return;\n }\n if (value && value instanceof Date) {\n this.activeDate = value;\n this._datePicker.select(value, false);\n\n return;\n }\n\n this.activeDate = value ? new Date(value) : void 0;\n }\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'daypicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode === 'day'\" role=\"grid\" [attr.aria-labelledby]=\"datePicker.uniqueId + '-title'\" aria-activedescendant=\"activeDateId\">\n <thead>\n <tr>\n <th>\n <button *ngIf=\"!isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\"\n tabindex=\"-1\">‹</button>\n <button *ngIf=\"isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\"\n tabindex=\"-1\">&lt;</button>\n </th>\n <th [attr.colspan]=\"5 + (datePicker.showWeeks ? 1 : 0)\">\n <button [id]=\"datePicker.uniqueId + '-title'\"\n type=\"button\" class=\"btn btn-default btn-secondary btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === datePicker.maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === datePicker.maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong>\n </button>\n </th>\n <th>\n <button *ngIf=\"!isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\"\n tabindex=\"-1\">›</button>\n <button *ngIf=\"isBs4\"\n type=\"button\"\n class=\"btn btn-default btn-secondary btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\"\n tabindex=\"-1\">&gt;\n </button>\n </th>\n </tr>\n <tr>\n <th *ngIf=\"datePicker.showWeeks\"></th>\n <th *ngFor=\"let labelz of labels\" class=\"text-center\">\n <small aria-label=\"labelz.full\"><b>{{ labelz.abbr }}</b></small>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-template ngFor [ngForOf]=\"rows\" let-rowz=\"$implicit\" let-index=\"index\">\n <tr *ngIf=\"!(datePicker.onlyCurrentMonth && rowz[0].secondary && rowz[6].secondary)\">\n <td *ngIf=\"datePicker.showWeeks\" class=\"h6\" class=\"text-center\">\n <em>{{ weekNumbers[index] }}</em>\n </td>\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [id]=\"dtz.uid\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-sm {{dtz.customClass}}\"\n *ngIf=\"!(datePicker.onlyCurrentMonth && dtz.secondary)\"\n [ngClass]=\"{'btn-secondary': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected, disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz), 'btn-default': !isBs4}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-muted': dtz.secondary || dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </ng-template>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-secondary {\n color: #292b2c;\n background-color: #fff;\n border-color: #ccc;\n }\n :host .btn-info .text-muted {\n color: #292b2c !important;\n }\n `\n ]\n})\nexport class DayPickerComponent implements OnInit {\n labels: any[] = [];\n title: string;\n rows: any[] = [];\n weekNumbers: number[] = [];\n datePicker: DatePickerInnerComponent;\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n /*protected getDaysInMonth(year:number, month:number) {\n return ((month === 1) && (year % 4 === 0) &&\n ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];\n }*/\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepDay = { months: 1 };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const year = this.activeDate.getFullYear();\n const month = this.activeDate.getMonth();\n const firstDayOfMonth = new Date(year, month, 1);\n const difference = this.startingDay - firstDayOfMonth.getDay();\n const numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference;\n const firstDate = new Date(firstDayOfMonth.getTime());\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-week calendar\n const _days: Date[] = self.getDates(firstDate, 42);\n const days: any[] = [];\n for (let i = 0; i < 42; i++) {\n const _dateObject = this.createDateObject(_days[i], this.formatDay);\n _dateObject.secondary = _days[i].getMonth() !== month;\n _dateObject.uid = this.uniqueId + '-' + i;\n days[i] = _dateObject;\n }\n\n self.labels = [];\n for (let j = 0; j < 7; j++) {\n self.labels[j] = {};\n self.labels[j].abbr = this.dateFilter(\n days[j].date,\n this.formatDayHeader\n );\n self.labels[j].full = this.dateFilter(days[j].date, 'EEEE');\n }\n\n self.title = this.dateFilter(this.activeDate, this.formatDayTitle);\n self.rows = this.split(days, 7);\n\n if (this.showWeeks) {\n self.weekNumbers = [];\n const thursdayIndex = (4 + 7 - this.startingDay) % 7;\n const numWeeks = self.rows.length;\n for (let curWeek = 0; curWeek < numWeeks; curWeek++) {\n self.weekNumbers.push(\n self.getISO8601WeekNumber(self.rows[curWeek][thursdayIndex].date)\n );\n }\n }\n }, 'day');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\n const d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\n return d1.getTime() - d2.getTime();\n }, 'day');\n\n this.datePicker.refreshView();\n }\n\n protected getDates(startDate: Date, n: number): Date[] {\n const dates: Date[] = new Array(n);\n let current = new Date(startDate.getTime());\n let i = 0;\n let date: Date;\n while (i < n) {\n date = new Date(current.getTime());\n date = this.datePicker.fixTimeZone(date);\n dates[i++] = date;\n current = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate() + 1\n );\n }\n return dates;\n }\n\n protected getISO8601WeekNumber(date: Date): number {\n const checkDate = new Date(date.getTime());\n // Thursday\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));\n const time = checkDate.getTime();\n // Compare with Jan 1\n checkDate.setMonth(0);\n checkDate.setDate(1);\n return (\n Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1\n );\n }\n\n // todo: key events implementation\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\n\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'monthpicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode==='month'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\" tabindex=\"-1\">‹</button></th>\n <th [attr.colspan]=\"((datePicker.monthColLimit - 2) <= 0) ? 1 : datePicker.monthColLimit - 2\">\n <button [id]=\"datePicker.uniqueId + '-title'\"\n type=\"button\" class=\"btn btn-default btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong> \n </button>\n </th>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\" tabindex=\"-1\">›</button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rowz of rows\">\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [attr.id]=\"dtz.uid\" [ngClass]=\"dtz.customClass\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n [ngClass]=\"{'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)), disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz)}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-info .text-success {\n color: #fff !important;\n }\n `\n ]\n})\nexport class MonthPickerComponent implements OnInit {\n title: string;\n rows: any[] = [];\n datePicker: DatePickerInnerComponent;\n maxMode: string;\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepMonth = { years: 1 };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const months: any[] = new Array(12);\n const year: number = this.activeDate.getFullYear();\n let date: Date;\n\n for (let i = 0; i < 12; i++) {\n date = new Date(year, i, 1);\n date = this.fixTimeZone(date);\n months[i] = this.createDateObject(date, this.formatMonth);\n months[i].uid = this.uniqueId + '-' + i;\n }\n\n self.title = this.dateFilter(this.activeDate, this.formatMonthTitle);\n self.rows = this.split(months, self.datePicker.monthColLimit);\n }, 'month');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n const d1 = new Date(date1.getFullYear(), date1.getMonth());\n const d2 = new Date(date2.getFullYear(), date2.getMonth());\n return d1.getTime() - d2.getTime();\n }, 'month');\n\n this.datePicker.refreshView();\n }\n\n // todo: key events implementation\n}\n","// @deprecated\n// tslint:disable\nimport { Component, OnInit } from '@angular/core';\n\nimport { isBs3 } from 'ngx-bootstrap/utils';\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\n\n@Component({\n selector: 'yearpicker',\n template: `\n<table *ngIf=\"datePicker.datepickerMode==='year'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-left float-left\"\n (click)=\"datePicker.move(-1)\" tabindex=\"-1\">‹</button>\n </th>\n <th [attr.colspan]=\"((datePicker.yearColLimit - 2) <= 0) ? 1 : datePicker.yearColLimit - 2\">\n <button [id]=\"datePicker.uniqueId + '-title'\" role=\"heading\"\n type=\"button\" class=\"btn btn-default btn-sm\"\n (click)=\"datePicker.toggleMode(0)\"\n [disabled]=\"datePicker.datepickerMode === datePicker.maxMode\"\n [ngClass]=\"{disabled: datePicker.datepickerMode === datePicker.maxMode}\" tabindex=\"-1\" style=\"width:100%;\">\n <strong>{{ title }}</strong>\n </button>\n </th>\n <th>\n <button type=\"button\" class=\"btn btn-default btn-sm pull-right float-right\"\n (click)=\"datePicker.move(1)\" tabindex=\"-1\">›</button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rowz of rows\">\n <td *ngFor=\"let dtz of rowz\" class=\"text-center\" role=\"gridcell\" [attr.id]=\"dtz.uid\">\n <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n [ngClass]=\"{'btn-link': isBs4 && !dtz.selected && !datePicker.isActive(dtz), 'btn-info': dtz.selected || (isBs4 && !dtz.selected && datePicker.isActive(dtz)), disabled: dtz.disabled, active: !isBs4 && datePicker.isActive(dtz)}\"\n [disabled]=\"dtz.disabled\"\n (click)=\"datePicker.select(dtz.date)\" tabindex=\"-1\">\n <span [ngClass]=\"{'text-success': isBs4 && dtz.current, 'text-info': !isBs4 && dtz.current}\">{{ dtz.label }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n `,\n styles: [\n `\n :host .btn-info .text-success {\n color: #fff !important;\n }\n `\n ]\n})\nexport class YearPickerComponent implements OnInit {\n datePicker: DatePickerInnerComponent;\n title: string;\n rows: any[] = [];\n\n constructor(datePicker: DatePickerInnerComponent) {\n this.datePicker = datePicker;\n }\n\n get isBs4(): boolean {\n return !isBs3();\n }\n\n ngOnInit(): void {\n const self = this;\n\n this.datePicker.stepYear = { years: this.datePicker.yearRange };\n\n this.datePicker.setRefreshViewHandler(function(): void {\n const years: any[] = new Array(this.yearRange);\n let date: Date;\n const start = self.getStartingYear(this.activeDate.getFullYear());\n\n for (let i = 0; i < this.yearRange; i++) {\n date = new Date(start + i, 0, 1);\n date = this.fixTimeZone(date);\n years[i] = this.createDateObject(date, this.formatYear);\n years[i].uid = this.uniqueId + '-' + i;\n }\n\n self.title = [years[0].label, years[this.yearRange - 1].label].join(\n ' - '\n );\n self.rows = this.split(years, self.datePicker.yearColLimit);\n }, 'year');\n\n this.datePicker.setCompareHandler(function(\n date1: Date,\n date2: Date\n ): number {\n return date1.getFullYear() - date2.getFullYear();\n }, 'year');\n\n this.datePicker.refreshView();\n }\n\n protected getStartingYear(year: number): number {\n // todo: parseInt\n return (\n (year - 1) / this.datePicker.yearRange * this.datePicker.yearRange + 1\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { DatePickerInnerComponent } from './datepicker-inner.component';\nimport { DatePickerComponent } from './datepicker.component';\nimport { DatepickerConfig } from './datepicker.config';\nimport { DayPickerComponent } from './daypicker.component';\nimport { MonthPickerComponent } from './monthpicker.component';\nimport { YearPickerComponent } from './yearpicker.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [\n DatePickerComponent,\n DatePickerInnerComponent,\n DayPickerComponent,\n MonthPickerComponent,\n YearPickerComponent\n ],\n exports: [\n DatePickerComponent,\n DatePickerInnerComponent,\n DayPickerComponent,\n MonthPickerComponent,\n YearPickerComponent\n ],\n entryComponents: [DatePickerComponent]\n})\nexport class DatepickerModule {\n static forRoot(): ModuleWithProviders<DatepickerModule> {\n return { ngModule: DatepickerModule, providers: [DatepickerConfig] };\n }\n}\n"]}