monkey-style-guide 2.0.106 → 2.0.110

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 (245) hide show
  1. package/assets/scss/partials/_breakpoints.scss +35 -35
  2. package/assets/scss/partials/components/_badge.scss +55 -55
  3. package/assets/scss/partials/components/_date-range-picker.scss +1 -0
  4. package/assets/scss/partials/components/_expansion.scss +91 -91
  5. package/assets/scss/partials/components/_modal.scss +282 -282
  6. package/assets/scss/partials/components/_tab.scss +82 -82
  7. package/assets/scss/partials/components/_toggle.scss +103 -103
  8. package/{esm2015/lib/components/badge/badge.component.js → esm2020/lib/components/badge/badge.component.mjs} +4 -4
  9. package/{esm2015/lib/components/badge/badge.module.js → esm2020/lib/components/badge/badge.module.mjs} +5 -5
  10. package/{esm2015/lib/components/badge/index.js → esm2020/lib/components/badge/index.mjs} +1 -1
  11. package/{esm2015/lib/components/button/button-avatar.component.js → esm2020/lib/components/button/button-avatar.component.mjs} +5 -5
  12. package/{esm2015/lib/components/button/button-dropdown.component.js → esm2020/lib/components/button/button-dropdown.component.mjs} +4 -4
  13. package/{esm2015/lib/components/button/button.component.js → esm2020/lib/components/button/button.component.mjs} +4 -4
  14. package/{esm2015/lib/components/button/button.module.js → esm2020/lib/components/button/button.module.mjs} +5 -5
  15. package/{esm2015/lib/components/button/index.js → esm2020/lib/components/button/index.mjs} +0 -0
  16. package/{esm2015/lib/components/checkbox/checkbox.component.js → esm2020/lib/components/checkbox/checkbox.component.mjs} +6 -6
  17. package/{esm2015/lib/components/checkbox/checkbox.module.js → esm2020/lib/components/checkbox/checkbox.module.mjs} +5 -5
  18. package/{esm2015/lib/components/checkbox/index.js → esm2020/lib/components/checkbox/index.mjs} +0 -0
  19. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +569 -0
  20. package/{esm2015/lib/components/date-range-picker/date-range-picker.module.js → esm2020/lib/components/date-range-picker/date-range-picker.module.mjs} +5 -5
  21. package/{esm2015/lib/components/date-range-picker/index.js → esm2020/lib/components/date-range-picker/index.mjs} +0 -0
  22. package/{esm2015/lib/components/expansion/expansion.component.js → esm2020/lib/components/expansion/expansion.component.mjs} +71 -71
  23. package/{esm2015/lib/components/expansion/expansion.module.js → esm2020/lib/components/expansion/expansion.module.mjs} +5 -5
  24. package/{esm2015/lib/components/expansion/index.js → esm2020/lib/components/expansion/index.mjs} +1 -1
  25. package/{esm2015/lib/components/file-upload/file-upload.component.js → esm2020/lib/components/file-upload/file-upload.component.mjs} +6 -6
  26. package/{esm2015/lib/components/file-upload/file-upload.module.js → esm2020/lib/components/file-upload/file-upload.module.mjs} +5 -5
  27. package/{esm2015/lib/components/file-upload/index.js → esm2020/lib/components/file-upload/index.mjs} +0 -0
  28. package/esm2020/lib/components/icon/icon-arrow-down.component.mjs +15 -0
  29. package/esm2020/lib/components/icon/icon-arrow-left.component.mjs +15 -0
  30. package/esm2020/lib/components/icon/icon-arrow-right.component.mjs +15 -0
  31. package/esm2020/lib/components/icon/icon-arrow-up.component.mjs +15 -0
  32. package/esm2020/lib/components/icon/icon-bank.component.mjs +15 -0
  33. package/esm2020/lib/components/icon/icon-bell.component.mjs +15 -0
  34. package/esm2020/lib/components/icon/icon-book.component.mjs +15 -0
  35. package/esm2020/lib/components/icon/icon-box.component.mjs +15 -0
  36. package/esm2020/lib/components/icon/icon-calendar.component.mjs +15 -0
  37. package/esm2020/lib/components/icon/icon-camera.component.mjs +15 -0
  38. package/esm2020/lib/components/icon/icon-chat.component.mjs +15 -0
  39. package/esm2020/lib/components/icon/icon-check-circle-out.component.mjs +15 -0
  40. package/esm2020/lib/components/icon/icon-check-circle.component.mjs +15 -0
  41. package/esm2020/lib/components/icon/icon-check-grey.component.mjs +15 -0
  42. package/esm2020/lib/components/icon/icon-check-white.component.mjs +15 -0
  43. package/esm2020/lib/components/icon/icon-check.component.mjs +15 -0
  44. package/esm2020/lib/components/icon/icon-clipboard.component.mjs +15 -0
  45. package/esm2020/lib/components/icon/icon-clock.component.mjs +15 -0
  46. package/esm2020/lib/components/icon/icon-close.component.mjs +15 -0
  47. package/esm2020/lib/components/icon/icon-cnpj.component.mjs +15 -0
  48. package/esm2020/lib/components/icon/icon-codepen.component.mjs +15 -0
  49. package/esm2020/lib/components/icon/icon-company-name.component.mjs +15 -0
  50. package/esm2020/lib/components/icon/icon-contract.component.mjs +15 -0
  51. package/esm2020/lib/components/icon/icon-delete.component.mjs +15 -0
  52. package/esm2020/lib/components/icon/icon-document.component.mjs +15 -0
  53. package/esm2020/lib/components/icon/icon-dollar-sign.component.mjs +15 -0
  54. package/esm2020/lib/components/icon/icon-domain.component.mjs +15 -0
  55. package/esm2020/lib/components/icon/icon-download.component.mjs +15 -0
  56. package/esm2020/lib/components/icon/icon-edit.component.mjs +15 -0
  57. package/esm2020/lib/components/icon/icon-email.component.mjs +15 -0
  58. package/esm2020/lib/components/icon/icon-empty-doc.component.mjs +15 -0
  59. package/esm2020/lib/components/icon/icon-error.component.mjs +15 -0
  60. package/esm2020/lib/components/icon/icon-eye-closed.component.mjs +15 -0
  61. package/esm2020/lib/components/icon/icon-eye-open.component.mjs +15 -0
  62. package/esm2020/lib/components/icon/icon-filter.component.mjs +15 -0
  63. package/esm2020/lib/components/icon/icon-grid.component.mjs +15 -0
  64. package/esm2020/lib/components/icon/icon-help.component.mjs +15 -0
  65. package/esm2020/lib/components/icon/icon-hexagon.component.mjs +15 -0
  66. package/esm2020/lib/components/icon/icon-home.component.mjs +15 -0
  67. package/esm2020/lib/components/icon/icon-image.component.mjs +15 -0
  68. package/esm2020/lib/components/icon/icon-list.component.mjs +15 -0
  69. package/esm2020/lib/components/icon/icon-location-pin.component.mjs +15 -0
  70. package/esm2020/lib/components/icon/icon-login.component.mjs +15 -0
  71. package/esm2020/lib/components/icon/icon-logout.component.mjs +15 -0
  72. package/esm2020/lib/components/icon/icon-menu.component.mjs +15 -0
  73. package/esm2020/lib/components/icon/icon-money-sign.component.mjs +15 -0
  74. package/esm2020/lib/components/icon/icon-more.component.mjs +15 -0
  75. package/esm2020/lib/components/icon/icon-offered.component.mjs +15 -0
  76. package/esm2020/lib/components/icon/icon-password.component.mjs +15 -0
  77. package/esm2020/lib/components/icon/icon-people.component.mjs +15 -0
  78. package/esm2020/lib/components/icon/icon-percent.component.mjs +15 -0
  79. package/esm2020/lib/components/icon/icon-person-document.component.mjs +15 -0
  80. package/esm2020/lib/components/icon/icon-person-sad.component.mjs +15 -0
  81. package/esm2020/lib/components/icon/icon-phone.component.mjs +15 -0
  82. package/esm2020/lib/components/icon/icon-pork.component.mjs +15 -0
  83. package/esm2020/lib/components/icon/icon-refresh.component.mjs +15 -0
  84. package/esm2020/lib/components/icon/icon-repeat.component.mjs +15 -0
  85. package/esm2020/lib/components/icon/icon-search.component.mjs +15 -0
  86. package/esm2020/lib/components/icon/icon-second-warning.component.mjs +15 -0
  87. package/esm2020/lib/components/icon/icon-settings.component.mjs +15 -0
  88. package/esm2020/lib/components/icon/icon-trash.component.mjs +15 -0
  89. package/esm2020/lib/components/icon/icon-upload.component.mjs +15 -0
  90. package/esm2020/lib/components/icon/icon-user.component.mjs +15 -0
  91. package/esm2020/lib/components/icon/icon-wallet.component.mjs +15 -0
  92. package/esm2020/lib/components/icon/icon-warning.component.mjs +15 -0
  93. package/{esm2015/lib/components/icon/icon.component.js → esm2020/lib/components/icon/icon.component.mjs} +6 -6
  94. package/{esm2015/lib/components/icon/icon.module.js → esm2020/lib/components/icon/icon.module.mjs} +5 -5
  95. package/{esm2015/lib/components/icon/index.js → esm2020/lib/components/icon/index.mjs} +0 -0
  96. package/{esm2015/lib/components/image-crop/image-crop.component.js → esm2020/lib/components/image-crop/image-crop.component.mjs} +12 -5
  97. package/{esm2015/lib/components/image-crop/image-crop.module.js → esm2020/lib/components/image-crop/image-crop.module.mjs} +5 -5
  98. package/{esm2015/lib/components/image-crop/index.js → esm2020/lib/components/image-crop/index.mjs} +0 -0
  99. package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
  100. package/{esm2015/lib/components/input/index.js → esm2020/lib/components/input/index.mjs} +0 -0
  101. package/esm2020/lib/components/input/input-filter.component.mjs +261 -0
  102. package/esm2020/lib/components/input/input.component.mjs +380 -0
  103. package/{esm2015/lib/components/input/input.module.js → esm2020/lib/components/input/input.module.mjs} +5 -5
  104. package/{esm2015/lib/components/input-phone/index.js → esm2020/lib/components/input-phone/index.mjs} +0 -0
  105. package/esm2020/lib/components/input-phone/input-phone.component.mjs +304 -0
  106. package/{esm2015/lib/components/input-phone/input-phone.module.js → esm2020/lib/components/input-phone/input-phone.module.mjs} +5 -5
  107. package/{esm2015/lib/components/modal/index.js → esm2020/lib/components/modal/index.mjs} +0 -0
  108. package/esm2020/lib/components/modal/modal.component.mjs +236 -0
  109. package/{esm2015/lib/components/modal/modal.module.js → esm2020/lib/components/modal/modal.module.mjs} +5 -5
  110. package/{esm2015/lib/components/option/index.js → esm2020/lib/components/option/index.mjs} +0 -0
  111. package/{esm2015/lib/components/option/option.component.js → esm2020/lib/components/option/option.component.mjs} +4 -4
  112. package/{esm2015/lib/components/option/option.module.js → esm2020/lib/components/option/option.module.mjs} +5 -5
  113. package/{esm2015/lib/components/radiobutton/index.js → esm2020/lib/components/radiobutton/index.mjs} +0 -0
  114. package/{esm2015/lib/components/radiobutton/radiobutton.component.js → esm2020/lib/components/radiobutton/radiobutton.component.mjs} +6 -6
  115. package/{esm2015/lib/components/radiobutton/radiobutton.module.js → esm2020/lib/components/radiobutton/radiobutton.module.mjs} +5 -5
  116. package/{esm2015/lib/components/select/index.js → esm2020/lib/components/select/index.mjs} +0 -0
  117. package/{esm2015/lib/components/select/select-filter.component.js → esm2020/lib/components/select/select-filter.component.mjs} +6 -6
  118. package/esm2020/lib/components/select/select-multiple.component.mjs +304 -0
  119. package/esm2020/lib/components/select/select-search.component.mjs +306 -0
  120. package/{esm2015/lib/components/select/select.component.js → esm2020/lib/components/select/select.component.mjs} +6 -6
  121. package/{esm2015/lib/components/select/select.module.js → esm2020/lib/components/select/select.module.mjs} +5 -5
  122. package/{esm2015/lib/components/stepper/index.js → esm2020/lib/components/stepper/index.mjs} +0 -0
  123. package/{esm2015/lib/components/stepper/stepper.component.js → esm2020/lib/components/stepper/stepper.component.mjs} +4 -4
  124. package/{esm2015/lib/components/stepper/stepper.module.js → esm2020/lib/components/stepper/stepper.module.mjs} +5 -5
  125. package/{esm2015/lib/components/tab/index.js → esm2020/lib/components/tab/index.mjs} +1 -1
  126. package/{esm2015/lib/components/tab/tab.component.js → esm2020/lib/components/tab/tab.component.mjs} +12 -12
  127. package/{esm2015/lib/components/tab/tab.module.js → esm2020/lib/components/tab/tab.module.mjs} +5 -5
  128. package/{esm2015/lib/components/table/index.js → esm2020/lib/components/table/index.mjs} +0 -0
  129. package/{esm2015/lib/components/table/table-column.component.js → esm2020/lib/components/table/table-column.component.mjs} +4 -4
  130. package/esm2020/lib/components/table/table.component.mjs +203 -0
  131. package/{esm2015/lib/components/table/table.module.js → esm2020/lib/components/table/table.module.mjs} +5 -5
  132. package/{esm2015/lib/components/toggle/index.js → esm2020/lib/components/toggle/index.mjs} +1 -1
  133. package/esm2020/lib/components/toggle/toggle.component.mjs +56 -0
  134. package/{esm2015/lib/components/toggle/toggle.module.js → esm2020/lib/components/toggle/toggle.module.mjs} +5 -5
  135. package/{esm2015/lib/components/wizard/index.js → esm2020/lib/components/wizard/index.mjs} +0 -0
  136. package/{esm2015/lib/components/wizard/wizard.component.js → esm2020/lib/components/wizard/wizard.component.mjs} +4 -4
  137. package/{esm2015/lib/components/wizard/wizard.module.js → esm2020/lib/components/wizard/wizard.module.mjs} +5 -5
  138. package/{esm2015/lib/core/index.js → esm2020/lib/core/index.mjs} +0 -0
  139. package/{esm2015/lib/core/interfaces/index.js → esm2020/lib/core/interfaces/index.mjs} +1 -1
  140. package/esm2020/lib/core/interfaces/monkey-modal-settings.mjs +2 -0
  141. package/{esm2015/lib/core/interfaces/monkey-style-settings.js → esm2020/lib/core/interfaces/monkey-style-settings.mjs} +0 -0
  142. package/{esm2015/lib/core/services/index.js → esm2020/lib/core/services/index.mjs} +0 -0
  143. package/{esm2015/lib/core/services/modal/index.js → esm2020/lib/core/services/modal/index.mjs} +1 -1
  144. package/{esm2015/lib/core/services/modal/monkey-style-guide-modal-fixed.service.js → esm2020/lib/core/services/modal/monkey-style-guide-modal-fixed.service.mjs} +4 -4
  145. package/{esm2015/lib/core/services/modal/monkey-style-guide-modal.service.js → esm2020/lib/core/services/modal/monkey-style-guide-modal.service.mjs} +4 -4
  146. package/{esm2015/lib/core/services/monkey-style-guide.service.js → esm2020/lib/core/services/monkey-style-guide.service.mjs} +4 -4
  147. package/{esm2015/lib/core/services/settings/index.js → esm2020/lib/core/services/settings/index.mjs} +0 -0
  148. package/{esm2015/lib/core/services/settings/monkey-style-guide-settings.service.js → esm2020/lib/core/services/settings/monkey-style-guide-settings.service.mjs} +4 -4
  149. package/esm2020/lib/core/services/settings/monkey-style-guide-theme-settings.service.mjs +80 -0
  150. package/{esm2015/lib/core/services/snackbar/index.js → esm2020/lib/core/services/snackbar/index.mjs} +0 -0
  151. package/{esm2015/lib/core/services/snackbar/mokey-style-guide-snackbar.service.js → esm2020/lib/core/services/snackbar/mokey-style-guide-snackbar.service.mjs} +5 -5
  152. package/{esm2015/lib/core/utils/index.js → esm2020/lib/core/utils/index.mjs} +0 -0
  153. package/esm2020/lib/core/utils/utils.mjs +235 -0
  154. package/{esm2015/lib/monkey-style-guide.module.js → esm2020/lib/monkey-style-guide.module.mjs} +5 -5
  155. package/{esm2015/monkey-style-guide.js → esm2020/monkey-style-guide.mjs} +0 -0
  156. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  157. package/fesm2015/{monkey-style-guide.js → monkey-style-guide.mjs} +568 -808
  158. package/fesm2015/monkey-style-guide.mjs.map +1 -0
  159. package/fesm2020/monkey-style-guide.mjs +7921 -0
  160. package/fesm2020/monkey-style-guide.mjs.map +1 -0
  161. package/lib/components/date-range-picker/date-range-picker.component.d.ts +6 -5
  162. package/lib/core/utils/utils.d.ts +3 -3
  163. package/monkey-style-guide-2.0.110.tgz +0 -0
  164. package/package.json +22 -9
  165. package/bundles/monkey-style-guide.umd.js +0 -6220
  166. package/bundles/monkey-style-guide.umd.js.map +0 -1
  167. package/esm2015/lib/components/date-range-picker/date-range-picker.component.js +0 -553
  168. package/esm2015/lib/components/icon/icon-arrow-down.component.js +0 -19
  169. package/esm2015/lib/components/icon/icon-arrow-left.component.js +0 -19
  170. package/esm2015/lib/components/icon/icon-arrow-right.component.js +0 -19
  171. package/esm2015/lib/components/icon/icon-arrow-up.component.js +0 -19
  172. package/esm2015/lib/components/icon/icon-bank.component.js +0 -19
  173. package/esm2015/lib/components/icon/icon-bell.component.js +0 -19
  174. package/esm2015/lib/components/icon/icon-book.component.js +0 -19
  175. package/esm2015/lib/components/icon/icon-box.component.js +0 -19
  176. package/esm2015/lib/components/icon/icon-calendar.component.js +0 -19
  177. package/esm2015/lib/components/icon/icon-camera.component.js +0 -19
  178. package/esm2015/lib/components/icon/icon-chat.component.js +0 -19
  179. package/esm2015/lib/components/icon/icon-check-circle-out.component.js +0 -19
  180. package/esm2015/lib/components/icon/icon-check-circle.component.js +0 -19
  181. package/esm2015/lib/components/icon/icon-check-grey.component.js +0 -19
  182. package/esm2015/lib/components/icon/icon-check-white.component.js +0 -19
  183. package/esm2015/lib/components/icon/icon-check.component.js +0 -19
  184. package/esm2015/lib/components/icon/icon-clipboard.component.js +0 -19
  185. package/esm2015/lib/components/icon/icon-clock.component.js +0 -19
  186. package/esm2015/lib/components/icon/icon-close.component.js +0 -19
  187. package/esm2015/lib/components/icon/icon-cnpj.component.js +0 -19
  188. package/esm2015/lib/components/icon/icon-codepen.component.js +0 -19
  189. package/esm2015/lib/components/icon/icon-company-name.component.js +0 -19
  190. package/esm2015/lib/components/icon/icon-contract.component.js +0 -19
  191. package/esm2015/lib/components/icon/icon-delete.component.js +0 -19
  192. package/esm2015/lib/components/icon/icon-document.component.js +0 -19
  193. package/esm2015/lib/components/icon/icon-dollar-sign.component.js +0 -19
  194. package/esm2015/lib/components/icon/icon-domain.component.js +0 -19
  195. package/esm2015/lib/components/icon/icon-download.component.js +0 -19
  196. package/esm2015/lib/components/icon/icon-edit.component.js +0 -19
  197. package/esm2015/lib/components/icon/icon-email.component.js +0 -19
  198. package/esm2015/lib/components/icon/icon-empty-doc.component.js +0 -19
  199. package/esm2015/lib/components/icon/icon-error.component.js +0 -19
  200. package/esm2015/lib/components/icon/icon-eye-closed.component.js +0 -19
  201. package/esm2015/lib/components/icon/icon-eye-open.component.js +0 -19
  202. package/esm2015/lib/components/icon/icon-filter.component.js +0 -19
  203. package/esm2015/lib/components/icon/icon-grid.component.js +0 -19
  204. package/esm2015/lib/components/icon/icon-help.component.js +0 -19
  205. package/esm2015/lib/components/icon/icon-hexagon.component.js +0 -19
  206. package/esm2015/lib/components/icon/icon-home.component.js +0 -19
  207. package/esm2015/lib/components/icon/icon-image.component.js +0 -19
  208. package/esm2015/lib/components/icon/icon-list.component.js +0 -19
  209. package/esm2015/lib/components/icon/icon-location-pin.component.js +0 -19
  210. package/esm2015/lib/components/icon/icon-login.component.js +0 -19
  211. package/esm2015/lib/components/icon/icon-logout.component.js +0 -19
  212. package/esm2015/lib/components/icon/icon-menu.component.js +0 -19
  213. package/esm2015/lib/components/icon/icon-money-sign.component.js +0 -19
  214. package/esm2015/lib/components/icon/icon-more.component.js +0 -19
  215. package/esm2015/lib/components/icon/icon-offered.component.js +0 -19
  216. package/esm2015/lib/components/icon/icon-password.component.js +0 -19
  217. package/esm2015/lib/components/icon/icon-people.component.js +0 -19
  218. package/esm2015/lib/components/icon/icon-percent.component.js +0 -19
  219. package/esm2015/lib/components/icon/icon-person-document.component.js +0 -19
  220. package/esm2015/lib/components/icon/icon-person-sad.component.js +0 -19
  221. package/esm2015/lib/components/icon/icon-phone.component.js +0 -19
  222. package/esm2015/lib/components/icon/icon-pork.component.js +0 -19
  223. package/esm2015/lib/components/icon/icon-refresh.component.js +0 -19
  224. package/esm2015/lib/components/icon/icon-repeat.component.js +0 -19
  225. package/esm2015/lib/components/icon/icon-search.component.js +0 -19
  226. package/esm2015/lib/components/icon/icon-second-warning.component.js +0 -19
  227. package/esm2015/lib/components/icon/icon-settings.component.js +0 -19
  228. package/esm2015/lib/components/icon/icon-trash.component.js +0 -19
  229. package/esm2015/lib/components/icon/icon-upload.component.js +0 -19
  230. package/esm2015/lib/components/icon/icon-user.component.js +0 -19
  231. package/esm2015/lib/components/icon/icon-wallet.component.js +0 -19
  232. package/esm2015/lib/components/icon/icon-warning.component.js +0 -19
  233. package/esm2015/lib/components/input/input-filter.component.js +0 -262
  234. package/esm2015/lib/components/input/input.component.js +0 -384
  235. package/esm2015/lib/components/input-phone/input-phone.component.js +0 -307
  236. package/esm2015/lib/components/modal/modal.component.js +0 -241
  237. package/esm2015/lib/components/select/select-multiple.component.js +0 -308
  238. package/esm2015/lib/components/select/select-search.component.js +0 -308
  239. package/esm2015/lib/components/table/table.component.js +0 -204
  240. package/esm2015/lib/components/toggle/toggle.component.js +0 -56
  241. package/esm2015/lib/core/interfaces/monkey-modal-settings.js +0 -2
  242. package/esm2015/lib/core/services/settings/monkey-style-guide-theme-settings.service.js +0 -70
  243. package/esm2015/lib/core/utils/utils.js +0 -237
  244. package/fesm2015/monkey-style-guide.js.map +0 -1
  245. package/monkey-style-guide-2.0.106.tgz +0 -0
@@ -0,0 +1,304 @@
1
+ /**************************
2
+ * Copyright Monkey Exchange. All Rights Reserved
3
+ * This style guide was developed by Monkey Exchange Team
4
+ * MIT Licence
5
+ **************************/
6
+ import { Component, ViewEncapsulation, Input, forwardRef, HostListener, ContentChildren, Output, EventEmitter, ViewChild, } from '@angular/core';
7
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
+ import { MonkeyOptionComponent } from '../option';
9
+ import { MonkeyUtils } from '../../core/utils';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../icon/icon.component";
12
+ import * as i2 from "@angular/common";
13
+ export class MonkeySelectMultipleComponent {
14
+ constructor(cdRef) {
15
+ this.cdRef = cdRef;
16
+ this.onChange = new EventEmitter();
17
+ this.handledValue = [];
18
+ this.onModelChange = (value) => { };
19
+ this.onModelTouched = (value) => { };
20
+ this.selectedAll = false;
21
+ this._selected = [];
22
+ this._opened = false;
23
+ this._id = `mecx-select-${MonkeyUtils.getRandomString(10)}`;
24
+ this._disabled = false;
25
+ this._selectedValues = '';
26
+ }
27
+ onHandleSelectedValues() {
28
+ const { _selected, labelMoreValues } = this;
29
+ let selectedValues = '';
30
+ const handled = _selected.filter((_) => !_.selectAll);
31
+ if (_selected.length > 0) {
32
+ selectedValues = `${handled[0].label}`;
33
+ if (_selected.length >= 2) {
34
+ selectedValues = `${handled[0].label} ${labelMoreValues} ${handled.length - 1}`;
35
+ }
36
+ }
37
+ this._selectedValues = selectedValues;
38
+ }
39
+ onHandleSelected() {
40
+ const { _opened, _selected } = this;
41
+ let selectedLength = 0;
42
+ let selectAll = null;
43
+ this.options?.forEach((op) => {
44
+ const found = _selected.findIndex((val) => {
45
+ return val.value === op.value;
46
+ });
47
+ op.selected = null;
48
+ if (op.selectAll)
49
+ selectAll = op;
50
+ if (found >= 0) {
51
+ op.selected = op;
52
+ selectedLength += 1;
53
+ }
54
+ });
55
+ if (this.options?.length - 1 === selectedLength && selectAll) {
56
+ this.selectedAll = true;
57
+ selectAll.selected = selectAll;
58
+ }
59
+ this.onHandleSelectedValues();
60
+ if (_opened) {
61
+ this.selectOptions.nativeElement.focus();
62
+ this.cdRef.detectChanges();
63
+ }
64
+ }
65
+ validateOptions() {
66
+ if (!this.options)
67
+ return;
68
+ this._selected = [];
69
+ let selectedLength = 0;
70
+ let selectAll = null;
71
+ this.options?.forEach((op) => {
72
+ op.onSelectOption = this.onSelectOption.bind(this);
73
+ op.type = 'select-multiple';
74
+ op.selected = null;
75
+ if (op.selectAll)
76
+ selectAll = op;
77
+ const found = this.handledValue.findIndex((val) => {
78
+ return `${val}`.trim().toLowerCase() === `${op.value}`.trim().toLowerCase();
79
+ });
80
+ if (found >= 0) {
81
+ op.selected = op;
82
+ this._selected.push(op);
83
+ selectedLength += 1;
84
+ }
85
+ });
86
+ if (this.options?.length - 1 === selectedLength && selectAll) {
87
+ this.selectedAll = true;
88
+ selectAll.selected = selectAll;
89
+ }
90
+ this.onHandleSelectedValues();
91
+ }
92
+ registerOnChange(fn) {
93
+ this.onModelChange = fn;
94
+ }
95
+ registerOnTouched(fn) {
96
+ this.onModelTouched = fn;
97
+ }
98
+ setDisabledState(isDisabled) {
99
+ this._disabled = isDisabled;
100
+ }
101
+ set value(value) {
102
+ if (value !== undefined) {
103
+ if (this.handledValue.join(',') !== value) {
104
+ value?.split(',')?.forEach((op) => {
105
+ this.handledValue.push(op);
106
+ });
107
+ this.onModelChange(value);
108
+ this.onModelTouched(value);
109
+ }
110
+ }
111
+ this.onHandleSelected();
112
+ }
113
+ get value() {
114
+ return this.handledValue.join(',');
115
+ }
116
+ writeValue(value) {
117
+ this.value = value;
118
+ }
119
+ onChangeValue(event, value) {
120
+ event?.preventDefault();
121
+ event?.stopPropagation();
122
+ this.writeValue(value);
123
+ }
124
+ clickout() {
125
+ this._opened = false;
126
+ }
127
+ open() {
128
+ if (!this._opened) {
129
+ setTimeout(() => {
130
+ this._opened = true;
131
+ this.onHandleSelected();
132
+ }, 50);
133
+ }
134
+ }
135
+ ngAfterViewInit() {
136
+ setTimeout(() => {
137
+ this.validateOptions();
138
+ }, 0);
139
+ this.options.changes.subscribe(() => {
140
+ setTimeout(() => {
141
+ this.validateOptions();
142
+ }, 0);
143
+ });
144
+ }
145
+ onSelectOption(selected) {
146
+ if (selected.selectAll) {
147
+ this.selectedAll = !this.selectedAll;
148
+ this._selected = [];
149
+ if (this.selectedAll) {
150
+ this.options?.forEach((op) => {
151
+ this._selected.push(op);
152
+ });
153
+ }
154
+ }
155
+ else {
156
+ const index = this._selected.findIndex((val) => val.value === selected.value);
157
+ if (index >= 0) {
158
+ this._selected = this._selected.filter((op) => {
159
+ return (`${op.value}`.trim().toLowerCase() !== `${selected.value}`.trim().toLowerCase() &&
160
+ !op.selectAll);
161
+ });
162
+ }
163
+ else
164
+ this._selected.push(selected);
165
+ }
166
+ const value = this._selected
167
+ .filter((val) => !val.selectAll)
168
+ .map((val) => {
169
+ return val.value;
170
+ });
171
+ this.onChange.next(value);
172
+ this.onChangeValue(null, value.join(','));
173
+ this.onHandleSelected();
174
+ }
175
+ }
176
+ MonkeySelectMultipleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MonkeySelectMultipleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
177
+ MonkeySelectMultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MonkeySelectMultipleComponent, selector: "monkey-select-multiple", inputs: { label: "label", labelMoreValues: "labelMoreValues", helperMessage: "helperMessage", placeholder: "placeholder", icon: "icon", infoMessage: "infoMessage", errorMessage: "errorMessage", value: "value" }, outputs: { onChange: "onChange" }, host: { listeners: { "document:click": "clickout()" } }, providers: [
178
+ {
179
+ provide: NG_VALUE_ACCESSOR,
180
+ useExisting: forwardRef(() => MonkeySelectMultipleComponent),
181
+ multi: true,
182
+ },
183
+ ], queries: [{ propertyName: "options", predicate: MonkeyOptionComponent }], viewQueries: [{ propertyName: "selectOptions", first: true, predicate: ["selectOptions"], descendants: true, static: true }], ngImport: i0, template: `
184
+ <mecx-form-field [id]="_id" [ngClass]="{ disabled: _disabled }">
185
+ <mecx-form-field-header>
186
+ <label>
187
+ {{ label }}
188
+ </label>
189
+ <helper>
190
+ {{ helperMessage }}
191
+ </helper>
192
+ </mecx-form-field-header>
193
+ <mecx-form-field-body (click)="open()" [class.error]="errorMessage?.trim()">
194
+ <monkey-icon [icon]="icon" [color]="'#4B4A53'"></monkey-icon>
195
+
196
+ <mecx-select class="trigger" [ngClass]="{ open: _opened }">
197
+ <mecx-select__trigger>
198
+ <span>
199
+ {{ _selectedValues || 'Selecione' }}
200
+ </span>
201
+ <monkey-icon
202
+ [icon]="!_opened ? 'arrow-down-16' : 'arrow-up-16'"
203
+ [color]="'#4B4A53'"
204
+ ></monkey-icon>
205
+ </mecx-select__trigger>
206
+ </mecx-select>
207
+ </mecx-form-field-body>
208
+ <mecx-select-inside [ngClass]="{ open: _opened }">
209
+ <mecx-select-options #selectOptions>
210
+ <ng-content> </ng-content>
211
+ </mecx-select-options>
212
+ </mecx-select-inside>
213
+ <mecx-form-field-footer>
214
+ <info>
215
+ {{ infoMessage }}
216
+ </info>
217
+ <error>
218
+ {{ errorMessage }}
219
+ </error>
220
+ </mecx-form-field-footer>
221
+ </mecx-form-field>
222
+ `, isInline: true, components: [{ type: i1.MonkeyIconComponent, selector: "monkey-icon", inputs: ["icon", "color", "contrast", "disabled"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None });
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MonkeySelectMultipleComponent, decorators: [{
224
+ type: Component,
225
+ args: [{
226
+ selector: 'monkey-select-multiple',
227
+ template: `
228
+ <mecx-form-field [id]="_id" [ngClass]="{ disabled: _disabled }">
229
+ <mecx-form-field-header>
230
+ <label>
231
+ {{ label }}
232
+ </label>
233
+ <helper>
234
+ {{ helperMessage }}
235
+ </helper>
236
+ </mecx-form-field-header>
237
+ <mecx-form-field-body (click)="open()" [class.error]="errorMessage?.trim()">
238
+ <monkey-icon [icon]="icon" [color]="'#4B4A53'"></monkey-icon>
239
+
240
+ <mecx-select class="trigger" [ngClass]="{ open: _opened }">
241
+ <mecx-select__trigger>
242
+ <span>
243
+ {{ _selectedValues || 'Selecione' }}
244
+ </span>
245
+ <monkey-icon
246
+ [icon]="!_opened ? 'arrow-down-16' : 'arrow-up-16'"
247
+ [color]="'#4B4A53'"
248
+ ></monkey-icon>
249
+ </mecx-select__trigger>
250
+ </mecx-select>
251
+ </mecx-form-field-body>
252
+ <mecx-select-inside [ngClass]="{ open: _opened }">
253
+ <mecx-select-options #selectOptions>
254
+ <ng-content> </ng-content>
255
+ </mecx-select-options>
256
+ </mecx-select-inside>
257
+ <mecx-form-field-footer>
258
+ <info>
259
+ {{ infoMessage }}
260
+ </info>
261
+ <error>
262
+ {{ errorMessage }}
263
+ </error>
264
+ </mecx-form-field-footer>
265
+ </mecx-form-field>
266
+ `,
267
+ encapsulation: ViewEncapsulation.None,
268
+ providers: [
269
+ {
270
+ provide: NG_VALUE_ACCESSOR,
271
+ useExisting: forwardRef(() => MonkeySelectMultipleComponent),
272
+ multi: true,
273
+ },
274
+ ],
275
+ }]
276
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
277
+ type: Input
278
+ }], labelMoreValues: [{
279
+ type: Input
280
+ }], helperMessage: [{
281
+ type: Input
282
+ }], placeholder: [{
283
+ type: Input
284
+ }], icon: [{
285
+ type: Input
286
+ }], infoMessage: [{
287
+ type: Input
288
+ }], errorMessage: [{
289
+ type: Input
290
+ }], onChange: [{
291
+ type: Output
292
+ }], selectOptions: [{
293
+ type: ViewChild,
294
+ args: ['selectOptions', { static: true }]
295
+ }], options: [{
296
+ type: ContentChildren,
297
+ args: [MonkeyOptionComponent]
298
+ }], value: [{
299
+ type: Input
300
+ }], clickout: [{
301
+ type: HostListener,
302
+ args: ['document:click']
303
+ }] } });
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1zdHlsZS1ndWlkZS9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NEJBSTRCO0FBQzVCLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUVaLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsR0FNVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQXFEL0MsTUFBTSxPQUFPLDZCQUE2QjtJQTBCeEMsWUFBb0IsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFsQmxDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBS3JDLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFHcEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFckIsY0FBUyxHQUE0QixFQUFFLENBQUM7UUFDeEMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixRQUFHLEdBQVcsZUFBZSxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDL0QsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixvQkFBZSxHQUFH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S0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFHUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPcEMsT0FBTztzQkFEZCxlQUFlO3VCQUFDLHFCQUFxQjtnQkEyRmxDLEtBQUs7c0JBRFIsS0FBSztnQkE2Qk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gKiBDb3B5cmlnaHQgTW9ua2V5IEV4Y2hhbmdlLiBBbGwgUmlnaHRzIFJlc2VydmVkXHJcbiAqIFRoaXMgc3R5bGUgZ3VpZGUgd2FzIGRldmVsb3BlZCBieSBNb25rZXkgRXhjaGFuZ2UgVGVhbVxyXG4gKiBNSVQgTGljZW5jZVxyXG4gKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIElucHV0LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTW9ua2V5T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uJztcclxuaW1wb3J0IHsgTW9ua2V5VXRpbHMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbW9ua2V5LXNlbGVjdC1tdWx0aXBsZScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtZWN4LWZvcm0tZmllbGQgW2lkXT1cIl9pZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IF9kaXNhYmxlZCB9XCI+XHJcbiAgICAgIDxtZWN4LWZvcm0tZmllbGQtaGVhZGVyPlxyXG4gICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgIHt7IGxhYmVsIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGVscGVyPlxyXG4gICAgICAgICAge3sgaGVscGVyTWVzc2FnZSB9fVxyXG4gICAgICAgIDwvaGVscGVyPlxyXG4gICAgICA8L21lY3gtZm9ybS1maWVsZC1oZWFkZXI+XHJcbiAgICAgIDxtZWN4LWZvcm0tZmllbGQtYm9keSAoY2xpY2spPVwib3BlbigpXCIgW2NsYXNzLmVycm9yXT1cImVycm9yTWVzc2FnZT8udHJpbSgpXCI+XHJcbiAgICAgICAgPG1vbmtleS1pY29uIFtpY29uXT1cImljb25cIiBbY29sb3JdPVwiJyM0QjRBNTMnXCI+PC9tb25rZXktaWNvbj5cclxuXHJcbiAgICAgICAgPG1lY3gtc2VsZWN0IGNsYXNzPVwidHJpZ2dlclwiIFtuZ0NsYXNzXT1cInsgb3BlbjogX29wZW5lZCB9XCI+XHJcbiAgICAgICAgICA8bWVjeC1zZWxlY3RfX3RyaWdnZXI+XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIHt7IF9zZWxlY3RlZFZhbHVlcyB8fCAnU2VsZWNpb25lJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtb25rZXktaWNvblxyXG4gICAgICAgICAgICAgIFtpY29uXT1cIiFfb3BlbmVkID8gJ2Fycm93LWRvd24tMTYnIDogJ2Fycm93LXVwLTE2J1wiXHJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cIicjNEI0QTUzJ1wiXHJcbiAgICAgICAgICAgID48L21vbmtleS1pY29uPlxyXG4gICAgICAgICAgPC9tZWN4LXNlbGVjdF9fdHJpZ2dlcj5cclxuICAgICAgICA8L21lY3gtc2VsZWN0PlxyXG4gICAgICA8L21lY3gtZm9ybS1maWVsZC1ib2R5PlxyXG4gICAgICA8bWVjeC1zZWxlY3QtaW5zaWRlIFtuZ0NsYXNzXT1cInsgb3BlbjogX29wZW5lZCB9XCI+XHJcbiAgICAgICAgPG1lY3gtc2VsZWN0LW9wdGlvbnMgI3NlbGVjdE9wdGlvbnM+XHJcbiAgICAgICAgICA8bmctY29udGVudD4gPC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbWVjeC1zZWxlY3Qtb3B0aW9ucz5cclxuICAgICAgPC9tZWN4LXNlbGVjdC1pbnNpZGU+XHJcbiAgICAgIDxtZWN4LWZvcm0tZmllbGQtZm9vdGVyPlxyXG4gICAgICAgIDxpbmZvPlxyXG4gICAgICAgICAge3sgaW5mb01lc3NhZ2UgfX1cclxuICAgICAgICA8L2luZm8+XHJcbiAgICAgICAgPGVycm9yPlxyXG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgICAgICAgPC9lcnJvcj5cclxuICAgICAgPC9tZWN4LWZvcm0tZmllbGQtZm9vdGVyPlxyXG4gICAgPC9tZWN4LWZvcm0tZmllbGQ+XHJcbiAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTW9ua2V5U2VsZWN0TXVsdGlwbGVDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vbmtleVNlbGVjdE11bHRpcGxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbGFiZWxNb3JlVmFsdWVzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGVscGVyTWVzc2FnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGluZm9NZXNzYWdlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdE9wdGlvbnMnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHNlbGVjdE9wdGlvbnM6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlZFZhbHVlOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgb25Nb2RlbENoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcclxuICBwcml2YXRlIG9uTW9kZWxUb3VjaGVkID0gKHZhbHVlOiBhbnkpID0+IHt9O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTW9ua2V5T3B0aW9uQ29tcG9uZW50KVxyXG4gIHByaXZhdGUgb3B0aW9ucyE6IFF1ZXJ5TGlzdDxNb25rZXlPcHRpb25Db21wb25lbnQ+O1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRBbGwgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIF9zZWxlY3RlZDogTW9ua2V5T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcclxuICBwdWJsaWMgX29wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBfaWQ6IHN0cmluZyA9IGBtZWN4LXNlbGVjdC0ke01vbmtleVV0aWxzLmdldFJhbmRvbVN0cmluZygxMCl9YDtcclxuICBwdWJsaWMgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIF9zZWxlY3RlZFZhbHVlcyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgcHJpdmF0ZSBvbkhhbmRsZVNlbGVjdGVkVmFsdWVzKCkge1xyXG4gICAgY29uc3QgeyBfc2VsZWN0ZWQsIGxhYmVsTW9yZVZhbHVlcyB9ID0gdGhpcztcclxuICAgIGxldCBzZWxlY3RlZFZhbHVlcyA9ICcnO1xyXG4gICAgY29uc3QgaGFuZGxlZCA9IF9zZWxlY3RlZC5maWx0ZXIoKF8pID0+ICFfLnNlbGVjdEFsbCk7XHJcbiAgICBpZiAoX3NlbGVjdGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgc2VsZWN0ZWRWYWx1ZXMgPSBgJHtoYW5kbGVkWzBdLmxhYmVsfWA7XHJcbiAgICAgIGlmIChfc2VsZWN0ZWQubGVuZ3RoID49IDIpIHtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlcyA9IGAke2hhbmRsZWRbMF0ubGFiZWx9ICR7bGFiZWxNb3JlVmFsdWVzfSAke2hhbmRsZWQubGVuZ3RoIC0gMX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkVmFsdWVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkhhbmRsZVNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgeyBfb3BlbmVkLCBfc2VsZWN0ZWQgfSA9IHRoaXM7XHJcbiAgICBsZXQgc2VsZWN0ZWRMZW5ndGggPSAwO1xyXG4gICAgbGV0IHNlbGVjdEFsbCA9IG51bGw7XHJcbiAgICB0aGlzLm9wdGlvbnM/LmZvckVhY2goKG9wKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gX3NlbGVjdGVkLmZpbmRJbmRleCgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdmFsLnZhbHVlID09PSBvcC52YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIG9wLnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgaWYgKG9wLnNlbGVjdEFsbCkgc2VsZWN0QWxsID0gb3A7XHJcbiAgICAgIGlmIChmb3VuZCA+PSAwKSB7XHJcbiAgICAgICAgb3Auc2VsZWN0ZWQgPSBvcDtcclxuICAgICAgICBzZWxlY3RlZExlbmd0aCArPSAxO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmxlbmd0aCAtIDEgPT09IHNlbGVjdGVkTGVuZ3RoICYmIHNlbGVjdEFsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWxsID0gdHJ1ZTtcclxuICAgICAgc2VsZWN0QWxsLnNlbGVjdGVkID0gc2VsZWN0QWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkhhbmRsZVNlbGVjdGVkVmFsdWVzKCk7XHJcblxyXG4gICAgaWYgKF9vcGVuZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RPcHRpb25zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlT3B0aW9ucygpIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zKSByZXR1cm47XHJcbiAgICB0aGlzLl9zZWxlY3RlZCA9IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkTGVuZ3RoID0gMDtcclxuICAgIGxldCBzZWxlY3RBbGwgPSBudWxsO1xyXG4gICAgdGhpcy5vcHRpb25zPy5mb3JFYWNoKChvcCkgPT4ge1xyXG4gICAgICBvcC5vblNlbGVjdE9wdGlvbiA9IHRoaXMub25TZWxlY3RPcHRpb24uYmluZCh0aGlzKTtcclxuICAgICAgb3AudHlwZSA9ICdzZWxlY3QtbXVsdGlwbGUnO1xyXG4gICAgICBvcC5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgIGlmIChvcC5zZWxlY3RBbGwpIHNlbGVjdEFsbCA9IG9wO1xyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaGFuZGxlZFZhbHVlLmZpbmRJbmRleCgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsfWAudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IGAke29wLnZhbHVlfWAudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZm91bmQgPj0gMCkge1xyXG4gICAgICAgIG9wLnNlbGVjdGVkID0gb3A7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQucHVzaChvcCk7XHJcbiAgICAgICAgc2VsZWN0ZWRMZW5ndGggKz0gMTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sZW5ndGggLSAxID09PSBzZWxlY3RlZExlbmd0aCAmJiBzZWxlY3RBbGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFsbCA9IHRydWU7XHJcbiAgICAgIHNlbGVjdEFsbC5zZWxlY3RlZCA9IHNlbGVjdEFsbDtcclxuICAgIH1cclxuICAgIHRoaXMub25IYW5kbGVTZWxlY3RlZFZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmhhbmRsZWRWYWx1ZS5qb2luKCcsJykgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWU/LnNwbGl0KCcsJyk/LmZvckVhY2goKG9wOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlZFZhbHVlLnB1c2gob3ApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25IYW5kbGVTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVkVmFsdWUuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVZhbHVlKGV2ZW50OiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcclxuICBjbGlja291dCgpIHtcclxuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb3BlbigpIHtcclxuICAgIGlmICghdGhpcy5fb3BlbmVkKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkhhbmRsZVNlbGVjdGVkKCk7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZU9wdGlvbnMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0T3B0aW9uKHNlbGVjdGVkOiBNb25rZXlPcHRpb25Db21wb25lbnQpIHtcclxuICAgIGlmIChzZWxlY3RlZC5zZWxlY3RBbGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFsbCA9ICF0aGlzLnNlbGVjdGVkQWxsO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEFsbCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucz8uZm9yRWFjaCgob3ApID0+IHtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkLnB1c2gob3ApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkLmZpbmRJbmRleCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSA9PT0gc2VsZWN0ZWQudmFsdWUpO1xyXG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQuZmlsdGVyKChvcDogTW9ua2V5T3B0aW9uQ29tcG9uZW50KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBgJHtvcC52YWx1ZX1gLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtzZWxlY3RlZC52YWx1ZX1gLnRyaW0oKS50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICAgICFvcC5zZWxlY3RBbGxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB0aGlzLl9zZWxlY3RlZC5wdXNoKHNlbGVjdGVkKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fc2VsZWN0ZWRcclxuICAgICAgLmZpbHRlcigodmFsKSA9PiAhdmFsLnNlbGVjdEFsbClcclxuICAgICAgLm1hcCgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdmFsLnZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZVZhbHVlKG51bGwsIHZhbHVlLmpvaW4oJywnKSk7XHJcbiAgICB0aGlzLm9uSGFuZGxlU2VsZWN0ZWQoKTtcclxuICB9XHJcbn1cclxuIl19