monkey-style-guide-v2 0.0.16 → 0.0.18

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 (271) hide show
  1. package/assets/scss/directives/_badge.scss +49 -0
  2. package/assets/scss/directives/_index.scss +1 -0
  3. package/assets/scss/table/_styles.scss +0 -33
  4. package/esm2022/lib/components/accordion/accordion.component.mjs +102 -0
  5. package/esm2022/lib/components/accordion/index.mjs +7 -0
  6. package/esm2022/lib/components/action-bar/action-bar.component.mjs +46 -0
  7. package/esm2022/lib/components/action-bar/index.mjs +7 -0
  8. package/esm2022/lib/components/alert/alert.component.mjs +50 -0
  9. package/esm2022/lib/components/alert/index.mjs +7 -0
  10. package/esm2022/lib/components/avatar/avatar.component.mjs +55 -0
  11. package/esm2022/lib/components/avatar/index.mjs +7 -0
  12. package/esm2022/lib/components/badge/badge.component.mjs +74 -0
  13. package/esm2022/lib/components/badge/index.mjs +7 -0
  14. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +56 -0
  15. package/esm2022/lib/components/breadcrumb/index.mjs +7 -0
  16. package/esm2022/lib/components/{monkey-button/monkey-button.component.mjs → button/button.component.mjs} +1 -1
  17. package/esm2022/lib/components/button/index.mjs +7 -0
  18. package/esm2022/lib/components/checkbox/checkbox.component.mjs +219 -0
  19. package/esm2022/lib/components/checkbox/index.mjs +7 -0
  20. package/esm2022/lib/components/date-range/date-range.component.mjs +239 -0
  21. package/esm2022/lib/components/date-range/index.mjs +7 -0
  22. package/esm2022/lib/components/date-range/month/index.mjs +7 -0
  23. package/esm2022/lib/components/date-range/month/month.component.mjs +148 -0
  24. package/esm2022/lib/components/date-range/quick-actions/index.mjs +7 -0
  25. package/esm2022/lib/components/date-range/quick-actions/quick-actions.component.mjs +48 -0
  26. package/esm2022/lib/components/date-range/utils.mjs +102 -0
  27. package/esm2022/lib/components/divider/divider.component.mjs +44 -0
  28. package/esm2022/lib/components/divider/index.mjs +7 -0
  29. package/esm2022/lib/components/form-field/form-field-control.mjs +15 -0
  30. package/esm2022/lib/components/form-field/form-field.component.mjs +268 -0
  31. package/esm2022/lib/components/form-field/form-field.module.mjs +21 -0
  32. package/esm2022/lib/components/form-field/index.mjs +10 -0
  33. package/esm2022/lib/components/form-field/utils.mjs +16 -0
  34. package/esm2022/lib/components/icon/icon.component.mjs +51 -0
  35. package/esm2022/lib/components/icon/index.mjs +7 -0
  36. package/esm2022/lib/components/{monkey-icon-button/monkey-icon-button.component.mjs → icon-button/icon-button.component.mjs} +2 -2
  37. package/esm2022/lib/components/icon-button/index.mjs +7 -0
  38. package/esm2022/lib/components/index.mjs +27 -20
  39. package/esm2022/lib/components/input/index.mjs +9 -0
  40. package/esm2022/lib/components/input/input-currency.directive.mjs +185 -0
  41. package/esm2022/lib/components/input/input.directive.mjs +185 -0
  42. package/esm2022/lib/components/input/input.module.mjs +24 -0
  43. package/esm2022/lib/components/input/validators.mjs +22 -0
  44. package/esm2022/lib/components/input-code/index.mjs +7 -0
  45. package/esm2022/lib/components/input-code/input-code.component.mjs +232 -0
  46. package/esm2022/lib/components/input-upload/index.mjs +7 -0
  47. package/esm2022/lib/components/input-upload/input-upload.component.mjs +238 -0
  48. package/esm2022/lib/components/modal/components/default.mjs +70 -0
  49. package/esm2022/lib/components/modal/directives/actions.mjs +29 -0
  50. package/esm2022/lib/components/modal/directives/content.mjs +26 -0
  51. package/esm2022/lib/components/modal/directives/subtitle.mjs +26 -0
  52. package/esm2022/lib/components/modal/directives/title.mjs +26 -0
  53. package/esm2022/lib/components/modal/index.mjs +16 -0
  54. package/esm2022/lib/components/modal/modal-config.mjs +20 -0
  55. package/esm2022/lib/components/modal/modal-ref.mjs +49 -0
  56. package/esm2022/lib/components/modal/modal.component.mjs +117 -0
  57. package/esm2022/lib/components/modal/modal.module.mjs +53 -0
  58. package/esm2022/lib/components/modal/modal.service.mjs +137 -0
  59. package/esm2022/lib/components/modal/utils.mjs +23 -0
  60. package/esm2022/lib/components/option/index.mjs +7 -0
  61. package/esm2022/lib/components/{monkey-option/monkey-option.component.mjs → option/option.component.mjs} +1 -1
  62. package/esm2022/lib/components/security-level/index.mjs +7 -0
  63. package/esm2022/lib/components/{monkey-security-level/monkey-security-level.component.mjs → security-level/security-level.component.mjs} +1 -1
  64. package/esm2022/lib/components/select/index.mjs +7 -0
  65. package/esm2022/lib/components/select/select.component.mjs +448 -0
  66. package/esm2022/lib/components/status/index.mjs +7 -0
  67. package/esm2022/lib/components/{monkey-status/monkey-status.component.mjs → status/status.component.mjs} +1 -1
  68. package/esm2022/lib/components/{monkey-table → table}/components/pagination-action/pagination-action.mjs +2 -2
  69. package/esm2022/lib/components/table/components/pagination-label/pagination-label.mjs +34 -0
  70. package/esm2022/lib/components/table/components/pagination-size/pagination-size.mjs +57 -0
  71. package/esm2022/lib/components/table/directives/column-checked.mjs +109 -0
  72. package/esm2022/lib/components/table/directives/column-expansible.mjs +134 -0
  73. package/esm2022/lib/components/table/directives/column-sortable.mjs +97 -0
  74. package/esm2022/lib/components/{monkey-table → table}/directives/column-stick.mjs +1 -1
  75. package/esm2022/lib/components/table/index.mjs +15 -0
  76. package/esm2022/lib/components/{monkey-table/table.mjs → table/table.component.mjs} +3 -2
  77. package/esm2022/lib/components/table/table.module.mjs +64 -0
  78. package/esm2022/lib/components/toast/index.mjs +7 -0
  79. package/esm2022/lib/components/toast/toast.component.mjs +79 -0
  80. package/esm2022/lib/components/toggle/index.mjs +7 -0
  81. package/esm2022/lib/components/{monkey-toggle/monkey-toggle.component.mjs → toggle/toggle.component.mjs} +6 -1
  82. package/esm2022/lib/components/toggle-line/index.mjs +8 -0
  83. package/esm2022/lib/components/toggle-line/toggle-line-button/index.mjs +7 -0
  84. package/esm2022/lib/components/{monkey-toggle-line/monkey-toggle-line-button/monkey-toggle-line-button.component.mjs → toggle-line/toggle-line-button/toggle-line-button.component.mjs} +3 -3
  85. package/esm2022/lib/components/toggle-line/toggle-line.component.mjs +85 -0
  86. package/esm2022/lib/components/tooltip/index.mjs +8 -0
  87. package/esm2022/lib/components/tooltip/tooltip/index.mjs +7 -0
  88. package/esm2022/lib/components/tooltip/tooltip/tooltip.component.mjs +58 -0
  89. package/esm2022/lib/components/tooltip/tooltip.directive.mjs +180 -0
  90. package/esm2022/lib/directives/badge.mjs +74 -0
  91. package/esm2022/lib/directives/index.mjs +2 -1
  92. package/esm2022/lib/directives/module.mjs +33 -4
  93. package/esm2022/lib/interfaces/sizes.mjs +1 -1
  94. package/esm2022/lib/services/dictionary.service.mjs +224 -0
  95. package/esm2022/lib/services/icons.service.mjs +56 -0
  96. package/esm2022/lib/services/index.mjs +8 -4
  97. package/esm2022/lib/services/toast.service.mjs +72 -0
  98. package/esm2022/lib/tokens/index.mjs +3 -0
  99. package/esm2022/utils/utils.mjs +32 -1
  100. package/fesm2022/monkey-style-guide-v2.mjs +2611 -275
  101. package/fesm2022/monkey-style-guide-v2.mjs.map +1 -1
  102. package/lib/components/accordion/index.d.ts +6 -0
  103. package/lib/components/action-bar/action-bar.component.d.ts +9 -0
  104. package/lib/components/action-bar/index.d.ts +6 -0
  105. package/lib/components/alert/index.d.ts +6 -0
  106. package/lib/components/avatar/avatar.component.d.ts +30 -0
  107. package/lib/components/avatar/index.d.ts +6 -0
  108. package/lib/components/badge/badge.component.d.ts +19 -0
  109. package/lib/components/badge/index.d.ts +6 -0
  110. package/lib/components/breadcrumb/index.d.ts +6 -0
  111. package/lib/components/button/index.d.ts +6 -0
  112. package/lib/components/{monkey-checkbox/monkey-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +1 -1
  113. package/lib/components/checkbox/index.d.ts +6 -0
  114. package/lib/components/date-range/date-range.component.d.ts +59 -0
  115. package/lib/components/date-range/index.d.ts +6 -0
  116. package/lib/components/date-range/month/index.d.ts +6 -0
  117. package/lib/components/date-range/month/month.component.d.ts +38 -0
  118. package/lib/components/date-range/quick-actions/index.d.ts +6 -0
  119. package/lib/components/date-range/quick-actions/quick-actions.component.d.ts +19 -0
  120. package/lib/components/date-range/utils.d.ts +40 -0
  121. package/lib/components/divider/index.d.ts +6 -0
  122. package/lib/components/{monkey-form-field/form-field.d.ts → form-field/form-field.component.d.ts} +9 -4
  123. package/lib/components/{monkey-form-field/module.d.ts → form-field/form-field.module.d.ts} +1 -1
  124. package/lib/components/form-field/index.d.ts +9 -0
  125. package/lib/components/icon/index.d.ts +6 -0
  126. package/lib/components/icon-button/index.d.ts +6 -0
  127. package/lib/components/index.d.ts +26 -19
  128. package/lib/components/input/index.d.ts +8 -0
  129. package/lib/components/{monkey-input/monkey-input-currency.directive.d.ts → input/input-currency.directive.d.ts} +2 -2
  130. package/lib/components/{monkey-input/monkey-input.directive.d.ts → input/input.directive.d.ts} +8 -2
  131. package/lib/components/{monkey-input/monkey-input.module.d.ts → input/input.module.d.ts} +2 -2
  132. package/lib/components/input-code/index.d.ts +6 -0
  133. package/lib/components/input-code/input-code.component.d.ts +48 -0
  134. package/lib/components/input-upload/index.d.ts +6 -0
  135. package/lib/components/input-upload/input-upload.component.d.ts +64 -0
  136. package/lib/components/modal/components/default.d.ts +17 -0
  137. package/lib/components/modal/directives/actions.d.ts +7 -0
  138. package/lib/components/modal/directives/content.d.ts +6 -0
  139. package/lib/components/modal/directives/subtitle.d.ts +6 -0
  140. package/lib/components/modal/directives/title.d.ts +6 -0
  141. package/lib/components/modal/index.d.ts +15 -0
  142. package/lib/components/modal/modal-config.d.ts +34 -0
  143. package/lib/components/modal/modal-ref.d.ts +27 -0
  144. package/lib/components/modal/modal.component.d.ts +22 -0
  145. package/lib/components/modal/modal.module.d.ts +16 -0
  146. package/lib/components/modal/modal.service.d.ts +28 -0
  147. package/lib/components/modal/utils.d.ts +16 -0
  148. package/lib/components/option/index.d.ts +6 -0
  149. package/lib/components/security-level/index.d.ts +6 -0
  150. package/lib/components/select/index.d.ts +6 -0
  151. package/lib/components/{monkey-select/monkey-select.component.d.ts → select/select.component.d.ts} +31 -13
  152. package/lib/components/status/index.d.ts +6 -0
  153. package/lib/components/{monkey-table → table}/directives/column-checked.d.ts +2 -2
  154. package/lib/components/{monkey-table → table}/directives/column-expansible.d.ts +1 -1
  155. package/lib/components/{monkey-table → table}/directives/column-sortable.d.ts +1 -1
  156. package/lib/components/{monkey-table → table}/index.d.ts +6 -1
  157. package/lib/components/table/table.module.d.ts +16 -0
  158. package/lib/components/toast/index.d.ts +6 -0
  159. package/lib/components/{monkey-toast/monkey-toast.component.d.ts → toast/toast.component.d.ts} +5 -0
  160. package/lib/components/toggle/index.d.ts +6 -0
  161. package/lib/components/toggle-line/index.d.ts +7 -0
  162. package/lib/components/toggle-line/toggle-line-button/index.d.ts +6 -0
  163. package/lib/components/{monkey-toggle-line/monkey-toggle-line.component.d.ts → toggle-line/toggle-line.component.d.ts} +1 -1
  164. package/lib/components/tooltip/index.d.ts +7 -0
  165. package/lib/components/tooltip/tooltip/index.d.ts +6 -0
  166. package/lib/directives/badge.d.ts +24 -0
  167. package/lib/directives/index.d.ts +1 -0
  168. package/lib/directives/module.d.ts +2 -1
  169. package/lib/interfaces/sizes.d.ts +1 -1
  170. package/lib/services/dictionary.service.d.ts +11 -0
  171. package/lib/services/{monkey-icons.service.d.ts → icons.service.d.ts} +2 -0
  172. package/lib/services/index.d.ts +7 -3
  173. package/lib/services/{monkey-toast.service.d.ts → toast.service.d.ts} +5 -0
  174. package/lib/tokens/index.d.ts +3 -0
  175. package/monkey-style-guide-v2-0.0.18.tgz +0 -0
  176. package/package.json +2 -1
  177. package/utils/utils.d.ts +5 -0
  178. package/esm2022/lib/components/monkey-accordion/index.mjs +0 -2
  179. package/esm2022/lib/components/monkey-accordion/monkey-accordion.component.mjs +0 -102
  180. package/esm2022/lib/components/monkey-alert/index.mjs +0 -2
  181. package/esm2022/lib/components/monkey-alert/monkey-alert.component.mjs +0 -50
  182. package/esm2022/lib/components/monkey-breadcrumb/index.mjs +0 -2
  183. package/esm2022/lib/components/monkey-breadcrumb/monkey-breadcrumb.component.mjs +0 -56
  184. package/esm2022/lib/components/monkey-button/index.mjs +0 -2
  185. package/esm2022/lib/components/monkey-checkbox/index.mjs +0 -2
  186. package/esm2022/lib/components/monkey-checkbox/monkey-checkbox.component.mjs +0 -216
  187. package/esm2022/lib/components/monkey-divider/index.mjs +0 -2
  188. package/esm2022/lib/components/monkey-divider/monkey-divider.component.mjs +0 -44
  189. package/esm2022/lib/components/monkey-form-field/form-field-control.mjs +0 -15
  190. package/esm2022/lib/components/monkey-form-field/form-field.mjs +0 -250
  191. package/esm2022/lib/components/monkey-form-field/index.mjs +0 -5
  192. package/esm2022/lib/components/monkey-form-field/module.mjs +0 -21
  193. package/esm2022/lib/components/monkey-form-field/utils.mjs +0 -16
  194. package/esm2022/lib/components/monkey-icon/index.mjs +0 -2
  195. package/esm2022/lib/components/monkey-icon/monkey-icon.component.mjs +0 -51
  196. package/esm2022/lib/components/monkey-icon-button/index.mjs +0 -2
  197. package/esm2022/lib/components/monkey-input/index.mjs +0 -5
  198. package/esm2022/lib/components/monkey-input/monkey-input-currency.directive.mjs +0 -187
  199. package/esm2022/lib/components/monkey-input/monkey-input.directive.mjs +0 -166
  200. package/esm2022/lib/components/monkey-input/monkey-input.module.mjs +0 -24
  201. package/esm2022/lib/components/monkey-input/validators.mjs +0 -17
  202. package/esm2022/lib/components/monkey-option/index.mjs +0 -2
  203. package/esm2022/lib/components/monkey-security-level/index.mjs +0 -2
  204. package/esm2022/lib/components/monkey-select/index.mjs +0 -2
  205. package/esm2022/lib/components/monkey-select/monkey-select.component.mjs +0 -352
  206. package/esm2022/lib/components/monkey-status/index.mjs +0 -2
  207. package/esm2022/lib/components/monkey-table/components/pagination-label/pagination-label.mjs +0 -34
  208. package/esm2022/lib/components/monkey-table/components/pagination-size/pagination-size.mjs +0 -57
  209. package/esm2022/lib/components/monkey-table/directives/column-checked.mjs +0 -109
  210. package/esm2022/lib/components/monkey-table/directives/column-expansible.mjs +0 -134
  211. package/esm2022/lib/components/monkey-table/directives/column-sortable.mjs +0 -97
  212. package/esm2022/lib/components/monkey-table/index.mjs +0 -10
  213. package/esm2022/lib/components/monkey-table/table.module.mjs +0 -60
  214. package/esm2022/lib/components/monkey-toast/index.mjs +0 -2
  215. package/esm2022/lib/components/monkey-toast/monkey-toast.component.mjs +0 -74
  216. package/esm2022/lib/components/monkey-toggle/index.mjs +0 -2
  217. package/esm2022/lib/components/monkey-toggle-line/index.mjs +0 -3
  218. package/esm2022/lib/components/monkey-toggle-line/monkey-toggle-line-button/index.mjs +0 -2
  219. package/esm2022/lib/components/monkey-toggle-line/monkey-toggle-line.component.mjs +0 -85
  220. package/esm2022/lib/components/monkey-tooltip/index.mjs +0 -3
  221. package/esm2022/lib/components/monkey-tooltip/monkey-tooltip.directive.mjs +0 -175
  222. package/esm2022/lib/components/monkey-tooltip/tooltip/index.mjs +0 -2
  223. package/esm2022/lib/components/monkey-tooltip/tooltip/tooltip.component.mjs +0 -53
  224. package/esm2022/lib/services/monkey-destroy.service.mjs +0 -15
  225. package/esm2022/lib/services/monkey-icons.service.mjs +0 -45
  226. package/esm2022/lib/services/monkey-toast.service.mjs +0 -72
  227. package/lib/components/monkey-accordion/index.d.ts +0 -1
  228. package/lib/components/monkey-alert/index.d.ts +0 -1
  229. package/lib/components/monkey-breadcrumb/index.d.ts +0 -1
  230. package/lib/components/monkey-button/index.d.ts +0 -1
  231. package/lib/components/monkey-checkbox/index.d.ts +0 -1
  232. package/lib/components/monkey-divider/index.d.ts +0 -1
  233. package/lib/components/monkey-form-field/index.d.ts +0 -4
  234. package/lib/components/monkey-icon/index.d.ts +0 -1
  235. package/lib/components/monkey-icon-button/index.d.ts +0 -1
  236. package/lib/components/monkey-input/index.d.ts +0 -4
  237. package/lib/components/monkey-option/index.d.ts +0 -1
  238. package/lib/components/monkey-security-level/index.d.ts +0 -1
  239. package/lib/components/monkey-select/index.d.ts +0 -1
  240. package/lib/components/monkey-status/index.d.ts +0 -1
  241. package/lib/components/monkey-table/table.module.d.ts +0 -15
  242. package/lib/components/monkey-toast/index.d.ts +0 -1
  243. package/lib/components/monkey-toggle/index.d.ts +0 -1
  244. package/lib/components/monkey-toggle-line/index.d.ts +0 -2
  245. package/lib/components/monkey-toggle-line/monkey-toggle-line-button/index.d.ts +0 -1
  246. package/lib/components/monkey-tooltip/index.d.ts +0 -2
  247. package/lib/components/monkey-tooltip/tooltip/index.d.ts +0 -1
  248. package/lib/services/monkey-destroy.service.d.ts +0 -8
  249. package/monkey-style-guide-v2-0.0.16.tgz +0 -0
  250. /package/lib/components/{monkey-accordion/monkey-accordion.component.d.ts → accordion/accordion.component.d.ts} +0 -0
  251. /package/lib/components/{monkey-alert/monkey-alert.component.d.ts → alert/alert.component.d.ts} +0 -0
  252. /package/lib/components/{monkey-breadcrumb/monkey-breadcrumb.component.d.ts → breadcrumb/breadcrumb.component.d.ts} +0 -0
  253. /package/lib/components/{monkey-button/monkey-button.component.d.ts → button/button.component.d.ts} +0 -0
  254. /package/lib/components/{monkey-divider/monkey-divider.component.d.ts → divider/divider.component.d.ts} +0 -0
  255. /package/lib/components/{monkey-form-field → form-field}/form-field-control.d.ts +0 -0
  256. /package/lib/components/{monkey-form-field → form-field}/utils.d.ts +0 -0
  257. /package/lib/components/{monkey-icon/monkey-icon.component.d.ts → icon/icon.component.d.ts} +0 -0
  258. /package/lib/components/{monkey-icon-button/monkey-icon-button.component.d.ts → icon-button/icon-button.component.d.ts} +0 -0
  259. /package/lib/components/{monkey-input → input}/validators.d.ts +0 -0
  260. /package/lib/components/{monkey-option/monkey-option.component.d.ts → option/option.component.d.ts} +0 -0
  261. /package/lib/components/{monkey-security-level/monkey-security-level.component.d.ts → security-level/security-level.component.d.ts} +0 -0
  262. /package/lib/components/{monkey-status/monkey-status.component.d.ts → status/status.component.d.ts} +0 -0
  263. /package/lib/components/{monkey-table → table}/components/pagination-action/pagination-action.d.ts +0 -0
  264. /package/lib/components/{monkey-table → table}/components/pagination-label/pagination-label.d.ts +0 -0
  265. /package/lib/components/{monkey-table → table}/components/pagination-size/pagination-size.d.ts +0 -0
  266. /package/lib/components/{monkey-table → table}/directives/column-stick.d.ts +0 -0
  267. /package/lib/components/{monkey-table/table.d.ts → table/table.component.d.ts} +0 -0
  268. /package/lib/components/{monkey-toggle/monkey-toggle.component.d.ts → toggle/toggle.component.d.ts} +0 -0
  269. /package/lib/components/{monkey-toggle-line/monkey-toggle-line-button/monkey-toggle-line-button.component.d.ts → toggle-line/toggle-line-button/toggle-line-button.component.d.ts} +0 -0
  270. /package/lib/components/{monkey-tooltip → tooltip}/tooltip/tooltip.component.d.ts +0 -0
  271. /package/lib/components/{monkey-tooltip/monkey-tooltip.directive.d.ts → tooltip/tooltip.directive.d.ts} +0 -0
@@ -0,0 +1,239 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ import { CommonModule } from '@angular/common';
7
+ import { booleanAttribute, Component, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { addDays, isAfter, isBefore, subDays } from 'date-fns';
10
+ import { IdGenerator } from '../../../utils';
11
+ import { MonkeyDirectivesModule } from '../../directives';
12
+ import { MonkeyDictionaryService } from '../../services/dictionary.service';
13
+ import { MonkeyButtonComponent } from '../button';
14
+ import { MonkeyFormFieldModule } from '../form-field';
15
+ import { MonkeyInputModule } from '../input';
16
+ import { MonkeyDateRangeMonthComponent } from './month';
17
+ import { MonkeyDateRangeQuickActionsComponent } from './quick-actions';
18
+ import * as Utils from './utils';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "@angular/common";
21
+ import * as i2 from "@angular/forms";
22
+ import * as i3 from "../input/input.directive";
23
+ import * as i4 from "../form-field/form-field.component";
24
+ import * as i5 from "../../directives/error";
25
+ import * as i6 from "../../directives/label";
26
+ export class MonkeyDateRangeComponent {
27
+ set startDate(val) {
28
+ this.handledStartDate = val;
29
+ }
30
+ set endDate(val) {
31
+ this.handledEndDate = val;
32
+ }
33
+ set minDate(val) {
34
+ this.handledMinDate = Utils.parseStringDate(val);
35
+ }
36
+ set maxDate(val) {
37
+ this.handledMaxDate = Utils.parseStringDate(val);
38
+ }
39
+ get id() {
40
+ return this._id;
41
+ }
42
+ set id(value) {
43
+ this._id = value || this._uid;
44
+ }
45
+ constructor() {
46
+ this.onCancel = new EventEmitter();
47
+ this.onDate = new EventEmitter();
48
+ this._uid = inject(IdGenerator).getId('monkey-date-range-');
49
+ this._screenWidth = window.innerWidth;
50
+ this._allowChangeFastAction = true;
51
+ this._allowChangeSecondCalendar = true;
52
+ this._today = new Date();
53
+ this.i18nDictionary = inject(MonkeyDictionaryService).get('DATE-RANGE');
54
+ this.isInvalidInterval = false;
55
+ this.handledMinDate = Utils.getDefaultdates().minDate;
56
+ this.handledMaxDate = Utils.getDefaultdates().maxDate;
57
+ // eslint-disable-next-line no-self-assign
58
+ this.id = this.id;
59
+ }
60
+ handleInitialValues() {
61
+ const calendars = Utils.buildCalendars(this.handledStartDate || new Date());
62
+ this.firstCalendar = calendars.firstCalendar;
63
+ this.secondCalendar = calendars.secondCalendar;
64
+ }
65
+ handleProperties() {
66
+ if (this._screenWidth < 950) {
67
+ if (this._allowChangeFastAction) {
68
+ this.hideQuickAction = true;
69
+ this.allowFastActionOnHeader = false;
70
+ }
71
+ if (this._allowChangeSecondCalendar) {
72
+ this.hideSecondCalendar = true;
73
+ }
74
+ }
75
+ else {
76
+ if (this._allowChangeFastAction) {
77
+ this.hideQuickAction = false;
78
+ this.allowFastActionOnHeader = false;
79
+ }
80
+ if (this._allowChangeSecondCalendar) {
81
+ this.hideSecondCalendar = false;
82
+ }
83
+ }
84
+ }
85
+ handleInputChange(event, isStart) {
86
+ const input = event.target;
87
+ const { value } = input;
88
+ const [year] = value.split('-');
89
+ if (`${Number(year)}`.length < 4)
90
+ return;
91
+ if (!input.checkValidity()) {
92
+ event.preventDefault();
93
+ input.value = '';
94
+ this.isInvalidInterval = true;
95
+ return;
96
+ }
97
+ this.isInvalidInterval = false;
98
+ if (isStart) {
99
+ this.handledStartDate = value;
100
+ }
101
+ else {
102
+ this.handledEndDate = value;
103
+ }
104
+ if (this.hideActions) {
105
+ this.onSubmit();
106
+ }
107
+ }
108
+ onResize(event) {
109
+ this._screenWidth = event.target.innerWidth;
110
+ this.handleProperties();
111
+ }
112
+ ngOnInit() {
113
+ if (this.hideQuickAction) {
114
+ this._allowChangeFastAction = false;
115
+ }
116
+ if (this.hideSecondCalendar) {
117
+ this._allowChangeSecondCalendar = false;
118
+ }
119
+ if (this.allowFastActionOnHeader) {
120
+ this._allowChangeFastAction = false;
121
+ this.hideQuickAction = true;
122
+ }
123
+ this.handleInitialValues();
124
+ this.handleProperties();
125
+ }
126
+ onHandleDate({ startDate, endDate }) {
127
+ this.handledStartDate = startDate;
128
+ this.handledEndDate = endDate;
129
+ if (this.hideActions) {
130
+ this.onSubmit();
131
+ }
132
+ }
133
+ onSubmit() {
134
+ this.onDate.next({
135
+ startDate: this.handledStartDate ?? '',
136
+ endDate: this.handledEndDate ?? ''
137
+ });
138
+ }
139
+ onHandleQuickAction(event) {
140
+ const isBackward = event < 0;
141
+ const days = Math.abs(event);
142
+ if (isBackward) {
143
+ const baseDate = Utils.parseStringDate(this.handledEndDate || this.handledStartDate || this._today);
144
+ let startDate = subDays(baseDate, days);
145
+ if (isBefore(startDate, this.handledMinDate)) {
146
+ startDate = this.handledMinDate;
147
+ }
148
+ this.handledStartDate = Utils.parseStringDate(startDate);
149
+ this.handledEndDate = Utils.parseStringDate(baseDate);
150
+ }
151
+ else {
152
+ const baseDate = Utils.parseStringDate(this.handledStartDate || this.handledEndDate || this._today);
153
+ let endDate = addDays(baseDate, days);
154
+ if (isAfter(endDate, this.handledMaxDate)) {
155
+ endDate = this.handledMaxDate;
156
+ }
157
+ this.handledStartDate = Utils.parseStringDate(baseDate);
158
+ this.handledEndDate = Utils.parseStringDate(endDate);
159
+ }
160
+ }
161
+ onChangeInputStartDate(event) {
162
+ this.handleInputChange(event, true);
163
+ }
164
+ onChangeInputEndDate(event) {
165
+ this.handleInputChange(event, false);
166
+ }
167
+ onDataChange(event, isStart) {
168
+ if (isStart) {
169
+ this.handledStartDate = event;
170
+ this.handledEndDate = '';
171
+ }
172
+ else {
173
+ this.handledEndDate = event;
174
+ }
175
+ if (this.hideActions) {
176
+ this.onSubmit();
177
+ }
178
+ }
179
+ onHandleNavigate(action) {
180
+ if (!action)
181
+ return;
182
+ const date = new Date(this.firstCalendar.year, this.firstCalendar.month, 1);
183
+ const calendars = Utils.buildCalendars(date, action);
184
+ this.firstCalendar = calendars.firstCalendar;
185
+ this.secondCalendar = calendars.secondCalendar;
186
+ }
187
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
188
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MonkeyDateRangeComponent, isStandalone: true, selector: "monkey-date-range", inputs: { startDate: "startDate", endDate: "endDate", hideQuickAction: ["hideQuickAction", "hideQuickAction", booleanAttribute], hideHeader: ["hideHeader", "hideHeader", booleanAttribute], hideActions: ["hideActions", "hideActions", booleanAttribute], hideSecondCalendar: ["hideSecondCalendar", "hideSecondCalendar", booleanAttribute], allowFastActionOnHeader: ["allowFastActionOnHeader", "allowFastActionOnHeader", booleanAttribute], minDate: "minDate", maxDate: "maxDate", id: "id" }, outputs: { onCancel: "onCancel", onDate: "onDate" }, host: { attributes: { "data-testid": "monkey-date-range" }, listeners: { "window:resize": "onResize($event)" }, properties: { "attr.id": "id", "id": "id" } }, ngImport: i0, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n <div class=\"container-group\">\n @if (!hideQuickAction) {\n <div class=\"quick-actions\">\n <monkey-date-range-quick-actions (onChange)=\"onHandleQuickAction($event)\">\n </monkey-date-range-quick-actions>\n </div>\n }\n\n <div class=\"container\">\n @if (!hideHeader) {\n <div class=\"header\" [class.no-quick-action]=\"hideQuickAction\">\n @if (allowFastActionOnHeader) {\n <div class=\"quick-actions\">\n <monkey-date-range-quick-actions (onChange)=\"onHandleQuickAction($event)\">\n </monkey-date-range-quick-actions>\n </div>\n } @else {\n <div class=\"inputs\">\n <monkey-form-field hideAction enableClear size=\"sm\">\n <monkey-label>{{ i18n?.['START-DATE'] }}</monkey-label>\n <input\n type=\"date\"\n monkey-input\n id=\"startDate\"\n [(ngModel)]=\"handledStartDate\"\n (ngModelChange)=\"onDataChange($event, true)\"\n [min]=\"handledMinDate\"\n [max]=\"handledEndDate ? handledEndDate : handledMaxDate\"\n (change)=\"onChangeInputStartDate($event)\"\n />\n </monkey-form-field>\n <monkey-form-field hideAction enableClear size=\"sm\">\n <monkey-label>{{ i18n?.['END-DATE'] }}</monkey-label>\n <input\n type=\"date\"\n monkey-input\n id=\"endDate\"\n [(ngModel)]=\"handledEndDate\"\n (ngModelChange)=\"onDataChange($event, false)\"\n [min]=\"handledStartDate ? handledStartDate : ''\"\n [max]=\"handledMaxDate\"\n (change)=\"onChangeInputEndDate($event)\"\n />\n </monkey-form-field>\n </div>\n @if (isInvalidInterval) {\n <monkey-error>{{ i18n?.['INVALID'] }}</monkey-error>\n }\n }\n </div>\n }\n\n <div class=\"body\">\n <div class=\"calendars\">\n <monkey-date-range-month\n [month]=\"firstCalendar.month\"\n [year]=\"firstCalendar.year\"\n [startDate]=\"handledStartDate\"\n [endDate]=\"handledEndDate\"\n (onDate)=\"onHandleDate($event)\"\n (onNavigate)=\"onHandleNavigate($event)\"\n [hideNext]=\"!hideSecondCalendar\"\n [minDate]=\"handledMinDate\"\n [maxDate]=\"handledMaxDate\"\n >\n </monkey-date-range-month>\n\n @if (!hideSecondCalendar) {\n <monkey-date-range-month\n [month]=\"secondCalendar.month\"\n [year]=\"secondCalendar.year\"\n [startDate]=\"handledStartDate\"\n [endDate]=\"handledEndDate\"\n (onDate)=\"onHandleDate($event)\"\n (onNavigate)=\"onHandleNavigate($event)\"\n hidePrevious\n [minDate]=\"handledMinDate\"\n [maxDate]=\"handledMaxDate\"\n >\n </monkey-date-range-month>\n }\n </div>\n </div>\n\n @if (!hideActions) {\n <div class=\"actions\">\n <monkey-button size=\"md\" type=\"secondary\" (click)=\"onCancel.next(null)\">\n {{ i18n?.ACTIONS?.CANCEL }}\n </monkey-button>\n <monkey-button\n size=\"md\"\n (click)=\"onSubmit()\"\n [disabled]=\"!this.handledStartDate || !this.handledEndDate\"\n >\n {{ i18n?.ACTIONS?.APPLY }}\n </monkey-button>\n </div>\n }\n </div>\n </div>\n</ng-container>\n", styles: [":host{display:block;border:2px solid var(--mecx-color-gray-200);border-radius:16px}:host .container-group{width:100%;display:inline-flex}:host .container-group .quick-actions{width:100%;max-width:172px;border-top-left-radius:16px;border-bottom-left-radius:16px;border-right:2px solid var(--mecx-color-gray-200);background:var(--mecx-color-white)}:host .container-group .container{width:100%;display:inline-flex;flex-direction:column}:host .header{padding:16px 24px;border-radius:1px 16px 1px 1px;border-bottom:1px solid var(--mecx-color-gray-200);background:var(--mecx-color-gray-50)}:host .header .quick-actions{max-width:unset;border:unset}:host .header .quick-actions monkey-date-range-quick-actions{flex-flow:row wrap;padding:unset;justify-content:space-between;background:var(--mecx-color-gray-50)}:host .header.no-quick-action{border-top-left-radius:16px}:host .header .inputs{max-width:400px;display:flex;gap:16px}:host .header monkey-error{margin-top:2px}:host .body{padding:16px 24px}:host .body .calendars{display:inline-flex;width:100%;gap:48px}:host .actions{border-top:1px solid var(--mecx-color-gray-200);padding:16px 24px;display:flex;justify-content:flex-end;align-items:center;gap:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MonkeyInputModule }, { kind: "directive", type: i3.MonkeyInputDirective, selector: "input[monkey-input],textarea[monkey-input]", inputs: ["name", "disabled", "id", "required", "type", "min", "max", "percent"], exportAs: ["monkeyInput"] }, { kind: "ngmodule", type: MonkeyFormFieldModule }, { kind: "component", type: i4.MonkeyFormFieldComponent, selector: "monkey-form-field", inputs: ["id", "hideAction", "enableClear", "size"], exportAs: ["monkeyFormField"] }, { kind: "ngmodule", type: MonkeyDirectivesModule }, { kind: "directive", type: i5.MonkeyError, selector: "monkey-error" }, { kind: "directive", type: i6.MonkeyLabel, selector: "monkey-label" }, { kind: "component", type: MonkeyButtonComponent, selector: "monkey-button", inputs: ["disabled", "size", "type", "id"] }, { kind: "component", type: MonkeyDateRangeMonthComponent, selector: "monkey-date-range-month", inputs: ["month", "year", "startDate", "endDate", "hidePrevious", "hideNext", "minDate", "maxDate", "id"], outputs: ["onNavigate", "onDate"] }, { kind: "component", type: MonkeyDateRangeQuickActionsComponent, selector: "monkey-date-range-quick-actions", inputs: ["id"], outputs: ["onChange"] }] }); }
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeComponent, decorators: [{
191
+ type: Component,
192
+ args: [{ selector: 'monkey-date-range', standalone: true, imports: [
193
+ CommonModule,
194
+ FormsModule,
195
+ MonkeyInputModule,
196
+ MonkeyFormFieldModule,
197
+ MonkeyDirectivesModule,
198
+ MonkeyButtonComponent,
199
+ MonkeyDateRangeMonthComponent,
200
+ MonkeyDateRangeQuickActionsComponent
201
+ ], host: {
202
+ 'data-testid': 'monkey-date-range',
203
+ '[attr.id]': 'id',
204
+ '[id]': 'id'
205
+ }, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n <div class=\"container-group\">\n @if (!hideQuickAction) {\n <div class=\"quick-actions\">\n <monkey-date-range-quick-actions (onChange)=\"onHandleQuickAction($event)\">\n </monkey-date-range-quick-actions>\n </div>\n }\n\n <div class=\"container\">\n @if (!hideHeader) {\n <div class=\"header\" [class.no-quick-action]=\"hideQuickAction\">\n @if (allowFastActionOnHeader) {\n <div class=\"quick-actions\">\n <monkey-date-range-quick-actions (onChange)=\"onHandleQuickAction($event)\">\n </monkey-date-range-quick-actions>\n </div>\n } @else {\n <div class=\"inputs\">\n <monkey-form-field hideAction enableClear size=\"sm\">\n <monkey-label>{{ i18n?.['START-DATE'] }}</monkey-label>\n <input\n type=\"date\"\n monkey-input\n id=\"startDate\"\n [(ngModel)]=\"handledStartDate\"\n (ngModelChange)=\"onDataChange($event, true)\"\n [min]=\"handledMinDate\"\n [max]=\"handledEndDate ? handledEndDate : handledMaxDate\"\n (change)=\"onChangeInputStartDate($event)\"\n />\n </monkey-form-field>\n <monkey-form-field hideAction enableClear size=\"sm\">\n <monkey-label>{{ i18n?.['END-DATE'] }}</monkey-label>\n <input\n type=\"date\"\n monkey-input\n id=\"endDate\"\n [(ngModel)]=\"handledEndDate\"\n (ngModelChange)=\"onDataChange($event, false)\"\n [min]=\"handledStartDate ? handledStartDate : ''\"\n [max]=\"handledMaxDate\"\n (change)=\"onChangeInputEndDate($event)\"\n />\n </monkey-form-field>\n </div>\n @if (isInvalidInterval) {\n <monkey-error>{{ i18n?.['INVALID'] }}</monkey-error>\n }\n }\n </div>\n }\n\n <div class=\"body\">\n <div class=\"calendars\">\n <monkey-date-range-month\n [month]=\"firstCalendar.month\"\n [year]=\"firstCalendar.year\"\n [startDate]=\"handledStartDate\"\n [endDate]=\"handledEndDate\"\n (onDate)=\"onHandleDate($event)\"\n (onNavigate)=\"onHandleNavigate($event)\"\n [hideNext]=\"!hideSecondCalendar\"\n [minDate]=\"handledMinDate\"\n [maxDate]=\"handledMaxDate\"\n >\n </monkey-date-range-month>\n\n @if (!hideSecondCalendar) {\n <monkey-date-range-month\n [month]=\"secondCalendar.month\"\n [year]=\"secondCalendar.year\"\n [startDate]=\"handledStartDate\"\n [endDate]=\"handledEndDate\"\n (onDate)=\"onHandleDate($event)\"\n (onNavigate)=\"onHandleNavigate($event)\"\n hidePrevious\n [minDate]=\"handledMinDate\"\n [maxDate]=\"handledMaxDate\"\n >\n </monkey-date-range-month>\n }\n </div>\n </div>\n\n @if (!hideActions) {\n <div class=\"actions\">\n <monkey-button size=\"md\" type=\"secondary\" (click)=\"onCancel.next(null)\">\n {{ i18n?.ACTIONS?.CANCEL }}\n </monkey-button>\n <monkey-button\n size=\"md\"\n (click)=\"onSubmit()\"\n [disabled]=\"!this.handledStartDate || !this.handledEndDate\"\n >\n {{ i18n?.ACTIONS?.APPLY }}\n </monkey-button>\n </div>\n }\n </div>\n </div>\n</ng-container>\n", styles: [":host{display:block;border:2px solid var(--mecx-color-gray-200);border-radius:16px}:host .container-group{width:100%;display:inline-flex}:host .container-group .quick-actions{width:100%;max-width:172px;border-top-left-radius:16px;border-bottom-left-radius:16px;border-right:2px solid var(--mecx-color-gray-200);background:var(--mecx-color-white)}:host .container-group .container{width:100%;display:inline-flex;flex-direction:column}:host .header{padding:16px 24px;border-radius:1px 16px 1px 1px;border-bottom:1px solid var(--mecx-color-gray-200);background:var(--mecx-color-gray-50)}:host .header .quick-actions{max-width:unset;border:unset}:host .header .quick-actions monkey-date-range-quick-actions{flex-flow:row wrap;padding:unset;justify-content:space-between;background:var(--mecx-color-gray-50)}:host .header.no-quick-action{border-top-left-radius:16px}:host .header .inputs{max-width:400px;display:flex;gap:16px}:host .header monkey-error{margin-top:2px}:host .body{padding:16px 24px}:host .body .calendars{display:inline-flex;width:100%;gap:48px}:host .actions{border-top:1px solid var(--mecx-color-gray-200);padding:16px 24px;display:flex;justify-content:flex-end;align-items:center;gap:16px}\n"] }]
206
+ }], ctorParameters: () => [], propDecorators: { startDate: [{
207
+ type: Input
208
+ }], endDate: [{
209
+ type: Input
210
+ }], hideQuickAction: [{
211
+ type: Input,
212
+ args: [{ transform: booleanAttribute }]
213
+ }], hideHeader: [{
214
+ type: Input,
215
+ args: [{ transform: booleanAttribute }]
216
+ }], hideActions: [{
217
+ type: Input,
218
+ args: [{ transform: booleanAttribute }]
219
+ }], hideSecondCalendar: [{
220
+ type: Input,
221
+ args: [{ transform: booleanAttribute }]
222
+ }], allowFastActionOnHeader: [{
223
+ type: Input,
224
+ args: [{ transform: booleanAttribute }]
225
+ }], minDate: [{
226
+ type: Input
227
+ }], maxDate: [{
228
+ type: Input
229
+ }], onCancel: [{
230
+ type: Output
231
+ }], onDate: [{
232
+ type: Output
233
+ }], id: [{
234
+ type: Input
235
+ }], onResize: [{
236
+ type: HostListener,
237
+ args: ['window:resize', ['$event']]
238
+ }] } });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs2QkFJNkI7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4RCxPQUFP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QkFBd0I7a0JBckJwQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsNkJBQTZCO3dCQUM3QixvQ0FBb0M7cUJBQ3JDLFFBR0s7d0JBQ0osYUFBYSxFQUFFLG1CQUFtQjt3QkFDbEMsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO3dEQUdZLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLFVBQVU7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsV0FBVztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUl0QyxrQkFBa0I7c0JBRGpCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLHVCQUF1QjtzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHekIsT0FBTztzQkFBbkIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQU9ILEVBQUU7c0JBREwsS0FBSztnQkEyRk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCBNb25rZXkgRXhjaGFuZ2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqIFRoaXMgc3R5bGUgZ3VpZGUgd2FzIGRldmVsb3BlZCBieSBNb25rZXkgRXhjaGFuZ2UgVGVhbVxuICogTUlUIExpY2VuY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGFkZERheXMsIGlzQWZ0ZXIsIGlzQmVmb3JlLCBzdWJEYXlzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBNb25rZXlEaXJlY3RpdmVzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBNb25rZXlEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBNb25rZXlCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgTW9ua2V5Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnLi4vZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNb25rZXlJbnB1dE1vZHVsZSB9IGZyb20gJy4uL2lucHV0JztcbmltcG9ydCB7IE1vbmtleURhdGVSYW5nZU1vbnRoQ29tcG9uZW50IH0gZnJvbSAnLi9tb250aCc7XG5pbXBvcnQgeyBNb25rZXlEYXRlUmFuZ2VRdWlja0FjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3F1aWNrLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBDYWxlbmRhciB7XG4gIG1vbnRoOiBudW1iZXI7XG4gIHllYXI6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbW9ua2V5LWRhdGUtcmFuZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1vbmtleUlucHV0TW9kdWxlLFxuICAgIE1vbmtleUZvcm1GaWVsZE1vZHVsZSxcbiAgICBNb25rZXlEaXJlY3RpdmVzTW9kdWxlLFxuICAgIE1vbmtleUJ1dHRvbkNvbXBvbmVudCxcbiAgICBNb25rZXlEYXRlUmFuZ2VNb250aENvbXBvbmVudCxcbiAgICBNb25rZXlEYXRlUmFuZ2VRdWlja0FjdGlvbnNDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0ZS1yYW5nZS5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHtcbiAgICAnZGF0YS10ZXN0aWQnOiAnbW9ua2V5LWRhdGUtcmFuZ2UnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbaWRdJzogJ2lkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE1vbmtleURhdGVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNldCBzdGFydERhdGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmhhbmRsZWRTdGFydERhdGUgPSB2YWw7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZW5kRGF0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlZEVuZERhdGUgPSB2YWw7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaGlkZVF1aWNrQWN0aW9uITogYm9vbGVhbjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaGlkZUhlYWRlciE6IGJvb2xlYW47XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGhpZGVBY3Rpb25zITogYm9vbGVhbjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaGlkZVNlY29uZENhbGVuZGFyITogYm9vbGVhbjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgYWxsb3dGYXN0QWN0aW9uT25IZWFkZXIhOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHNldCBtaW5EYXRlKHZhbDogRGF0ZSB8IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlZE1pbkRhdGUgPSBVdGlscy5wYXJzZVN0cmluZ0RhdGUodmFsKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtYXhEYXRlKHZhbDogRGF0ZSB8IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlZE1heERhdGUgPSBVdGlscy5wYXJzZVN0cmluZ0RhdGUodmFsKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25EYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByb3RlY3RlZCBfdWlkID0gaW5qZWN0KElkR2VuZXJhdG9yKS5nZXRJZCgnbW9ua2V5LWRhdGUtcmFuZ2UtJyk7XG5cbiAgcHJvdGVjdGVkIF9pZCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy5fdWlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NyZWVuV2lkdGg6IG51bWJlciA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gIHByaXZhdGUgX2FsbG93Q2hhbmdlRmFzdEFjdGlvbiA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfYWxsb3dDaGFuZ2VTZWNvbmRDYWxlbmRhciA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdG9kYXkgPSBuZXcgRGF0ZSgpO1xuXG4gIHJlYWRvbmx5IGkxOG5EaWN0aW9uYXJ5ID0gaW5qZWN0KE1vbmtleURpY3Rpb25hcnlTZXJ2aWNlKS5nZXQoJ0RBVEUtUkFOR0UnKTtcblxuICBoYW5kbGVkU3RhcnREYXRlITogc3RyaW5nO1xuXG4gIGhhbmRsZWRFbmREYXRlITogc3RyaW5nO1xuXG4gIGZpcnN0Q2FsZW5kYXIhOiBDYWxlbmRhcjtcblxuICBzZWNvbmRDYWxlbmRhciE6IENhbGVuZGFyO1xuXG4gIGlzSW52YWxpZEludGVydmFsID0gZmFsc2U7XG5cbiAgaGFuZGxlZE1pbkRhdGU6IHN0cmluZyA9IFV0aWxzLmdldERlZmF1bHRkYXRlcygpLm1pbkRhdGU7XG5cbiAgaGFuZGxlZE1heERhdGU6IHN0cmluZyA9IFV0aWxzLmdldERlZmF1bHRkYXRlcygpLm1heERhdGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgdGhpcy5pZCA9IHRoaXMuaWQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUluaXRpYWxWYWx1ZXMoKSB7XG4gICAgY29uc3QgY2FsZW5kYXJzID0gVXRpbHMuYnVpbGRDYWxlbmRhcnModGhpcy5oYW5kbGVkU3RhcnREYXRlIHx8IG5ldyBEYXRlKCkpO1xuICAgIHRoaXMuZmlyc3RDYWxlbmRhciA9IGNhbGVuZGFycy5maXJzdENhbGVuZGFyO1xuICAgIHRoaXMuc2Vjb25kQ2FsZW5kYXIgPSBjYWxlbmRhcnMuc2Vjb25kQ2FsZW5kYXI7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMuX3NjcmVlbldpZHRoIDwgOTUwKSB7XG4gICAgICBpZiAodGhpcy5fYWxsb3dDaGFuZ2VGYXN0QWN0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlkZVF1aWNrQWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbGxvd0Zhc3RBY3Rpb25PbkhlYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2FsbG93Q2hhbmdlU2Vjb25kQ2FsZW5kYXIpIHtcbiAgICAgICAgdGhpcy5oaWRlU2Vjb25kQ2FsZW5kYXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fYWxsb3dDaGFuZ2VGYXN0QWN0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlkZVF1aWNrQWN0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWxsb3dGYXN0QWN0aW9uT25IZWFkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9hbGxvd0NoYW5nZVNlY29uZENhbGVuZGFyKSB7XG4gICAgICAgIHRoaXMuaGlkZVNlY29uZENhbGVuZGFyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dENoYW5nZShldmVudDogRXZlbnQsIGlzU3RhcnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0O1xuICAgIGNvbnN0IFt5ZWFyXSA9IHZhbHVlLnNwbGl0KCctJyk7XG4gICAgaWYgKGAke051bWJlcih5ZWFyKX1gLmxlbmd0aCA8IDQpIHJldHVybjtcblxuICAgIGlmICghaW5wdXQuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuaXNJbnZhbGlkSW50ZXJ2YWwgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNJbnZhbGlkSW50ZXJ2YWwgPSBmYWxzZTtcblxuICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICB0aGlzLmhhbmRsZWRTdGFydERhdGUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVkRW5kRGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVBY3Rpb25zKSB7XG4gICAgICB0aGlzLm9uU3VibWl0KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLl9zY3JlZW5XaWR0aCA9IChldmVudC50YXJnZXQgYXMgV2luZG93KS5pbm5lcldpZHRoO1xuICAgIHRoaXMuaGFuZGxlUHJvcGVydGllcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGlkZVF1aWNrQWN0aW9uKSB7XG4gICAgICB0aGlzLl9hbGxvd0NoYW5nZUZhc3RBY3Rpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlkZVNlY29uZENhbGVuZGFyKSB7XG4gICAgICB0aGlzLl9hbGxvd0NoYW5nZVNlY29uZENhbGVuZGFyID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbG93RmFzdEFjdGlvbk9uSGVhZGVyKSB7XG4gICAgICB0aGlzLl9hbGxvd0NoYW5nZUZhc3RBY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVF1aWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUluaXRpYWxWYWx1ZXMoKTtcbiAgICB0aGlzLmhhbmRsZVByb3BlcnRpZXMoKTtcbiAgfVxuXG4gIG9uSGFuZGxlRGF0ZSh7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9OiB7IHN0YXJ0RGF0ZTogc3RyaW5nOyBlbmREYXRlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuaGFuZGxlZFN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZTtcbiAgICB0aGlzLmhhbmRsZWRFbmREYXRlID0gZW5kRGF0ZTtcblxuICAgIGlmICh0aGlzLmhpZGVBY3Rpb25zKSB7XG4gICAgICB0aGlzLm9uU3VibWl0KCk7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtaXQoKSB7XG4gICAgdGhpcy5vbkRhdGUubmV4dCh7XG4gICAgICBzdGFydERhdGU6IHRoaXMuaGFuZGxlZFN0YXJ0RGF0ZSA/PyAnJyxcbiAgICAgIGVuZERhdGU6IHRoaXMuaGFuZGxlZEVuZERhdGUgPz8gJydcbiAgICB9KTtcbiAgfVxuXG4gIG9uSGFuZGxlUXVpY2tBY3Rpb24oZXZlbnQ6IG51bWJlcikge1xuICAgIGNvbnN0IGlzQmFja3dhcmQgPSBldmVudCA8IDA7XG4gICAgY29uc3QgZGF5cyA9IE1hdGguYWJzKGV2ZW50KTtcblxuICAgIGlmIChpc0JhY2t3YXJkKSB7XG4gICAgICBjb25zdCBiYXNlRGF0ZSA9IFV0aWxzLnBhcnNlU3RyaW5nRGF0ZShcbiAgICAgICAgdGhpcy5oYW5kbGVkRW5kRGF0ZSB8fCB0aGlzLmhhbmRsZWRTdGFydERhdGUgfHwgdGhpcy5fdG9kYXlcbiAgICAgICk7XG5cbiAgICAgIGxldCBzdGFydERhdGU6IHN0cmluZyB8IERhdGUgPSBzdWJEYXlzKGJhc2VEYXRlLCBkYXlzKTtcblxuICAgICAgaWYgKGlzQmVmb3JlKHN0YXJ0RGF0ZSwgdGhpcy5oYW5kbGVkTWluRGF0ZSkpIHtcbiAgICAgICAgc3RhcnREYXRlID0gdGhpcy5oYW5kbGVkTWluRGF0ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVkU3RhcnREYXRlID0gVXRpbHMucGFyc2VTdHJpbmdEYXRlKHN0YXJ0RGF0ZSk7XG4gICAgICB0aGlzLmhhbmRsZWRFbmREYXRlID0gVXRpbHMucGFyc2VTdHJpbmdEYXRlKGJhc2VEYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmFzZURhdGUgPSBVdGlscy5wYXJzZVN0cmluZ0RhdGUoXG4gICAgICAgIHRoaXMuaGFuZGxlZFN0YXJ0RGF0ZSB8fCB0aGlzLmhhbmRsZWRFbmREYXRlIHx8IHRoaXMuX3RvZGF5XG4gICAgICApO1xuXG4gICAgICBsZXQgZW5kRGF0ZTogc3RyaW5nIHwgRGF0ZSA9IGFkZERheXMoYmFzZURhdGUsIGRheXMpO1xuXG4gICAgICBpZiAoaXNBZnRlcihlbmREYXRlLCB0aGlzLmhhbmRsZWRNYXhEYXRlKSkge1xuICAgICAgICBlbmREYXRlID0gdGhpcy5oYW5kbGVkTWF4RGF0ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVkU3RhcnREYXRlID0gVXRpbHMucGFyc2VTdHJpbmdEYXRlKGJhc2VEYXRlKTtcbiAgICAgIHRoaXMuaGFuZGxlZEVuZERhdGUgPSBVdGlscy5wYXJzZVN0cmluZ0RhdGUoZW5kRGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VJbnB1dFN0YXJ0RGF0ZShldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50LCB0cnVlKTtcbiAgfVxuXG4gIG9uQ2hhbmdlSW5wdXRFbmREYXRlKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQsIGZhbHNlKTtcbiAgfVxuXG4gIG9uRGF0YUNoYW5nZShldmVudDogc3RyaW5nLCBpc1N0YXJ0OiBib29sZWFuKSB7XG4gICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlZFN0YXJ0RGF0ZSA9IGV2ZW50O1xuICAgICAgdGhpcy5oYW5kbGVkRW5kRGF0ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZWRFbmREYXRlID0gZXZlbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZUFjdGlvbnMpIHtcbiAgICAgIHRoaXMub25TdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkhhbmRsZU5hdmlnYXRlKGFjdGlvbjogJ3ByZXZpb3VzJyB8ICduZXh0Jykge1xuICAgIGlmICghYWN0aW9uKSByZXR1cm47XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZmlyc3RDYWxlbmRhci55ZWFyLCB0aGlzLmZpcnN0Q2FsZW5kYXIubW9udGgsIDEpO1xuICAgIGNvbnN0IGNhbGVuZGFycyA9IFV0aWxzLmJ1aWxkQ2FsZW5kYXJzKGRhdGUsIGFjdGlvbik7XG4gICAgdGhpcy5maXJzdENhbGVuZGFyID0gY2FsZW5kYXJzLmZpcnN0Q2FsZW5kYXI7XG4gICAgdGhpcy5zZWNvbmRDYWxlbmRhciA9IGNhbGVuZGFycy5zZWNvbmRDYWxlbmRhcjtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImkxOG5EaWN0aW9uYXJ5IHwgYXN5bmMgYXMgaTE4blwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWdyb3VwXCI+XG4gICAgQGlmICghaGlkZVF1aWNrQWN0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicXVpY2stYWN0aW9uc1wiPlxuICAgICAgICA8bW9ua2V5LWRhdGUtcmFuZ2UtcXVpY2stYWN0aW9ucyAob25DaGFuZ2UpPVwib25IYW5kbGVRdWlja0FjdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDwvbW9ua2V5LWRhdGUtcmFuZ2UtcXVpY2stYWN0aW9ucz5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIEBpZiAoIWhpZGVIZWFkZXIpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiIFtjbGFzcy5uby1xdWljay1hY3Rpb25dPVwiaGlkZVF1aWNrQWN0aW9uXCI+XG4gICAgICAgICAgQGlmIChhbGxvd0Zhc3RBY3Rpb25PbkhlYWRlcikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG1vbmtleS1kYXRlLXJhbmdlLXF1aWNrLWFjdGlvbnMgKG9uQ2hhbmdlKT1cIm9uSGFuZGxlUXVpY2tBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L21vbmtleS1kYXRlLXJhbmdlLXF1aWNrLWFjdGlvbnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dHNcIj5cbiAgICAgICAgICAgICAgPG1vbmtleS1mb3JtLWZpZWxkIGhpZGVBY3Rpb24gZW5hYmxlQ2xlYXIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgPG1vbmtleS1sYWJlbD57eyBpMThuPy5bJ1NUQVJULURBVEUnXSB9fTwvbW9ua2V5LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgICAgbW9ua2V5LWlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInN0YXJ0RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImhhbmRsZWRTdGFydERhdGVcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXRhQ2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgW21pbl09XCJoYW5kbGVkTWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbWF4XT1cImhhbmRsZWRFbmREYXRlID8gaGFuZGxlZEVuZERhdGUgOiBoYW5kbGVkTWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlSW5wdXRTdGFydERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tb25rZXktZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1vbmtleS1mb3JtLWZpZWxkIGhpZGVBY3Rpb24gZW5hYmxlQ2xlYXIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgPG1vbmtleS1sYWJlbD57eyBpMThuPy5bJ0VORC1EQVRFJ10gfX08L21vbmtleS1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgIG1vbmtleS1pbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJlbmREYXRlXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaGFuZGxlZEVuZERhdGVcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXRhQ2hhbmdlKCRldmVudCwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgIFttaW5dPVwiaGFuZGxlZFN0YXJ0RGF0ZSA/IGhhbmRsZWRTdGFydERhdGUgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbbWF4XT1cImhhbmRsZWRNYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VJbnB1dEVuZERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tb25rZXktZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChpc0ludmFsaWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICA8bW9ua2V5LWVycm9yPnt7IGkxOG4/LlsnSU5WQUxJRCddIH19PC9tb25rZXktZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyc1wiPlxuICAgICAgICAgIDxtb25rZXktZGF0ZS1yYW5nZS1tb250aFxuICAgICAgICAgICAgW21vbnRoXT1cImZpcnN0Q2FsZW5kYXIubW9udGhcIlxuICAgICAgICAgICAgW3llYXJdPVwiZmlyc3RDYWxlbmRhci55ZWFyXCJcbiAgICAgICAgICAgIFtzdGFydERhdGVdPVwiaGFuZGxlZFN0YXJ0RGF0ZVwiXG4gICAgICAgICAgICBbZW5kRGF0ZV09XCJoYW5kbGVkRW5kRGF0ZVwiXG4gICAgICAgICAgICAob25EYXRlKT1cIm9uSGFuZGxlRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbk5hdmlnYXRlKT1cIm9uSGFuZGxlTmF2aWdhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaGlkZU5leHRdPVwiIWhpZGVTZWNvbmRDYWxlbmRhclwiXG4gICAgICAgICAgICBbbWluRGF0ZV09XCJoYW5kbGVkTWluRGF0ZVwiXG4gICAgICAgICAgICBbbWF4RGF0ZV09XCJoYW5kbGVkTWF4RGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbW9ua2V5LWRhdGUtcmFuZ2UtbW9udGg+XG5cbiAgICAgICAgICBAaWYgKCFoaWRlU2Vjb25kQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgIDxtb25rZXktZGF0ZS1yYW5nZS1tb250aFxuICAgICAgICAgICAgICBbbW9udGhdPVwic2Vjb25kQ2FsZW5kYXIubW9udGhcIlxuICAgICAgICAgICAgICBbeWVhcl09XCJzZWNvbmRDYWxlbmRhci55ZWFyXCJcbiAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJoYW5kbGVkU3RhcnREYXRlXCJcbiAgICAgICAgICAgICAgW2VuZERhdGVdPVwiaGFuZGxlZEVuZERhdGVcIlxuICAgICAgICAgICAgICAob25EYXRlKT1cIm9uSGFuZGxlRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uTmF2aWdhdGUpPVwib25IYW5kbGVOYXZpZ2F0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaGlkZVByZXZpb3VzXG4gICAgICAgICAgICAgIFttaW5EYXRlXT1cImhhbmRsZWRNaW5EYXRlXCJcbiAgICAgICAgICAgICAgW21heERhdGVdPVwiaGFuZGxlZE1heERhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tb25rZXktZGF0ZS1yYW5nZS1tb250aD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoIWhpZGVBY3Rpb25zKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG1vbmtleS1idXR0b24gc2l6ZT1cIm1kXCIgdHlwZT1cInNlY29uZGFyeVwiIChjbGljayk9XCJvbkNhbmNlbC5uZXh0KG51bGwpXCI+XG4gICAgICAgICAgICB7eyBpMThuPy5BQ1RJT05TPy5DQU5DRUwgfX1cbiAgICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICAgICAgPG1vbmtleS1idXR0b25cbiAgICAgICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuaGFuZGxlZFN0YXJ0RGF0ZSB8fCAhdGhpcy5oYW5kbGVkRW5kRGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgaTE4bj8uQUNUSU9OUz8uQVBQTFkgfX1cbiAgICAgICAgICA8L21vbmtleS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,7 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ export * from './date-range.component';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NkJBSTZCO0FBQzdCLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgTW9ua2V5IEV4Y2hhbmdlLiBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKiBUaGlzIHN0eWxlIGd1aWRlIHdhcyBkZXZlbG9wZWQgYnkgTW9ua2V5IEV4Y2hhbmdlIFRlYW1cbiAqIE1JVCBMaWNlbmNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLXJhbmdlLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ export * from './month.component';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvbW9udGgvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NkJBSTZCO0FBQzdCLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgTW9ua2V5IEV4Y2hhbmdlLiBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKiBUaGlzIHN0eWxlIGd1aWRlIHdhcyBkZXZlbG9wZWQgYnkgTW9ua2V5IEV4Y2hhbmdlIFRlYW1cbiAqIE1JVCBMaWNlbmNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb250aC5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,148 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ import { CommonModule } from '@angular/common';
7
+ import { booleanAttribute, Component, EventEmitter, inject, Input, Output } from '@angular/core';
8
+ import { format, isAfter, isWithinInterval } from 'date-fns';
9
+ import { IdGenerator } from '../../../../utils';
10
+ import { MonkeyDictionaryService } from '../../../services/dictionary.service';
11
+ import { MonkeyIconButtonComponent } from '../../icon-button';
12
+ import * as Utils from '../utils';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/common";
15
+ export class MonkeyDateRangeMonthComponent {
16
+ set startDate(val) {
17
+ this._handledStartDate = val;
18
+ }
19
+ set endDate(val) {
20
+ this._handledEndDate = val;
21
+ }
22
+ get id() {
23
+ return this._id;
24
+ }
25
+ set id(value) {
26
+ this._id = value || this._uid;
27
+ }
28
+ constructor() {
29
+ this.onNavigate = new EventEmitter();
30
+ this.onDate = new EventEmitter();
31
+ this._uid = inject(IdGenerator).getId('monkey-date-range-month-');
32
+ this._today = new Date();
33
+ this.i18nDictionary = inject(MonkeyDictionaryService).get('DATE-RANGE');
34
+ // eslint-disable-next-line no-self-assign
35
+ this.id = this.id;
36
+ }
37
+ ngOnChanges() {
38
+ this.daysInMonth = Utils.buildMonthByDays(this.year, this.month, this.minDate, this.maxDate);
39
+ }
40
+ isFirst(param) {
41
+ const date = format(param.date, 'yyyy-MM-dd');
42
+ return (this._handledStartDate && this._handledStartDate === date) || false;
43
+ }
44
+ isLast(param) {
45
+ const date = format(param.date, 'yyyy-MM-dd');
46
+ return (this._handledEndDate && this._handledEndDate === date) || false;
47
+ }
48
+ isSelected(param) {
49
+ const date = format(param.date, 'yyyy-MM-dd');
50
+ return ((this._handledStartDate && this._handledStartDate === date) ||
51
+ (this._handledEndDate && this._handledEndDate === date) ||
52
+ false);
53
+ }
54
+ isInRange(param) {
55
+ if (!this._handledStartDate || !this._handledEndDate || !param.date)
56
+ return false;
57
+ const date = format(param.date, 'yyyy-MM-dd');
58
+ return isWithinInterval(new Date(date), {
59
+ start: new Date(this._handledStartDate),
60
+ end: new Date(this._handledEndDate)
61
+ });
62
+ }
63
+ isInRangeTemporary(param) {
64
+ if (!this._handledStartDate ||
65
+ !this.temporaryEndDate?.date ||
66
+ !param.date ||
67
+ param.isDisabled ||
68
+ (this._handledStartDate && this._handledEndDate))
69
+ return false;
70
+ const date = format(param.date, 'yyyy-MM-dd');
71
+ return isWithinInterval(new Date(date), {
72
+ start: new Date(this._handledStartDate),
73
+ end: new Date(this.temporaryEndDate.date)
74
+ });
75
+ }
76
+ isInLastTemporary(param) {
77
+ if (!this.temporaryEndDate?.date || !param.date || this._handledEndDate)
78
+ return false;
79
+ const date = format(param.date, 'yyyy-MM-dd');
80
+ const cmp = format(this.temporaryEndDate?.date, 'yyyy-MM-dd');
81
+ return (this.temporaryEndDate?.date && cmp === date) || false;
82
+ }
83
+ onSelectDate(event, param) {
84
+ if (param?.isDisabled || !param.date) {
85
+ event.preventDefault();
86
+ return;
87
+ }
88
+ const date = format(param.date, 'yyyy-MM-dd');
89
+ if (this._handledStartDate && this._handledEndDate) {
90
+ this._handledStartDate = '';
91
+ this._handledEndDate = '';
92
+ }
93
+ if (!this._handledStartDate) {
94
+ this._handledStartDate = date;
95
+ }
96
+ else {
97
+ this._handledEndDate = date;
98
+ }
99
+ const cmp = isAfter(this._handledStartDate, this._handledEndDate);
100
+ if (this._handledStartDate && this._handledEndDate && cmp) {
101
+ const start = this._handledStartDate;
102
+ const end = this._handledEndDate;
103
+ this._handledStartDate = end;
104
+ this._handledEndDate = start;
105
+ }
106
+ this.onDate.next({
107
+ startDate: this._handledStartDate,
108
+ endDate: this._handledEndDate
109
+ });
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeMonthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MonkeyDateRangeMonthComponent, isStandalone: true, selector: "monkey-date-range-month", inputs: { month: "month", year: "year", startDate: "startDate", endDate: "endDate", hidePrevious: ["hidePrevious", "hidePrevious", booleanAttribute], hideNext: ["hideNext", "hideNext", booleanAttribute], minDate: "minDate", maxDate: "maxDate", id: "id" }, outputs: { onNavigate: "onNavigate", onDate: "onDate" }, host: { attributes: { "data-testid": "month" }, properties: { "attr.id": "id", "id": "id" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n <div class=\"header\">\n @if (!hidePrevious) {\n <monkey-icon-button\n size=\"sm\"\n icon=\"arrow-left\"\n type=\"secondary\"\n class=\"previous\"\n [disabled]=\"daysInMonth.blockPrev\"\n (click)=\"onNavigate.next('previous')\"\n >\n </monkey-icon-button>\n }\n\n {{ i18n?.['MONTHS']?.[month] }} {{ year }}\n\n @if (!hideNext) {\n <monkey-icon-button\n size=\"sm\"\n icon=\"arrow-right\"\n type=\"secondary\"\n class=\"next\"\n [disabled]=\"daysInMonth.blockNext\"\n (click)=\"onNavigate.next('next')\"\n >\n </monkey-icon-button>\n }\n </div>\n\n <div class=\"week-labels\">\n @for (day of i18n?.['WEEK-DAYS']; track day) {\n <span class=\"day\">{{ day }}</span>\n }\n </div>\n\n <div class=\"dates\">\n @for (day of daysInMonth.days; track $index) {\n <div\n class=\"day\"\n [class.disabled]=\"day!.isDisabled\"\n [class.in-range]=\"isInRange(day!)\"\n [class.selected]=\"isSelected(day!)\"\n [class.first]=\"isFirst(day!)\"\n [class.last]=\"isLast(day!)\"\n [class.in-range-temporary]=\"isInRangeTemporary(day!)\"\n [class.temporary-last]=\"isInLastTemporary(day!)\"\n (click)=\"onSelectDate($event, day!)\"\n (mouseenter)=\"temporaryEndDate = day!\"\n (mouseleave)=\"temporaryEndDate = null\"\n >\n {{ day!.date | date: 'd' }}\n @if (day?.isToday) {\n <span class=\"today\"></span>\n }\n </div>\n }\n </div>\n</ng-container>\n", styles: [":host{width:100%}:host .header{display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:12px}:host .header monkey-icon-button{max-width:32px;background:transparent}:host .header monkey-icon-button.previous{position:absolute;left:0}:host .header monkey-icon-button.next{position:absolute;right:0}:host .week-labels{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-weight:700;font-size:.9rem;margin-bottom:4px;gap:12px 0}:host .week-labels .day{height:24px;border:none;background:transparent;text-align:center;display:flex;align-items:center;justify-content:center;font-size:14px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:.14px}:host .dates{display:grid;grid-template-columns:repeat(7,1fr);gap:12px 0}:host .dates .day{height:24px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;color:var(--mecx-color-gray-700);text-align:center;font-size:14px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:.14px;position:relative;border:1px solid transparent;-webkit-user-select:none;user-select:none}:host .dates .day .today{position:absolute;width:60%;bottom:1px;font-size:36px;letter-spacing:1.48!important}:host .dates .day .today:not(.selected){border-bottom:2px solid var(--mecx-color-theme-main)}:host .dates .day.disabled{color:var(--mecx-color-gray-400);font-weight:400;cursor:not-allowed}:host .dates .day.selected{background-color:var(--mecx-color-theme-main)!important;color:var(--mecx-color-white)!important}:host .dates .day.in-range{background-color:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}:host .dates .day.in-range-temporary{background-color:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}:host .dates .day.first,:host .dates .day.last{background-color:var(--mecx-color-theme-main);color:var(--mecx-color-white)}:host .dates .day.first{border-top-left-radius:8px;border-bottom-left-radius:8px}:host .dates .day.last,:host .dates .day.temporary-last{border-top-right-radius:8px;border-bottom-right-radius:8px}:host .dates .day:hover:not(.disabled,.in-range):before{content:\"\";border:1px solid var(--mecx-color-theme-main);border-radius:8px;height:100%;width:100%;position:absolute}:host .dates .day:hover:not(.disabled,.in-range).selected{background:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "component", type: MonkeyIconButtonComponent, selector: "monkey-icon-button", inputs: ["type", "size", "disabled", "icon", "id"] }] }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeMonthComponent, decorators: [{
115
+ type: Component,
116
+ args: [{ selector: 'monkey-date-range-month', standalone: true, imports: [CommonModule, MonkeyIconButtonComponent], host: {
117
+ 'data-testid': 'month',
118
+ '[attr.id]': 'id',
119
+ '[id]': 'id'
120
+ }, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n <div class=\"header\">\n @if (!hidePrevious) {\n <monkey-icon-button\n size=\"sm\"\n icon=\"arrow-left\"\n type=\"secondary\"\n class=\"previous\"\n [disabled]=\"daysInMonth.blockPrev\"\n (click)=\"onNavigate.next('previous')\"\n >\n </monkey-icon-button>\n }\n\n {{ i18n?.['MONTHS']?.[month] }} {{ year }}\n\n @if (!hideNext) {\n <monkey-icon-button\n size=\"sm\"\n icon=\"arrow-right\"\n type=\"secondary\"\n class=\"next\"\n [disabled]=\"daysInMonth.blockNext\"\n (click)=\"onNavigate.next('next')\"\n >\n </monkey-icon-button>\n }\n </div>\n\n <div class=\"week-labels\">\n @for (day of i18n?.['WEEK-DAYS']; track day) {\n <span class=\"day\">{{ day }}</span>\n }\n </div>\n\n <div class=\"dates\">\n @for (day of daysInMonth.days; track $index) {\n <div\n class=\"day\"\n [class.disabled]=\"day!.isDisabled\"\n [class.in-range]=\"isInRange(day!)\"\n [class.selected]=\"isSelected(day!)\"\n [class.first]=\"isFirst(day!)\"\n [class.last]=\"isLast(day!)\"\n [class.in-range-temporary]=\"isInRangeTemporary(day!)\"\n [class.temporary-last]=\"isInLastTemporary(day!)\"\n (click)=\"onSelectDate($event, day!)\"\n (mouseenter)=\"temporaryEndDate = day!\"\n (mouseleave)=\"temporaryEndDate = null\"\n >\n {{ day!.date | date: 'd' }}\n @if (day?.isToday) {\n <span class=\"today\"></span>\n }\n </div>\n }\n </div>\n</ng-container>\n", styles: [":host{width:100%}:host .header{display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:12px}:host .header monkey-icon-button{max-width:32px;background:transparent}:host .header monkey-icon-button.previous{position:absolute;left:0}:host .header monkey-icon-button.next{position:absolute;right:0}:host .week-labels{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-weight:700;font-size:.9rem;margin-bottom:4px;gap:12px 0}:host .week-labels .day{height:24px;border:none;background:transparent;text-align:center;display:flex;align-items:center;justify-content:center;font-size:14px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:.14px}:host .dates{display:grid;grid-template-columns:repeat(7,1fr);gap:12px 0}:host .dates .day{height:24px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;color:var(--mecx-color-gray-700);text-align:center;font-size:14px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:.14px;position:relative;border:1px solid transparent;-webkit-user-select:none;user-select:none}:host .dates .day .today{position:absolute;width:60%;bottom:1px;font-size:36px;letter-spacing:1.48!important}:host .dates .day .today:not(.selected){border-bottom:2px solid var(--mecx-color-theme-main)}:host .dates .day.disabled{color:var(--mecx-color-gray-400);font-weight:400;cursor:not-allowed}:host .dates .day.selected{background-color:var(--mecx-color-theme-main)!important;color:var(--mecx-color-white)!important}:host .dates .day.in-range{background-color:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}:host .dates .day.in-range-temporary{background-color:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}:host .dates .day.first,:host .dates .day.last{background-color:var(--mecx-color-theme-main);color:var(--mecx-color-white)}:host .dates .day.first{border-top-left-radius:8px;border-bottom-left-radius:8px}:host .dates .day.last,:host .dates .day.temporary-last{border-top-right-radius:8px;border-bottom-right-radius:8px}:host .dates .day:hover:not(.disabled,.in-range):before{content:\"\";border:1px solid var(--mecx-color-theme-main);border-radius:8px;height:100%;width:100%;position:absolute}:host .dates .day:hover:not(.disabled,.in-range).selected{background:var(--mecx-color-gray-100);color:var(--mecx-color-theme-main)}\n"] }]
121
+ }], ctorParameters: () => [], propDecorators: { month: [{
122
+ type: Input,
123
+ args: [{ required: true }]
124
+ }], year: [{
125
+ type: Input,
126
+ args: [{ required: true }]
127
+ }], startDate: [{
128
+ type: Input
129
+ }], endDate: [{
130
+ type: Input
131
+ }], hidePrevious: [{
132
+ type: Input,
133
+ args: [{ transform: booleanAttribute }]
134
+ }], hideNext: [{
135
+ type: Input,
136
+ args: [{ transform: booleanAttribute }]
137
+ }], minDate: [{
138
+ type: Input
139
+ }], maxDate: [{
140
+ type: Input
141
+ }], onNavigate: [{
142
+ type: Output
143
+ }], onDate: [{
144
+ type: Output
145
+ }], id: [{
146
+ type: Input
147
+ }] } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9ua2V5LXN0eWxlLWd1aWRlLXYyL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXJhbmdlL21vbnRoL21vbnRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1zdHlsZS1ndWlkZS12Mi9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1yYW5nZS9tb250aC9tb250aC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs2QkFJNkI7QUFDN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxLQUFLLEtBQUssTUFBTSxVQUFVLENBQUM7OztBQWNsQyxNQUFNLE9BQU8sNkJBQTZCO0lBS3hDLElBQWEsU0FBUyxDQUFDLEdBQVc7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsR0FBVztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBZ0NELElBQ0ksRUFBRTtRQUNKLE9BQU8sSUFBSSxD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TSxFQUFFLElBQUk7cUJBQ2I7d0RBRzBCLEtBQUs7c0JBQS9CLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVFLElBQUk7c0JBQTlCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVaLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLFFBQVE7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHN0IsT0FBTztzQkFBZixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFtQkgsRUFBRTtzQkFETCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqICoqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IE1vbmtleSBFeGNoYW5nZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICogVGhpcyBzdHlsZSBndWlkZSB3YXMgZGV2ZWxvcGVkIGJ5IE1vbmtleSBFeGNoYW5nZSBUZWFtXG4gKiBNSVQgTGljZW5jZVxuICoqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JtYXQsIGlzQWZ0ZXIsIGlzV2l0aGluSW50ZXJ2YWwgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IE1vbmtleURpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vbmtleUljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uLWJ1dHRvbic7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbmtleS1kYXRlLXJhbmdlLW1vbnRoJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTW9ua2V5SWNvbkJ1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tb250aC5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHtcbiAgICAnZGF0YS10ZXN0aWQnOiAnbW9udGgnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbaWRdJzogJ2lkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE1vbmtleURhdGVSYW5nZU1vbnRoQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbW9udGghOiBudW1iZXI7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgeWVhciE6IG51bWJlcjtcblxuICBASW5wdXQoKSBzZXQgc3RhcnREYXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5faGFuZGxlZFN0YXJ0RGF0ZSA9IHZhbDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBlbmREYXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5faGFuZGxlZEVuZERhdGUgPSB2YWw7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaGlkZVByZXZpb3VzITogYm9vbGVhbjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaGlkZU5leHQhOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgbWF4RGF0ZSE6IHN0cmluZztcblxuICBAT3V0cHV0KCkgb25OYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25EYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByb3RlY3RlZCBfdWlkID0gaW5qZWN0KElkR2VuZXJhdG9yKS5nZXRJZCgnbW9ua2V5LWRhdGUtcmFuZ2UtbW9udGgtJyk7XG5cbiAgcHJvdGVjdGVkIF9pZCE6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF90b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgcHJpdmF0ZSBfaGFuZGxlZFN0YXJ0RGF0ZSE6IHN0cmluZztcblxuICBwcml2YXRlIF9oYW5kbGVkRW5kRGF0ZSE6IHN0cmluZztcblxuICByZWFkb25seSBpMThuRGljdGlvbmFyeSA9IGluamVjdChNb25rZXlEaWN0aW9uYXJ5U2VydmljZSkuZ2V0KCdEQVRFLVJBTkdFJyk7XG5cbiAgZGF5c0luTW9udGghOiBVdGlscy5DYWxlbmRhcldlZWtEYXk7XG5cbiAgdGVtcG9yYXJ5RW5kRGF0ZSE6IFV0aWxzLldlZWtEYXkgfCBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZSB8fCB0aGlzLl91aWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF5c0luTW9udGggPSBVdGlscy5idWlsZE1vbnRoQnlEYXlzKHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICB9XG5cbiAgaXNGaXJzdChwYXJhbTogVXRpbHMuV2Vla0RheSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGUgPSBmb3JtYXQocGFyYW0uZGF0ZSEsICd5eXl5LU1NLWRkJyk7XG4gICAgcmV0dXJuICh0aGlzLl9oYW5kbGVkU3RhcnREYXRlICYmIHRoaXMuX2hhbmRsZWRTdGFydERhdGUgPT09IGRhdGUpIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNMYXN0KHBhcmFtOiBVdGlscy5XZWVrRGF5KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0ZSA9IGZvcm1hdChwYXJhbS5kYXRlISwgJ3l5eXktTU0tZGQnKTtcbiAgICByZXR1cm4gKHRoaXMuX2hhbmRsZWRFbmREYXRlICYmIHRoaXMuX2hhbmRsZWRFbmREYXRlID09PSBkYXRlKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQocGFyYW06IFV0aWxzLldlZWtEYXkpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRlID0gZm9ybWF0KHBhcmFtLmRhdGUhLCAneXl5eS1NTS1kZCcpO1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5faGFuZGxlZFN0YXJ0RGF0ZSAmJiB0aGlzLl9oYW5kbGVkU3RhcnREYXRlID09PSBkYXRlKSB8fFxuICAgICAgKHRoaXMuX2hhbmRsZWRFbmREYXRlICYmIHRoaXMuX2hhbmRsZWRFbmREYXRlID09PSBkYXRlKSB8fFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgaXNJblJhbmdlKHBhcmFtOiBVdGlscy5XZWVrRGF5KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9oYW5kbGVkU3RhcnREYXRlIHx8ICF0aGlzLl9oYW5kbGVkRW5kRGF0ZSB8fCAhcGFyYW0uZGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRhdGUgPSBmb3JtYXQocGFyYW0uZGF0ZSEsICd5eXl5LU1NLWRkJyk7XG5cbiAgICByZXR1cm4gaXNXaXRoaW5JbnRlcnZhbChuZXcgRGF0ZShkYXRlKSwge1xuICAgICAgc3RhcnQ6IG5ldyBEYXRlKHRoaXMuX2hhbmRsZWRTdGFydERhdGUpLFxuICAgICAgZW5kOiBuZXcgRGF0ZSh0aGlzLl9oYW5kbGVkRW5kRGF0ZSlcbiAgICB9KTtcbiAgfVxuXG4gIGlzSW5SYW5nZVRlbXBvcmFyeShwYXJhbTogVXRpbHMuV2Vla0RheSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9oYW5kbGVkU3RhcnREYXRlIHx8XG4gICAgICAhdGhpcy50ZW1wb3JhcnlFbmREYXRlPy5kYXRlIHx8XG4gICAgICAhcGFyYW0uZGF0ZSB8fFxuICAgICAgcGFyYW0uaXNEaXNhYmxlZCB8fFxuICAgICAgKHRoaXMuX2hhbmRsZWRTdGFydERhdGUgJiYgdGhpcy5faGFuZGxlZEVuZERhdGUpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRhdGUgPSBmb3JtYXQocGFyYW0uZGF0ZSEsICd5eXl5LU1NLWRkJyk7XG5cbiAgICByZXR1cm4gaXNXaXRoaW5JbnRlcnZhbChuZXcgRGF0ZShkYXRlKSwge1xuICAgICAgc3RhcnQ6IG5ldyBEYXRlKHRoaXMuX2hhbmRsZWRTdGFydERhdGUpLFxuICAgICAgZW5kOiBuZXcgRGF0ZSh0aGlzLnRlbXBvcmFyeUVuZERhdGUuZGF0ZSlcbiAgICB9KTtcbiAgfVxuXG4gIGlzSW5MYXN0VGVtcG9yYXJ5KHBhcmFtOiBVdGlscy5XZWVrRGF5KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnRlbXBvcmFyeUVuZERhdGU/LmRhdGUgfHwgIXBhcmFtLmRhdGUgfHwgdGhpcy5faGFuZGxlZEVuZERhdGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkYXRlID0gZm9ybWF0KHBhcmFtLmRhdGUhLCAneXl5eS1NTS1kZCcpO1xuICAgIGNvbnN0IGNtcCA9IGZvcm1hdCh0aGlzLnRlbXBvcmFyeUVuZERhdGU/LmRhdGUhLCAneXl5eS1NTS1kZCcpO1xuICAgIHJldHVybiAodGhpcy50ZW1wb3JhcnlFbmREYXRlPy5kYXRlICYmIGNtcCA9PT0gZGF0ZSkgfHwgZmFsc2U7XG4gIH1cblxuICBvblNlbGVjdERhdGUoZXZlbnQ6IEV2ZW50LCBwYXJhbTogVXRpbHMuV2Vla0RheSkge1xuICAgIGlmIChwYXJhbT8uaXNEaXNhYmxlZCB8fCAhcGFyYW0uZGF0ZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gZm9ybWF0KHBhcmFtLmRhdGUsICd5eXl5LU1NLWRkJyk7XG4gICAgaWYgKHRoaXMuX2hhbmRsZWRTdGFydERhdGUgJiYgdGhpcy5faGFuZGxlZEVuZERhdGUpIHtcbiAgICAgIHRoaXMuX2hhbmRsZWRTdGFydERhdGUgPSAnJztcbiAgICAgIHRoaXMuX2hhbmRsZWRFbmREYXRlID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9oYW5kbGVkU3RhcnREYXRlKSB7XG4gICAgICB0aGlzLl9oYW5kbGVkU3RhcnREYXRlID0gZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlZEVuZERhdGUgPSBkYXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGNtcCA9IGlzQWZ0ZXIodGhpcy5faGFuZGxlZFN0YXJ0RGF0ZSwgdGhpcy5faGFuZGxlZEVuZERhdGUpO1xuXG4gICAgaWYgKHRoaXMuX2hhbmRsZWRTdGFydERhdGUgJiYgdGhpcy5faGFuZGxlZEVuZERhdGUgJiYgY21wKSB7XG4gICAgICBjb25zdCBzdGFydCA9IHRoaXMuX2hhbmRsZWRTdGFydERhdGU7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLl9oYW5kbGVkRW5kRGF0ZTtcbiAgICAgIHRoaXMuX2hhbmRsZWRTdGFydERhdGUgPSBlbmQ7XG4gICAgICB0aGlzLl9oYW5kbGVkRW5kRGF0ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHRoaXMub25EYXRlLm5leHQoe1xuICAgICAgc3RhcnREYXRlOiB0aGlzLl9oYW5kbGVkU3RhcnREYXRlLFxuICAgICAgZW5kRGF0ZTogdGhpcy5faGFuZGxlZEVuZERhdGVcbiAgICB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImkxOG5EaWN0aW9uYXJ5IHwgYXN5bmMgYXMgaTE4blwiPlxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgQGlmICghaGlkZVByZXZpb3VzKSB7XG4gICAgICA8bW9ua2V5LWljb24tYnV0dG9uXG4gICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgIGljb249XCJhcnJvdy1sZWZ0XCJcbiAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgIGNsYXNzPVwicHJldmlvdXNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGF5c0luTW9udGguYmxvY2tQcmV2XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTmF2aWdhdGUubmV4dCgncHJldmlvdXMnKVwiXG4gICAgICA+XG4gICAgICA8L21vbmtleS1pY29uLWJ1dHRvbj5cbiAgICB9XG5cbiAgICB7eyBpMThuPy5bJ01PTlRIUyddPy5bbW9udGhdIH19IHt7IHllYXIgfX1cblxuICAgIEBpZiAoIWhpZGVOZXh0KSB7XG4gICAgICA8bW9ua2V5LWljb24tYnV0dG9uXG4gICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgIGljb249XCJhcnJvdy1yaWdodFwiXG4gICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICBjbGFzcz1cIm5leHRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGF5c0luTW9udGguYmxvY2tOZXh0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTmF2aWdhdGUubmV4dCgnbmV4dCcpXCJcbiAgICAgID5cbiAgICAgIDwvbW9ua2V5LWljb24tYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIndlZWstbGFiZWxzXCI+XG4gICAgQGZvciAoZGF5IG9mIGkxOG4/LlsnV0VFSy1EQVlTJ107IHRyYWNrIGRheSkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJkYXlcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZGF0ZXNcIj5cbiAgICBAZm9yIChkYXkgb2YgZGF5c0luTW9udGguZGF5czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZGF5XCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRheSEuaXNEaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzcy5pbi1yYW5nZV09XCJpc0luUmFuZ2UoZGF5ISlcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkhKVwiXG4gICAgICAgIFtjbGFzcy5maXJzdF09XCJpc0ZpcnN0KGRheSEpXCJcbiAgICAgICAgW2NsYXNzLmxhc3RdPVwiaXNMYXN0KGRheSEpXCJcbiAgICAgICAgW2NsYXNzLmluLXJhbmdlLXRlbXBvcmFyeV09XCJpc0luUmFuZ2VUZW1wb3JhcnkoZGF5ISlcIlxuICAgICAgICBbY2xhc3MudGVtcG9yYXJ5LWxhc3RdPVwiaXNJbkxhc3RUZW1wb3JhcnkoZGF5ISlcIlxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3REYXRlKCRldmVudCwgZGF5ISlcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJ0ZW1wb3JhcnlFbmREYXRlID0gZGF5IVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cInRlbXBvcmFyeUVuZERhdGUgPSBudWxsXCJcbiAgICAgID5cbiAgICAgICAge3sgZGF5IS5kYXRlIHwgZGF0ZTogJ2QnIH19XG4gICAgICAgIEBpZiAoZGF5Py5pc1RvZGF5KSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2RheVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,7 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ export * from './quick-actions.component';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvcXVpY2stYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs2QkFJNkI7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCBNb25rZXkgRXhjaGFuZ2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqIFRoaXMgc3R5bGUgZ3VpZGUgd2FzIGRldmVsb3BlZCBieSBNb25rZXkgRXhjaGFuZ2UgVGVhbVxuICogTUlUIExpY2VuY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5leHBvcnQgKiBmcm9tICcuL3F1aWNrLWFjdGlvbnMuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,48 @@
1
+ /** ************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ ************************* */
6
+ import { CommonModule } from '@angular/common';
7
+ import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
8
+ import { IdGenerator } from '../../../../utils';
9
+ import { MonkeyDictionaryService } from '../../../services/dictionary.service';
10
+ import * as Utils from '../utils';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ export class MonkeyDateRangeQuickActionsComponent {
14
+ get id() {
15
+ return this._id;
16
+ }
17
+ set id(value) {
18
+ this._id = value || this._uid;
19
+ }
20
+ constructor() {
21
+ this.onChange = new EventEmitter();
22
+ this._uid = inject(IdGenerator).getId('monkey-date-range-month-quick-actions-');
23
+ this.selectedAction = '';
24
+ this.actions = Utils.getEnumKeys(Utils.QuickActionsEnum);
25
+ this.i18nDictionary = inject(MonkeyDictionaryService).get('DATE-RANGE');
26
+ // eslint-disable-next-line no-self-assign
27
+ this.id = this.id;
28
+ }
29
+ onHandleAction({ key, value }) {
30
+ this.selectedAction = key;
31
+ this.onChange.next(value);
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeQuickActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MonkeyDateRangeQuickActionsComponent, isStandalone: true, selector: "monkey-date-range-quick-actions", inputs: { id: "id" }, outputs: { onChange: "onChange" }, host: { attributes: { "data-testid": "quick-actions" }, properties: { "attr.id": "id", "id": "id" } }, ngImport: i0, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n @for (item of actions; track item.key) {\n <div\n class=\"item\"\n [class.selected]=\"item.key === selectedAction\"\n (click)=\"onHandleAction(item)\"\n [attr.tabindex]=\"$index\"\n >\n {{ i18n?.['QUICK-ACTIONS']?.[item.key] }}\n </div>\n }\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:24px 8px 12px 12px;gap:4px}:host .item{color:var(--mecx-color-gray-900);font-size:13px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.26px;padding:4px 12px;cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-radius:4px}:host .item.selected{border-radius:4px;background:var(--mecx-color-gray-100)}:host .item:hover{border-radius:4px;background:var(--mecx-color-gray-100)}:host .item:focus{outline:2px solid var(--mecx-color-theme-main);outline-offset:1px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyDateRangeQuickActionsComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'monkey-date-range-quick-actions', standalone: true, imports: [CommonModule], host: {
39
+ 'data-testid': 'quick-actions',
40
+ '[attr.id]': 'id',
41
+ '[id]': 'id'
42
+ }, template: "<ng-container *ngIf=\"i18nDictionary | async as i18n\">\n @for (item of actions; track item.key) {\n <div\n class=\"item\"\n [class.selected]=\"item.key === selectedAction\"\n (click)=\"onHandleAction(item)\"\n [attr.tabindex]=\"$index\"\n >\n {{ i18n?.['QUICK-ACTIONS']?.[item.key] }}\n </div>\n }\n</ng-container>\n", styles: [":host{display:inline-flex;flex-direction:column;padding:24px 8px 12px 12px;gap:4px}:host .item{color:var(--mecx-color-gray-900);font-size:13px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.26px;padding:4px 12px;cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none;border-radius:4px}:host .item.selected{border-radius:4px;background:var(--mecx-color-gray-100)}:host .item:hover{border-radius:4px;background:var(--mecx-color-gray-100)}:host .item:focus{outline:2px solid var(--mecx-color-theme-main);outline-offset:1px}\n"] }]
43
+ }], ctorParameters: () => [], propDecorators: { onChange: [{
44
+ type: Output
45
+ }], id: [{
46
+ type: Input
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcmFuZ2UvcXVpY2stYWN0aW9ucy9xdWljay1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1zdHlsZS1ndWlkZS12Mi9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1yYW5nZS9xdWljay1hY3Rpb25zL3F1aWNrLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NkJBSTZCO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxVQUFVLENBQUM7OztBQWNsQyxNQUFNLE9BQU8sb0NBQW9DO0lBTy9DLElBQ0ksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxFQUFFLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFRRDtRQXJCVSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5QixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBYXJGLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsbUJBQWMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHMUUsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBa0M7UUFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzsrR0E5QlUsb0NBQW9DO21HQUFwQyxvQ0FBb0MsMlBDdkJqRCxtV0FZQSx5bkJERVksWUFBWTs7NEZBU1gsb0NBQW9DO2tCQVpoRCxTQUFTOytCQUNFLGlDQUFpQyxjQUMvQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsUUFHakI7d0JBQ0osYUFBYSxFQUFFLGVBQWU7d0JBQzlCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjt3REFHUyxRQUFRO3NCQUFqQixNQUFNO2dCQU9ILEVBQUU7c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCBNb25rZXkgRXhjaGFuZ2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqIFRoaXMgc3R5bGUgZ3VpZGUgd2FzIGRldmVsb3BlZCBieSBNb25rZXkgRXhjaGFuZ2UgVGVhbVxuICogTUlUIExpY2VuY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBNb25rZXlEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2RpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbmtleS1kYXRlLXJhbmdlLXF1aWNrLWFjdGlvbnMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1aWNrLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcXVpY2stYWN0aW9ucy5jb21wb25lbnQuc2NzcycsXG4gIGhvc3Q6IHtcbiAgICAnZGF0YS10ZXN0aWQnOiAncXVpY2stYWN0aW9ucycsXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJ1tpZF0nOiAnaWQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTW9ua2V5RGF0ZVJhbmdlUXVpY2tBY3Rpb25zQ29tcG9uZW50IHtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByb3RlY3RlZCBfdWlkID0gaW5qZWN0KElkR2VuZXJhdG9yKS5nZXRJZCgnbW9ua2V5LWRhdGUtcmFuZ2UtbW9udGgtcXVpY2stYWN0aW9ucy0nKTtcblxuICBwcm90ZWN0ZWQgX2lkITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZSB8fCB0aGlzLl91aWQ7XG4gIH1cblxuICBzZWxlY3RlZEFjdGlvbiA9ICcnO1xuXG4gIHJlYWRvbmx5IGFjdGlvbnMgPSBVdGlscy5nZXRFbnVtS2V5cyhVdGlscy5RdWlja0FjdGlvbnNFbnVtKTtcblxuICByZWFkb25seSBpMThuRGljdGlvbmFyeSA9IGluamVjdChNb25rZXlEaWN0aW9uYXJ5U2VydmljZSkuZ2V0KCdEQVRFLVJBTkdFJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgdGhpcy5pZCA9IHRoaXMuaWQ7XG4gIH1cblxuICBvbkhhbmRsZUFjdGlvbih7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IGtleTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodmFsdWUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaTE4bkRpY3Rpb25hcnkgfCBhc3luYyBhcyBpMThuXCI+XG4gIEBmb3IgKGl0ZW0gb2YgYWN0aW9uczsgdHJhY2sgaXRlbS5rZXkpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIml0ZW1cIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIml0ZW0ua2V5ID09PSBzZWxlY3RlZEFjdGlvblwiXG4gICAgICAoY2xpY2spPVwib25IYW5kbGVBY3Rpb24oaXRlbSlcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiJGluZGV4XCJcbiAgICA+XG4gICAgICB7eyBpMThuPy5bJ1FVSUNLLUFDVElPTlMnXT8uW2l0ZW0ua2V5XSB9fVxuICAgIDwvZGl2PlxuICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==