@taiga-ui/addon-commerce 2.54.0 → 3.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/bundles/taiga-ui-addon-commerce-components-card.umd.js +424 -305
  2. package/bundles/taiga-ui-addon-commerce-components-card.umd.js.map +1 -1
  3. package/bundles/taiga-ui-addon-commerce-components-input-card-grouped.umd.js +623 -466
  4. package/bundles/taiga-ui-addon-commerce-components-input-card-grouped.umd.js.map +1 -1
  5. package/bundles/taiga-ui-addon-commerce-components-input-card.umd.js +461 -331
  6. package/bundles/taiga-ui-addon-commerce-components-input-card.umd.js.map +1 -1
  7. package/bundles/taiga-ui-addon-commerce-components-input-cvc.umd.js +444 -314
  8. package/bundles/taiga-ui-addon-commerce-components-input-cvc.umd.js.map +1 -1
  9. package/bundles/taiga-ui-addon-commerce-components-input-expire.umd.js +432 -306
  10. package/bundles/taiga-ui-addon-commerce-components-input-expire.umd.js.map +1 -1
  11. package/bundles/taiga-ui-addon-commerce-components-money.umd.js +518 -387
  12. package/bundles/taiga-ui-addon-commerce-components-money.umd.js.map +1 -1
  13. package/bundles/taiga-ui-addon-commerce-components.umd.js +15 -27
  14. package/bundles/taiga-ui-addon-commerce-components.umd.js.map +1 -1
  15. package/bundles/taiga-ui-addon-commerce-constants.umd.js +38 -36
  16. package/bundles/taiga-ui-addon-commerce-constants.umd.js.map +1 -1
  17. package/bundles/taiga-ui-addon-commerce-enums.umd.js +6 -35
  18. package/bundles/taiga-ui-addon-commerce-enums.umd.js.map +1 -1
  19. package/bundles/taiga-ui-addon-commerce-interfaces.umd.js +2 -2
  20. package/bundles/taiga-ui-addon-commerce-interfaces.umd.js.map +1 -1
  21. package/bundles/taiga-ui-addon-commerce-pipes.umd.js +63 -274
  22. package/bundles/taiga-ui-addon-commerce-pipes.umd.js.map +1 -1
  23. package/bundles/taiga-ui-addon-commerce-tokens.umd.js +11 -7
  24. package/bundles/taiga-ui-addon-commerce-tokens.umd.js.map +1 -1
  25. package/bundles/taiga-ui-addon-commerce-types.umd.js +2 -2
  26. package/bundles/taiga-ui-addon-commerce-types.umd.js.map +1 -1
  27. package/bundles/taiga-ui-addon-commerce-utils.umd.js +63 -107
  28. package/bundles/taiga-ui-addon-commerce-utils.umd.js.map +1 -1
  29. package/bundles/taiga-ui-addon-commerce-validators.umd.js +17 -11
  30. package/bundles/taiga-ui-addon-commerce-validators.umd.js.map +1 -1
  31. package/bundles/taiga-ui-addon-commerce.umd.js +31 -33
  32. package/bundles/taiga-ui-addon-commerce.umd.js.map +1 -1
  33. package/components/card/card.component.d.ts +5 -2
  34. package/components/card/card.module.d.ts +7 -0
  35. package/components/card/package.json +2 -5
  36. package/components/card/taiga-ui-addon-commerce-components-card.d.ts +1 -0
  37. package/components/input-card/input-card.component.d.ts +4 -2
  38. package/components/input-card/input-card.module.d.ts +8 -0
  39. package/components/input-card/package.json +2 -5
  40. package/components/input-card/taiga-ui-addon-commerce-components-input-card.d.ts +1 -0
  41. package/components/input-card-grouped/input-card-grouped.component.d.ts +5 -3
  42. package/components/input-card-grouped/input-card-grouped.module.d.ts +12 -0
  43. package/components/input-card-grouped/package.json +2 -5
  44. package/components/input-card-grouped/taiga-ui-addon-commerce-components-input-card-grouped.d.ts +1 -0
  45. package/components/input-cvc/input-cvc.component.d.ts +3 -1
  46. package/components/input-cvc/input-cvc.module.d.ts +8 -0
  47. package/components/input-cvc/package.json +2 -5
  48. package/components/input-cvc/taiga-ui-addon-commerce-components-input-cvc.d.ts +1 -0
  49. package/components/input-expire/input-expire.component.d.ts +3 -1
  50. package/components/input-expire/input-expire.module.d.ts +8 -0
  51. package/components/input-expire/package.json +2 -5
  52. package/components/input-expire/taiga-ui-addon-commerce-components-input-expire.d.ts +1 -0
  53. package/components/money/money-options.d.ts +4 -4
  54. package/components/money/money.component.d.ts +7 -4
  55. package/components/money/money.module.d.ts +10 -0
  56. package/components/money/package.json +2 -5
  57. package/components/money/pipes/fraction-part.pipe.d.ts +5 -2
  58. package/components/money/pipes/integer-part.pipe.d.ts +3 -0
  59. package/components/money/pipes/sign-symbol.pipe.d.ts +5 -2
  60. package/components/money/taiga-ui-addon-commerce-components-money.d.ts +1 -0
  61. package/components/money/utils/format-fraction-part.d.ts +2 -2
  62. package/components/money/utils/format-sign-symbol.d.ts +2 -2
  63. package/components/package.json +2 -5
  64. package/components/taiga-ui-addon-commerce-components.d.ts +1 -0
  65. package/constants/package.json +2 -5
  66. package/constants/taiga-ui-addon-commerce-constants.d.ts +1 -0
  67. package/enums/currency-code.d.ts +0 -5
  68. package/enums/index.d.ts +0 -2
  69. package/enums/package.json +2 -5
  70. package/enums/taiga-ui-addon-commerce-enums.d.ts +1 -0
  71. package/esm2015/components/card/card.component.js +44 -30
  72. package/esm2015/components/card/card.module.js +15 -12
  73. package/esm2015/components/card/index.js +1 -1
  74. package/esm2015/components/card/taiga-ui-addon-commerce-components-card.js +1 -1
  75. package/esm2015/components/index.js +1 -1
  76. package/esm2015/components/input-card/index.js +1 -1
  77. package/esm2015/components/input-card/input-card.component.js +72 -56
  78. package/esm2015/components/input-card/input-card.module.js +24 -13
  79. package/esm2015/components/input-card/taiga-ui-addon-commerce-components-input-card.js +1 -1
  80. package/esm2015/components/input-card-grouped/index.js +1 -1
  81. package/esm2015/components/input-card-grouped/input-card-grouped.component.js +148 -121
  82. package/esm2015/components/input-card-grouped/input-card-grouped.module.js +45 -15
  83. package/esm2015/components/input-card-grouped/input-card-grouped.providers.js +3 -3
  84. package/esm2015/components/input-card-grouped/taiga-ui-addon-commerce-components-input-card-grouped.js +1 -1
  85. package/esm2015/components/input-cvc/index.js +1 -1
  86. package/esm2015/components/input-cvc/input-cvc.component.js +56 -43
  87. package/esm2015/components/input-cvc/input-cvc.module.js +26 -13
  88. package/esm2015/components/input-cvc/taiga-ui-addon-commerce-components-input-cvc.js +1 -1
  89. package/esm2015/components/input-expire/index.js +1 -1
  90. package/esm2015/components/input-expire/input-expire.component.js +49 -38
  91. package/esm2015/components/input-expire/input-expire.module.js +24 -13
  92. package/esm2015/components/input-expire/taiga-ui-addon-commerce-components-input-expire.js +1 -1
  93. package/esm2015/components/money/index.js +1 -1
  94. package/esm2015/components/money/money-options.js +4 -4
  95. package/esm2015/components/money/money.component.js +50 -37
  96. package/esm2015/components/money/money.module.js +23 -17
  97. package/esm2015/components/money/pipes/fraction-part.pipe.js +13 -12
  98. package/esm2015/components/money/pipes/integer-part.pipe.js +13 -12
  99. package/esm2015/components/money/pipes/sign-symbol.pipe.js +10 -8
  100. package/esm2015/components/money/taiga-ui-addon-commerce-components-money.js +1 -1
  101. package/esm2015/components/money/utils/format-fraction-part.js +4 -4
  102. package/esm2015/components/money/utils/format-sign-symbol.js +6 -7
  103. package/esm2015/components/taiga-ui-addon-commerce-components.js +1 -1
  104. package/esm2015/constants/card-holder-mask.js +27 -27
  105. package/esm2015/constants/card-mask.js +5 -5
  106. package/esm2015/constants/default-card-validator.js +3 -3
  107. package/esm2015/constants/index.js +1 -1
  108. package/esm2015/constants/taiga-ui-addon-commerce-constants.js +1 -1
  109. package/esm2015/enums/currency-code.js +1 -7
  110. package/esm2015/enums/currency.js +1 -1
  111. package/esm2015/enums/index.js +1 -3
  112. package/esm2015/enums/taiga-ui-addon-commerce-enums.js +1 -1
  113. package/esm2015/index.js +3 -1
  114. package/esm2015/interfaces/card.js +2 -1
  115. package/esm2015/interfaces/index.js +2 -1
  116. package/esm2015/interfaces/taiga-ui-addon-commerce-interfaces.js +2 -1
  117. package/esm2015/pipes/currency/currency.module.js +14 -11
  118. package/esm2015/pipes/currency/currency.pipe.js +12 -10
  119. package/esm2015/pipes/format-card/format-card.module.js +14 -11
  120. package/esm2015/pipes/format-card/format-card.pipe.js +14 -12
  121. package/esm2015/pipes/index.js +1 -1
  122. package/esm2015/pipes/taiga-ui-addon-commerce-pipes.js +1 -1
  123. package/esm2015/taiga-ui-addon-commerce.js +1 -1
  124. package/esm2015/tokens/i18n.js +6 -6
  125. package/esm2015/tokens/index.js +1 -1
  126. package/esm2015/tokens/taiga-ui-addon-commerce-tokens.js +1 -1
  127. package/esm2015/types/code-length.js +2 -1
  128. package/esm2015/types/currency-variants.js +2 -1
  129. package/esm2015/types/index.js +5 -1
  130. package/esm2015/types/money-sign.js +2 -1
  131. package/esm2015/types/payment-system.js +2 -0
  132. package/esm2015/types/taiga-ui-addon-commerce-types.js +2 -1
  133. package/esm2015/utils/create-auto-corrected-expire-pipe.js +6 -6
  134. package/esm2015/utils/format-currency.js +7 -7
  135. package/esm2015/utils/get-currency-symbol.js +21 -26
  136. package/esm2015/utils/get-payment-system.js +18 -48
  137. package/esm2015/utils/index.js +1 -1
  138. package/esm2015/utils/is-card-length-valid.js +9 -11
  139. package/esm2015/utils/is-card-number-valid.js +4 -6
  140. package/esm2015/utils/is-expire-valid.js +1 -1
  141. package/esm2015/utils/taiga-ui-addon-commerce-utils.js +1 -1
  142. package/esm2015/validators/card-expire.validator.js +2 -2
  143. package/esm2015/validators/card-number.validator.js +4 -4
  144. package/esm2015/validators/index.js +1 -1
  145. package/esm2015/validators/luhn.validator.js +5 -3
  146. package/esm2015/validators/taiga-ui-addon-commerce-validators.js +1 -1
  147. package/fesm2015/taiga-ui-addon-commerce-components-card.js +58 -39
  148. package/fesm2015/taiga-ui-addon-commerce-components-card.js.map +1 -1
  149. package/fesm2015/taiga-ui-addon-commerce-components-input-card-grouped.js +196 -136
  150. package/fesm2015/taiga-ui-addon-commerce-components-input-card-grouped.js.map +1 -1
  151. package/fesm2015/taiga-ui-addon-commerce-components-input-card.js +96 -67
  152. package/fesm2015/taiga-ui-addon-commerce-components-input-card.js.map +1 -1
  153. package/fesm2015/taiga-ui-addon-commerce-components-input-cvc.js +81 -53
  154. package/fesm2015/taiga-ui-addon-commerce-components-input-cvc.js.map +1 -1
  155. package/fesm2015/taiga-ui-addon-commerce-components-input-expire.js +72 -48
  156. package/fesm2015/taiga-ui-addon-commerce-components-input-expire.js.map +1 -1
  157. package/fesm2015/taiga-ui-addon-commerce-components-money.js +136 -112
  158. package/fesm2015/taiga-ui-addon-commerce-components-money.js.map +1 -1
  159. package/fesm2015/taiga-ui-addon-commerce-components.js.map +1 -1
  160. package/fesm2015/taiga-ui-addon-commerce-constants.js +32 -32
  161. package/fesm2015/taiga-ui-addon-commerce-constants.js.map +1 -1
  162. package/fesm2015/taiga-ui-addon-commerce-enums.js +1 -34
  163. package/fesm2015/taiga-ui-addon-commerce-enums.js.map +1 -1
  164. package/fesm2015/taiga-ui-addon-commerce-interfaces.js.map +1 -1
  165. package/fesm2015/taiga-ui-addon-commerce-pipes.js +47 -33
  166. package/fesm2015/taiga-ui-addon-commerce-pipes.js.map +1 -1
  167. package/fesm2015/taiga-ui-addon-commerce-tokens.js +5 -5
  168. package/fesm2015/taiga-ui-addon-commerce-tokens.js.map +1 -1
  169. package/fesm2015/taiga-ui-addon-commerce-types.js.map +1 -1
  170. package/fesm2015/taiga-ui-addon-commerce-utils.js +58 -97
  171. package/fesm2015/taiga-ui-addon-commerce-utils.js.map +1 -1
  172. package/fesm2015/taiga-ui-addon-commerce-validators.js +7 -5
  173. package/fesm2015/taiga-ui-addon-commerce-validators.js.map +1 -1
  174. package/fesm2015/taiga-ui-addon-commerce.js +2 -0
  175. package/fesm2015/taiga-ui-addon-commerce.js.map +1 -1
  176. package/interfaces/package.json +2 -5
  177. package/interfaces/taiga-ui-addon-commerce-interfaces.d.ts +1 -0
  178. package/package.json +12 -15
  179. package/pipes/currency/currency.module.d.ts +5 -0
  180. package/pipes/currency/currency.pipe.d.ts +3 -0
  181. package/pipes/format-card/format-card.module.d.ts +5 -0
  182. package/pipes/format-card/format-card.pipe.d.ts +3 -0
  183. package/pipes/package.json +2 -5
  184. package/pipes/taiga-ui-addon-commerce-pipes.d.ts +1 -0
  185. package/taiga-ui-addon-commerce.d.ts +1 -0
  186. package/tokens/package.json +2 -5
  187. package/tokens/taiga-ui-addon-commerce-tokens.d.ts +1 -0
  188. package/types/index.d.ts +1 -0
  189. package/types/money-sign.d.ts +3 -3
  190. package/types/package.json +2 -5
  191. package/types/payment-system.d.ts +1 -0
  192. package/types/taiga-ui-addon-commerce-types.d.ts +1 -0
  193. package/utils/get-currency-symbol.d.ts +1 -5
  194. package/utils/get-payment-system.d.ts +7 -31
  195. package/utils/is-card-length-valid.d.ts +1 -3
  196. package/utils/is-card-number-valid.d.ts +1 -3
  197. package/utils/package.json +2 -5
  198. package/utils/taiga-ui-addon-commerce-utils.d.ts +1 -0
  199. package/validators/package.json +2 -5
  200. package/validators/taiga-ui-addon-commerce-validators.d.ts +1 -0
  201. package/bundles/taiga-ui-addon-commerce-components-card.umd.min.js +0 -2
  202. package/bundles/taiga-ui-addon-commerce-components-card.umd.min.js.map +0 -1
  203. package/bundles/taiga-ui-addon-commerce-components-input-card-grouped.umd.min.js +0 -2
  204. package/bundles/taiga-ui-addon-commerce-components-input-card-grouped.umd.min.js.map +0 -1
  205. package/bundles/taiga-ui-addon-commerce-components-input-card.umd.min.js +0 -2
  206. package/bundles/taiga-ui-addon-commerce-components-input-card.umd.min.js.map +0 -1
  207. package/bundles/taiga-ui-addon-commerce-components-input-cvc.umd.min.js +0 -2
  208. package/bundles/taiga-ui-addon-commerce-components-input-cvc.umd.min.js.map +0 -1
  209. package/bundles/taiga-ui-addon-commerce-components-input-expire.umd.min.js +0 -2
  210. package/bundles/taiga-ui-addon-commerce-components-input-expire.umd.min.js.map +0 -1
  211. package/bundles/taiga-ui-addon-commerce-components-money.umd.min.js +0 -2
  212. package/bundles/taiga-ui-addon-commerce-components-money.umd.min.js.map +0 -1
  213. package/bundles/taiga-ui-addon-commerce-components.umd.min.js +0 -2
  214. package/bundles/taiga-ui-addon-commerce-components.umd.min.js.map +0 -1
  215. package/bundles/taiga-ui-addon-commerce-constants.umd.min.js +0 -2
  216. package/bundles/taiga-ui-addon-commerce-constants.umd.min.js.map +0 -1
  217. package/bundles/taiga-ui-addon-commerce-enums.umd.min.js +0 -2
  218. package/bundles/taiga-ui-addon-commerce-enums.umd.min.js.map +0 -1
  219. package/bundles/taiga-ui-addon-commerce-interfaces.umd.min.js +0 -2
  220. package/bundles/taiga-ui-addon-commerce-interfaces.umd.min.js.map +0 -1
  221. package/bundles/taiga-ui-addon-commerce-pipes.umd.min.js +0 -2
  222. package/bundles/taiga-ui-addon-commerce-pipes.umd.min.js.map +0 -1
  223. package/bundles/taiga-ui-addon-commerce-tokens.umd.min.js +0 -2
  224. package/bundles/taiga-ui-addon-commerce-tokens.umd.min.js.map +0 -1
  225. package/bundles/taiga-ui-addon-commerce-types.umd.min.js +0 -2
  226. package/bundles/taiga-ui-addon-commerce-types.umd.min.js.map +0 -1
  227. package/bundles/taiga-ui-addon-commerce-utils.umd.min.js +0 -2
  228. package/bundles/taiga-ui-addon-commerce-utils.umd.min.js.map +0 -1
  229. package/bundles/taiga-ui-addon-commerce-validators.umd.min.js +0 -2
  230. package/bundles/taiga-ui-addon-commerce-validators.umd.min.js.map +0 -1
  231. package/bundles/taiga-ui-addon-commerce.umd.min.js +0 -2
  232. package/bundles/taiga-ui-addon-commerce.umd.min.js.map +0 -1
  233. package/components/card/taiga-ui-addon-commerce-components-card.metadata.json +0 -1
  234. package/components/input-card/taiga-ui-addon-commerce-components-input-card.metadata.json +0 -1
  235. package/components/input-card-grouped/taiga-ui-addon-commerce-components-input-card-grouped.metadata.json +0 -1
  236. package/components/input-cvc/taiga-ui-addon-commerce-components-input-cvc.metadata.json +0 -1
  237. package/components/input-expire/taiga-ui-addon-commerce-components-input-expire.metadata.json +0 -1
  238. package/components/money/taiga-ui-addon-commerce-components-money.metadata.json +0 -1
  239. package/components/taiga-ui-addon-commerce-components.metadata.json +0 -1
  240. package/constants/taiga-ui-addon-commerce-constants.metadata.json +0 -1
  241. package/enums/money-sign.d.ts +0 -16
  242. package/enums/payment-system.d.ts +0 -8
  243. package/enums/taiga-ui-addon-commerce-enums.metadata.json +0 -1
  244. package/esm2015/enums/money-sign.js +0 -18
  245. package/esm2015/enums/payment-system.js +0 -9
  246. package/esm5/components/card/card.component.js +0 -73
  247. package/esm5/components/card/card.module.js +0 -19
  248. package/esm5/components/card/index.js +0 -3
  249. package/esm5/components/card/taiga-ui-addon-commerce-components-card.js +0 -5
  250. package/esm5/components/index.js +0 -7
  251. package/esm5/components/input-card/index.js +0 -3
  252. package/esm5/components/input-card/input-card.component.js +0 -167
  253. package/esm5/components/input-card/input-card.module.js +0 -25
  254. package/esm5/components/input-card/taiga-ui-addon-commerce-components-input-card.js +0 -5
  255. package/esm5/components/input-card-grouped/index.js +0 -4
  256. package/esm5/components/input-card-grouped/input-card-grouped.component.js +0 -511
  257. package/esm5/components/input-card-grouped/input-card-grouped.module.js +0 -40
  258. package/esm5/components/input-card-grouped/input-card-grouped.providers.js +0 -34
  259. package/esm5/components/input-card-grouped/taiga-ui-addon-commerce-components-input-card-grouped.js +0 -5
  260. package/esm5/components/input-cvc/index.js +0 -3
  261. package/esm5/components/input-cvc/input-cvc.component.js +0 -113
  262. package/esm5/components/input-cvc/input-cvc.module.js +0 -26
  263. package/esm5/components/input-cvc/taiga-ui-addon-commerce-components-input-cvc.js +0 -5
  264. package/esm5/components/input-expire/index.js +0 -3
  265. package/esm5/components/input-expire/input-expire.component.js +0 -108
  266. package/esm5/components/input-expire/input-expire.module.js +0 -25
  267. package/esm5/components/input-expire/taiga-ui-addon-commerce-components-input-expire.js +0 -5
  268. package/esm5/components/money/index.js +0 -9
  269. package/esm5/components/money/money-options.js +0 -18
  270. package/esm5/components/money/money.component.js +0 -101
  271. package/esm5/components/money/money.module.js +0 -27
  272. package/esm5/components/money/pipes/fraction-part.pipe.js +0 -27
  273. package/esm5/components/money/pipes/integer-part.pipe.js +0 -21
  274. package/esm5/components/money/pipes/sign-symbol.pipe.js +0 -16
  275. package/esm5/components/money/taiga-ui-addon-commerce-components-money.js +0 -5
  276. package/esm5/components/money/utils/format-fraction-part.js +0 -7
  277. package/esm5/components/money/utils/format-sign-symbol.js +0 -12
  278. package/esm5/components/taiga-ui-addon-commerce-components.js +0 -5
  279. package/esm5/constants/card-holder-mask.js +0 -37
  280. package/esm5/constants/card-mask.js +0 -30
  281. package/esm5/constants/default-card-validator.js +0 -5
  282. package/esm5/constants/index.js +0 -4
  283. package/esm5/constants/taiga-ui-addon-commerce-constants.js +0 -5
  284. package/esm5/enums/currency-code.js +0 -171
  285. package/esm5/enums/currency.js +0 -171
  286. package/esm5/enums/index.js +0 -5
  287. package/esm5/enums/money-sign.js +0 -18
  288. package/esm5/enums/payment-system.js +0 -9
  289. package/esm5/enums/taiga-ui-addon-commerce-enums.js +0 -5
  290. package/esm5/index.js +0 -8
  291. package/esm5/interfaces/card.js +0 -1
  292. package/esm5/interfaces/index.js +0 -1
  293. package/esm5/interfaces/taiga-ui-addon-commerce-interfaces.js +0 -4
  294. package/esm5/pipes/currency/currency.module.js +0 -16
  295. package/esm5/pipes/currency/currency.pipe.js +0 -18
  296. package/esm5/pipes/format-card/format-card.module.js +0 -16
  297. package/esm5/pipes/format-card/format-card.pipe.js +0 -22
  298. package/esm5/pipes/index.js +0 -5
  299. package/esm5/pipes/taiga-ui-addon-commerce-pipes.js +0 -5
  300. package/esm5/taiga-ui-addon-commerce.js +0 -5
  301. package/esm5/tokens/i18n.js +0 -13
  302. package/esm5/tokens/index.js +0 -2
  303. package/esm5/tokens/taiga-ui-addon-commerce-tokens.js +0 -5
  304. package/esm5/types/code-length.js +0 -1
  305. package/esm5/types/currency-variants.js +0 -1
  306. package/esm5/types/index.js +0 -1
  307. package/esm5/types/money-sign.js +0 -1
  308. package/esm5/types/taiga-ui-addon-commerce-types.js +0 -4
  309. package/esm5/utils/create-auto-corrected-expire-pipe.js +0 -43
  310. package/esm5/utils/format-currency.js +0 -17
  311. package/esm5/utils/get-currency-symbol.js +0 -71
  312. package/esm5/utils/get-payment-system.js +0 -103
  313. package/esm5/utils/index.js +0 -8
  314. package/esm5/utils/is-card-length-valid.js +0 -25
  315. package/esm5/utils/is-card-number-valid.js +0 -21
  316. package/esm5/utils/is-expire-valid.js +0 -14
  317. package/esm5/utils/taiga-ui-addon-commerce-utils.js +0 -5
  318. package/esm5/validators/card-expire.validator.js +0 -10
  319. package/esm5/validators/card-number.validator.js +0 -9
  320. package/esm5/validators/index.js +0 -4
  321. package/esm5/validators/luhn.validator.js +0 -9
  322. package/esm5/validators/taiga-ui-addon-commerce-validators.js +0 -5
  323. package/fesm5/taiga-ui-addon-commerce-components-card.js +0 -94
  324. package/fesm5/taiga-ui-addon-commerce-components-card.js.map +0 -1
  325. package/fesm5/taiga-ui-addon-commerce-components-input-card-grouped.js +0 -579
  326. package/fesm5/taiga-ui-addon-commerce-components-input-card-grouped.js.map +0 -1
  327. package/fesm5/taiga-ui-addon-commerce-components-input-card.js +0 -193
  328. package/fesm5/taiga-ui-addon-commerce-components-input-card.js.map +0 -1
  329. package/fesm5/taiga-ui-addon-commerce-components-input-cvc.js +0 -140
  330. package/fesm5/taiga-ui-addon-commerce-components-input-cvc.js.map +0 -1
  331. package/fesm5/taiga-ui-addon-commerce-components-input-expire.js +0 -134
  332. package/fesm5/taiga-ui-addon-commerce-components-input-expire.js.map +0 -1
  333. package/fesm5/taiga-ui-addon-commerce-components-money.js +0 -211
  334. package/fesm5/taiga-ui-addon-commerce-components-money.js.map +0 -1
  335. package/fesm5/taiga-ui-addon-commerce-components.js +0 -11
  336. package/fesm5/taiga-ui-addon-commerce-components.js.map +0 -1
  337. package/fesm5/taiga-ui-addon-commerce-constants.js +0 -78
  338. package/fesm5/taiga-ui-addon-commerce-constants.js.map +0 -1
  339. package/fesm5/taiga-ui-addon-commerce-enums.js +0 -375
  340. package/fesm5/taiga-ui-addon-commerce-enums.js.map +0 -1
  341. package/fesm5/taiga-ui-addon-commerce-interfaces.js +0 -4
  342. package/fesm5/taiga-ui-addon-commerce-interfaces.js.map +0 -1
  343. package/fesm5/taiga-ui-addon-commerce-pipes.js +0 -67
  344. package/fesm5/taiga-ui-addon-commerce-pipes.js.map +0 -1
  345. package/fesm5/taiga-ui-addon-commerce-tokens.js +0 -20
  346. package/fesm5/taiga-ui-addon-commerce-tokens.js.map +0 -1
  347. package/fesm5/taiga-ui-addon-commerce-types.js +0 -4
  348. package/fesm5/taiga-ui-addon-commerce-types.js.map +0 -1
  349. package/fesm5/taiga-ui-addon-commerce-utils.js +0 -298
  350. package/fesm5/taiga-ui-addon-commerce-utils.js.map +0 -1
  351. package/fesm5/taiga-ui-addon-commerce-validators.js +0 -31
  352. package/fesm5/taiga-ui-addon-commerce-validators.js.map +0 -1
  353. package/fesm5/taiga-ui-addon-commerce.js +0 -12
  354. package/fesm5/taiga-ui-addon-commerce.js.map +0 -1
  355. package/interfaces/taiga-ui-addon-commerce-interfaces.metadata.json +0 -1
  356. package/pipes/taiga-ui-addon-commerce-pipes.metadata.json +0 -1
  357. package/taiga-ui-addon-commerce.metadata.json +0 -1
  358. package/tokens/taiga-ui-addon-commerce-tokens.metadata.json +0 -1
  359. package/types/taiga-ui-addon-commerce-types.metadata.json +0 -1
  360. package/utils/taiga-ui-addon-commerce-utils.metadata.json +0 -1
  361. package/validators/taiga-ui-addon-commerce-validators.metadata.json +0 -1
@@ -1,511 +0,0 @@
1
- var _a;
2
- import { __decorate, __extends, __param } from "tslib";
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostListener, Inject, Input, Optional, Output, Self, TemplateRef, ViewChild, } from '@angular/core';
4
- import { NgControl } from '@angular/forms';
5
- import { TUI_CARD_MASK, tuiDefaultCardValidator } from '@taiga-ui/addon-commerce/constants';
6
- import { getPaymentSystem, tuiCreateAutoCorrectedExpirePipe, } from '@taiga-ui/addon-commerce/utils';
7
- import { AbstractTuiNullableControl, isNativeFocused, isNativeFocusedIn, TUI_FOCUSABLE_ITEM_ACCESSOR, tuiAssertIsHTMLElement, tuiDefaultProp, tuiPure, tuiRequiredSetter, } from '@taiga-ui/cdk';
8
- import { MODE_PROVIDER, TUI_DATA_LIST_HOST, TUI_DIGIT_REGEXP, TUI_MODE, TUI_NON_DIGIT_REGEXP, TUI_TEXTFIELD_APPEARANCE, TuiDataListComponent, TuiDataListDirective, } from '@taiga-ui/core';
9
- import { Observable } from 'rxjs';
10
- import { TUI_INPUT_CARD_GROUPED_TEXTS, } from './input-card-grouped.providers';
11
- var STUB = {
12
- card: '',
13
- expire: '',
14
- cvc: '',
15
- };
16
- var ICONS = (_a = {},
17
- _a["mir" /* Mir */] = 'tuiIconMir',
18
- _a["visa" /* Visa */] = 'tuiIconVisa',
19
- _a["electron" /* Electron */] = 'tuiIconElectron',
20
- _a["mastercard" /* Mastercard */] = 'tuiIconMastercard',
21
- _a["maestro" /* Maestro */] = 'tuiIconMaestro',
22
- _a);
23
- // @dynamic
24
- var TuiInputCardGroupedComponent = /** @class */ (function (_super) {
25
- __extends(TuiInputCardGroupedComponent, _super);
26
- function TuiInputCardGroupedComponent(control, changeDetectorRef, elementRef, mode$, cardGroupedTexts$, appearance) {
27
- var _this = _super.call(this, control, changeDetectorRef) || this;
28
- _this.elementRef = elementRef;
29
- _this.mode$ = mode$;
30
- _this.cardGroupedTexts$ = cardGroupedTexts$;
31
- _this.appearance = appearance;
32
- _this.expireInert = false;
33
- _this.autocompleteEnabled = false;
34
- _this.cardSrc = null; // TODO: 3.0 will be deleted `null` in v3.0
35
- _this.exampleText = '0000 0000 0000 0000';
36
- _this.cardValidator = tuiDefaultCardValidator;
37
- _this.autofilledChange = new EventEmitter();
38
- _this.binChange = new EventEmitter();
39
- _this.dropdown = '';
40
- _this.exampleTextCVC = '000';
41
- _this.maskCVC = {
42
- mask: new Array(3).fill(TUI_DIGIT_REGEXP),
43
- guide: false,
44
- };
45
- _this.maskCard = {
46
- mask: TUI_CARD_MASK,
47
- guide: false,
48
- pipe: function (conformedValue) { return conformedValue.trim(); },
49
- };
50
- _this.maskExpire = {
51
- mask: [
52
- TUI_DIGIT_REGEXP,
53
- TUI_DIGIT_REGEXP,
54
- '/',
55
- TUI_DIGIT_REGEXP,
56
- TUI_DIGIT_REGEXP,
57
- ],
58
- pipe: tuiCreateAutoCorrectedExpirePipe(),
59
- guide: false,
60
- };
61
- _this.open = false;
62
- return _this;
63
- }
64
- TuiInputCardGroupedComponent_1 = TuiInputCardGroupedComponent;
65
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "codeLength", {
66
- set: function (length) {
67
- this.exampleTextCVC = '0'.repeat(length);
68
- this.maskCVC = {
69
- mask: new Array(length).fill(TUI_DIGIT_REGEXP),
70
- guide: false,
71
- };
72
- },
73
- enumerable: true,
74
- configurable: true
75
- });
76
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "nativeFocusableElement", {
77
- get: function () {
78
- return this.inputCard ? this.inputCard.nativeElement : null;
79
- },
80
- enumerable: true,
81
- configurable: true
82
- });
83
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "focused", {
84
- get: function () {
85
- return this.open || isNativeFocusedIn(this.elementRef.nativeElement);
86
- },
87
- enumerable: true,
88
- configurable: true
89
- });
90
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "card", {
91
- get: function () {
92
- var _a, _b;
93
- return (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.card) !== null && _b !== void 0 ? _b : '';
94
- },
95
- enumerable: true,
96
- configurable: true
97
- });
98
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "expire", {
99
- get: function () {
100
- var _a, _b;
101
- return (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.expire) !== null && _b !== void 0 ? _b : '';
102
- },
103
- enumerable: true,
104
- configurable: true
105
- });
106
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cvc", {
107
- get: function () {
108
- var _a, _b;
109
- return (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.cvc) !== null && _b !== void 0 ? _b : '';
110
- },
111
- enumerable: true,
112
- configurable: true
113
- });
114
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "hasCleaner", {
115
- get: function () {
116
- var _a, _b;
117
- return !!((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.card) === null || _b === void 0 ? void 0 : _b.trim()) && !this.readOnly && !this.computedDisabled;
118
- },
119
- enumerable: true,
120
- configurable: true
121
- });
122
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "hasDropdown", {
123
- get: function () {
124
- return !!this.dropdown;
125
- },
126
- enumerable: true,
127
- configurable: true
128
- });
129
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "defaultIcon", {
130
- get: function () {
131
- var paymentSystem = this.paymentSystem;
132
- return paymentSystem && ICONS[paymentSystem];
133
- },
134
- enumerable: true,
135
- configurable: true
136
- });
137
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "icon", {
138
- get: function () {
139
- var _a;
140
- return (_a = this.cardSrc) !== null && _a !== void 0 ? _a : this.defaultIcon;
141
- },
142
- enumerable: true,
143
- configurable: true
144
- });
145
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "bin", {
146
- get: function () {
147
- return !this.value || this.value.card.length < 6
148
- ? null
149
- : this.value.card.slice(0, 6);
150
- },
151
- enumerable: true,
152
- configurable: true
153
- });
154
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "placeholderRaised", {
155
- get: function () {
156
- return (this.computedFocused && !this.readOnly) || this.hasCardNumber;
157
- },
158
- enumerable: true,
159
- configurable: true
160
- });
161
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "hasCardNumber", {
162
- get: function () {
163
- var _a, _b;
164
- return !!((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.card) === null || _b === void 0 ? void 0 : _b.trim());
165
- },
166
- enumerable: true,
167
- configurable: true
168
- });
169
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "idCard", {
170
- get: function () {
171
- return this.id + "_card";
172
- },
173
- enumerable: true,
174
- configurable: true
175
- });
176
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "idExpire", {
177
- get: function () {
178
- return this.id + "_expire";
179
- },
180
- enumerable: true,
181
- configurable: true
182
- });
183
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "idCVC", {
184
- get: function () {
185
- return this.id + "_cvc";
186
- },
187
- enumerable: true,
188
- configurable: true
189
- });
190
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "isCardCollapsed", {
191
- get: function () {
192
- return this.isFocusable(this.card) && !this.cardFocused;
193
- },
194
- enumerable: true,
195
- configurable: true
196
- });
197
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "autocompleteCard", {
198
- get: function () {
199
- return this.autocompleteEnabled
200
- ? "cc-number" /* CcNumber */
201
- : "off" /* Off */;
202
- },
203
- enumerable: true,
204
- configurable: true
205
- });
206
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "autocompleteExpire", {
207
- get: function () {
208
- return this.autocompleteEnabled
209
- ? "cc-exp" /* CcExp */
210
- : "off" /* Off */;
211
- },
212
- enumerable: true,
213
- configurable: true
214
- });
215
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "autocompleteCVC", {
216
- get: function () {
217
- return this.autocompleteEnabled
218
- ? "cc-csc" /* CcCsc */
219
- : "off" /* Off */;
220
- },
221
- enumerable: true,
222
- configurable: true
223
- });
224
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "name", {
225
- // Safari expiration date autofill workaround
226
- get: function () {
227
- return this.autocompleteEnabled ? 'ccexpiryyear' : null;
228
- },
229
- enumerable: true,
230
- configurable: true
231
- });
232
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cardPrefilled", {
233
- get: function () {
234
- return !!this.card.match(TUI_NON_DIGIT_REGEXP);
235
- },
236
- enumerable: true,
237
- configurable: true
238
- });
239
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cvcPrefilled", {
240
- get: function () {
241
- return !!this.cvc.match(TUI_NON_DIGIT_REGEXP);
242
- },
243
- enumerable: true,
244
- configurable: true
245
- });
246
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cardFocusable", {
247
- get: function () {
248
- return this.focusable && !this.cardPrefilled;
249
- },
250
- enumerable: true,
251
- configurable: true
252
- });
253
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "expireFocusable", {
254
- get: function () {
255
- return this.isFocusable(this.card) && !this.expireInert;
256
- },
257
- enumerable: true,
258
- configurable: true
259
- });
260
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cvcFocusable", {
261
- get: function () {
262
- return this.isFocusable(this.card);
263
- },
264
- enumerable: true,
265
- configurable: true
266
- });
267
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "masked", {
268
- get: function () {
269
- return this.cardPrefilled ? "*" + this.card.slice(-4) : '*';
270
- },
271
- enumerable: true,
272
- configurable: true
273
- });
274
- TuiInputCardGroupedComponent.prototype.onEsc = function () {
275
- this.open = false;
276
- };
277
- TuiInputCardGroupedComponent.prototype.onArrow = function (element, step) {
278
- var _a;
279
- this.open = this.hasDropdown;
280
- this.changeDetectorRef.detectChanges();
281
- (_a = this.datalist) === null || _a === void 0 ? void 0 : _a.onKeyDownArrow(element, step);
282
- };
283
- TuiInputCardGroupedComponent.prototype.handleOption = function (option) {
284
- var _a, _b;
285
- var _c = option.card, card = _c === void 0 ? '' : _c, _d = option.expire, expire = _d === void 0 ? '' : _d, _e = option.cvc, cvc = _e === void 0 ? '' : _e;
286
- var bin = this.bin;
287
- var element = (!expire && ((_a = this.inputExpire) === null || _a === void 0 ? void 0 : _a.nativeElement)) || ((_b = this.inputCVC) === null || _b === void 0 ? void 0 : _b.nativeElement);
288
- this.updateValue({ card: card, expire: expire, cvc: cvc });
289
- this.updateBin(bin);
290
- this.open = false;
291
- this.expireInert = !!expire;
292
- element === null || element === void 0 ? void 0 : element.focus();
293
- };
294
- TuiInputCardGroupedComponent.prototype.onCardChange = function (card) {
295
- var _a = this, value = _a.value, bin = _a.bin;
296
- var parsed = card.split(' ').join('');
297
- if (value && value.card === parsed) {
298
- return;
299
- }
300
- this.updateProperty(parsed, 'card');
301
- this.updateBin(bin);
302
- if (this.cardValidator(this.card) && !this.expire && this.inputExpire) {
303
- this.focusExpire();
304
- }
305
- };
306
- TuiInputCardGroupedComponent.prototype.onExpireChange = function (expire) {
307
- // @bad TODO: Workaround until mask pipe can replace chars and keep caret position
308
- // @bad TODO: Think about a solution without mask at all
309
- if (!this.inputExpire) {
310
- return;
311
- }
312
- if (parseInt(expire.slice(0, 2), 10) > 12) {
313
- expire = "12" + expire.slice(2);
314
- }
315
- if (expire.slice(0, 2) === '00') {
316
- expire = "01" + expire.slice(2);
317
- }
318
- this.inputExpire.nativeElement.value = expire;
319
- this.updateProperty(expire, 'expire');
320
- if (expire.length === 5) {
321
- this.focusCVC();
322
- }
323
- };
324
- TuiInputCardGroupedComponent.prototype.onCVCChange = function (cvc) {
325
- this.updateProperty(cvc, 'cvc');
326
- };
327
- TuiInputCardGroupedComponent.prototype.onActiveZoneChange = function (active) {
328
- this.updateFocused(active);
329
- this.open = active && this.open;
330
- };
331
- TuiInputCardGroupedComponent.prototype.onHovered = function (hovered) {
332
- this.updateHovered(hovered);
333
- };
334
- TuiInputCardGroupedComponent.prototype.onMouseDown = function (event) {
335
- tuiAssertIsHTMLElement(event.target);
336
- if (event.target.matches('input')) {
337
- return;
338
- }
339
- event.preventDefault();
340
- this.focusInput();
341
- };
342
- TuiInputCardGroupedComponent.prototype.onScroll = function (_a) {
343
- var currentTarget = _a.currentTarget;
344
- tuiAssertIsHTMLElement(currentTarget);
345
- currentTarget.scrollLeft = 0;
346
- };
347
- TuiInputCardGroupedComponent.prototype.clear = function () {
348
- this.updateValue(null);
349
- this.focusCard();
350
- };
351
- TuiInputCardGroupedComponent.prototype.toggle = function () {
352
- this.open = !this.open;
353
- };
354
- TuiInputCardGroupedComponent.prototype.writeValue = function (value) {
355
- var bin = this.bin;
356
- _super.prototype.writeValue.call(this, value);
357
- this.updateBin(bin);
358
- this.expireInert = !!this.expire && this.cardPrefilled;
359
- };
360
- /** Public API for manual focus management */
361
- TuiInputCardGroupedComponent.prototype.focusCard = function () {
362
- var _a;
363
- (_a = this.inputCard) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
364
- };
365
- TuiInputCardGroupedComponent.prototype.focusExpire = function () {
366
- var _a;
367
- (_a = this.inputExpire) === null || _a === void 0 ? void 0 : _a.nativeElement.focus({ preventScroll: true });
368
- };
369
- TuiInputCardGroupedComponent.prototype.focusCVC = function () {
370
- var _a;
371
- (_a = this.inputCVC) === null || _a === void 0 ? void 0 : _a.nativeElement.focus();
372
- };
373
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "cardFocused", {
374
- get: function () {
375
- return !!this.inputCard && isNativeFocused(this.inputCard.nativeElement);
376
- },
377
- enumerable: true,
378
- configurable: true
379
- });
380
- Object.defineProperty(TuiInputCardGroupedComponent.prototype, "paymentSystem", {
381
- get: function () {
382
- return this.value && getPaymentSystem(this.value.card);
383
- },
384
- enumerable: true,
385
- configurable: true
386
- });
387
- TuiInputCardGroupedComponent.prototype.isFocusable = function (card) {
388
- return this.focusable && (this.cardValidator(card) || this.cardPrefilled);
389
- };
390
- TuiInputCardGroupedComponent.prototype.updateBin = function (oldBin) {
391
- var bin = this.bin;
392
- if (bin !== oldBin && !this.cardPrefilled) {
393
- this.binChange.emit(bin);
394
- }
395
- };
396
- TuiInputCardGroupedComponent.prototype.updateProperty = function (propValue, propName) {
397
- var _a = this.value || STUB, card = _a.card, expire = _a.expire, cvc = _a.cvc;
398
- var newValue = {
399
- card: card,
400
- expire: expire,
401
- cvc: cvc,
402
- };
403
- newValue[propName] = propValue;
404
- if (!newValue.expire && !newValue.cvc && !newValue.card) {
405
- this.updateValue(null);
406
- }
407
- else {
408
- this.updateValue(newValue);
409
- }
410
- };
411
- TuiInputCardGroupedComponent.prototype.focusInput = function () {
412
- var _a, _b, _c;
413
- var element = (this.cardFocusable && ((_a = this.inputCard) === null || _a === void 0 ? void 0 : _a.nativeElement)) ||
414
- (this.expireFocusable && ((_b = this.inputExpire) === null || _b === void 0 ? void 0 : _b.nativeElement)) || ((_c = this.inputCVC) === null || _c === void 0 ? void 0 : _c.nativeElement);
415
- element === null || element === void 0 ? void 0 : element.focus();
416
- };
417
- var TuiInputCardGroupedComponent_1;
418
- TuiInputCardGroupedComponent.ctorParameters = function () { return [
419
- { type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] },
420
- { type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] },
421
- { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
422
- { type: Observable, decorators: [{ type: Inject, args: [TUI_MODE,] }] },
423
- { type: Observable, decorators: [{ type: Inject, args: [TUI_INPUT_CARD_GROUPED_TEXTS,] }] },
424
- { type: String, decorators: [{ type: Inject, args: [TUI_TEXTFIELD_APPEARANCE,] }] }
425
- ]; };
426
- __decorate([
427
- ViewChild('inputCard')
428
- ], TuiInputCardGroupedComponent.prototype, "inputCard", void 0);
429
- __decorate([
430
- ViewChild('inputExpire')
431
- ], TuiInputCardGroupedComponent.prototype, "inputExpire", void 0);
432
- __decorate([
433
- ViewChild('inputCVC')
434
- ], TuiInputCardGroupedComponent.prototype, "inputCVC", void 0);
435
- __decorate([
436
- Input(),
437
- tuiDefaultProp()
438
- ], TuiInputCardGroupedComponent.prototype, "autocompleteEnabled", void 0);
439
- __decorate([
440
- Input(),
441
- tuiDefaultProp()
442
- ], TuiInputCardGroupedComponent.prototype, "cardSrc", void 0);
443
- __decorate([
444
- Input(),
445
- tuiDefaultProp()
446
- ], TuiInputCardGroupedComponent.prototype, "exampleText", void 0);
447
- __decorate([
448
- Input(),
449
- tuiDefaultProp()
450
- ], TuiInputCardGroupedComponent.prototype, "cardValidator", void 0);
451
- __decorate([
452
- Input(),
453
- tuiRequiredSetter()
454
- ], TuiInputCardGroupedComponent.prototype, "codeLength", null);
455
- __decorate([
456
- Output()
457
- ], TuiInputCardGroupedComponent.prototype, "autofilledChange", void 0);
458
- __decorate([
459
- Output()
460
- ], TuiInputCardGroupedComponent.prototype, "binChange", void 0);
461
- __decorate([
462
- ContentChild(TuiDataListDirective, { read: TemplateRef })
463
- ], TuiInputCardGroupedComponent.prototype, "dropdown", void 0);
464
- __decorate([
465
- ContentChild(TuiDataListComponent)
466
- ], TuiInputCardGroupedComponent.prototype, "datalist", void 0);
467
- __decorate([
468
- HostListener('keydown.esc')
469
- ], TuiInputCardGroupedComponent.prototype, "onEsc", null);
470
- __decorate([
471
- HostListener('keydown.arrowDown.prevent', ['$event.target', '1']),
472
- HostListener('keydown.arrowUp.prevent', ['$event.target', '-1'])
473
- ], TuiInputCardGroupedComponent.prototype, "onArrow", null);
474
- __decorate([
475
- tuiPure
476
- ], TuiInputCardGroupedComponent.prototype, "isFocusable", null);
477
- TuiInputCardGroupedComponent = TuiInputCardGroupedComponent_1 = __decorate([
478
- Component({
479
- selector: 'tui-input-card-grouped',
480
- template: "<tui-wrapper\n *ngIf=\"cardGroupedTexts$ | async as texts\"\n class=\"t-common-wrapper\"\n [appearance]=\"appearance\"\n [readOnly]=\"readOnly\"\n [disabled]=\"computedDisabled\"\n [focused]=\"computedFocused\"\n [hovered]=\"computedHovered\"\n [invalid]=\"computedInvalid\"\n [tuiDropdown]=\"open\"\n [tuiDropdownContent]=\"dropdown || ''\"\n (tuiHoveredChange)=\"onHovered($event)\"\n (tuiActiveZoneChange)=\"onActiveZoneChange($event)\"\n (scroll)=\"onScroll($event)\"\n (mousedown)=\"onMouseDown($event)\"\n>\n <div class=\"t-wrapper\">\n <label\n *tuiLet=\"value?.card | tuiFormatCard: cardPrefilled as formattedCard\"\n tuiPreventDefault=\"click\"\n >\n <input\n #inputCard\n type=\"text\"\n automation-id=\"tui-input-card-grouped__card\"\n tuiInputMode=\"numeric\"\n class=\"t-input t-input_card\"\n [class.t-input_inert]=\"cardPrefilled\"\n [class.t-input_hidden]=\"!card.length && focused\"\n [attr.id]=\"idCard\"\n [attr.aria-invalid]=\"!cardPrefilled && !(this.card | tuiMapper: cardValidator)\"\n [placeholder]=\"cardPrefilled ? '' : exampleText\"\n [autocomplete]=\"autocompleteCard\"\n [disabled]=\"computedDisabled\"\n [readOnly]=\"readOnly\"\n [textMask]=\"maskCard\"\n [tuiFocusable]=\"cardFocusable\"\n [ngModel]=\"formattedCard\"\n (ngModelChange)=\"onCardChange($event)\"\n (focus)=\"(0)\"\n />\n <span\n aria-hidden=\"true\"\n class=\"t-collapsed\"\n [attr.data-before]=\"masked\"\n [class.t-collapsed_enable-mask]=\"isCardCollapsed\"\n >\n <span class=\"t-collapsed-wrapper\">\n <span\n class=\"t-value\"\n [class.t-value_collapsed]=\"isCardCollapsed\"\n >\n {{ formattedCard }}\n </span>\n </span>\n </span>\n <span\n class=\"t-placeholder\"\n [class.t-placeholder_raised]=\"placeholderRaised\"\n >\n {{ texts.cardNumberText }}\n </span>\n </label>\n </div>\n <div\n class=\"t-wrapper t-wrapper_expire\"\n [class.t-wrapper_active]=\"isCardCollapsed\"\n >\n <label tuiPreventDefault=\"click\">\n <input\n #inputExpire\n type=\"text\"\n placeholder=\"00/00\"\n automation-id=\"tui-input-card-grouped__expire\"\n tuiInputMode=\"numeric\"\n class=\"t-input\"\n [class.t-input_inert]=\"!expireFocusable\"\n [attr.id]=\"idExpire\"\n [attr.name]=\"name\"\n [autocomplete]=\"autocompleteExpire\"\n [disabled]=\"computedDisabled\"\n [readOnly]=\"readOnly\"\n [tuiFocusable]=\"expireFocusable\"\n [textMask]=\"maskExpire\"\n [ngModel]=\"expire\"\n (ngModelChange)=\"onExpireChange($event)\"\n (focus)=\"(0)\"\n />\n <span\n class=\"t-placeholder\"\n [class.t-placeholder_raised]=\"placeholderRaised\"\n >\n {{ texts.expiryText }}\n </span>\n </label>\n </div>\n <div\n class=\"t-wrapper t-wrapper_cvc\"\n [class.t-wrapper_active]=\"isCardCollapsed\"\n >\n <label tuiPreventDefault=\"click\">\n <input\n #inputCVC\n type=\"text\"\n automation-id=\"tui-input-card-grouped__cvc\"\n tuiInputMode=\"numeric\"\n class=\"t-input\"\n [class.t-input_prefilled]=\"cvcPrefilled\"\n [placeholder]=\"cvcPrefilled ? '\u2022\u2022\u2022' : exampleTextCVC\"\n [attr.id]=\"idCVC\"\n [disabled]=\"computedDisabled\"\n [readOnly]=\"readOnly || cvcPrefilled\"\n [autocomplete]=\"autocompleteCVC\"\n [textMask]=\"maskCVC\"\n [tuiFocusable]=\"cvcFocusable\"\n [ngModel]=\"cvc\"\n (ngModelChange)=\"onCVCChange($event)\"\n (focus)=\"(0)\"\n />\n <span\n class=\"t-placeholder\"\n [class.t-placeholder_raised]=\"placeholderRaised\"\n >\n {{ texts.cvcText }}\n </span>\n </label>\n </div>\n <div class=\"t-icons\">\n <div\n *ngIf=\"icon\"\n polymorpheus-outlet\n class=\"t-icon-outlet\"\n [content]=\"icon\"\n >\n <ng-template let-icon>\n <tui-svg\n automation-id=\"tui-input-card-grouped__icon\"\n class=\"t-card\"\n [src]=\"icon\"\n ></tui-svg>\n </ng-template>\n </div>\n <tui-svg\n *ngIf=\"hasCleaner\"\n src=\"tuiIconCloseLarge\"\n class=\"t-icon\"\n (click)=\"clear()\"\n ></tui-svg>\n <tui-svg\n *ngIf=\"hasDropdown\"\n src=\"tuiIconChevronDownLarge\"\n class=\"t-icon\"\n [class.t-icon_rotated]=\"open\"\n (click)=\"toggle()\"\n ></tui-svg>\n </div>\n</tui-wrapper>\n",
481
- changeDetection: ChangeDetectionStrategy.OnPush,
482
- providers: [
483
- MODE_PROVIDER,
484
- {
485
- provide: TUI_FOCUSABLE_ITEM_ACCESSOR,
486
- useExisting: forwardRef(function () { return TuiInputCardGroupedComponent_1; }),
487
- },
488
- {
489
- provide: TUI_DATA_LIST_HOST,
490
- useExisting: forwardRef(function () { return TuiInputCardGroupedComponent_1; }),
491
- },
492
- ],
493
- host: {
494
- '($.data-mode.attr)': 'mode$',
495
- 'data-size': 'l',
496
- },
497
- styles: [":host{display:block;height:var(--tui-height-l);width:29.5rem;border-radius:var(--tui-radius-m)}:host[data-mode=onDark]{--tui-autofill:var(--tui-autofill-night)}:host :host-context(tui-root._mobile){width:18rem}.t-outline{height:100%;width:100%}.t-common-wrapper{position:relative;height:100%;width:100%;overflow:hidden}.t-wrapper{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;position:absolute;width:100%;height:100%}.t-wrapper_cvc{margin-left:7.1875rem;transform:translate3d(100%,0,0)}:host-context(tui-root._mobile) .t-wrapper_cvc{margin-left:4.0625rem}.t-wrapper_expire{transform:translate3d(100%,0,0)}.t-wrapper_active{transform:translate3d(6.5625rem,0,0)}:host-context(tui-root._mobile) .t-wrapper_active{transform:translate3d(4.125rem,0,0)}.t-card{width:2rem;height:2rem;margin-right:.625rem}.t-collapsed{font:var(--tui-font-text-s);color:var(--tui-text-01);padding:0 0 0 1rem;margin:0;border-radius:inherit;background:0 0;font-size:inherit;font-weight:inherit;color:inherit;caret-color:currentColor;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;word-break:keep-all;-webkit-text-fill-color:currentColor;position:absolute;top:0;left:0;width:100%;height:100%;padding:0 var(--tui-padding-m);border:0;border-width:0 var(--border-end,0) 0 var(--border-start,0);border-inline-start-width:var(--border-start,0);border-inline-end-width:var(--border-end,0);text-indent:var(--text-indent);text-align:inherit;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-transform:inherit;resize:none;line-height:2.25rem;pointer-events:none}.t-collapsed:-webkit-autofill,.t-collapsed:-webkit-autofill:focus,.t-collapsed:-webkit-autofill:hover{border-radius:inherit;color:inherit!important;background-color:transparent!important;-webkit-text-fill-color:var(--tui-text-01)!important;border-color:var(--tui-autofill);-webkit-box-shadow:0 0 0 100rem var(--tui-autofill) inset!important}.t-collapsed :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill,.t-collapsed :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill:focus,.t-collapsed :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill:hover,.t-collapsed :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill,.t-collapsed :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill:focus,.t-collapsed :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill:hover,:host[data-mode=onDark] .t-collapsed:-webkit-autofill,:host[data-mode=onDark] .t-collapsed:-webkit-autofill:focus,:host[data-mode=onDark] .t-collapsed:-webkit-autofill:hover{border-radius:inherit;color:inherit!important;background-color:transparent!important;-webkit-text-fill-color:var(--tui-text-01-night)!important;border-color:var(--tui-autofill-night);-webkit-box-shadow:0 0 0 100rem var(--tui-autofill-night) inset!important}.t-collapsed :host-context(tui-primitive-textfield[data-size='s']):not(tui-primitive-textfield),.t-collapsed :host-context(tui-text-area[data-size='s']):not(tui-text-area),:host[data-size='s'] .t-collapsed{padding:0 var(--tui-padding-s)}.t-collapsed :host-context(tui-primitive-textfield[data-size='l']):not(tui-primitive-textfield),.t-collapsed :host-context(tui-text-area[data-size='l']):not(tui-text-area),:host[data-size='l'] .t-collapsed{padding:0 var(--tui-padding-l)}.t-collapsed :host-context(tui-primitive-textfield._disabled),.t-collapsed :host-context(tui-text-area._disabled),:host._disabled .t-collapsed{pointer-events:none}.t-collapsed :host-context(tui-primitive-textfield[data-size='l']:not(._label-outside)):not(tui-primitive-textfield),:host[data-size='l']:not(._label-outside) .t-collapsed{padding-top:1.25rem}.t-collapsed :host-context(tui-primitive-textfield[data-size='l']:not(._label-outside)):not(tui-primitive-textfield):-webkit-autofill+.content .placeholder,:host[data-size='l']:not(._label-outside) .t-collapsed:-webkit-autofill+.content .placeholder{font-size:.8156rem;transform:translateY(-.625rem)}.t-collapsed :host-context(tui-primitive-textfield[data-size='m']:not(._label-outside)):not(tui-primitive-textfield),:host[data-size='m']:not(._label-outside) .t-collapsed{padding-top:1.125rem}.t-collapsed :host-context(tui-primitive-textfield[data-size='m']:not(._label-outside)):not(tui-primitive-textfield):-webkit-autofill+.content .placeholder,:host[data-size='m']:not(._label-outside) .t-collapsed:-webkit-autofill+.content .placeholder{font-size:.69rem;transform:translateY(-.5rem)}.t-collapsed :host-context(tui-primitive-textfield._hidden),:host._hidden input.t-collapsed{opacity:0;text-indent:-10em;-webkit-user-select:none}.t-collapsed_enable-mask:before{content:attr(data-before)}.t-collapsed_enable-mask .t-collapsed-wrapper{left:1.375rem}.t-collapsed-wrapper{position:absolute;top:0;display:block;width:100%;height:100%;overflow:hidden}.t-value{transition-property:transform;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;position:absolute;bottom:0;right:100%;display:block;transform:translate3d(100%,0,0)}.t-value_collapsed{transform:translate3d(4ch,0,0)}.t-input{font:var(--tui-font-text-s);color:var(--tui-text-01);padding:0 1rem;margin:0;border-radius:inherit;background:0 0;font-size:inherit;line-height:inherit;font-weight:inherit;color:inherit;caret-color:currentColor;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;word-break:keep-all;-webkit-text-fill-color:currentColor;position:absolute;top:0;left:0;width:100%;height:100%;padding:0 var(--tui-padding-m);border:0;border-width:0 var(--border-end,0) 0 var(--border-start,0);border-inline-start-width:var(--border-start,0);border-inline-end-width:var(--border-end,0);text-indent:var(--text-indent);text-align:inherit;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-transform:inherit;resize:none;transition-property:background;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out}.t-input:-webkit-autofill,.t-input:-webkit-autofill:focus,.t-input:-webkit-autofill:hover{border-radius:inherit;color:inherit!important;background-color:transparent!important;-webkit-text-fill-color:var(--tui-text-01)!important;border-color:var(--tui-autofill);-webkit-box-shadow:0 0 0 100rem var(--tui-autofill) inset!important}.t-input :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill,.t-input :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill:focus,.t-input :host-context(tui-primitive-textfield[data-mode=onDark]):-webkit-autofill:hover,.t-input :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill,.t-input :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill:focus,.t-input :host-context(tui-text-area[data-mode=onDark]):-webkit-autofill:hover,:host[data-mode=onDark] .t-input:-webkit-autofill,:host[data-mode=onDark] .t-input:-webkit-autofill:focus,:host[data-mode=onDark] .t-input:-webkit-autofill:hover{border-radius:inherit;color:inherit!important;background-color:transparent!important;-webkit-text-fill-color:var(--tui-text-01-night)!important;border-color:var(--tui-autofill-night);-webkit-box-shadow:0 0 0 100rem var(--tui-autofill-night) inset!important}.t-input :host-context(tui-primitive-textfield[data-size='s']):not(tui-primitive-textfield),.t-input :host-context(tui-text-area[data-size='s']):not(tui-text-area),:host[data-size='s'] .t-input{padding:0 var(--tui-padding-s)}.t-input :host-context(tui-primitive-textfield[data-size='l']):not(tui-primitive-textfield),.t-input :host-context(tui-text-area[data-size='l']):not(tui-text-area),:host[data-size='l'] .t-input{padding:0 var(--tui-padding-l)}.t-input :host-context(tui-primitive-textfield._disabled),.t-input :host-context(tui-text-area._disabled),:host._disabled .t-input{pointer-events:none}.t-input :host-context(tui-primitive-textfield[data-size='l']:not(._label-outside)):not(tui-primitive-textfield),:host[data-size='l']:not(._label-outside) .t-input{padding-top:1.25rem}.t-input :host-context(tui-primitive-textfield[data-size='l']:not(._label-outside)):not(tui-primitive-textfield):-webkit-autofill+.content .placeholder,:host[data-size='l']:not(._label-outside) .t-input:-webkit-autofill+.content .placeholder{font-size:.8156rem;transform:translateY(-.625rem)}.t-input :host-context(tui-primitive-textfield[data-size='m']:not(._label-outside)):not(tui-primitive-textfield),:host[data-size='m']:not(._label-outside) .t-input{padding-top:1.125rem}.t-input :host-context(tui-primitive-textfield[data-size='m']:not(._label-outside)):not(tui-primitive-textfield):-webkit-autofill+.content .placeholder,:host[data-size='m']:not(._label-outside) .t-input:-webkit-autofill+.content .placeholder{font-size:.69rem;transform:translateY(-.5rem)}.t-input :host-context(tui-primitive-textfield._hidden),:host._hidden input.t-input{opacity:0;text-indent:-10em;-webkit-user-select:none}.t-input::-ms-input-placeholder{color:var(--tui-text-03)}.t-input::placeholder{color:var(--tui-text-03)}:host[data-mode=onDark] .t-input::-ms-input-placeholder{color:var(--tui-text-03-night)}:host[data-mode=onDark] .t-input::placeholder{color:var(--tui-text-03-night)}.t-input_card:not(.t-input_hidden),.t-input_card:not(.t-input_hidden):-webkit-autofill,.t-input_card:not(.t-input_hidden)::placeholder{caret-color:var(--tui-base-09);color:transparent!important;-webkit-text-fill-color:transparent!important}.t-input_card::-webkit-credit-card-auto-fill-button{pointer-events:none;background-color:transparent!important;-webkit-mask-image:none!important}.t-input_inert{pointer-events:none}.t-icons{position:absolute;right:.75rem;display:flex;align-items:center;height:100%}.t-icon-outlet{display:inherit}.t-icon{transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;display:flex;width:1.5rem;height:1.5rem;align-items:center;justify-content:center;color:var(--tui-text-03);position:relative;box-sizing:border-box;cursor:pointer;transition-property:color,transform}.t-icon:hover{color:var(--tui-text-02)}:host._disabled .t-icon,:host._readonly .t-icon{pointer-events:none}:host[data-mode=onDark] .t-icon{color:var(--tui-text-03-night)}:host[data-mode=onDark] .t-icon:hover{color:var(--tui-text-01-night)}.t-icon_rotated{transform:rotate(180deg)}.t-placeholder{transition-property:transform,font-size,color,letter-spacing;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;font:var(--tui-font-text-s);color:var(--tui-text-01);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:var(--tui-text-02);pointer-events:none;will-change:transform;transform:translateY(0);margin:1.125rem 1rem;line-height:1.25rem}.t-placeholder_raised{transform:translateY(-.625rem)}:host[data-size='m'] .t-placeholder_raised{font:var(--tui-font-text-xs);transform:translateY(-.5rem);letter-spacing:.025rem}:host._invalid:not(._focused) .t-placeholder_raised,:host._invalid:not(._focused):hover .t-placeholder_raised{color:var(--tui-error-fill)}:host[data-mode=onDark]._invalid:not(._focused) .t-placeholder_raised,:host[data-mode=onDark]._invalid:not(._focused):hover .t-placeholder_raised{color:var(--tui-error-fill-night)}:host._focused .t-placeholder,:host[data-size='l']._focused._label-outside .t-placeholder,:host[data-size='m']._focused._label-outside .t-placeholder{color:var(--tui-text-03)}:host[data-size='l'] .t-placeholder{font-size:.9375rem}:host[data-size='l'] .t-placeholder_raised{font-size:.8156rem}:host[data-size='l']._focused:not(._label-outside) .t-placeholder,:host[data-size='m']._focused:not(._label-outside) .t-placeholder{color:var(--tui-text-01)}:host[data-mode=onDark] .t-placeholder{color:var(--tui-text-02-night)}:host[data-size='l'][data-mode=onDark]._focused:not(._label-outside) .t-placeholder,:host[data-size='m'][data-mode=onDark]._focused:not(._label-outside) .t-placeholder{color:var(--tui-text-01-night)}:host[data-mode=onDark]._focused .t-placeholder,:host[data-size='l'][data-mode=onDark]._focused._label-outside .t-placeholder,:host[data-size='m'][data-mode=onDark]._focused._label-outside .t-placeholder{color:var(--tui-text-02-night)}@supports (-webkit-hyphens:none){.t-placeholder{will-change:unset;transition-property:transform,color,letter-spacing}}"]
498
- }),
499
- __param(0, Optional()),
500
- __param(0, Self()),
501
- __param(0, Inject(NgControl)),
502
- __param(1, Inject(ChangeDetectorRef)),
503
- __param(2, Inject(ElementRef)),
504
- __param(3, Inject(TUI_MODE)),
505
- __param(4, Inject(TUI_INPUT_CARD_GROUPED_TEXTS)),
506
- __param(5, Inject(TUI_TEXTFIELD_APPEARANCE))
507
- ], TuiInputCardGroupedComponent);
508
- return TuiInputCardGroupedComponent;
509
- }(AbstractTuiNullableControl));
510
- export { TuiInputCardGroupedComponent };
511
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2FyZC1ncm91cGVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQtZ3JvdXBlZC8iLCJzb3VyY2VzIjpbImlucHV0LWNhcmQtZ3JvdXBlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFdBQVcsRUFDWCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxhQUFhLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUkxRixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGdDQUFnQyxHQUNuQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFDSCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBR3RCLGNBQWMsRUFFZCxPQUFPLEVBQ1AsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUV4QixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBR3ZCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQ0gsNEJBQTRCLEdBRS9CLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEMsSUFBTSxJ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LENBQUM7aUJBQzlEO2FBQ0o7WUFDRCxJQUFJLEVBQUU7Z0JBQ0Ysb0JBQW9CLEVBQUUsT0FBTztnQkFDN0IsV0FBVyxFQUFFLEdBQUc7YUFDbkI7O1NBQ0osQ0FBQztRQWtGTyxXQUFBLFFBQVEsRUFBRSxDQUFBO1FBQ1YsV0FBQSxJQUFJLEVBQUUsQ0FBQTtRQUNOLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRWpCLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDekIsV0FBQSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbEIsV0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEIsV0FBQSxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUVwQyxXQUFBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO09BMUY1Qiw0QkFBNEIsQ0ErWHhDO0lBQUQsbUNBQUM7Q0FBQSxBQS9YRCxDQUNZLDBCQUEwQixHQThYckM7U0EvWFksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VFVJX0NBUkRfTUFTSywgdHVpRGVmYXVsdENhcmRWYWxpZGF0b3J9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlQYXltZW50U3lzdGVtfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UvZW51bXMnO1xuaW1wb3J0IHtUdWlDYXJkfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQge1R1aUNvZGVDVkNMZW5ndGh9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS90eXBlcyc7XG5pbXBvcnQge1xuICAgIGdldFBheW1lbnRTeXN0ZW0sXG4gICAgdHVpQ3JlYXRlQXV0b0NvcnJlY3RlZEV4cGlyZVBpcGUsXG59IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS91dGlscyc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0VHVpTnVsbGFibGVDb250cm9sLFxuICAgIGlzTmF0aXZlRm9jdXNlZCxcbiAgICBpc05hdGl2ZUZvY3VzZWRJbixcbiAgICBUVUlfRk9DVVNBQkxFX0lURU1fQUNDRVNTT1IsXG4gICAgdHVpQXNzZXJ0SXNIVE1MRWxlbWVudCxcbiAgICBUdWlCb29sZWFuSGFuZGxlcixcbiAgICBUdWlDcmVkaXRDYXJkQXV0b2ZpbGxOYW1lLFxuICAgIHR1aURlZmF1bHRQcm9wLFxuICAgIFR1aUZvY3VzYWJsZUVsZW1lbnRBY2Nlc3NvcixcbiAgICB0dWlQdXJlLFxuICAgIHR1aVJlcXVpcmVkU2V0dGVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7XG4gICAgTU9ERV9QUk9WSURFUixcbiAgICBUVUlfREFUQV9MSVNUX0hPU1QsXG4gICAgVFVJX0RJR0lUX1JFR0VYUCxcbiAgICBUVUlfTU9ERSxcbiAgICBUVUlfTk9OX0RJR0lUX1JFR0VYUCxcbiAgICBUVUlfVEVYVEZJRUxEX0FQUEVBUkFOQ0UsXG4gICAgVHVpQnJpZ2h0bmVzcyxcbiAgICBUdWlEYXRhTGlzdENvbXBvbmVudCxcbiAgICBUdWlEYXRhTGlzdERpcmVjdGl2ZSxcbiAgICBUdWlEYXRhTGlzdEhvc3QsXG4gICAgVHVpVGV4dE1hc2tPcHRpb25zLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge1RleHRNYXNrQ29uZmlnfSBmcm9tICdhbmd1bGFyMi10ZXh0LW1hc2snO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBUVUlfSU5QVVRfQ0FSRF9HUk9VUEVEX1RFWFRTLFxuICAgIFR1aUNhcmRHcm91cGVkVGV4dHMsXG59IGZyb20gJy4vaW5wdXQtY2FyZC1ncm91cGVkLnByb3ZpZGVycyc7XG5cbmNvbnN0IFNUVUI6IFR1aUNhcmQgPSB7XG4gICAgY2FyZDogJycsXG4gICAgZXhwaXJlOiAnJyxcbiAgICBjdmM6ICcnLFxufTtcbmNvbnN0IElDT05TID0ge1xuICAgIFtUdWlQYXltZW50U3lzdGVtLk1pcl06ICd0dWlJY29uTWlyJyxcbiAgICBbVHVpUGF5bWVudFN5c3RlbS5WaXNhXTogJ3R1aUljb25WaXNhJyxcbiAgICBbVHVpUGF5bWVudFN5c3RlbS5FbGVjdHJvbl06ICd0dWlJY29uRWxlY3Ryb24nLFxuICAgIFtUdWlQYXltZW50U3lzdGVtLk1hc3RlcmNhcmRdOiAndHVpSWNvbk1hc3RlcmNhcmQnLFxuICAgIFtUdWlQYXltZW50U3lzdGVtLk1hZXN0cm9dOiAndHVpSWNvbk1hZXN0cm8nLFxufTtcblxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLWlucHV0LWNhcmQtZ3JvdXBlZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWNhcmQtZ3JvdXBlZC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnB1dC1jYXJkLWdyb3VwZWQuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBNT0RFX1BST1ZJREVSLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUVUlfRk9DVVNBQkxFX0lURU1fQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUdWlJbnB1dENhcmRHcm91cGVkQ29tcG9uZW50KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVFVJX0RBVEFfTElTVF9IT1NULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHVpSW5wdXRDYXJkR3JvdXBlZENvbXBvbmVudCksXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoJC5kYXRhLW1vZGUuYXR0ciknOiAnbW9kZSQnLFxuICAgICAgICAnZGF0YS1zaXplJzogJ2wnLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0Q2FyZEdyb3VwZWRDb21wb25lbnRcbiAgICBleHRlbmRzIEFic3RyYWN0VHVpTnVsbGFibGVDb250cm9sPFR1aUNhcmQ+XG4gICAgaW1wbGVtZW50cyBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3IsIFR1aURhdGFMaXN0SG9zdDxQYXJ0aWFsPFR1aUNhcmQ+Plxue1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0Q2FyZCcpXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dENhcmQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRFeHBpcmUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRFeHBpcmU/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRDVkMnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRDVkM/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgcHJpdmF0ZSBleHBpcmVJbmVydCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGF1dG9jb21wbGV0ZUVuYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBjYXJkU3JjOiBQb2x5bW9ycGhldXNDb250ZW50IHwgbnVsbCA9IG51bGw7IC8vIFRPRE86IDMuMCB3aWxsIGJlIGRlbGV0ZWQgYG51bGxgIGluIHYzLjBcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBleGFtcGxlVGV4dCA9ICcwMDAwIDAwMDAgMDAwMCAwMDAwJztcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBjYXJkVmFsaWRhdG9yOiBUdWlCb29sZWFuSGFuZGxlcjxzdHJpbmc+ID0gdHVpRGVmYXVsdENhcmRWYWxpZGF0b3I7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlSZXF1aXJlZFNldHRlcigpXG4gICAgc2V0IGNvZGVMZW5ndGgobGVuZ3RoOiBUdWlDb2RlQ1ZDTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZXhhbXBsZVRleHRDVkMgPSAnMCcucmVwZWF0KGxlbmd0aCk7XG4gICAgICAgIHRoaXMubWFza0NWQyA9IHtcbiAgICAgICAgICAgIG1hc2s6IG5ldyBBcnJheShsZW5ndGgpLmZpbGwoVFVJX0RJR0lUX1JFR0VYUCksXG4gICAgICAgICAgICBndWlkZTogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYXV0b2ZpbGxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGJpbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoVHVpRGF0YUxpc3REaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pXG4gICAgcmVhZG9ubHkgZHJvcGRvd246IFBvbHltb3JwaGV1c0NvbnRlbnQgPSAnJztcblxuICAgIEBDb250ZW50Q2hpbGQoVHVpRGF0YUxpc3RDb21wb25lbnQpXG4gICAgcmVhZG9ubHkgZGF0YWxpc3Q/OiBUdWlEYXRhTGlzdENvbXBvbmVudDxUdWlDYXJkPjtcblxuICAgIGV4YW1wbGVUZXh0Q1ZDID0gJzAwMCc7XG5cbiAgICBtYXNrQ1ZDOiBUZXh0TWFza0NvbmZpZyA9IHtcbiAgICAgICAgbWFzazogbmV3IEFycmF5KDMpLmZpbGwoVFVJX0RJR0lUX1JFR0VYUCksXG4gICAgICAgIGd1aWRlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcmVhZG9ubHkgbWFza0NhcmQ6IFRleHRNYXNrQ29uZmlnID0ge1xuICAgICAgICBtYXNrOiBUVUlfQ0FSRF9NQVNLLFxuICAgICAgICBndWlkZTogZmFsc2UsXG4gICAgICAgIHBpcGU6IGNvbmZvcm1lZFZhbHVlID0+IGNvbmZvcm1lZFZhbHVlLnRyaW0oKSxcbiAgICB9O1xuXG4gICAgcmVhZG9ubHkgbWFza0V4cGlyZTogVGV4dE1hc2tDb25maWcgPSB7XG4gICAgICAgIG1hc2s6IFtcbiAgICAgICAgICAgIFRVSV9ESUdJVF9SRUdFWFAsXG4gICAgICAgICAgICBUVUlfRElHSVRfUkVHRVhQLFxuICAgICAgICAgICAgJy8nLFxuICAgICAgICAgICAgVFVJX0RJR0lUX1JFR0VYUCxcbiAgICAgICAgICAgIFRVSV9ESUdJVF9SRUdFWFAsXG4gICAgICAgIF0sXG4gICAgICAgIHBpcGU6IHR1aUNyZWF0ZUF1dG9Db3JyZWN0ZWRFeHBpcmVQaXBlKCksXG4gICAgICAgIGd1aWRlOiBmYWxzZSxcbiAgICB9IGFzIFR1aVRleHRNYXNrT3B0aW9ucyBhcyB1bmtub3duIGFzIFRleHRNYXNrQ29uZmlnO1xuXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBTZWxmKClcbiAgICAgICAgQEluamVjdChOZ0NvbnRyb2wpXG4gICAgICAgIGNvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KFRVSV9NT0RFKSByZWFkb25seSBtb2RlJDogT2JzZXJ2YWJsZTxUdWlCcmlnaHRuZXNzIHwgbnVsbD4sXG4gICAgICAgIEBJbmplY3QoVFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9URVhUUylcbiAgICAgICAgcmVhZG9ubHkgY2FyZEdyb3VwZWRUZXh0cyQ6IE9ic2VydmFibGU8VHVpQ2FyZEdyb3VwZWRUZXh0cz4sXG4gICAgICAgIEBJbmplY3QoVFVJX1RFWFRGSUVMRF9BUFBFQVJBTkNFKVxuICAgICAgICByZWFkb25seSBhcHBlYXJhbmNlOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNvbnRyb2wsIGNoYW5nZURldGVjdG9yUmVmKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRm9jdXNhYmxlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Q2FyZCA/IHRoaXMuaW5wdXRDYXJkLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBmb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuIHx8IGlzTmF0aXZlRm9jdXNlZEluKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXQgY2FyZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZT8uY2FyZCA/PyAnJztcbiAgICB9XG5cbiAgICBnZXQgZXhwaXJlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlPy5leHBpcmUgPz8gJyc7XG4gICAgfVxuXG4gICAgZ2V0IGN2YygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZT8uY3ZjID8/ICcnO1xuICAgIH1cblxuICAgIGdldCBoYXNDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnZhbHVlPy5jYXJkPy50cmltKCkgJiYgIXRoaXMucmVhZE9ubHkgJiYgIXRoaXMuY29tcHV0ZWREaXNhYmxlZDtcbiAgICB9XG5cbiAgICBnZXQgaGFzRHJvcGRvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZHJvcGRvd247XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRJY29uKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCB7cGF5bWVudFN5c3RlbX0gPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBwYXltZW50U3lzdGVtICYmIElDT05TW3BheW1lbnRTeXN0ZW1dO1xuICAgIH1cblxuICAgIGdldCBpY29uKCk6IFBvbHltb3JwaGV1c0NvbnRlbnQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FyZFNyYyA/PyB0aGlzLmRlZmF1bHRJY29uO1xuICAgIH1cblxuICAgIGdldCBiaW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmNhcmQubGVuZ3RoIDwgNlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHRoaXMudmFsdWUuY2FyZC5zbGljZSgwLCA2KTtcbiAgICB9XG5cbiAgICBnZXQgcGxhY2Vob2xkZXJSYWlzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5jb21wdXRlZEZvY3VzZWQgJiYgIXRoaXMucmVhZE9ubHkpIHx8IHRoaXMuaGFzQ2FyZE51bWJlcjtcbiAgICB9XG5cbiAgICBnZXQgaGFzQ2FyZE51bWJlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZT8uY2FyZD8udHJpbSgpO1xuICAgIH1cblxuICAgIGdldCBpZENhcmQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaWR9X2NhcmRgO1xuICAgIH1cblxuICAgIGdldCBpZEV4cGlyZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZH1fZXhwaXJlYDtcbiAgICB9XG5cbiAgICBnZXQgaWRDVkMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaWR9X2N2Y2A7XG4gICAgfVxuXG4gICAgZ2V0IGlzQ2FyZENvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2FibGUodGhpcy5jYXJkKSAmJiAhdGhpcy5jYXJkRm9jdXNlZDtcbiAgICB9XG5cbiAgICBnZXQgYXV0b2NvbXBsZXRlQ2FyZCgpOiBUdWlDcmVkaXRDYXJkQXV0b2ZpbGxOYW1lIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZFxuICAgICAgICAgICAgPyBUdWlDcmVkaXRDYXJkQXV0b2ZpbGxOYW1lLkNjTnVtYmVyXG4gICAgICAgICAgICA6IFR1aUNyZWRpdENhcmRBdXRvZmlsbE5hbWUuT2ZmO1xuICAgIH1cblxuICAgIGdldCBhdXRvY29tcGxldGVFeHBpcmUoKTogVHVpQ3JlZGl0Q2FyZEF1dG9maWxsTmFtZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWRcbiAgICAgICAgICAgID8gVHVpQ3JlZGl0Q2FyZEF1dG9maWxsTmFtZS5DY0V4cFxuICAgICAgICAgICAgOiBUdWlDcmVkaXRDYXJkQXV0b2ZpbGxOYW1lLk9mZjtcbiAgICB9XG5cbiAgICBnZXQgYXV0b2NvbXBsZXRlQ1ZDKCk6IFR1aUNyZWRpdENhcmRBdXRvZmlsbE5hbWUge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRvY29tcGxldGVFbmFibGVkXG4gICAgICAgICAgICA/IFR1aUNyZWRpdENhcmRBdXRvZmlsbE5hbWUuQ2NDc2NcbiAgICAgICAgICAgIDogVHVpQ3JlZGl0Q2FyZEF1dG9maWxsTmFtZS5PZmY7XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIGV4cGlyYXRpb24gZGF0ZSBhdXRvZmlsbCB3b3JrYXJvdW5kXG4gICAgZ2V0IG5hbWUoKTogJ2NjZXhwaXJ5eWVhcicgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA/ICdjY2V4cGlyeXllYXInIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY2FyZFByZWZpbGxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jYXJkLm1hdGNoKFRVSV9OT05fRElHSVRfUkVHRVhQKTtcbiAgICB9XG5cbiAgICBnZXQgY3ZjUHJlZmlsbGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmN2Yy5tYXRjaChUVUlfTk9OX0RJR0lUX1JFR0VYUCk7XG4gICAgfVxuXG4gICAgZ2V0IGNhcmRGb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzYWJsZSAmJiAhdGhpcy5jYXJkUHJlZmlsbGVkO1xuICAgIH1cblxuICAgIGdldCBleHBpcmVGb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNhYmxlKHRoaXMuY2FyZCkgJiYgIXRoaXMuZXhwaXJlSW5lcnQ7XG4gICAgfVxuXG4gICAgZ2V0IGN2Y0ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2FibGUodGhpcy5jYXJkKTtcbiAgICB9XG5cbiAgICBnZXQgbWFza2VkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcmRQcmVmaWxsZWQgPyBgKiR7dGhpcy5jYXJkLnNsaWNlKC00KX1gIDogJyonO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjJylcbiAgICBvbkVzYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0Rvd24ucHJldmVudCcsIFsnJGV2ZW50LnRhcmdldCcsICcxJ10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd1VwLnByZXZlbnQnLCBbJyRldmVudC50YXJnZXQnLCAnLTEnXSlcbiAgICBvbkFycm93KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuID0gdGhpcy5oYXNEcm9wZG93bjtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZGF0YWxpc3Q/Lm9uS2V5RG93bkFycm93KGVsZW1lbnQsIHN0ZXApO1xuICAgIH1cblxuICAgIGhhbmRsZU9wdGlvbihvcHRpb246IFBhcnRpYWw8VHVpQ2FyZD4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2NhcmQgPSAnJywgZXhwaXJlID0gJycsIGN2YyA9ICcnfSA9IG9wdGlvbjtcbiAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzO1xuICAgICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgICAgICghZXhwaXJlICYmIHRoaXMuaW5wdXRFeHBpcmU/Lm5hdGl2ZUVsZW1lbnQpIHx8IHRoaXMuaW5wdXRDVkM/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh7Y2FyZCwgZXhwaXJlLCBjdmN9KTtcbiAgICAgICAgdGhpcy51cGRhdGVCaW4oYmluKTtcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwaXJlSW5lcnQgPSAhIWV4cGlyZTtcblxuICAgICAgICBlbGVtZW50Py5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uQ2FyZENoYW5nZShjYXJkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBiaW59ID0gdGhpcztcbiAgICAgICAgY29uc3QgcGFyc2VkID0gY2FyZC5zcGxpdCgnICcpLmpvaW4oJycpO1xuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jYXJkID09PSBwYXJzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkocGFyc2VkLCAnY2FyZCcpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJpbihiaW4pO1xuXG4gICAgICAgIGlmICh0aGlzLmNhcmRWYWxpZGF0b3IodGhpcy5jYXJkKSAmJiAhdGhpcy5leHBpcmUgJiYgdGhpcy5pbnB1dEV4cGlyZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0V4cGlyZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FeHBpcmVDaGFuZ2UoZXhwaXJlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gQGJhZCBUT0RPOiBXb3JrYXJvdW5kIHVudGlsIG1hc2sgcGlwZSBjYW4gcmVwbGFjZSBjaGFycyBhbmQga2VlcCBjYXJldCBwb3NpdGlvblxuICAgICAgICAvLyBAYmFkIFRPRE86IFRoaW5rIGFib3V0IGEgc29sdXRpb24gd2l0aG91dCBtYXNrIGF0IGFsbFxuICAgICAgICBpZiAoIXRoaXMuaW5wdXRFeHBpcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZUludChleHBpcmUuc2xpY2UoMCwgMiksIDEwKSA+IDEyKSB7XG4gICAgICAgICAgICBleHBpcmUgPSBgMTIke2V4cGlyZS5zbGljZSgyKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4cGlyZS5zbGljZSgwLCAyKSA9PT0gJzAwJykge1xuICAgICAgICAgICAgZXhwaXJlID0gYDAxJHtleHBpcmUuc2xpY2UoMil9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRFeHBpcmUubmF0aXZlRWxlbWVudC52YWx1ZSA9IGV4cGlyZTtcbiAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eShleHBpcmUsICdleHBpcmUnKTtcblxuICAgICAgICBpZiAoZXhwaXJlLmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NWQygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DVkNDaGFuZ2UoY3ZjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eShjdmMsICdjdmMnKTtcbiAgICB9XG5cbiAgICBvbkFjdGl2ZVpvbmVDaGFuZ2UoYWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9jdXNlZChhY3RpdmUpO1xuICAgICAgICB0aGlzLm9wZW4gPSBhY3RpdmUgJiYgdGhpcy5vcGVuO1xuICAgIH1cblxuICAgIG9uSG92ZXJlZChob3ZlcmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlSG92ZXJlZChob3ZlcmVkKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0dWlBc3NlcnRJc0hUTUxFbGVtZW50KGV2ZW50LnRhcmdldCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9XG5cbiAgICBvblNjcm9sbCh7Y3VycmVudFRhcmdldH06IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHR1aUFzc2VydElzSFRNTEVsZW1lbnQoY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0ID0gMDtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5mb2N1c0NhcmQoKTtcbiAgICB9XG5cbiAgICB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogVHVpQ2FyZCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzO1xuXG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJpbihiaW4pO1xuICAgICAgICB0aGlzLmV4cGlyZUluZXJ0ID0gISF0aGlzLmV4cGlyZSAmJiB0aGlzLmNhcmRQcmVmaWxsZWQ7XG4gICAgfVxuXG4gICAgLyoqIFB1YmxpYyBBUEkgZm9yIG1hbnVhbCBmb2N1cyBtYW5hZ2VtZW50ICovXG4gICAgZm9jdXNDYXJkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Q2FyZD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvY3VzRXhwaXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0RXhwaXJlPy5uYXRpdmVFbGVtZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgZm9jdXNDVkMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRDVkM/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjYXJkRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5pbnB1dENhcmQgJiYgaXNOYXRpdmVGb2N1c2VkKHRoaXMuaW5wdXRDYXJkLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHBheW1lbnRTeXN0ZW0oKTogVHVpUGF5bWVudFN5c3RlbSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiBnZXRQYXltZW50U3lzdGVtKHRoaXMudmFsdWUuY2FyZCk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGlzRm9jdXNhYmxlKGNhcmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2FibGUgJiYgKHRoaXMuY2FyZFZhbGlkYXRvcihjYXJkKSB8fCB0aGlzLmNhcmRQcmVmaWxsZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQmluKG9sZEJpbjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7YmlufSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGJpbiAhPT0gb2xkQmluICYmICF0aGlzLmNhcmRQcmVmaWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmluQ2hhbmdlLmVtaXQoYmluKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJvcGVydHkocHJvcFZhbHVlOiBzdHJpbmcsIHByb3BOYW1lOiAnY2FyZCcgfCAnZXhwaXJlJyB8ICdjdmMnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtjYXJkLCBleHBpcmUsIGN2Y30gPSB0aGlzLnZhbHVlIHx8IFNUVUI7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlOiBUdWlDYXJkID0ge1xuICAgICAgICAgICAgY2FyZCxcbiAgICAgICAgICAgIGV4cGlyZSxcbiAgICAgICAgICAgIGN2YyxcbiAgICAgICAgfTtcblxuICAgICAgICBuZXdWYWx1ZVtwcm9wTmFtZV0gPSBwcm9wVmFsdWU7XG5cbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5leHBpcmUgJiYgIW5ld1ZhbHVlLmN2YyAmJiAhbmV3VmFsdWUuY2FyZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgICAgICh0aGlzLmNhcmRGb2N1c2FibGUgJiYgdGhpcy5pbnB1dENhcmQ/Lm5hdGl2ZUVsZW1lbnQpIHx8XG4gICAgICAgICAgICAodGhpcy5leHBpcmVGb2N1c2FibGUgJiYgdGhpcy5pbnB1dEV4cGlyZT8ubmF0aXZlRWxlbWVudCkgfHxcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDVkM/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICB9XG59XG4iXX0=