@snabcentr/client-ui 4.14.7 → 4.14.9

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 (556) hide show
  1. package/fesm2022/snabcentr-client-ui.mjs +5004 -5457
  2. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  3. package/icons/svg-pack/application.svg +1 -1
  4. package/icons/svg-pack/back.svg +1 -1
  5. package/icons/svg-pack/bag.svg +1 -1
  6. package/icons/svg-pack/banknote-arrow-in-top.svg +1 -1
  7. package/icons/svg-pack/catalog/aluminum-systems.svg +1 -1
  8. package/icons/svg-pack/catalog/arm-profile.svg +1 -1
  9. package/icons/svg-pack/catalog/batten.svg +1 -1
  10. package/icons/svg-pack/catalog/brusbox.svg +1 -1
  11. package/icons/svg-pack/catalog/canopy.svg +1 -1
  12. package/icons/svg-pack/catalog/configurator.svg +1 -1
  13. package/icons/svg-pack/catalog/covering-material.svg +1 -1
  14. package/icons/svg-pack/catalog/door-accessories.svg +1 -1
  15. package/icons/svg-pack/catalog/drainage-system.svg +1 -1
  16. package/icons/svg-pack/catalog/fastener.svg +1 -1
  17. package/icons/svg-pack/catalog/finishing-materials.svg +1 -1
  18. package/icons/svg-pack/catalog/fixing-impost.svg +1 -1
  19. package/icons/svg-pack/catalog/flask.svg +1 -1
  20. package/icons/svg-pack/catalog/foam-balloon.svg +1 -1
  21. package/icons/svg-pack/catalog/foam.svg +1 -1
  22. package/icons/svg-pack/catalog/glue.svg +1 -1
  23. package/icons/svg-pack/catalog/handle.svg +1 -1
  24. package/icons/svg-pack/catalog/instrument.svg +1 -1
  25. package/icons/svg-pack/catalog/kve-profile.svg +1 -1
  26. package/icons/svg-pack/catalog/lubricants.svg +1 -1
  27. package/icons/svg-pack/catalog/mosquito-net.svg +1 -1
  28. package/icons/svg-pack/catalog/mounting-accessories.svg +1 -1
  29. package/icons/svg-pack/catalog/net-order.svg +1 -1
  30. package/icons/svg-pack/catalog/panel-1.svg +1 -1
  31. package/icons/svg-pack/catalog/panel.svg +1 -1
  32. package/icons/svg-pack/catalog/polyethylene-film.svg +1 -1
  33. package/icons/svg-pack/catalog/profile-plastic.svg +1 -1
  34. package/icons/svg-pack/catalog/promo-materials.svg +1 -1
  35. package/icons/svg-pack/catalog/psul.svg +1 -1
  36. package/icons/svg-pack/catalog/rehau-profile.svg +1 -1
  37. package/icons/svg-pack/catalog/sandwich-plastic.svg +1 -1
  38. package/icons/svg-pack/catalog/sealer.svg +1 -1
  39. package/icons/svg-pack/catalog/siding-2.svg +1 -1
  40. package/icons/svg-pack/catalog/siding.svg +1 -1
  41. package/icons/svg-pack/catalog/start-finish-profile.svg +1 -1
  42. package/icons/svg-pack/catalog/steam-waterproofing.svg +1 -1
  43. package/icons/svg-pack/catalog/stiz.svg +1 -1
  44. package/icons/svg-pack/catalog/thermometer.svg +1 -1
  45. package/icons/svg-pack/catalog/windowsill.svg +1 -1
  46. package/icons/svg-pack/chart-column-plus.svg +1 -1
  47. package/icons/svg-pack/circle-arrow-in-right.svg +1 -1
  48. package/icons/svg-pack/contacts.svg +1 -1
  49. package/icons/svg-pack/deadline.svg +1 -1
  50. package/icons/svg-pack/file-p.svg +1 -1
  51. package/icons/svg-pack/file-search.svg +1 -1
  52. package/icons/svg-pack/file-w.svg +1 -1
  53. package/icons/svg-pack/file-x.svg +1 -1
  54. package/icons/svg-pack/grid-height-arrow.svg +1 -1
  55. package/icons/svg-pack/grid-width-arrow.svg +1 -1
  56. package/icons/svg-pack/layout-list-tree.svg +1 -1
  57. package/icons/svg-pack/list.svg +1 -1
  58. package/icons/svg-pack/puzzle.svg +1 -1
  59. package/icons/svg-pack/reclamation.svg +1 -1
  60. package/icons/svg-pack/retail-store.svg +1 -1
  61. package/icons/svg-pack/send.svg +1 -1
  62. package/package.json +35 -37
  63. package/release_notes.tmp +16 -2
  64. package/styles/taiga/variables.less +35 -17
  65. package/styles/tailwind/tailwind.scss +56 -10
  66. package/types/snabcentr-client-ui.d.ts +6787 -0
  67. package/accordion/index.d.ts +0 -3
  68. package/accordion/sc-accordion-content.directive.d.ts +0 -9
  69. package/accordion/sc-accordion.component.d.ts +0 -56
  70. package/accordion/sc-accordion.module.d.ts +0 -15
  71. package/auth/enums/auth-method.d.ts +0 -13
  72. package/auth/index.d.ts +0 -8
  73. package/auth/interfaces/index.d.ts +0 -2
  74. package/auth/interfaces/sc-bank-account-form-group.d.ts +0 -11
  75. package/auth/interfaces/sc-contact-form-group.d.ts +0 -10
  76. package/auth/sc-auth.module.d.ts +0 -27
  77. package/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.d.ts +0 -55
  78. package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +0 -45
  79. package/auth/sc-sign-in-form/sc-sign-in-form.component.d.ts +0 -53
  80. package/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.d.ts +0 -113
  81. package/auth/sign-up-form/sc-sign-up-form.component.d.ts +0 -166
  82. package/banner/index.d.ts +0 -2
  83. package/banner/sc-banner.component.d.ts +0 -108
  84. package/banner/sc-banner.module.d.ts +0 -17
  85. package/brands-list/index.d.ts +0 -3
  86. package/brands-list/sc-brand-list-item.d.ts +0 -25
  87. package/brands-list/sc-brands-list.component.d.ts +0 -13
  88. package/brands-list/sc-brands-list.module.d.ts +0 -12
  89. package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +0 -106
  90. package/cart/add-or-editing-cart-item-dialog/index.d.ts +0 -2
  91. package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +0 -49
  92. package/cart/index.d.ts +0 -2
  93. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +0 -62
  94. package/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.d.ts +0 -47
  95. package/catalog/catalog-filters/index.d.ts +0 -4
  96. package/catalog/catalog-filters/sc-catalog-filters.component.d.ts +0 -199
  97. package/catalog/catalog-filters/tokens/sc-catalog-products-filters.d.ts +0 -7
  98. package/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.d.ts +0 -5
  99. package/catalog/category-card/sc-category-card.component.d.ts +0 -76
  100. package/catalog/cost-with-discount/cost-with-discount.component.d.ts +0 -23
  101. package/catalog/download-price-list/sc-download-price-list.component.d.ts +0 -38
  102. package/catalog/hover-image-carousel/sc-hover-image-carousel.component.d.ts +0 -48
  103. package/catalog/index.d.ts +0 -15
  104. package/catalog/input-quantity/sc-input-quantity.component.d.ts +0 -82
  105. package/catalog/notify-when-in-stock-dialog/index.d.ts +0 -2
  106. package/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.d.ts +0 -90
  107. package/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.d.ts +0 -22
  108. package/catalog/price-card/sc-price-card.component.d.ts +0 -18
  109. package/catalog/price-card-inline/sc-price-card-inline.component.d.ts +0 -10
  110. package/catalog/price-history/sc-price-history.component.d.ts +0 -92
  111. package/catalog/price-list-pagination/sc-price-list-pagination.component.d.ts +0 -40
  112. package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +0 -47
  113. package/catalog/sc-catalog.module.d.ts +0 -29
  114. package/catalog/sc-favorite-button/sc-favorite-button.component.d.ts +0 -25
  115. package/catalog/seo-tags/sc-seo-tags.component.d.ts +0 -20
  116. package/configurators/index.d.ts +0 -3
  117. package/configurators/models/index.d.ts +0 -3
  118. package/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.d.ts +0 -22
  119. package/configurators/models/sandwich/sc-i-sandwich-settings.d.ts +0 -18
  120. package/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.d.ts +0 -18
  121. package/configurators/sandwich/index.d.ts +0 -3
  122. package/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.d.ts +0 -8
  123. package/configurators/sandwich/sc-i-new-cart-item-sandwich.d.ts +0 -14
  124. package/configurators/sandwich/sc-sandwich.component.d.ts +0 -186
  125. package/configurators/sandwich_m2/index.d.ts +0 -4
  126. package/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.d.ts +0 -8
  127. package/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.d.ts +0 -23
  128. package/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.d.ts +0 -13
  129. package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +0 -275
  130. package/contacts/add-contact-dialog/sc-add-contact-dialog.component.d.ts +0 -49
  131. package/contacts/contacts-accordion/sc-contacts-accordion.component.d.ts +0 -23
  132. package/contacts/index.d.ts +0 -7
  133. package/contacts/manager-card/sc-manager-card.component.d.ts +0 -22
  134. package/contacts/manager-card-push/sc-manager-card-push.component.d.ts +0 -18
  135. package/contacts/new-contact-form/sc-new-contact-form.component.d.ts +0 -28
  136. package/contacts/sc-contacts.module.d.ts +0 -27
  137. package/contacts/tokens/index.d.ts +0 -2
  138. package/contacts/tokens/sc-manager-qr-handler.token.d.ts +0 -6
  139. package/contacts/tokens/sc-show-help-notification-in-phone-input.token.d.ts +0 -5
  140. package/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.d.ts +0 -49
  141. package/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.d.ts +0 -158
  142. package/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.d.ts +0 -62
  143. package/contragents/contragents-accordion/sc-contragents-accordion.component.d.ts +0 -49
  144. package/contragents/index.d.ts +0 -7
  145. package/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.d.ts +0 -64
  146. package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +0 -119
  147. package/contragents/sc-contragents.module.d.ts +0 -26
  148. package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -135
  149. package/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.d.ts +0 -50
  150. package/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.d.ts +0 -49
  151. package/delivery-address/index.d.ts +0 -4
  152. package/delivery-address/sc-delivery-address.module.d.ts +0 -25
  153. package/dialogs/index.d.ts +0 -1
  154. package/dialogs/sc-resource-preview/sc-resource-preview.component.d.ts +0 -42
  155. package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +0 -136
  156. package/directives/index.d.ts +0 -9
  157. package/directives/links/index.d.ts +0 -4
  158. package/directives/links/sc-email-link.directive.d.ts +0 -25
  159. package/directives/links/sc-link-location.d.ts +0 -5
  160. package/directives/links/sc-links.d.ts +0 -7
  161. package/directives/links/sc-tel-link.directive.d.ts +0 -40
  162. package/directives/next-input-focus/sc-next-input-focus.directive.d.ts +0 -27
  163. package/directives/next-input-focus/sc-next-input-focus.module.d.ts +0 -10
  164. package/directives/print/sc-print.directive.d.ts +0 -21
  165. package/directives/sc-date-value-transformer.directive.d.ts +0 -8
  166. package/directives/sc-focus-first-invalid-field.directive.d.ts +0 -30
  167. package/directives/select-on-focusin/sc-select-on-focusin.directive.d.ts +0 -14
  168. package/directives/terminal-link/sc-terminal-link.directive.d.ts +0 -34
  169. package/error-handler/consts/error-change-handler.providers.d.ts +0 -6
  170. package/error-handler/error-block-status/error-block-status.component.d.ts +0 -55
  171. package/error-handler/index.d.ts +0 -4
  172. package/error-handler/interfaces/i-block-error.d.ts +0 -17
  173. package/error-handler/sc-error-handler.component.d.ts +0 -40
  174. package/esm2022/accordion/index.mjs +0 -4
  175. package/esm2022/accordion/sc-accordion-content.directive.mjs +0 -17
  176. package/esm2022/accordion/sc-accordion.component.mjs +0 -92
  177. package/esm2022/accordion/sc-accordion.module.mjs +0 -26
  178. package/esm2022/auth/enums/auth-method.mjs +0 -15
  179. package/esm2022/auth/index.mjs +0 -9
  180. package/esm2022/auth/interfaces/index.mjs +0 -3
  181. package/esm2022/auth/interfaces/sc-bank-account-form-group.mjs +0 -2
  182. package/esm2022/auth/interfaces/sc-contact-form-group.mjs +0 -2
  183. package/esm2022/auth/sc-auth.module.mjs +0 -103
  184. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +0 -100
  185. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +0 -81
  186. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form.component.mjs +0 -89
  187. package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +0 -203
  188. package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +0 -334
  189. package/esm2022/banner/index.mjs +0 -3
  190. package/esm2022/banner/sc-banner.component.mjs +0 -176
  191. package/esm2022/banner/sc-banner.module.mjs +0 -29
  192. package/esm2022/brands-list/index.mjs +0 -4
  193. package/esm2022/brands-list/sc-brand-list-item.mjs +0 -2
  194. package/esm2022/brands-list/sc-brands-list.component.mjs +0 -24
  195. package/esm2022/brands-list/sc-brands-list.module.mjs +0 -22
  196. package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +0 -233
  197. package/esm2022/cart/add-or-editing-cart-item-dialog/index.mjs +0 -3
  198. package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +0 -75
  199. package/esm2022/cart/index.mjs +0 -3
  200. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +0 -110
  201. package/esm2022/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.mjs +0 -59
  202. package/esm2022/catalog/catalog-filters/index.mjs +0 -5
  203. package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +0 -451
  204. package/esm2022/catalog/catalog-filters/tokens/sc-catalog-products-filters.mjs +0 -10
  205. package/esm2022/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.mjs +0 -6
  206. package/esm2022/catalog/category-card/sc-category-card.component.mjs +0 -102
  207. package/esm2022/catalog/cost-with-discount/cost-with-discount.component.mjs +0 -38
  208. package/esm2022/catalog/download-price-list/sc-download-price-list.component.mjs +0 -56
  209. package/esm2022/catalog/hover-image-carousel/sc-hover-image-carousel.component.mjs +0 -76
  210. package/esm2022/catalog/index.mjs +0 -16
  211. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +0 -190
  212. package/esm2022/catalog/notify-when-in-stock-dialog/index.mjs +0 -3
  213. package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +0 -173
  214. package/esm2022/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.mjs +0 -35
  215. package/esm2022/catalog/price-card/sc-price-card.component.mjs +0 -71
  216. package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +0 -54
  217. package/esm2022/catalog/price-history/sc-price-history.component.mjs +0 -144
  218. package/esm2022/catalog/price-list-pagination/sc-price-list-pagination.component.mjs +0 -65
  219. package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +0 -61
  220. package/esm2022/catalog/sc-catalog.module.mjs +0 -128
  221. package/esm2022/catalog/sc-favorite-button/sc-favorite-button.component.mjs +0 -42
  222. package/esm2022/catalog/seo-tags/sc-seo-tags.component.mjs +0 -25
  223. package/esm2022/configurators/index.mjs +0 -4
  224. package/esm2022/configurators/models/index.mjs +0 -4
  225. package/esm2022/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.mjs +0 -2
  226. package/esm2022/configurators/models/sandwich/sc-i-sandwich-settings.mjs +0 -2
  227. package/esm2022/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.mjs +0 -2
  228. package/esm2022/configurators/sandwich/index.mjs +0 -4
  229. package/esm2022/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.mjs +0 -14
  230. package/esm2022/configurators/sandwich/sc-i-new-cart-item-sandwich.mjs +0 -2
  231. package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +0 -387
  232. package/esm2022/configurators/sandwich_m2/index.mjs +0 -5
  233. package/esm2022/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.mjs +0 -14
  234. package/esm2022/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.mjs +0 -2
  235. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.mjs +0 -5
  236. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +0 -569
  237. package/esm2022/contacts/add-contact-dialog/sc-add-contact-dialog.component.mjs +0 -91
  238. package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +0 -37
  239. package/esm2022/contacts/index.mjs +0 -8
  240. package/esm2022/contacts/manager-card/sc-manager-card.component.mjs +0 -58
  241. package/esm2022/contacts/manager-card-push/sc-manager-card-push.component.mjs +0 -28
  242. package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +0 -37
  243. package/esm2022/contacts/sc-contacts.module.mjs +0 -89
  244. package/esm2022/contacts/tokens/index.mjs +0 -3
  245. package/esm2022/contacts/tokens/sc-manager-qr-handler.token.mjs +0 -25
  246. package/esm2022/contacts/tokens/sc-show-help-notification-in-phone-input.token.mjs +0 -9
  247. package/esm2022/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.mjs +0 -81
  248. package/esm2022/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +0 -266
  249. package/esm2022/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.mjs +0 -74
  250. package/esm2022/contragents/contragents-accordion/sc-contragents-accordion.component.mjs +0 -68
  251. package/esm2022/contragents/index.mjs +0 -8
  252. package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +0 -72
  253. package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +0 -224
  254. package/esm2022/contragents/sc-contragents.module.mjs +0 -115
  255. package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +0 -240
  256. package/esm2022/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.mjs +0 -60
  257. package/esm2022/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.mjs +0 -68
  258. package/esm2022/delivery-address/index.mjs +0 -5
  259. package/esm2022/delivery-address/sc-delivery-address.module.mjs +0 -96
  260. package/esm2022/dialogs/index.mjs +0 -2
  261. package/esm2022/dialogs/sc-resource-preview/sc-resource-preview.component.mjs +0 -73
  262. package/esm2022/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +0 -170
  263. package/esm2022/directives/index.mjs +0 -10
  264. package/esm2022/directives/links/index.mjs +0 -5
  265. package/esm2022/directives/links/sc-email-link.directive.mjs +0 -49
  266. package/esm2022/directives/links/sc-link-location.mjs +0 -2
  267. package/esm2022/directives/links/sc-links.mjs +0 -8
  268. package/esm2022/directives/links/sc-tel-link.directive.mjs +0 -79
  269. package/esm2022/directives/next-input-focus/sc-next-input-focus.directive.mjs +0 -70
  270. package/esm2022/directives/next-input-focus/sc-next-input-focus.module.mjs +0 -19
  271. package/esm2022/directives/print/sc-print.directive.mjs +0 -36
  272. package/esm2022/directives/sc-date-value-transformer.directive.mjs +0 -30
  273. package/esm2022/directives/sc-focus-first-invalid-field.directive.mjs +0 -85
  274. package/esm2022/directives/select-on-focusin/sc-select-on-focusin.directive.mjs +0 -36
  275. package/esm2022/directives/terminal-link/sc-terminal-link.directive.mjs +0 -69
  276. package/esm2022/error-handler/consts/error-change-handler.providers.mjs +0 -10
  277. package/esm2022/error-handler/error-block-status/error-block-status.component.mjs +0 -101
  278. package/esm2022/error-handler/index.mjs +0 -5
  279. package/esm2022/error-handler/interfaces/i-block-error.mjs +0 -2
  280. package/esm2022/error-handler/sc-error-handler.component.mjs +0 -58
  281. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +0 -344
  282. package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +0 -32
  283. package/esm2022/feedback/index.mjs +0 -4
  284. package/esm2022/feedback/interfaces/index.mjs +0 -2
  285. package/esm2022/feedback/interfaces/sc-feedback-form-config.mjs +0 -2
  286. package/esm2022/files/directives/index.mjs +0 -3
  287. package/esm2022/files/directives/tree-top.directive.mjs +0 -63
  288. package/esm2022/files/directives/tree.directive.mjs +0 -47
  289. package/esm2022/files/file-tree-item/file-tree-item.component.mjs +0 -18
  290. package/esm2022/files/files-and-documents/files-and-documents.component.mjs +0 -61
  291. package/esm2022/files/files-and-documents.module.mjs +0 -28
  292. package/esm2022/files/index.mjs +0 -6
  293. package/esm2022/files/interfaces/tree-node.mjs +0 -2
  294. package/esm2022/files/services/index.mjs +0 -3
  295. package/esm2022/files/services/tree-icon.service.mjs +0 -49
  296. package/esm2022/files/services/tree-loader.service.mjs +0 -62
  297. package/esm2022/form-fields/addresses-selection-field/sc-addresses-selection-field.component.mjs +0 -156
  298. package/esm2022/form-fields/form-fields.module.mjs +0 -66
  299. package/esm2022/form-fields/index.mjs +0 -4
  300. package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +0 -174
  301. package/esm2022/icons/index.mjs +0 -2
  302. package/esm2022/icons/sc-client-ui-icons-name.mjs +0 -99
  303. package/esm2022/loader/index.mjs +0 -2
  304. package/esm2022/loader/sc-i-loader.mjs +0 -2
  305. package/esm2022/masks/index.mjs +0 -8
  306. package/esm2022/masks/sc-account-number-mask.mjs +0 -7
  307. package/esm2022/masks/sc-bic-mask.mjs +0 -7
  308. package/esm2022/masks/sc-correspondent-account-mask.mjs +0 -7
  309. package/esm2022/masks/sc-inn-mask.mjs +0 -13
  310. package/esm2022/masks/sc-kpp-mask.mjs +0 -7
  311. package/esm2022/masks/sc-okpo-mask.mjs +0 -13
  312. package/esm2022/masks/sc-phone-verification-code-mask.mjs +0 -7
  313. package/esm2022/methods/index.mjs +0 -2
  314. package/esm2022/methods/sc-get-current-route.mjs +0 -14
  315. package/esm2022/models/i-sc-image.mjs +0 -2
  316. package/esm2022/models/index.mjs +0 -2
  317. package/esm2022/news/index.mjs +0 -4
  318. package/esm2022/news/news-card/sc-news-card.component.mjs +0 -34
  319. package/esm2022/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +0 -31
  320. package/esm2022/news/sc-news.module.mjs +0 -25
  321. package/esm2022/noindex-wrapper/directives/index.mjs +0 -2
  322. package/esm2022/noindex-wrapper/directives/sc-noindex.directive.mjs +0 -58
  323. package/esm2022/noindex-wrapper/index.mjs +0 -3
  324. package/esm2022/noindex-wrapper/sc-noindex-wrapper.component.mjs +0 -18
  325. package/esm2022/order/directives/index.mjs +0 -3
  326. package/esm2022/order/directives/sc-order-accessor.directive.mjs +0 -28
  327. package/esm2022/order/directives/sc-order-options.mjs +0 -11
  328. package/esm2022/order/draft/sc-draft.component.mjs +0 -118
  329. package/esm2022/order/index.mjs +0 -14
  330. package/esm2022/order/models/i-new-order-form.mjs +0 -2
  331. package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +0 -22
  332. package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +0 -39
  333. package/esm2022/order/order-form/sc-order-form.component.mjs +0 -565
  334. package/esm2022/order/order-form/sc-order-form.config.mjs +0 -7
  335. package/esm2022/order/order-item/sc-order-item.component.mjs +0 -112
  336. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +0 -212
  337. package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +0 -75
  338. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +0 -75
  339. package/esm2022/order/sc-order.module.mjs +0 -52
  340. package/esm2022/order/sc-payment-status/sc-payment-status.component.mjs +0 -35
  341. package/esm2022/pages/frequently-asked-questions/sc-faq-query-params.mjs +0 -5
  342. package/esm2022/pages/frequently-asked-questions/sc-faq-question-anchor.mjs +0 -23
  343. package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +0 -167
  344. package/esm2022/pages/frequently-asked-questions/sc-get-faq-group-query-params.mjs +0 -14
  345. package/esm2022/pages/frequently-asked-questions/sc-page-size-options.mjs +0 -8
  346. package/esm2022/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.mjs +0 -88
  347. package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +0 -123
  348. package/esm2022/pages/index.mjs +0 -11
  349. package/esm2022/pages/news-list/sc-news-list.component.mjs +0 -90
  350. package/esm2022/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.mjs +0 -46
  351. package/esm2022/pages/privacy-policy/sc-privacy-policy.component.mjs +0 -30
  352. package/esm2022/pages/public-offer/sc-public-offer.component.mjs +0 -50
  353. package/esm2022/pagination/index.mjs +0 -2
  354. package/esm2022/pagination/sc-pagination-links/sc-pagination-links.component.mjs +0 -99
  355. package/esm2022/pipes/index.mjs +0 -3
  356. package/esm2022/pipes/sc-format-date.mjs +0 -33
  357. package/esm2022/pipes/sc-phone-format.mjs +0 -44
  358. package/esm2022/profile/index.mjs +0 -3
  359. package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +0 -174
  360. package/esm2022/profile/sc-profile.module.mjs +0 -73
  361. package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +0 -30
  362. package/esm2022/providers/date-value-transformer/index.mjs +0 -4
  363. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-types.mjs +0 -2
  364. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-end-time.mjs +0 -26
  365. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-start-time.mjs +0 -37
  366. package/esm2022/providers/index.mjs +0 -17
  367. package/esm2022/providers/sc-allow-select-terminated.mjs +0 -8
  368. package/esm2022/providers/sc-banner-duration.mjs +0 -8
  369. package/esm2022/providers/sc-country-ids.mjs +0 -8
  370. package/esm2022/providers/sc-date-formatter.mjs +0 -15
  371. package/esm2022/providers/sc-date-value-transformer.mjs +0 -12
  372. package/esm2022/providers/sc-debounce-time-default.mjs +0 -9
  373. package/esm2022/providers/sc-dialog-service.providers.mjs +0 -6
  374. package/esm2022/providers/sc-help-notification-close.mjs +0 -9
  375. package/esm2022/providers/sc-help-notification-limit.mjs +0 -8
  376. package/esm2022/providers/sc-hidden-print-elements.token.mjs +0 -10
  377. package/esm2022/providers/sc-max-files-in-form-input.mjs +0 -8
  378. package/esm2022/providers/sc-notify-when-in-stock-required-fields.mjs +0 -8
  379. package/esm2022/providers/sc-page-size-options.mjs +0 -8
  380. package/esm2022/providers/sc-user-providers.mjs +0 -38
  381. package/esm2022/providers/sc-verification-code-timeout.mjs +0 -8
  382. package/esm2022/public-api.mjs +0 -36
  383. package/esm2022/qrcode/index.mjs +0 -3
  384. package/esm2022/qrcode/qrcode-dialog/sc-qrcode-dialog.component.mjs +0 -58
  385. package/esm2022/qrcode/sc-qrcode.module.mjs +0 -25
  386. package/esm2022/samples/index.mjs +0 -5
  387. package/esm2022/samples/interfaces/index.mjs +0 -3
  388. package/esm2022/samples/interfaces/sc-i-preview-sample.mjs +0 -2
  389. package/esm2022/samples/interfaces/sc-preview-mosquito-config.mjs +0 -2
  390. package/esm2022/samples/preview-sample/sc-preview-sample.component.mjs +0 -42
  391. package/esm2022/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.mjs +0 -63
  392. package/esm2022/samples/sc-sample.module.mjs +0 -66
  393. package/esm2022/services/index.mjs +0 -3
  394. package/esm2022/services/print.service.mjs +0 -49
  395. package/esm2022/services/sc-help-notification.service.mjs +0 -100
  396. package/esm2022/share/index.mjs +0 -6
  397. package/esm2022/share/sc-share-dialog-data.mjs +0 -2
  398. package/esm2022/share/sc-share.service.mjs +0 -40
  399. package/esm2022/share/share-button/sc-share-button.component.mjs +0 -99
  400. package/esm2022/share/share-dialog/sc-share-dialog.component.mjs +0 -139
  401. package/esm2022/share/share-messengers-links/sc-share-messengers-links.component.mjs +0 -84
  402. package/esm2022/snabcentr-client-ui.mjs +0 -5
  403. package/esm2022/user/index.mjs +0 -6
  404. package/esm2022/user/reset-user-password/sc-reset-user-password.component.mjs +0 -74
  405. package/esm2022/user/sc-user.module.mjs +0 -86
  406. package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +0 -121
  407. package/esm2022/user/user-managers/sc-user-managers.component.mjs +0 -40
  408. package/esm2022/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.mjs +0 -105
  409. package/esm2022/validators/index.mjs +0 -7
  410. package/esm2022/validators/sc-at-least-one-required-validator.mjs +0 -25
  411. package/esm2022/validators/sc-bic-validator.mjs +0 -10
  412. package/esm2022/validators/sc-correspondent-account-validator.mjs +0 -10
  413. package/esm2022/validators/sc-password-confirm-matching-validator.mjs +0 -17
  414. package/esm2022/validators/sc-phone-validator.mjs +0 -14
  415. package/esm2022/validators/step-validator.mjs +0 -18
  416. package/esm2022/verification/index.mjs +0 -3
  417. package/esm2022/verification/sc-verification.module.mjs +0 -86
  418. package/esm2022/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +0 -259
  419. package/feedback/feedback-form/sc-feedback-form.component.d.ts +0 -163
  420. package/feedback/gratitude/sc-gratitude.component.d.ts +0 -20
  421. package/feedback/index.d.ts +0 -3
  422. package/feedback/interfaces/index.d.ts +0 -1
  423. package/feedback/interfaces/sc-feedback-form-config.d.ts +0 -23
  424. package/files/directives/index.d.ts +0 -2
  425. package/files/directives/tree-top.directive.d.ts +0 -33
  426. package/files/directives/tree.directive.d.ts +0 -35
  427. package/files/file-tree-item/file-tree-item.component.d.ts +0 -9
  428. package/files/files-and-documents/files-and-documents.component.d.ts +0 -27
  429. package/files/files-and-documents.module.d.ts +0 -17
  430. package/files/index.d.ts +0 -5
  431. package/files/interfaces/tree-node.d.ts +0 -29
  432. package/files/services/index.d.ts +0 -2
  433. package/files/services/tree-icon.service.d.ts +0 -23
  434. package/files/services/tree-loader.service.d.ts +0 -43
  435. package/form-fields/addresses-selection-field/sc-addresses-selection-field.component.d.ts +0 -78
  436. package/form-fields/form-fields.module.d.ts +0 -18
  437. package/form-fields/index.d.ts +0 -3
  438. package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +0 -73
  439. package/icons/index.d.ts +0 -1
  440. package/icons/sc-client-ui-icons-name.d.ts +0 -4
  441. package/index.d.ts +0 -5
  442. package/loader/index.d.ts +0 -1
  443. package/loader/sc-i-loader.d.ts +0 -9
  444. package/masks/index.d.ts +0 -7
  445. package/masks/sc-account-number-mask.d.ts +0 -5
  446. package/masks/sc-bic-mask.d.ts +0 -5
  447. package/masks/sc-correspondent-account-mask.d.ts +0 -5
  448. package/masks/sc-inn-mask.d.ts +0 -9
  449. package/masks/sc-kpp-mask.d.ts +0 -5
  450. package/masks/sc-okpo-mask.d.ts +0 -9
  451. package/masks/sc-phone-verification-code-mask.d.ts +0 -5
  452. package/methods/index.d.ts +0 -1
  453. package/methods/sc-get-current-route.d.ts +0 -8
  454. package/models/i-sc-image.d.ts +0 -17
  455. package/models/index.d.ts +0 -1
  456. package/news/index.d.ts +0 -3
  457. package/news/news-card/sc-news-card.component.d.ts +0 -22
  458. package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +0 -16
  459. package/news/sc-news.module.d.ts +0 -15
  460. package/noindex-wrapper/directives/index.d.ts +0 -1
  461. package/noindex-wrapper/directives/sc-noindex.directive.d.ts +0 -29
  462. package/noindex-wrapper/index.d.ts +0 -2
  463. package/noindex-wrapper/sc-noindex-wrapper.component.d.ts +0 -9
  464. package/order/directives/index.d.ts +0 -2
  465. package/order/directives/sc-order-accessor.directive.d.ts +0 -13
  466. package/order/directives/sc-order-options.d.ts +0 -14
  467. package/order/draft/sc-draft.component.d.ts +0 -63
  468. package/order/index.d.ts +0 -13
  469. package/order/models/i-new-order-form.d.ts +0 -39
  470. package/order/models/sc-i-cart-items-by-direction.d.ts +0 -25
  471. package/order/order-direction-items/sc-order-direction-items.component.d.ts +0 -29
  472. package/order/order-form/sc-order-form.component.d.ts +0 -283
  473. package/order/order-form/sc-order-form.config.d.ts +0 -20
  474. package/order/order-item/sc-order-item.component.d.ts +0 -43
  475. package/order/order-items-list/sc-order-items-list.component.d.ts +0 -113
  476. package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +0 -58
  477. package/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.d.ts +0 -55
  478. package/order/sc-order.module.d.ts +0 -18
  479. package/order/sc-payment-status/sc-payment-status.component.d.ts +0 -25
  480. package/pages/frequently-asked-questions/sc-faq-query-params.d.ts +0 -4
  481. package/pages/frequently-asked-questions/sc-faq-question-anchor.d.ts +0 -16
  482. package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +0 -84
  483. package/pages/frequently-asked-questions/sc-get-faq-group-query-params.d.ts +0 -10
  484. package/pages/frequently-asked-questions/sc-page-size-options.d.ts +0 -5
  485. package/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.d.ts +0 -47
  486. package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +0 -89
  487. package/pages/index.d.ts +0 -10
  488. package/pages/news-list/sc-news-list.component.d.ts +0 -57
  489. package/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.d.ts +0 -17
  490. package/pages/privacy-policy/sc-privacy-policy.component.d.ts +0 -17
  491. package/pages/public-offer/sc-public-offer.component.d.ts +0 -22
  492. package/pagination/index.d.ts +0 -1
  493. package/pagination/sc-pagination-links/sc-pagination-links.component.d.ts +0 -60
  494. package/pipes/index.d.ts +0 -2
  495. package/pipes/sc-format-date.d.ts +0 -20
  496. package/pipes/sc-phone-format.d.ts +0 -21
  497. package/profile/index.d.ts +0 -2
  498. package/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.d.ts +0 -126
  499. package/profile/sc-profile.module.d.ts +0 -23
  500. package/providers/cleanup-recaptcha-artifacts.d.ts +0 -7
  501. package/providers/date-value-transformer/index.d.ts +0 -3
  502. package/providers/date-value-transformer/sc-date-value-transformer-types.d.ts +0 -9
  503. package/providers/date-value-transformer/sc-date-value-transformer-with-end-time.d.ts +0 -16
  504. package/providers/date-value-transformer/sc-date-value-transformer-with-start-time.d.ts +0 -22
  505. package/providers/index.d.ts +0 -16
  506. package/providers/sc-allow-select-terminated.d.ts +0 -5
  507. package/providers/sc-banner-duration.d.ts +0 -5
  508. package/providers/sc-country-ids.d.ts +0 -5
  509. package/providers/sc-date-formatter.d.ts +0 -6
  510. package/providers/sc-date-value-transformer.d.ts +0 -5
  511. package/providers/sc-debounce-time-default.d.ts +0 -5
  512. package/providers/sc-dialog-service.providers.d.ts +0 -45
  513. package/providers/sc-help-notification-close.d.ts +0 -6
  514. package/providers/sc-help-notification-limit.d.ts +0 -5
  515. package/providers/sc-hidden-print-elements.token.d.ts +0 -6
  516. package/providers/sc-max-files-in-form-input.d.ts +0 -5
  517. package/providers/sc-notify-when-in-stock-required-fields.d.ts +0 -5
  518. package/providers/sc-page-size-options.d.ts +0 -5
  519. package/providers/sc-user-providers.d.ts +0 -21
  520. package/providers/sc-verification-code-timeout.d.ts +0 -5
  521. package/public-api.d.ts +0 -35
  522. package/qrcode/index.d.ts +0 -2
  523. package/qrcode/qrcode-dialog/sc-qrcode-dialog.component.d.ts +0 -37
  524. package/qrcode/sc-qrcode.module.d.ts +0 -14
  525. package/samples/index.d.ts +0 -4
  526. package/samples/interfaces/index.d.ts +0 -2
  527. package/samples/interfaces/sc-i-preview-sample.d.ts +0 -56
  528. package/samples/interfaces/sc-preview-mosquito-config.d.ts +0 -62
  529. package/samples/preview-sample/sc-preview-sample.component.d.ts +0 -30
  530. package/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.d.ts +0 -50
  531. package/samples/sc-sample.module.d.ts +0 -19
  532. package/services/index.d.ts +0 -2
  533. package/services/print.service.d.ts +0 -31
  534. package/services/sc-help-notification.service.d.ts +0 -70
  535. package/share/index.d.ts +0 -5
  536. package/share/sc-share-dialog-data.d.ts +0 -13
  537. package/share/sc-share.service.d.ts +0 -19
  538. package/share/share-button/sc-share-button.component.d.ts +0 -78
  539. package/share/share-dialog/sc-share-dialog.component.d.ts +0 -87
  540. package/share/share-messengers-links/sc-share-messengers-links.component.d.ts +0 -49
  541. package/user/index.d.ts +0 -5
  542. package/user/reset-user-password/sc-reset-user-password.component.d.ts +0 -46
  543. package/user/sc-user.module.d.ts +0 -24
  544. package/user/update-user-info-dialog/sc-update-user-info-dialog.component.d.ts +0 -63
  545. package/user/user-managers/sc-user-managers.component.d.ts +0 -23
  546. package/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.d.ts +0 -53
  547. package/validators/index.d.ts +0 -6
  548. package/validators/sc-at-least-one-required-validator.d.ts +0 -10
  549. package/validators/sc-bic-validator.d.ts +0 -8
  550. package/validators/sc-correspondent-account-validator.d.ts +0 -8
  551. package/validators/sc-password-confirm-matching-validator.d.ts +0 -8
  552. package/validators/sc-phone-validator.d.ts +0 -5
  553. package/validators/step-validator.d.ts +0 -7
  554. package/verification/index.d.ts +0 -2
  555. package/verification/sc-verification.module.d.ts +0 -21
  556. package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +0 -145
@@ -1,233 +0,0 @@
1
- /* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method */
2
- import { AsyncPipe, NgIf } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
4
- import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
5
- import { ScConvertersService, ScNumberHelper, ScUnitsHelper, ScUserMetrikaGoalsEnum, ScUserMetrikaService, } from '@snabcentr/client-core';
6
- import { tuiControlValue, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';
7
- import { TuiButton, TuiError, TuiFormatNumberPipe, TuiLabel, TuiNumberFormat, TuiTextfield } from '@taiga-ui/core';
8
- import { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';
9
- import { TuiIcons, TuiWithIcons } from '@taiga-ui/core/directives/icons';
10
- import { TuiButtonLoading, TuiChip, TuiFieldErrorPipe, TuiInputNumber } from '@taiga-ui/kit';
11
- import { TuiInputModule } from '@taiga-ui/legacy';
12
- import { isUndefined } from 'lodash-es';
13
- import { debounceTime, distinctUntilChanged, filter, map, pairwise, startWith } from 'rxjs';
14
- import { ScNextInputFocusModule } from '../../../directives/next-input-focus/sc-next-input-focus.module';
15
- import { ScSelectOnFocusinDirective } from '../../../directives/select-on-focusin/sc-select-on-focusin.directive';
16
- import { stepValidator } from '../../../validators/step-validator';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@angular/forms";
19
- import * as i2 from "../../../directives/next-input-focus/sc-next-input-focus.directive";
20
- import * as i3 from "@taiga-ui/legacy";
21
- import * as i4 from "@taiga-ui/legacy/components/primitive-textfield";
22
- import * as i5 from "@taiga-ui/kit";
23
- import * as i6 from "@taiga-ui/core";
24
- /**
25
- * Компонент добавления / изменения товара в корзине.
26
- */
27
- export class ScAddOrEditingCartItemFormComponent {
28
- constructor() {
29
- /**
30
- * Группа полей добавления / изменения товара в корзине.
31
- */
32
- this.form = new FormGroup({
33
- quantity: new FormControl(null, Validators.required),
34
- marker: new FormControl(''),
35
- });
36
- /**
37
- * Данные о товаре.
38
- */
39
- this.product = input.required();
40
- /**
41
- * Признак того, что для указанной категории или продукта действует конфигуратор длины.
42
- */
43
- this.isLengthConfigurator = computed(() => Boolean(this.product().properties?.['isLengthConfigurator']));
44
- /**
45
- * Данные о товаре в корзине.
46
- */
47
- this.orderItem = input();
48
- /**
49
- * Признак загрузки данных.
50
- */
51
- this.isLoading = input(false);
52
- /**
53
- * Признак возможности продажи товара на метраж.
54
- */
55
- this.productIsMeasurable = computed(() => ScUnitsHelper.productIsMeasurable(this.product()));
56
- /**
57
- * Кратность количества для товара.
58
- */
59
- this.productMultiplicity = computed(() => ScUnitsHelper.getProductMultiplicity(this.product()));
60
- /**
61
- * Минимальный метраж для товара.
62
- */
63
- this.minLength = computed(() => this.product().properties?.minLength ?? (this.product().ignoreMinCountCheck ? 0 : this.product().minCount));
64
- /**
65
- * Максимальный метраж для товара.
66
- */
67
- this.maxLength = computed(() => this.product().properties?.maxLength);
68
- /**
69
- * Шаг изменения метража.
70
- */
71
- this.lengthStep = computed(() => ScUnitsHelper.getProductLengthMultiplicity(this.product()));
72
- /**
73
- * Количество знаков после запятой в поле метража.
74
- */
75
- this.lengthPrecision = computed(() => ScNumberHelper.getDecimalsCount(this.lengthStep()));
76
- /**
77
- * Подсказка по минимальному и максимальному метражу товара.
78
- */
79
- this.lengthHint = computed(() => {
80
- const min = this.minLength();
81
- const max = this.maxLength();
82
- // eslint-disable-next-line sonarjs/no-nested-conditional
83
- return min || max ? `(${min ? `от ${min}` : ''}${min && max ? ' ' : ''}${max ? `до ${max}` : ''} ${this.product().unit.name})` : '';
84
- });
85
- /**
86
- * {@link Output} события добавления товара в корзину.
87
- */
88
- this.addProduct = output();
89
- /**
90
- * {@link Output} события редактирования товара в корзине.
91
- */
92
- this.editCartItem = output();
93
- /**
94
- * Настройки вывода сумм в рублях.
95
- */
96
- this.moneyFormat = ScNumberHelper.getMoneyFormat();
97
- /**
98
- * Сервис для сбора метрик о действиях пользователей.
99
- */
100
- this.userMetrikaService = inject(ScUserMetrikaService);
101
- /**
102
- * Сервис конвертации данных.
103
- */
104
- this.convertersService = inject(ScConvertersService);
105
- }
106
- /** @inheritDoc */
107
- ngOnInit() {
108
- this.userMetrikaService.emitUserMetrikaEvent({
109
- target: ScUserMetrikaGoalsEnum.cartItemAddShow,
110
- params: { product_id: this.product().id },
111
- });
112
- if (this.productIsMeasurable()) {
113
- // Добавляем поле ввода длины, если товар измеряемый.
114
- this.form.addControl('length', new FormControl(this.orderItem()?.length ?? this.minLength() ?? 0.01, [Validators.required, Validators.min(0.01)]));
115
- }
116
- // Устанавливаем количество из корзины или кратности товара.
117
- this.form.patchValue({
118
- quantity: this.orderItem()?.quantity ?? ScUnitsHelper.getProductMultiplicity(this.product()),
119
- marker: this.orderItem()?.marker ?? '',
120
- });
121
- const step = this.lengthStep();
122
- if (this.isLengthConfigurator() && this.lengthStep() && this.form.controls.quantity.value && step) {
123
- // Если есть конфигуратор длины, рассчитываем начально значение длины.
124
- this.form.controls.length?.patchValue(ScNumberHelper.multiplyByStep(this.form.controls.quantity.value, step));
125
- }
126
- // Добавляем валидацию шага для количества.
127
- this.form.controls.quantity.addValidators(stepValidator(ScUnitsHelper.getProductMultiplicity(this.product())));
128
- // Добавляем валидацию шага для длины.
129
- this.form.get('length')?.addValidators(stepValidator(ScUnitsHelper.getProductLengthMultiplicity(this.product())));
130
- // Считаем итоговую стоимость заказа.
131
- this.totalCost$ = tuiControlValue(this.form).pipe(debounceTime(0), // Исправляем ошибку NG0950.
132
- filter(() => this.form.valid), distinctUntilChanged((previous, current) => previous.length === current.length && previous.quantity === current.quantity), // Только при изменении значений
133
- startWith(this.form.value), pairwise(), map(([previous, current]) => {
134
- const lengthControl = this.form.get('length');
135
- // Если нет конфигуратора длины или некорректные данные — возвращаем без изменений.
136
- if (!this.isLengthConfigurator() || isUndefined(current.length) || !lengthControl || this.form.invalid || !step) {
137
- return current;
138
- }
139
- // Если изменилось количество — пересчитываем длину.
140
- if (previous.quantity !== current.quantity && this.form.controls.quantity.value) {
141
- lengthControl.patchValue(ScNumberHelper.multiplyByStep(this.form.controls.quantity.value, step));
142
- }
143
- // Если изменилась длина — пересчитываем количество и возвращаем значение длины.
144
- if (previous.length !== current.length && lengthControl.value) {
145
- const newValue = ScNumberHelper.divideByStep(lengthControl.value, step);
146
- this.form.controls.quantity.patchValue(newValue);
147
- return { length: step, quantity: newValue };
148
- }
149
- // Возвращаем итоговые значения для расчёта стоимости.
150
- return { length: step, quantity: current.quantity };
151
- }),
152
- // Считаем стоимость: цена * длина * количество.
153
- map(({ length, quantity }) => ScNumberHelper.roundMoney((this.product().costRub ?? 0) * (length ?? 1) * quantity)));
154
- }
155
- /**
156
- * Обработчик события шага метража.
157
- *
158
- * @param step Шаг.
159
- */
160
- onStepLength(step) {
161
- const lengthControl = this.form.get('length');
162
- if (!this.productIsMeasurable() || !lengthControl) {
163
- return;
164
- }
165
- const newLength = Math.max(this.minLength() ?? step, ScNumberHelper.addStep(lengthControl.value ?? 0, step));
166
- lengthControl.setValue(ScNumberHelper.snapToStep(newLength, Math.abs(step)));
167
- }
168
- /**
169
- * Обработчик события шага количества.
170
- *
171
- * @param step Шаг.
172
- */
173
- onStepQuantity(step) {
174
- const quantity = this.form.controls.quantity.value ?? 0;
175
- const multipleQuantity = ScNumberHelper.addStep(quantity, -ScNumberHelper.remainder(quantity, Math.abs(step)));
176
- this.form.controls.quantity.setValue(Math.max(this.productMultiplicity(), ScNumberHelper.addStep(multipleQuantity, step)));
177
- }
178
- /**
179
- * Обработчик события отправки формы.
180
- */
181
- onSubmit() {
182
- // Удаляем null-поля из значения формы.
183
- const value = this.convertersService.removeNull(this.form.value);
184
- // Если это добавление нового товара — добавляем productId.
185
- if (!this.orderItem()) {
186
- value.productId = this.product().id;
187
- }
188
- const step = this.lengthStep();
189
- // Если товар измеряемый и есть конфигуратор длины — устанавливаем длину по шагу (количество уже будет вычислено по формуле Метраж/min-count)
190
- if (this.productIsMeasurable() && this.isLengthConfigurator() && step) {
191
- value.length = step;
192
- }
193
- // Помечаем все поля формы как "touch" и запускаем валидацию для отображения ошибок с сервера.
194
- tuiMarkControlAsTouchedAndValidate(this.form);
195
- // В зависимости от режима — редактируем или добавляем товар.
196
- if (this.orderItem()) {
197
- this.editCartItem.emit(value);
198
- }
199
- else {
200
- this.addProduct.emit(value);
201
- }
202
- }
203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
204
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemFormComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-form", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, orderItem: { classPropertyName: "orderItem", publicName: "orderItem", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addProduct: "addProduct", editCartItem: "editCartItem" }, ngImport: i0, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: lengthPrecision() }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiFormatNumber: moneyFormat | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ orderItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ScNextInputFocusModule }, { kind: "directive", type: i2.ScNextInputFocusDirective, selector: "form[ScNextInputFocus]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: ScSelectOnFocusinDirective, selector: "tui-input-number, tui-input, tui-input-phone, tui-input-date, tui-input-password, input[tuiInputNumber], input[tuiTextfield], input[tuiInputSlider]" }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfieldLegacy], textarea[tuiTextfieldLegacy]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "directive", type: i5.TuiInputNumberDirective, selector: "input[tuiInputNumber]", inputs: ["min", "max", "prefix", "postfix"] }, { kind: "component", type: i6.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
205
- }
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemFormComponent, decorators: [{
207
- type: Component,
208
- args: [{ standalone: true, selector: 'sc-add-or-editing-cart-item-form', imports: [
209
- TuiFormatNumberPipe,
210
- NgIf,
211
- FormsModule,
212
- ScNextInputFocusModule,
213
- ReactiveFormsModule,
214
- TuiLabel,
215
- ScSelectOnFocusinDirective,
216
- TuiNumberFormat,
217
- TuiError,
218
- TuiInputModule,
219
- TuiAppearance,
220
- TuiWithAppearance,
221
- TuiIcons,
222
- TuiWithIcons,
223
- TuiButton,
224
- TuiButtonLoading,
225
- AsyncPipe,
226
- TuiFieldErrorPipe,
227
- TuiInputNumber,
228
- TuiNumberFormat,
229
- TuiTextfield,
230
- TuiChip,
231
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: lengthPrecision() }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiFormatNumber: moneyFormat | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ orderItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n" }]
232
- }] });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL2FkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBGQUEwRjtBQUUxRixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQ0gsbUJBQW1CLEVBR25CLGNBQWMsRUFHZCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLG9CQUFvQixHQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFB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LElBQUk7d0JBQ0osV0FBVzt3QkFDWCxzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsUUFBUTt3QkFDUiwwQkFBMEI7d0JBQzFCLGVBQWU7d0JBQ2YsUUFBUTt3QkFDUixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixRQUFRO3dCQUNSLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixPQUFPO3FCQUNWLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9uby1uZXN0ZWQtdGVtcGxhdGUtbGl0ZXJhbHMsQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgIFNjSU5ld0NhcnRJdGVtTWVhc3VyZWQsXG4gICAgU2NJTmV3T3JkZXJJdGVtQmFzZSxcbiAgICBTY051bWJlckhlbHBlcixcbiAgICBTY09yZGVySXRlbSxcbiAgICBTY1Byb2R1Y3QsXG4gICAgU2NVbml0c0hlbHBlcixcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUNvbnRyb2xWYWx1ZSwgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlFcnJvciwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgVHVpTGFiZWwsIFR1aU51bWJlckZvcm1hdCwgVHVpVGV4dGZpZWxkIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQXBwZWFyYW5jZSwgVHVpV2l0aEFwcGVhcmFuY2UgfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgVHVpSWNvbnMsIFR1aVdpdGhJY29ucyB9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvaWNvbnMnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hpcCwgVHVpRmllbGRFcnJvclBpcGUsIFR1aUlucHV0TnVtYmVyIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBUdWlJbnB1dE1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIHBhaXJ3aXNlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NOZXh0SW5wdXRGb2N1c01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbmV4dC1pbnB1dC1mb2N1cy9zYy1uZXh0LWlucHV0LWZvY3VzLm1vZHVsZSc7XG5pbXBvcnQgeyBTY1NlbGVjdE9uRm9jdXNpbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0LW9uLWZvY3VzaW4vc2Mtc2VsZWN0LW9uLWZvY3VzaW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IHN0ZXBWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3JzL3N0ZXAtdmFsaWRhdG9yJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgU2NOZXh0SW5wdXRGb2N1c01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFNjU2VsZWN0T25Gb2N1c2luRGlyZWN0aXZlLFxuICAgICAgICBUdWlOdW1iZXJGb3JtYXQsXG4gICAgICAgIFR1aUVycm9yLFxuICAgICAgICBUdWlJbnB1dE1vZHVsZSxcbiAgICAgICAgVHVpQXBwZWFyYW5jZSxcbiAgICAgICAgVHVpV2l0aEFwcGVhcmFuY2UsXG4gICAgICAgIFR1aUljb25zLFxuICAgICAgICBUdWlXaXRoSWNvbnMsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZSxcbiAgICAgICAgVHVpSW5wdXROdW1iZXIsXG4gICAgICAgIFR1aU51bWJlckZvcm1hdCxcbiAgICAgICAgVHVpVGV4dGZpZWxkLFxuICAgICAgICBUdWlDaGlwLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINC40LfQvNC10L3QtdC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwPHtcbiAgICAgICAgbGVuZ3RoPzogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgICAgIHF1YW50aXR5OiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcbiAgICAgICAgbWFya2VyOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcbiAgICB9Pih7XG4gICAgICAgIHF1YW50aXR5OiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIG1hcmtlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KCcnKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3QgPSBpbnB1dC5yZXF1aXJlZDxTY1Byb2R1Y3Q+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4INC40LvQuCDQv9GA0L7QtNGD0LrRgtCwINC00LXQudGB0YLQstGD0LXRgiDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAg0LTQu9C40L3Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNMZW5ndGhDb25maWd1cmF0b3IgPSBjb21wdXRlZCgoKSA9PiBCb29sZWFuKHRoaXMucHJvZHVjdCgpLnByb3BlcnRpZXM/LlsnaXNMZW5ndGhDb25maWd1cmF0b3InXSkpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INGC0L7QstCw0YDQtSDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JkZXJJdGVtID0gaW5wdXQ8U2NPcmRlckl0ZW0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQv9GA0L7QtNCw0LbQuCDRgtC+0LLQsNGA0LAg0L3QsCDQvNC10YLRgNCw0LYuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3RJc01lYXN1cmFibGUgPSBjb21wdXRlZCgoKSA9PiBTY1VuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUodGhpcy5wcm9kdWN0KCkpKTtcblxuICAgIC8qKlxuICAgICAqINCa0YDQsNGC0L3QvtGB0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQsCDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwcm9kdWN0TXVsdGlwbGljaXR5ID0gY29tcHV0ZWQoKCkgPT4gU2NVbml0c0hlbHBlci5nZXRQcm9kdWN0TXVsdGlwbGljaXR5KHRoaXMucHJvZHVjdCgpKSk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC40L3QuNC80LDQu9GM0L3Ri9C5INC80LXRgtGA0LDQtiDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtaW5MZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5taW5MZW5ndGggPz8gKHRoaXMucHJvZHVjdCgpLmlnbm9yZU1pbkNvdW50Q2hlY2sgPyAwIDogdGhpcy5wcm9kdWN0KCkubWluQ291bnQpKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDQvNC10YLRgNCw0LYg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9kdWN0KCkucHJvcGVydGllcz8ubWF4TGVuZ3RoKTtcblxuICAgIC8qKlxuICAgICAqINCo0LDQsyDQuNC30LzQtdC90LXQvdC40Y8g0LzQtdGC0YDQsNC20LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxlbmd0aFN0ZXAgPSBjb21wdXRlZCgoKSA9PiBTY1VuaXRzSGVscGVyLmdldFByb2R1Y3RMZW5ndGhNdWx0aXBsaWNpdHkodGhpcy5wcm9kdWN0KCkpKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7Qu9C40YfQtdGB0YLQstC+INC30L3QsNC60L7QsiDQv9C+0YHQu9C1INC30LDQv9GP0YLQvtC5INCyINC/0L7Qu9C1INC80LXRgtGA0LDQttCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsZW5ndGhQcmVjaXNpb24gPSBjb21wdXRlZCgoKSA9PiBTY051bWJlckhlbHBlci5nZXREZWNpbWFsc0NvdW50KHRoaXMubGVuZ3RoU3RlcCgpKSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LTRgdC60LDQt9C60LAg0L/QviDQvNC40L3QuNC80LDQu9GM0L3QvtC80YMg0Lgg0LzQsNC60YHQuNC80LDQu9GM0L3QvtC80YMg0LzQtdGC0YDQsNC20YMg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsZW5ndGhIaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbkxlbmd0aCgpO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heExlbmd0aCgpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLW5lc3RlZC1jb25kaXRpb25hbFxuICAgICAgICByZXR1cm4gbWluIHx8IG1heCA/IGAoJHttaW4gPyBg0L7RgiAke21pbn1gIDogJyd9JHttaW4gJiYgbWF4ID8gJyAnIDogJyd9JHttYXggPyBg0LTQviAke21heH1gIDogJyd9ICR7dGhpcy5wcm9kdWN0KCkudW5pdC5uYW1lfSlgIDogJyc7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNGC0L7Qs9C+0LLQsNGPINGB0YLQvtC40LzQvtGB0YLRjCDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvdGFsQ29zdCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPdXRwdXR9INGB0L7QsdGL0YLQuNGPINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3Rgy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYWRkUHJvZHVjdCA9IG91dHB1dDxTY0lOZXdPcmRlckl0ZW1CYXNlPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE91dHB1dH0g0YHQvtCx0YvRgtC40Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRDYXJ0SXRlbSA9IG91dHB1dDxPbWl0PFNjSU5ld09yZGVySXRlbUJhc2UsICdwcm9kdWN0SWQnPj4oKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2UgPSBpbmplY3QoU2NVc2VyTWV0cmlrYVNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2UgPSBpbmplY3QoU2NDb252ZXJ0ZXJzU2VydmljZSk7XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXJ0SXRlbUFkZFNob3csXG4gICAgICAgICAgICBwYXJhbXM6IHsgcHJvZHVjdF9pZDogdGhpcy5wcm9kdWN0KCkuaWQgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJvZHVjdElzTWVhc3VyYWJsZSgpKSB7XG4gICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0L/QvtC70LUg0LLQstC+0LTQsCDQtNC70LjQvdGLLCDQtdGB0LvQuCDRgtC+0LLQsNGAINC40LfQvNC10YDRj9C10LzRi9C5LlxuICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ2xlbmd0aCcsIG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPih0aGlzLm9yZGVySXRlbSgpPy5sZW5ndGggPz8gdGhpcy5taW5MZW5ndGgoKSA/PyAwLjAxLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMC4wMSldKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQutC+0LvQuNGH0LXRgdGC0LLQviDQuNC3INC60L7RgNC30LjQvdGLINC40LvQuCDQutGA0LDRgtC90L7RgdGC0Lgg0YLQvtCy0LDRgNCwLlxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBxdWFudGl0eTogdGhpcy5vcmRlckl0ZW0oKT8ucXVhbnRpdHkgPz8gU2NVbml0c0hlbHBlci5nZXRQcm9kdWN0TXVsdGlwbGljaXR5KHRoaXMucHJvZHVjdCgpKSxcbiAgICAgICAgICAgIG1hcmtlcjogdGhpcy5vcmRlckl0ZW0oKT8ubWFya2VyID8/ICcnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5sZW5ndGhTdGVwKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMZW5ndGhDb25maWd1cmF0b3IoKSAmJiB0aGlzLmxlbmd0aFN0ZXAoKSAmJiB0aGlzLmZvcm0uY29udHJvbHMucXVhbnRpdHkudmFsdWUgJiYgc3RlcCkge1xuICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LXRgdGC0Ywg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGAINC00LvQuNC90YssINGA0LDRgdGB0YfQuNGC0YvQstCw0LXQvCDQvdCw0YfQsNC70YzQvdC+INC30L3QsNGH0LXQvdC40LUg0LTQu9C40L3Riy5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5sZW5ndGg/LnBhdGNoVmFsdWUoU2NOdW1iZXJIZWxwZXIubXVsdGlwbHlCeVN0ZXAodGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlLCBzdGVwKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0LLQsNC70LjQtNCw0YbQuNGOINGI0LDQs9CwINC00LvRjyDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LmFkZFZhbGlkYXRvcnMoc3RlcFZhbGlkYXRvcihTY1VuaXRzSGVscGVyLmdldFByb2R1Y3RNdWx0aXBsaWNpdHkodGhpcy5wcm9kdWN0KCkpKSk7XG4gICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCDQstCw0LvQuNC00LDRhtC40Y4g0YjQsNCz0LAg0LTQu9GPINC00LvQuNC90YsuXG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xlbmd0aCcpPy5hZGRWYWxpZGF0b3JzKHN0ZXBWYWxpZGF0b3IoU2NVbml0c0hlbHBlci5nZXRQcm9kdWN0TGVuZ3RoTXVsdGlwbGljaXR5KHRoaXMucHJvZHVjdCgpKSkpO1xuXG4gICAgICAgIC8vINCh0YfQuNGC0LDQtdC8INC40YLQvtCz0L7QstGD0Y4g0YHRgtC+0LjQvNC+0YHRgtGMINC30LDQutCw0LfQsC5cbiAgICAgICAgdGhpcy50b3RhbENvc3QkID0gdHVpQ29udHJvbFZhbHVlPHtcbiAgICAgICAgICAgIGxlbmd0aD86IG51bWJlcjtcbiAgICAgICAgICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgICAgIH0+KHRoaXMuZm9ybSkucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSwgLy8g0JjRgdC/0YDQsNCy0LvRj9C10Lwg0L7RiNC40LHQutGDIE5HMDk1MC5cbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cy5sZW5ndGggPT09IGN1cnJlbnQubGVuZ3RoICYmIHByZXZpb3VzLnF1YW50aXR5ID09PSBjdXJyZW50LnF1YW50aXR5KSwgLy8g0KLQvtC70YzQutC+INC/0YDQuCDQuNC30LzQtdC90LXQvdC40Lgg0LfQvdCw0YfQtdC90LjQuVxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybS52YWx1ZSBhcyB7IGxlbmd0aD86IG51bWJlcjsgcXVhbnRpdHk6IG51bWJlciB9KSxcbiAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICBtYXAoKFtwcmV2aW91cywgY3VycmVudF0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGhDb250cm9sID0gdGhpcy5mb3JtLmdldCgnbGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQvdC10YIg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAg0LTQu9C40L3RiyDQuNC70Lgg0L3QtdC60L7RgNGA0LXQutGC0L3Ri9C1INC00LDQvdC90YvQtSDigJQg0LLQvtC30LLRgNCw0YnQsNC10Lwg0LHQtdC3INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNMZW5ndGhDb25maWd1cmF0b3IoKSB8fCBpc1VuZGVmaW5lZChjdXJyZW50Lmxlbmd0aCkgfHwgIWxlbmd0aENvbnRyb2wgfHwgdGhpcy5mb3JtLmludmFsaWQgfHwgIXN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LjQt9C80LXQvdC40LvQvtGB0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g4oCUINC/0LXRgNC10YHRh9C40YLRi9Cy0LDQtdC8INC00LvQuNC90YMuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzLnF1YW50aXR5ICE9PSBjdXJyZW50LnF1YW50aXR5ICYmIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGhDb250cm9sLnBhdGNoVmFsdWUoU2NOdW1iZXJIZWxwZXIubXVsdGlwbHlCeVN0ZXAodGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlLCBzdGVwKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LjQt9C80LXQvdC40LvQsNGB0Ywg0LTQu9C40L3QsCDigJQg0L/QtdGA0LXRgdGH0LjRgtGL0LLQsNC10Lwg0LrQvtC70LjRh9C10YHRgtCy0L4g0Lgg0LLQvtC30LLRgNCw0YnQsNC10Lwg0LfQvdCw0YfQtdC90LjQtSDQtNC70LjQvdGLLlxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cy5sZW5ndGggIT09IGN1cnJlbnQubGVuZ3RoICYmIGxlbmd0aENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBTY051bWJlckhlbHBlci5kaXZpZGVCeVN0ZXAobGVuZ3RoQ29udHJvbC52YWx1ZSwgc3RlcCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZW5ndGg6IHN0ZXAsIHF1YW50aXR5OiBuZXdWYWx1ZSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdC8INC40YLQvtCz0L7QstGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0YDQsNGB0YfRkdGC0LAg0YHRgtC+0LjQvNC+0YHRgtC4LlxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxlbmd0aDogc3RlcCwgcXVhbnRpdHk6IGN1cnJlbnQucXVhbnRpdHkgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8g0KHRh9C40YLQsNC10Lwg0YHRgtC+0LjQvNC+0YHRgtGMOiDRhtC10L3QsCAqINC00LvQuNC90LAgKiDQutC+0LvQuNGH0LXRgdGC0LLQvi5cbiAgICAgICAgICAgIG1hcCgoeyBsZW5ndGgsIHF1YW50aXR5IH0pID0+IFNjTnVtYmVySGVscGVyLnJvdW5kTW9uZXkoKHRoaXMucHJvZHVjdCgpLmNvc3RSdWIgPz8gMCkgKiAobGVuZ3RoID8/IDEpICogcXVhbnRpdHkpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPINGI0LDQs9CwINC80LXRgtGA0LDQttCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAg0KjQsNCzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblN0ZXBMZW5ndGgoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxlbmd0aENvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdsZW5ndGgnKTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvZHVjdElzTWVhc3VyYWJsZSgpIHx8ICFsZW5ndGhDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBNYXRoLm1heCh0aGlzLm1pbkxlbmd0aCgpID8/IHN0ZXAsIFNjTnVtYmVySGVscGVyLmFkZFN0ZXAobGVuZ3RoQ29udHJvbC52YWx1ZSA/PyAwLCBzdGVwKSk7XG5cbiAgICAgICAgbGVuZ3RoQ29udHJvbC5zZXRWYWx1ZShTY051bWJlckhlbHBlci5zbmFwVG9TdGVwKG5ld0xlbmd0aCwgTWF0aC5hYnMoc3RlcCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDRiNCw0LPQsCDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwINCo0LDQsy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdGVwUXVhbnRpdHkoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlID8/IDA7XG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXVhbnRpdHkgPSBTY051bWJlckhlbHBlci5hZGRTdGVwKHF1YW50aXR5LCAtU2NOdW1iZXJIZWxwZXIucmVtYWluZGVyKHF1YW50aXR5LCBNYXRoLmFicyhzdGVwKSkpO1xuXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS5zZXRWYWx1ZShNYXRoLm1heCh0aGlzLnByb2R1Y3RNdWx0aXBsaWNpdHkoKSwgU2NOdW1iZXJIZWxwZXIuYWRkU3RlcChtdWx0aXBsZVF1YW50aXR5LCBzdGVwKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vINCj0LTQsNC70Y/QtdC8IG51bGwt0L/QvtC70Y8g0LjQtyDQt9C90LDRh9C10L3QuNGPINGE0L7RgNC80YsuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsPFNjSU5ld0NhcnRJdGVtTWVhc3VyZWQ+KHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lOZXdDYXJ0SXRlbU1lYXN1cmVkKTtcblxuICAgICAgICAvLyDQldGB0LvQuCDRjdGC0L4g0LTQvtCx0LDQstC70LXQvdC40LUg0L3QvtCy0L7Qs9C+INGC0L7QstCw0YDQsCDigJQg0LTQvtCx0LDQstC70Y/QtdC8IHByb2R1Y3RJZC5cbiAgICAgICAgaWYgKCF0aGlzLm9yZGVySXRlbSgpKSB7XG4gICAgICAgICAgICB2YWx1ZS5wcm9kdWN0SWQgPSB0aGlzLnByb2R1Y3QoKS5pZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmxlbmd0aFN0ZXAoKTtcblxuICAgICAgICAvLyDQldGB0LvQuCDRgtC+0LLQsNGAINC40LfQvNC10YDRj9C10LzRi9C5INC4INC10YHRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgCDQtNC70LjQvdGLIOKAlCDRg9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQtNC70LjQvdGDINC/0L4g0YjQsNCz0YMgKNC60L7Qu9C40YfQtdGB0YLQstC+INGD0LbQtSDQsdGD0LTQtdGCINCy0YvRh9C40YHQu9C10L3QviDQv9C+INGE0L7RgNC80YPQu9C1INCc0LXRgtGA0LDQti9taW4tY291bnQpXG4gICAgICAgIGlmICh0aGlzLnByb2R1Y3RJc01lYXN1cmFibGUoKSAmJiB0aGlzLmlzTGVuZ3RoQ29uZmlndXJhdG9yKCkgJiYgc3RlcCkge1xuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID0gc3RlcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCf0L7QvNC10YfQsNC10Lwg0LLRgdC1INC/0L7Qu9GPINGE0L7RgNC80Ysg0LrQsNC6IFwidG91Y2hcIiDQuCDQt9Cw0L/Rg9GB0LrQsNC10Lwg0LLQsNC70LjQtNCw0YbQuNGOINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC+0YjQuNCx0L7QuiDRgSDRgdC10YDQstC10YDQsC5cbiAgICAgICAgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSh0aGlzLmZvcm0pO1xuXG4gICAgICAgIC8vINCSINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDRgNC10LbQuNC80LAg4oCUINGA0LXQtNCw0LrRgtC40YDRg9C10Lwg0LjQu9C4INC00L7QsdCw0LLQu9GP0LXQvCDRgtC+0LLQsNGALlxuICAgICAgICBpZiAodGhpcy5vcmRlckl0ZW0oKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0Q2FydEl0ZW0uZW1pdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZFByb2R1Y3QuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tINCk0L7RgNC80LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0LjQt9C80LXRgNGP0LXQvNC+0LPQviDRgtC+0LLQsNGA0LAuIC0tPlxuPGZvcm1cbiAgICAqbmdJZj1cInByb2R1Y3RcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIlxuICAgIFNjTmV4dElucHV0Rm9jdXNcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIlxuPlxuICAgIEBsZXQgc3RlcCA9IGxlbmd0aFN0ZXAoKTtcblxuICAgIDwhLS0g0JTQu9C40L3QsCDRgtC+0LLQsNGA0LAgKNC80LXRgtGA0LDQtikgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwicHJvZHVjdElzTWVhc3VyYWJsZSgpXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCc0LXRgtGA0LDQtiwge3sgcHJvZHVjdCgpLnVuaXQubmFtZSB9fVxuICAgICAgICBAaWYgKCFzdGVwIHx8IG1heExlbmd0aCgpKSB7XG4gICAgICAgICAgICB7eyBsZW5ndGhIaW50KCkgfX1cbiAgICAgICAgfVxuXG4gICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpSW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0dWlOdW1iZXJGb3JtYXRdPVwieyBwcmVjaXNpb246IGxlbmd0aFByZWNpc2lvbigpIH1cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4TGVuZ3RoKCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5MZW5ndGgoKSB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwib25TdGVwTGVuZ3RoKC0obGVuZ3RoU3RlcCgpID8/IDAuMDEpKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3dVcCk9XCJvblN0ZXBMZW5ndGgobGVuZ3RoU3RlcCgpID8/IDAuMDEpXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwibGVuZ3RoU3RlcCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQnNC10YLRgNCw0LYg0LTQvtC70LbQtdC9INCx0YvRgtGMINC60YDQsNGC0LXQvSB7eyBsZW5ndGhTdGVwKCkgfX1cbiAgICAgICAgPC9wPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCa0L7Qu9C40YfQtdGB0YLQstC+INGC0L7QstCw0YDQsCAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCa0L7Qu9C40YfQtdGB0YLQstC+LCDRiNGCLlxuICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgIDx0dWktY2hpcFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMZW5ndGhDb25maWd1cmF0b3IoKSAmJiBwcm9kdWN0TXVsdGlwbGljaXR5KCkgJiYgc3RlcFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJuZWdhdGl2ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHgge3sgc3RlcCB9fSB7eyBwcm9kdWN0KCkudW5pdC5uYW1lIH19XG4gICAgICAgICAgICA8L3R1aS1jaGlwPlxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCa0L7Qu9C40YfQtdGB0YLQstC+XCJcbiAgICAgICAgICAgICAgICB0dWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFt0dWlOdW1iZXJGb3JtYXRdPVwieyBkZWNpbWFsTW9kZTogJ25vdC16ZXJvJyB9XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cInByb2R1Y3RNdWx0aXBsaWNpdHkoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3dEb3duKT1cIm9uU3RlcFF1YW50aXR5KC1wcm9kdWN0TXVsdGlwbGljaXR5KCkpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd1VwKT1cIm9uU3RlcFF1YW50aXR5KHByb2R1Y3RNdWx0aXBsaWNpdHkoKSlcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInF1YW50aXR5XCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJxdWFudGl0eVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgIDxwIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIj7QmtC+0LvQuNGH0LXRgdGC0LLQviDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LrRgNCw0YLQvdC+IHt7IHByb2R1Y3RNdWx0aXBsaWNpdHkoKSB9fTwvcD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicXVhbnRpdHlcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQnNCw0YDQutC40YDQvtCy0LrQsCAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCc0LDRgNC60LjRgNC+0LLQutCwXG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWFya2VyXCI+XG4gICAgICAgICAgICDQnNCw0YDQutC40YDQvtCy0LrQsFxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkTGVnYWN5XG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibWFya2VyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXJrZXJcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQmtC90L7Qv9C60LAg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3RgyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgQGxldCBjb3N0ID0gdG90YWxDb3N0JCB8IGFzeW5jO1xuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb3N0XCI+XG4gICAgICAgICAgICDQmNGC0L7Qs9C+OjxzcGFuIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgY29zdCB8IHR1aUZvcm1hdE51bWJlcjogbW9uZXlGb3JtYXQgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QoKS5jdXJyZW5jeS5zeW1ib2wgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSDQmtC90L7Qv9C60LAg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3RgyAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZWNrXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBjbGFzcz1cIm10LTJcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBvcmRlckl0ZW0oKSA/ICfQmNC30LzQtdC90LjRgtGMJyA6ICfQlNC+0LHQsNCy0LjRgtGMINCyINC60L7RgNC30LjQvdGDJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from './add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component';
2
- export * from './sc-add-or-editing-cart-item-dialog.component';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEVBQTRFLENBQUM7QUFDM0YsY0FBYyxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0vc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy5jb21wb25lbnQnO1xuIl19
@@ -1,75 +0,0 @@
1
- /* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */
2
- import { HttpErrorResponse } from '@angular/common/http';
3
- import { ChangeDetectionStrategy, Component, inject, viewChild } from '@angular/core';
4
- import { toSignal } from '@angular/core/rxjs-interop';
5
- import { loadingPlaceholder, SC_ORDER_LOADER, } from '@snabcentr/client-core';
6
- import { injectContext } from '@taiga-ui/polymorpheus';
7
- import { isObject } from 'lodash-es';
8
- import { catchError, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
9
- import { ScAddOrEditingCartItemFormComponent } from './add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component';
10
- import * as i0 from "@angular/core";
11
- /**
12
- * Компонент добавления / изменения товара в корзине.
13
- */
14
- export class ScAddOrEditingCartItemDialogComponent {
15
- constructor() {
16
- /**
17
- * Компонент формы добавления / изменения товара в корзине.
18
- */
19
- this.formComponent = viewChild.required(ScAddOrEditingCartItemFormComponent);
20
- /**
21
- * {@link Subject} события отправки формы.
22
- */
23
- this.onSubmit = new Subject();
24
- /**
25
- * {@link Observable} запроса добавления / изменения товара в корзине.
26
- */
27
- this.submit$ = this.onSubmit.pipe(switchMap((value) => (this.orderItem && !('productId' in value) && 'updateProduct$' in this.orderService
28
- ? this.orderService.updateProduct$(this.orderItem.id, value, this.context.data.orderId)
29
- : this.orderService.addProduct$(value, this.context.data.orderId)).pipe(tap(() => {
30
- this.context.$implicit.complete();
31
- }), catchError((error) => {
32
- if (error instanceof HttpErrorResponse) {
33
- const { errors, message } = error.error;
34
- if (errors && isObject(errors)) {
35
- Object.entries(errors).forEach(([k, v]) => {
36
- this.formComponent().form.get(k)?.setErrors({ serverResponse: v });
37
- });
38
- }
39
- if (message) {
40
- this.formComponent().form.setErrors({ serverResponse: [message] });
41
- }
42
- this.formComponent().form.updateValueAndValidity();
43
- this.formComponent().form.markAsDirty();
44
- }
45
- return of();
46
- }), startWith(loadingPlaceholder))), share());
47
- /**
48
- * {@link Observable} изменения состояния загрузки данных.
49
- */
50
- this.loading = toSignal(this.submit$.pipe(map((data) => data === loadingPlaceholder)), { initialValue: false });
51
- /**
52
- * Контекст диалогового окна.
53
- */
54
- this.context = injectContext();
55
- /**
56
- * Данные о товаре.
57
- */
58
- this.product = this.context.data.product;
59
- /**
60
- * Данные о товаре в корзине.
61
- */
62
- this.orderItem = this.context.data.orderItem;
63
- /**
64
- * Сервис получения и редактирования списка товаров заказа (корзина / заказ / черновик = заказ).
65
- */
66
- this.orderService = inject(SC_ORDER_LOADER);
67
- }
68
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
69
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemDialogComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-dialog", viewQueries: [{ propertyName: "formComponent", first: true, predicate: ScAddOrEditingCartItemFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [orderItem]=\"orderItem\"\n (addProduct)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n", dependencies: [{ kind: "component", type: ScAddOrEditingCartItemFormComponent, selector: "sc-add-or-editing-cart-item-form", inputs: ["product", "orderItem", "isLoading"], outputs: ["addProduct", "editCartItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
70
- }
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemDialogComponent, decorators: [{
72
- type: Component,
73
- args: [{ standalone: true, selector: 'sc-add-or-editing-cart-item-dialog', imports: [ScAddOrEditingCartItemFormComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [orderItem]=\"orderItem\"\n (addProduct)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n" }]
74
- }] });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRIQUE0SDtBQUU1SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZUFBZSxHQVFsQixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDRFQUE0RSxDQUFDOztBQUVqSTs7R0FFRztBQVFILE1BQU0sT0FBTyxxQ0FBcUM7SUFQbEQ7UUFRSTs7V0FFRztRQUNhLGtCQUFhLEdB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RVkscUNBQXFDO21HQUFyQyxxQ0FBcUMsNklBSTBDLG1DQUFtQyxnRUNyQy9ILDhTQVNBLDRDRHFCYyxtQ0FBbUM7OzRGQUdwQyxxQ0FBcUM7a0JBUGpELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUVyQyxDQUFDLG1DQUFtQyxDQUFDLG1CQUM3Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9uby1uZXN0ZWQtdGVtcGxhdGUtbGl0ZXJhbHMsQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgU2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgICBsb2FkaW5nUGxhY2Vob2xkZXIsXG4gICAgU0NfT1JERVJfTE9BREVSLFxuICAgIFNjQ2FydCxcbiAgICBTY0lBcGlFcnJvclJlc3BvbnNlLFxuICAgIFNjSU5ld09yZGVySXRlbUJhc2UsXG4gICAgU2NJT3JkZXJFZGl0b3JMb2FkZXIsXG4gICAgU2NPcmRlckRyYWZ0LFxuICAgIFNjT3JkZXJJdGVtLFxuICAgIFNjUHJvZHVjdCxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0IH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Q29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NBZGRPckVkaXRpbmdDYXJ0SXRlbUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2FkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtLmNvbXBvbmVudCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00L7QsdCw0LLQu9C10L3QuNGPIC8g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbU2NBZGRPckVkaXRpbmdDYXJ0SXRlbUZvcm1Db21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRGlhbG9nQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0LzQv9C+0L3QtdC90YIg0YTQvtGA0LzRiyDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINC40LfQvNC10L3QtdC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm1Db21wb25lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8U2NBZGRPckVkaXRpbmdDYXJ0SXRlbUZvcm1Db21wb25lbnQ+KFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50KTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PFNjSU5ld09yZGVySXRlbUJhc2U+ID0gbmV3IFN1YmplY3Q8U2NJTmV3T3JkZXJJdGVtQmFzZT4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINC40LfQvNC10L3QtdC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Ym1pdCQgPSB0aGlzLm9uU3VibWl0LnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICAodGhpcy5vcmRlckl0ZW0gJiYgISgncHJvZHVjdElkJyBpbiB2YWx1ZSkgJiYgJ3VwZGF0ZVByb2R1Y3QkJyBpbiB0aGlzLm9yZGVyU2VydmljZVxuICAgICAgICAgICAgICAgID8gdGhpcy5vcmRlclNlcnZpY2UudXBkYXRlUHJvZHVjdCQodGhpcy5vcmRlckl0ZW0uaWQsIHZhbHVlLCB0aGlzLmNvbnRleHQuZGF0YS5vcmRlcklkKVxuICAgICAgICAgICAgICAgIDogdGhpcy5vcmRlclNlcnZpY2UuYWRkUHJvZHVjdCQodmFsdWUsIHRoaXMuY29udGV4dC5kYXRhLm9yZGVySWQpXG4gICAgICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycyAmJiBpc09iamVjdChlcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50KCkuZm9ybS5nZXQoayk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiB2IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudCgpLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50KCkuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQoKS5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKGxvYWRpbmdQbGFjZWhvbGRlcilcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5zdWJtaXQkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhID09PSBsb2FkaW5nUGxhY2Vob2xkZXIpKSwgeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb250ZXh0ID0gaW5qZWN0Q29udGV4dDxUdWlEaWFsb2dDb250ZXh0PGJvb2xlYW4sIHsgcHJvZHVjdDogU2NQcm9kdWN0OyBvcmRlckl0ZW06IFNjT3JkZXJJdGVtIHwgdW5kZWZpbmVkOyBvcmRlcklkOiBudW1iZXIgfCB1bmRlZmluZWQgfT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9kdWN0ID0gdGhpcy5jb250ZXh0LmRhdGEucHJvZHVjdDtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9yZGVySXRlbSA9IHRoaXMuY29udGV4dC5kYXRhLm9yZGVySXRlbTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQv9C+0LvRg9GH0LXQvdC40Y8g0Lgg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LfQsNC60LDQt9CwICjQutC+0YDQt9C40L3QsCAvINC30LDQutCw0LcgLyDRh9C10YDQvdC+0LLQuNC6ID0g0LfQsNC60LDQtykuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVyU2VydmljZSA9IGluamVjdDxTY0lPcmRlckVkaXRvckxvYWRlcjxTY09yZGVySXRlbSwgU2NDYXJ0IHwgU2NPcmRlckRyYWZ0Pj4oU0NfT1JERVJfTE9BREVSKTtcbn1cbiIsIkBpZiAocHJvZHVjdCkge1xuICAgIDxzYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybVxuICAgICAgICBbcHJvZHVjdF09XCJwcm9kdWN0XCJcbiAgICAgICAgW29yZGVySXRlbV09XCJvcmRlckl0ZW1cIlxuICAgICAgICAoYWRkUHJvZHVjdCk9XCJvblN1Ym1pdC5uZXh0KCRldmVudClcIlxuICAgICAgICAoZWRpdENhcnRJdGVtKT1cIm9uU3VibWl0Lm5leHQoJGV2ZW50KVwiXG4gICAgICAgIFtpc0xvYWRpbmddPVwibG9hZGluZygpXCJcbiAgICA+PC9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybT5cbn1cbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from './sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component';
2
- export * from './add-or-editing-cart-item-dialog';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVGQUF1RixDQUFDO0FBQ3RHLGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZyc7XG4iXX0=
@@ -1,110 +0,0 @@
1
- import { NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { toSignal } from '@angular/core/rxjs-interop';
4
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
5
- import { WA_WINDOW } from '@ng-web-apis/common';
6
- import { ScCartService, ScUploadedFile } from '@snabcentr/client-core';
7
- import { tuiIsPresent } from '@taiga-ui/cdk';
8
- import { TuiButton, TuiLink, TuiLoader } from '@taiga-ui/core';
9
- import { TuiButtonLoading, TuiFiles } from '@taiga-ui/kit';
10
- import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
11
- import { filter, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@taiga-ui/kit";
14
- import * as i2 from "@angular/forms";
15
- /**
16
- * Компонент диалога для добавления товаров в корзину из CSV файла.
17
- */
18
- export class ScCartAddProductsFromCsvDialogComponent {
19
- constructor() {
20
- /**
21
- * Контекст диалогового окна, в котором открыт компонент.
22
- */
23
- this.context = inject(POLYMORPHEUS_CONTEXT);
24
- /**
25
- * Сервис для работы с корзиной.
26
- */
27
- this.cartService = inject(ScCartService);
28
- /**
29
- * Объект окна.
30
- */
31
- this.window = inject(WA_WINDOW);
32
- /**
33
- * {@link Subject} события скачивания цен каталога.
34
- */
35
- this.onDownloadClick = new Subject();
36
- /**
37
- * {@link Observable} запроса на скачивание цен каталога.
38
- */
39
- this.downloadRequest$ = this.onDownloadClick.pipe(switchMap(() => this.cartService.getCartCsvExample$().pipe(tap((blob) => {
40
- this.downloadExampleFile(blob);
41
- }), startWith(null))), share(),
42
- // eslint-disable-next-line unicorn/no-useless-undefined
43
- startWith(undefined));
44
- /**
45
- * Признак того, что запрос выполняется.
46
- */
47
- this.isDownloadLoading = toSignal(this.downloadRequest$.pipe(map((value) => value === null)), {
48
- initialValue: false,
49
- });
50
- /**
51
- * {@link Subject} события отправки формы.
52
- */
53
- this.onSubmit$ = new Subject();
54
- /**
55
- * {@link Observable} запроса на добавление товаров из CSV файла.
56
- */
57
- this.submitRequest$ = this.onSubmit$.pipe(map(() => this.control.value), filter(tuiIsPresent), switchMap((file) => new Observable((observer) => {
58
- const reader = new FileReader();
59
- reader.addEventListener('load', () => {
60
- observer.next(new ScUploadedFile(file.name, reader.result));
61
- });
62
- reader.addEventListener('error', (e) => {
63
- observer.error(e);
64
- });
65
- reader.readAsDataURL(file);
66
- return () => {
67
- reader.abort();
68
- };
69
- })), switchMap((file) => this.cartService.addProductsFromCsv$(file).pipe(tap(() => {
70
- this.context.$implicit.complete();
71
- }), startWith(null))));
72
- /**
73
- * Признак того, что запрос на добавление товаров выполняется.
74
- */
75
- this.isSubmitLoading = toSignal(this.submitRequest$.pipe(map((value) => value === null)), {
76
- initialValue: false,
77
- });
78
- /**
79
- * Поле для загрузки файла.
80
- */
81
- this.control = new FormControl(null);
82
- }
83
- /**
84
- * Метод для удаления загруженного файла.
85
- */
86
- removeFile() {
87
- this.control.setValue(null);
88
- }
89
- /**
90
- * Метод для скачивания примера файла.
91
- *
92
- * @param blob Бинарный объект.
93
- */
94
- downloadExampleFile(blob) {
95
- const url = this.window.URL.createObjectURL(blob);
96
- // используем ссылку и download, чтобы указать название файла.
97
- const a = this.window.document.createElement('a');
98
- a.href = url;
99
- a.download = 'Пример файла добавления товаров в корзину.csv';
100
- a.click();
101
- this.window.URL.revokeObjectURL(url);
102
- }
103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCartAddProductsFromCsvDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
104
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScCartAddProductsFromCsvDialogComponent, isStandalone: true, selector: "sc-cart-add-products-from-csv-dialog", ngImport: i0, template: "<div class=\"flex flex-col items-center gap-8\">\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"isDownloadLoading()\"\n size=\"s\"\n class=\"mt-8\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"onDownloadClick.next()\"\n >\n \u041F\u0440\u0438\u043C\u0435\u0440 .csv \u0444\u0430\u0439\u043B\u0430\n </button>\n </tui-loader>\n\n <div class=\"flex w-full flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"w-full\"\n >\n <input\n accept=\"text/csv\"\n tuiInputFiles\n [formControl]=\"control\"\n />\n </label>\n\n <tui-files class=\"tui-space_top-1\">\n <tui-file\n *ngIf=\"control.value as file\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n </tui-files>\n </div>\n <div class=\"flex gap-2\">\n <button\n tuiButton\n [disabled]=\"!control.value\"\n [loading]=\"isSubmitLoading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n (click)=\"onSubmit$.next()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: i1.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i1.TuiInputFiles, selector: "label[tuiInputFiles]" }, { kind: "component", type: i1.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "directive", type: i1.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
105
- }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCartAddProductsFromCsvDialogComponent, decorators: [{
107
- type: Component,
108
- args: [{ standalone: true, selector: 'sc-cart-add-products-from-csv-dialog', imports: [TuiLink, TuiLoader, TuiFiles, ReactiveFormsModule, NgIf, TuiButton, TuiButtonLoading], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center gap-8\">\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"isDownloadLoading()\"\n size=\"s\"\n class=\"mt-8\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"onDownloadClick.next()\"\n >\n \u041F\u0440\u0438\u043C\u0435\u0440 .csv \u0444\u0430\u0439\u043B\u0430\n </button>\n </tui-loader>\n\n <div class=\"flex w-full flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"w-full\"\n >\n <input\n accept=\"text/csv\"\n tuiInputFiles\n [formControl]=\"control\"\n />\n </label>\n\n <tui-files class=\"tui-space_top-1\">\n <tui-file\n *ngIf=\"control.value as file\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n </tui-files>\n </div>\n <div class=\"flex gap-2\">\n <button\n tuiButton\n [disabled]=\"!control.value\"\n [loading]=\"isSubmitLoading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n (click)=\"onSubmit$.next()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n </div>\n</div>\n" }]
109
- }] });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXJ0L3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvc2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nL3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxN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QW1CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFDOUUsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBXQV9XSU5ET1cgfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7IFNjQ2FydFNlcnZpY2UsIFNjVXBsb2FkZWRGaWxlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRGlhbG9nQ29udGV4dCwgVHVpTGluaywgVHVpTG9hZGVyIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpRmlsZXMgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQuNCw0LvQvtCz0LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQvtCyINCyINC60L7RgNC30LjQvdGDINC40LcgQ1NWINGE0LDQudC70LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtUdWlMaW5rLCBUdWlMb2FkZXIsIFR1aUZpbGVzLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBOZ0lmLCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRBZGRQcm9kdWN0c0Zyb21Dc3ZEaWFsb2dDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dCA9IGluamVjdDxUdWlEaWFsb2dDb250ZXh0PihQT0xZTU9SUEhFVVNfQ09OVEVYVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0YDQt9C40L3QvtC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IFNjQ2FydFNlcnZpY2UgPSBpbmplY3QoU2NDYXJ0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0L7QutC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3c6IFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzID0gaW5qZWN0PFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzPihXQV9XSU5ET1cpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINGB0LrQsNGH0LjQstCw0L3QuNGPINGG0LXQvSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvbkRvd25sb2FkQ2xpY2s6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC90LAg0YHQutCw0YfQuNCy0LDQvdC40LUg0YbQtdC9INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvd25sb2FkUmVxdWVzdCQgPSB0aGlzLm9uRG93bmxvYWRDbGljay5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydENzdkV4YW1wbGUkKCkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJsb2I6IEJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEV4YW1wbGVGaWxlKGJsb2IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC30LDQv9GA0L7RgSDQstGL0L/QvtC70L3Rj9C10YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rvd25sb2FkTG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IG51bGwpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC00L7QsdCw0LLQu9C10L3QuNC1INGC0L7QstCw0YDQvtCyINC40LcgQ1NWINGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1Ym1pdFJlcXVlc3QkID0gdGhpcy5vblN1Ym1pdCQucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29udHJvbC52YWx1ZSksXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAoZmlsZTogRmlsZSkgPT5cbiAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxTY1VwbG9hZGVkRmlsZT4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY1VwbG9hZGVkRmlsZShmaWxlLm5hbWUsIHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoZmlsZSkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkUHJvZHVjdHNGcm9tQ3N2JChmaWxlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC30LDQv9GA0L7RgSDQvdCwINC00L7QsdCw0LLQu9C10L3QuNC1INGC0L7QstCw0YDQvtCyINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU3VibWl0TG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5zdWJtaXRSZXF1ZXN0JC5waXBlKG1hcCgodmFsdWUpID0+IHZhbHVlID09PSBudWxsKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9C1INC00LvRjyDQt9Cw0LPRgNGD0LfQutC4INGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2w6IEZvcm1Db250cm9sPEZpbGUgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxGaWxlIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQvtC0INC00LvRjyDRg9C00LDQu9C10L3QuNGPINC30LDQs9GA0YPQttC10L3QvdC+0LPQviDRhNCw0LnQu9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVGaWxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0L7QtCDQtNC70Y8g0YHQutCw0YfQuNCy0LDQvdC40Y8g0L/RgNC40LzQtdGA0LAg0YTQsNC50LvQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iINCR0LjQvdCw0YDQvdGL0Lkg0L7QsdGK0LXQutGCLlxuICAgICAqL1xuICAgIHByaXZhdGUgZG93bmxvYWRFeGFtcGxlRmlsZShibG9iOiBCbG9iKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMud2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIC8vINC40YHQv9C+0LvRjNC30YPQtdC8INGB0YHRi9C70LrRgyDQuCBkb3dubG9hZCwg0YfRgtC+0LHRiyDRg9C60LDQt9Cw0YLRjCDQvdCw0LfQstCw0L3QuNC1INGE0LDQudC70LAuXG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gJ9Cf0YDQuNC80LXRgCDRhNCw0LnQu9CwINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQvtCyINCyINC60L7RgNC30LjQvdGDLmNzdic7XG4gICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgdGhpcy53aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtOFwiPlxuICAgIDx0dWktbG9hZGVyXG4gICAgICAgIFtvdmVybGF5XT1cInRydWVcIlxuICAgICAgICBbc2hvd0xvYWRlcl09XCJpc0Rvd25sb2FkTG9hZGluZygpXCJcbiAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICBjbGFzcz1cIm10LThcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgW3BzZXVkb109XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWRDbGljay5uZXh0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQn9GA0LjQvNC10YAgLmNzdiDRhNCw0LnQu9CwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvdHVpLWxvYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgYWNjZXB0PVwidGV4dC9jc3ZcIlxuICAgICAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDx0dWktZmlsZXMgY2xhc3M9XCJ0dWktc3BhY2VfdG9wLTFcIj5cbiAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC52YWx1ZSBhcyBmaWxlXCJcbiAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS1maWxlcz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJpc1N1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnNjLnNlbmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQkLm5leHQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCX0LDQs9GA0YPQt9C40YLRjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQntGC0LzQtdC90LBcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==