monkey-style-guide 2.0.177 → 2.0.178

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 (604) hide show
  1. package/README.md +1281 -1280
  2. package/assets/data/country-codes.json +1466 -1466
  3. package/assets/icons/add-plus.svg +5 -5
  4. package/assets/icons/address-book.svg +4 -4
  5. package/assets/icons/arrow-down.svg +3 -3
  6. package/assets/icons/arrow-left.svg +3 -3
  7. package/assets/icons/arrow-line-right.svg +5 -5
  8. package/assets/icons/arrow-right.svg +3 -3
  9. package/assets/icons/arrow-up.svg +3 -3
  10. package/assets/icons/arrows.svg +6 -6
  11. package/assets/icons/auction.svg +7 -7
  12. package/assets/icons/average-tax.svg +6 -6
  13. package/assets/icons/bank-account.svg +12 -12
  14. package/assets/icons/bank-agency.svg +8 -8
  15. package/assets/icons/bank.svg +3 -3
  16. package/assets/icons/banknote-search.svg +8 -8
  17. package/assets/icons/bell.svg +4 -4
  18. package/assets/icons/block.svg +4 -4
  19. package/assets/icons/book-open-text.svg +10 -10
  20. package/assets/icons/book.svg +4 -4
  21. package/assets/icons/box.svg +6 -6
  22. package/assets/icons/build-approved.svg +9 -9
  23. package/assets/icons/build-person.svg +9 -9
  24. package/assets/icons/build-refused.svg +9 -9
  25. package/assets/icons/build-waiting.svg +8 -8
  26. package/assets/icons/calendar-box.svg +10 -10
  27. package/assets/icons/calendar.svg +6 -6
  28. package/assets/icons/camera.svg +4 -4
  29. package/assets/icons/card-machine.svg +14 -14
  30. package/assets/icons/card.svg +4 -4
  31. package/assets/icons/cash-banknote-invoice.svg +8 -8
  32. package/assets/icons/chat.svg +4 -4
  33. package/assets/icons/check-circle-out.svg +4 -4
  34. package/assets/icons/check-circle.svg +4 -4
  35. package/assets/icons/check-grey.svg +3 -3
  36. package/assets/icons/check-white.svg +4 -4
  37. package/assets/icons/check.svg +3 -3
  38. package/assets/icons/clipboard.svg +4 -4
  39. package/assets/icons/clock-closed.svg +6 -6
  40. package/assets/icons/clock.svg +4 -4
  41. package/assets/icons/close-circle.svg +5 -5
  42. package/assets/icons/close.svg +4 -4
  43. package/assets/icons/cnpj.svg +9 -9
  44. package/assets/icons/codepen.svg +7 -7
  45. package/assets/icons/company-name.svg +12 -12
  46. package/assets/icons/contract-pen.svg +7 -7
  47. package/assets/icons/contract.svg +14 -14
  48. package/assets/icons/delete.svg +5 -5
  49. package/assets/icons/document.svg +7 -7
  50. package/assets/icons/dollar-sign-circle.svg +7 -7
  51. package/assets/icons/dollar-sign.svg +5 -5
  52. package/assets/icons/domain.svg +9 -9
  53. package/assets/icons/dots-menu.svg +5 -5
  54. package/assets/icons/double-arrow-left.svg +4 -4
  55. package/assets/icons/double-arrow-right.svg +4 -4
  56. package/assets/icons/download.svg +5 -5
  57. package/assets/icons/drag-drop.svg +8 -8
  58. package/assets/icons/edit-square.svg +4 -4
  59. package/assets/icons/edit.svg +3 -3
  60. package/assets/icons/email-send-fast.svg +8 -8
  61. package/assets/icons/email.svg +4 -4
  62. package/assets/icons/empty-doc.svg +4 -4
  63. package/assets/icons/error.svg +5 -5
  64. package/assets/icons/eye-closed.svg +11 -11
  65. package/assets/icons/eye-open.svg +4 -4
  66. package/assets/icons/filter-add.svg +6 -6
  67. package/assets/icons/filter.svg +3 -3
  68. package/assets/icons/grid.svg +6 -6
  69. package/assets/icons/hands-clap.svg +10 -10
  70. package/assets/icons/help.svg +5 -5
  71. package/assets/icons/hexagon.svg +3 -3
  72. package/assets/icons/home.svg +4 -4
  73. package/assets/icons/image.svg +5 -5
  74. package/assets/icons/info.svg +6 -6
  75. package/assets/icons/invoice.svg +5 -5
  76. package/assets/icons/invoices-anticipated.svg +8 -8
  77. package/assets/icons/invoices-approval.svg +8 -8
  78. package/assets/icons/invoices-refused.svg +8 -8
  79. package/assets/icons/lighting-circle.svg +5 -5
  80. package/assets/icons/list.svg +8 -8
  81. package/assets/icons/location-pin.svg +4 -4
  82. package/assets/icons/login.svg +5 -5
  83. package/assets/icons/logout.svg +5 -5
  84. package/assets/icons/mail-open-document.svg +6 -0
  85. package/assets/icons/medal.svg +12 -12
  86. package/assets/icons/menu.svg +5 -5
  87. package/assets/icons/money-cedule.svg +6 -6
  88. package/assets/icons/money-discount.svg +8 -8
  89. package/assets/icons/money-hand.svg +6 -6
  90. package/assets/icons/money-net.svg +8 -8
  91. package/assets/icons/money-new.svg +7 -7
  92. package/assets/icons/money-percent.svg +10 -10
  93. package/assets/icons/money-refused.svg +9 -9
  94. package/assets/icons/money-sign.svg +4 -4
  95. package/assets/icons/money-waiting.svg +8 -8
  96. package/assets/icons/money.svg +6 -6
  97. package/assets/icons/more-circle.svg +5 -5
  98. package/assets/icons/more.svg +4 -4
  99. package/assets/icons/new-company.svg +10 -10
  100. package/assets/icons/offered.svg +5 -5
  101. package/assets/icons/office-work.svg +10 -10
  102. package/assets/icons/open-external.svg +5 -5
  103. package/assets/icons/password.svg +4 -4
  104. package/assets/icons/people.svg +6 -6
  105. package/assets/icons/percent-box.svg +6 -6
  106. package/assets/icons/percent.svg +5 -5
  107. package/assets/icons/person-document.svg +10 -10
  108. package/assets/icons/person-sad.svg +6 -6
  109. package/assets/icons/phone-call.svg +4 -4
  110. package/assets/icons/phone.svg +3 -3
  111. package/assets/icons/pin-navigation.svg +5 -5
  112. package/assets/icons/pork.svg +5 -5
  113. package/assets/icons/radio.svg +4 -4
  114. package/assets/icons/refresh.svg +5 -5
  115. package/assets/icons/registration.svg +8 -8
  116. package/assets/icons/repeat.svg +4 -4
  117. package/assets/icons/search.svg +4 -4
  118. package/assets/icons/second-warning.svg +5 -5
  119. package/assets/icons/settings.svg +4 -4
  120. package/assets/icons/shield-chekmark.svg +3 -3
  121. package/assets/icons/star-shining.svg +13 -13
  122. package/assets/icons/star.svg +3 -3
  123. package/assets/icons/store.svg +8 -8
  124. package/assets/icons/target-dart-arrow.svg +6 -6
  125. package/assets/icons/today.svg +9 -9
  126. package/assets/icons/trash.svg +6 -6
  127. package/assets/icons/trophy.svg +8 -8
  128. package/assets/icons/unfold-more.svg +4 -4
  129. package/assets/icons/upload.svg +5 -5
  130. package/assets/icons/user-group.svg +8 -8
  131. package/assets/icons/user.svg +4 -4
  132. package/assets/icons/waiting.svg +17 -17
  133. package/assets/icons/wallet.svg +5 -5
  134. package/assets/icons/warning.svg +5 -5
  135. package/assets/scss/partials/_breakpoints.scss +35 -35
  136. package/assets/scss/partials/_forms.scss +350 -350
  137. package/assets/scss/partials/_index.scss +11 -11
  138. package/assets/scss/partials/_radio-button.scss +35 -35
  139. package/assets/scss/partials/_style-reset.scss +185 -185
  140. package/assets/scss/partials/_typography.scss +149 -149
  141. package/assets/scss/partials/_variables.scss +184 -184
  142. package/assets/scss/partials/components/_badge.scss +55 -55
  143. package/assets/scss/partials/components/_buttons.scss +831 -831
  144. package/assets/scss/partials/components/_checkbox.scss +69 -69
  145. package/assets/scss/partials/components/_date-range-picker.scss +265 -265
  146. package/assets/scss/partials/components/_expansion.scss +96 -96
  147. package/assets/scss/partials/components/_image-crop.scss +305 -305
  148. package/assets/scss/partials/components/_index.scss +23 -23
  149. package/assets/scss/partials/components/_input-phone.scss +36 -36
  150. package/assets/scss/partials/components/_input.scss +65 -65
  151. package/assets/scss/partials/components/_modal.scss +282 -282
  152. package/assets/scss/partials/components/_progressbar.scss +112 -112
  153. package/assets/scss/partials/components/_radiobutton.scss +66 -66
  154. package/assets/scss/partials/components/_select.scss +356 -356
  155. package/assets/scss/partials/components/_snackbar.scss +204 -204
  156. package/assets/scss/partials/components/_stepper.scss +86 -86
  157. package/assets/scss/partials/components/_tab.scss +82 -82
  158. package/assets/scss/partials/components/_table.scss +148 -148
  159. package/assets/scss/partials/components/_toggle.scss +103 -103
  160. package/assets/scss/partials/components/_wizard.scss +112 -112
  161. package/esm2020/lib/components/badge/badge.component.mjs +43 -43
  162. package/esm2020/lib/components/badge/badge.module.mjs +19 -19
  163. package/esm2020/lib/components/badge/index.mjs +3 -3
  164. package/esm2020/lib/components/button/button-avatar.component.mjs +53 -53
  165. package/esm2020/lib/components/button/button-dropdown.component.mjs +121 -121
  166. package/esm2020/lib/components/button/button.component.mjs +154 -154
  167. package/esm2020/lib/components/button/button.module.mjs +23 -23
  168. package/esm2020/lib/components/button/index.mjs +5 -5
  169. package/esm2020/lib/components/checkbox/checkbox.component.mjs +165 -165
  170. package/esm2020/lib/components/checkbox/checkbox.module.mjs +20 -20
  171. package/esm2020/lib/components/checkbox/index.mjs +3 -3
  172. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +660 -660
  173. package/esm2020/lib/components/date-range-picker/date-range-picker.module.mjs +22 -22
  174. package/esm2020/lib/components/date-range-picker/index.mjs +3 -3
  175. package/esm2020/lib/components/expansion/expansion.component.mjs +115 -115
  176. package/esm2020/lib/components/expansion/expansion.module.mjs +20 -20
  177. package/esm2020/lib/components/expansion/index.mjs +3 -3
  178. package/esm2020/lib/components/file-upload/file-upload.component.mjs +294 -294
  179. package/esm2020/lib/components/file-upload/file-upload.module.mjs +37 -37
  180. package/esm2020/lib/components/file-upload/index.mjs +3 -3
  181. package/esm2020/lib/components/icon/icon-add-plus.component.mjs +15 -15
  182. package/esm2020/lib/components/icon/icon-address-book.component.mjs +15 -15
  183. package/esm2020/lib/components/icon/icon-arrow-down.component.mjs +15 -15
  184. package/esm2020/lib/components/icon/icon-arrow-left.component.mjs +15 -15
  185. package/esm2020/lib/components/icon/icon-arrow-line-right.component.mjs +15 -15
  186. package/esm2020/lib/components/icon/icon-arrow-right.component.mjs +15 -15
  187. package/esm2020/lib/components/icon/icon-arrow-up.component.mjs +15 -15
  188. package/esm2020/lib/components/icon/icon-arrows.component.mjs +15 -15
  189. package/esm2020/lib/components/icon/icon-auction.component.mjs +15 -15
  190. package/esm2020/lib/components/icon/icon-average-tax.component.mjs +15 -0
  191. package/esm2020/lib/components/icon/icon-bank-account.component.mjs +15 -15
  192. package/esm2020/lib/components/icon/icon-bank-agency.component.mjs +15 -0
  193. package/esm2020/lib/components/icon/icon-bank.component.mjs +15 -15
  194. package/esm2020/lib/components/icon/icon-banknote-search.component.mjs +15 -15
  195. package/esm2020/lib/components/icon/icon-bell.component.mjs +15 -15
  196. package/esm2020/lib/components/icon/icon-block.component.mjs +15 -15
  197. package/esm2020/lib/components/icon/icon-book-open-text.component.mjs +15 -15
  198. package/esm2020/lib/components/icon/icon-book.component.mjs +15 -15
  199. package/esm2020/lib/components/icon/icon-box.component.mjs +15 -15
  200. package/esm2020/lib/components/icon/icon-build-approved.component.mjs +15 -15
  201. package/esm2020/lib/components/icon/icon-build-person.component.mjs +15 -15
  202. package/esm2020/lib/components/icon/icon-build-refused.component.mjs +15 -15
  203. package/esm2020/lib/components/icon/icon-build-waiting.component.mjs +15 -15
  204. package/esm2020/lib/components/icon/icon-calendar-box.component.mjs +15 -15
  205. package/esm2020/lib/components/icon/icon-calendar.component.mjs +15 -15
  206. package/esm2020/lib/components/icon/icon-camera.component.mjs +15 -15
  207. package/esm2020/lib/components/icon/icon-card-machine.component.mjs +15 -15
  208. package/esm2020/lib/components/icon/icon-card.component.mjs +15 -15
  209. package/esm2020/lib/components/icon/icon-cash-banknote-invoice.component.mjs +15 -0
  210. package/esm2020/lib/components/icon/icon-chat.component.mjs +15 -15
  211. package/esm2020/lib/components/icon/icon-check-circle-out.component.mjs +15 -15
  212. package/esm2020/lib/components/icon/icon-check-circle.component.mjs +15 -15
  213. package/esm2020/lib/components/icon/icon-check-grey.component.mjs +15 -15
  214. package/esm2020/lib/components/icon/icon-check-white.component.mjs +15 -15
  215. package/esm2020/lib/components/icon/icon-check.component.mjs +15 -15
  216. package/esm2020/lib/components/icon/icon-clipboard.component.mjs +15 -15
  217. package/esm2020/lib/components/icon/icon-clock-closed.component.mjs +15 -15
  218. package/esm2020/lib/components/icon/icon-clock.component.mjs +15 -15
  219. package/esm2020/lib/components/icon/icon-close-circle.component.mjs +15 -15
  220. package/esm2020/lib/components/icon/icon-close.component.mjs +15 -15
  221. package/esm2020/lib/components/icon/icon-cnpj.component.mjs +15 -15
  222. package/esm2020/lib/components/icon/icon-codepen.component.mjs +15 -15
  223. package/esm2020/lib/components/icon/icon-company-name.component.mjs +15 -15
  224. package/esm2020/lib/components/icon/icon-contract-pen.component.mjs +15 -15
  225. package/esm2020/lib/components/icon/icon-contract.component.mjs +15 -15
  226. package/esm2020/lib/components/icon/icon-delete.component.mjs +15 -15
  227. package/esm2020/lib/components/icon/icon-document.component.mjs +15 -15
  228. package/esm2020/lib/components/icon/icon-dollar-sign-circle.component.mjs +15 -15
  229. package/esm2020/lib/components/icon/icon-dollar-sign.component.mjs +15 -15
  230. package/esm2020/lib/components/icon/icon-domain.component.mjs +15 -15
  231. package/esm2020/lib/components/icon/icon-dots-menu.component.mjs +15 -15
  232. package/esm2020/lib/components/icon/icon-double-arrow-left.component.mjs +15 -15
  233. package/esm2020/lib/components/icon/icon-double-arrow-right.component.mjs +15 -15
  234. package/esm2020/lib/components/icon/icon-download.component.mjs +15 -15
  235. package/esm2020/lib/components/icon/icon-drag-drop.component.mjs +15 -15
  236. package/esm2020/lib/components/icon/icon-edit-square.component.mjs +15 -15
  237. package/esm2020/lib/components/icon/icon-edit.component.mjs +15 -15
  238. package/esm2020/lib/components/icon/icon-email-send-fast.component.mjs +15 -15
  239. package/esm2020/lib/components/icon/icon-email.component.mjs +15 -15
  240. package/esm2020/lib/components/icon/icon-empty-doc.component.mjs +15 -15
  241. package/esm2020/lib/components/icon/icon-error.component.mjs +15 -15
  242. package/esm2020/lib/components/icon/icon-eye-closed.component.mjs +15 -15
  243. package/esm2020/lib/components/icon/icon-eye-open.component.mjs +15 -15
  244. package/esm2020/lib/components/icon/icon-filter-add.component.mjs +15 -15
  245. package/esm2020/lib/components/icon/icon-filter.component.mjs +15 -15
  246. package/esm2020/lib/components/icon/icon-grid.component.mjs +15 -15
  247. package/esm2020/lib/components/icon/icon-hands-clap.component.mjs +15 -15
  248. package/esm2020/lib/components/icon/icon-help.component.mjs +15 -15
  249. package/esm2020/lib/components/icon/icon-hexagon.component.mjs +15 -15
  250. package/esm2020/lib/components/icon/icon-home.component.mjs +15 -15
  251. package/esm2020/lib/components/icon/icon-image.component.mjs +15 -15
  252. package/esm2020/lib/components/icon/icon-info.component.mjs +15 -15
  253. package/esm2020/lib/components/icon/icon-invoice.component.mjs +15 -15
  254. package/esm2020/lib/components/icon/icon-invoices-anticipated.component.mjs +15 -15
  255. package/esm2020/lib/components/icon/icon-invoices-approval.component.mjs +15 -15
  256. package/esm2020/lib/components/icon/icon-invoices-refused.component.mjs +15 -15
  257. package/esm2020/lib/components/icon/icon-lighting-circle.component.mjs +15 -15
  258. package/esm2020/lib/components/icon/icon-list.component.mjs +15 -15
  259. package/esm2020/lib/components/icon/icon-location-pin.component.mjs +15 -15
  260. package/esm2020/lib/components/icon/icon-login.component.mjs +15 -15
  261. package/esm2020/lib/components/icon/icon-logout.component.mjs +15 -15
  262. package/esm2020/lib/components/icon/icon-mail-open-document.component.mjs +15 -0
  263. package/esm2020/lib/components/icon/icon-medal.component.mjs +15 -15
  264. package/esm2020/lib/components/icon/icon-menu.component.mjs +15 -15
  265. package/esm2020/lib/components/icon/icon-money-cedule.component.mjs +15 -15
  266. package/esm2020/lib/components/icon/icon-money-discount.component.mjs +15 -0
  267. package/esm2020/lib/components/icon/icon-money-hand.component.mjs +15 -15
  268. package/esm2020/lib/components/icon/icon-money-net.component.mjs +15 -0
  269. package/esm2020/lib/components/icon/icon-money-new.component.mjs +15 -0
  270. package/esm2020/lib/components/icon/icon-money-percent.component.mjs +15 -15
  271. package/esm2020/lib/components/icon/icon-money-refused.component.mjs +15 -15
  272. package/esm2020/lib/components/icon/icon-money-sign.component.mjs +15 -15
  273. package/esm2020/lib/components/icon/icon-money-waiting.component.mjs +15 -15
  274. package/esm2020/lib/components/icon/icon-money.component.mjs +15 -15
  275. package/esm2020/lib/components/icon/icon-more-circle.component.mjs +15 -15
  276. package/esm2020/lib/components/icon/icon-more.component.mjs +15 -15
  277. package/esm2020/lib/components/icon/icon-new-company.component.mjs +15 -15
  278. package/esm2020/lib/components/icon/icon-offered.component.mjs +15 -15
  279. package/esm2020/lib/components/icon/icon-open-external.component.mjs +15 -15
  280. package/esm2020/lib/components/icon/icon-password.component.mjs +15 -15
  281. package/esm2020/lib/components/icon/icon-people.component.mjs +15 -15
  282. package/esm2020/lib/components/icon/icon-percent-box.component.mjs +15 -15
  283. package/esm2020/lib/components/icon/icon-percent.component.mjs +15 -15
  284. package/esm2020/lib/components/icon/icon-person-document.component.mjs +15 -15
  285. package/esm2020/lib/components/icon/icon-person-sad.component.mjs +15 -15
  286. package/esm2020/lib/components/icon/icon-phone-call.component.mjs +15 -15
  287. package/esm2020/lib/components/icon/icon-phone.component.mjs +15 -15
  288. package/esm2020/lib/components/icon/icon-pin-navigation.component.mjs +15 -15
  289. package/esm2020/lib/components/icon/icon-pork.component.mjs +15 -15
  290. package/esm2020/lib/components/icon/icon-radio.component.mjs +15 -15
  291. package/esm2020/lib/components/icon/icon-refresh.component.mjs +15 -15
  292. package/esm2020/lib/components/icon/icon-registration.component.mjs +15 -0
  293. package/esm2020/lib/components/icon/icon-repeat.component.mjs +15 -15
  294. package/esm2020/lib/components/icon/icon-search.component.mjs +15 -15
  295. package/esm2020/lib/components/icon/icon-second-warning.component.mjs +15 -15
  296. package/esm2020/lib/components/icon/icon-settings.component.mjs +15 -15
  297. package/esm2020/lib/components/icon/icon-shield-chekmark.component.mjs +15 -15
  298. package/esm2020/lib/components/icon/icon-star-shining.component.mjs +15 -15
  299. package/esm2020/lib/components/icon/icon-star.component.mjs +15 -15
  300. package/esm2020/lib/components/icon/icon-store.component.mjs +15 -15
  301. package/esm2020/lib/components/icon/icon-target-dart-arrow.component.mjs +15 -15
  302. package/esm2020/lib/components/icon/icon-today.component.mjs +15 -15
  303. package/esm2020/lib/components/icon/icon-trash.component.mjs +15 -15
  304. package/esm2020/lib/components/icon/icon-trophy.component.mjs +15 -15
  305. package/esm2020/lib/components/icon/icon-unfold-more.component.mjs +15 -15
  306. package/esm2020/lib/components/icon/icon-upload.component.mjs +15 -15
  307. package/esm2020/lib/components/icon/icon-user-group.component.mjs +15 -15
  308. package/esm2020/lib/components/icon/icon-user.component.mjs +15 -15
  309. package/esm2020/lib/components/icon/icon-waiting.component.mjs +15 -15
  310. package/esm2020/lib/components/icon/icon-wallet.component.mjs +15 -15
  311. package/esm2020/lib/components/icon/icon-warning.component.mjs +15 -15
  312. package/esm2020/lib/components/icon/icon.component.mjs +1796 -1783
  313. package/esm2020/lib/components/icon/icon.module.mjs +283 -411
  314. package/esm2020/lib/components/icon/index.mjs +135 -122
  315. package/esm2020/lib/components/image-crop/image-crop.component.mjs +516 -516
  316. package/esm2020/lib/components/image-crop/image-crop.module.mjs +41 -41
  317. package/esm2020/lib/components/image-crop/index.mjs +3 -3
  318. package/esm2020/lib/components/index.mjs +20 -20
  319. package/esm2020/lib/components/input/index.mjs +4 -4
  320. package/esm2020/lib/components/input/input-filter.component.mjs +286 -286
  321. package/esm2020/lib/components/input/input.component.mjs +384 -384
  322. package/esm2020/lib/components/input/input.module.mjs +38 -38
  323. package/esm2020/lib/components/input-phone/index.mjs +3 -3
  324. package/esm2020/lib/components/input-phone/input-phone.component.mjs +307 -307
  325. package/esm2020/lib/components/input-phone/input-phone.module.mjs +45 -45
  326. package/esm2020/lib/components/modal/index.mjs +3 -3
  327. package/esm2020/lib/components/modal/modal.component.mjs +236 -236
  328. package/esm2020/lib/components/modal/modal.module.mjs +21 -21
  329. package/esm2020/lib/components/option/index.mjs +3 -3
  330. package/esm2020/lib/components/option/option.component.mjs +131 -131
  331. package/esm2020/lib/components/option/option.module.mjs +29 -29
  332. package/esm2020/lib/components/radiobutton/index.mjs +3 -3
  333. package/esm2020/lib/components/radiobutton/radiobutton.component.mjs +165 -165
  334. package/esm2020/lib/components/radiobutton/radiobutton.module.mjs +36 -36
  335. package/esm2020/lib/components/select/index.mjs +6 -6
  336. package/esm2020/lib/components/select/select-filter.component.mjs +197 -197
  337. package/esm2020/lib/components/select/select-multiple.component.mjs +304 -304
  338. package/esm2020/lib/components/select/select-search.component.mjs +306 -306
  339. package/esm2020/lib/components/select/select.component.mjs +245 -245
  340. package/esm2020/lib/components/select/select.module.mjs +61 -61
  341. package/esm2020/lib/components/stepper/index.mjs +3 -3
  342. package/esm2020/lib/components/stepper/stepper.component.mjs +57 -57
  343. package/esm2020/lib/components/stepper/stepper.module.mjs +20 -20
  344. package/esm2020/lib/components/tab/index.mjs +3 -3
  345. package/esm2020/lib/components/tab/tab.component.mjs +100 -100
  346. package/esm2020/lib/components/tab/tab.module.mjs +21 -21
  347. package/esm2020/lib/components/table/index.mjs +4 -4
  348. package/esm2020/lib/components/table/table-column.component.mjs +34 -34
  349. package/esm2020/lib/components/table/table.component.mjs +267 -267
  350. package/esm2020/lib/components/table/table.module.mjs +23 -23
  351. package/esm2020/lib/components/toggle/index.mjs +3 -3
  352. package/esm2020/lib/components/toggle/toggle.component.mjs +56 -56
  353. package/esm2020/lib/components/toggle/toggle.module.mjs +19 -19
  354. package/esm2020/lib/components/wizard/index.mjs +3 -3
  355. package/esm2020/lib/components/wizard/wizard.component.mjs +61 -61
  356. package/esm2020/lib/components/wizard/wizard.module.mjs +33 -33
  357. package/esm2020/lib/core/index.mjs +4 -4
  358. package/esm2020/lib/core/interfaces/index.mjs +3 -3
  359. package/esm2020/lib/core/interfaces/monkey-modal-settings.mjs +2 -2
  360. package/esm2020/lib/core/interfaces/monkey-style-settings.mjs +2 -2
  361. package/esm2020/lib/core/services/index.mjs +4 -4
  362. package/esm2020/lib/core/services/modal/index.mjs +3 -3
  363. package/esm2020/lib/core/services/modal/monkey-style-guide-modal-fixed.service.mjs +52 -52
  364. package/esm2020/lib/core/services/modal/monkey-style-guide-modal.service.mjs +55 -55
  365. package/esm2020/lib/core/services/monkey-style-guide.service.mjs +17 -17
  366. package/esm2020/lib/core/services/settings/index.mjs +1 -1
  367. package/esm2020/lib/core/services/settings/monkey-style-guide-settings.service.mjs +41 -41
  368. package/esm2020/lib/core/services/settings/monkey-style-guide-theme-settings.service.mjs +80 -80
  369. package/esm2020/lib/core/services/snackbar/index.mjs +1 -1
  370. package/esm2020/lib/core/services/snackbar/mokey-style-guide-snackbar.service.mjs +226 -226
  371. package/esm2020/lib/core/utils/index.mjs +1 -1
  372. package/esm2020/lib/core/utils/utils.mjs +240 -240
  373. package/esm2020/lib/monkey-style-guide.module.mjs +31 -31
  374. package/esm2020/monkey-style-guide.mjs +4 -4
  375. package/esm2020/public-api.mjs +9 -9
  376. package/fesm2015/monkey-style-guide.mjs +9831 -9804
  377. package/fesm2015/monkey-style-guide.mjs.map +1 -1
  378. package/fesm2020/monkey-style-guide.mjs +9820 -9793
  379. package/fesm2020/monkey-style-guide.mjs.map +1 -1
  380. package/lib/components/badge/badge.component.d.ts +8 -8
  381. package/lib/components/badge/badge.module.d.ts +8 -8
  382. package/lib/components/badge/index.d.ts +2 -2
  383. package/lib/components/button/button-avatar.component.d.ts +19 -19
  384. package/lib/components/button/button-dropdown.component.d.ts +23 -23
  385. package/lib/components/button/button.component.d.ts +22 -22
  386. package/lib/components/button/button.module.d.ts +12 -12
  387. package/lib/components/button/index.d.ts +4 -4
  388. package/lib/components/checkbox/checkbox.component.d.ts +32 -32
  389. package/lib/components/checkbox/checkbox.module.d.ts +9 -9
  390. package/lib/components/checkbox/index.d.ts +2 -2
  391. package/lib/components/date-range-picker/date-range-picker.component.d.ts +69 -69
  392. package/lib/components/date-range-picker/date-range-picker.module.d.ts +11 -11
  393. package/lib/components/date-range-picker/index.d.ts +2 -2
  394. package/lib/components/expansion/expansion.component.d.ts +20 -20
  395. package/lib/components/expansion/expansion.module.d.ts +9 -9
  396. package/lib/components/expansion/index.d.ts +2 -2
  397. package/lib/components/file-upload/file-upload.component.d.ts +51 -51
  398. package/lib/components/file-upload/file-upload.module.d.ts +11 -11
  399. package/lib/components/file-upload/index.d.ts +2 -2
  400. package/lib/components/icon/icon-add-plus.component.d.ts +7 -7
  401. package/lib/components/icon/icon-address-book.component.d.ts +7 -7
  402. package/lib/components/icon/icon-arrow-down.component.d.ts +7 -7
  403. package/lib/components/icon/icon-arrow-left.component.d.ts +7 -7
  404. package/lib/components/icon/icon-arrow-line-right.component.d.ts +7 -7
  405. package/lib/components/icon/icon-arrow-right.component.d.ts +7 -7
  406. package/lib/components/icon/icon-arrow-up.component.d.ts +7 -7
  407. package/lib/components/icon/icon-arrows.component.d.ts +7 -7
  408. package/lib/components/icon/icon-auction.component.d.ts +7 -7
  409. package/lib/components/icon/{icon-average-tax.d.ts → icon-average-tax.component.d.ts} +7 -7
  410. package/lib/components/icon/icon-bank-account.component.d.ts +7 -7
  411. package/lib/components/icon/{icon-bank-agency.d.ts → icon-bank-agency.component.d.ts} +7 -7
  412. package/lib/components/icon/icon-bank.component.d.ts +7 -7
  413. package/lib/components/icon/icon-banknote-search.component.d.ts +7 -7
  414. package/lib/components/icon/icon-bell.component.d.ts +7 -7
  415. package/lib/components/icon/icon-block.component.d.ts +7 -7
  416. package/lib/components/icon/icon-book-open-text.component.d.ts +7 -7
  417. package/lib/components/icon/icon-book.component.d.ts +7 -7
  418. package/lib/components/icon/icon-box.component.d.ts +7 -7
  419. package/lib/components/icon/icon-build-approved.component.d.ts +7 -7
  420. package/lib/components/icon/icon-build-person.component.d.ts +7 -7
  421. package/lib/components/icon/icon-build-refused.component.d.ts +7 -7
  422. package/lib/components/icon/icon-build-waiting.component.d.ts +7 -7
  423. package/lib/components/icon/icon-calendar-box.component.d.ts +7 -7
  424. package/lib/components/icon/icon-calendar.component.d.ts +7 -7
  425. package/lib/components/icon/icon-camera.component.d.ts +7 -7
  426. package/lib/components/icon/icon-card-machine.component.d.ts +7 -7
  427. package/lib/components/icon/icon-card.component.d.ts +7 -7
  428. package/lib/components/icon/{icon-cash-banknote-invoice.d.ts → icon-cash-banknote-invoice.component.d.ts} +7 -7
  429. package/lib/components/icon/icon-chat.component.d.ts +7 -7
  430. package/lib/components/icon/icon-check-circle-out.component.d.ts +7 -7
  431. package/lib/components/icon/icon-check-circle.component.d.ts +7 -7
  432. package/lib/components/icon/icon-check-grey.component.d.ts +7 -7
  433. package/lib/components/icon/icon-check-white.component.d.ts +7 -7
  434. package/lib/components/icon/icon-check.component.d.ts +7 -7
  435. package/lib/components/icon/icon-clipboard.component.d.ts +7 -7
  436. package/lib/components/icon/icon-clock-closed.component.d.ts +7 -7
  437. package/lib/components/icon/icon-clock.component.d.ts +7 -7
  438. package/lib/components/icon/icon-close-circle.component.d.ts +7 -7
  439. package/lib/components/icon/icon-close.component.d.ts +7 -7
  440. package/lib/components/icon/icon-cnpj.component.d.ts +7 -7
  441. package/lib/components/icon/icon-codepen.component.d.ts +7 -7
  442. package/lib/components/icon/icon-company-name.component.d.ts +7 -7
  443. package/lib/components/icon/icon-contract-pen.component.d.ts +7 -7
  444. package/lib/components/icon/icon-contract.component.d.ts +7 -7
  445. package/lib/components/icon/icon-delete.component.d.ts +7 -7
  446. package/lib/components/icon/icon-document.component.d.ts +7 -7
  447. package/lib/components/icon/icon-dollar-sign-circle.component.d.ts +7 -7
  448. package/lib/components/icon/icon-dollar-sign.component.d.ts +7 -7
  449. package/lib/components/icon/icon-domain.component.d.ts +7 -7
  450. package/lib/components/icon/icon-dots-menu.component.d.ts +7 -7
  451. package/lib/components/icon/icon-double-arrow-left.component.d.ts +7 -7
  452. package/lib/components/icon/icon-double-arrow-right.component.d.ts +7 -7
  453. package/lib/components/icon/icon-download.component.d.ts +7 -7
  454. package/lib/components/icon/icon-drag-drop.component.d.ts +7 -7
  455. package/lib/components/icon/icon-edit-square.component.d.ts +7 -7
  456. package/lib/components/icon/icon-edit.component.d.ts +7 -7
  457. package/lib/components/icon/icon-email-send-fast.component.d.ts +7 -7
  458. package/lib/components/icon/icon-email.component.d.ts +7 -7
  459. package/lib/components/icon/icon-empty-doc.component.d.ts +7 -7
  460. package/lib/components/icon/icon-error.component.d.ts +7 -7
  461. package/lib/components/icon/icon-eye-closed.component.d.ts +7 -7
  462. package/lib/components/icon/icon-eye-open.component.d.ts +7 -7
  463. package/lib/components/icon/icon-filter-add.component.d.ts +7 -7
  464. package/lib/components/icon/icon-filter.component.d.ts +7 -7
  465. package/lib/components/icon/icon-grid.component.d.ts +7 -7
  466. package/lib/components/icon/icon-hands-clap.component.d.ts +7 -7
  467. package/lib/components/icon/icon-help.component.d.ts +7 -7
  468. package/lib/components/icon/icon-hexagon.component.d.ts +7 -7
  469. package/lib/components/icon/icon-home.component.d.ts +7 -7
  470. package/lib/components/icon/icon-image.component.d.ts +7 -7
  471. package/lib/components/icon/icon-info.component.d.ts +7 -7
  472. package/lib/components/icon/icon-invoice.component.d.ts +7 -7
  473. package/lib/components/icon/icon-invoices-anticipated.component.d.ts +7 -7
  474. package/lib/components/icon/icon-invoices-approval.component.d.ts +7 -7
  475. package/lib/components/icon/icon-invoices-refused.component.d.ts +7 -7
  476. package/lib/components/icon/icon-lighting-circle.component.d.ts +7 -7
  477. package/lib/components/icon/icon-list.component.d.ts +7 -7
  478. package/lib/components/icon/icon-location-pin.component.d.ts +7 -7
  479. package/lib/components/icon/icon-login.component.d.ts +7 -7
  480. package/lib/components/icon/icon-logout.component.d.ts +7 -7
  481. package/lib/components/icon/icon-mail-open-document.component.d.ts +7 -0
  482. package/lib/components/icon/icon-medal.component.d.ts +7 -7
  483. package/lib/components/icon/icon-menu.component.d.ts +7 -7
  484. package/lib/components/icon/icon-money-cedule.component.d.ts +7 -7
  485. package/lib/components/icon/{icon-money-discount.d.ts → icon-money-discount.component.d.ts} +7 -7
  486. package/lib/components/icon/icon-money-hand.component.d.ts +7 -7
  487. package/lib/components/icon/{icon-money-net.d.ts → icon-money-net.component.d.ts} +7 -7
  488. package/lib/components/icon/{icon-money-new.d.ts → icon-money-new.component.d.ts} +7 -7
  489. package/lib/components/icon/icon-money-percent.component.d.ts +7 -7
  490. package/lib/components/icon/icon-money-refused.component.d.ts +7 -7
  491. package/lib/components/icon/icon-money-sign.component.d.ts +7 -7
  492. package/lib/components/icon/icon-money-waiting.component.d.ts +7 -7
  493. package/lib/components/icon/icon-money.component.d.ts +7 -7
  494. package/lib/components/icon/icon-more-circle.component.d.ts +7 -7
  495. package/lib/components/icon/icon-more.component.d.ts +7 -7
  496. package/lib/components/icon/icon-new-company.component.d.ts +7 -7
  497. package/lib/components/icon/icon-offered.component.d.ts +7 -7
  498. package/lib/components/icon/icon-open-external.component.d.ts +7 -7
  499. package/lib/components/icon/icon-password.component.d.ts +7 -7
  500. package/lib/components/icon/icon-people.component.d.ts +7 -7
  501. package/lib/components/icon/icon-percent-box.component.d.ts +7 -7
  502. package/lib/components/icon/icon-percent.component.d.ts +7 -7
  503. package/lib/components/icon/icon-person-document.component.d.ts +7 -7
  504. package/lib/components/icon/icon-person-sad.component.d.ts +7 -7
  505. package/lib/components/icon/icon-phone-call.component.d.ts +7 -7
  506. package/lib/components/icon/icon-phone.component.d.ts +7 -7
  507. package/lib/components/icon/icon-pin-navigation.component.d.ts +7 -7
  508. package/lib/components/icon/icon-pork.component.d.ts +7 -7
  509. package/lib/components/icon/icon-radio.component.d.ts +7 -7
  510. package/lib/components/icon/icon-refresh.component.d.ts +7 -7
  511. package/lib/components/icon/{icon-registration.d.ts → icon-registration.component.d.ts} +7 -7
  512. package/lib/components/icon/icon-repeat.component.d.ts +7 -7
  513. package/lib/components/icon/icon-search.component.d.ts +7 -7
  514. package/lib/components/icon/icon-second-warning.component.d.ts +7 -7
  515. package/lib/components/icon/icon-settings.component.d.ts +7 -7
  516. package/lib/components/icon/icon-shield-chekmark.component.d.ts +7 -7
  517. package/lib/components/icon/icon-star-shining.component.d.ts +7 -7
  518. package/lib/components/icon/icon-star.component.d.ts +7 -7
  519. package/lib/components/icon/icon-store.component.d.ts +7 -7
  520. package/lib/components/icon/icon-target-dart-arrow.component.d.ts +7 -7
  521. package/lib/components/icon/icon-today.component.d.ts +7 -7
  522. package/lib/components/icon/icon-trash.component.d.ts +7 -7
  523. package/lib/components/icon/icon-trophy.component.d.ts +7 -7
  524. package/lib/components/icon/icon-unfold-more.component.d.ts +7 -7
  525. package/lib/components/icon/icon-upload.component.d.ts +7 -7
  526. package/lib/components/icon/icon-user-group.component.d.ts +7 -7
  527. package/lib/components/icon/icon-user.component.d.ts +7 -7
  528. package/lib/components/icon/icon-waiting.component.d.ts +7 -7
  529. package/lib/components/icon/icon-wallet.component.d.ts +7 -7
  530. package/lib/components/icon/icon-warning.component.d.ts +7 -7
  531. package/lib/components/icon/icon.component.d.ts +27 -27
  532. package/lib/components/icon/icon.module.d.ts +139 -138
  533. package/lib/components/icon/index.d.ts +134 -121
  534. package/lib/components/image-crop/image-crop.component.d.ts +77 -77
  535. package/lib/components/image-crop/image-crop.module.d.ts +12 -12
  536. package/lib/components/image-crop/index.d.ts +2 -2
  537. package/lib/components/index.d.ts +19 -19
  538. package/lib/components/input/index.d.ts +3 -3
  539. package/lib/components/input/input-filter.component.d.ts +55 -55
  540. package/lib/components/input/input.component.d.ts +64 -64
  541. package/lib/components/input/input.module.d.ts +12 -12
  542. package/lib/components/input-phone/index.d.ts +2 -2
  543. package/lib/components/input-phone/input-phone.component.d.ts +62 -62
  544. package/lib/components/input-phone/input-phone.module.d.ts +13 -13
  545. package/lib/components/modal/index.d.ts +2 -2
  546. package/lib/components/modal/modal.component.d.ts +24 -24
  547. package/lib/components/modal/modal.module.d.ts +10 -10
  548. package/lib/components/option/index.d.ts +2 -2
  549. package/lib/components/option/option.component.d.ts +22 -22
  550. package/lib/components/option/option.module.d.ts +8 -8
  551. package/lib/components/radiobutton/index.d.ts +2 -2
  552. package/lib/components/radiobutton/radiobutton.component.d.ts +39 -39
  553. package/lib/components/radiobutton/radiobutton.module.d.ts +9 -9
  554. package/lib/components/select/index.d.ts +5 -5
  555. package/lib/components/select/select-filter.component.d.ts +41 -41
  556. package/lib/components/select/select-multiple.component.d.ts +48 -48
  557. package/lib/components/select/select-search.component.d.ts +56 -56
  558. package/lib/components/select/select.component.d.ts +48 -48
  559. package/lib/components/select/select.module.d.ts +15 -15
  560. package/lib/components/stepper/index.d.ts +2 -2
  561. package/lib/components/stepper/stepper.component.d.ts +18 -18
  562. package/lib/components/stepper/stepper.module.d.ts +9 -9
  563. package/lib/components/tab/index.d.ts +2 -2
  564. package/lib/components/tab/tab.component.d.ts +24 -24
  565. package/lib/components/tab/tab.module.d.ts +10 -10
  566. package/lib/components/table/index.d.ts +3 -3
  567. package/lib/components/table/table-column.component.d.ts +5 -5
  568. package/lib/components/table/table.component.d.ts +59 -59
  569. package/lib/components/table/table.module.d.ts +12 -12
  570. package/lib/components/toggle/index.d.ts +2 -2
  571. package/lib/components/toggle/toggle.component.d.ts +18 -18
  572. package/lib/components/toggle/toggle.module.d.ts +8 -8
  573. package/lib/components/wizard/index.d.ts +2 -2
  574. package/lib/components/wizard/wizard.component.d.ts +18 -18
  575. package/lib/components/wizard/wizard.module.d.ts +9 -9
  576. package/lib/core/index.d.ts +3 -3
  577. package/lib/core/interfaces/index.d.ts +2 -2
  578. package/lib/core/interfaces/monkey-modal-settings.d.ts +58 -58
  579. package/lib/core/interfaces/monkey-style-settings.d.ts +59 -59
  580. package/lib/core/services/index.d.ts +3 -3
  581. package/lib/core/services/modal/index.d.ts +2 -2
  582. package/lib/core/services/modal/monkey-style-guide-modal-fixed.service.d.ts +16 -16
  583. package/lib/core/services/modal/monkey-style-guide-modal.service.d.ts +18 -18
  584. package/lib/core/services/monkey-style-guide.service.d.ts +10 -10
  585. package/lib/core/services/settings/index.d.ts +1 -1
  586. package/lib/core/services/settings/monkey-style-guide-settings.service.d.ts +15 -15
  587. package/lib/core/services/settings/monkey-style-guide-theme-settings.service.d.ts +12 -12
  588. package/lib/core/services/snackbar/index.d.ts +1 -1
  589. package/lib/core/services/snackbar/mokey-style-guide-snackbar.service.d.ts +58 -58
  590. package/lib/core/utils/index.d.ts +1 -1
  591. package/lib/core/utils/utils.d.ts +29 -29
  592. package/lib/monkey-style-guide.module.d.ts +8 -8
  593. package/monkey-style-guide-2.0.178.tgz +0 -0
  594. package/monkey-style-guide.d.ts +5 -5
  595. package/package.json +1 -1
  596. package/public-api.d.ts +8 -8
  597. package/esm2020/lib/components/icon/icon-average-tax.mjs +0 -15
  598. package/esm2020/lib/components/icon/icon-bank-agency.mjs +0 -15
  599. package/esm2020/lib/components/icon/icon-cash-banknote-invoice.mjs +0 -15
  600. package/esm2020/lib/components/icon/icon-money-discount.mjs +0 -15
  601. package/esm2020/lib/components/icon/icon-money-net.mjs +0 -15
  602. package/esm2020/lib/components/icon/icon-money-new.mjs +0 -15
  603. package/esm2020/lib/components/icon/icon-registration.mjs +0 -15
  604. package/monkey-style-guide-2.0.177.tgz +0 -0
@@ -1,660 +1,660 @@
1
- /**************************
2
- * Copyright Monkey Exchange. All Rights Reserved
3
- * This style guide was developed by Monkey Exchange Team
4
- * MIT Licence
5
- **************************/
6
- import { CurrencyPipe } from '@angular/common';
7
- import { Component, ViewEncapsulation, forwardRef, Output, EventEmitter, Input, } from '@angular/core';
8
- import { NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
9
- import { MonkeyUtils } from '../../core/utils';
10
- import * as moment_ from 'moment';
11
- import { Subject } from 'rxjs';
12
- import { takeUntil } from 'rxjs/operators';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/forms";
15
- import * as i2 from "../button/button.component";
16
- import * as i3 from "@angular/common";
17
- const moment = moment_;
18
- export class MonkeyDateRangePickerComponent {
19
- constructor(fb, cdr) {
20
- this.fb = fb;
21
- this.cdr = cdr;
22
- this.helperMessage = '';
23
- this.moveDaysForward = true;
24
- this.onChange = new EventEmitter();
25
- this.today = moment.default().format('YYYY-MM-DD');
26
- this.onModelChange = (value) => { };
27
- this.onModelTouched = (value) => { };
28
- this._dateFirst = moment.default();
29
- this._dateSecond = moment.default().add(1, 'M');
30
- this._id = `mecx-date-range-picker-${MonkeyUtils.getRandomString(10)}`;
31
- this._daysArrFirst = [];
32
- this._daysArrSecond = [];
33
- this._disabled = false;
34
- this._minDate = null;
35
- this._startDate = null;
36
- this._endDate = null;
37
- this.unsubscribeAll = new Subject();
38
- this.initDateRange();
39
- }
40
- set minDate(value) {
41
- this._minDate = !this.moveDaysForward ? null : value;
42
- }
43
- initDateRange() {
44
- this._dateForm = this.fb.group({
45
- startDate: [null, Validators.required],
46
- endDate: [null, Validators.required],
47
- });
48
- this._dateForm?.valueChanges?.pipe(takeUntil(this.unsubscribeAll))?.subscribe((values) => {
49
- const { startDate, endDate } = values;
50
- this._startDate = startDate && moment.default(startDate);
51
- this._endDate = endDate && moment.default(endDate);
52
- });
53
- }
54
- createCalendar(month) {
55
- let firstDay = moment.default(month).startOf('M');
56
- let lastDay = moment.default(month).endOf('M');
57
- let days = Array.apply(null, { length: month.daysInMonth() })
58
- .map(Number.call, Number)
59
- .map((n) => {
60
- return moment.default(firstDay).add(n, 'd');
61
- });
62
- let n = 0;
63
- while (n < firstDay.weekday()) {
64
- days.unshift(null);
65
- n++;
66
- }
67
- n = 0;
68
- while (n < 7 - lastDay.weekday()) {
69
- days.push(null);
70
- n++;
71
- }
72
- let index = 1;
73
- let group = [];
74
- let grouped = [];
75
- Object.entries(days).map(([key, value]) => {
76
- if (index > 7) {
77
- index = 1;
78
- grouped.push(group);
79
- group = [];
80
- }
81
- group.push(value);
82
- index++;
83
- });
84
- grouped.push(group);
85
- return grouped;
86
- }
87
- build() {
88
- this._daysArrFirst = this.createCalendar(this._dateFirst);
89
- this._daysArrSecond = this.createCalendar(this._dateSecond);
90
- }
91
- clearDates() {
92
- if (this._disabled)
93
- return;
94
- this._dateForm.setValue({ startDate: null, endDate: null });
95
- this.writeValue(this._dateForm.value);
96
- }
97
- navigateToToday() {
98
- this._dateFirst = moment.default();
99
- this._dateSecond = moment.default().add(1, 'M');
100
- this.build();
101
- }
102
- ngOnInit() {
103
- this.build();
104
- }
105
- registerOnChange(fn) {
106
- this.onModelChange = fn;
107
- }
108
- registerOnTouched(fn) {
109
- this.onModelTouched = fn;
110
- }
111
- setDisabledState(isDisabled) {
112
- this._disabled = isDisabled;
113
- }
114
- set value(value) {
115
- if (value &&
116
- Object.prototype.hasOwnProperty.call(value, 'startDate') &&
117
- Object.prototype.hasOwnProperty.call(value, 'endDate')) {
118
- this._dateForm.setValue(value);
119
- this.cdr.detectChanges();
120
- this.onModelChange(this._dateForm.value);
121
- this.onModelTouched(this._dateForm.value);
122
- }
123
- else {
124
- this.clearDates();
125
- }
126
- }
127
- get value() {
128
- return this._dateForm.value;
129
- }
130
- writeValue(value) {
131
- this.value = value;
132
- this.onChange.next(value);
133
- }
134
- nextMonth() {
135
- if (this._disabled)
136
- return;
137
- this._dateFirst.add(1, 'M');
138
- this._dateSecond.add(1, 'M');
139
- this._daysArrFirst = this.createCalendar(this._dateFirst);
140
- this._daysArrSecond = this.createCalendar(this._dateSecond);
141
- }
142
- previousMonth() {
143
- if (this._disabled)
144
- return;
145
- this._dateFirst.subtract(1, 'M');
146
- this._dateSecond.subtract(1, 'M');
147
- this._daysArrFirst = this.createCalendar(this._dateFirst);
148
- this._daysArrSecond = this.createCalendar(this._dateSecond);
149
- }
150
- todayCheck(day) {
151
- if (!day) {
152
- return false;
153
- }
154
- return moment.default().format('L') === day.format('L');
155
- }
156
- isSelected(day) {
157
- if (!day) {
158
- return false;
159
- }
160
- let startDateMoment = moment.default(this._dateForm.value.startDate, 'YYYY-MM-DD');
161
- let endDateMoment = moment.default(this._dateForm.value.endDate, 'YYYY-MM-DD');
162
- if (this._dateForm.valid) {
163
- return startDateMoment.isSameOrBefore(day) && endDateMoment.isSameOrAfter(day);
164
- }
165
- if (this._dateForm.get('startDate').valid) {
166
- return startDateMoment.isSame(day);
167
- }
168
- }
169
- isDisabled(day) {
170
- const { _minDate } = this;
171
- if (_minDate) {
172
- const firstDay = moment.default(_minDate);
173
- return day.isBefore(firstDay.subtract(1, 'day'));
174
- }
175
- return false;
176
- }
177
- isFirstSelected(day) {
178
- const { _dateForm } = this;
179
- const { startDate } = _dateForm.value;
180
- return day?.isSame(startDate);
181
- }
182
- isLastSelected(day) {
183
- const { _dateForm } = this;
184
- const { endDate } = _dateForm.value;
185
- return day?.isSame(endDate);
186
- }
187
- selectedDate(day) {
188
- if (this._disabled)
189
- return;
190
- const { _dateForm, _minDate } = this;
191
- let dayFormatted = day.format('YYYY-MM-DD');
192
- if (_minDate) {
193
- const firstDay = moment.default(_minDate);
194
- if (day.isBefore(firstDay.subtract(1, 'day')))
195
- return;
196
- }
197
- if (_dateForm.valid) {
198
- this.clearDates();
199
- }
200
- let { startDate, endDate } = _dateForm.value;
201
- if (startDate) {
202
- if (moment.default(startDate).isAfter(moment.default(dayFormatted))) {
203
- endDate = startDate;
204
- startDate = dayFormatted;
205
- }
206
- else {
207
- endDate = dayFormatted;
208
- }
209
- }
210
- else
211
- startDate = dayFormatted;
212
- if (startDate) {
213
- _dateForm.get('startDate').patchValue(startDate);
214
- }
215
- if (endDate) {
216
- _dateForm.get('endDate').patchValue(endDate);
217
- }
218
- this.writeValue(_dateForm.value);
219
- }
220
- selectRangeOfDays(days) {
221
- if (this._disabled)
222
- return;
223
- const { _dateForm, _minDate, today, moveDaysForward } = this;
224
- const { startDate } = _dateForm.value;
225
- const firstDay = moment.default(startDate || _minDate || today).format('YYYY-MM-DD');
226
- const method = moveDaysForward ? 'add' : 'subtract';
227
- const lastDay = moment.default(firstDay)[method](days, 'day').format('YYYY-MM-DD');
228
- if (moveDaysForward) {
229
- _dateForm.get('startDate').patchValue(firstDay);
230
- _dateForm.get('endDate').patchValue(lastDay);
231
- }
232
- else {
233
- _dateForm.get('startDate').patchValue(lastDay);
234
- _dateForm.get('endDate').patchValue(firstDay);
235
- }
236
- this.writeValue(_dateForm.value);
237
- }
238
- ngOnDestroy() {
239
- this.unsubscribeAll.next();
240
- this.unsubscribeAll.complete();
241
- }
242
- }
243
- MonkeyDateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MonkeyDateRangePickerComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
244
- MonkeyDateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MonkeyDateRangePickerComponent, selector: "monkey-date-range-picker", inputs: { label: "label", helperMessage: "helperMessage", i18n: "i18n", infoMessage: "infoMessage", errorMessage: "errorMessage", moveDaysForward: "moveDaysForward", minDate: "minDate", value: "value" }, outputs: { onChange: "onChange" }, providers: [
245
- {
246
- provide: NG_VALUE_ACCESSOR,
247
- useExisting: forwardRef(() => MonkeyDateRangePickerComponent),
248
- multi: true,
249
- },
250
- CurrencyPipe,
251
- ], ngImport: i0, template: `
252
- <mecx-date-range-picker-group [ngClass]="{ disabled: _disabled }" [id]="_id">
253
- <mecx-date-range-picker-group-header>
254
- <label>
255
- {{ label }}
256
- </label>
257
- <helper>
258
- {{ helperMessage }}
259
- </helper>
260
- </mecx-date-range-picker-group-header>
261
- <mecx-date-range-picker-selected-dates>
262
- <div class="from"
263
- [class.actual]="!_startDate">
264
- <span class="title">
265
- {{ i18n?.from }}
266
- </span>
267
- <span class="data">
268
- <ng-container *ngIf="_startDate; else select">
269
- {{ _startDate?.format('DD') }}
270
- {{ i18n?.of }}
271
- {{ i18n?.months?.[_startDate.format('M')] }},
272
- {{ _startDate.format('YYYY') }}
273
- </ng-container>
274
- </span>
275
- </div>
276
- <div class="to" [class.actual]="_startDate">
277
- <span class="title">
278
- {{ i18n?.to }}
279
- </span>
280
- <span class="data">
281
- <ng-container *ngIf="_endDate; else select">
282
- {{ _endDate.format('DD') }}
283
- {{ i18n?.of }}
284
- {{ i18n?.months?.[_endDate.format('M')] }},
285
- {{ _endDate.format('YYYY') }}
286
- </ng-container>
287
- </span>
288
- </div>
289
- <ng-template #select>
290
- {{ i18n?.select }}
291
- </ng-template>
292
- </mecx-date-range-picker-selected-dates>
293
- <mecx-date-range-picker-group-body>
294
- <mecx-date-range-picker class="first-date-range">
295
- <mecx-date-range-picker-header>
296
- <div class="calendar-title">
297
- <monkey-button
298
- class="calendar-previous"
299
- color="theme"
300
- icon="arrow-left-16"
301
- type="tertiary"
302
- (click)="previousMonth()"
303
- size="sm"
304
- [disabled]="_disabled"
305
- >
306
- </monkey-button>
307
- <div class="month-year-title">
308
- {{ i18n?.months?.[_dateFirst.format('M')] }}
309
- {{ _dateFirst.format('YYYY') }}
310
- </div>
311
- <monkey-button
312
- class="calendar-next"
313
- color="theme"
314
- icon="arrow-right-16"
315
- type="tertiary"
316
- (click)="nextMonth()"
317
- size="sm"
318
- [disabled]="_disabled"
319
- >
320
- </monkey-button>
321
- </div>
322
- <div class="week">
323
- <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
324
- {{ i18n?.days?.[day]}}
325
- </span>
326
- </div>
327
- </mecx-date-range-picker-header>
328
- <mecx-date-range-picker-body>
329
- <div class="month-week" *ngFor="let week of _daysArrFirst">
330
- <div
331
- class="month-day"
332
- (click)="selectedDate(day)"
333
- [ngClass]="{
334
- inactive: !day || isDisabled(day),
335
- selected: isSelected(day),
336
- today: todayCheck(day),
337
- 'first-selected': isFirstSelected(day),
338
- 'last-selected': isLastSelected(day)
339
- }"
340
- *ngFor="let day of week"
341
- #divOne
342
- >
343
- {{ day?.date() }}
344
- </div>
345
- </div>
346
- </mecx-date-range-picker-body>
347
- </mecx-date-range-picker>
348
-
349
- <mecx-date-range-picker class="second-date-range">
350
- <mecx-date-range-picker-header>
351
- <div class="calendar-title">
352
- <div class="month-year-title">
353
- {{ i18n?.months?.[_dateSecond.format('M')] }}
354
- {{ _dateSecond.format('YYYY') }}
355
- </div>
356
- <monkey-button
357
- class="calendar-previous"
358
- color="theme"
359
- icon="arrow-right-16"
360
- type="tertiary"
361
- (click)="nextMonth()"
362
- size="sm"
363
- [disabled]="_disabled"
364
- >
365
- </monkey-button>
366
- </div>
367
- <div class="week">
368
- <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
369
- {{ i18n?.days?.[day]}}
370
- </span>
371
- </div>
372
- </mecx-date-range-picker-header>
373
- <mecx-date-range-picker-body>
374
- <div class="month-week" *ngFor="let week of _daysArrSecond">
375
- <div
376
- class="month-day"
377
- (click)="selectedDate(day)"
378
- [ngClass]="{
379
- inactive: !day || isDisabled(day),
380
- selected: isSelected(day),
381
- today: todayCheck(day),
382
- 'first-selected': isFirstSelected(day),
383
- 'last-selected': isLastSelected(day)
384
- }"
385
- *ngFor="let day of week"
386
- >
387
- {{ day?.date() }}
388
- </div>
389
- </div>
390
- </mecx-date-range-picker-body>
391
- </mecx-date-range-picker>
392
- </mecx-date-range-picker-group-body>
393
- <mecx-date-range-picker-group-info>
394
- <info>
395
- {{ infoMessage }}
396
- </info>
397
- <error>
398
- {{ errorMessage }}
399
- </error>
400
- </mecx-date-range-picker-group-info>
401
- <mecx-date-range-picker-group-action [class.error]="errorMessage?.trim()">
402
- <div class="action-days">
403
- <monkey-button
404
- color="theme"
405
- type="secondary"
406
- (click)="selectRangeOfDays(30)"
407
- [disabled]="_disabled"
408
- >
409
- {{ i18n?.actions?.['30'] }}
410
- </monkey-button>
411
- <monkey-button
412
- color="theme"
413
- type="secondary"
414
- (click)="selectRangeOfDays(60)"
415
- [disabled]="_disabled"
416
- >
417
- {{ i18n?.actions?.['60'] }}
418
- </monkey-button>
419
- <monkey-button
420
- color="theme"
421
- type="secondary"
422
- (click)="selectRangeOfDays(90)"
423
- [disabled]="_disabled"
424
- >
425
- {{ i18n?.actions?.['90'] }}
426
- </monkey-button>
427
- </div>
428
- <monkey-button
429
- color="theme"
430
- type="primary"
431
- (click)="navigateToToday()"
432
- [disabled]="_disabled"
433
- >
434
- {{ i18n?.today }}
435
- </monkey-button>
436
- </mecx-date-range-picker-group-action>
437
- </mecx-date-range-picker-group>
438
- `, isInline: true, components: [{ type: i2.MonkeyButtonComponent, selector: "monkey-button", inputs: ["label", "icon", "iconPosition", "type", "color", "disabled", "size"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MonkeyDateRangePickerComponent, decorators: [{
440
- type: Component,
441
- args: [{
442
- selector: 'monkey-date-range-picker',
443
- template: `
444
- <mecx-date-range-picker-group [ngClass]="{ disabled: _disabled }" [id]="_id">
445
- <mecx-date-range-picker-group-header>
446
- <label>
447
- {{ label }}
448
- </label>
449
- <helper>
450
- {{ helperMessage }}
451
- </helper>
452
- </mecx-date-range-picker-group-header>
453
- <mecx-date-range-picker-selected-dates>
454
- <div class="from"
455
- [class.actual]="!_startDate">
456
- <span class="title">
457
- {{ i18n?.from }}
458
- </span>
459
- <span class="data">
460
- <ng-container *ngIf="_startDate; else select">
461
- {{ _startDate?.format('DD') }}
462
- {{ i18n?.of }}
463
- {{ i18n?.months?.[_startDate.format('M')] }},
464
- {{ _startDate.format('YYYY') }}
465
- </ng-container>
466
- </span>
467
- </div>
468
- <div class="to" [class.actual]="_startDate">
469
- <span class="title">
470
- {{ i18n?.to }}
471
- </span>
472
- <span class="data">
473
- <ng-container *ngIf="_endDate; else select">
474
- {{ _endDate.format('DD') }}
475
- {{ i18n?.of }}
476
- {{ i18n?.months?.[_endDate.format('M')] }},
477
- {{ _endDate.format('YYYY') }}
478
- </ng-container>
479
- </span>
480
- </div>
481
- <ng-template #select>
482
- {{ i18n?.select }}
483
- </ng-template>
484
- </mecx-date-range-picker-selected-dates>
485
- <mecx-date-range-picker-group-body>
486
- <mecx-date-range-picker class="first-date-range">
487
- <mecx-date-range-picker-header>
488
- <div class="calendar-title">
489
- <monkey-button
490
- class="calendar-previous"
491
- color="theme"
492
- icon="arrow-left-16"
493
- type="tertiary"
494
- (click)="previousMonth()"
495
- size="sm"
496
- [disabled]="_disabled"
497
- >
498
- </monkey-button>
499
- <div class="month-year-title">
500
- {{ i18n?.months?.[_dateFirst.format('M')] }}
501
- {{ _dateFirst.format('YYYY') }}
502
- </div>
503
- <monkey-button
504
- class="calendar-next"
505
- color="theme"
506
- icon="arrow-right-16"
507
- type="tertiary"
508
- (click)="nextMonth()"
509
- size="sm"
510
- [disabled]="_disabled"
511
- >
512
- </monkey-button>
513
- </div>
514
- <div class="week">
515
- <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
516
- {{ i18n?.days?.[day]}}
517
- </span>
518
- </div>
519
- </mecx-date-range-picker-header>
520
- <mecx-date-range-picker-body>
521
- <div class="month-week" *ngFor="let week of _daysArrFirst">
522
- <div
523
- class="month-day"
524
- (click)="selectedDate(day)"
525
- [ngClass]="{
526
- inactive: !day || isDisabled(day),
527
- selected: isSelected(day),
528
- today: todayCheck(day),
529
- 'first-selected': isFirstSelected(day),
530
- 'last-selected': isLastSelected(day)
531
- }"
532
- *ngFor="let day of week"
533
- #divOne
534
- >
535
- {{ day?.date() }}
536
- </div>
537
- </div>
538
- </mecx-date-range-picker-body>
539
- </mecx-date-range-picker>
540
-
541
- <mecx-date-range-picker class="second-date-range">
542
- <mecx-date-range-picker-header>
543
- <div class="calendar-title">
544
- <div class="month-year-title">
545
- {{ i18n?.months?.[_dateSecond.format('M')] }}
546
- {{ _dateSecond.format('YYYY') }}
547
- </div>
548
- <monkey-button
549
- class="calendar-previous"
550
- color="theme"
551
- icon="arrow-right-16"
552
- type="tertiary"
553
- (click)="nextMonth()"
554
- size="sm"
555
- [disabled]="_disabled"
556
- >
557
- </monkey-button>
558
- </div>
559
- <div class="week">
560
- <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
561
- {{ i18n?.days?.[day]}}
562
- </span>
563
- </div>
564
- </mecx-date-range-picker-header>
565
- <mecx-date-range-picker-body>
566
- <div class="month-week" *ngFor="let week of _daysArrSecond">
567
- <div
568
- class="month-day"
569
- (click)="selectedDate(day)"
570
- [ngClass]="{
571
- inactive: !day || isDisabled(day),
572
- selected: isSelected(day),
573
- today: todayCheck(day),
574
- 'first-selected': isFirstSelected(day),
575
- 'last-selected': isLastSelected(day)
576
- }"
577
- *ngFor="let day of week"
578
- >
579
- {{ day?.date() }}
580
- </div>
581
- </div>
582
- </mecx-date-range-picker-body>
583
- </mecx-date-range-picker>
584
- </mecx-date-range-picker-group-body>
585
- <mecx-date-range-picker-group-info>
586
- <info>
587
- {{ infoMessage }}
588
- </info>
589
- <error>
590
- {{ errorMessage }}
591
- </error>
592
- </mecx-date-range-picker-group-info>
593
- <mecx-date-range-picker-group-action [class.error]="errorMessage?.trim()">
594
- <div class="action-days">
595
- <monkey-button
596
- color="theme"
597
- type="secondary"
598
- (click)="selectRangeOfDays(30)"
599
- [disabled]="_disabled"
600
- >
601
- {{ i18n?.actions?.['30'] }}
602
- </monkey-button>
603
- <monkey-button
604
- color="theme"
605
- type="secondary"
606
- (click)="selectRangeOfDays(60)"
607
- [disabled]="_disabled"
608
- >
609
- {{ i18n?.actions?.['60'] }}
610
- </monkey-button>
611
- <monkey-button
612
- color="theme"
613
- type="secondary"
614
- (click)="selectRangeOfDays(90)"
615
- [disabled]="_disabled"
616
- >
617
- {{ i18n?.actions?.['90'] }}
618
- </monkey-button>
619
- </div>
620
- <monkey-button
621
- color="theme"
622
- type="primary"
623
- (click)="navigateToToday()"
624
- [disabled]="_disabled"
625
- >
626
- {{ i18n?.today }}
627
- </monkey-button>
628
- </mecx-date-range-picker-group-action>
629
- </mecx-date-range-picker-group>
630
- `,
631
- encapsulation: ViewEncapsulation.None,
632
- providers: [
633
- {
634
- provide: NG_VALUE_ACCESSOR,
635
- useExisting: forwardRef(() => MonkeyDateRangePickerComponent),
636
- multi: true,
637
- },
638
- CurrencyPipe,
639
- ],
640
- }]
641
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
642
- type: Input
643
- }], helperMessage: [{
644
- type: Input
645
- }], i18n: [{
646
- type: Input
647
- }], infoMessage: [{
648
- type: Input
649
- }], errorMessage: [{
650
- type: Input
651
- }], moveDaysForward: [{
652
- type: Input
653
- }], minDate: [{
654
- type: Input
655
- }], onChange: [{
656
- type: Output
657
- }], value: [{
658
- type: Input
659
- }] } });
660
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9ua2V5LXN0eWxlLWd1aWRlL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NEJBSTRCO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBRVYsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLGlCQUFpQixFQUNqQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRTNDLE1BQU0sTUFBTSxHQUFRLE9BQU8sQ0FBQztBQTBNNUIsTUFBTSxPQUFPLDhCQUE4QjtJQTZDekMsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTNDMUQsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFtQjNCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBTXRCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXJDLFVBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLGtCQUFh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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkxUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUM7NEJBQzdELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELFlBQVk7cUJBQ2I7aUJBQ0Y7a0lBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQWdCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRixPQUFPO3NCQURWLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkE0R0gsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAqIENvcHlyaWdodCBNb25rZXkgRXhjaGFuZ2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcclxuICogVGhpcyBzdHlsZSBndWlkZSB3YXMgZGV2ZWxvcGVkIGJ5IE1vbmtleSBFeGNoYW5nZSBUZWFtXHJcbiAqIE1JVCBMaWNlbmNlXHJcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgZm9yd2FyZFJlZixcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNb25rZXlVdGlscyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuY29uc3QgbW9tZW50OiBhbnkgPSBtb21lbnRfO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtb25rZXktZGF0ZS1yYW5nZS1waWNrZXInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cCBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBfZGlzYWJsZWQgfVwiIFtpZF09XCJfaWRcIj5cclxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtaGVhZGVyPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIHt7IGxhYmVsIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGVscGVyPlxyXG4gICAgICAgICAge3sgaGVscGVyTWVzc2FnZSB9fVxyXG4gICAgICAgIDwvaGVscGVyPlxyXG4gICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtaGVhZGVyPlxyXG4gICAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlci1zZWxlY3RlZC1kYXRlcz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnJvbVwiXHJcbiAgICAgICAgW2NsYXNzLmFjdHVhbF09XCIhX3N0YXJ0RGF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBpMThuPy5mcm9tIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zdGFydERhdGU7IGVsc2Ugc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAge3sgX3N0YXJ0RGF0ZT8uZm9ybWF0KCdERCcpIH19XHJcbiAgICAgICAgICAgICAge3sgaTE4bj8ub2YgfX1cclxuICAgICAgICAgICAgICB7eyBpMThuPy5tb250aHM/Lltfc3RhcnREYXRlLmZvcm1hdCgnTScpXSB9fSxcclxuICAgICAgICAgICAgICB7eyBfc3RhcnREYXRlLmZvcm1hdCgnWVlZWScpIH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b1wiIFtjbGFzcy5hY3R1YWxdPVwiX3N0YXJ0RGF0ZVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBpMThuPy50byB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZW5kRGF0ZTsgZWxzZSBzZWxlY3RcIj5cclxuICAgICAgICAgICAgICB7eyBfZW5kRGF0ZS5mb3JtYXQoJ0REJykgfX1cclxuICAgICAgICAgICAgICB7eyBpMThuPy5vZiB9fVxyXG4gICAgICAgICAgICAgIHt7IGkxOG4/Lm1vbnRocz8uW19lbmREYXRlLmZvcm1hdCgnTScpXSB9fSxcclxuICAgICAgICAgICAgICB7eyBfZW5kRGF0ZS5mb3JtYXQoJ1lZWVknKSB9fVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdD5cclxuICAgICAgICAgIHt7IGkxOG4/LnNlbGVjdCB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1zZWxlY3RlZC1kYXRlcz5cclxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtYm9keT5cclxuICAgICAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlciBjbGFzcz1cImZpcnN0LWRhdGUtcmFuZ2VcIj5cclxuICAgICAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPG1vbmtleS1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FsZW5kYXItcHJldmlvdXNcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgICAgICBpY29uPVwiYXJyb3ctbGVmdC0xNlwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGVydGlhcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiXHJcbiAgICAgICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbW9ua2V5LWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgteWVhci10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgaTE4bj8ubW9udGhzPy5bX2RhdGVGaXJzdC5mb3JtYXQoJ00nKV0gfX1cclxuICAgICAgICAgICAgICAgIHt7IF9kYXRlRmlyc3QuZm9ybWF0KCdZWVlZJykgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bW9ua2V5LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1uZXh0XCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwidGhlbWVcIlxyXG4gICAgICAgICAgICAgICAgaWNvbj1cImFycm93LXJpZ2h0LTE2XCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXJ0aWFyeVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxyXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L21vbmtleS1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2Vlay1kYXlcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIFsxLCAyLCAzLCA0LCA1LCA2LCA3XVwiPlxyXG4gICAgICAgICAgICAgICAge3sgaTE4bj8uZGF5cz8uW2RheV19fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyPlxyXG4gICAgICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItYm9keT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXdlZWtcIiAqbmdGb3I9XCJsZXQgd2VlayBvZiBfZGF5c0FyckZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aC1kYXlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkRGF0ZShkYXkpXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgaW5hY3RpdmU6ICFkYXkgfHwgaXNEaXNhYmxlZChkYXkpLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXNTZWxlY3RlZChkYXkpLFxyXG4gICAgICAgICAgICAgICAgICB0b2RheTogdG9kYXlDaGVjayhkYXkpLFxyXG4gICAgICAgICAgICAgICAgICAnZmlyc3Qtc2VsZWN0ZWQnOiBpc0ZpcnN0U2VsZWN0ZWQoZGF5KSxcclxuICAgICAgICAgICAgICAgICAgJ2xhc3Qtc2VsZWN0ZWQnOiBpc0xhc3RTZWxlY3RlZChkYXkpXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla1wiXHJcbiAgICAgICAgICAgICAgICAjZGl2T25lXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgZGF5Py5kYXRlKCkgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItYm9keT5cclxuICAgICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXI+XHJcblxyXG4gICAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyIGNsYXNzPVwic2Vjb25kLWRhdGUtcmFuZ2VcIj5cclxuICAgICAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXllYXItdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7IGkxOG4/Lm1vbnRocz8uW19kYXRlU2Vjb25kLmZvcm1hdCgnTScpXSB9fVxyXG4gICAgICAgICAgICAgICAge3sgX2RhdGVTZWNvbmQuZm9ybWF0KCdZWVlZJykgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bW9ua2V5LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1wcmV2aW91c1wiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInRoZW1lXCJcclxuICAgICAgICAgICAgICAgIGljb249XCJhcnJvdy1yaWdodC0xNlwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGVydGlhcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRNb250aCgpXCJcclxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndlZWstZGF5XCIgKm5nRm9yPVwibGV0IGRheSBvZiBbMSwgMiwgMywgNCwgNSwgNiwgN11cIj5cclxuICAgICAgICAgICAgICAgIHt7IGkxOG4/LmRheXM/LltkYXldfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlcj5cclxuICAgICAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWJvZHk+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC13ZWVrXCIgKm5nRm9yPVwibGV0IHdlZWsgb2YgX2RheXNBcnJTZWNvbmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLWRheVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWREYXRlKGRheSlcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICBpbmFjdGl2ZTogIWRheSB8fCBpc0Rpc2FibGVkKGRheSksXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkKGRheSksXHJcbiAgICAgICAgICAgICAgICAgIHRvZGF5OiB0b2RheUNoZWNrKGRheSksXHJcbiAgICAgICAgICAgICAgICAgICdmaXJzdC1zZWxlY3RlZCc6IGlzRmlyc3RTZWxlY3RlZChkYXkpLFxyXG4gICAgICAgICAgICAgICAgICAnbGFzdC1zZWxlY3RlZCc6IGlzTGFzdFNlbGVjdGVkKGRheSlcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXk/LmRhdGUoKSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ib2R5PlxyXG4gICAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWdyb3VwLWJvZHk+XHJcbiAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWdyb3VwLWluZm8+XHJcbiAgICAgICAgPGluZm8+XHJcbiAgICAgICAgICB7eyBpbmZvTWVzc2FnZSB9fVxyXG4gICAgICAgIDwvaW5mbz5cclxuICAgICAgICA8ZXJyb3I+XHJcbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Vycm9yPlxyXG4gICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtaW5mbz5cclxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtYWN0aW9uIFtjbGFzcy5lcnJvcl09XCJlcnJvck1lc3NhZ2U/LnRyaW0oKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tZGF5c1wiPlxyXG4gICAgICAgICAgPG1vbmtleS1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2VPZkRheXMoMzApXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGkxOG4/LmFjdGlvbnM/LlsnMzAnXSB9fVxyXG4gICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxyXG4gICAgICAgICAgPG1vbmtleS1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2VPZkRheXMoNjApXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGkxOG4/LmFjdGlvbnM/LlsnNjAnXSB9fVxyXG4gICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxyXG4gICAgICAgICAgPG1vbmtleS1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2VPZkRheXMoOTApXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGkxOG4/LmFjdGlvbnM/LlsnOTAnXSB9fVxyXG4gICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtb25rZXktYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInRoZW1lXCJcclxuICAgICAgICAgIHR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvVG9kYXkoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBpMThuPy50b2RheSB9fVxyXG4gICAgICAgIDwvbW9ua2V5LWJ1dHRvbj5cclxuICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWdyb3VwLWFjdGlvbj5cclxuICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cD5cclxuICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNb25rZXlEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBDdXJyZW5jeVBpcGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vbmtleURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBoZWxwZXJNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBpMThuOiB7XHJcbiAgICBtb250aHM6IHtcclxuICAgICAgW3M6IHN0cmluZ106IHN0cmluZztcclxuICAgIH07XHJcbiAgICBkYXlzOiB7XHJcbiAgICAgIFtzOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICB9O1xyXG4gICAgYWN0aW9uczoge1xyXG4gICAgICBbczogc3RyaW5nXTogc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIGZyb206IHN0cmluZztcclxuICAgIHRvOiBzdHJpbmc7XHJcbiAgICBvZjogc3RyaW5nO1xyXG4gICAgdG9kYXk6IHN0cmluZztcclxuICAgIHNlbGVjdDogc3RyaW5nO1xyXG4gIH07XHJcbiAgQElucHV0KCkgaW5mb01lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBtb3ZlRGF5c0ZvcndhcmQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1pbkRhdGUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fbWluRGF0ZSA9ICF0aGlzLm1vdmVEYXlzRm9yd2FyZCA/IG51bGwgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIHRvZGF5ID0gbW9tZW50LmRlZmF1bHQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICBwcml2YXRlIG9uTW9kZWxDaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge307XHJcbiAgcHJpdmF0ZSBvbk1vZGVsVG91Y2hlZCA9ICh2YWx1ZTogYW55KSA9PiB7fTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XHJcblxyXG4gIHB1YmxpYyBfZGF0ZUZpcnN0ID0gbW9tZW50LmRlZmF1bHQoKTtcclxuICBwdWJsaWMgX2RhdGVTZWNvbmQgPSBtb21lbnQuZGVmYXVsdCgpLmFkZCgxLCAnTScpO1xyXG4gIHB1YmxpYyBfaWQ6IHN0cmluZyA9IGBtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLSR7TW9ua2V5VXRpbHMuZ2V0UmFuZG9tU3RyaW5nKDEwKX1gO1xyXG4gIHB1YmxpYyBfZGF5c0FyckZpcnN0ID0gW107XHJcbiAgcHVibGljIF9kYXlzQXJyU2Vjb25kID0gW107XHJcbiAgcHVibGljIF9kYXRlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgX21pbkRhdGUgPSBudWxsO1xyXG4gIHB1YmxpYyBfc3RhcnREYXRlID0gbnVsbDtcclxuICBwdWJsaWMgX2VuZERhdGUgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHRoaXMuaW5pdERhdGVSYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0ZVJhbmdlKCkge1xyXG4gICAgdGhpcy5fZGF0ZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc3RhcnREYXRlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGVuZERhdGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZGF0ZUZvcm0/LnZhbHVlQ2hhbmdlcz8ucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCkpPy5zdWJzY3JpYmUoKHZhbHVlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSB2YWx1ZXM7XHJcbiAgICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSAmJiBtb21lbnQuZGVmYXVsdChzdGFydERhdGUpXHJcbiAgICAgIHRoaXMuX2VuZERhdGUgPSBlbmREYXRlICYmIG1vbWVudC5kZWZhdWx0KGVuZERhdGUpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2FsZW5kYXIobW9udGg6IGFueSkge1xyXG4gICAgbGV0IGZpcnN0RGF5ID0gbW9tZW50LmRlZmF1bHQobW9udGgpLnN0YXJ0T2YoJ00nKTtcclxuICAgIGxldCBsYXN0RGF5ID0gbW9tZW50LmRlZmF1bHQobW9udGgpLmVuZE9mKCdNJyk7XHJcbiAgICBsZXQgZGF5cyA9IEFycmF5LmFwcGx5KG51bGwsIHsgbGVuZ3RoOiBtb250aC5kYXlzSW5Nb250aCgpIH0pXHJcbiAgICAgIC5tYXAoTnVtYmVyLmNhbGwsIE51bWJlcilcclxuICAgICAgLm1hcCgobjogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudC5kZWZhdWx0KGZpcnN0RGF5KS5hZGQobiwgJ2QnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IG4gPSAwO1xyXG4gICAgd2hpbGUgKG4gPCBmaXJzdERheS53ZWVrZGF5KCkpIHtcclxuICAgICAgZGF5cy51bnNoaWZ0KG51bGwpO1xyXG4gICAgICBuKys7XHJcbiAgICB9XHJcbiAgICBuID0gMDtcclxuICAgIHdoaWxlIChuIDwgNyAtIGxhc3REYXkud2Vla2RheSgpKSB7XHJcbiAgICAgIGRheXMucHVzaChudWxsKTtcclxuICAgICAgbisrO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpbmRleCA9IDE7XHJcbiAgICBsZXQgZ3JvdXAgPSBbXTtcclxuICAgIGxldCBncm91cGVkID0gW107XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoZGF5cykubWFwKChba2V5LCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+IHtcclxuICAgICAgaWYgKGluZGV4ID4gNykge1xyXG4gICAgICAgIGluZGV4ID0gMTtcclxuICAgICAgICBncm91cGVkLnB1c2goZ3JvdXApO1xyXG4gICAgICAgIGdyb3VwID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGdyb3VwLnB1c2godmFsdWUpO1xyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfSk7XHJcbiAgICBncm91cGVkLnB1c2goZ3JvdXApO1xyXG5cclxuICAgIHJldHVybiBncm91cGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZCgpIHtcclxuICAgIHRoaXMuX2RheXNBcnJGaXJzdCA9IHRoaXMuY3JlYXRlQ2FsZW5kYXIodGhpcy5fZGF0ZUZpcnN0KTtcclxuICAgIHRoaXMuX2RheXNBcnJTZWNvbmQgPSB0aGlzLmNyZWF0ZUNhbGVuZGFyKHRoaXMuX2RhdGVTZWNvbmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckRhdGVzKCkge1xyXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSByZXR1cm47XHJcbiAgICB0aGlzLl9kYXRlRm9ybS5zZXRWYWx1ZSh7IHN0YXJ0RGF0ZTogbnVsbCwgZW5kRGF0ZTogbnVsbCB9KTtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9kYXRlRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvVG9kYXkoKSB7XHJcbiAgICB0aGlzLl9kYXRlRmlyc3QgPSBtb21lbnQuZGVmYXVsdCgpO1xyXG4gICAgdGhpcy5fZGF0ZVNlY29uZCA9IG1vbWVudC5kZWZhdWx0KCkuYWRkKDEsICdNJyk7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHZhbHVlICYmXHJcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ3N0YXJ0RGF0ZScpICYmXHJcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2VuZERhdGUnKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2RhdGVGb3JtLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5fZGF0ZUZvcm0udmFsdWUpO1xyXG4gICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKHRoaXMuX2RhdGVGb3JtLnZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xlYXJEYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZUZvcm0udmFsdWU7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMub25DaGFuZ2UubmV4dCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuZXh0TW9udGgoKSB7XHJcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuX2RhdGVGaXJzdC5hZGQoMSwgJ00nKTtcclxuICAgIHRoaXMuX2RhdGVTZWNvbmQuYWRkKDEsICdNJyk7XHJcblxyXG4gICAgdGhpcy5fZGF5c0FyckZpcnN0ID0gdGhpcy5jcmVhdGVDYWxlbmRhcih0aGlzLl9kYXRlRmlyc3QpO1xyXG4gICAgdGhpcy5fZGF5c0FyclNlY29uZCA9IHRoaXMuY3JlYXRlQ2FsZW5kYXIodGhpcy5fZGF0ZVNlY29uZCk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91c01vbnRoKCkge1xyXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSByZXR1cm47XHJcbiAgICB0aGlzLl9kYXRlRmlyc3Quc3VidHJhY3QoMSwgJ00nKTtcclxuICAgIHRoaXMuX2RhdGVTZWNvbmQuc3VidHJhY3QoMSwgJ00nKTtcclxuXHJcbiAgICB0aGlzLl9kYXlzQXJyRmlyc3QgPSB0aGlzLmNyZWF0ZUNhbGVuZGFyKHRoaXMuX2RhdGVGaXJzdCk7XHJcbiAgICB0aGlzLl9kYXlzQXJyU2Vjb25kID0gdGhpcy5jcmVhdGVDYWxlbmRhcih0aGlzLl9kYXRlU2Vjb25kKTtcclxuICB9XHJcblxyXG4gIHRvZGF5Q2hlY2soZGF5OiBhbnkpIHtcclxuICAgIGlmICghZGF5KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbW9tZW50LmRlZmF1bHQoKS5mb3JtYXQoJ0wnKSA9PT0gZGF5LmZvcm1hdCgnTCcpO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZChkYXk6IGFueSkge1xyXG4gICAgaWYgKCFkYXkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzdGFydERhdGVNb21lbnQgPSBtb21lbnQuZGVmYXVsdCh0aGlzLl9kYXRlRm9ybS52YWx1ZS5zdGFydERhdGUsICdZWVlZLU1NLUREJyk7XHJcbiAgICBsZXQgZW5kRGF0ZU1vbWVudCA9IG1vbWVudC5kZWZhdWx0KHRoaXMuX2RhdGVGb3JtLnZhbHVlLmVuZERhdGUsICdZWVlZLU1NLUREJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2RhdGVGb3JtLnZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBzdGFydERhdGVNb21lbnQuaXNTYW1lT3JCZWZvcmUoZGF5KSAmJiBlbmREYXRlTW9tZW50LmlzU2FtZU9yQWZ0ZXIoZGF5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGF0ZUZvcm0uZ2V0KCdzdGFydERhdGUnKS52YWxpZCkge1xyXG4gICAgICByZXR1cm4gc3RhcnREYXRlTW9tZW50LmlzU2FtZShkYXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZChkYXkpIHtcclxuICAgIGNvbnN0IHsgX21pbkRhdGUgfSA9IHRoaXM7XHJcbiAgICBpZiAoX21pbkRhdGUpIHtcclxuICAgICAgY29uc3QgZmlyc3REYXkgPSBtb21lbnQuZGVmYXVsdChfbWluRGF0ZSk7XHJcbiAgICAgIHJldHVybiBkYXkuaXNCZWZvcmUoZmlyc3REYXkuc3VidHJhY3QoMSwgJ2RheScpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RTZWxlY3RlZChkYXkpIHtcclxuICAgIGNvbnN0IHsgX2RhdGVGb3JtIH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBzdGFydERhdGUgfSA9IF9kYXRlRm9ybS52YWx1ZTtcclxuICAgIHJldHVybiBkYXk/LmlzU2FtZShzdGFydERhdGUpO1xyXG4gIH1cclxuXHJcbiAgaXNMYXN0U2VsZWN0ZWQoZGF5OiBhbnkpIHtcclxuICAgIGNvbnN0IHsgX2RhdGVGb3JtIH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBlbmREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XHJcbiAgICByZXR1cm4gZGF5Py5pc1NhbWUoZW5kRGF0ZSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZERhdGUoZGF5OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgeyBfZGF0ZUZvcm0sIF9taW5EYXRlIH0gPSB0aGlzO1xyXG4gICAgbGV0IGRheUZvcm1hdHRlZCA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuXHJcbiAgICBpZiAoX21pbkRhdGUpIHtcclxuICAgICAgY29uc3QgZmlyc3REYXkgPSBtb21lbnQuZGVmYXVsdChfbWluRGF0ZSk7XHJcbiAgICAgIGlmIChkYXkuaXNCZWZvcmUoZmlyc3REYXkuc3VidHJhY3QoMSwgJ2RheScpKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChfZGF0ZUZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5jbGVhckRhdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XHJcbiAgICBpZiAoc3RhcnREYXRlKSB7XHJcbiAgICAgIGlmIChtb21lbnQuZGVmYXVsdChzdGFydERhdGUpLmlzQWZ0ZXIobW9tZW50LmRlZmF1bHQoZGF5Rm9ybWF0dGVkKSkpIHtcclxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlO1xyXG4gICAgICAgIHN0YXJ0RGF0ZSA9IGRheUZvcm1hdHRlZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmREYXRlID0gZGF5Rm9ybWF0dGVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Ugc3RhcnREYXRlID0gZGF5Rm9ybWF0dGVkO1xyXG5cclxuICAgIGlmIChzdGFydERhdGUpIHtcclxuICAgICAgX2RhdGVGb3JtLmdldCgnc3RhcnREYXRlJykucGF0Y2hWYWx1ZShzdGFydERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbmREYXRlKSB7XHJcbiAgICAgIF9kYXRlRm9ybS5nZXQoJ2VuZERhdGUnKS5wYXRjaFZhbHVlKGVuZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud3JpdGVWYWx1ZShfZGF0ZUZvcm0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0UmFuZ2VPZkRheXMoZGF5czogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IHsgX2RhdGVGb3JtLCBfbWluRGF0ZSwgdG9kYXksIG1vdmVEYXlzRm9yd2FyZCB9ID0gdGhpcztcclxuICAgIGNvbnN0IHsgc3RhcnREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XHJcblxyXG4gICAgY29uc3QgZmlyc3REYXkgPSBtb21lbnQuZGVmYXVsdChzdGFydERhdGUgfHwgX21pbkRhdGUgfHwgdG9kYXkpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgY29uc3QgbWV0aG9kID0gbW92ZURheXNGb3J3YXJkID8gJ2FkZCcgOiAnc3VidHJhY3QnO1xyXG4gICAgY29uc3QgbGFzdERheSA9IG1vbWVudC5kZWZhdWx0KGZpcnN0RGF5KVttZXRob2RdKGRheXMsICdkYXknKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgIFxyXG4gICAgaWYobW92ZURheXNGb3J3YXJkKXtcclxuICAgICAgX2RhdGVGb3JtLmdldCgnc3RhcnREYXRlJykucGF0Y2hWYWx1ZShmaXJzdERheSk7XHJcbiAgICAgIF9kYXRlRm9ybS5nZXQoJ2VuZERhdGUnKS5wYXRjaFZhbHVlKGxhc3REYXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgX2RhdGVGb3JtLmdldCgnc3RhcnREYXRlJykucGF0Y2hWYWx1ZShsYXN0RGF5KTtcclxuICAgICAgX2RhdGVGb3JtLmdldCgnZW5kRGF0ZScpLnBhdGNoVmFsdWUoZmlyc3REYXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53cml0ZVZhbHVlKF9kYXRlRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ /**************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ **************************/
6
+ import { CurrencyPipe } from '@angular/common';
7
+ import { Component, ViewEncapsulation, forwardRef, Output, EventEmitter, Input, } from '@angular/core';
8
+ import { NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
9
+ import { MonkeyUtils } from '../../core/utils';
10
+ import * as moment_ from 'moment';
11
+ import { Subject } from 'rxjs';
12
+ import { takeUntil } from 'rxjs/operators';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/forms";
15
+ import * as i2 from "../button/button.component";
16
+ import * as i3 from "@angular/common";
17
+ const moment = moment_;
18
+ export class MonkeyDateRangePickerComponent {
19
+ constructor(fb, cdr) {
20
+ this.fb = fb;
21
+ this.cdr = cdr;
22
+ this.helperMessage = '';
23
+ this.moveDaysForward = true;
24
+ this.onChange = new EventEmitter();
25
+ this.today = moment.default().format('YYYY-MM-DD');
26
+ this.onModelChange = (value) => { };
27
+ this.onModelTouched = (value) => { };
28
+ this._dateFirst = moment.default();
29
+ this._dateSecond = moment.default().add(1, 'M');
30
+ this._id = `mecx-date-range-picker-${MonkeyUtils.getRandomString(10)}`;
31
+ this._daysArrFirst = [];
32
+ this._daysArrSecond = [];
33
+ this._disabled = false;
34
+ this._minDate = null;
35
+ this._startDate = null;
36
+ this._endDate = null;
37
+ this.unsubscribeAll = new Subject();
38
+ this.initDateRange();
39
+ }
40
+ set minDate(value) {
41
+ this._minDate = !this.moveDaysForward ? null : value;
42
+ }
43
+ initDateRange() {
44
+ this._dateForm = this.fb.group({
45
+ startDate: [null, Validators.required],
46
+ endDate: [null, Validators.required],
47
+ });
48
+ this._dateForm?.valueChanges?.pipe(takeUntil(this.unsubscribeAll))?.subscribe((values) => {
49
+ const { startDate, endDate } = values;
50
+ this._startDate = startDate && moment.default(startDate);
51
+ this._endDate = endDate && moment.default(endDate);
52
+ });
53
+ }
54
+ createCalendar(month) {
55
+ let firstDay = moment.default(month).startOf('M');
56
+ let lastDay = moment.default(month).endOf('M');
57
+ let days = Array.apply(null, { length: month.daysInMonth() })
58
+ .map(Number.call, Number)
59
+ .map((n) => {
60
+ return moment.default(firstDay).add(n, 'd');
61
+ });
62
+ let n = 0;
63
+ while (n < firstDay.weekday()) {
64
+ days.unshift(null);
65
+ n++;
66
+ }
67
+ n = 0;
68
+ while (n < 7 - lastDay.weekday()) {
69
+ days.push(null);
70
+ n++;
71
+ }
72
+ let index = 1;
73
+ let group = [];
74
+ let grouped = [];
75
+ Object.entries(days).map(([key, value]) => {
76
+ if (index > 7) {
77
+ index = 1;
78
+ grouped.push(group);
79
+ group = [];
80
+ }
81
+ group.push(value);
82
+ index++;
83
+ });
84
+ grouped.push(group);
85
+ return grouped;
86
+ }
87
+ build() {
88
+ this._daysArrFirst = this.createCalendar(this._dateFirst);
89
+ this._daysArrSecond = this.createCalendar(this._dateSecond);
90
+ }
91
+ clearDates() {
92
+ if (this._disabled)
93
+ return;
94
+ this._dateForm.setValue({ startDate: null, endDate: null });
95
+ this.writeValue(this._dateForm.value);
96
+ }
97
+ navigateToToday() {
98
+ this._dateFirst = moment.default();
99
+ this._dateSecond = moment.default().add(1, 'M');
100
+ this.build();
101
+ }
102
+ ngOnInit() {
103
+ this.build();
104
+ }
105
+ registerOnChange(fn) {
106
+ this.onModelChange = fn;
107
+ }
108
+ registerOnTouched(fn) {
109
+ this.onModelTouched = fn;
110
+ }
111
+ setDisabledState(isDisabled) {
112
+ this._disabled = isDisabled;
113
+ }
114
+ set value(value) {
115
+ if (value &&
116
+ Object.prototype.hasOwnProperty.call(value, 'startDate') &&
117
+ Object.prototype.hasOwnProperty.call(value, 'endDate')) {
118
+ this._dateForm.setValue(value);
119
+ this.cdr.detectChanges();
120
+ this.onModelChange(this._dateForm.value);
121
+ this.onModelTouched(this._dateForm.value);
122
+ }
123
+ else {
124
+ this.clearDates();
125
+ }
126
+ }
127
+ get value() {
128
+ return this._dateForm.value;
129
+ }
130
+ writeValue(value) {
131
+ this.value = value;
132
+ this.onChange.next(value);
133
+ }
134
+ nextMonth() {
135
+ if (this._disabled)
136
+ return;
137
+ this._dateFirst.add(1, 'M');
138
+ this._dateSecond.add(1, 'M');
139
+ this._daysArrFirst = this.createCalendar(this._dateFirst);
140
+ this._daysArrSecond = this.createCalendar(this._dateSecond);
141
+ }
142
+ previousMonth() {
143
+ if (this._disabled)
144
+ return;
145
+ this._dateFirst.subtract(1, 'M');
146
+ this._dateSecond.subtract(1, 'M');
147
+ this._daysArrFirst = this.createCalendar(this._dateFirst);
148
+ this._daysArrSecond = this.createCalendar(this._dateSecond);
149
+ }
150
+ todayCheck(day) {
151
+ if (!day) {
152
+ return false;
153
+ }
154
+ return moment.default().format('L') === day.format('L');
155
+ }
156
+ isSelected(day) {
157
+ if (!day) {
158
+ return false;
159
+ }
160
+ let startDateMoment = moment.default(this._dateForm.value.startDate, 'YYYY-MM-DD');
161
+ let endDateMoment = moment.default(this._dateForm.value.endDate, 'YYYY-MM-DD');
162
+ if (this._dateForm.valid) {
163
+ return startDateMoment.isSameOrBefore(day) && endDateMoment.isSameOrAfter(day);
164
+ }
165
+ if (this._dateForm.get('startDate').valid) {
166
+ return startDateMoment.isSame(day);
167
+ }
168
+ }
169
+ isDisabled(day) {
170
+ const { _minDate } = this;
171
+ if (_minDate) {
172
+ const firstDay = moment.default(_minDate);
173
+ return day.isBefore(firstDay.subtract(1, 'day'));
174
+ }
175
+ return false;
176
+ }
177
+ isFirstSelected(day) {
178
+ const { _dateForm } = this;
179
+ const { startDate } = _dateForm.value;
180
+ return day?.isSame(startDate);
181
+ }
182
+ isLastSelected(day) {
183
+ const { _dateForm } = this;
184
+ const { endDate } = _dateForm.value;
185
+ return day?.isSame(endDate);
186
+ }
187
+ selectedDate(day) {
188
+ if (this._disabled)
189
+ return;
190
+ const { _dateForm, _minDate } = this;
191
+ let dayFormatted = day.format('YYYY-MM-DD');
192
+ if (_minDate) {
193
+ const firstDay = moment.default(_minDate);
194
+ if (day.isBefore(firstDay.subtract(1, 'day')))
195
+ return;
196
+ }
197
+ if (_dateForm.valid) {
198
+ this.clearDates();
199
+ }
200
+ let { startDate, endDate } = _dateForm.value;
201
+ if (startDate) {
202
+ if (moment.default(startDate).isAfter(moment.default(dayFormatted))) {
203
+ endDate = startDate;
204
+ startDate = dayFormatted;
205
+ }
206
+ else {
207
+ endDate = dayFormatted;
208
+ }
209
+ }
210
+ else
211
+ startDate = dayFormatted;
212
+ if (startDate) {
213
+ _dateForm.get('startDate').patchValue(startDate);
214
+ }
215
+ if (endDate) {
216
+ _dateForm.get('endDate').patchValue(endDate);
217
+ }
218
+ this.writeValue(_dateForm.value);
219
+ }
220
+ selectRangeOfDays(days) {
221
+ if (this._disabled)
222
+ return;
223
+ const { _dateForm, _minDate, today, moveDaysForward } = this;
224
+ const { startDate } = _dateForm.value;
225
+ const firstDay = moment.default(startDate || _minDate || today).format('YYYY-MM-DD');
226
+ const method = moveDaysForward ? 'add' : 'subtract';
227
+ const lastDay = moment.default(firstDay)[method](days, 'day').format('YYYY-MM-DD');
228
+ if (moveDaysForward) {
229
+ _dateForm.get('startDate').patchValue(firstDay);
230
+ _dateForm.get('endDate').patchValue(lastDay);
231
+ }
232
+ else {
233
+ _dateForm.get('startDate').patchValue(lastDay);
234
+ _dateForm.get('endDate').patchValue(firstDay);
235
+ }
236
+ this.writeValue(_dateForm.value);
237
+ }
238
+ ngOnDestroy() {
239
+ this.unsubscribeAll.next();
240
+ this.unsubscribeAll.complete();
241
+ }
242
+ }
243
+ MonkeyDateRangePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MonkeyDateRangePickerComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
244
+ MonkeyDateRangePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MonkeyDateRangePickerComponent, selector: "monkey-date-range-picker", inputs: { label: "label", helperMessage: "helperMessage", i18n: "i18n", infoMessage: "infoMessage", errorMessage: "errorMessage", moveDaysForward: "moveDaysForward", minDate: "minDate", value: "value" }, outputs: { onChange: "onChange" }, providers: [
245
+ {
246
+ provide: NG_VALUE_ACCESSOR,
247
+ useExisting: forwardRef(() => MonkeyDateRangePickerComponent),
248
+ multi: true,
249
+ },
250
+ CurrencyPipe,
251
+ ], ngImport: i0, template: `
252
+ <mecx-date-range-picker-group [ngClass]="{ disabled: _disabled }" [id]="_id">
253
+ <mecx-date-range-picker-group-header>
254
+ <label>
255
+ {{ label }}
256
+ </label>
257
+ <helper>
258
+ {{ helperMessage }}
259
+ </helper>
260
+ </mecx-date-range-picker-group-header>
261
+ <mecx-date-range-picker-selected-dates>
262
+ <div class="from"
263
+ [class.actual]="!_startDate">
264
+ <span class="title">
265
+ {{ i18n?.from }}
266
+ </span>
267
+ <span class="data">
268
+ <ng-container *ngIf="_startDate; else select">
269
+ {{ _startDate?.format('DD') }}
270
+ {{ i18n?.of }}
271
+ {{ i18n?.months?.[_startDate.format('M')] }},
272
+ {{ _startDate.format('YYYY') }}
273
+ </ng-container>
274
+ </span>
275
+ </div>
276
+ <div class="to" [class.actual]="_startDate">
277
+ <span class="title">
278
+ {{ i18n?.to }}
279
+ </span>
280
+ <span class="data">
281
+ <ng-container *ngIf="_endDate; else select">
282
+ {{ _endDate.format('DD') }}
283
+ {{ i18n?.of }}
284
+ {{ i18n?.months?.[_endDate.format('M')] }},
285
+ {{ _endDate.format('YYYY') }}
286
+ </ng-container>
287
+ </span>
288
+ </div>
289
+ <ng-template #select>
290
+ {{ i18n?.select }}
291
+ </ng-template>
292
+ </mecx-date-range-picker-selected-dates>
293
+ <mecx-date-range-picker-group-body>
294
+ <mecx-date-range-picker class="first-date-range">
295
+ <mecx-date-range-picker-header>
296
+ <div class="calendar-title">
297
+ <monkey-button
298
+ class="calendar-previous"
299
+ color="theme"
300
+ icon="arrow-left-16"
301
+ type="tertiary"
302
+ (click)="previousMonth()"
303
+ size="sm"
304
+ [disabled]="_disabled"
305
+ >
306
+ </monkey-button>
307
+ <div class="month-year-title">
308
+ {{ i18n?.months?.[_dateFirst.format('M')] }}
309
+ {{ _dateFirst.format('YYYY') }}
310
+ </div>
311
+ <monkey-button
312
+ class="calendar-next"
313
+ color="theme"
314
+ icon="arrow-right-16"
315
+ type="tertiary"
316
+ (click)="nextMonth()"
317
+ size="sm"
318
+ [disabled]="_disabled"
319
+ >
320
+ </monkey-button>
321
+ </div>
322
+ <div class="week">
323
+ <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
324
+ {{ i18n?.days?.[day]}}
325
+ </span>
326
+ </div>
327
+ </mecx-date-range-picker-header>
328
+ <mecx-date-range-picker-body>
329
+ <div class="month-week" *ngFor="let week of _daysArrFirst">
330
+ <div
331
+ class="month-day"
332
+ (click)="selectedDate(day)"
333
+ [ngClass]="{
334
+ inactive: !day || isDisabled(day),
335
+ selected: isSelected(day),
336
+ today: todayCheck(day),
337
+ 'first-selected': isFirstSelected(day),
338
+ 'last-selected': isLastSelected(day)
339
+ }"
340
+ *ngFor="let day of week"
341
+ #divOne
342
+ >
343
+ {{ day?.date() }}
344
+ </div>
345
+ </div>
346
+ </mecx-date-range-picker-body>
347
+ </mecx-date-range-picker>
348
+
349
+ <mecx-date-range-picker class="second-date-range">
350
+ <mecx-date-range-picker-header>
351
+ <div class="calendar-title">
352
+ <div class="month-year-title">
353
+ {{ i18n?.months?.[_dateSecond.format('M')] }}
354
+ {{ _dateSecond.format('YYYY') }}
355
+ </div>
356
+ <monkey-button
357
+ class="calendar-previous"
358
+ color="theme"
359
+ icon="arrow-right-16"
360
+ type="tertiary"
361
+ (click)="nextMonth()"
362
+ size="sm"
363
+ [disabled]="_disabled"
364
+ >
365
+ </monkey-button>
366
+ </div>
367
+ <div class="week">
368
+ <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
369
+ {{ i18n?.days?.[day]}}
370
+ </span>
371
+ </div>
372
+ </mecx-date-range-picker-header>
373
+ <mecx-date-range-picker-body>
374
+ <div class="month-week" *ngFor="let week of _daysArrSecond">
375
+ <div
376
+ class="month-day"
377
+ (click)="selectedDate(day)"
378
+ [ngClass]="{
379
+ inactive: !day || isDisabled(day),
380
+ selected: isSelected(day),
381
+ today: todayCheck(day),
382
+ 'first-selected': isFirstSelected(day),
383
+ 'last-selected': isLastSelected(day)
384
+ }"
385
+ *ngFor="let day of week"
386
+ >
387
+ {{ day?.date() }}
388
+ </div>
389
+ </div>
390
+ </mecx-date-range-picker-body>
391
+ </mecx-date-range-picker>
392
+ </mecx-date-range-picker-group-body>
393
+ <mecx-date-range-picker-group-info>
394
+ <info>
395
+ {{ infoMessage }}
396
+ </info>
397
+ <error>
398
+ {{ errorMessage }}
399
+ </error>
400
+ </mecx-date-range-picker-group-info>
401
+ <mecx-date-range-picker-group-action [class.error]="errorMessage?.trim()">
402
+ <div class="action-days">
403
+ <monkey-button
404
+ color="theme"
405
+ type="secondary"
406
+ (click)="selectRangeOfDays(30)"
407
+ [disabled]="_disabled"
408
+ >
409
+ {{ i18n?.actions?.['30'] }}
410
+ </monkey-button>
411
+ <monkey-button
412
+ color="theme"
413
+ type="secondary"
414
+ (click)="selectRangeOfDays(60)"
415
+ [disabled]="_disabled"
416
+ >
417
+ {{ i18n?.actions?.['60'] }}
418
+ </monkey-button>
419
+ <monkey-button
420
+ color="theme"
421
+ type="secondary"
422
+ (click)="selectRangeOfDays(90)"
423
+ [disabled]="_disabled"
424
+ >
425
+ {{ i18n?.actions?.['90'] }}
426
+ </monkey-button>
427
+ </div>
428
+ <monkey-button
429
+ color="theme"
430
+ type="primary"
431
+ (click)="navigateToToday()"
432
+ [disabled]="_disabled"
433
+ >
434
+ {{ i18n?.today }}
435
+ </monkey-button>
436
+ </mecx-date-range-picker-group-action>
437
+ </mecx-date-range-picker-group>
438
+ `, isInline: true, components: [{ type: i2.MonkeyButtonComponent, selector: "monkey-button", inputs: ["label", "icon", "iconPosition", "type", "color", "disabled", "size"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MonkeyDateRangePickerComponent, decorators: [{
440
+ type: Component,
441
+ args: [{
442
+ selector: 'monkey-date-range-picker',
443
+ template: `
444
+ <mecx-date-range-picker-group [ngClass]="{ disabled: _disabled }" [id]="_id">
445
+ <mecx-date-range-picker-group-header>
446
+ <label>
447
+ {{ label }}
448
+ </label>
449
+ <helper>
450
+ {{ helperMessage }}
451
+ </helper>
452
+ </mecx-date-range-picker-group-header>
453
+ <mecx-date-range-picker-selected-dates>
454
+ <div class="from"
455
+ [class.actual]="!_startDate">
456
+ <span class="title">
457
+ {{ i18n?.from }}
458
+ </span>
459
+ <span class="data">
460
+ <ng-container *ngIf="_startDate; else select">
461
+ {{ _startDate?.format('DD') }}
462
+ {{ i18n?.of }}
463
+ {{ i18n?.months?.[_startDate.format('M')] }},
464
+ {{ _startDate.format('YYYY') }}
465
+ </ng-container>
466
+ </span>
467
+ </div>
468
+ <div class="to" [class.actual]="_startDate">
469
+ <span class="title">
470
+ {{ i18n?.to }}
471
+ </span>
472
+ <span class="data">
473
+ <ng-container *ngIf="_endDate; else select">
474
+ {{ _endDate.format('DD') }}
475
+ {{ i18n?.of }}
476
+ {{ i18n?.months?.[_endDate.format('M')] }},
477
+ {{ _endDate.format('YYYY') }}
478
+ </ng-container>
479
+ </span>
480
+ </div>
481
+ <ng-template #select>
482
+ {{ i18n?.select }}
483
+ </ng-template>
484
+ </mecx-date-range-picker-selected-dates>
485
+ <mecx-date-range-picker-group-body>
486
+ <mecx-date-range-picker class="first-date-range">
487
+ <mecx-date-range-picker-header>
488
+ <div class="calendar-title">
489
+ <monkey-button
490
+ class="calendar-previous"
491
+ color="theme"
492
+ icon="arrow-left-16"
493
+ type="tertiary"
494
+ (click)="previousMonth()"
495
+ size="sm"
496
+ [disabled]="_disabled"
497
+ >
498
+ </monkey-button>
499
+ <div class="month-year-title">
500
+ {{ i18n?.months?.[_dateFirst.format('M')] }}
501
+ {{ _dateFirst.format('YYYY') }}
502
+ </div>
503
+ <monkey-button
504
+ class="calendar-next"
505
+ color="theme"
506
+ icon="arrow-right-16"
507
+ type="tertiary"
508
+ (click)="nextMonth()"
509
+ size="sm"
510
+ [disabled]="_disabled"
511
+ >
512
+ </monkey-button>
513
+ </div>
514
+ <div class="week">
515
+ <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
516
+ {{ i18n?.days?.[day]}}
517
+ </span>
518
+ </div>
519
+ </mecx-date-range-picker-header>
520
+ <mecx-date-range-picker-body>
521
+ <div class="month-week" *ngFor="let week of _daysArrFirst">
522
+ <div
523
+ class="month-day"
524
+ (click)="selectedDate(day)"
525
+ [ngClass]="{
526
+ inactive: !day || isDisabled(day),
527
+ selected: isSelected(day),
528
+ today: todayCheck(day),
529
+ 'first-selected': isFirstSelected(day),
530
+ 'last-selected': isLastSelected(day)
531
+ }"
532
+ *ngFor="let day of week"
533
+ #divOne
534
+ >
535
+ {{ day?.date() }}
536
+ </div>
537
+ </div>
538
+ </mecx-date-range-picker-body>
539
+ </mecx-date-range-picker>
540
+
541
+ <mecx-date-range-picker class="second-date-range">
542
+ <mecx-date-range-picker-header>
543
+ <div class="calendar-title">
544
+ <div class="month-year-title">
545
+ {{ i18n?.months?.[_dateSecond.format('M')] }}
546
+ {{ _dateSecond.format('YYYY') }}
547
+ </div>
548
+ <monkey-button
549
+ class="calendar-previous"
550
+ color="theme"
551
+ icon="arrow-right-16"
552
+ type="tertiary"
553
+ (click)="nextMonth()"
554
+ size="sm"
555
+ [disabled]="_disabled"
556
+ >
557
+ </monkey-button>
558
+ </div>
559
+ <div class="week">
560
+ <span class="week-day" *ngFor="let day of [1, 2, 3, 4, 5, 6, 7]">
561
+ {{ i18n?.days?.[day]}}
562
+ </span>
563
+ </div>
564
+ </mecx-date-range-picker-header>
565
+ <mecx-date-range-picker-body>
566
+ <div class="month-week" *ngFor="let week of _daysArrSecond">
567
+ <div
568
+ class="month-day"
569
+ (click)="selectedDate(day)"
570
+ [ngClass]="{
571
+ inactive: !day || isDisabled(day),
572
+ selected: isSelected(day),
573
+ today: todayCheck(day),
574
+ 'first-selected': isFirstSelected(day),
575
+ 'last-selected': isLastSelected(day)
576
+ }"
577
+ *ngFor="let day of week"
578
+ >
579
+ {{ day?.date() }}
580
+ </div>
581
+ </div>
582
+ </mecx-date-range-picker-body>
583
+ </mecx-date-range-picker>
584
+ </mecx-date-range-picker-group-body>
585
+ <mecx-date-range-picker-group-info>
586
+ <info>
587
+ {{ infoMessage }}
588
+ </info>
589
+ <error>
590
+ {{ errorMessage }}
591
+ </error>
592
+ </mecx-date-range-picker-group-info>
593
+ <mecx-date-range-picker-group-action [class.error]="errorMessage?.trim()">
594
+ <div class="action-days">
595
+ <monkey-button
596
+ color="theme"
597
+ type="secondary"
598
+ (click)="selectRangeOfDays(30)"
599
+ [disabled]="_disabled"
600
+ >
601
+ {{ i18n?.actions?.['30'] }}
602
+ </monkey-button>
603
+ <monkey-button
604
+ color="theme"
605
+ type="secondary"
606
+ (click)="selectRangeOfDays(60)"
607
+ [disabled]="_disabled"
608
+ >
609
+ {{ i18n?.actions?.['60'] }}
610
+ </monkey-button>
611
+ <monkey-button
612
+ color="theme"
613
+ type="secondary"
614
+ (click)="selectRangeOfDays(90)"
615
+ [disabled]="_disabled"
616
+ >
617
+ {{ i18n?.actions?.['90'] }}
618
+ </monkey-button>
619
+ </div>
620
+ <monkey-button
621
+ color="theme"
622
+ type="primary"
623
+ (click)="navigateToToday()"
624
+ [disabled]="_disabled"
625
+ >
626
+ {{ i18n?.today }}
627
+ </monkey-button>
628
+ </mecx-date-range-picker-group-action>
629
+ </mecx-date-range-picker-group>
630
+ `,
631
+ encapsulation: ViewEncapsulation.None,
632
+ providers: [
633
+ {
634
+ provide: NG_VALUE_ACCESSOR,
635
+ useExisting: forwardRef(() => MonkeyDateRangePickerComponent),
636
+ multi: true,
637
+ },
638
+ CurrencyPipe,
639
+ ],
640
+ }]
641
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
642
+ type: Input
643
+ }], helperMessage: [{
644
+ type: Input
645
+ }], i18n: [{
646
+ type: Input
647
+ }], infoMessage: [{
648
+ type: Input
649
+ }], errorMessage: [{
650
+ type: Input
651
+ }], moveDaysForward: [{
652
+ type: Input
653
+ }], minDate: [{
654
+ type: Input
655
+ }], onChange: [{
656
+ type: Output
657
+ }], value: [{
658
+ type: Input
659
+ }] } });
660
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9ua2V5LXN0eWxlLWd1aWRlL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NEJBSTRCO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBRVYsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLGlCQUFpQixFQUNqQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRTNDLE1BQU0sTUFBTSxHQUFRLE9BQU8sQ0FBQztBQTBNNUIsTUFBTSxPQUFPLDhCQUE4QjtJQTZDekMsWUFBb0IsRUFBZSxFQUFVLEdBQXNCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTNDMUQsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFtQjNCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBTXRCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXJDLFVBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLGtCQUFh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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkxUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUM7NEJBQzdELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELFlBQVk7cUJBQ2I7aUJBQ0Y7a0lBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQWdCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRixPQUFPO3NCQURWLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkE0R0gsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgTW9ua2V5IEV4Y2hhbmdlLiBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKiBUaGlzIHN0eWxlIGd1aWRlIHdhcyBkZXZlbG9wZWQgYnkgTW9ua2V5IEV4Y2hhbmdlIFRlYW1cbiAqIE1JVCBMaWNlbmNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNb25rZXlVdGlscyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBtb21lbnQ6IGFueSA9IG1vbWVudF87XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbmtleS1kYXRlLXJhbmdlLXBpY2tlcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogX2Rpc2FibGVkIH1cIiBbaWRdPVwiX2lkXCI+XG4gICAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cC1oZWFkZXI+XG4gICAgICAgIDxsYWJlbD5cbiAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8aGVscGVyPlxuICAgICAgICAgIHt7IGhlbHBlck1lc3NhZ2UgfX1cbiAgICAgICAgPC9oZWxwZXI+XG4gICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtaGVhZGVyPlxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItc2VsZWN0ZWQtZGF0ZXM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcm9tXCJcbiAgICAgICAgW2NsYXNzLmFjdHVhbF09XCIhX3N0YXJ0RGF0ZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgIHt7IGkxOG4/LmZyb20gfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3N0YXJ0RGF0ZTsgZWxzZSBzZWxlY3RcIj5cbiAgICAgICAgICAgICAge3sgX3N0YXJ0RGF0ZT8uZm9ybWF0KCdERCcpIH19XG4gICAgICAgICAgICAgIHt7IGkxOG4/Lm9mIH19XG4gICAgICAgICAgICAgIHt7IGkxOG4/Lm1vbnRocz8uW19zdGFydERhdGUuZm9ybWF0KCdNJyldIH19LFxuICAgICAgICAgICAgICB7eyBfc3RhcnREYXRlLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9cIiBbY2xhc3MuYWN0dWFsXT1cIl9zdGFydERhdGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICB7eyBpMThuPy50byB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfZW5kRGF0ZTsgZWxzZSBzZWxlY3RcIj5cbiAgICAgICAgICAgICAge3sgX2VuZERhdGUuZm9ybWF0KCdERCcpIH19XG4gICAgICAgICAgICAgIHt7IGkxOG4/Lm9mIH19XG4gICAgICAgICAgICAgIHt7IGkxOG4/Lm1vbnRocz8uW19lbmREYXRlLmZvcm1hdCgnTScpXSB9fSxcbiAgICAgICAgICAgICAge3sgX2VuZERhdGUuZm9ybWF0KCdZWVlZJykgfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0PlxuICAgICAgICAgIHt7IGkxOG4/LnNlbGVjdCB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLXNlbGVjdGVkLWRhdGVzPlxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtYm9keT5cbiAgICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXIgY2xhc3M9XCJmaXJzdC1kYXRlLXJhbmdlXCI+XG4gICAgICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItaGVhZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxtb25rZXktYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1wcmV2aW91c1wiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImFycm93LWxlZnQtMTZcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC15ZWFyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgaTE4bj8ubW9udGhzPy5bX2RhdGVGaXJzdC5mb3JtYXQoJ00nKV0gfX1cbiAgICAgICAgICAgICAgICB7eyBfZGF0ZUZpcnN0LmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bW9ua2V5LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FsZW5kYXItbmV4dFwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImFycm93LXJpZ2h0LTE2XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2Vlay1kYXlcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIFsxLCAyLCAzLCA0LCA1LCA2LCA3XVwiPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4/LmRheXM/LltkYXldfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlcj5cbiAgICAgICAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ib2R5PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXdlZWtcIiAqbmdGb3I9XCJsZXQgd2VlayBvZiBfZGF5c0FyckZpcnN0XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLWRheVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkRGF0ZShkYXkpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICBpbmFjdGl2ZTogIWRheSB8fCBpc0Rpc2FibGVkKGRheSksXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXNTZWxlY3RlZChkYXkpLFxuICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5Q2hlY2soZGF5KSxcbiAgICAgICAgICAgICAgICAgICdmaXJzdC1zZWxlY3RlZCc6IGlzRmlyc3RTZWxlY3RlZChkYXkpLFxuICAgICAgICAgICAgICAgICAgJ2xhc3Qtc2VsZWN0ZWQnOiBpc0xhc3RTZWxlY3RlZChkYXkpXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrXCJcbiAgICAgICAgICAgICAgICAjZGl2T25lXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBkYXk/LmRhdGUoKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ib2R5PlxuICAgICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXI+XG5cbiAgICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXIgY2xhc3M9XCJzZWNvbmQtZGF0ZS1yYW5nZVwiPlxuICAgICAgICAgIDxtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci10aXRsZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgteWVhci10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4/Lm1vbnRocz8uW19kYXRlU2Vjb25kLmZvcm1hdCgnTScpXSB9fVxuICAgICAgICAgICAgICAgIHt7IF9kYXRlU2Vjb25kLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bW9ua2V5LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FsZW5kYXItcHJldmlvdXNcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwidGhlbWVcIlxuICAgICAgICAgICAgICAgIGljb249XCJhcnJvdy1yaWdodC0xNlwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndlZWstZGF5XCIgKm5nRm9yPVwibGV0IGRheSBvZiBbMSwgMiwgMywgNCwgNSwgNiwgN11cIj5cbiAgICAgICAgICAgICAgICB7eyBpMThuPy5kYXlzPy5bZGF5XX19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1oZWFkZXI+XG4gICAgICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItYm9keT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC13ZWVrXCIgKm5nRm9yPVwibGV0IHdlZWsgb2YgX2RheXNBcnJTZWNvbmRcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGgtZGF5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWREYXRlKGRheSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgIGluYWN0aXZlOiAhZGF5IHx8IGlzRGlzYWJsZWQoZGF5KSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkKGRheSksXG4gICAgICAgICAgICAgICAgICB0b2RheTogdG9kYXlDaGVjayhkYXkpLFxuICAgICAgICAgICAgICAgICAgJ2ZpcnN0LXNlbGVjdGVkJzogaXNGaXJzdFNlbGVjdGVkKGRheSksXG4gICAgICAgICAgICAgICAgICAnbGFzdC1zZWxlY3RlZCc6IGlzTGFzdFNlbGVjdGVkKGRheSlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGF5Py5kYXRlKCkgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItYm9keT5cbiAgICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAgPC9tZWN4LWRhdGUtcmFuZ2UtcGlja2VyLWdyb3VwLWJvZHk+XG4gICAgICA8bWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cC1pbmZvPlxuICAgICAgICA8aW5mbz5cbiAgICAgICAgICB7eyBpbmZvTWVzc2FnZSB9fVxuICAgICAgICA8L2luZm8+XG4gICAgICAgIDxlcnJvcj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9lcnJvcj5cbiAgICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cC1pbmZvPlxuICAgICAgPG1lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtYWN0aW9uIFtjbGFzcy5lcnJvcl09XCJlcnJvck1lc3NhZ2U/LnRyaW0oKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWRheXNcIj5cbiAgICAgICAgICA8bW9ua2V5LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXG4gICAgICAgICAgICB0eXBlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYW5nZU9mRGF5cygzMClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgaTE4bj8uYWN0aW9ucz8uWyczMCddIH19XG4gICAgICAgICAgPC9tb25rZXktYnV0dG9uPlxuICAgICAgICAgIDxtb25rZXktYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInRoZW1lXCJcbiAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJhbmdlT2ZEYXlzKDYwKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2Rpc2FibGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBpMThuPy5hY3Rpb25zPy5bJzYwJ10gfX1cbiAgICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICAgICAgPG1vbmtleS1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwidGhlbWVcIlxuICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2VPZkRheXMoOTApXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfZGlzYWJsZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGkxOG4/LmFjdGlvbnM/LlsnOTAnXSB9fVxuICAgICAgICAgIDwvbW9ua2V5LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtb25rZXktYnV0dG9uXG4gICAgICAgICAgY29sb3I9XCJ0aGVtZVwiXG4gICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvVG9kYXkoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpMThuPy50b2RheSB9fVxuICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICA8L21lY3gtZGF0ZS1yYW5nZS1waWNrZXItZ3JvdXAtYWN0aW9uPlxuICAgIDwvbWVjeC1kYXRlLXJhbmdlLXBpY2tlci1ncm91cD5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNb25rZXlEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICBDdXJyZW5jeVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1vbmtleURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhlbHBlck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBpMThuOiB7XG4gICAgbW9udGhzOiB7XG4gICAgICBbczogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gICAgZGF5czoge1xuICAgICAgW3M6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIFtzOiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBvZjogc3RyaW5nO1xuICAgIHRvZGF5OiBzdHJpbmc7XG4gICAgc2VsZWN0OiBzdHJpbmc7XG4gIH07XG4gIEBJbnB1dCgpIGluZm9NZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBASW5wdXQoKSBtb3ZlRGF5c0ZvcndhcmQgPSB0cnVlO1xuICBASW5wdXQoKVxuICBzZXQgbWluRGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fbWluRGF0ZSA9ICF0aGlzLm1vdmVEYXlzRm9yd2FyZCA/IG51bGwgOiB2YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgdG9kYXkgPSBtb21lbnQuZGVmYXVsdCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICBwcml2YXRlIG9uTW9kZWxDaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIHByaXZhdGUgb25Nb2RlbFRvdWNoZWQgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PjtcblxuICBwdWJsaWMgX2RhdGVGaXJzdCA9IG1vbWVudC5kZWZhdWx0KCk7XG4gIHB1YmxpYyBfZGF0ZVNlY29uZCA9IG1vbWVudC5kZWZhdWx0KCkuYWRkKDEsICdNJyk7XG4gIHB1YmxpYyBfaWQ6IHN0cmluZyA9IGBtZWN4LWRhdGUtcmFuZ2UtcGlja2VyLSR7TW9ua2V5VXRpbHMuZ2V0UmFuZG9tU3RyaW5nKDEwKX1gO1xuICBwdWJsaWMgX2RheXNBcnJGaXJzdCA9IFtdO1xuICBwdWJsaWMgX2RheXNBcnJTZWNvbmQgPSBbXTtcbiAgcHVibGljIF9kYXRlRm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBfbWluRGF0ZSA9IG51bGw7XG4gIHB1YmxpYyBfc3RhcnREYXRlID0gbnVsbDtcbiAgcHVibGljIF9lbmREYXRlID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgdGhpcy5pbml0RGF0ZVJhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRlUmFuZ2UoKSB7XG4gICAgdGhpcy5fZGF0ZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHN0YXJ0RGF0ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZW5kRGF0ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIH0pO1xuICAgIHRoaXMuX2RhdGVGb3JtPy52YWx1ZUNoYW5nZXM/LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBbGwpKT8uc3Vic2NyaWJlKCh2YWx1ZXM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydERhdGUsIGVuZERhdGUgfSA9IHZhbHVlcztcbiAgICAgIHRoaXMuX3N0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSAmJiBtb21lbnQuZGVmYXVsdChzdGFydERhdGUpXG4gICAgICB0aGlzLl9lbmREYXRlID0gZW5kRGF0ZSAmJiBtb21lbnQuZGVmYXVsdChlbmREYXRlKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWxlbmRhcihtb250aDogYW55KSB7XG4gICAgbGV0IGZpcnN0RGF5ID0gbW9tZW50LmRlZmF1bHQobW9udGgpLnN0YXJ0T2YoJ00nKTtcbiAgICBsZXQgbGFzdERheSA9IG1vbWVudC5kZWZhdWx0KG1vbnRoKS5lbmRPZignTScpO1xuICAgIGxldCBkYXlzID0gQXJyYXkuYXBwbHkobnVsbCwgeyBsZW5ndGg6IG1vbnRoLmRheXNJbk1vbnRoKCkgfSlcbiAgICAgIC5tYXAoTnVtYmVyLmNhbGwsIE51bWJlcilcbiAgICAgIC5tYXAoKG46IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gbW9tZW50LmRlZmF1bHQoZmlyc3REYXkpLmFkZChuLCAnZCcpO1xuICAgICAgfSk7XG5cbiAgICBsZXQgbiA9IDA7XG4gICAgd2hpbGUgKG4gPCBmaXJzdERheS53ZWVrZGF5KCkpIHtcbiAgICAgIGRheXMudW5zaGlmdChudWxsKTtcbiAgICAgIG4rKztcbiAgICB9XG4gICAgbiA9IDA7XG4gICAgd2hpbGUgKG4gPCA3IC0gbGFzdERheS53ZWVrZGF5KCkpIHtcbiAgICAgIGRheXMucHVzaChudWxsKTtcbiAgICAgIG4rKztcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSAxO1xuICAgIGxldCBncm91cCA9IFtdO1xuICAgIGxldCBncm91cGVkID0gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhkYXlzKS5tYXAoKFtrZXksIHZhbHVlXTogW3N0cmluZywgYW55XSkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gNykge1xuICAgICAgICBpbmRleCA9IDE7XG4gICAgICAgIGdyb3VwZWQucHVzaChncm91cCk7XG4gICAgICAgIGdyb3VwID0gW107XG4gICAgICB9XG5cbiAgICAgIGdyb3VwLnB1c2godmFsdWUpO1xuICAgICAgaW5kZXgrKztcbiAgICB9KTtcbiAgICBncm91cGVkLnB1c2goZ3JvdXApO1xuXG4gICAgcmV0dXJuIGdyb3VwZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkKCkge1xuICAgIHRoaXMuX2RheXNBcnJGaXJzdCA9IHRoaXMuY3JlYXRlQ2FsZW5kYXIodGhpcy5fZGF0ZUZpcnN0KTtcbiAgICB0aGlzLl9kYXlzQXJyU2Vjb25kID0gdGhpcy5jcmVhdGVDYWxlbmRhcih0aGlzLl9kYXRlU2Vjb25kKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEYXRlcygpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLl9kYXRlRm9ybS5zZXRWYWx1ZSh7IHN0YXJ0RGF0ZTogbnVsbCwgZW5kRGF0ZTogbnVsbCB9KTtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5fZGF0ZUZvcm0udmFsdWUpO1xuICB9XG5cbiAgbmF2aWdhdGVUb1RvZGF5KCkge1xuICAgIHRoaXMuX2RhdGVGaXJzdCA9IG1vbWVudC5kZWZhdWx0KCk7XG4gICAgdGhpcy5fZGF0ZVNlY29uZCA9IG1vbWVudC5kZWZhdWx0KCkuYWRkKDEsICdNJyk7XG4gICAgdGhpcy5idWlsZCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5idWlsZCgpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ3N0YXJ0RGF0ZScpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdlbmREYXRlJylcbiAgICApIHtcbiAgICAgIHRoaXMuX2RhdGVGb3JtLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLl9kYXRlRm9ybS52YWx1ZSk7XG4gICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkKHRoaXMuX2RhdGVGb3JtLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckRhdGVzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVGb3JtLnZhbHVlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBuZXh0TW9udGgoKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5fZGF0ZUZpcnN0LmFkZCgxLCAnTScpO1xuICAgIHRoaXMuX2RhdGVTZWNvbmQuYWRkKDEsICdNJyk7XG5cbiAgICB0aGlzLl9kYXlzQXJyRmlyc3QgPSB0aGlzLmNyZWF0ZUNhbGVuZGFyKHRoaXMuX2RhdGVGaXJzdCk7XG4gICAgdGhpcy5fZGF5c0FyclNlY29uZCA9IHRoaXMuY3JlYXRlQ2FsZW5kYXIodGhpcy5fZGF0ZVNlY29uZCk7XG4gIH1cblxuICBwcmV2aW91c01vbnRoKCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuX2RhdGVGaXJzdC5zdWJ0cmFjdCgxLCAnTScpO1xuICAgIHRoaXMuX2RhdGVTZWNvbmQuc3VidHJhY3QoMSwgJ00nKTtcblxuICAgIHRoaXMuX2RheXNBcnJGaXJzdCA9IHRoaXMuY3JlYXRlQ2FsZW5kYXIodGhpcy5fZGF0ZUZpcnN0KTtcbiAgICB0aGlzLl9kYXlzQXJyU2Vjb25kID0gdGhpcy5jcmVhdGVDYWxlbmRhcih0aGlzLl9kYXRlU2Vjb25kKTtcbiAgfVxuXG4gIHRvZGF5Q2hlY2soZGF5OiBhbnkpIHtcbiAgICBpZiAoIWRheSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBtb21lbnQuZGVmYXVsdCgpLmZvcm1hdCgnTCcpID09PSBkYXkuZm9ybWF0KCdMJyk7XG4gIH1cblxuICBpc1NlbGVjdGVkKGRheTogYW55KSB7XG4gICAgaWYgKCFkYXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnREYXRlTW9tZW50ID0gbW9tZW50LmRlZmF1bHQodGhpcy5fZGF0ZUZvcm0udmFsdWUuc3RhcnREYXRlLCAnWVlZWS1NTS1ERCcpO1xuICAgIGxldCBlbmREYXRlTW9tZW50ID0gbW9tZW50LmRlZmF1bHQodGhpcy5fZGF0ZUZvcm0udmFsdWUuZW5kRGF0ZSwgJ1lZWVktTU0tREQnKTtcblxuICAgIGlmICh0aGlzLl9kYXRlRm9ybS52YWxpZCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGF0ZU1vbWVudC5pc1NhbWVPckJlZm9yZShkYXkpICYmIGVuZERhdGVNb21lbnQuaXNTYW1lT3JBZnRlcihkYXkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kYXRlRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnZhbGlkKSB7XG4gICAgICByZXR1cm4gc3RhcnREYXRlTW9tZW50LmlzU2FtZShkYXkpO1xuICAgIH1cbiAgfVxuXG4gIGlzRGlzYWJsZWQoZGF5KSB7XG4gICAgY29uc3QgeyBfbWluRGF0ZSB9ID0gdGhpcztcbiAgICBpZiAoX21pbkRhdGUpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGF5ID0gbW9tZW50LmRlZmF1bHQoX21pbkRhdGUpO1xuICAgICAgcmV0dXJuIGRheS5pc0JlZm9yZShmaXJzdERheS5zdWJ0cmFjdCgxLCAnZGF5JykpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0ZpcnN0U2VsZWN0ZWQoZGF5KSB7XG4gICAgY29uc3QgeyBfZGF0ZUZvcm0gfSA9IHRoaXM7XG4gICAgY29uc3QgeyBzdGFydERhdGUgfSA9IF9kYXRlRm9ybS52YWx1ZTtcbiAgICByZXR1cm4gZGF5Py5pc1NhbWUoc3RhcnREYXRlKTtcbiAgfVxuXG4gIGlzTGFzdFNlbGVjdGVkKGRheTogYW55KSB7XG4gICAgY29uc3QgeyBfZGF0ZUZvcm0gfSA9IHRoaXM7XG4gICAgY29uc3QgeyBlbmREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XG4gICAgcmV0dXJuIGRheT8uaXNTYW1lKGVuZERhdGUpO1xuICB9XG5cbiAgc2VsZWN0ZWREYXRlKGRheTogYW55KSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgeyBfZGF0ZUZvcm0sIF9taW5EYXRlIH0gPSB0aGlzO1xuICAgIGxldCBkYXlGb3JtYXR0ZWQgPSBkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cbiAgICBpZiAoX21pbkRhdGUpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGF5ID0gbW9tZW50LmRlZmF1bHQoX21pbkRhdGUpO1xuICAgICAgaWYgKGRheS5pc0JlZm9yZShmaXJzdERheS5zdWJ0cmFjdCgxLCAnZGF5JykpKSByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKF9kYXRlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5jbGVhckRhdGVzKCk7XG4gICAgfVxuXG4gICAgbGV0IHsgc3RhcnREYXRlLCBlbmREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgaWYgKG1vbWVudC5kZWZhdWx0KHN0YXJ0RGF0ZSkuaXNBZnRlcihtb21lbnQuZGVmYXVsdChkYXlGb3JtYXR0ZWQpKSkge1xuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlO1xuICAgICAgICBzdGFydERhdGUgPSBkYXlGb3JtYXR0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmREYXRlID0gZGF5Rm9ybWF0dGVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBzdGFydERhdGUgPSBkYXlGb3JtYXR0ZWQ7XG5cbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBfZGF0ZUZvcm0uZ2V0KCdzdGFydERhdGUnKS5wYXRjaFZhbHVlKHN0YXJ0RGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVuZERhdGUpIHtcbiAgICAgIF9kYXRlRm9ybS5nZXQoJ2VuZERhdGUnKS5wYXRjaFZhbHVlKGVuZERhdGUpO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGVWYWx1ZShfZGF0ZUZvcm0udmFsdWUpO1xuICB9XG5cbiAgc2VsZWN0UmFuZ2VPZkRheXMoZGF5czogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgeyBfZGF0ZUZvcm0sIF9taW5EYXRlLCB0b2RheSwgbW92ZURheXNGb3J3YXJkIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgc3RhcnREYXRlIH0gPSBfZGF0ZUZvcm0udmFsdWU7XG5cbiAgICBjb25zdCBmaXJzdERheSA9IG1vbWVudC5kZWZhdWx0KHN0YXJ0RGF0ZSB8fCBfbWluRGF0ZSB8fCB0b2RheSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgY29uc3QgbWV0aG9kID0gbW92ZURheXNGb3J3YXJkID8gJ2FkZCcgOiAnc3VidHJhY3QnO1xuICAgIGNvbnN0IGxhc3REYXkgPSBtb21lbnQuZGVmYXVsdChmaXJzdERheSlbbWV0aG9kXShkYXlzLCAnZGF5JykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgXG4gICAgaWYobW92ZURheXNGb3J3YXJkKXtcbiAgICAgIF9kYXRlRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnBhdGNoVmFsdWUoZmlyc3REYXkpO1xuICAgICAgX2RhdGVGb3JtLmdldCgnZW5kRGF0ZScpLnBhdGNoVmFsdWUobGFzdERheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9kYXRlRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnBhdGNoVmFsdWUobGFzdERheSk7XG4gICAgICBfZGF0ZUZvcm0uZ2V0KCdlbmREYXRlJykucGF0Y2hWYWx1ZShmaXJzdERheSk7XG4gICAgfVxuICAgIHRoaXMud3JpdGVWYWx1ZShfZGF0ZUZvcm0udmFsdWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=