@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,387 +0,0 @@
1
- /* eslint-disable @typescript-eslint/unbound-method */
2
- import { AsyncPipe } from '@angular/common';
3
- import { HttpErrorResponse } from '@angular/common/http';
4
- import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, Input, input, output, signal } from '@angular/core';
5
- import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
6
- import { FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
7
- import { SC_ORDER_LOADER, ScCatalogService, ScConfiguratorService, ScConvertersService, ScNumberHelper, } from '@snabcentr/client-core';
8
- import { tuiControlValue } from '@taiga-ui/cdk';
9
- import { TuiButton, TuiError, TuiFormatNumberPipe, tuiItemsHandlersProvider, TuiLabel, TuiLoader, TuiNumberFormat, tuiNumberFormatProvider, TuiTextfield, } from '@taiga-ui/core';
10
- import { TuiButtonLoading, TuiChevron, TuiDataListWrapperComponent, TuiFieldErrorPipe, TuiInputNumber, tuiInputNumberOptionsProvider, TuiInputSlider, TuiSelect, } from '@taiga-ui/kit';
11
- import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
12
- import { BehaviorSubject, catchError, filter, finalize, map, merge, of, share, skip, startWith, Subject, switchMap, tap } from 'rxjs';
13
- import { ScNextInputFocusModule } from '../../directives/next-input-focus/sc-next-input-focus.module';
14
- import { ScSelectOnFocusinDirective } from '../../directives/select-on-focusin/sc-select-on-focusin.directive';
15
- import { SC_DEBOUNCE_TIME_DEFAULT } from '../../providers';
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/core";
21
- import * as i4 from "@taiga-ui/kit";
22
- import * as i5 from "@taiga-ui/kit/components/slider";
23
- /**
24
- * Конфигуратор распила сэндвич-панелей.
25
- */
26
- export class ScSandwichComponent {
27
- constructor() {
28
- /**
29
- * Настройки вывода сумм в рублях.
30
- */
31
- this.moneyFormat = ScNumberHelper.getMoneyFormat();
32
- /**
33
- * Данные настроек окружения.
34
- */
35
- this.debounceTimeDefault = inject(SC_DEBOUNCE_TIME_DEFAULT);
36
- /**
37
- * Настройки для конфигуратора сэндвич-панелей.
38
- */
39
- this.settings = input();
40
- /**
41
- * Идентификатор категории.
42
- */
43
- this.categoryId = input.required();
44
- /**
45
- * Название конфигуратора.
46
- */
47
- this.editor = input.required();
48
- /**
49
- * Позиция товара/услуги в корзине.
50
- */
51
- this.orderItem = input.required();
52
- /**
53
- * Событие переключения отображения товаров.
54
- */
55
- this.toggleShowEvent = output();
56
- /**
57
- * Форма добавления/редактирования продукта в корзине.
58
- */
59
- this.form = new FormGroup({
60
- productCategoryId: new FormControl(null, { validators: Validators.required }),
61
- configurator: new FormControl(null, { validators: Validators.required }),
62
- quantity: new FormControl(null, { validators: [Validators.required, stepValidator(1)] }),
63
- marker: new FormControl(null),
64
- items: new FormArray([]),
65
- calculationId: new FormControl(null),
66
- });
67
- /**
68
- * Сервис получения и редактирования списка товаров заказа (корзина / заказ / черновик = заказ).
69
- */
70
- this.orderService = inject(SC_ORDER_LOADER);
71
- /**
72
- * Сервис конвертации данных.
73
- */
74
- this.convertersService = inject(ScConvertersService);
75
- /**
76
- * Контекст диалогового окна, в котором открыт компонент.
77
- */
78
- this.context = inject(POLYMORPHEUS_CONTEXT, { optional: true });
79
- /**
80
- * Сервис для работы с каталогом.
81
- */
82
- this.catalogService = inject(ScCatalogService);
83
- /**
84
- * Сервис для работы с конфигураторами.
85
- */
86
- this.configuratorService = inject(ScConfiguratorService);
87
- /**
88
- * {@link Observable} списка товаров категории.
89
- */
90
- this.products$ = toObservable(this.categoryId).pipe(switchMap((categoryId) => {
91
- if (!categoryId) {
92
- return of([]);
93
- }
94
- return this.catalogService.getProductsCategoryCached$({ categoryId: Number(categoryId) }).pipe(map((products) => products ?? []));
95
- }));
96
- /**
97
- * Выбранный продукт (материал для раскроя).
98
- */
99
- this.product = new FormControl(null, { validators: Validators.required });
100
- /**
101
- * Сигнал текущего выбранного продукта — используется в шаблоне для диапазонов и кнопок.
102
- */
103
- this.productSignal = toSignal(tuiControlValue(this.product), { initialValue: null });
104
- /**
105
- * Субъект для ручного запуска расчёта.
106
- */
107
- this.calculateTrigger$ = new Subject();
108
- /**
109
- * Источник начального результата расчёта для режима редактирования.
110
- */
111
- this.seedCalculateResult$ = new BehaviorSubject(undefined);
112
- /**
113
- * {@link Observable} расчета оптимизации раскладки.
114
- */
115
- this.calculate$ = merge(this.seedCalculateResult$, merge(tuiControlValue(this.product).pipe(skip(1)), tuiControlValue(this.items).pipe(skip(1))).pipe(
116
- // eslint-disable-next-line unicorn/no-useless-undefined
117
- map(() => undefined)), this.calculateTrigger$.pipe(switchMap(() => {
118
- const productId = this.product.value?.id ?? null;
119
- const items = this.items.value;
120
- if (productId === null || items.length === 0 || this.form.controls.items.invalid) {
121
- // eslint-disable-next-line unicorn/no-useless-undefined
122
- return of(undefined);
123
- }
124
- return this.configuratorService.calculate$(this.categoryId(), this.editor(), { productId, items }).pipe(tap((calculateResult) => {
125
- this.form.get('quantity')?.setValue(calculateResult.quantity);
126
- }), startWith(null), catchError(() => of(null)));
127
- }))).pipe(share());
128
- /**
129
- * Результат расчета оптимизации раскладки.
130
- */
131
- this.calculateResult$ = this.calculate$.pipe(filter((data) => data !== null));
132
- /**
133
- * Сигнал состояния загрузки расчета.
134
- */
135
- this.isCalculateLoading = toSignal(this.calculate$.pipe(map((data) => data === null)), { initialValue: false });
136
- /**
137
- * Валидатор для ширины изделия.
138
- */
139
- this.validatorWidth$ = tuiControlValue(this.product).pipe(map((product) => Validators.min(product?.properties?.width ?? 0)));
140
- /**
141
- * Валидатор для длины изделия.
142
- */
143
- this.validatorLength$ = tuiControlValue(this.product).pipe(map((product) => Validators.min(product?.properties?.length ?? 0)));
144
- /**
145
- * Текст ограничения по ширине («от … до …»), пока выбран товар.
146
- */
147
- this.widthRangeText = computed(() => this.formatRange(this.settings()?.minWidth ?? null, this.productSignal()?.properties?.width ?? null, 'мм'));
148
- /**
149
- * Текст ограничения по длине («от … до …»), пока выбран товар.
150
- */
151
- this.lengthRangeText = computed(() => this.formatRange(this.settings()?.minLength ?? null, this.productSignal()?.properties?.length ?? null, 'мм'));
152
- /**
153
- * Признак того, что выполняется запрос на отправку данных выполняется.
154
- */
155
- this.isSubmitLoading = signal(false);
156
- /**
157
- * Ссылка для автоматического управления уничтожением зависимостей.
158
- */
159
- this.destroyRef = inject(DestroyRef);
160
- }
161
- /**
162
- * Массив изделий.
163
- */
164
- get items() {
165
- return this.form.controls.items;
166
- }
167
- /** @inheritDoc */
168
- ngOnInit() {
169
- this.setDefaultFormValue();
170
- this.product.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((product) => {
171
- if (product) {
172
- this.items.controls.forEach((item) => {
173
- const value = item.getRawValue();
174
- if ((product.properties?.width && value.width < product.properties.width) || (product.properties?.length && value.length < product.properties.length)) {
175
- item.patchValue({
176
- width: Math.min(value.width, product.properties.width ?? value.width),
177
- length: Math.min(value.length, product.properties.length ?? value.length),
178
- });
179
- }
180
- });
181
- }
182
- });
183
- }
184
- /**
185
- * Создает группу для изделия.
186
- *
187
- * @param item Параметры изделия.
188
- */
189
- createItemGroup(item) {
190
- return new FormGroup({
191
- width: new FormControl(item?.width ?? 0, {
192
- validators: [Validators.required, Validators.min(this.settings()?.minWidth ?? 0.01)],
193
- nonNullable: true,
194
- }),
195
- length: new FormControl(item?.length ?? 0, {
196
- validators: [Validators.required, Validators.min(this.settings()?.minLength ?? 0.01)],
197
- nonNullable: true,
198
- }),
199
- count: new FormControl(item?.count ?? 1, {
200
- validators: [Validators.required, Validators.min(1)],
201
- nonNullable: true,
202
- }),
203
- });
204
- }
205
- /**
206
- * Добавляет новое изделие в форму.
207
- */
208
- addItem() {
209
- this.items.push(this.createItemGroup());
210
- }
211
- /**
212
- * Удаляет изделие из формы.
213
- *
214
- * @param index Индекс изделия.
215
- */
216
- removeItem(index) {
217
- this.items.removeAt(index);
218
- }
219
- /**
220
- * Запускает расчёт количества требуемых панелей.
221
- */
222
- triggerCalculate() {
223
- this.calculateTrigger$.next();
224
- }
225
- /**
226
- * Возвращает итоговую стоимость.
227
- *
228
- * @param calculateResult Результат расчета оптимизации раскладки.
229
- */
230
- getTotalCost(calculateResult) {
231
- if (!this.product.value?.costRub) {
232
- return 0;
233
- }
234
- const totalCost = calculateResult.quantity * this.product.value.costRub;
235
- return ScNumberHelper.roundMoney(totalCost);
236
- }
237
- /**
238
- * Обработчик добавления/редактирования продукта в корзине.
239
- *
240
- * @param calculateResult Результат расчета оптимизации раскладки.
241
- */
242
- onSubmit(calculateResult) {
243
- if (!calculateResult || this.form.invalid || this.isCalculateLoading()) {
244
- return;
245
- }
246
- const formValue = this.convertersService.removeNull({
247
- ...this.form.value,
248
- productId: this.product.value?.id ?? null,
249
- calculationId: calculateResult.id,
250
- });
251
- // Удаляем items, так как они не нужны в {@link ScINewCartItemSandwich}.
252
- delete formValue.items;
253
- const orderData = this.orderItem();
254
- const newCartItem$ = orderData
255
- ? this.orderService.updateProduct$(orderData.id, formValue, this.orderId).pipe(startWith(null))
256
- : this.orderService.addProduct$(formValue, this.orderId);
257
- this.isSubmitLoading.set(true);
258
- newCartItem$
259
- .pipe(tap(() => {
260
- if (this.context) {
261
- this.context.$implicit.complete();
262
- }
263
- else {
264
- this.setDefaultFormValue();
265
- }
266
- }), catchError((error) => {
267
- if (error instanceof HttpErrorResponse) {
268
- const { errors, message } = error.error;
269
- if (errors) {
270
- Object.keys(errors).forEach((key) => {
271
- // eslint-disable-next-line security/detect-object-injection
272
- this.form.get(key)?.setErrors({ serverResponse: errors[key] });
273
- });
274
- }
275
- else if (message) {
276
- this.form.setErrors({ serverResponse: [message] });
277
- }
278
- }
279
- return of();
280
- }), finalize(() => {
281
- this.isSubmitLoading.set(false);
282
- }))
283
- .subscribe();
284
- }
285
- /**
286
- * Форматирование диапазона «от … до …» с учётом отсутствующих границ.
287
- *
288
- * @param min Нижняя граница.
289
- * @param max Верхняя граница.
290
- * @param unit Единица измерения.
291
- */
292
- // eslint-disable-next-line class-methods-use-this
293
- formatRange(min, max, unit) {
294
- const hasMin = min != null && min > 0;
295
- const hasMax = max != null && max > 0;
296
- if (!hasMin && !hasMax) {
297
- return null;
298
- }
299
- if (hasMin && hasMax) {
300
- return `от ${min} ${unit} до ${max} ${unit}`;
301
- }
302
- if (hasMin) {
303
- return `от ${min} ${unit}`;
304
- }
305
- return `до ${max} ${unit}`;
306
- }
307
- /**
308
- * Устанавливает начальные значения для полей формы.
309
- */
310
- setDefaultFormValue() {
311
- this.form.reset({
312
- productCategoryId: Number(this.categoryId()),
313
- configurator: this.editor(),
314
- quantity: this.orderItem()?.quantity ?? null,
315
- marker: this.orderItem()?.marker ?? '',
316
- });
317
- this.items.clear();
318
- this.product.reset(this.orderItem()?.product ?? null);
319
- const configuratorParameters = this.orderItem()?.configuratorParams;
320
- configuratorParameters?.items.forEach((item) => {
321
- this.items.push(this.createItemGroup({ width: item.width, length: item.length, count: item.count }));
322
- });
323
- if (!configuratorParameters?.items.length) {
324
- this.addItem();
325
- }
326
- // Сбрасываем seed и при наличии сохранённого calculationId восстанавливаем результат расчёта —
327
- // чтобы в режиме редактирования сразу была видна кнопка «Изменить», а не «Рассчитать».
328
- // eslint-disable-next-line unicorn/no-useless-undefined
329
- this.seedCalculateResult$.next(undefined);
330
- const existingCalculationId = configuratorParameters?.calculationId;
331
- const existingQuantity = this.orderItem()?.quantity;
332
- if (existingCalculationId && existingQuantity != null && existingQuantity > 0) {
333
- this.seedCalculateResult$.next({
334
- id: existingCalculationId,
335
- quantity: existingQuantity,
336
- sheets: [],
337
- });
338
- }
339
- }
340
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSandwichComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
341
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScSandwichComponent, isStandalone: true, selector: "sc-sandwich", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: false, transformFunction: null }, categoryId: { classPropertyName: "categoryId", publicName: "categoryId", isSignal: true, isRequired: true, transformFunction: null }, editor: { classPropertyName: "editor", publicName: "editor", isSignal: true, isRequired: true, transformFunction: null }, orderItem: { classPropertyName: "orderItem", publicName: "orderItem", isSignal: true, isRequired: true, transformFunction: null }, orderId: { classPropertyName: "orderId", publicName: "orderId", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { toggleShowEvent: "toggleShowEvent" }, providers: [
342
- tuiNumberFormatProvider({ precision: 0 }),
343
- tuiInputNumberOptionsProvider({
344
- min: 0,
345
- }),
346
- tuiItemsHandlersProvider({
347
- stringify: signal((x) => x.name),
348
- identityMatcher: signal((a, b) => a.id === b.id),
349
- }),
350
- ], ngImport: i0, template: "@if (!orderItem() && settings()?.allowShowTable) {\n <div class=\"mb-5 flex justify-center\">\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"toggleShowEvent.emit()\"\n type=\"button\"\n iconStart=\"@tui.layout-list\"\n >\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432 \u0432\u0438\u0434\u0435 \u0441\u043F\u0438\u0441\u043A\u0430\n </button>\n </div>\n}\n<div>\n @let calculateResult = calculateResult$ | async;\n @let products = products$ | async;\n @let productValue = product.value;\n @let validatorWidth = validatorWidth$ | async;\n @let validatorLength = validatorLength$ | async;\n\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit(calculateResult)\"\n ScNextInputFocus\n class=\"flex flex-col gap-3\"\n >\n <label\n tuiLabel\n class=\"grow\"\n >\n \u0422\u043E\u0432\u0430\u0440\n <tui-textfield\n tuiChevron\n [tuiTextfieldCleaner]=\"false\"\n >\n <input\n tuiChevron\n tuiSelect\n [formControl]=\"product\"\n placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\"\n />\n\n <tui-data-list-wrapper\n *tuiTextfieldDropdown\n new\n [items]=\"products\"\n />\n </tui-textfield>\n <tui-error\n [formControl]=\"product\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (productValue && productValue.costRub) {\n <div class=\"-mt-1 text-sm text-tui-text-secondary\">\n <span class=\"font-bold\">{{ productValue.code }}</span>\n \u2014 {{ productValue.costRub | tuiFormatNumber: moneyFormat | async }} {{ productValue.currency.symbol }}/\u0448\u0442.\n </div>\n }\n\n @if (product.value && validatorWidth && validatorLength) {\n <div class=\"mt-4 flex flex-col gap-1.5\">\n <div class=\"w-full font-bold\">\u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0438\u0437\u0434\u0435\u043B\u0438\u0439</div>\n <div class=\"flex flex-col gap-1 text-sm text-tui-text-secondary\">\n @if (widthRangeText()) {\n <div>\u0428\u0438\u0440\u0438\u043D\u0430 {{ widthRangeText() }}.</div>\n }\n @if (lengthRangeText()) {\n <div>\u0414\u043B\u0438\u043D\u0430 {{ lengthRangeText() }}.</div>\n }\n </div>\n </div>\n } @else if (product.value) {\n <tui-error error=\"\u0420\u0430\u0441\u0447\u0435\u0442 \u043F\u043E \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u0443 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u0435\u043D. \u041E\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044C \u043A \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u0443\" />\n }\n\n <div\n formArrayName=\"items\"\n class=\"flex flex-col gap-3\"\n >\n @for (item of items.controls; track item) {\n <div\n class=\"flex grow gap-2\"\n [formGroupName]=\"$index\"\n >\n <div class=\"grid grow grid-cols-1 items-start gap-2 sm:grid-cols-3\">\n <label tuiLabel>\n \u0428\u0438\u0440\u0438\u043D\u0430, \u043C\u043C\n <tui-textfield>\n <input\n tuiInputSlider\n formControlName=\"width\"\n [min]=\"settings()?.minWidth ?? 0\"\n [max]=\"product.value?.properties?.width ?? 0\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u0428\u0438\u0440\u0438\u043D\u0430\"\n autocomplete=\"off\"\n />\n @if (product.value) {\n <input\n tuiSlider\n type=\"range\"\n />\n }\n </tui-textfield>\n @if (product.value) {\n <div class=\"slider-ticks-labels\">\n <span> 0 </span>\n <span>{{ product.value.properties?.width }}</span>\n </div>\n }\n <tui-error\n formControlName=\"width\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label tuiLabel>\n \u0414\u043B\u0438\u043D\u0430, \u043C\u043C\n <tui-textfield>\n <input\n tuiInputSlider\n formControlName=\"length\"\n [min]=\"settings()?.minLength ?? 0\"\n [max]=\"product.value?.properties?.length ?? 0\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u0414\u043B\u0438\u043D\u0430\"\n autocomplete=\"off\"\n />\n @if (product.value) {\n <input\n tuiSlider\n type=\"range\"\n />\n }\n </tui-textfield>\n @if (product.value) {\n <div class=\"slider-ticks-labels\">\n <span> 0 </span>\n <span>{{ product.value.properties?.length }}</span>\n </div>\n }\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n <span class=\"whitespace-nowrap\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442</span>\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n tuiInputNumber\n formControlName=\"count\"\n [min]=\"1\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n autocomplete=\"off\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"count\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n <button\n tuiIconButton\n (click)=\"removeItem($index)\"\n [disabled]=\"!product.value || items.length <= 1\"\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.trash-2\"\n appearance=\"secondary\"\n class=\"mt-6\"\n [style.flex]=\"'0 0 auto'\"\n ></button>\n </div>\n }\n </div>\n @if (product.value) {\n <button\n tuiButton\n appearance=\"secondary\"\n [disabled]=\"items.invalid\"\n (click)=\"addItem()\"\n type=\"button\"\n class=\"self-center\"\n iconStart=\"@tui.plus\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0438\u0437\u0434\u0435\u043B\u0438\u0435\n </button>\n }\n\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0441\u043F\u0438\u043B\u0430\n <tui-textfield>\n <input\n tuiTextfield\n formControlName=\"marker\"\n placeholder=\"\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0441\u043F\u0438\u043B\u0430\"\n autocomplete=\"marker\"\n />\n </tui-textfield>\n\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (product.value) {\n <tui-loader [showLoader]=\"isCalculateLoading()\">\n @if (calculateResult) {\n <div class=\"mt-2 flex flex-wrap items-end gap-2\">\n <div>\n \u0418\u0442\u043E\u0433\u043E:\n <span class=\"whitespace-nowrap text-xl font-bold\"\n >{{ getTotalCost(calculateResult) | tuiFormatNumber: moneyFormat | async }} {{ product.value.currency.symbol }}</span\n >\n </div>\n @if (calculateResult?.quantity && productValue) {\n <div class=\"whitespace-nowrap text-lg text-sc-dark-grey\">\n <span class=\"font-bold\">({{ calculateResult.quantity }} \u0448\u0442.</span> x\n <span class=\"font-bold\"\n >{{ productValue.costRub === undefined ? '' : (productValue.costRub | tuiFormatNumber: moneyFormat | async) }}\n {{ productValue.currency.symbol }}/\u0448\u0442.)</span\n >\n </div>\n }\n </div>\n }\n </tui-loader>\n }\n\n <tui-error [error]=\"[] | tuiFieldError | async\" />\n @if (!calculateResult) {\n <button\n tuiButton\n appearance=\"secondary\"\n [disabled]=\"items.invalid || isCalculateLoading()\"\n (click)=\"triggerCalculate()\"\n type=\"button\"\n class=\"self-center\"\n iconStart=\"@tui.calculator\"\n >\n \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044C\n </button>\n } @else {\n <button\n [disabled]=\"form.invalid || isSubmitLoading()\"\n [loading]=\"isSubmitLoading()\"\n tuiButton\n class=\"self-center\"\n iconStart=\"@tui.check\"\n >\n {{ !orderItem() ? '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' : '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' }}\n </button>\n }\n </form>\n</div>\n", styles: [":host{display:block;width:100%;max-width:30rem}.slider-ticks-labels{--t-offset: calc($thumb / 2);display:flex;font:var(--tui-font-text-s);margin-inline-start:var(--t-offset);margin-inline-end:var(--t-offset);color:var(--tui-text-secondary)}.slider-ticks-labels>*{position:relative;flex:2;text-align:center}.slider-ticks-labels>*:first-child{left:calc(-1 * var(--t-offset));inset-inline-start:calc(-1 * var(--t-offset));flex:1;text-align:start}.slider-ticks-labels>*:last-child{right:calc(-1 * var(--t-offset));flex:1;text-align:end}@supports (inset-inline-end: 0){.slider-ticks-labels>*:last-child{right:unset;inset-inline-end:calc(-1 * var(--t-offset))}}tui-input-slider+.slider-ticks-labels{margin-inline-start:calc(var(--tui-radius-m) / 2 + var(--t-offset))}tui-textfield+.slider-ticks-labels{--t-offset: calc(var(--tui-radius-m) / 2 + $thumb / 2)}tui-textfield[data-size=l]+.slider-ticks-labels{--t-offset: calc(var(--tui-radius-l) / 2 + $thumb / 2)}tui-input-range:not([new])+.slider-ticks-labels,tui-range+.slider-ticks-labels{--t-offset: $thumb}tui-input-range[new]+.slider-ticks-labels{--t-offset: calc(map-get($track-inset, $input-size) + $thumb)}\n"], dependencies: [{ kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { 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: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: ScNextInputFocusModule }, { kind: "directive", type: i2.ScNextInputFocusDirective, selector: "form[ScNextInputFocus]" }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: TuiDataListWrapperComponent, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: ["items", "disabledItemHandler", "emptyContent", "size", "itemContent"], outputs: ["itemClick"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i3.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i3.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i3.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i3.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: i4.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "directive", type: i4.TuiInputNumberDirective, selector: "input[tuiInputNumber]", inputs: ["min", "max", "prefix", "postfix"] }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "component", type: i5.TuiSliderComponent, selector: "input[type=range][tuiSlider]", inputs: ["size", "segments"] }, { kind: "directive", type: i4.TuiInputSliderDirective, selector: "input[tuiInputSlider]" }, { 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: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
351
- }
352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSandwichComponent, decorators: [{
353
- type: Component,
354
- args: [{ standalone: true, selector: 'sc-sandwich', imports: [
355
- TuiFormatNumberPipe,
356
- TuiButton,
357
- FormsModule,
358
- ReactiveFormsModule,
359
- ScNextInputFocusModule,
360
- TuiLabel,
361
- TuiDataListWrapperComponent,
362
- TuiError,
363
- TuiTextfield,
364
- TuiChevron,
365
- TuiSelect,
366
- TuiInputNumber,
367
- TuiNumberFormat,
368
- AsyncPipe,
369
- TuiFieldErrorPipe,
370
- TuiInputSlider,
371
- ScSelectOnFocusinDirective,
372
- TuiLoader,
373
- TuiButtonLoading,
374
- ], providers: [
375
- tuiNumberFormatProvider({ precision: 0 }),
376
- tuiInputNumberOptionsProvider({
377
- min: 0,
378
- }),
379
- tuiItemsHandlersProvider({
380
- stringify: signal((x) => x.name),
381
- identityMatcher: signal((a, b) => a.id === b.id),
382
- }),
383
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!orderItem() && settings()?.allowShowTable) {\n <div class=\"mb-5 flex justify-center\">\n <button\n tuiButton\n appearance=\"secondary\"\n (click)=\"toggleShowEvent.emit()\"\n type=\"button\"\n iconStart=\"@tui.layout-list\"\n >\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432 \u0432\u0438\u0434\u0435 \u0441\u043F\u0438\u0441\u043A\u0430\n </button>\n </div>\n}\n<div>\n @let calculateResult = calculateResult$ | async;\n @let products = products$ | async;\n @let productValue = product.value;\n @let validatorWidth = validatorWidth$ | async;\n @let validatorLength = validatorLength$ | async;\n\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit(calculateResult)\"\n ScNextInputFocus\n class=\"flex flex-col gap-3\"\n >\n <label\n tuiLabel\n class=\"grow\"\n >\n \u0422\u043E\u0432\u0430\u0440\n <tui-textfield\n tuiChevron\n [tuiTextfieldCleaner]=\"false\"\n >\n <input\n tuiChevron\n tuiSelect\n [formControl]=\"product\"\n placeholder=\"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\"\n />\n\n <tui-data-list-wrapper\n *tuiTextfieldDropdown\n new\n [items]=\"products\"\n />\n </tui-textfield>\n <tui-error\n [formControl]=\"product\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (productValue && productValue.costRub) {\n <div class=\"-mt-1 text-sm text-tui-text-secondary\">\n <span class=\"font-bold\">{{ productValue.code }}</span>\n \u2014 {{ productValue.costRub | tuiFormatNumber: moneyFormat | async }} {{ productValue.currency.symbol }}/\u0448\u0442.\n </div>\n }\n\n @if (product.value && validatorWidth && validatorLength) {\n <div class=\"mt-4 flex flex-col gap-1.5\">\n <div class=\"w-full font-bold\">\u0420\u0430\u0437\u043C\u0435\u0440\u044B \u0438\u0437\u0434\u0435\u043B\u0438\u0439</div>\n <div class=\"flex flex-col gap-1 text-sm text-tui-text-secondary\">\n @if (widthRangeText()) {\n <div>\u0428\u0438\u0440\u0438\u043D\u0430 {{ widthRangeText() }}.</div>\n }\n @if (lengthRangeText()) {\n <div>\u0414\u043B\u0438\u043D\u0430 {{ lengthRangeText() }}.</div>\n }\n </div>\n </div>\n } @else if (product.value) {\n <tui-error error=\"\u0420\u0430\u0441\u0447\u0435\u0442 \u043F\u043E \u043F\u0440\u043E\u0434\u0443\u043A\u0442\u0443 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u0435\u043D. \u041E\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044C \u043A \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u0443\" />\n }\n\n <div\n formArrayName=\"items\"\n class=\"flex flex-col gap-3\"\n >\n @for (item of items.controls; track item) {\n <div\n class=\"flex grow gap-2\"\n [formGroupName]=\"$index\"\n >\n <div class=\"grid grow grid-cols-1 items-start gap-2 sm:grid-cols-3\">\n <label tuiLabel>\n \u0428\u0438\u0440\u0438\u043D\u0430, \u043C\u043C\n <tui-textfield>\n <input\n tuiInputSlider\n formControlName=\"width\"\n [min]=\"settings()?.minWidth ?? 0\"\n [max]=\"product.value?.properties?.width ?? 0\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u0428\u0438\u0440\u0438\u043D\u0430\"\n autocomplete=\"off\"\n />\n @if (product.value) {\n <input\n tuiSlider\n type=\"range\"\n />\n }\n </tui-textfield>\n @if (product.value) {\n <div class=\"slider-ticks-labels\">\n <span> 0 </span>\n <span>{{ product.value.properties?.width }}</span>\n </div>\n }\n <tui-error\n formControlName=\"width\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label tuiLabel>\n \u0414\u043B\u0438\u043D\u0430, \u043C\u043C\n <tui-textfield>\n <input\n tuiInputSlider\n formControlName=\"length\"\n [min]=\"settings()?.minLength ?? 0\"\n [max]=\"product.value?.properties?.length ?? 0\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u0414\u043B\u0438\u043D\u0430\"\n autocomplete=\"off\"\n />\n @if (product.value) {\n <input\n tuiSlider\n type=\"range\"\n />\n }\n </tui-textfield>\n @if (product.value) {\n <div class=\"slider-ticks-labels\">\n <span> 0 </span>\n <span>{{ product.value.properties?.length }}</span>\n </div>\n }\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n <span class=\"whitespace-nowrap\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442</span>\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n tuiInputNumber\n formControlName=\"count\"\n [min]=\"1\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [readOnly]=\"!product.value\"\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n autocomplete=\"off\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"count\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n <button\n tuiIconButton\n (click)=\"removeItem($index)\"\n [disabled]=\"!product.value || items.length <= 1\"\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.trash-2\"\n appearance=\"secondary\"\n class=\"mt-6\"\n [style.flex]=\"'0 0 auto'\"\n ></button>\n </div>\n }\n </div>\n @if (product.value) {\n <button\n tuiButton\n appearance=\"secondary\"\n [disabled]=\"items.invalid\"\n (click)=\"addItem()\"\n type=\"button\"\n class=\"self-center\"\n iconStart=\"@tui.plus\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0438\u0437\u0434\u0435\u043B\u0438\u0435\n </button>\n }\n\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0441\u043F\u0438\u043B\u0430\n <tui-textfield>\n <input\n tuiTextfield\n formControlName=\"marker\"\n placeholder=\"\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 \u0440\u0430\u0441\u043F\u0438\u043B\u0430\"\n autocomplete=\"marker\"\n />\n </tui-textfield>\n\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (product.value) {\n <tui-loader [showLoader]=\"isCalculateLoading()\">\n @if (calculateResult) {\n <div class=\"mt-2 flex flex-wrap items-end gap-2\">\n <div>\n \u0418\u0442\u043E\u0433\u043E:\n <span class=\"whitespace-nowrap text-xl font-bold\"\n >{{ getTotalCost(calculateResult) | tuiFormatNumber: moneyFormat | async }} {{ product.value.currency.symbol }}</span\n >\n </div>\n @if (calculateResult?.quantity && productValue) {\n <div class=\"whitespace-nowrap text-lg text-sc-dark-grey\">\n <span class=\"font-bold\">({{ calculateResult.quantity }} \u0448\u0442.</span> x\n <span class=\"font-bold\"\n >{{ productValue.costRub === undefined ? '' : (productValue.costRub | tuiFormatNumber: moneyFormat | async) }}\n {{ productValue.currency.symbol }}/\u0448\u0442.)</span\n >\n </div>\n }\n </div>\n }\n </tui-loader>\n }\n\n <tui-error [error]=\"[] | tuiFieldError | async\" />\n @if (!calculateResult) {\n <button\n tuiButton\n appearance=\"secondary\"\n [disabled]=\"items.invalid || isCalculateLoading()\"\n (click)=\"triggerCalculate()\"\n type=\"button\"\n class=\"self-center\"\n iconStart=\"@tui.calculator\"\n >\n \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044C\n </button>\n } @else {\n <button\n [disabled]=\"form.invalid || isSubmitLoading()\"\n [loading]=\"isSubmitLoading()\"\n tuiButton\n class=\"self-center\"\n iconStart=\"@tui.check\"\n >\n {{ !orderItem() ? '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' : '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' }}\n </button>\n }\n </form>\n</div>\n", styles: [":host{display:block;width:100%;max-width:30rem}.slider-ticks-labels{--t-offset: calc($thumb / 2);display:flex;font:var(--tui-font-text-s);margin-inline-start:var(--t-offset);margin-inline-end:var(--t-offset);color:var(--tui-text-secondary)}.slider-ticks-labels>*{position:relative;flex:2;text-align:center}.slider-ticks-labels>*:first-child{left:calc(-1 * var(--t-offset));inset-inline-start:calc(-1 * var(--t-offset));flex:1;text-align:start}.slider-ticks-labels>*:last-child{right:calc(-1 * var(--t-offset));flex:1;text-align:end}@supports (inset-inline-end: 0){.slider-ticks-labels>*:last-child{right:unset;inset-inline-end:calc(-1 * var(--t-offset))}}tui-input-slider+.slider-ticks-labels{margin-inline-start:calc(var(--tui-radius-m) / 2 + var(--t-offset))}tui-textfield+.slider-ticks-labels{--t-offset: calc(var(--tui-radius-m) / 2 + $thumb / 2)}tui-textfield[data-size=l]+.slider-ticks-labels{--t-offset: calc(var(--tui-radius-l) / 2 + $thumb / 2)}tui-input-range:not([new])+.slider-ticks-labels,tui-range+.slider-ticks-labels{--t-offset: $thumb}tui-input-range[new]+.slider-ticks-labels{--t-offset: calc(map-get($track-inset, $input-size) + $thumb)}\n"] }]
384
- }], propDecorators: { orderId: [{
385
- type: Input
386
- }] } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FuZHdpY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NvbmZpZ3VyYXRvcnMvc2FuZHdpY2gvc2Mtc2FuZHdpY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NvbmZpZ3VyYXRvcnMvc2FuZHdpY2gvc2Mtc2FuZHdpY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUgsT0FBTyxFQUdILGVBQWUsRUFFZixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUluQixjQUFjLEdBSWpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQ0gsU0FBUyxFQUVULFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixTQUFTLEVBQ1QsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixZQUFZLEdBQ2Ys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M0IsUUFBUTt3QkFDUixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsMEJBQTBCO3dCQUMxQixTQUFTO3dCQUNULGdCQUFnQjtxQkFDbkIsYUFDVTt3QkFDUCx1QkFBdUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDekMsNkJBQTZCLENBQUM7NEJBQzFCLEdBQUcsRUFBRSxDQUFDO3lCQUNULENBQUM7d0JBQ0Ysd0JBQXdCLENBQUM7NEJBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NEJBQzNDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFZLEVBQUUsQ0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7eUJBQ3pFLENBQUM7cUJBQ0wsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OEJBcUN4QyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cblxuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgSW5wdXQsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgSVNhbmR3aWNoQ2FsY3VsYXRlLFxuICAgIElTYW5kd2ljaENhbGN1bGF0ZUl0ZW0sXG4gICAgU0NfT1JERVJfTE9BREVSLFxuICAgIFNjQ2FydCxcbiAgICBTY0NhdGFsb2dTZXJ2aWNlLFxuICAgIFNjQ29uZmlndXJhdG9yU2VydmljZSxcbiAgICBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJQ29uZmlndXJhdG9yQ2FsY3VsYXRlUmVzdWx0LFxuICAgIFNjSU9yZGVyRWRpdG9yTG9hZGVyLFxuICAgIFNjTnVtYmVySGVscGVyLFxuICAgIFNjT3JkZXJEcmFmdCxcbiAgICBTY09yZGVySXRlbSxcbiAgICBTY1Byb2R1Y3QsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpQ29udHJvbFZhbHVlIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1xuICAgIFR1aUJ1dHRvbixcbiAgICBUdWlEaWFsb2dDb250ZXh0LFxuICAgIFR1aUVycm9yLFxuICAgIFR1aUZvcm1hdE51bWJlclBpcGUsXG4gICAgdHVpSXRlbXNIYW5kbGVyc1Byb3ZpZGVyLFxuICAgIFR1aUxhYmVsLFxuICAgIFR1aUxvYWRlcixcbiAgICBUdWlOdW1iZXJGb3JtYXQsXG4gICAgdHVpTnVtYmVyRm9ybWF0UHJvdmlkZXIsXG4gICAgVHVpVGV4dGZpZWxkLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQge1xuICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgVHVpQ2hldnJvbixcbiAgICBUdWlEYXRhTGlzdFdyYXBwZXJDb21wb25lbnQsXG4gICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgVHVpSW5wdXROdW1iZXIsXG4gICAgdHVpSW5wdXROdW1iZXJPcHRpb25zUHJvdmlkZXIsXG4gICAgVHVpSW5wdXRTbGlkZXIsXG4gICAgVHVpU2VsZWN0LFxufSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc2tpcCwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY05leHRJbnB1dEZvY3VzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZXh0LWlucHV0LWZvY3VzL3NjLW5leHQtaW5wdXQtZm9jdXMubW9kdWxlJztcbmltcG9ydCB7IFNjU2VsZWN0T25Gb2N1c2luRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zZWxlY3Qtb24tZm9jdXNpbi9zYy1zZWxlY3Qtb24tZm9jdXNpbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU0NfREVCT1VOQ0VfVElNRV9ERUZBVUxUIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IHN0ZXBWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3N0ZXAtdmFsaWRhdG9yJztcbmltcG9ydCB7IFNjSUNvbmZpZ3VyYXRvclNlYXJjaFByb2R1Y3RTYW5kd2ljaCB9IGZyb20gJy4uL21vZGVscy9zYW5kd2ljaC9zYy1pLWNvbmZpZ3VyYXRvci1zZWFyY2gtcHJvZHVjdC1zYW5kd2ljaCc7XG5pbXBvcnQgeyBTY0lTYW5kd2ljaFNldHRpbmdzIH0gZnJvbSAnLi4vbW9kZWxzL3NhbmR3aWNoL3NjLWktc2FuZHdpY2gtc2V0dGluZ3MnO1xuaW1wb3J0IHsgU2NJTmV3Q2FydEl0ZW1TYW5kd2ljaCB9IGZyb20gJy4vc2MtaS1uZXctY2FydC1pdGVtLXNhbmR3aWNoJztcblxuLyoqXG4gKiDQmtC+0L3RhNC40LPRg9GA0LDRgtC+0YAg0YDQsNGB0L/QuNC70LAg0YHRjdC90LTQstC40Yct0L/QsNC90LXQu9C10LkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1zYW5kd2ljaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXNhbmR3aWNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc2Mtc2FuZHdpY2guY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVHVpRm9ybWF0TnVtYmVyUGlwZSxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgU2NOZXh0SW5wdXRGb2N1c01vZHVsZSxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFR1aURhdGFMaXN0V3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aVRleHRmaWVsZCxcbiAgICAgICAgVHVpQ2hldnJvbixcbiAgICAgICAgVHVpU2VsZWN0LFxuICAgICAgICBUdWlJbnB1dE51bWJlcixcbiAgICAgICAgVHVpTnVtYmVyRm9ybWF0LFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBUdWlJbnB1dFNsaWRlcixcbiAgICAgICAgU2NTZWxlY3RPbkZvY3VzaW5EaXJlY3RpdmUsXG4gICAgICAgIFR1aUxvYWRlcixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB0dWlOdW1iZXJGb3JtYXRQcm92aWRlcih7IHByZWNpc2lvbjogMCB9KSxcbiAgICAgICAgdHVpSW5wdXROdW1iZXJPcHRpb25zUHJvdmlkZXIoe1xuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICB9KSxcbiAgICAgICAgdHVpSXRlbXNIYW5kbGVyc1Byb3ZpZGVyKHtcbiAgICAgICAgICAgIHN0cmluZ2lmeTogc2lnbmFsKCh4OiBTY1Byb2R1Y3QpID0+IHgubmFtZSksXG4gICAgICAgICAgICBpZGVudGl0eU1hdGNoZXI6IHNpZ25hbCgoYTogU2NQcm9kdWN0LCBiOiBTY1Byb2R1Y3QpID0+IGEuaWQgPT09IGIuaWQpLFxuICAgICAgICB9KSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1NhbmR3aWNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQndCw0YHRgtGA0L7QudC60Lgg0LLRi9Cy0L7QtNCwINGB0YPQvNC8INCyINGA0YPQsdC70Y/RhS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9uZXlGb3JtYXQgPSBTY051bWJlckhlbHBlci5nZXRNb25leUZvcm1hdCgpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lRGVmYXVsdDogbnVtYmVyID0gaW5qZWN0PG51bWJlcj4oU0NfREVCT1VOQ0VfVElNRV9ERUZBVUxUKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQtNC70Y8g0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAg0YHRjdC90LTQstC40Yct0L/QsNC90LXQu9C10LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzID0gaW5wdXQ8U2NJU2FuZHdpY2hTZXR0aW5ncz4oKTtcblxuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2F0ZWdvcnlJZCA9IGlucHV0LnJlcXVpcmVkPG51bWJlciB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDQt9Cy0LDQvdC40LUg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvciA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsC/Rg9GB0LvRg9Cz0Lgg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9yZGVySXRlbSA9IGlucHV0LnJlcXVpcmVkPFNjT3JkZXJJdGVtIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yZGVySWQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQv9C10YDQtdC60LvRjtGH0LXQvdC40Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9nZ2xlU2hvd0V2ZW50ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINC00L7QsdCw0LLQu9C10L3QuNGPL9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L/RgNC+0LTRg9C60YLQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBwcm9kdWN0Q2F0ZWdvcnlJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIHsgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5yZXF1aXJlZCB9KSxcbiAgICAgICAgY29uZmlndXJhdG9yOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkIH0pLFxuICAgICAgICBxdWFudGl0eTogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIHsgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHN0ZXBWYWxpZGF0b3IoMSldIH0pLFxuICAgICAgICBtYXJrZXI6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgaXRlbXM6IG5ldyBGb3JtQXJyYXk8UmV0dXJuVHlwZTxTY1NhbmR3aWNoQ29tcG9uZW50WydjcmVhdGVJdGVtR3JvdXAnXT4+KFtdKSxcbiAgICAgICAgY2FsY3VsYXRpb25JZDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC/0L7Qu9GD0YfQtdC90LjRjyDQuCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQt9Cw0LrQsNC30LAgKNC60L7RgNC30LjQvdCwIC8g0LfQsNC60LDQtyAvINGH0LXRgNC90L7QstC40LogPSDQt9Cw0LrQsNC3KS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJTZXJ2aWNlID0gaW5qZWN0PFNjSU9yZGVyRWRpdG9yTG9hZGVyPFNjT3JkZXJJdGVtLCBTY0NhcnQgfCBTY09yZGVyRHJhZnQ+PihTQ19PUkRFUl9MT0FERVIpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2UgPSBpbmplY3QoU2NDb252ZXJ0ZXJzU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0L3RgtC10LrRgdGCINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAsINCyINC60L7RgtC+0YDQvtC8INC+0YLQutGA0YvRgiDQutC+0LzQv9C+0L3QtdC90YIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBUdWlEaWFsb2dDb250ZXh0IHwgdW5kZWZpbmVkID0gaW5qZWN0KFBPTFlNT1JQSEVVU19DT05URVhULCB7IG9wdGlvbmFsOiB0cnVlIH0pIGFzIFR1aURpYWxvZ0NvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nU2VydmljZTogU2NDYXRhbG9nU2VydmljZSA9IGluamVjdChTY0NhdGFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCw0LzQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3VyYXRvclNlcnZpY2U6IFNjQ29uZmlndXJhdG9yU2VydmljZSA9IGluamVjdChTY0NvbmZpZ3VyYXRvclNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3RzJDogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXT4gPSB0b09ic2VydmFibGUodGhpcy5jYXRlZ29yeUlkKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGNhdGVnb3J5SWQpID0+IHtcbiAgICAgICAgICAgIGlmICghY2F0ZWdvcnlJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhdGFsb2dTZXJ2aWNlLmdldFByb2R1Y3RzQ2F0ZWdvcnlDYWNoZWQkKHsgY2F0ZWdvcnlJZDogTnVtYmVyKGNhdGVnb3J5SWQpIH0pLnBpcGUobWFwKChwcm9kdWN0cykgPT4gcHJvZHVjdHMgPz8gW10pKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0YDQsNC90L3Ri9C5INC/0YDQvtC00YPQutGCICjQvNCw0YLQtdGA0LjQsNC7INC00LvRjyDRgNCw0YHQutGA0L7RjykuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3QgPSBuZXcgRm9ybUNvbnRyb2w8U2NQcm9kdWN0IHwgbnVsbD4obnVsbCwgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQuNCz0L3QsNC7INGC0LXQutGD0YnQtdCz0L4g0LLRi9Cx0YDQsNC90L3QvtCz0L4g0L/RgNC+0LTRg9C60YLQsCDigJQg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINCyINGI0LDQsdC70L7QvdC1INC00LvRjyDQtNC40LDQv9Cw0LfQvtC90L7QsiDQuCDQutC90L7Qv9C+0LouXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3RTaWduYWwgPSB0b1NpZ25hbCh0dWlDb250cm9sVmFsdWU8U2NQcm9kdWN0IHwgbnVsbD4odGhpcy5wcm9kdWN0KSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodGD0LHRitC10LrRgiDQtNC70Y8g0YDRg9GH0L3QvtCz0L4g0LfQsNC/0YPRgdC60LAg0YDQsNGB0YfRkdGC0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWxjdWxhdGVUcmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNGB0YLQvtGH0L3QuNC6INC90LDRh9Cw0LvRjNC90L7Qs9C+INGA0LXQt9GD0LvRjNGC0LDRgtCwINGA0LDRgdGH0ZHRgtCwINC00LvRjyDRgNC10LbQuNC80LAg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlZWRDYWxjdWxhdGVSZXN1bHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY0lDb25maWd1cmF0b3JDYWxjdWxhdGVSZXN1bHQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YDQsNGB0YfQtdGC0LAg0L7Qv9GC0LjQvNC40LfQsNGG0LjQuCDRgNCw0YHQutC70LDQtNC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWxjdWxhdGUkOiBPYnNlcnZhYmxlPFNjSUNvbmZpZ3VyYXRvckNhbGN1bGF0ZVJlc3VsdCB8IG51bGwgfCB1bmRlZmluZWQ+ID0gbWVyZ2UoXG4gICAgICAgIHRoaXMuc2VlZENhbGN1bGF0ZVJlc3VsdCQsXG4gICAgICAgIG1lcmdlKHR1aUNvbnRyb2xWYWx1ZTxTY1Byb2R1Y3QgfCBudWxsPih0aGlzLnByb2R1Y3QpLnBpcGUoc2tpcCgxKSksIHR1aUNvbnRyb2xWYWx1ZTxJU2FuZHdpY2hDYWxjdWxhdGVJdGVtW10+KHRoaXMuaXRlbXMpLnBpcGUoc2tpcCgxKSkpLnBpcGUoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZCBhcyBTY0lDb25maWd1cmF0b3JDYWxjdWxhdGVSZXN1bHQgfCB1bmRlZmluZWQpXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVHJpZ2dlciQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5wcm9kdWN0LnZhbHVlPy5pZCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcy52YWx1ZSBhcyBJU2FuZHdpY2hDYWxjdWxhdGVJdGVtW107XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdElkID09PSBudWxsIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmZvcm0uY29udHJvbHMuaXRlbXMuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0b3JTZXJ2aWNlLmNhbGN1bGF0ZSQodGhpcy5jYXRlZ29yeUlkKCksIHRoaXMuZWRpdG9yKCksIHsgcHJvZHVjdElkLCBpdGVtcyB9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGNhbGN1bGF0ZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncXVhbnRpdHknKT8uc2V0VmFsdWUoY2FsY3VsYXRlUmVzdWx0LnF1YW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICkucGlwZShzaGFyZSgpKTtcblxuICAgIC8qKlxuICAgICAqINCg0LXQt9GD0LvRjNGC0LDRgiDRgNCw0YHRh9C10YLQsCDQvtC/0YLQuNC80LjQt9Cw0YbQuNC4INGA0LDRgdC60LvQsNC00LrQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsY3VsYXRlUmVzdWx0JDogT2JzZXJ2YWJsZTxTY0lDb25maWd1cmF0b3JDYWxjdWxhdGVSZXN1bHQgfCB1bmRlZmluZWQ+ID0gdGhpcy5jYWxjdWxhdGUkLnBpcGUoZmlsdGVyKChkYXRhKSA9PiBkYXRhICE9PSBudWxsKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0YDQsNGB0YfQtdGC0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQ2FsY3VsYXRlTG9hZGluZyA9IHRvU2lnbmFsKHRoaXMuY2FsY3VsYXRlJC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YSA9PT0gbnVsbCkpLCB7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQktCw0LvQuNC00LDRgtC+0YAg0LTQu9GPINGI0LjRgNC40L3RiyDQuNC30LTQtdC70LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmFsaWRhdG9yV2lkdGgkOiBPYnNlcnZhYmxlPFZhbGlkYXRvckZuIHwgbnVsbD4gPSB0dWlDb250cm9sVmFsdWU8U2NQcm9kdWN0IHwgbnVsbD4odGhpcy5wcm9kdWN0KS5waXBlKFxuICAgICAgICBtYXAoKHByb2R1Y3QpID0+IFZhbGlkYXRvcnMubWluKHByb2R1Y3Q/LnByb3BlcnRpZXM/LndpZHRoID8/IDApKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQktCw0LvQuNC00LDRgtC+0YAg0LTQu9GPINC00LvQuNC90Ysg0LjQt9C00LXQu9C40Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbGlkYXRvckxlbmd0aCQ6IE9ic2VydmFibGU8VmFsaWRhdG9yRm4gfCBudWxsPiA9IHR1aUNvbnRyb2xWYWx1ZTxTY1Byb2R1Y3QgfCBudWxsPih0aGlzLnByb2R1Y3QpLnBpcGUoXG4gICAgICAgIG1hcCgocHJvZHVjdCkgPT4gVmFsaWRhdG9ycy5taW4ocHJvZHVjdD8ucHJvcGVydGllcz8ubGVuZ3RoID8/IDApKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQotC10LrRgdGCINC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0L/QviDRiNC40YDQuNC90LUgKMKr0L7RgiDigKYg0LTQviDigKbCuyksINC/0L7QutCwINCy0YvQsdGA0LDQvSDRgtC+0LLQsNGALlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3aWR0aFJhbmdlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZm9ybWF0UmFuZ2UodGhpcy5zZXR0aW5ncygpPy5taW5XaWR0aCA/PyBudWxsLCB0aGlzLnByb2R1Y3RTaWduYWwoKT8ucHJvcGVydGllcz8ud2lkdGggPz8gbnVsbCwgJ9C80LwnKSk7XG5cbiAgICAvKipcbiAgICAgKiDQotC10LrRgdGCINC+0LPRgNCw0L3QuNGH0LXQvdC40Y8g0L/QviDQtNC70LjQvdC1ICjCq9C+0YIg4oCmINC00L4g4oCmwrspLCDQv9C+0LrQsCDQstGL0LHRgNCw0L0g0YLQvtCy0LDRgC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGVuZ3RoUmFuZ2VUZXh0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtYXRSYW5nZSh0aGlzLnNldHRpbmdzKCk/Lm1pbkxlbmd0aCA/PyBudWxsLCB0aGlzLnByb2R1Y3RTaWduYWwoKT8ucHJvcGVydGllcz8ubGVuZ3RoID8/IG51bGwsICfQvNC8JykpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC30LDQv9GA0L7RgSDQvdCwINC+0YLQv9GA0LDQstC60YMg0LTQsNC90L3Ri9GFINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU3VibWl0TG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDRgdGB0LjQsiDQuNC30LTQtdC70LjQuS5cbiAgICAgKi9cbiAgICBnZXQgaXRlbXMoKTogRm9ybUFycmF5PFJldHVyblR5cGU8U2NTYW5kd2ljaENvbXBvbmVudFsnY3JlYXRlSXRlbUdyb3VwJ10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JtVmFsdWUoKTtcblxuICAgICAgICB0aGlzLnByb2R1Y3QudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgocHJvZHVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb2R1Y3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmNvbnRyb2xzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9kdWN0LnByb3BlcnRpZXM/LndpZHRoICYmIHZhbHVlLndpZHRoIDwgcHJvZHVjdC5wcm9wZXJ0aWVzLndpZHRoKSB8fCAocHJvZHVjdC5wcm9wZXJ0aWVzPy5sZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgcHJvZHVjdC5wcm9wZXJ0aWVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKHZhbHVlLndpZHRoLCBwcm9kdWN0LnByb3BlcnRpZXMud2lkdGggPz8gdmFsdWUud2lkdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogTWF0aC5taW4odmFsdWUubGVuZ3RoLCBwcm9kdWN0LnByb3BlcnRpZXMubGVuZ3RoID8/IHZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQs9GA0YPQv9C/0YMg0LTQu9GPINC40LfQtNC10LvQuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QsNGA0LDQvNC10YLRgNGLINC40LfQtNC10LvQuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlSXRlbUdyb3VwKGl0ZW0/OiBJU2FuZHdpY2hDYWxjdWxhdGVJdGVtKTogRm9ybUdyb3VwPHtcbiAgICAgICAgd2lkdGg6IEZvcm1Db250cm9sPG51bWJlcj47XG4gICAgICAgIGxlbmd0aDogRm9ybUNvbnRyb2w8bnVtYmVyPjtcbiAgICAgICAgY291bnQ6IEZvcm1Db250cm9sPG51bWJlcj47XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICB3aWR0aDogbmV3IEZvcm1Db250cm9sPG51bWJlcj4oaXRlbT8ud2lkdGggPz8gMCwge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbih0aGlzLnNldHRpbmdzKCk/Lm1pbldpZHRoID8/IDAuMDEpXSxcbiAgICAgICAgICAgICAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbGVuZ3RoOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihpdGVtPy5sZW5ndGggPz8gMCwge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbih0aGlzLnNldHRpbmdzKCk/Lm1pbkxlbmd0aCA/PyAwLjAxKV0sXG4gICAgICAgICAgICAgICAgbm9uTnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNvdW50OiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihpdGVtPy5jb3VudCA/PyAxLCB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDEpXSxcbiAgICAgICAgICAgICAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQlNC+0LHQsNCy0LvRj9C10YIg0L3QvtCy0L7QtSDQuNC30LTQtdC70LjQtSDQsiDRhNC+0YDQvNGDLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGRJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5jcmVhdGVJdGVtR3JvdXAoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0LjQt9C00LXQu9C40LUg0LjQtyDRhNC+0YDQvNGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4INCY0L3QtNC10LrRgSDQuNC30LTQtdC70LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlSXRlbShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCX0LDQv9GD0YHQutCw0LXRgiDRgNCw0YHRh9GR0YIg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLRgNC10LHRg9C10LzRi9GFINC/0LDQvdC10LvQtdC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB0cmlnZ2VyQ2FsY3VsYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVRyaWdnZXIkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQuNGC0L7Qs9C+0LLRg9GOINGB0YLQvtC40LzQvtGB0YLRjC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYWxjdWxhdGVSZXN1bHQg0KDQtdC30YPQu9GM0YLQsNGCINGA0LDRgdGH0LXRgtCwINC+0L/RgtC40LzQuNC30LDRhtC40Lgg0YDQsNGB0LrQu9Cw0LTQutC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRUb3RhbENvc3QoY2FsY3VsYXRlUmVzdWx0OiBTY0lDb25maWd1cmF0b3JDYWxjdWxhdGVSZXN1bHQpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucHJvZHVjdC52YWx1ZT8uY29zdFJ1Yikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvc3QgPSBjYWxjdWxhdGVSZXN1bHQucXVhbnRpdHkgKiB0aGlzLnByb2R1Y3QudmFsdWUuY29zdFJ1YjtcblxuICAgICAgICByZXR1cm4gU2NOdW1iZXJIZWxwZXIucm91bmRNb25leSh0b3RhbENvc3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INC00L7QsdCw0LLQu9C10L3QuNGPL9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L/RgNC+0LTRg9C60YLQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYWxjdWxhdGVSZXN1bHQg0KDQtdC30YPQu9GM0YLQsNGCINGA0LDRgdGH0LXRgtCwINC+0L/RgtC40LzQuNC30LDRhtC40Lgg0YDQsNGB0LrQu9Cw0LTQutC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblN1Ym1pdChjYWxjdWxhdGVSZXN1bHQ6IFNjSUNvbmZpZ3VyYXRvckNhbGN1bGF0ZVJlc3VsdCB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjYWxjdWxhdGVSZXN1bHQgfHwgdGhpcy5mb3JtLmludmFsaWQgfHwgdGhpcy5pc0NhbGN1bGF0ZUxvYWRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgIHByb2R1Y3RJZDogdGhpcy5wcm9kdWN0LnZhbHVlPy5pZCA/PyBudWxsLFxuICAgICAgICAgICAgY2FsY3VsYXRpb25JZDogY2FsY3VsYXRlUmVzdWx0LmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8g0KPQtNCw0LvRj9C10LwgaXRlbXMsINGC0LDQuiDQutCw0Log0L7QvdC4INC90LUg0L3Rg9C20L3RiyDQsiB7QGxpbmsgU2NJTmV3Q2FydEl0ZW1TYW5kd2ljaH0uXG4gICAgICAgIGRlbGV0ZSBmb3JtVmFsdWUuaXRlbXM7XG4gICAgICAgIGNvbnN0IG9yZGVyRGF0YSA9IHRoaXMub3JkZXJJdGVtKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q2FydEl0ZW0kID0gb3JkZXJEYXRhXG4gICAgICAgICAgICA/IHRoaXMub3JkZXJTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QkKG9yZGVyRGF0YS5pZCwgZm9ybVZhbHVlIGFzIFNjSU5ld0NhcnRJdGVtU2FuZHdpY2gsIHRoaXMub3JkZXJJZCkucGlwZShzdGFydFdpdGgobnVsbCkpXG4gICAgICAgICAgICA6IHRoaXMub3JkZXJTZXJ2aWNlLmFkZFByb2R1Y3QkKGZvcm1WYWx1ZSBhcyBTY0lOZXdDYXJ0SXRlbVNhbmR3aWNoLCB0aGlzLm9yZGVySWQpO1xuXG4gICAgICAgIHRoaXMuaXNTdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcblxuICAgICAgICBuZXdDYXJ0SXRlbSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvcm1WYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzLCBtZXNzYWdlIH0gPSBlcnJvci5lcnJvciBhcyBTY0lBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBbbWVzc2FnZV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90LjQtSDQtNC40LDQv9Cw0LfQvtC90LAgwqvQvtGCIOKApiDQtNC+IOKApsK7INGBINGD0YfRkdGC0L7QvCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjRhSDQs9GA0LDQvdC40YYuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWluINCd0LjQttC90Y/RjyDQs9GA0LDQvdC40YbQsC5cbiAgICAgKiBAcGFyYW0gbWF4INCS0LXRgNGF0L3Rj9GPINCz0YDQsNC90LjRhtCwLlxuICAgICAqIEBwYXJhbSB1bml0INCV0LTQuNC90LjRhtCwINC40LfQvNC10YDQtdC90LjRjy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgZm9ybWF0UmFuZ2UobWluOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBtYXg6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHVuaXQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBoYXNNaW4gPSBtaW4gIT0gbnVsbCAmJiBtaW4gPiAwO1xuICAgICAgICBjb25zdCBoYXNNYXggPSBtYXggIT0gbnVsbCAmJiBtYXggPiAwO1xuXG4gICAgICAgIGlmICghaGFzTWluICYmICFoYXNNYXgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc01pbiAmJiBoYXNNYXgpIHtcbiAgICAgICAgICAgIHJldHVybiBg0L7RgiAke21pbn0gJHt1bml0fSDQtNC+ICR7bWF4fSAke3VuaXR9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNNaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBg0L7RgiAke21pbn0gJHt1bml0fWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYNC00L4gJHttYXh9ICR7dW5pdH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC90LDRh9Cw0LvRjNC90YvQtSDQt9C90LDRh9C10L3QuNGPINC00LvRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Rm9ybVZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoe1xuICAgICAgICAgICAgcHJvZHVjdENhdGVnb3J5SWQ6IE51bWJlcih0aGlzLmNhdGVnb3J5SWQoKSksXG4gICAgICAgICAgICBjb25maWd1cmF0b3I6IHRoaXMuZWRpdG9yKCksXG4gICAgICAgICAgICBxdWFudGl0eTogdGhpcy5vcmRlckl0ZW0oKT8ucXVhbnRpdHkgPz8gbnVsbCxcbiAgICAgICAgICAgIG1hcmtlcjogdGhpcy5vcmRlckl0ZW0oKT8ubWFya2VyID8/ICcnLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLml0ZW1zLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5wcm9kdWN0LnJlc2V0KHRoaXMub3JkZXJJdGVtKCk/LnByb2R1Y3QgPz8gbnVsbCk7XG5cbiAgICAgICAgY29uc3QgY29uZmlndXJhdG9yUGFyYW1ldGVycyA9IHRoaXMub3JkZXJJdGVtKCk/LmNvbmZpZ3VyYXRvclBhcmFtcyBhcyAoSVNhbmR3aWNoQ2FsY3VsYXRlICYgUGFydGlhbDxTY0lDb25maWd1cmF0b3JTZWFyY2hQcm9kdWN0U2FuZHdpY2g+KSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25maWd1cmF0b3JQYXJhbWV0ZXJzPy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5jcmVhdGVJdGVtR3JvdXAoeyB3aWR0aDogaXRlbS53aWR0aCwgbGVuZ3RoOiBpdGVtLmxlbmd0aCwgY291bnQ6IGl0ZW0uY291bnQgfSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWNvbmZpZ3VyYXRvclBhcmFtZXRlcnM/Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQodCx0YDQsNGB0YvQstCw0LXQvCBzZWVkINC4INC/0YDQuCDQvdCw0LvQuNGH0LjQuCDRgdC+0YXRgNCw0L3RkdC90L3QvtCz0L4gY2FsY3VsYXRpb25JZCDQstC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0YDQtdC30YPQu9GM0YLQsNGCINGA0LDRgdGH0ZHRgtCwIOKAlFxuICAgICAgICAvLyDRh9GC0L7QsdGLINCyINGA0LXQttC40LzQtSDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0YDQsNC30YMg0LHRi9C70LAg0LLQuNC00L3QsCDQutC90L7Qv9C60LAgwqvQmNC30LzQtdC90LjRgtGMwrssINCwINC90LUgwqvQoNCw0YHRgdGH0LjRgtCw0YLRjMK7LlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICB0aGlzLnNlZWRDYWxjdWxhdGVSZXN1bHQkLm5leHQodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBleGlzdGluZ0NhbGN1bGF0aW9uSWQgPSBjb25maWd1cmF0b3JQYXJhbWV0ZXJzPy5jYWxjdWxhdGlvbklkO1xuICAgICAgICBjb25zdCBleGlzdGluZ1F1YW50aXR5ID0gdGhpcy5vcmRlckl0ZW0oKT8ucXVhbnRpdHk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nQ2FsY3VsYXRpb25JZCAmJiBleGlzdGluZ1F1YW50aXR5ICE9IG51bGwgJiYgZXhpc3RpbmdRdWFudGl0eSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VlZENhbGN1bGF0ZVJlc3VsdCQubmV4dCh7XG4gICAgICAgICAgICAgICAgaWQ6IGV4aXN0aW5nQ2FsY3VsYXRpb25JZCxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogZXhpc3RpbmdRdWFudGl0eSxcbiAgICAgICAgICAgICAgICBzaGVldHM6IFtdLFxuICAgICAgICAgICAgfSBhcyBTY0lDb25maWd1cmF0b3JDYWxjdWxhdGVSZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmICghb3JkZXJJdGVtKCkgJiYgc2V0dGluZ3MoKT8uYWxsb3dTaG93VGFibGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwibWItNSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0V2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkubGF5b3V0LWxpc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQn9C+0LrQsNC30LDRgtGMINCyINCy0LjQtNC1INGB0L/QuNGB0LrQsFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbn1cbjxkaXY+XG4gICAgQGxldCBjYWxjdWxhdGVSZXN1bHQgPSBjYWxjdWxhdGVSZXN1bHQkIHwgYXN5bmM7XG4gICAgQGxldCBwcm9kdWN0cyA9IHByb2R1Y3RzJCB8IGFzeW5jO1xuICAgIEBsZXQgcHJvZHVjdFZhbHVlID0gcHJvZHVjdC52YWx1ZTtcbiAgICBAbGV0IHZhbGlkYXRvcldpZHRoID0gdmFsaWRhdG9yV2lkdGgkIHwgYXN5bmM7XG4gICAgQGxldCB2YWxpZGF0b3JMZW5ndGggPSB2YWxpZGF0b3JMZW5ndGgkIHwgYXN5bmM7XG5cbiAgICA8Zm9ybVxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAobmdTdWJtaXQpPVwib25TdWJtaXQoY2FsY3VsYXRlUmVzdWx0KVwiXG4gICAgICAgIFNjTmV4dElucHV0Rm9jdXNcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCJcbiAgICA+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdHVpTGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiZ3Jvd1wiXG4gICAgICAgID5cbiAgICAgICAgICAgINCi0L7QstCw0YBcbiAgICAgICAgICAgIDx0dWktdGV4dGZpZWxkXG4gICAgICAgICAgICAgICAgdHVpQ2hldnJvblxuICAgICAgICAgICAgICAgIFt0dWlUZXh0ZmllbGRDbGVhbmVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHVpQ2hldnJvblxuICAgICAgICAgICAgICAgICAgICB0dWlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCS0YvQsdC10YDQuNGC0LUg0LzQsNGC0LXRgNC40LDQu1wiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDx0dWktZGF0YS1saXN0LXdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgKnR1aVRleHRmaWVsZERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgIG5ld1xuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwicHJvZHVjdHNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInByb2R1Y3RcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIEBpZiAocHJvZHVjdFZhbHVlICYmIHByb2R1Y3RWYWx1ZS5jb3N0UnViKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiLW10LTEgdGV4dC1zbSB0ZXh0LXR1aS10ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgcHJvZHVjdFZhbHVlLmNvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAg4oCUIHt7IHByb2R1Y3RWYWx1ZS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7IHByb2R1Y3RWYWx1ZS5jdXJyZW5jeS5zeW1ib2wgfX0v0YjRgi5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChwcm9kdWN0LnZhbHVlICYmIHZhbGlkYXRvcldpZHRoICYmIHZhbGlkYXRvckxlbmd0aCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgZmxleCBmbGV4LWNvbCBnYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmb250LWJvbGRcIj7QoNCw0LfQvNC10YDRiyDQuNC30LTQtdC70LjQuTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xIHRleHQtc20gdGV4dC10dWktdGV4dC1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh3aWR0aFJhbmdlVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PtCo0LjRgNC40L3QsCB7eyB3aWR0aFJhbmdlVGV4dCgpIH19LjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobGVuZ3RoUmFuZ2VUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+0JTQu9C40L3QsCB7eyBsZW5ndGhSYW5nZVRleHQoKSB9fS48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2UgaWYgKHByb2R1Y3QudmFsdWUpIHtcbiAgICAgICAgICAgIDx0dWktZXJyb3IgZXJyb3I9XCLQoNCw0YHRh9C10YIg0L/QviDQv9GA0L7QtNGD0LrRgtGDINC90LXQstC+0LfQvNC+0LbQtdC9LiDQntCx0YDQsNGC0LjRgtC10YHRjCDQuiDQvNC10L3QtdC00LbQtdGA0YNcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgZm9ybUFycmF5TmFtZT1cIml0ZW1zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMuY29udHJvbHM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBncm93IGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiJGluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyb3cgZ3JpZC1jb2xzLTEgaXRlbXMtc3RhcnQgZ2FwLTIgc206Z3JpZC1jb2xzLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQqNC40YDQuNC90LAsINC80LxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJbnB1dFNsaWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJzZXR0aW5ncygpPy5taW5XaWR0aCA/PyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwicHJvZHVjdC52YWx1ZT8ucHJvcGVydGllcz8ud2lkdGggPz8gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpTnVtYmVyRm9ybWF0XT1cInsgcHJlY2lzaW9uOiAwIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cIiFwcm9kdWN0LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0KjQuNGA0LjQvdCwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvZHVjdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpU2xpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZXItdGlja3MtbGFiZWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gMCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBwcm9kdWN0LnZhbHVlLnByb3BlcnRpZXM/LndpZHRoIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQlNC70LjQvdCwLCDQvNC8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSW5wdXRTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cInNldHRpbmdzKCk/Lm1pbkxlbmd0aCA/PyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwicHJvZHVjdC52YWx1ZT8ucHJvcGVydGllcz8ubGVuZ3RoID8/IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aU51bWJlckZvcm1hdF09XCJ7IHByZWNpc2lvbjogMCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCIhcHJvZHVjdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCU0LvQuNC90LBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9kdWN0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb2R1Y3QudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsaWRlci10aWNrcy1sYWJlbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiAwIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3QudmFsdWUucHJvcGVydGllcz8ubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXBcIj7QmtC+0LvQuNGH0LXRgdGC0LLQviwg0YjRgjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXRleHRmaWVsZCBbdHVpVGV4dGZpZWxkQ2xlYW5lcl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aU51bWJlckZvcm1hdF09XCJ7IHByZWNpc2lvbjogMCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCIhcHJvZHVjdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCa0L7Qu9C40YfQtdGB0YLQstC+XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUl0ZW0oJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb2R1Y3QudmFsdWUgfHwgaXRlbXMubGVuZ3RoIDw9IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZsZXhdPVwiJzAgMCBhdXRvJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAocHJvZHVjdC52YWx1ZSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtcy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkSXRlbSgpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnBsdXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0LjQt9C00LXQu9C40LVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAg0JzQsNGA0LrQuNGA0L7QstC60LAg0YDQsNGB0L/QuNC70LBcbiAgICAgICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWFya2VyXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLQnNCw0YDQutC40YDQvtCy0LrQsCDRgNCw0YHQv9C40LvQsFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm1hcmtlclwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdHVpLXRleHRmaWVsZD5cblxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hcmtlclwiXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgQGlmIChwcm9kdWN0LnZhbHVlKSB7XG4gICAgICAgICAgICA8dHVpLWxvYWRlciBbc2hvd0xvYWRlcl09XCJpc0NhbGN1bGF0ZUxvYWRpbmcoKVwiPlxuICAgICAgICAgICAgICAgIEBpZiAoY2FsY3VsYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQmNGC0L7Qs9C+OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC14bCBmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZ2V0VG90YWxDb3N0KGNhbGN1bGF0ZVJlc3VsdCkgfCB0dWlGb3JtYXROdW1iZXI6IG1vbmV5Rm9ybWF0IHwgYXN5bmMgfX0ge3sgcHJvZHVjdC52YWx1ZS5jdXJyZW5jeS5zeW1ib2wgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2FsY3VsYXRlUmVzdWx0Py5xdWFudGl0eSAmJiBwcm9kdWN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1sZyB0ZXh0LXNjLWRhcmstZ3JleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPih7eyBjYWxjdWxhdGVSZXN1bHQucXVhbnRpdHkgfX0g0YjRgi48L3NwYW4+IHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHByb2R1Y3RWYWx1ZS5jb3N0UnViID09PSB1bmRlZmluZWQgPyAnJyA6IChwcm9kdWN0VmFsdWUuY29zdFJ1YiB8IHR1aUZvcm1hdE51bWJlcjogbW9uZXlGb3JtYXQgfCBhc3luYykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3RWYWx1ZS5jdXJyZW5jeS5zeW1ib2wgfX0v0YjRgi4pPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90dWktbG9hZGVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPHR1aS1lcnJvciBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIiAvPlxuICAgICAgICBAaWYgKCFjYWxjdWxhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbXMuaW52YWxpZCB8fCBpc0NhbGN1bGF0ZUxvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJDYWxjdWxhdGUoKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5jYWxjdWxhdG9yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDQoNCw0YHRgdGH0LjRgtCw0YLRjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgaXNTdWJtaXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzU3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZWNrXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAhb3JkZXJJdGVtKCkgPyAn0JTQvtCx0LDQstC40YLRjCDQsiDQutC+0YDQt9C40L3RgycgOiAn0JjQt9C80LXQvdC40YLRjCcgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
@@ -1,5 +0,0 @@
1
- export * from './sc-sandwich-m2-item-submit-state';
2
- export * from './sc-sandwich-m2.component';
3
- export * from './sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component';
4
- export * from './sc-i-new-cart-item-sandwich-m2';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY29uZmlndXJhdG9ycy9zYW5kd2ljaF9tMi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy1zYW5kd2ljaC1tMi1pdGVtLXN1Ym1pdC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjLXNhbmR3aWNoLW0yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NhbmR3aWNoLW0yLXNrZWxldG9uL3NjLXNhbmR3aWNoLW0yLXNrZWxldG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWktbmV3LWNhcnQtaXRlbS1zYW5kd2ljaC1tMic7XG4iXX0=