monkey-style-guide 2.0.169 → 2.0.171

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 (538) hide show
  1. package/README.md +1267 -1266
  2. package/assets/data/country-codes.json +1466 -1466
  3. package/assets/icons/add-plus.svg +5 -5
  4. package/assets/icons/arrow-down.svg +3 -3
  5. package/assets/icons/arrow-left.svg +3 -3
  6. package/assets/icons/arrow-line-right.svg +5 -5
  7. package/assets/icons/arrow-right.svg +3 -3
  8. package/assets/icons/arrow-up.svg +3 -3
  9. package/assets/icons/arrows.svg +6 -6
  10. package/assets/icons/auction.svg +7 -7
  11. package/assets/icons/bank-account.svg +12 -12
  12. package/assets/icons/bank.svg +3 -3
  13. package/assets/icons/banknote-search.svg +8 -8
  14. package/assets/icons/bell.svg +4 -4
  15. package/assets/icons/block.svg +4 -4
  16. package/assets/icons/book-open-text.svg +10 -10
  17. package/assets/icons/book.svg +4 -4
  18. package/assets/icons/box.svg +6 -6
  19. package/assets/icons/build-person.svg +9 -9
  20. package/assets/icons/calendar.svg +6 -6
  21. package/assets/icons/camera.svg +4 -4
  22. package/assets/icons/card-machine.svg +14 -14
  23. package/assets/icons/card.svg +4 -4
  24. package/assets/icons/cash-banknote-invoice.svg +8 -8
  25. package/assets/icons/chat.svg +4 -4
  26. package/assets/icons/check-circle-out.svg +4 -4
  27. package/assets/icons/check-circle.svg +4 -4
  28. package/assets/icons/check-grey.svg +3 -3
  29. package/assets/icons/check-white.svg +4 -4
  30. package/assets/icons/check.svg +3 -3
  31. package/assets/icons/clipboard.svg +4 -4
  32. package/assets/icons/clock-closed.svg +6 -6
  33. package/assets/icons/clock.svg +4 -4
  34. package/assets/icons/close-circle.svg +5 -5
  35. package/assets/icons/close.svg +4 -4
  36. package/assets/icons/cnpj.svg +9 -9
  37. package/assets/icons/codepen.svg +7 -7
  38. package/assets/icons/company-name.svg +12 -12
  39. package/assets/icons/contract-pen.svg +7 -7
  40. package/assets/icons/contract.svg +14 -14
  41. package/assets/icons/delete.svg +5 -5
  42. package/assets/icons/document.svg +7 -7
  43. package/assets/icons/dollar-sign-circle.svg +7 -7
  44. package/assets/icons/dollar-sign.svg +5 -5
  45. package/assets/icons/domain.svg +9 -9
  46. package/assets/icons/dots-menu.svg +5 -5
  47. package/assets/icons/double-arrow-left.svg +4 -4
  48. package/assets/icons/double-arrow-right.svg +4 -4
  49. package/assets/icons/download.svg +5 -5
  50. package/assets/icons/edit-square.svg +4 -4
  51. package/assets/icons/edit.svg +3 -3
  52. package/assets/icons/email.svg +4 -4
  53. package/assets/icons/empty-doc.svg +4 -4
  54. package/assets/icons/error.svg +5 -5
  55. package/assets/icons/eye-closed.svg +11 -11
  56. package/assets/icons/eye-open.svg +4 -4
  57. package/assets/icons/filter-add.svg +6 -6
  58. package/assets/icons/filter.svg +3 -3
  59. package/assets/icons/grid.svg +6 -6
  60. package/assets/icons/help.svg +5 -5
  61. package/assets/icons/hexagon.svg +3 -3
  62. package/assets/icons/home.svg +4 -4
  63. package/assets/icons/image.svg +5 -5
  64. package/assets/icons/info.svg +6 -6
  65. package/assets/icons/invoice.svg +5 -5
  66. package/assets/icons/invoices-anticipated.svg +8 -8
  67. package/assets/icons/invoices-approval.svg +8 -8
  68. package/assets/icons/invoices-refused.svg +8 -8
  69. package/assets/icons/list.svg +8 -8
  70. package/assets/icons/location-pin.svg +4 -4
  71. package/assets/icons/login.svg +5 -5
  72. package/assets/icons/logout.svg +5 -5
  73. package/assets/icons/medal.svg +12 -12
  74. package/assets/icons/menu.svg +5 -5
  75. package/assets/icons/money-cedule.svg +6 -6
  76. package/assets/icons/money-hand.svg +6 -6
  77. package/assets/icons/money-sign.svg +4 -4
  78. package/assets/icons/money.svg +6 -6
  79. package/assets/icons/more-circle.svg +5 -5
  80. package/assets/icons/more.svg +4 -4
  81. package/assets/icons/new-company.svg +10 -10
  82. package/assets/icons/offered.svg +5 -5
  83. package/assets/icons/open-external.svg +5 -5
  84. package/assets/icons/password.svg +4 -4
  85. package/assets/icons/people.svg +6 -6
  86. package/assets/icons/percent.svg +5 -5
  87. package/assets/icons/person-document.svg +10 -10
  88. package/assets/icons/person-sad.svg +6 -6
  89. package/assets/icons/phone.svg +3 -3
  90. package/assets/icons/pork.svg +5 -5
  91. package/assets/icons/radio.svg +4 -4
  92. package/assets/icons/refresh.svg +5 -5
  93. package/assets/icons/repeat.svg +4 -4
  94. package/assets/icons/search.svg +4 -4
  95. package/assets/icons/second-warning.svg +5 -5
  96. package/assets/icons/settings.svg +4 -4
  97. package/assets/icons/shield-chekmark.svg +3 -3
  98. package/assets/icons/star.svg +3 -3
  99. package/assets/icons/store.svg +8 -8
  100. package/assets/icons/today.svg +9 -9
  101. package/assets/icons/trash.svg +6 -6
  102. package/assets/icons/trophy.svg +8 -8
  103. package/assets/icons/unfold-more.svg +4 -4
  104. package/assets/icons/upload.svg +5 -5
  105. package/assets/icons/user.svg +4 -4
  106. package/assets/icons/waiting.svg +17 -17
  107. package/assets/icons/wallet.svg +5 -5
  108. package/assets/icons/warning.svg +5 -5
  109. package/assets/scss/partials/_forms.scss +350 -350
  110. package/assets/scss/partials/_index.scss +11 -11
  111. package/assets/scss/partials/_radio-button.scss +35 -35
  112. package/assets/scss/partials/_style-reset.scss +185 -185
  113. package/assets/scss/partials/_typography.scss +149 -149
  114. package/assets/scss/partials/_variables.scss +184 -184
  115. package/assets/scss/partials/components/_buttons.scss +831 -831
  116. package/assets/scss/partials/components/_checkbox.scss +69 -69
  117. package/assets/scss/partials/components/_date-range-picker.scss +265 -265
  118. package/assets/scss/partials/components/_expansion.scss +96 -96
  119. package/assets/scss/partials/components/_image-crop.scss +305 -305
  120. package/assets/scss/partials/components/_index.scss +23 -23
  121. package/assets/scss/partials/components/_input-phone.scss +36 -36
  122. package/assets/scss/partials/components/_input.scss +65 -65
  123. package/assets/scss/partials/components/_progressbar.scss +112 -112
  124. package/assets/scss/partials/components/_radiobutton.scss +66 -66
  125. package/assets/scss/partials/components/_select.scss +356 -356
  126. package/assets/scss/partials/components/_snackbar.scss +204 -204
  127. package/assets/scss/partials/components/_stepper.scss +86 -86
  128. package/assets/scss/partials/components/_table.scss +148 -148
  129. package/assets/scss/partials/components/_wizard.scss +112 -112
  130. package/esm2020/lib/components/badge/badge.component.mjs +43 -43
  131. package/esm2020/lib/components/badge/badge.module.mjs +18 -18
  132. package/esm2020/lib/components/badge/index.mjs +2 -2
  133. package/esm2020/lib/components/button/button-avatar.component.mjs +53 -53
  134. package/esm2020/lib/components/button/button-dropdown.component.mjs +121 -121
  135. package/esm2020/lib/components/button/button.component.mjs +154 -154
  136. package/esm2020/lib/components/button/button.module.mjs +23 -23
  137. package/esm2020/lib/components/button/index.mjs +5 -5
  138. package/esm2020/lib/components/checkbox/checkbox.component.mjs +165 -165
  139. package/esm2020/lib/components/checkbox/checkbox.module.mjs +20 -20
  140. package/esm2020/lib/components/checkbox/index.mjs +3 -3
  141. package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +660 -660
  142. package/esm2020/lib/components/date-range-picker/date-range-picker.module.mjs +22 -22
  143. package/esm2020/lib/components/date-range-picker/index.mjs +3 -3
  144. package/esm2020/lib/components/expansion/expansion.component.mjs +115 -115
  145. package/esm2020/lib/components/expansion/expansion.module.mjs +19 -19
  146. package/esm2020/lib/components/expansion/index.mjs +2 -2
  147. package/esm2020/lib/components/file-upload/file-upload.component.mjs +294 -294
  148. package/esm2020/lib/components/file-upload/file-upload.module.mjs +37 -37
  149. package/esm2020/lib/components/file-upload/index.mjs +3 -3
  150. package/esm2020/lib/components/icon/icon-add-plus.component.mjs +15 -15
  151. package/esm2020/lib/components/icon/icon-arrow-down.component.mjs +15 -15
  152. package/esm2020/lib/components/icon/icon-arrow-left.component.mjs +15 -15
  153. package/esm2020/lib/components/icon/icon-arrow-line-right.component.mjs +15 -15
  154. package/esm2020/lib/components/icon/icon-arrow-right.component.mjs +15 -15
  155. package/esm2020/lib/components/icon/icon-arrow-up.component.mjs +15 -15
  156. package/esm2020/lib/components/icon/icon-arrows.component.mjs +15 -15
  157. package/esm2020/lib/components/icon/icon-auction.component.mjs +15 -15
  158. package/esm2020/lib/components/icon/icon-average-tax.mjs +15 -15
  159. package/esm2020/lib/components/icon/icon-bank-account.component.mjs +15 -15
  160. package/esm2020/lib/components/icon/icon-bank-agency.mjs +15 -15
  161. package/esm2020/lib/components/icon/icon-bank.component.mjs +15 -15
  162. package/esm2020/lib/components/icon/icon-banknote-search.component.mjs +15 -15
  163. package/esm2020/lib/components/icon/icon-bell.component.mjs +15 -15
  164. package/esm2020/lib/components/icon/icon-block.component.mjs +15 -15
  165. package/esm2020/lib/components/icon/icon-book-open-text.component.mjs +15 -15
  166. package/esm2020/lib/components/icon/icon-book.component.mjs +15 -15
  167. package/esm2020/lib/components/icon/icon-box.component.mjs +15 -15
  168. package/esm2020/lib/components/icon/icon-build-person.component.mjs +15 -15
  169. package/esm2020/lib/components/icon/icon-calendar.component.mjs +15 -15
  170. package/esm2020/lib/components/icon/icon-camera.component.mjs +15 -15
  171. package/esm2020/lib/components/icon/icon-card-machine.component.mjs +15 -15
  172. package/esm2020/lib/components/icon/icon-card.component.mjs +15 -15
  173. package/esm2020/lib/components/icon/icon-cash-banknote-invoice.mjs +15 -15
  174. package/esm2020/lib/components/icon/icon-chat.component.mjs +15 -15
  175. package/esm2020/lib/components/icon/icon-check-circle-out.component.mjs +15 -15
  176. package/esm2020/lib/components/icon/icon-check-circle.component.mjs +15 -15
  177. package/esm2020/lib/components/icon/icon-check-grey.component.mjs +15 -15
  178. package/esm2020/lib/components/icon/icon-check-white.component.mjs +15 -15
  179. package/esm2020/lib/components/icon/icon-check.component.mjs +15 -15
  180. package/esm2020/lib/components/icon/icon-clipboard.component.mjs +15 -15
  181. package/esm2020/lib/components/icon/icon-clock-closed.component.mjs +15 -15
  182. package/esm2020/lib/components/icon/icon-clock.component.mjs +15 -15
  183. package/esm2020/lib/components/icon/icon-close-circle.component.mjs +15 -15
  184. package/esm2020/lib/components/icon/icon-close.component.mjs +15 -15
  185. package/esm2020/lib/components/icon/icon-cnpj.component.mjs +15 -15
  186. package/esm2020/lib/components/icon/icon-codepen.component.mjs +15 -15
  187. package/esm2020/lib/components/icon/icon-company-name.component.mjs +15 -15
  188. package/esm2020/lib/components/icon/icon-contract-pen.component.mjs +15 -15
  189. package/esm2020/lib/components/icon/icon-contract.component.mjs +15 -15
  190. package/esm2020/lib/components/icon/icon-delete.component.mjs +15 -15
  191. package/esm2020/lib/components/icon/icon-document.component.mjs +15 -15
  192. package/esm2020/lib/components/icon/icon-dollar-sign-circle.component.mjs +15 -15
  193. package/esm2020/lib/components/icon/icon-dollar-sign.component.mjs +15 -15
  194. package/esm2020/lib/components/icon/icon-domain.component.mjs +15 -15
  195. package/esm2020/lib/components/icon/icon-dots-menu.component.mjs +15 -15
  196. package/esm2020/lib/components/icon/icon-double-arrow-left.component.mjs +15 -15
  197. package/esm2020/lib/components/icon/icon-double-arrow-right.component.mjs +15 -15
  198. package/esm2020/lib/components/icon/icon-download.component.mjs +15 -15
  199. package/esm2020/lib/components/icon/icon-drag-drop.component.mjs +15 -15
  200. package/esm2020/lib/components/icon/icon-edit-square.component.mjs +15 -15
  201. package/esm2020/lib/components/icon/icon-edit.component.mjs +15 -15
  202. package/esm2020/lib/components/icon/icon-email.component.mjs +15 -15
  203. package/esm2020/lib/components/icon/icon-empty-doc.component.mjs +15 -15
  204. package/esm2020/lib/components/icon/icon-error.component.mjs +15 -15
  205. package/esm2020/lib/components/icon/icon-eye-closed.component.mjs +15 -15
  206. package/esm2020/lib/components/icon/icon-eye-open.component.mjs +15 -15
  207. package/esm2020/lib/components/icon/icon-filter-add.component.mjs +15 -15
  208. package/esm2020/lib/components/icon/icon-filter.component.mjs +15 -15
  209. package/esm2020/lib/components/icon/icon-grid.component.mjs +15 -15
  210. package/esm2020/lib/components/icon/icon-hands-clap.component.mjs +15 -15
  211. package/esm2020/lib/components/icon/icon-help.component.mjs +15 -15
  212. package/esm2020/lib/components/icon/icon-hexagon.component.mjs +15 -15
  213. package/esm2020/lib/components/icon/icon-home.component.mjs +15 -15
  214. package/esm2020/lib/components/icon/icon-image.component.mjs +15 -15
  215. package/esm2020/lib/components/icon/icon-info.component.mjs +15 -15
  216. package/esm2020/lib/components/icon/icon-invoice.component.mjs +15 -15
  217. package/esm2020/lib/components/icon/icon-invoices-anticipated.component.mjs +15 -15
  218. package/esm2020/lib/components/icon/icon-invoices-approval.component.mjs +15 -15
  219. package/esm2020/lib/components/icon/icon-invoices-refused.component.mjs +15 -15
  220. package/esm2020/lib/components/icon/icon-list.component.mjs +15 -15
  221. package/esm2020/lib/components/icon/icon-location-pin.component.mjs +15 -15
  222. package/esm2020/lib/components/icon/icon-login.component.mjs +15 -15
  223. package/esm2020/lib/components/icon/icon-logout.component.mjs +15 -15
  224. package/esm2020/lib/components/icon/icon-medal.component.mjs +15 -15
  225. package/esm2020/lib/components/icon/icon-menu.component.mjs +15 -15
  226. package/esm2020/lib/components/icon/icon-money-cedule.component.mjs +15 -15
  227. package/esm2020/lib/components/icon/icon-money-discount.mjs +15 -15
  228. package/esm2020/lib/components/icon/icon-money-hand.component.mjs +15 -15
  229. package/esm2020/lib/components/icon/icon-money-net.mjs +15 -15
  230. package/esm2020/lib/components/icon/icon-money-new.mjs +15 -15
  231. package/esm2020/lib/components/icon/icon-money-sign.component.mjs +15 -15
  232. package/esm2020/lib/components/icon/icon-money.component.mjs +15 -15
  233. package/esm2020/lib/components/icon/icon-more-circle.component.mjs +15 -15
  234. package/esm2020/lib/components/icon/icon-more.component.mjs +15 -15
  235. package/esm2020/lib/components/icon/icon-new-company.component.mjs +15 -15
  236. package/esm2020/lib/components/icon/icon-offered.component.mjs +15 -15
  237. package/esm2020/lib/components/icon/icon-open-external.component.mjs +15 -15
  238. package/esm2020/lib/components/icon/icon-password.component.mjs +15 -15
  239. package/esm2020/lib/components/icon/icon-people.component.mjs +15 -15
  240. package/esm2020/lib/components/icon/icon-percent.component.mjs +15 -15
  241. package/esm2020/lib/components/icon/icon-person-document.component.mjs +15 -15
  242. package/esm2020/lib/components/icon/icon-person-sad.component.mjs +15 -15
  243. package/esm2020/lib/components/icon/icon-phone-call.component.mjs +15 -15
  244. package/esm2020/lib/components/icon/icon-phone.component.mjs +15 -15
  245. package/esm2020/lib/components/icon/icon-pin-navigation.component.mjs +15 -15
  246. package/esm2020/lib/components/icon/icon-pork.component.mjs +15 -15
  247. package/esm2020/lib/components/icon/icon-radio.component.mjs +15 -15
  248. package/esm2020/lib/components/icon/icon-refresh.component.mjs +15 -15
  249. package/esm2020/lib/components/icon/icon-registration.mjs +15 -15
  250. package/esm2020/lib/components/icon/icon-repeat.component.mjs +15 -15
  251. package/esm2020/lib/components/icon/icon-search.component.mjs +15 -15
  252. package/esm2020/lib/components/icon/icon-second-warning.component.mjs +15 -15
  253. package/esm2020/lib/components/icon/icon-settings.component.mjs +15 -15
  254. package/esm2020/lib/components/icon/icon-shield-chekmark.component.mjs +15 -15
  255. package/esm2020/lib/components/icon/icon-star.component.mjs +15 -15
  256. package/esm2020/lib/components/icon/icon-store.component.mjs +15 -15
  257. package/esm2020/lib/components/icon/icon-today.component.mjs +15 -15
  258. package/esm2020/lib/components/icon/icon-trash.component.mjs +15 -15
  259. package/esm2020/lib/components/icon/icon-trophy.component.mjs +15 -15
  260. package/esm2020/lib/components/icon/icon-unfold-more.component.mjs +15 -15
  261. package/esm2020/lib/components/icon/icon-upload.component.mjs +15 -15
  262. package/esm2020/lib/components/icon/icon-user-group.component.mjs +15 -15
  263. package/esm2020/lib/components/icon/icon-user.component.mjs +15 -15
  264. package/esm2020/lib/components/icon/icon-waiting.component.mjs +15 -15
  265. package/esm2020/lib/components/icon/icon-wallet.component.mjs +15 -15
  266. package/esm2020/lib/components/icon/icon-warning.component.mjs +15 -15
  267. package/esm2020/lib/components/icon/icon.component.mjs +1614 -1613
  268. package/esm2020/lib/components/icon/icon.module.mjs +372 -369
  269. package/esm2020/lib/components/icon/index.mjs +109 -109
  270. package/esm2020/lib/components/image-crop/image-crop.component.mjs +516 -516
  271. package/esm2020/lib/components/image-crop/image-crop.module.mjs +41 -41
  272. package/esm2020/lib/components/image-crop/index.mjs +3 -3
  273. package/esm2020/lib/components/index.mjs +20 -20
  274. package/esm2020/lib/components/input/index.mjs +4 -4
  275. package/esm2020/lib/components/input/input-filter.component.mjs +286 -286
  276. package/esm2020/lib/components/input/input.component.mjs +384 -384
  277. package/esm2020/lib/components/input/input.module.mjs +38 -38
  278. package/esm2020/lib/components/input-phone/index.mjs +3 -3
  279. package/esm2020/lib/components/input-phone/input-phone.component.mjs +307 -307
  280. package/esm2020/lib/components/input-phone/input-phone.module.mjs +45 -45
  281. package/esm2020/lib/components/modal/index.mjs +3 -3
  282. package/esm2020/lib/components/modal/modal.component.mjs +236 -236
  283. package/esm2020/lib/components/modal/modal.module.mjs +21 -21
  284. package/esm2020/lib/components/option/index.mjs +3 -3
  285. package/esm2020/lib/components/option/option.component.mjs +131 -131
  286. package/esm2020/lib/components/option/option.module.mjs +29 -29
  287. package/esm2020/lib/components/radiobutton/index.mjs +3 -3
  288. package/esm2020/lib/components/radiobutton/radiobutton.component.mjs +165 -165
  289. package/esm2020/lib/components/radiobutton/radiobutton.module.mjs +36 -36
  290. package/esm2020/lib/components/select/index.mjs +6 -6
  291. package/esm2020/lib/components/select/select-filter.component.mjs +197 -197
  292. package/esm2020/lib/components/select/select-multiple.component.mjs +304 -304
  293. package/esm2020/lib/components/select/select-search.component.mjs +306 -306
  294. package/esm2020/lib/components/select/select.component.mjs +245 -245
  295. package/esm2020/lib/components/select/select.module.mjs +61 -61
  296. package/esm2020/lib/components/stepper/index.mjs +3 -3
  297. package/esm2020/lib/components/stepper/stepper.component.mjs +57 -57
  298. package/esm2020/lib/components/stepper/stepper.module.mjs +20 -20
  299. package/esm2020/lib/components/tab/index.mjs +2 -2
  300. package/esm2020/lib/components/tab/tab.component.mjs +91 -91
  301. package/esm2020/lib/components/tab/tab.module.mjs +20 -20
  302. package/esm2020/lib/components/table/index.mjs +4 -4
  303. package/esm2020/lib/components/table/table-column.component.mjs +34 -34
  304. package/esm2020/lib/components/table/table.component.mjs +267 -267
  305. package/esm2020/lib/components/table/table.module.mjs +23 -23
  306. package/esm2020/lib/components/toggle/index.mjs +2 -2
  307. package/esm2020/lib/components/toggle/toggle.component.mjs +56 -56
  308. package/esm2020/lib/components/toggle/toggle.module.mjs +18 -18
  309. package/esm2020/lib/components/wizard/index.mjs +3 -3
  310. package/esm2020/lib/components/wizard/wizard.component.mjs +61 -61
  311. package/esm2020/lib/components/wizard/wizard.module.mjs +33 -33
  312. package/esm2020/lib/core/index.mjs +4 -4
  313. package/esm2020/lib/core/interfaces/index.mjs +2 -2
  314. package/esm2020/lib/core/interfaces/monkey-modal-settings.mjs +1 -1
  315. package/esm2020/lib/core/interfaces/monkey-style-settings.mjs +2 -2
  316. package/esm2020/lib/core/services/index.mjs +4 -4
  317. package/esm2020/lib/core/services/modal/index.mjs +2 -2
  318. package/esm2020/lib/core/services/modal/monkey-style-guide-modal-fixed.service.mjs +51 -51
  319. package/esm2020/lib/core/services/modal/monkey-style-guide-modal.service.mjs +54 -54
  320. package/esm2020/lib/core/services/monkey-style-guide.service.mjs +17 -17
  321. package/esm2020/lib/core/services/settings/index.mjs +1 -1
  322. package/esm2020/lib/core/services/settings/monkey-style-guide-settings.service.mjs +41 -41
  323. package/esm2020/lib/core/services/settings/monkey-style-guide-theme-settings.service.mjs +80 -80
  324. package/esm2020/lib/core/services/snackbar/index.mjs +1 -1
  325. package/esm2020/lib/core/services/snackbar/mokey-style-guide-snackbar.service.mjs +226 -226
  326. package/esm2020/lib/core/utils/index.mjs +1 -1
  327. package/esm2020/lib/core/utils/utils.mjs +240 -240
  328. package/esm2020/lib/monkey-style-guide.module.mjs +31 -31
  329. package/esm2020/monkey-style-guide.mjs +4 -4
  330. package/esm2020/public-api.mjs +9 -9
  331. package/fesm2015/monkey-style-guide.mjs +9444 -9442
  332. package/fesm2015/monkey-style-guide.mjs.map +1 -1
  333. package/fesm2020/monkey-style-guide.mjs +9433 -9431
  334. package/fesm2020/monkey-style-guide.mjs.map +1 -1
  335. package/lib/components/badge/badge.component.d.ts +8 -8
  336. package/lib/components/badge/badge.module.d.ts +8 -8
  337. package/lib/components/badge/index.d.ts +2 -2
  338. package/lib/components/button/button-avatar.component.d.ts +19 -19
  339. package/lib/components/button/button-dropdown.component.d.ts +23 -23
  340. package/lib/components/button/button.component.d.ts +22 -22
  341. package/lib/components/button/button.module.d.ts +12 -12
  342. package/lib/components/button/index.d.ts +4 -4
  343. package/lib/components/checkbox/checkbox.component.d.ts +32 -32
  344. package/lib/components/checkbox/checkbox.module.d.ts +9 -9
  345. package/lib/components/checkbox/index.d.ts +2 -2
  346. package/lib/components/date-range-picker/date-range-picker.component.d.ts +69 -69
  347. package/lib/components/date-range-picker/date-range-picker.module.d.ts +11 -11
  348. package/lib/components/date-range-picker/index.d.ts +2 -2
  349. package/lib/components/expansion/expansion.component.d.ts +20 -20
  350. package/lib/components/expansion/expansion.module.d.ts +9 -9
  351. package/lib/components/expansion/index.d.ts +2 -2
  352. package/lib/components/file-upload/file-upload.component.d.ts +51 -51
  353. package/lib/components/file-upload/file-upload.module.d.ts +11 -11
  354. package/lib/components/file-upload/index.d.ts +2 -2
  355. package/lib/components/icon/icon-add-plus.component.d.ts +7 -7
  356. package/lib/components/icon/icon-arrow-down.component.d.ts +7 -7
  357. package/lib/components/icon/icon-arrow-left.component.d.ts +7 -7
  358. package/lib/components/icon/icon-arrow-line-right.component.d.ts +7 -7
  359. package/lib/components/icon/icon-arrow-right.component.d.ts +7 -7
  360. package/lib/components/icon/icon-arrow-up.component.d.ts +7 -7
  361. package/lib/components/icon/icon-arrows.component.d.ts +7 -7
  362. package/lib/components/icon/icon-auction.component.d.ts +7 -7
  363. package/lib/components/icon/icon-average-tax.d.ts +7 -7
  364. package/lib/components/icon/icon-bank-account.component.d.ts +7 -7
  365. package/lib/components/icon/icon-bank-agency.d.ts +7 -7
  366. package/lib/components/icon/icon-bank.component.d.ts +7 -7
  367. package/lib/components/icon/icon-banknote-search.component.d.ts +7 -7
  368. package/lib/components/icon/icon-bell.component.d.ts +7 -7
  369. package/lib/components/icon/icon-block.component.d.ts +7 -7
  370. package/lib/components/icon/icon-book-open-text.component.d.ts +7 -7
  371. package/lib/components/icon/icon-book.component.d.ts +7 -7
  372. package/lib/components/icon/icon-box.component.d.ts +7 -7
  373. package/lib/components/icon/icon-build-person.component.d.ts +7 -7
  374. package/lib/components/icon/icon-calendar.component.d.ts +7 -7
  375. package/lib/components/icon/icon-camera.component.d.ts +7 -7
  376. package/lib/components/icon/icon-card-machine.component.d.ts +7 -7
  377. package/lib/components/icon/icon-card.component.d.ts +7 -7
  378. package/lib/components/icon/icon-cash-banknote-invoice.d.ts +7 -7
  379. package/lib/components/icon/icon-chat.component.d.ts +7 -7
  380. package/lib/components/icon/icon-check-circle-out.component.d.ts +7 -7
  381. package/lib/components/icon/icon-check-circle.component.d.ts +7 -7
  382. package/lib/components/icon/icon-check-grey.component.d.ts +7 -7
  383. package/lib/components/icon/icon-check-white.component.d.ts +7 -7
  384. package/lib/components/icon/icon-check.component.d.ts +7 -7
  385. package/lib/components/icon/icon-clipboard.component.d.ts +7 -7
  386. package/lib/components/icon/icon-clock-closed.component.d.ts +7 -7
  387. package/lib/components/icon/icon-clock.component.d.ts +7 -7
  388. package/lib/components/icon/icon-close-circle.component.d.ts +7 -7
  389. package/lib/components/icon/icon-close.component.d.ts +7 -7
  390. package/lib/components/icon/icon-cnpj.component.d.ts +7 -7
  391. package/lib/components/icon/icon-codepen.component.d.ts +7 -7
  392. package/lib/components/icon/icon-company-name.component.d.ts +7 -7
  393. package/lib/components/icon/icon-contract-pen.component.d.ts +7 -7
  394. package/lib/components/icon/icon-contract.component.d.ts +7 -7
  395. package/lib/components/icon/icon-delete.component.d.ts +7 -7
  396. package/lib/components/icon/icon-document.component.d.ts +7 -7
  397. package/lib/components/icon/icon-dollar-sign-circle.component.d.ts +7 -7
  398. package/lib/components/icon/icon-dollar-sign.component.d.ts +7 -7
  399. package/lib/components/icon/icon-domain.component.d.ts +7 -7
  400. package/lib/components/icon/icon-dots-menu.component.d.ts +7 -7
  401. package/lib/components/icon/icon-double-arrow-left.component.d.ts +7 -7
  402. package/lib/components/icon/icon-double-arrow-right.component.d.ts +7 -7
  403. package/lib/components/icon/icon-download.component.d.ts +7 -7
  404. package/lib/components/icon/icon-drag-drop.component.d.ts +7 -7
  405. package/lib/components/icon/icon-edit-square.component.d.ts +7 -7
  406. package/lib/components/icon/icon-edit.component.d.ts +7 -7
  407. package/lib/components/icon/icon-email.component.d.ts +7 -7
  408. package/lib/components/icon/icon-empty-doc.component.d.ts +7 -7
  409. package/lib/components/icon/icon-error.component.d.ts +7 -7
  410. package/lib/components/icon/icon-eye-closed.component.d.ts +7 -7
  411. package/lib/components/icon/icon-eye-open.component.d.ts +7 -7
  412. package/lib/components/icon/icon-filter-add.component.d.ts +7 -7
  413. package/lib/components/icon/icon-filter.component.d.ts +7 -7
  414. package/lib/components/icon/icon-grid.component.d.ts +7 -7
  415. package/lib/components/icon/icon-hands-clap.component.d.ts +7 -7
  416. package/lib/components/icon/icon-help.component.d.ts +7 -7
  417. package/lib/components/icon/icon-hexagon.component.d.ts +7 -7
  418. package/lib/components/icon/icon-home.component.d.ts +7 -7
  419. package/lib/components/icon/icon-image.component.d.ts +7 -7
  420. package/lib/components/icon/icon-info.component.d.ts +7 -7
  421. package/lib/components/icon/icon-invoice.component.d.ts +7 -7
  422. package/lib/components/icon/icon-invoices-anticipated.component.d.ts +7 -7
  423. package/lib/components/icon/icon-invoices-approval.component.d.ts +7 -7
  424. package/lib/components/icon/icon-invoices-refused.component.d.ts +7 -7
  425. package/lib/components/icon/icon-list.component.d.ts +7 -7
  426. package/lib/components/icon/icon-location-pin.component.d.ts +7 -7
  427. package/lib/components/icon/icon-login.component.d.ts +7 -7
  428. package/lib/components/icon/icon-logout.component.d.ts +7 -7
  429. package/lib/components/icon/icon-medal.component.d.ts +7 -7
  430. package/lib/components/icon/icon-menu.component.d.ts +7 -7
  431. package/lib/components/icon/icon-money-cedule.component.d.ts +7 -7
  432. package/lib/components/icon/icon-money-discount.d.ts +7 -7
  433. package/lib/components/icon/icon-money-hand.component.d.ts +7 -7
  434. package/lib/components/icon/icon-money-net.d.ts +7 -7
  435. package/lib/components/icon/icon-money-new.d.ts +7 -7
  436. package/lib/components/icon/icon-money-sign.component.d.ts +7 -7
  437. package/lib/components/icon/icon-money.component.d.ts +7 -7
  438. package/lib/components/icon/icon-more-circle.component.d.ts +7 -7
  439. package/lib/components/icon/icon-more.component.d.ts +7 -7
  440. package/lib/components/icon/icon-new-company.component.d.ts +7 -7
  441. package/lib/components/icon/icon-offered.component.d.ts +7 -7
  442. package/lib/components/icon/icon-open-external.component.d.ts +7 -7
  443. package/lib/components/icon/icon-password.component.d.ts +7 -7
  444. package/lib/components/icon/icon-people.component.d.ts +7 -7
  445. package/lib/components/icon/icon-percent.component.d.ts +7 -7
  446. package/lib/components/icon/icon-person-document.component.d.ts +7 -7
  447. package/lib/components/icon/icon-person-sad.component.d.ts +7 -7
  448. package/lib/components/icon/icon-phone-call.component.d.ts +7 -7
  449. package/lib/components/icon/icon-phone.component.d.ts +7 -7
  450. package/lib/components/icon/icon-pin-navigation.component.d.ts +7 -7
  451. package/lib/components/icon/icon-pork.component.d.ts +7 -7
  452. package/lib/components/icon/icon-radio.component.d.ts +7 -7
  453. package/lib/components/icon/icon-refresh.component.d.ts +7 -7
  454. package/lib/components/icon/icon-registration.d.ts +7 -7
  455. package/lib/components/icon/icon-repeat.component.d.ts +7 -7
  456. package/lib/components/icon/icon-search.component.d.ts +7 -7
  457. package/lib/components/icon/icon-second-warning.component.d.ts +7 -7
  458. package/lib/components/icon/icon-settings.component.d.ts +7 -7
  459. package/lib/components/icon/icon-shield-chekmark.component.d.ts +7 -7
  460. package/lib/components/icon/icon-star.component.d.ts +7 -7
  461. package/lib/components/icon/icon-store.component.d.ts +7 -7
  462. package/lib/components/icon/icon-today.component.d.ts +7 -7
  463. package/lib/components/icon/icon-trash.component.d.ts +7 -7
  464. package/lib/components/icon/icon-trophy.component.d.ts +7 -7
  465. package/lib/components/icon/icon-unfold-more.component.d.ts +7 -7
  466. package/lib/components/icon/icon-upload.component.d.ts +7 -7
  467. package/lib/components/icon/icon-user-group.component.d.ts +7 -7
  468. package/lib/components/icon/icon-user.component.d.ts +7 -7
  469. package/lib/components/icon/icon-waiting.component.d.ts +7 -7
  470. package/lib/components/icon/icon-wallet.component.d.ts +7 -7
  471. package/lib/components/icon/icon-warning.component.d.ts +7 -7
  472. package/lib/components/icon/icon.component.d.ts +27 -27
  473. package/lib/components/icon/icon.module.d.ts +125 -124
  474. package/lib/components/icon/index.d.ts +108 -108
  475. package/lib/components/image-crop/image-crop.component.d.ts +77 -77
  476. package/lib/components/image-crop/image-crop.module.d.ts +12 -12
  477. package/lib/components/image-crop/index.d.ts +2 -2
  478. package/lib/components/index.d.ts +19 -19
  479. package/lib/components/input/index.d.ts +3 -3
  480. package/lib/components/input/input-filter.component.d.ts +55 -55
  481. package/lib/components/input/input.component.d.ts +64 -64
  482. package/lib/components/input/input.module.d.ts +12 -12
  483. package/lib/components/input-phone/index.d.ts +2 -2
  484. package/lib/components/input-phone/input-phone.component.d.ts +62 -62
  485. package/lib/components/input-phone/input-phone.module.d.ts +13 -13
  486. package/lib/components/modal/index.d.ts +2 -2
  487. package/lib/components/modal/modal.component.d.ts +24 -24
  488. package/lib/components/modal/modal.module.d.ts +10 -10
  489. package/lib/components/option/index.d.ts +2 -2
  490. package/lib/components/option/option.component.d.ts +22 -22
  491. package/lib/components/option/option.module.d.ts +8 -8
  492. package/lib/components/radiobutton/index.d.ts +2 -2
  493. package/lib/components/radiobutton/radiobutton.component.d.ts +39 -39
  494. package/lib/components/radiobutton/radiobutton.module.d.ts +9 -9
  495. package/lib/components/select/index.d.ts +5 -5
  496. package/lib/components/select/select-filter.component.d.ts +41 -41
  497. package/lib/components/select/select-multiple.component.d.ts +48 -48
  498. package/lib/components/select/select-search.component.d.ts +56 -56
  499. package/lib/components/select/select.component.d.ts +48 -48
  500. package/lib/components/select/select.module.d.ts +15 -15
  501. package/lib/components/stepper/index.d.ts +2 -2
  502. package/lib/components/stepper/stepper.component.d.ts +18 -18
  503. package/lib/components/stepper/stepper.module.d.ts +9 -9
  504. package/lib/components/tab/index.d.ts +2 -2
  505. package/lib/components/tab/tab.component.d.ts +24 -24
  506. package/lib/components/tab/tab.module.d.ts +10 -10
  507. package/lib/components/table/index.d.ts +3 -3
  508. package/lib/components/table/table-column.component.d.ts +5 -5
  509. package/lib/components/table/table.component.d.ts +59 -59
  510. package/lib/components/table/table.module.d.ts +12 -12
  511. package/lib/components/toggle/index.d.ts +2 -2
  512. package/lib/components/toggle/toggle.component.d.ts +18 -18
  513. package/lib/components/toggle/toggle.module.d.ts +8 -8
  514. package/lib/components/wizard/index.d.ts +2 -2
  515. package/lib/components/wizard/wizard.component.d.ts +18 -18
  516. package/lib/components/wizard/wizard.module.d.ts +9 -9
  517. package/lib/core/index.d.ts +3 -3
  518. package/lib/core/interfaces/index.d.ts +2 -2
  519. package/lib/core/interfaces/monkey-modal-settings.d.ts +58 -58
  520. package/lib/core/interfaces/monkey-style-settings.d.ts +59 -59
  521. package/lib/core/services/index.d.ts +3 -3
  522. package/lib/core/services/modal/index.d.ts +2 -2
  523. package/lib/core/services/modal/monkey-style-guide-modal-fixed.service.d.ts +16 -16
  524. package/lib/core/services/modal/monkey-style-guide-modal.service.d.ts +18 -18
  525. package/lib/core/services/monkey-style-guide.service.d.ts +10 -10
  526. package/lib/core/services/settings/index.d.ts +1 -1
  527. package/lib/core/services/settings/monkey-style-guide-settings.service.d.ts +15 -15
  528. package/lib/core/services/settings/monkey-style-guide-theme-settings.service.d.ts +12 -12
  529. package/lib/core/services/snackbar/index.d.ts +1 -1
  530. package/lib/core/services/snackbar/mokey-style-guide-snackbar.service.d.ts +58 -58
  531. package/lib/core/utils/index.d.ts +1 -1
  532. package/lib/core/utils/utils.d.ts +29 -29
  533. package/lib/monkey-style-guide.module.d.ts +8 -8
  534. package/monkey-style-guide-2.0.171.tgz +0 -0
  535. package/monkey-style-guide.d.ts +5 -5
  536. package/package.json +1 -1
  537. package/public-api.d.ts +8 -8
  538. package/monkey-style-guide-2.0.169.tgz +0 -0
@@ -1,240 +1,240 @@
1
- import { PhoneNumberUtil } from 'google-libphonenumber';
2
- const phoneUtil = PhoneNumberUtil.getInstance();
3
- export class MonkeyUtils {
4
- static persistNullEmptyUndefined(tp) {
5
- return tp !== null && tp !== undefined && tp !== '';
6
- }
7
- static getDocumentType(doc) {
8
- if (!doc)
9
- return '';
10
- return doc.length <= 11 ? 'CPF' : 'CNPJ';
11
- }
12
- static getDocumentMask(type) {
13
- if (type === 'CPF')
14
- return '000.000.000-00';
15
- return '00.000.000/0000-00';
16
- }
17
- static formatDocumentWithMask(doc, withType) {
18
- if (!doc)
19
- return doc;
20
- let formated = '';
21
- if (doc.length === 14)
22
- formated = doc
23
- .replace(/^(\d{2})(\d)/, '$1.$2')
24
- .replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
25
- .replace(/\.(\d{3})(\d)/, '.$1/$2')
26
- .replace(/(\d{4})(\d)/, '$1-$2');
27
- else
28
- formated = doc
29
- .replace(/^(\d{3})(\d)/, '$1.$2')
30
- .replace(/^(\d{3})\.(\d{3})(\d)/, '$1.$2.$3')
31
- .replace(/\.(\d{3})(\d)/, '.$1-$2');
32
- return `${withType ? `${this.getDocumentType(doc)}:` : ''} ${formated}`;
33
- }
34
- static cutFirstLastName(value, tp = 'first') {
35
- const split = value?.trim()?.split(' ');
36
- if (tp === 'first')
37
- return split[0];
38
- return split?.splice(1, split.length)?.join(' ');
39
- }
40
- static isCPFCNPJValid(document) {
41
- document = document.replace(/[^\d]/g, '');
42
- if (document.length === 11) {
43
- let base = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
44
- for (var i = 0, n = 0; i < 9; n += document[i] * base[i++])
45
- ;
46
- if (document[9] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
47
- return false;
48
- }
49
- base = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
50
- for (var i = 0, n = 0; i <= 9; n += document[i] * base[i++])
51
- ;
52
- if (document[10] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
53
- return false;
54
- }
55
- return true;
56
- }
57
- else if (document.length === 14 || /0{14}/.test(document)) {
58
- let base = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
59
- for (var i = 0, n = 0; i < 12; n += document[i] * base[++i])
60
- ;
61
- if (document[12] != ((n %= 11) < 2 ? 0 : 11 - n)) {
62
- return false;
63
- }
64
- for (var i = 0, n = 0; i <= 12; n += document[i] * base[i++])
65
- ;
66
- if (document[13] != ((n %= 11) < 2 ? 0 : 11 - n)) {
67
- return false;
68
- }
69
- return true;
70
- }
71
- else
72
- return false;
73
- }
74
- static isValidUrl(txt) {
75
- const regex = new RegExp(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)+[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,10}(:[0-9]{1,5})?(\/.*)?$/gm);
76
- return regex.test(txt);
77
- }
78
- static isValidZipCode(zipCode) {
79
- return `${this.handleOnlyNumbers(zipCode)}`.length === 8;
80
- }
81
- static getRandomString(len, charSet) {
82
- charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
83
- let randomString = Array.apply(null, Array(len))
84
- .map(function () {
85
- return charSet.charAt(Math.floor(Math.random() * charSet.length));
86
- })
87
- .join('');
88
- return randomString;
89
- }
90
- static handleOnlyNumbersCurrency(value) {
91
- if (!value)
92
- return null;
93
- return value.replace(new RegExp(/[^0-9.]/g), '');
94
- }
95
- static handleOnlyNumbers(value) {
96
- if (!value)
97
- return null;
98
- return value.replace(new RegExp(/[^0-9]/g), '');
99
- }
100
- static handleOnlyAlphaNumeric(value) {
101
- if (!value)
102
- return '';
103
- return value.replace(new RegExp(/[^0-9A-Za-z]/, 'g'), '');
104
- }
105
- static capitalize(value) {
106
- return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
107
- }
108
- static formatZipCode(zipCode) {
109
- if (!zipCode)
110
- return zipCode;
111
- const formated = zipCode
112
- .replace(/^(\d{5})(\d)/, '$1-$2')
113
- .replace(/\.(\d{3})(\d)/, '.$1-$2');
114
- return `${formated}`;
115
- }
116
- static formatFileSize(size) {
117
- let units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
118
- let l = 0;
119
- while (size >= 1024 && ++l) {
120
- size = size / 1024;
121
- }
122
- return size.toFixed(size < 10 && l > 0 ? 1 : 0) + ' ' + units[l];
123
- }
124
- static sufflue(data) {
125
- for (let i = data.length - 1; i > 0; i--) {
126
- const j = Math.floor(Math.random() * i);
127
- const temp = data[i];
128
- data[i] = data[j];
129
- data[j] = temp;
130
- }
131
- return data;
132
- }
133
- static handleBlobFile(theBlob, fileName, fileType) {
134
- function blobToFile(theBlob, fileName) {
135
- const b = theBlob;
136
- b.lastModifiedDate = new Date();
137
- b.name = fileName;
138
- return b;
139
- }
140
- let file;
141
- if (!navigator.msSaveBlob) {
142
- file = new File([theBlob], fileName, { type: fileType });
143
- }
144
- else {
145
- file = new Blob([theBlob], { type: fileType });
146
- file = blobToFile(file, fileName);
147
- }
148
- return file;
149
- }
150
- static truncate(text, maxLength = 25) {
151
- const midChar = '...';
152
- if (!text)
153
- return midChar;
154
- if (text && text.length <= maxLength)
155
- return text;
156
- const left = Math.ceil(maxLength / 2);
157
- const right = text.length - left + 1;
158
- return `${text.substr(0, left)} ${midChar} ${text.substring(right)}`;
159
- }
160
- static isLocalhost() {
161
- const { href } = window?.location;
162
- if (!href)
163
- return false;
164
- return href?.search('localhost') >= 0;
165
- }
166
- static getPhoneRegions() {
167
- return phoneUtil
168
- .getSupportedRegions()
169
- .map((code) => {
170
- return phoneUtil.getCountryCodeForRegion(code);
171
- })
172
- .filter((v, i, a) => a.indexOf(v) === i)
173
- .sort((a, b) => (a < b ? -1 : 1));
174
- }
175
- static getPhoneHandle(internationalNumber = 55) {
176
- let maxLength = 14;
177
- let mask = 'XX XXXXX-XXXX';
178
- try {
179
- const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
180
- const exampleNumber = phoneUtil.getExampleNumber(country)['values_']['2'];
181
- const number = phoneUtil.parse(`${exampleNumber}`, country);
182
- const formated = phoneUtil.format(number, null);
183
- if (formated) {
184
- maxLength = `${formated}`.length;
185
- mask = `${formated}`.replace(new RegExp(/[^0-9]/g), '0');
186
- }
187
- }
188
- catch (e) {
189
- //not to do
190
- }
191
- return {
192
- maxLength,
193
- mask,
194
- };
195
- }
196
- static getPhoneCountryCode(phone) {
197
- if (!phone)
198
- return '';
199
- let cc = `${this.handleOnlyNumbers(phone)}`?.substring(0, 2);
200
- let code;
201
- try {
202
- const number = phoneUtil.parse(phone);
203
- code = number.getCountryCodeOrDefault();
204
- }
205
- catch (e) {
206
- //not to do
207
- }
208
- return code || cc;
209
- }
210
- static getPhoneNumberFormated(phone, internationalNumber = 55) {
211
- if (!phone)
212
- return '';
213
- phone = phone.replace(new RegExp(`\\+${internationalNumber}`, 'g'), '');
214
- try {
215
- const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
216
- const number = phoneUtil.parse(phone, country);
217
- if (phoneUtil.isPossibleNumber(number)) {
218
- return phoneUtil.format(number, null);
219
- }
220
- }
221
- catch (e) {
222
- //not to do
223
- }
224
- return phone;
225
- }
226
- static isPhoneNumberValid(phone, internationalNumber = 55) {
227
- if (!phone)
228
- return false;
229
- try {
230
- const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
231
- const number = phoneUtil.parse(phone, country);
232
- return phoneUtil.isValidNumberForRegion(number, country);
233
- }
234
- catch (e) {
235
- //not to do
236
- }
237
- return false;
238
- }
239
- }
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUvc3JjL2xpYi9jb3JlL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFaEQsTUFBTSxPQUFPLFdBQVc7SUFDZixNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBTztRQUM3QyxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQVc7UUFDdkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFZO1FBQ3hDLElBQUksSUFBSSxLQUFLLEtBQUs7WUFBRSxPQUFPLGdCQUFnQixDQUFDO1FBQzVDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsUUFBa0I7UUFDbEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUNyQixJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUU7WUFDbkIsUUFBUSxHQUFHLEdBQUc7aUJBQ1gsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7aUJBQ2hDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENB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QUUsT0FBTyxLQUFLLENBQUM7UUFDekIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sU0FBUyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMxRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsV0FBVztTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaG9uZU51bWJlclV0aWwgfSBmcm9tICdnb29nbGUtbGlicGhvbmVudW1iZXInO1xyXG5cclxuY29uc3QgcGhvbmVVdGlsID0gUGhvbmVOdW1iZXJVdGlsLmdldEluc3RhbmNlKCk7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9ua2V5VXRpbHMge1xyXG4gIHB1YmxpYyBzdGF0aWMgcGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZCh0cDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHAgIT09IG51bGwgJiYgdHAgIT09IHVuZGVmaW5lZCAmJiB0cCAhPT0gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldERvY3VtZW50VHlwZShkb2M6IHN0cmluZykge1xyXG4gICAgaWYgKCFkb2MpIHJldHVybiAnJztcclxuICAgIHJldHVybiBkb2MubGVuZ3RoIDw9IDExID8gJ0NQRicgOiAnQ05QSic7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldERvY3VtZW50TWFzayh0eXBlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0eXBlID09PSAnQ1BGJykgcmV0dXJuICcwMDAuMDAwLjAwMC0wMCc7XHJcbiAgICByZXR1cm4gJzAwLjAwMC4wMDAvMDAwMC0wMCc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdERvY3VtZW50V2l0aE1hc2soZG9jOiBzdHJpbmcsIHdpdGhUeXBlPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRvYykgcmV0dXJuIGRvYztcclxuICAgIGxldCBmb3JtYXRlZDogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAoZG9jLmxlbmd0aCA9PT0gMTQpXHJcbiAgICAgIGZvcm1hdGVkID0gZG9jXHJcbiAgICAgICAgLnJlcGxhY2UoL14oXFxkezJ9KShcXGQpLywgJyQxLiQyJylcclxuICAgICAgICAucmVwbGFjZSgvXihcXGR7Mn0pXFwuKFxcZHszfSkoXFxkKS8sICckMS4kMi4kMycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLyQyJylcclxuICAgICAgICAucmVwbGFjZSgvKFxcZHs0fSkoXFxkKS8sICckMS0kMicpO1xyXG4gICAgZWxzZVxyXG4gICAgICBmb3JtYXRlZCA9IGRvY1xyXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSkoXFxkKS8sICckMS4kMicpXHJcbiAgICAgICAgLnJlcGxhY2UoL14oXFxkezN9KVxcLihcXGR7M30pKFxcZCkvLCAnJDEuJDIuJDMnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC4oXFxkezN9KShcXGQpLywgJy4kMS0kMicpO1xyXG5cclxuICAgIHJldHVybiBgJHt3aXRoVHlwZSA/IGAke3RoaXMuZ2V0RG9jdW1lbnRUeXBlKGRvYyl9OmAgOiAnJ30gJHtmb3JtYXRlZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjdXRGaXJzdExhc3ROYW1lKHZhbHVlOiBzdHJpbmcsIHRwOiBzdHJpbmcgPSAnZmlyc3QnKSB7XHJcbiAgICBjb25zdCBzcGxpdCA9IHZhbHVlPy50cmltKCk/LnNwbGl0KCcgJyk7XHJcblxyXG4gICAgaWYgKHRwID09PSAnZmlyc3QnKSByZXR1cm4gc3BsaXRbMF07XHJcbiAgICByZXR1cm4gc3BsaXQ/LnNwbGljZSgxLCBzcGxpdC5sZW5ndGgpPy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzQ1BGQ05QSlZhbGlkKGRvY3VtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGRvY3VtZW50ID0gZG9jdW1lbnQucmVwbGFjZSgvW15cXGRdL2csICcnKTtcclxuICAgIGlmIChkb2N1bWVudC5sZW5ndGggPT09IDExKSB7XHJcbiAgICAgIGxldCBiYXNlID0gWzEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDwgOTsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbaSsrXSk7XHJcbiAgICAgIGlmIChkb2N1bWVudFs5XSAhPSAoKG4gJT0gMTEpIDw9IDEgPyAwIDogMTEgLSBuKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBiYXNlID0gWzExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMF07XHJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8PSA5OyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKTtcclxuICAgICAgaWYgKGRvY3VtZW50WzEwXSAhPSAoKG4gJT0gMTEpIDw9IDEgPyAwIDogMTEgLSBuKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQubGVuZ3RoID09PSAxNCB8fCAvMHsxNH0vLnRlc3QoZG9jdW1lbnQpKSB7XHJcbiAgICAgIGxldCBiYXNlID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCAxMjsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbKytpXSk7XHJcbiAgICAgIGlmIChkb2N1bWVudFsxMl0gIT0gKChuICU9IDExKSA8IDIgPyAwIDogMTEgLSBuKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDEyOyBuICs9IGRvY3VtZW50W2ldICogYmFzZVtpKytdKTtcclxuICAgICAgaWYgKGRvY3VtZW50WzEzXSAhPSAoKG4gJT0gMTEpIDwgMiA/IDAgOiAxMSAtIG4pKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRVcmwodHh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcclxuICAgICAgL14oaHR0cDpcXC9cXC93d3dcXC58aHR0cHM6XFwvXFwvd3d3XFwufGh0dHA6XFwvXFwvfGh0dHBzOlxcL1xcLykrW2EtejAtOV0rKFtcXC1cXC5dezF9W2EtejAtOV0rKSpcXC5bYS16XXsyLDEwfSg6WzAtOV17MSw1fSk/KFxcLy4qKT8kL2dtXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodHh0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFppcENvZGUoemlwQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5oYW5kbGVPbmx5TnVtYmVycyh6aXBDb2RlKX1gLmxlbmd0aCA9PT0gODtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UmFuZG9tU3RyaW5nKGxlbjogbnVtYmVyLCBjaGFyU2V0Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNoYXJTZXQgPSBjaGFyU2V0IHx8ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XHJcbiAgICBsZXQgcmFuZG9tU3RyaW5nOiBzdHJpbmcgPSBBcnJheS5hcHBseShudWxsLCBBcnJheShsZW4pKVxyXG4gICAgICAubWFwKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gY2hhclNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhclNldC5sZW5ndGgpKTtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJycpO1xyXG4gICAgcmV0dXJuIHJhbmRvbVN0cmluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxlT25seU51bWJlcnNDdXJyZW5jeSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1teMC05Ll0vZyksICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxlT25seU51bWJlcnModmFsdWU6IGFueSkge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOV0vZyksICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxlT25seUFscGhhTnVtZXJpYyh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOUEtWmEtel0vLCAnZycpLCAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNhcGl0YWxpemUodmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dmFsdWUuc2xpY2UoMSl9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0WmlwQ29kZSh6aXBDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF6aXBDb2RlKSByZXR1cm4gemlwQ29kZTtcclxuICAgIGNvbnN0IGZvcm1hdGVkOiBzdHJpbmcgPSB6aXBDb2RlXHJcbiAgICAgIC5yZXBsYWNlKC9eKFxcZHs1fSkoXFxkKS8sICckMS0kMicpXHJcbiAgICAgIC5yZXBsYWNlKC9cXC4oXFxkezN9KShcXGQpLywgJy4kMS0kMicpO1xyXG5cclxuICAgIHJldHVybiBgJHtmb3JtYXRlZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShzaXplOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XHJcbiAgICBsZXQgbCA9IDA7XHJcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0ICYmICsrbCkge1xyXG4gICAgICBzaXplID0gc2l6ZSAvIDEwMjQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2l6ZS50b0ZpeGVkKHNpemUgPCAxMCAmJiBsID4gMCA/IDEgOiAwKSArICcgJyArIHVuaXRzW2xdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBzdWZmbHVlKGRhdGE6IGFueVtdKTogYW55W10ge1xyXG4gICAgZm9yIChsZXQgaSA9IGRhdGEubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaSk7XHJcbiAgICAgIGNvbnN0IHRlbXAgPSBkYXRhW2ldO1xyXG4gICAgICBkYXRhW2ldID0gZGF0YVtqXTtcclxuICAgICAgZGF0YVtqXSA9IHRlbXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxlQmxvYkZpbGUodGhlQmxvYjogYW55LCBmaWxlTmFtZTogc3RyaW5nLCBmaWxlVHlwZTogc3RyaW5nKSB7XHJcbiAgICBmdW5jdGlvbiBibG9iVG9GaWxlKHRoZUJsb2IsIGZpbGVOYW1lKSB7XHJcbiAgICAgIGNvbnN0IGIgPSB0aGVCbG9iO1xyXG4gICAgICBiLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBiLm5hbWUgPSBmaWxlTmFtZTtcclxuICAgICAgcmV0dXJuIGI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbGU6IGFueTtcclxuICAgIGlmICghKG5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZUJsb2IpIHtcclxuICAgICAgZmlsZSA9IG5ldyBGaWxlKFt0aGVCbG9iXSwgZmlsZU5hbWUsIHsgdHlwZTogZmlsZVR5cGUgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWxlID0gbmV3IEJsb2IoW3RoZUJsb2JdLCB7IHR5cGU6IGZpbGVUeXBlIH0pO1xyXG4gICAgICBmaWxlID0gYmxvYlRvRmlsZShmaWxlLCBmaWxlTmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdHJ1bmNhdGUodGV4dDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IDI1KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG1pZENoYXIgPSAnLi4uJztcclxuICAgIGlmICghdGV4dCkgcmV0dXJuIG1pZENoYXI7XHJcbiAgICBpZiAodGV4dCAmJiB0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGgpIHJldHVybiB0ZXh0O1xyXG5cclxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLmNlaWwobWF4TGVuZ3RoIC8gMik7XHJcbiAgICBjb25zdCByaWdodCA9IHRleHQubGVuZ3RoIC0gbGVmdCArIDE7XHJcblxyXG4gICAgcmV0dXJuIGAke3RleHQuc3Vic3RyKDAsIGxlZnQpfSAke21pZENoYXJ9ICR7dGV4dC5zdWJzdHJpbmcocmlnaHQpfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGlzTG9jYWxob3N0KCkge1xyXG4gICAgY29uc3QgeyBocmVmIH0gPSB3aW5kb3c/LmxvY2F0aW9uO1xyXG4gICAgaWYgKCFocmVmKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gaHJlZj8uc2VhcmNoKCdsb2NhbGhvc3QnKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRQaG9uZVJlZ2lvbnMoKSB7XHJcbiAgICByZXR1cm4gcGhvbmVVdGlsXHJcbiAgICAgIC5nZXRTdXBwb3J0ZWRSZWdpb25zKClcclxuICAgICAgLm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHBob25lVXRpbC5nZXRDb3VudHJ5Q29kZUZvclJlZ2lvbihjb2RlKTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4gKGEgPCBiID8gLTEgOiAxKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldFBob25lSGFuZGxlKGludGVybmF0aW9uYWxOdW1iZXIgPSA1NSkge1xyXG4gICAgbGV0IG1heExlbmd0aCA9IDE0O1xyXG4gICAgbGV0IG1hc2sgPSAnWFggWFhYWFgtWFhYWCc7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjb3VudHJ5ID0gcGhvbmVVdGlsLmdldFJlZ2lvbkNvZGVGb3JDb3VudHJ5Q29kZShpbnRlcm5hdGlvbmFsTnVtYmVyKTtcclxuICAgICAgY29uc3QgZXhhbXBsZU51bWJlciA9IHBob25lVXRpbC5nZXRFeGFtcGxlTnVtYmVyKGNvdW50cnkpWyd2YWx1ZXNfJ11bJzInXTtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlciA9IHBob25lVXRpbC5wYXJzZShgJHtleGFtcGxlTnVtYmVyfWAsIGNvdW50cnkpO1xyXG4gICAgICBjb25zdCBmb3JtYXRlZCA9IHBob25lVXRpbC5mb3JtYXQobnVtYmVyLCBudWxsKTtcclxuICAgICAgaWYgKGZvcm1hdGVkKSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoID0gYCR7Zm9ybWF0ZWR9YC5sZW5ndGg7XHJcbiAgICAgICAgbWFzayA9IGAke2Zvcm1hdGVkfWAucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOV0vZyksICcwJyk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy9ub3QgdG8gZG9cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG1heExlbmd0aCxcclxuICAgICAgbWFzayxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldFBob25lQ291bnRyeUNvZGUocGhvbmU6IHN0cmluZykge1xyXG4gICAgaWYgKCFwaG9uZSkgcmV0dXJuICcnO1xyXG4gICAgbGV0IGNjID0gYCR7dGhpcy5oYW5kbGVPbmx5TnVtYmVycyhwaG9uZSl9YD8uc3Vic3RyaW5nKDAsIDIpO1xyXG4gICAgbGV0IGNvZGU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBudW1iZXIgPSBwaG9uZVV0aWwucGFyc2UocGhvbmUpO1xyXG4gICAgICBjb2RlID0gbnVtYmVyLmdldENvdW50cnlDb2RlT3JEZWZhdWx0KCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vbm90IHRvIGRvXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29kZSB8fCBjYztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGhvbmVOdW1iZXJGb3JtYXRlZChwaG9uZTogc3RyaW5nLCBpbnRlcm5hdGlvbmFsTnVtYmVyID0gNTUpIHtcclxuICAgIGlmICghcGhvbmUpIHJldHVybiAnJztcclxuICAgIHBob25lID0gcGhvbmUucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcKyR7aW50ZXJuYXRpb25hbE51bWJlcn1gLCdnJyksJycpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY291bnRyeSA9IHBob25lVXRpbC5nZXRSZWdpb25Db2RlRm9yQ291bnRyeUNvZGUoaW50ZXJuYXRpb25hbE51bWJlcik7XHJcbiAgICAgIGNvbnN0IG51bWJlciA9IHBob25lVXRpbC5wYXJzZShwaG9uZSwgY291bnRyeSk7XHJcbiAgICAgIGlmIChwaG9uZVV0aWwuaXNQb3NzaWJsZU51bWJlcihudW1iZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHBob25lVXRpbC5mb3JtYXQobnVtYmVyLCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvL25vdCB0byBkb1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBob25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1Bob25lTnVtYmVyVmFsaWQocGhvbmU6IHN0cmluZywgaW50ZXJuYXRpb25hbE51bWJlciA9IDU1KSB7XHJcbiAgICBpZiAoIXBob25lKSByZXR1cm4gZmFsc2U7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjb3VudHJ5ID0gcGhvbmVVdGlsLmdldFJlZ2lvbkNvZGVGb3JDb3VudHJ5Q29kZShpbnRlcm5hdGlvbmFsTnVtYmVyKTtcclxuICAgICAgY29uc3QgbnVtYmVyID0gcGhvbmVVdGlsLnBhcnNlKHBob25lLCBjb3VudHJ5KTtcclxuICAgICAgcmV0dXJuIHBob25lVXRpbC5pc1ZhbGlkTnVtYmVyRm9yUmVnaW9uKG51bWJlciwgY291bnRyeSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vbm90IHRvIGRvXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import { PhoneNumberUtil } from 'google-libphonenumber';
2
+ const phoneUtil = PhoneNumberUtil.getInstance();
3
+ export class MonkeyUtils {
4
+ static persistNullEmptyUndefined(tp) {
5
+ return tp !== null && tp !== undefined && tp !== '';
6
+ }
7
+ static getDocumentType(doc) {
8
+ if (!doc)
9
+ return '';
10
+ return doc.length <= 11 ? 'CPF' : 'CNPJ';
11
+ }
12
+ static getDocumentMask(type) {
13
+ if (type === 'CPF')
14
+ return '000.000.000-00';
15
+ return '00.000.000/0000-00';
16
+ }
17
+ static formatDocumentWithMask(doc, withType) {
18
+ if (!doc)
19
+ return doc;
20
+ let formated = '';
21
+ if (doc.length === 14)
22
+ formated = doc
23
+ .replace(/^(\d{2})(\d)/, '$1.$2')
24
+ .replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
25
+ .replace(/\.(\d{3})(\d)/, '.$1/$2')
26
+ .replace(/(\d{4})(\d)/, '$1-$2');
27
+ else
28
+ formated = doc
29
+ .replace(/^(\d{3})(\d)/, '$1.$2')
30
+ .replace(/^(\d{3})\.(\d{3})(\d)/, '$1.$2.$3')
31
+ .replace(/\.(\d{3})(\d)/, '.$1-$2');
32
+ return `${withType ? `${this.getDocumentType(doc)}:` : ''} ${formated}`;
33
+ }
34
+ static cutFirstLastName(value, tp = 'first') {
35
+ const split = value?.trim()?.split(' ');
36
+ if (tp === 'first')
37
+ return split[0];
38
+ return split?.splice(1, split.length)?.join(' ');
39
+ }
40
+ static isCPFCNPJValid(document) {
41
+ document = document.replace(/[^\d]/g, '');
42
+ if (document.length === 11) {
43
+ let base = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
44
+ for (var i = 0, n = 0; i < 9; n += document[i] * base[i++])
45
+ ;
46
+ if (document[9] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
47
+ return false;
48
+ }
49
+ base = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
50
+ for (var i = 0, n = 0; i <= 9; n += document[i] * base[i++])
51
+ ;
52
+ if (document[10] != ((n %= 11) <= 1 ? 0 : 11 - n)) {
53
+ return false;
54
+ }
55
+ return true;
56
+ }
57
+ else if (document.length === 14 || /0{14}/.test(document)) {
58
+ let base = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
59
+ for (var i = 0, n = 0; i < 12; n += document[i] * base[++i])
60
+ ;
61
+ if (document[12] != ((n %= 11) < 2 ? 0 : 11 - n)) {
62
+ return false;
63
+ }
64
+ for (var i = 0, n = 0; i <= 12; n += document[i] * base[i++])
65
+ ;
66
+ if (document[13] != ((n %= 11) < 2 ? 0 : 11 - n)) {
67
+ return false;
68
+ }
69
+ return true;
70
+ }
71
+ else
72
+ return false;
73
+ }
74
+ static isValidUrl(txt) {
75
+ const regex = new RegExp(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)+[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,10}(:[0-9]{1,5})?(\/.*)?$/gm);
76
+ return regex.test(txt);
77
+ }
78
+ static isValidZipCode(zipCode) {
79
+ return `${this.handleOnlyNumbers(zipCode)}`.length === 8;
80
+ }
81
+ static getRandomString(len, charSet) {
82
+ charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
83
+ let randomString = Array.apply(null, Array(len))
84
+ .map(function () {
85
+ return charSet.charAt(Math.floor(Math.random() * charSet.length));
86
+ })
87
+ .join('');
88
+ return randomString;
89
+ }
90
+ static handleOnlyNumbersCurrency(value) {
91
+ if (!value)
92
+ return null;
93
+ return value.replace(new RegExp(/[^0-9.]/g), '');
94
+ }
95
+ static handleOnlyNumbers(value) {
96
+ if (!value)
97
+ return null;
98
+ return value.replace(new RegExp(/[^0-9]/g), '');
99
+ }
100
+ static handleOnlyAlphaNumeric(value) {
101
+ if (!value)
102
+ return '';
103
+ return value.replace(new RegExp(/[^0-9A-Za-z]/, 'g'), '');
104
+ }
105
+ static capitalize(value) {
106
+ return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
107
+ }
108
+ static formatZipCode(zipCode) {
109
+ if (!zipCode)
110
+ return zipCode;
111
+ const formated = zipCode
112
+ .replace(/^(\d{5})(\d)/, '$1-$2')
113
+ .replace(/\.(\d{3})(\d)/, '.$1-$2');
114
+ return `${formated}`;
115
+ }
116
+ static formatFileSize(size) {
117
+ let units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
118
+ let l = 0;
119
+ while (size >= 1024 && ++l) {
120
+ size = size / 1024;
121
+ }
122
+ return size.toFixed(size < 10 && l > 0 ? 1 : 0) + ' ' + units[l];
123
+ }
124
+ static sufflue(data) {
125
+ for (let i = data.length - 1; i > 0; i--) {
126
+ const j = Math.floor(Math.random() * i);
127
+ const temp = data[i];
128
+ data[i] = data[j];
129
+ data[j] = temp;
130
+ }
131
+ return data;
132
+ }
133
+ static handleBlobFile(theBlob, fileName, fileType) {
134
+ function blobToFile(theBlob, fileName) {
135
+ const b = theBlob;
136
+ b.lastModifiedDate = new Date();
137
+ b.name = fileName;
138
+ return b;
139
+ }
140
+ let file;
141
+ if (!navigator.msSaveBlob) {
142
+ file = new File([theBlob], fileName, { type: fileType });
143
+ }
144
+ else {
145
+ file = new Blob([theBlob], { type: fileType });
146
+ file = blobToFile(file, fileName);
147
+ }
148
+ return file;
149
+ }
150
+ static truncate(text, maxLength = 25) {
151
+ const midChar = '...';
152
+ if (!text)
153
+ return midChar;
154
+ if (text && text.length <= maxLength)
155
+ return text;
156
+ const left = Math.ceil(maxLength / 2);
157
+ const right = text.length - left + 1;
158
+ return `${text.substr(0, left)} ${midChar} ${text.substring(right)}`;
159
+ }
160
+ static isLocalhost() {
161
+ const { href } = window?.location;
162
+ if (!href)
163
+ return false;
164
+ return href?.search('localhost') >= 0;
165
+ }
166
+ static getPhoneRegions() {
167
+ return phoneUtil
168
+ .getSupportedRegions()
169
+ .map((code) => {
170
+ return phoneUtil.getCountryCodeForRegion(code);
171
+ })
172
+ .filter((v, i, a) => a.indexOf(v) === i)
173
+ .sort((a, b) => (a < b ? -1 : 1));
174
+ }
175
+ static getPhoneHandle(internationalNumber = 55) {
176
+ let maxLength = 14;
177
+ let mask = 'XX XXXXX-XXXX';
178
+ try {
179
+ const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
180
+ const exampleNumber = phoneUtil.getExampleNumber(country)['values_']['2'];
181
+ const number = phoneUtil.parse(`${exampleNumber}`, country);
182
+ const formated = phoneUtil.format(number, null);
183
+ if (formated) {
184
+ maxLength = `${formated}`.length;
185
+ mask = `${formated}`.replace(new RegExp(/[^0-9]/g), '0');
186
+ }
187
+ }
188
+ catch (e) {
189
+ //not to do
190
+ }
191
+ return {
192
+ maxLength,
193
+ mask,
194
+ };
195
+ }
196
+ static getPhoneCountryCode(phone) {
197
+ if (!phone)
198
+ return '';
199
+ let cc = `${this.handleOnlyNumbers(phone)}`?.substring(0, 2);
200
+ let code;
201
+ try {
202
+ const number = phoneUtil.parse(phone);
203
+ code = number.getCountryCodeOrDefault();
204
+ }
205
+ catch (e) {
206
+ //not to do
207
+ }
208
+ return code || cc;
209
+ }
210
+ static getPhoneNumberFormated(phone, internationalNumber = 55) {
211
+ if (!phone)
212
+ return '';
213
+ phone = phone.replace(new RegExp(`\\+${internationalNumber}`, 'g'), '');
214
+ try {
215
+ const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
216
+ const number = phoneUtil.parse(phone, country);
217
+ if (phoneUtil.isPossibleNumber(number)) {
218
+ return phoneUtil.format(number, null);
219
+ }
220
+ }
221
+ catch (e) {
222
+ //not to do
223
+ }
224
+ return phone;
225
+ }
226
+ static isPhoneNumberValid(phone, internationalNumber = 55) {
227
+ if (!phone)
228
+ return false;
229
+ try {
230
+ const country = phoneUtil.getRegionCodeForCountryCode(internationalNumber);
231
+ const number = phoneUtil.parse(phone, country);
232
+ return phoneUtil.isValidNumberForRegion(number, country);
233
+ }
234
+ catch (e) {
235
+ //not to do
236
+ }
237
+ return false;
238
+ }
239
+ }
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUvc3JjL2xpYi9jb3JlL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFaEQsTUFBTSxPQUFPLFdBQVc7SUFDZixNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBTztRQUM3QyxPQUFPLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQVc7UUFDdkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFZO1FBQ3hDLElBQUksSUFBSSxLQUFLLEtBQUs7WUFBRSxPQUFPLGdCQUFnQixDQUFDO1FBQzVDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsUUFBa0I7UUFDbEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUNyQixJQUFJLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUU7WUFDbkIsUUFBUSxHQUFHLEdBQUc7aUJBQ1gsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7aUJBQ2hDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENB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QUUsT0FBTyxLQUFLLENBQUM7UUFDekIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sU0FBUyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMxRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsV0FBVztTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaG9uZU51bWJlclV0aWwgfSBmcm9tICdnb29nbGUtbGlicGhvbmVudW1iZXInO1xuXG5jb25zdCBwaG9uZVV0aWwgPSBQaG9uZU51bWJlclV0aWwuZ2V0SW5zdGFuY2UoKTtcblxuZXhwb3J0IGNsYXNzIE1vbmtleVV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyBwZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKHRwOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHAgIT09IG51bGwgJiYgdHAgIT09IHVuZGVmaW5lZCAmJiB0cCAhPT0gJyc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldERvY3VtZW50VHlwZShkb2M6IHN0cmluZykge1xuICAgIGlmICghZG9jKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGRvYy5sZW5ndGggPD0gMTEgPyAnQ1BGJyA6ICdDTlBKJztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RG9jdW1lbnRNYXNrKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSAnQ1BGJykgcmV0dXJuICcwMDAuMDAwLjAwMC0wMCc7XG4gICAgcmV0dXJuICcwMC4wMDAuMDAwLzAwMDAtMDAnO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JtYXREb2N1bWVudFdpdGhNYXNrKGRvYzogc3RyaW5nLCB3aXRoVHlwZT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmICghZG9jKSByZXR1cm4gZG9jO1xuICAgIGxldCBmb3JtYXRlZDogc3RyaW5nID0gJyc7XG4gICAgaWYgKGRvYy5sZW5ndGggPT09IDE0KVxuICAgICAgZm9ybWF0ZWQgPSBkb2NcbiAgICAgICAgLnJlcGxhY2UoL14oXFxkezJ9KShcXGQpLywgJyQxLiQyJylcbiAgICAgICAgLnJlcGxhY2UoL14oXFxkezJ9KVxcLihcXGR7M30pKFxcZCkvLCAnJDEuJDIuJDMnKVxuICAgICAgICAucmVwbGFjZSgvXFwuKFxcZHszfSkoXFxkKS8sICcuJDEvJDInKVxuICAgICAgICAucmVwbGFjZSgvKFxcZHs0fSkoXFxkKS8sICckMS0kMicpO1xuICAgIGVsc2VcbiAgICAgIGZvcm1hdGVkID0gZG9jXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSkoXFxkKS8sICckMS4kMicpXG4gICAgICAgIC5yZXBsYWNlKC9eKFxcZHszfSlcXC4oXFxkezN9KShcXGQpLywgJyQxLiQyLiQzJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLihcXGR7M30pKFxcZCkvLCAnLiQxLSQyJyk7XG5cbiAgICByZXR1cm4gYCR7d2l0aFR5cGUgPyBgJHt0aGlzLmdldERvY3VtZW50VHlwZShkb2MpfTpgIDogJyd9ICR7Zm9ybWF0ZWR9YDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3V0Rmlyc3RMYXN0TmFtZSh2YWx1ZTogc3RyaW5nLCB0cDogc3RyaW5nID0gJ2ZpcnN0Jykge1xuICAgIGNvbnN0IHNwbGl0ID0gdmFsdWU/LnRyaW0oKT8uc3BsaXQoJyAnKTtcblxuICAgIGlmICh0cCA9PT0gJ2ZpcnN0JykgcmV0dXJuIHNwbGl0WzBdO1xuICAgIHJldHVybiBzcGxpdD8uc3BsaWNlKDEsIHNwbGl0Lmxlbmd0aCk/LmpvaW4oJyAnKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNDUEZDTlBKVmFsaWQoZG9jdW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGRvY3VtZW50ID0gZG9jdW1lbnQucmVwbGFjZSgvW15cXGRdL2csICcnKTtcbiAgICBpZiAoZG9jdW1lbnQubGVuZ3RoID09PSAxMSkge1xuICAgICAgbGV0IGJhc2UgPSBbMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDBdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDwgOTsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbaSsrXSk7XG4gICAgICBpZiAoZG9jdW1lbnRbOV0gIT0gKChuICU9IDExKSA8PSAxID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYmFzZSA9IFsxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDBdO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDw9IDk7IG4gKz0gZG9jdW1lbnRbaV0gKiBiYXNlW2krK10pO1xuICAgICAgaWYgKGRvY3VtZW50WzEwXSAhPSAoKG4gJT0gMTEpIDw9IDEgPyAwIDogMTEgLSBuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50Lmxlbmd0aCA9PT0gMTQgfHwgLzB7MTR9Ly50ZXN0KGRvY3VtZW50KSkge1xuICAgICAgbGV0IGJhc2UgPSBbNiwgNSwgNCwgMywgMiwgOSwgOCwgNywgNiwgNSwgNCwgMywgMl07XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCAxMjsgbiArPSBkb2N1bWVudFtpXSAqIGJhc2VbKytpXSk7XG4gICAgICBpZiAoZG9jdW1lbnRbMTJdICE9ICgobiAlPSAxMSkgPCAyID8gMCA6IDExIC0gbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPD0gMTI7IG4gKz0gZG9jdW1lbnRbaV0gKiBiYXNlW2krK10pO1xuICAgICAgaWYgKGRvY3VtZW50WzEzXSAhPSAoKG4gJT0gMTEpIDwgMiA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFVybCh0eHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIC9eKGh0dHA6XFwvXFwvd3d3XFwufGh0dHBzOlxcL1xcL3d3d1xcLnxodHRwOlxcL1xcL3xodHRwczpcXC9cXC8pK1thLXowLTldKyhbXFwtXFwuXXsxfVthLXowLTldKykqXFwuW2Etel17MiwxMH0oOlswLTldezEsNX0pPyhcXC8uKik/JC9nbVxuICAgICk7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodHh0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFppcENvZGUoemlwQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGAke3RoaXMuaGFuZGxlT25seU51bWJlcnMoemlwQ29kZSl9YC5sZW5ndGggPT09IDg7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFJhbmRvbVN0cmluZyhsZW46IG51bWJlciwgY2hhclNldD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY2hhclNldCA9IGNoYXJTZXQgfHwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgICBsZXQgcmFuZG9tU3RyaW5nOiBzdHJpbmcgPSBBcnJheS5hcHBseShudWxsLCBBcnJheShsZW4pKVxuICAgICAgLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjaGFyU2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyU2V0Lmxlbmd0aCkpO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcnKTtcbiAgICByZXR1cm4gcmFuZG9tU3RyaW5nO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBoYW5kbGVPbmx5TnVtYmVyc0N1cnJlbmN5KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOS5dL2cpLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGhhbmRsZU9ubHlOdW1iZXJzKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOV0vZyksICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaGFuZGxlT25seUFscGhhTnVtZXJpYyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1teMC05QS1aYS16XS8sICdnJyksICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7dmFsdWUuc2xpY2UoMSl9YDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0WmlwQ29kZSh6aXBDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghemlwQ29kZSkgcmV0dXJuIHppcENvZGU7XG4gICAgY29uc3QgZm9ybWF0ZWQ6IHN0cmluZyA9IHppcENvZGVcbiAgICAgIC5yZXBsYWNlKC9eKFxcZHs1fSkoXFxkKS8sICckMS0kMicpXG4gICAgICAucmVwbGFjZSgvXFwuKFxcZHszfSkoXFxkKS8sICcuJDEtJDInKTtcblxuICAgIHJldHVybiBgJHtmb3JtYXRlZH1gO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuICAgIGxldCBsID0gMDtcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0ICYmICsrbCkge1xuICAgICAgc2l6ZSA9IHNpemUgLyAxMDI0O1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZS50b0ZpeGVkKHNpemUgPCAxMCAmJiBsID4gMCA/IDEgOiAwKSArICcgJyArIHVuaXRzW2xdO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzdWZmbHVlKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpKTtcbiAgICAgIGNvbnN0IHRlbXAgPSBkYXRhW2ldO1xuICAgICAgZGF0YVtpXSA9IGRhdGFbal07XG4gICAgICBkYXRhW2pdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGhhbmRsZUJsb2JGaWxlKHRoZUJsb2I6IGFueSwgZmlsZU5hbWU6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZykge1xuICAgIGZ1bmN0aW9uIGJsb2JUb0ZpbGUodGhlQmxvYiwgZmlsZU5hbWUpIHtcbiAgICAgIGNvbnN0IGIgPSB0aGVCbG9iO1xuICAgICAgYi5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGIubmFtZSA9IGZpbGVOYW1lO1xuICAgICAgcmV0dXJuIGI7XG4gICAgfVxuXG4gICAgbGV0IGZpbGU6IGFueTtcbiAgICBpZiAoIShuYXZpZ2F0b3IgYXMgYW55KS5tc1NhdmVCbG9iKSB7XG4gICAgICBmaWxlID0gbmV3IEZpbGUoW3RoZUJsb2JdLCBmaWxlTmFtZSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZSA9IG5ldyBCbG9iKFt0aGVCbG9iXSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcbiAgICAgIGZpbGUgPSBibG9iVG9GaWxlKGZpbGUsIGZpbGVOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRydW5jYXRlKHRleHQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIgPSAyNSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWlkQ2hhciA9ICcuLi4nO1xuICAgIGlmICghdGV4dCkgcmV0dXJuIG1pZENoYXI7XG4gICAgaWYgKHRleHQgJiYgdGV4dC5sZW5ndGggPD0gbWF4TGVuZ3RoKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLmNlaWwobWF4TGVuZ3RoIC8gMik7XG4gICAgY29uc3QgcmlnaHQgPSB0ZXh0Lmxlbmd0aCAtIGxlZnQgKyAxO1xuXG4gICAgcmV0dXJuIGAke3RleHQuc3Vic3RyKDAsIGxlZnQpfSAke21pZENoYXJ9ICR7dGV4dC5zdWJzdHJpbmcocmlnaHQpfWA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTG9jYWxob3N0KCkge1xuICAgIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93Py5sb2NhdGlvbjtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaHJlZj8uc2VhcmNoKCdsb2NhbGhvc3QnKSA+PSAwO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRQaG9uZVJlZ2lvbnMoKSB7XG4gICAgcmV0dXJuIHBob25lVXRpbFxuICAgICAgLmdldFN1cHBvcnRlZFJlZ2lvbnMoKVxuICAgICAgLm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBwaG9uZVV0aWwuZ2V0Q291bnRyeUNvZGVGb3JSZWdpb24oY29kZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IChhIDwgYiA/IC0xIDogMSkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRQaG9uZUhhbmRsZShpbnRlcm5hdGlvbmFsTnVtYmVyID0gNTUpIHtcbiAgICBsZXQgbWF4TGVuZ3RoID0gMTQ7XG4gICAgbGV0IG1hc2sgPSAnWFggWFhYWFgtWFhYWCc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvdW50cnkgPSBwaG9uZVV0aWwuZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKGludGVybmF0aW9uYWxOdW1iZXIpO1xuICAgICAgY29uc3QgZXhhbXBsZU51bWJlciA9IHBob25lVXRpbC5nZXRFeGFtcGxlTnVtYmVyKGNvdW50cnkpWyd2YWx1ZXNfJ11bJzInXTtcblxuICAgICAgY29uc3QgbnVtYmVyID0gcGhvbmVVdGlsLnBhcnNlKGAke2V4YW1wbGVOdW1iZXJ9YCwgY291bnRyeSk7XG4gICAgICBjb25zdCBmb3JtYXRlZCA9IHBob25lVXRpbC5mb3JtYXQobnVtYmVyLCBudWxsKTtcbiAgICAgIGlmIChmb3JtYXRlZCkge1xuICAgICAgICBtYXhMZW5ndGggPSBgJHtmb3JtYXRlZH1gLmxlbmd0aDtcbiAgICAgICAgbWFzayA9IGAke2Zvcm1hdGVkfWAucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOV0vZyksICcwJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9ub3QgdG8gZG9cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG1hc2ssXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGhvbmVDb3VudHJ5Q29kZShwaG9uZTogc3RyaW5nKSB7XG4gICAgaWYgKCFwaG9uZSkgcmV0dXJuICcnO1xuICAgIGxldCBjYyA9IGAke3RoaXMuaGFuZGxlT25seU51bWJlcnMocGhvbmUpfWA/LnN1YnN0cmluZygwLCAyKTtcbiAgICBsZXQgY29kZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbnVtYmVyID0gcGhvbmVVdGlsLnBhcnNlKHBob25lKTtcbiAgICAgIGNvZGUgPSBudW1iZXIuZ2V0Q291bnRyeUNvZGVPckRlZmF1bHQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL25vdCB0byBkb1xuICAgIH1cbiAgICByZXR1cm4gY29kZSB8fCBjYztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGhvbmVOdW1iZXJGb3JtYXRlZChwaG9uZTogc3RyaW5nLCBpbnRlcm5hdGlvbmFsTnVtYmVyID0gNTUpIHtcbiAgICBpZiAoIXBob25lKSByZXR1cm4gJyc7XG4gICAgcGhvbmUgPSBwaG9uZS5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwrJHtpbnRlcm5hdGlvbmFsTnVtYmVyfWAsJ2cnKSwnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvdW50cnkgPSBwaG9uZVV0aWwuZ2V0UmVnaW9uQ29kZUZvckNvdW50cnlDb2RlKGludGVybmF0aW9uYWxOdW1iZXIpO1xuICAgICAgY29uc3QgbnVtYmVyID0gcGhvbmVVdGlsLnBhcnNlKHBob25lLCBjb3VudHJ5KTtcbiAgICAgIGlmIChwaG9uZVV0aWwuaXNQb3NzaWJsZU51bWJlcihudW1iZXIpKSB7XG4gICAgICAgIHJldHVybiBwaG9uZVV0aWwuZm9ybWF0KG51bWJlciwgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy9ub3QgdG8gZG9cbiAgICB9XG4gICAgcmV0dXJuIHBob25lO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1Bob25lTnVtYmVyVmFsaWQocGhvbmU6IHN0cmluZywgaW50ZXJuYXRpb25hbE51bWJlciA9IDU1KSB7XG4gICAgaWYgKCFwaG9uZSkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb3VudHJ5ID0gcGhvbmVVdGlsLmdldFJlZ2lvbkNvZGVGb3JDb3VudHJ5Q29kZShpbnRlcm5hdGlvbmFsTnVtYmVyKTtcbiAgICAgIGNvbnN0IG51bWJlciA9IHBob25lVXRpbC5wYXJzZShwaG9uZSwgY291bnRyeSk7XG4gICAgICByZXR1cm4gcGhvbmVVdGlsLmlzVmFsaWROdW1iZXJGb3JSZWdpb24obnVtYmVyLCBjb3VudHJ5KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL25vdCB0byBkb1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==