@snabcentr/client-ui 4.6.6 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/snabcentr-client-ui.mjs +3362 -4046
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +35 -36
- package/release_notes.tmp +2 -14
- package/styles/taiga/variables.less +16 -17
- package/styles/tailwind/tailwind.scss +0 -8
- package/types/snabcentr-client-ui.d.ts +5704 -0
- package/accordion/index.d.ts +0 -3
- package/accordion/sc-accordion-content.directive.d.ts +0 -9
- package/accordion/sc-accordion.component.d.ts +0 -56
- package/accordion/sc-accordion.module.d.ts +0 -15
- package/auth/enums/auth-method.d.ts +0 -13
- package/auth/index.d.ts +0 -8
- package/auth/interfaces/index.d.ts +0 -2
- package/auth/interfaces/sc-bank-account-form-group.d.ts +0 -11
- package/auth/interfaces/sc-contact-form-group.d.ts +0 -10
- package/auth/sc-auth.module.d.ts +0 -27
- package/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.d.ts +0 -55
- package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +0 -45
- package/auth/sc-sign-in-form/sc-sign-in-form.component.d.ts +0 -53
- package/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.d.ts +0 -113
- package/auth/sign-up-form/sc-sign-up-form.component.d.ts +0 -166
- package/banner/index.d.ts +0 -2
- package/banner/sc-banner.component.d.ts +0 -79
- package/banner/sc-banner.module.d.ts +0 -17
- package/brands-list/index.d.ts +0 -2
- package/brands-list/sc-brands-list.component.d.ts +0 -15
- package/brands-list/sc-brands-list.module.d.ts +0 -12
- 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 -98
- package/cart/add-or-editing-cart-item-dialog/index.d.ts +0 -2
- package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +0 -49
- package/cart/index.d.ts +0 -2
- package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +0 -62
- package/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.d.ts +0 -47
- package/catalog/catalog-filters/index.d.ts +0 -4
- package/catalog/catalog-filters/sc-catalog-filters.component.d.ts +0 -180
- package/catalog/catalog-filters/tokens/sc-catalog-products-filters.d.ts +0 -7
- package/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.d.ts +0 -5
- package/catalog/category-card/sc-category-card.component.d.ts +0 -76
- package/catalog/cost-with-discount/cost-with-discount.component.d.ts +0 -23
- package/catalog/download-price-list/sc-download-price-list.component.d.ts +0 -38
- package/catalog/hover-image-carousel/sc-hover-image-carousel.component.d.ts +0 -48
- package/catalog/index.d.ts +0 -15
- package/catalog/input-quantity/sc-input-quantity.component.d.ts +0 -82
- package/catalog/notify-when-in-stock-dialog/index.d.ts +0 -2
- package/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.d.ts +0 -90
- package/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.d.ts +0 -22
- package/catalog/price-card/sc-price-card.component.d.ts +0 -18
- package/catalog/price-card-inline/sc-price-card-inline.component.d.ts +0 -10
- package/catalog/price-history/sc-price-history.component.d.ts +0 -88
- package/catalog/price-list-pagination/sc-price-list-pagination.component.d.ts +0 -40
- package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +0 -47
- package/catalog/sc-catalog.module.d.ts +0 -29
- package/catalog/sc-favorite-button/sc-favorite-button.component.d.ts +0 -25
- package/catalog/seo-tags/sc-seo-tags.component.d.ts +0 -20
- package/configurators/index.d.ts +0 -3
- package/configurators/models/index.d.ts +0 -3
- package/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.d.ts +0 -22
- package/configurators/models/sandwich/sc-i-sandwich-settings.d.ts +0 -18
- package/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.d.ts +0 -18
- package/configurators/sandwich/index.d.ts +0 -3
- package/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.d.ts +0 -8
- package/configurators/sandwich/sc-i-new-cart-item-sandwich.d.ts +0 -14
- package/configurators/sandwich/sc-sandwich.component.d.ts +0 -182
- package/configurators/sandwich_m2/index.d.ts +0 -4
- package/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.d.ts +0 -8
- package/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.d.ts +0 -23
- package/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.d.ts +0 -13
- package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +0 -267
- package/contacts/add-contact-dialog/sc-add-contact-dialog.component.d.ts +0 -49
- package/contacts/contacts-accordion/sc-contacts-accordion.component.d.ts +0 -23
- package/contacts/index.d.ts +0 -7
- package/contacts/manager-card/sc-manager-card.component.d.ts +0 -22
- package/contacts/manager-card-push/sc-manager-card-push.component.d.ts +0 -18
- package/contacts/new-contact-form/sc-new-contact-form.component.d.ts +0 -28
- package/contacts/sc-contacts.module.d.ts +0 -27
- package/contacts/tokens/index.d.ts +0 -2
- package/contacts/tokens/sc-manager-qr-handler.token.d.ts +0 -6
- package/contacts/tokens/sc-show-help-notification-in-phone-input.token.d.ts +0 -5
- package/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.d.ts +0 -49
- package/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.d.ts +0 -158
- package/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.d.ts +0 -62
- package/contragents/contragents-accordion/sc-contragents-accordion.component.d.ts +0 -49
- package/contragents/index.d.ts +0 -7
- package/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.d.ts +0 -64
- package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +0 -119
- package/contragents/sc-contragents.module.d.ts +0 -26
- package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -141
- package/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.d.ts +0 -50
- package/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.d.ts +0 -49
- package/delivery-address/index.d.ts +0 -4
- package/delivery-address/sc-delivery-address.module.d.ts +0 -25
- package/dialogs/index.d.ts +0 -1
- package/dialogs/sc-resource-preview/sc-resource-preview.component.d.ts +0 -42
- package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +0 -136
- package/directives/index.d.ts +0 -9
- package/directives/links/index.d.ts +0 -4
- package/directives/links/sc-email-link.directive.d.ts +0 -25
- package/directives/links/sc-link-location.d.ts +0 -5
- package/directives/links/sc-links.d.ts +0 -7
- package/directives/links/sc-tel-link.directive.d.ts +0 -40
- package/directives/next-input-focus/sc-next-input-focus.directive.d.ts +0 -27
- package/directives/next-input-focus/sc-next-input-focus.module.d.ts +0 -10
- package/directives/print/sc-print.directive.d.ts +0 -21
- package/directives/sc-date-value-transformer.directive.d.ts +0 -8
- package/directives/sc-focus-first-invalid-field.directive.d.ts +0 -30
- package/directives/select-on-focusin/sc-select-on-focusin.directive.d.ts +0 -14
- package/directives/terminal-link/sc-terminal-link.directive.d.ts +0 -34
- package/error-handler/consts/error-change-handler.providers.d.ts +0 -6
- package/error-handler/error-block-status/error-block-status.component.d.ts +0 -45
- package/error-handler/index.d.ts +0 -4
- package/error-handler/interfaces/i-block-error.d.ts +0 -17
- package/error-handler/sc-error-handler.component.d.ts +0 -40
- package/esm2022/accordion/index.mjs +0 -4
- package/esm2022/accordion/sc-accordion-content.directive.mjs +0 -17
- package/esm2022/accordion/sc-accordion.component.mjs +0 -92
- package/esm2022/accordion/sc-accordion.module.mjs +0 -26
- package/esm2022/auth/enums/auth-method.mjs +0 -15
- package/esm2022/auth/index.mjs +0 -9
- package/esm2022/auth/interfaces/index.mjs +0 -3
- package/esm2022/auth/interfaces/sc-bank-account-form-group.mjs +0 -2
- package/esm2022/auth/interfaces/sc-contact-form-group.mjs +0 -2
- package/esm2022/auth/sc-auth.module.mjs +0 -103
- package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +0 -100
- package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +0 -81
- package/esm2022/auth/sc-sign-in-form/sc-sign-in-form.component.mjs +0 -89
- package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +0 -203
- package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +0 -334
- package/esm2022/banner/index.mjs +0 -3
- package/esm2022/banner/sc-banner.component.mjs +0 -131
- package/esm2022/banner/sc-banner.module.mjs +0 -29
- package/esm2022/brands-list/index.mjs +0 -3
- package/esm2022/brands-list/sc-brands-list.component.mjs +0 -24
- package/esm2022/brands-list/sc-brands-list.module.mjs +0 -22
- 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 -229
- package/esm2022/cart/add-or-editing-cart-item-dialog/index.mjs +0 -3
- package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +0 -75
- package/esm2022/cart/index.mjs +0 -3
- package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +0 -110
- package/esm2022/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.mjs +0 -59
- package/esm2022/catalog/catalog-filters/index.mjs +0 -5
- package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +0 -402
- package/esm2022/catalog/catalog-filters/tokens/sc-catalog-products-filters.mjs +0 -10
- package/esm2022/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.mjs +0 -6
- package/esm2022/catalog/category-card/sc-category-card.component.mjs +0 -102
- package/esm2022/catalog/cost-with-discount/cost-with-discount.component.mjs +0 -39
- package/esm2022/catalog/download-price-list/sc-download-price-list.component.mjs +0 -56
- package/esm2022/catalog/hover-image-carousel/sc-hover-image-carousel.component.mjs +0 -76
- package/esm2022/catalog/index.mjs +0 -16
- package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +0 -189
- package/esm2022/catalog/notify-when-in-stock-dialog/index.mjs +0 -3
- package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +0 -173
- package/esm2022/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.mjs +0 -35
- package/esm2022/catalog/price-card/sc-price-card.component.mjs +0 -73
- package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +0 -56
- package/esm2022/catalog/price-history/sc-price-history.component.mjs +0 -140
- package/esm2022/catalog/price-list-pagination/sc-price-list-pagination.component.mjs +0 -65
- package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +0 -61
- package/esm2022/catalog/sc-catalog.module.mjs +0 -126
- package/esm2022/catalog/sc-favorite-button/sc-favorite-button.component.mjs +0 -42
- package/esm2022/catalog/seo-tags/sc-seo-tags.component.mjs +0 -25
- package/esm2022/configurators/index.mjs +0 -4
- package/esm2022/configurators/models/index.mjs +0 -4
- package/esm2022/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.mjs +0 -2
- package/esm2022/configurators/models/sandwich/sc-i-sandwich-settings.mjs +0 -2
- package/esm2022/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.mjs +0 -2
- package/esm2022/configurators/sandwich/index.mjs +0 -4
- package/esm2022/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.mjs +0 -14
- package/esm2022/configurators/sandwich/sc-i-new-cart-item-sandwich.mjs +0 -2
- package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +0 -382
- package/esm2022/configurators/sandwich_m2/index.mjs +0 -5
- package/esm2022/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.mjs +0 -14
- package/esm2022/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.mjs +0 -2
- package/esm2022/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.mjs +0 -5
- package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +0 -561
- package/esm2022/contacts/add-contact-dialog/sc-add-contact-dialog.component.mjs +0 -91
- package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +0 -37
- package/esm2022/contacts/index.mjs +0 -8
- package/esm2022/contacts/manager-card/sc-manager-card.component.mjs +0 -58
- package/esm2022/contacts/manager-card-push/sc-manager-card-push.component.mjs +0 -28
- package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +0 -37
- package/esm2022/contacts/sc-contacts.module.mjs +0 -89
- package/esm2022/contacts/tokens/index.mjs +0 -3
- package/esm2022/contacts/tokens/sc-manager-qr-handler.token.mjs +0 -25
- package/esm2022/contacts/tokens/sc-show-help-notification-in-phone-input.token.mjs +0 -9
- package/esm2022/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.mjs +0 -81
- package/esm2022/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +0 -266
- package/esm2022/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.mjs +0 -74
- package/esm2022/contragents/contragents-accordion/sc-contragents-accordion.component.mjs +0 -68
- package/esm2022/contragents/index.mjs +0 -8
- package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +0 -72
- package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +0 -224
- package/esm2022/contragents/sc-contragents.module.mjs +0 -115
- package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +0 -248
- package/esm2022/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.mjs +0 -60
- package/esm2022/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.mjs +0 -68
- package/esm2022/delivery-address/index.mjs +0 -5
- package/esm2022/delivery-address/sc-delivery-address.module.mjs +0 -96
- package/esm2022/dialogs/index.mjs +0 -2
- package/esm2022/dialogs/sc-resource-preview/sc-resource-preview.component.mjs +0 -73
- package/esm2022/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +0 -170
- package/esm2022/directives/index.mjs +0 -10
- package/esm2022/directives/links/index.mjs +0 -5
- package/esm2022/directives/links/sc-email-link.directive.mjs +0 -49
- package/esm2022/directives/links/sc-link-location.mjs +0 -2
- package/esm2022/directives/links/sc-links.mjs +0 -8
- package/esm2022/directives/links/sc-tel-link.directive.mjs +0 -79
- package/esm2022/directives/next-input-focus/sc-next-input-focus.directive.mjs +0 -70
- package/esm2022/directives/next-input-focus/sc-next-input-focus.module.mjs +0 -19
- package/esm2022/directives/print/sc-print.directive.mjs +0 -36
- package/esm2022/directives/sc-date-value-transformer.directive.mjs +0 -30
- package/esm2022/directives/sc-focus-first-invalid-field.directive.mjs +0 -85
- package/esm2022/directives/select-on-focusin/sc-select-on-focusin.directive.mjs +0 -31
- package/esm2022/directives/terminal-link/sc-terminal-link.directive.mjs +0 -69
- package/esm2022/error-handler/consts/error-change-handler.providers.mjs +0 -10
- package/esm2022/error-handler/error-block-status/error-block-status.component.mjs +0 -88
- package/esm2022/error-handler/index.mjs +0 -5
- package/esm2022/error-handler/interfaces/i-block-error.mjs +0 -2
- package/esm2022/error-handler/sc-error-handler.component.mjs +0 -58
- package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +0 -344
- package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +0 -32
- package/esm2022/feedback/index.mjs +0 -4
- package/esm2022/feedback/interfaces/index.mjs +0 -2
- package/esm2022/feedback/interfaces/sc-feedback-form-config.mjs +0 -2
- package/esm2022/files/directives/index.mjs +0 -3
- package/esm2022/files/directives/tree-top.directive.mjs +0 -63
- package/esm2022/files/directives/tree.directive.mjs +0 -47
- package/esm2022/files/file-tree-item/file-tree-item.component.mjs +0 -18
- package/esm2022/files/files-and-documents/files-and-documents.component.mjs +0 -61
- package/esm2022/files/files-and-documents.module.mjs +0 -28
- package/esm2022/files/index.mjs +0 -6
- package/esm2022/files/interfaces/tree-node.mjs +0 -2
- package/esm2022/files/services/index.mjs +0 -3
- package/esm2022/files/services/tree-icon.service.mjs +0 -49
- package/esm2022/files/services/tree-loader.service.mjs +0 -62
- package/esm2022/form-fields/addresses-selection-field/sc-addresses-selection-field.component.mjs +0 -156
- package/esm2022/form-fields/form-fields.module.mjs +0 -66
- package/esm2022/form-fields/index.mjs +0 -4
- package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +0 -174
- package/esm2022/icons/index.mjs +0 -2
- package/esm2022/icons/sc-client-ui-icons-name.mjs +0 -99
- package/esm2022/loader/index.mjs +0 -2
- package/esm2022/loader/sc-i-loader.mjs +0 -2
- package/esm2022/masks/index.mjs +0 -8
- package/esm2022/masks/sc-account-number-mask.mjs +0 -7
- package/esm2022/masks/sc-bic-mask.mjs +0 -7
- package/esm2022/masks/sc-correspondent-account-mask.mjs +0 -7
- package/esm2022/masks/sc-inn-mask.mjs +0 -13
- package/esm2022/masks/sc-kpp-mask.mjs +0 -7
- package/esm2022/masks/sc-okpo-mask.mjs +0 -13
- package/esm2022/masks/sc-phone-verification-code-mask.mjs +0 -7
- package/esm2022/methods/index.mjs +0 -2
- package/esm2022/methods/sc-get-current-route.mjs +0 -14
- package/esm2022/models/i-sc-image.mjs +0 -2
- package/esm2022/models/index.mjs +0 -2
- package/esm2022/news/index.mjs +0 -4
- package/esm2022/news/news-card/sc-news-card.component.mjs +0 -34
- package/esm2022/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +0 -31
- package/esm2022/news/sc-news.module.mjs +0 -26
- package/esm2022/noindex-wrapper/directives/index.mjs +0 -2
- package/esm2022/noindex-wrapper/directives/sc-noindex.directive.mjs +0 -58
- package/esm2022/noindex-wrapper/index.mjs +0 -3
- package/esm2022/noindex-wrapper/sc-noindex-wrapper.component.mjs +0 -18
- package/esm2022/order/directives/index.mjs +0 -3
- package/esm2022/order/directives/sc-order-accessor.directive.mjs +0 -28
- package/esm2022/order/directives/sc-order-options.mjs +0 -11
- package/esm2022/order/draft/sc-draft.component.mjs +0 -118
- package/esm2022/order/index.mjs +0 -10
- package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +0 -22
- package/esm2022/order/order-item/sc-order-item.component.mjs +0 -108
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +0 -208
- package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +0 -75
- package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +0 -75
- package/esm2022/order/sc-order.module.mjs +0 -52
- package/esm2022/order/sc-payment-status/sc-payment-status.component.mjs +0 -35
- package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +0 -49
- package/esm2022/pages/frequently-asked-questions/sc-page-size-options.mjs +0 -8
- package/esm2022/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.mjs +0 -59
- package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +0 -107
- package/esm2022/pages/index.mjs +0 -7
- package/esm2022/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.mjs +0 -46
- package/esm2022/pages/privacy-policy/sc-privacy-policy.component.mjs +0 -30
- package/esm2022/pages/public-offer/sc-public-offer.component.mjs +0 -50
- package/esm2022/pipes/index.mjs +0 -3
- package/esm2022/pipes/sc-format-date.mjs +0 -33
- package/esm2022/pipes/sc-phone-format.mjs +0 -44
- package/esm2022/profile/index.mjs +0 -3
- package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +0 -174
- package/esm2022/profile/sc-profile.module.mjs +0 -73
- package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +0 -30
- package/esm2022/providers/date-value-transformer/index.mjs +0 -4
- package/esm2022/providers/date-value-transformer/sc-date-value-transformer-types.mjs +0 -2
- package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-end-time.mjs +0 -26
- package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-start-time.mjs +0 -37
- package/esm2022/providers/index.mjs +0 -17
- package/esm2022/providers/sc-allow-select-terminated.mjs +0 -8
- package/esm2022/providers/sc-banner-duration.mjs +0 -8
- package/esm2022/providers/sc-country-ids.mjs +0 -8
- package/esm2022/providers/sc-date-formatter.mjs +0 -15
- package/esm2022/providers/sc-date-value-transformer.mjs +0 -12
- package/esm2022/providers/sc-debounce-time-default.mjs +0 -9
- package/esm2022/providers/sc-dialog-service.providers.mjs +0 -6
- package/esm2022/providers/sc-help-notification-close.mjs +0 -9
- package/esm2022/providers/sc-help-notification-limit.mjs +0 -8
- package/esm2022/providers/sc-hidden-print-elements.token.mjs +0 -10
- package/esm2022/providers/sc-max-files-in-form-input.mjs +0 -8
- package/esm2022/providers/sc-notify-when-in-stock-required-fields.mjs +0 -8
- package/esm2022/providers/sc-page-size-options.mjs +0 -8
- package/esm2022/providers/sc-user-providers.mjs +0 -38
- package/esm2022/providers/sc-verification-code-timeout.mjs +0 -8
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/qrcode/index.mjs +0 -3
- package/esm2022/qrcode/qrcode-dialog/sc-qrcode-dialog.component.mjs +0 -58
- package/esm2022/qrcode/sc-qrcode.module.mjs +0 -25
- package/esm2022/samples/index.mjs +0 -5
- package/esm2022/samples/interfaces/index.mjs +0 -3
- package/esm2022/samples/interfaces/sc-i-preview-sample.mjs +0 -2
- package/esm2022/samples/interfaces/sc-preview-mosquito-config.mjs +0 -2
- package/esm2022/samples/preview-sample/sc-preview-sample.component.mjs +0 -42
- package/esm2022/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.mjs +0 -63
- package/esm2022/samples/sc-sample.module.mjs +0 -66
- package/esm2022/services/index.mjs +0 -3
- package/esm2022/services/print.service.mjs +0 -49
- package/esm2022/services/sc-help-notification.service.mjs +0 -100
- package/esm2022/share-button/index.mjs +0 -3
- package/esm2022/share-button/sc-share-button.component.mjs +0 -35
- package/esm2022/share-button/sc-share-button.module.mjs +0 -22
- package/esm2022/snabcentr-client-ui.mjs +0 -5
- package/esm2022/user/index.mjs +0 -6
- package/esm2022/user/reset-user-password/sc-reset-user-password.component.mjs +0 -74
- package/esm2022/user/sc-user.module.mjs +0 -86
- package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +0 -121
- package/esm2022/user/user-managers/sc-user-managers.component.mjs +0 -40
- package/esm2022/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.mjs +0 -105
- package/esm2022/validators/index.mjs +0 -7
- package/esm2022/validators/sc-at-least-one-required-validator.mjs +0 -25
- package/esm2022/validators/sc-bic-validator.mjs +0 -10
- package/esm2022/validators/sc-correspondent-account-validator.mjs +0 -10
- package/esm2022/validators/sc-password-confirm-matching-validator.mjs +0 -17
- package/esm2022/validators/sc-phone-validator.mjs +0 -14
- package/esm2022/validators/step-validator.mjs +0 -18
- package/esm2022/verification/index.mjs +0 -3
- package/esm2022/verification/sc-verification.module.mjs +0 -86
- package/esm2022/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +0 -259
- package/feedback/feedback-form/sc-feedback-form.component.d.ts +0 -163
- package/feedback/gratitude/sc-gratitude.component.d.ts +0 -20
- package/feedback/index.d.ts +0 -3
- package/feedback/interfaces/index.d.ts +0 -1
- package/feedback/interfaces/sc-feedback-form-config.d.ts +0 -23
- package/files/directives/index.d.ts +0 -2
- package/files/directives/tree-top.directive.d.ts +0 -33
- package/files/directives/tree.directive.d.ts +0 -35
- package/files/file-tree-item/file-tree-item.component.d.ts +0 -9
- package/files/files-and-documents/files-and-documents.component.d.ts +0 -27
- package/files/files-and-documents.module.d.ts +0 -17
- package/files/index.d.ts +0 -5
- package/files/interfaces/tree-node.d.ts +0 -29
- package/files/services/index.d.ts +0 -2
- package/files/services/tree-icon.service.d.ts +0 -23
- package/files/services/tree-loader.service.d.ts +0 -43
- package/form-fields/addresses-selection-field/sc-addresses-selection-field.component.d.ts +0 -78
- package/form-fields/form-fields.module.d.ts +0 -18
- package/form-fields/index.d.ts +0 -3
- package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +0 -73
- package/icons/index.d.ts +0 -1
- package/icons/sc-client-ui-icons-name.d.ts +0 -4
- package/index.d.ts +0 -5
- package/loader/index.d.ts +0 -1
- package/loader/sc-i-loader.d.ts +0 -9
- package/masks/index.d.ts +0 -7
- package/masks/sc-account-number-mask.d.ts +0 -5
- package/masks/sc-bic-mask.d.ts +0 -5
- package/masks/sc-correspondent-account-mask.d.ts +0 -5
- package/masks/sc-inn-mask.d.ts +0 -9
- package/masks/sc-kpp-mask.d.ts +0 -5
- package/masks/sc-okpo-mask.d.ts +0 -9
- package/masks/sc-phone-verification-code-mask.d.ts +0 -5
- package/methods/index.d.ts +0 -1
- package/methods/sc-get-current-route.d.ts +0 -8
- package/models/i-sc-image.d.ts +0 -17
- package/models/index.d.ts +0 -1
- package/news/index.d.ts +0 -3
- package/news/news-card/sc-news-card.component.d.ts +0 -22
- package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +0 -16
- package/news/sc-news.module.d.ts +0 -16
- package/noindex-wrapper/directives/index.d.ts +0 -1
- package/noindex-wrapper/directives/sc-noindex.directive.d.ts +0 -29
- package/noindex-wrapper/index.d.ts +0 -2
- package/noindex-wrapper/sc-noindex-wrapper.component.d.ts +0 -9
- package/order/directives/index.d.ts +0 -2
- package/order/directives/sc-order-accessor.directive.d.ts +0 -13
- package/order/directives/sc-order-options.d.ts +0 -14
- package/order/draft/sc-draft.component.d.ts +0 -63
- package/order/index.d.ts +0 -9
- package/order/models/sc-i-cart-items-by-direction.d.ts +0 -25
- package/order/order-item/sc-order-item.component.d.ts +0 -39
- package/order/order-items-list/sc-order-items-list.component.d.ts +0 -109
- package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +0 -58
- package/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.d.ts +0 -55
- package/order/sc-order.module.d.ts +0 -18
- package/order/sc-payment-status/sc-payment-status.component.d.ts +0 -25
- package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +0 -22
- package/pages/frequently-asked-questions/sc-page-size-options.d.ts +0 -5
- package/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.d.ts +0 -28
- package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +0 -79
- package/pages/index.d.ts +0 -6
- package/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.d.ts +0 -17
- package/pages/privacy-policy/sc-privacy-policy.component.d.ts +0 -17
- package/pages/public-offer/sc-public-offer.component.d.ts +0 -22
- package/pipes/index.d.ts +0 -2
- package/pipes/sc-format-date.d.ts +0 -20
- package/pipes/sc-phone-format.d.ts +0 -21
- package/profile/index.d.ts +0 -2
- package/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.d.ts +0 -126
- package/profile/sc-profile.module.d.ts +0 -23
- package/providers/cleanup-recaptcha-artifacts.d.ts +0 -7
- package/providers/date-value-transformer/index.d.ts +0 -3
- package/providers/date-value-transformer/sc-date-value-transformer-types.d.ts +0 -9
- package/providers/date-value-transformer/sc-date-value-transformer-with-end-time.d.ts +0 -16
- package/providers/date-value-transformer/sc-date-value-transformer-with-start-time.d.ts +0 -22
- package/providers/index.d.ts +0 -16
- package/providers/sc-allow-select-terminated.d.ts +0 -5
- package/providers/sc-banner-duration.d.ts +0 -5
- package/providers/sc-country-ids.d.ts +0 -5
- package/providers/sc-date-formatter.d.ts +0 -6
- package/providers/sc-date-value-transformer.d.ts +0 -5
- package/providers/sc-debounce-time-default.d.ts +0 -5
- package/providers/sc-dialog-service.providers.d.ts +0 -45
- package/providers/sc-help-notification-close.d.ts +0 -6
- package/providers/sc-help-notification-limit.d.ts +0 -5
- package/providers/sc-hidden-print-elements.token.d.ts +0 -6
- package/providers/sc-max-files-in-form-input.d.ts +0 -5
- package/providers/sc-notify-when-in-stock-required-fields.d.ts +0 -5
- package/providers/sc-page-size-options.d.ts +0 -5
- package/providers/sc-user-providers.d.ts +0 -21
- package/providers/sc-verification-code-timeout.d.ts +0 -5
- package/public-api.d.ts +0 -34
- package/qrcode/index.d.ts +0 -2
- package/qrcode/qrcode-dialog/sc-qrcode-dialog.component.d.ts +0 -37
- package/qrcode/sc-qrcode.module.d.ts +0 -14
- package/samples/index.d.ts +0 -4
- package/samples/interfaces/index.d.ts +0 -2
- package/samples/interfaces/sc-i-preview-sample.d.ts +0 -56
- package/samples/interfaces/sc-preview-mosquito-config.d.ts +0 -62
- package/samples/preview-sample/sc-preview-sample.component.d.ts +0 -30
- package/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.d.ts +0 -50
- package/samples/sc-sample.module.d.ts +0 -19
- package/services/index.d.ts +0 -2
- package/services/print.service.d.ts +0 -31
- package/services/sc-help-notification.service.d.ts +0 -70
- package/share-button/index.d.ts +0 -2
- package/share-button/sc-share-button.component.d.ts +0 -22
- package/share-button/sc-share-button.module.d.ts +0 -12
- package/user/index.d.ts +0 -5
- package/user/reset-user-password/sc-reset-user-password.component.d.ts +0 -46
- package/user/sc-user.module.d.ts +0 -24
- package/user/update-user-info-dialog/sc-update-user-info-dialog.component.d.ts +0 -63
- package/user/user-managers/sc-user-managers.component.d.ts +0 -23
- package/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.d.ts +0 -53
- package/validators/index.d.ts +0 -6
- package/validators/sc-at-least-one-required-validator.d.ts +0 -10
- package/validators/sc-bic-validator.d.ts +0 -8
- package/validators/sc-correspondent-account-validator.d.ts +0 -8
- package/validators/sc-password-confirm-matching-validator.d.ts +0 -8
- package/validators/sc-phone-validator.d.ts +0 -5
- package/validators/step-validator.d.ts +0 -8
- package/verification/index.d.ts +0 -2
- package/verification/sc-verification.module.d.ts +0 -21
- package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +0 -145
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
/* eslint-disable class-methods-use-this */
|
|
2
|
-
import { ChangeDetectionStrategy, Component, DestroyRef, inject, input, output } from '@angular/core';
|
|
3
|
-
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { SC_CATEGORY_INFO, ScCatalogFilterService, ScIdOrSlugPipe, } from '@snabcentr/client-core';
|
|
6
|
-
import { tuiIsPresent } from '@taiga-ui/cdk';
|
|
7
|
-
import { TuiButton, TuiLabel, TuiNumberFormat, TuiTextfield } from '@taiga-ui/core';
|
|
8
|
-
import { TuiCheckbox, TuiInputNumber, TuiRange } from '@taiga-ui/kit';
|
|
9
|
-
import { isNil } from 'lodash-es';
|
|
10
|
-
import { catchError, debounceTime, EMPTY, filter, map, merge, share, Subscription, switchMap, tap } from 'rxjs';
|
|
11
|
-
import { ScSelectOnFocusinDirective } from '../../directives/select-on-focusin/sc-select-on-focusin.directive';
|
|
12
|
-
import { ScCatalogFilterCollapsibleComponent } from './collapsible/sc-catalog-filter-collapsible.component';
|
|
13
|
-
import { SC_CATALOG_PRODUCTS_FILTERS } from './tokens/sc-catalog-products-filters';
|
|
14
|
-
import { SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY } from './tokens/sc-catalog-show-products-recursively';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "@angular/forms";
|
|
17
|
-
import * as i2 from "@taiga-ui/core/components/label";
|
|
18
|
-
import * as i3 from "@taiga-ui/core";
|
|
19
|
-
import * as i4 from "@taiga-ui/kit";
|
|
20
|
-
/**
|
|
21
|
-
* Компонент вывода фильтров каталога.
|
|
22
|
-
*/
|
|
23
|
-
export class ScCatalogFiltersComponent {
|
|
24
|
-
/**
|
|
25
|
-
* Инициализирует экземпляр класса {@link ScCatalogFiltersComponent}.
|
|
26
|
-
*/
|
|
27
|
-
constructor() {
|
|
28
|
-
/**
|
|
29
|
-
* Подписки синхронизации контролов формы (range slider, single-select checkbox).
|
|
30
|
-
*/
|
|
31
|
-
this.formSyncs = new Subscription();
|
|
32
|
-
/**
|
|
33
|
-
* Сервис для работы с фильтрами каталога.
|
|
34
|
-
*/
|
|
35
|
-
this.catalogFilterService = inject(ScCatalogFilterService);
|
|
36
|
-
/**
|
|
37
|
-
* Пайп, возвращающий идентификатор или символьное обозначение (slug) исходя из настроек окружения.
|
|
38
|
-
*/
|
|
39
|
-
this.idOrSlugPipe = inject(ScIdOrSlugPipe);
|
|
40
|
-
/**
|
|
41
|
-
* Subject для хранения фильтров продуктов.
|
|
42
|
-
*/
|
|
43
|
-
this.catalogProductsFilters$ = inject(SC_CATALOG_PRODUCTS_FILTERS);
|
|
44
|
-
/**
|
|
45
|
-
* Признак необходимости отображать фильтры для вложенных категорий.
|
|
46
|
-
*/
|
|
47
|
-
this.isRecursively = inject(SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY);
|
|
48
|
-
/**
|
|
49
|
-
* Показывать ли кнопку «Показать результаты».
|
|
50
|
-
*/
|
|
51
|
-
this.showResultsButton = input(false);
|
|
52
|
-
/**
|
|
53
|
-
* Событие нажатия на кнопку сброса всех фильтров.
|
|
54
|
-
*/
|
|
55
|
-
this.resetFilters = output();
|
|
56
|
-
/**
|
|
57
|
-
* Событие нажатия на кнопку показа результатов.
|
|
58
|
-
*/
|
|
59
|
-
this.showResults = output();
|
|
60
|
-
/**
|
|
61
|
-
* FormGroup для фильтров.
|
|
62
|
-
*/
|
|
63
|
-
this.form = new FormGroup({});
|
|
64
|
-
/**
|
|
65
|
-
* {@link Observable} фильтров категории.
|
|
66
|
-
*/
|
|
67
|
-
this.filters = toSignal(inject(SC_CATEGORY_INFO).pipe(catchError(() => EMPTY), filter(tuiIsPresent), switchMap((category) => this.catalogFilterService.getFilters$(this.idOrSlugPipe.transform(category), this.isRecursively)), filter(tuiIsPresent), map((filters) => filters
|
|
68
|
-
.filter((item) => item.type !== 'range' || item.min !== item.max)
|
|
69
|
-
.map((item) => (item.type === 'checkbox' ? { ...item, values: [...item.values].sort((a, b) => a.label.localeCompare(b.label)) } : item))), tap((filters) => {
|
|
70
|
-
this.updateFormControls(filters);
|
|
71
|
-
}), share()));
|
|
72
|
-
inject(DestroyRef).onDestroy(() => {
|
|
73
|
-
this.formSyncs.unsubscribe();
|
|
74
|
-
});
|
|
75
|
-
this.form.valueChanges.pipe(debounceTime(0), takeUntilDestroyed()).subscribe((filters) => {
|
|
76
|
-
this.catalogProductsFilters$.next(this.buildPropertyFilters(filters));
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Обновляет состав контролов формы на основе переданных фильтров.
|
|
81
|
-
*
|
|
82
|
-
* @param filters Массив фильтров для создания контролов.
|
|
83
|
-
*/
|
|
84
|
-
updateFormControls(filters) {
|
|
85
|
-
this.formSyncs.unsubscribe();
|
|
86
|
-
this.formSyncs = new Subscription();
|
|
87
|
-
Object.keys(this.form.controls).forEach((key) => {
|
|
88
|
-
this.form.removeControl(key, { emitEvent: false });
|
|
89
|
-
});
|
|
90
|
-
filters.forEach((item) => {
|
|
91
|
-
switch (item.type) {
|
|
92
|
-
case 'checkbox': {
|
|
93
|
-
const checkboxControl = this.createCheckboxFormControl(item);
|
|
94
|
-
this.form.addControl(item.id, checkboxControl, { emitEvent: false });
|
|
95
|
-
// Single-select для !isMultiple: при выборе одного остальные снимаются.
|
|
96
|
-
if (!item.isMultiple && item.values.length > 1) {
|
|
97
|
-
this.formSyncs.add(this.syncSingleSelectCheckbox(checkboxControl));
|
|
98
|
-
}
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
case 'range': {
|
|
102
|
-
const rangeControl = this.createRangeFormControl(item);
|
|
103
|
-
this.form.addControl(item.id, rangeControl, { emitEvent: false });
|
|
104
|
-
this.formSyncs.add(this.syncRangeFromToAndSlider(rangeControl));
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
case 'toggle':
|
|
108
|
-
this.form.addControl(item.id, this.createToggleFormControl(item), { emitEvent: false });
|
|
109
|
-
break;
|
|
110
|
-
default:
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Преобразует значения формы в объект фильтров свойств.
|
|
117
|
-
*
|
|
118
|
-
* @param value Значения формы.
|
|
119
|
-
* @returns Объект фильтров свойств.
|
|
120
|
-
*/
|
|
121
|
-
buildPropertyFilters(value) {
|
|
122
|
-
const result = {};
|
|
123
|
-
this.filters()?.forEach((filterItem) => {
|
|
124
|
-
const controlValue = value[filterItem.id];
|
|
125
|
-
if (isNil(controlValue)) {
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
switch (filterItem.type) {
|
|
129
|
-
case 'checkbox':
|
|
130
|
-
this.processCheckboxFilter(result, filterItem, controlValue);
|
|
131
|
-
break;
|
|
132
|
-
case 'range':
|
|
133
|
-
this.processRangeFilter(result, filterItem.id, controlValue);
|
|
134
|
-
break;
|
|
135
|
-
case 'toggle':
|
|
136
|
-
this.processToggleFilter(result, filterItem.id, controlValue);
|
|
137
|
-
break;
|
|
138
|
-
default:
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
return result;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Создаёт FormGroup для checkbox: на каждый {@code value.id} — булевый контрол.
|
|
146
|
-
*
|
|
147
|
-
* Единый формат и для одного, и для множества значений: шаблон рендерит их одинаково.
|
|
148
|
-
* Различие в API-выводе для одиночного значения (boolean вместо массива) обрабатывается в {@link processCheckboxFilter}.
|
|
149
|
-
*
|
|
150
|
-
* @param checkboxFilter Фильтр типа checkbox.
|
|
151
|
-
*/
|
|
152
|
-
createCheckboxFormControl(checkboxFilter) {
|
|
153
|
-
const isSelected = (id) => checkboxFilter.selectedValues?.includes(id) ?? false;
|
|
154
|
-
const controls = {};
|
|
155
|
-
checkboxFilter.values.forEach((value) => {
|
|
156
|
-
controls[value.id] = new FormControl(isSelected(value.id), { nonNullable: true });
|
|
157
|
-
});
|
|
158
|
-
return new FormGroup(controls);
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Создаёт {@link FormGroup} для range: {@code from}, {@code to}, {@code slider} (кортеж для {@link TuiRange}).
|
|
162
|
-
*
|
|
163
|
-
* @param rangeFilter Фильтр типа range.
|
|
164
|
-
*/
|
|
165
|
-
createRangeFormControl(rangeFilter) {
|
|
166
|
-
const fromValue = Number(rangeFilter.selectedMin ?? rangeFilter.min);
|
|
167
|
-
const toValue = Number(rangeFilter.selectedMax ?? rangeFilter.max);
|
|
168
|
-
return new FormGroup({
|
|
169
|
-
from: new FormControl(fromValue, { nonNullable: true }),
|
|
170
|
-
to: new FormControl(toValue, { nonNullable: true }),
|
|
171
|
-
slider: new FormControl([fromValue, toValue], { nonNullable: true }),
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Реализует single-select поведение для FormGroup с булевыми контролами:
|
|
176
|
-
* при появлении нового true остальные контролы группы сбрасываются в false.
|
|
177
|
-
*
|
|
178
|
-
* Сохраняет последнее «стабильное» состояние и сравнивает следующее значение с ним —
|
|
179
|
-
* новый true (отсутствовал в prev) считается выбранным, остальные сбрасываются через setValue.
|
|
180
|
-
*
|
|
181
|
-
* @param group FormGroup checkbox-фильтра (id → boolean).
|
|
182
|
-
*/
|
|
183
|
-
syncSingleSelectCheckbox(group) {
|
|
184
|
-
let previousState = group.getRawValue();
|
|
185
|
-
return group.valueChanges.subscribe((value) => {
|
|
186
|
-
const current = value;
|
|
187
|
-
const newlyChecked = Object.entries(current).find(([id, isChecked]) => {
|
|
188
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
189
|
-
return isChecked && !previousState[id];
|
|
190
|
-
})?.[0];
|
|
191
|
-
if (!newlyChecked) {
|
|
192
|
-
previousState = { ...current };
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
const next = {};
|
|
196
|
-
Object.keys(group.controls).forEach((id) => {
|
|
197
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
198
|
-
next[id] = id === newlyChecked;
|
|
199
|
-
});
|
|
200
|
-
previousState = next;
|
|
201
|
-
group.setValue(next);
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Связывает поля «от»/«до» с контролом слайдера.
|
|
206
|
-
*
|
|
207
|
-
* @param group FormGroup range-фильтра.
|
|
208
|
-
*/
|
|
209
|
-
syncRangeFromToAndSlider(group) {
|
|
210
|
-
const from = group.get('from');
|
|
211
|
-
const to = group.get('to');
|
|
212
|
-
const slider = group.get('slider');
|
|
213
|
-
if (!from || !to || !slider) {
|
|
214
|
-
return new Subscription();
|
|
215
|
-
}
|
|
216
|
-
const sub = new Subscription();
|
|
217
|
-
// Инпуты → слайдер; если «от» > «до», поднимаем «до» до «от».
|
|
218
|
-
const applySliderFromInputs = () => {
|
|
219
|
-
const low = Number(from.value);
|
|
220
|
-
let high = Number(to.value);
|
|
221
|
-
if (low > high) {
|
|
222
|
-
high = low;
|
|
223
|
-
to.setValue(high, { emitEvent: false });
|
|
224
|
-
}
|
|
225
|
-
const currentPair = slider.value;
|
|
226
|
-
if (currentPair[0] !== low || currentPair[1] !== high) {
|
|
227
|
-
slider.setValue([low, high], { emitEvent: false });
|
|
228
|
-
slider.markAsDirty();
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
sub.add(merge(from.valueChanges, to.valueChanges).subscribe(applySliderFromInputs));
|
|
232
|
-
sub.add(slider.valueChanges.subscribe((value) => {
|
|
233
|
-
const [low, high] = value;
|
|
234
|
-
if (from.value !== low) {
|
|
235
|
-
from.setValue(low, { emitEvent: false });
|
|
236
|
-
from.markAsDirty();
|
|
237
|
-
}
|
|
238
|
-
if (to.value !== high) {
|
|
239
|
-
to.setValue(high, { emitEvent: false });
|
|
240
|
-
to.markAsDirty();
|
|
241
|
-
}
|
|
242
|
-
}));
|
|
243
|
-
// Совпасть с полями при первом показе (уже совпадает при создании, но на всякий случай).
|
|
244
|
-
applySliderFromInputs();
|
|
245
|
-
return sub;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Создает FormControl для toggle.
|
|
249
|
-
*
|
|
250
|
-
* @param toggleFilter Фильтр типа toggle.
|
|
251
|
-
*/
|
|
252
|
-
createToggleFormControl(toggleFilter) {
|
|
253
|
-
return new FormControl(toggleFilter.selectedValue ?? false, { nonNullable: true });
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Обрабатывает checkbox: FormGroup → string[] выбранных id; для единственного значения — boolean (как toggle).
|
|
257
|
-
*
|
|
258
|
-
* @param result Объект результата для заполнения.
|
|
259
|
-
* @param checkboxFilter Метафильтр checkbox.
|
|
260
|
-
* @param controlValue Значение контрола формы (запись id → boolean).
|
|
261
|
-
*/
|
|
262
|
-
processCheckboxFilter(result, checkboxFilter, controlValue) {
|
|
263
|
-
const selectedIds = Object.entries(controlValue)
|
|
264
|
-
.filter(([, isSelected]) => isSelected)
|
|
265
|
-
.map(([id]) => id);
|
|
266
|
-
if (selectedIds.length === 0) {
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
// eslint-disable-next-line security/detect-object-injection, no-param-reassign
|
|
270
|
-
result[checkboxFilter.id] = selectedIds;
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Обрабатывает range фильтр.
|
|
274
|
-
*
|
|
275
|
-
* @param result Объект результата для заполнения.
|
|
276
|
-
* @param filterId Идентификатор фильтра.
|
|
277
|
-
* @param range Значение контрола формы (объект с границами).
|
|
278
|
-
* @param range.from Начальное значение диапазона.
|
|
279
|
-
* @param range.to Конечное значение диапазона.
|
|
280
|
-
*/
|
|
281
|
-
processRangeFilter(result, filterId, range) {
|
|
282
|
-
// eslint-disable-next-line security/detect-object-injection, no-param-reassign
|
|
283
|
-
result[filterId] = {
|
|
284
|
-
from: String(range.from),
|
|
285
|
-
to: String(range.to),
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Обрабатывает toggle фильтр.
|
|
290
|
-
*
|
|
291
|
-
* @param result Объект результата для заполнения.
|
|
292
|
-
* @param filterId Идентификатор фильтра.
|
|
293
|
-
* @param controlValue Значение контрола формы.
|
|
294
|
-
*/
|
|
295
|
-
processToggleFilter(result, filterId, controlValue) {
|
|
296
|
-
if (controlValue) {
|
|
297
|
-
// eslint-disable-next-line security/detect-object-injection, no-param-reassign
|
|
298
|
-
result[filterId] = controlValue;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Сбрасывает поле «от» диапазона к минимальному значению фильтра.
|
|
303
|
-
*
|
|
304
|
-
* @param filterId Идентификатор фильтра.
|
|
305
|
-
* @param min Минимальное значение диапазона.
|
|
306
|
-
*/
|
|
307
|
-
resetRangeFrom(filterId, min) {
|
|
308
|
-
this.form.get(filterId)?.get('from')?.reset(+min);
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Сбрасывает поле «до» диапазона к максимальному значению фильтра.
|
|
312
|
-
*
|
|
313
|
-
* @param filterId Идентификатор фильтра.
|
|
314
|
-
* @param max Максимальное значение диапазона.
|
|
315
|
-
*/
|
|
316
|
-
resetRangeTo(filterId, max) {
|
|
317
|
-
this.form.get(filterId)?.get('to')?.reset(+max);
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Сбрасывает все чекбоксы группы в `false`.
|
|
321
|
-
*
|
|
322
|
-
* @param filterId Идентификатор фильтра (ключ FormGroup в форме).
|
|
323
|
-
*/
|
|
324
|
-
resetCheckboxGroup(filterId) {
|
|
325
|
-
const group = this.form.get(filterId);
|
|
326
|
-
if (!group) {
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
const resetValue = {};
|
|
330
|
-
Object.keys(group.controls).forEach((id) => {
|
|
331
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
332
|
-
resetValue[id] = false;
|
|
333
|
-
});
|
|
334
|
-
group.reset(resetValue);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Сбрасывает все фильтры и оповещает родителя о нажатии кнопки сброса.
|
|
338
|
-
*/
|
|
339
|
-
onResetFiltersClick() {
|
|
340
|
-
this.resetAllFilters();
|
|
341
|
-
this.resetFilters.emit();
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Оповещает родителя о нажатии кнопки показа результатов.
|
|
345
|
-
*/
|
|
346
|
-
onShowResultsClick() {
|
|
347
|
-
this.showResults.emit();
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Сбрасывает все фильтры к исходным значениям.
|
|
351
|
-
*/
|
|
352
|
-
resetAllFilters() {
|
|
353
|
-
this.filters()?.forEach((filterItem) => {
|
|
354
|
-
const control = this.form.get(filterItem.id);
|
|
355
|
-
if (!control) {
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
switch (filterItem.type) {
|
|
359
|
-
case 'checkbox': {
|
|
360
|
-
const group = control;
|
|
361
|
-
const resetValue = {};
|
|
362
|
-
Object.keys(group.controls).forEach((id) => {
|
|
363
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
364
|
-
resetValue[id] = false;
|
|
365
|
-
});
|
|
366
|
-
group.reset(resetValue);
|
|
367
|
-
break;
|
|
368
|
-
}
|
|
369
|
-
case 'toggle':
|
|
370
|
-
control.reset(false);
|
|
371
|
-
break;
|
|
372
|
-
case 'range': {
|
|
373
|
-
const group = control;
|
|
374
|
-
const min = +filterItem.min;
|
|
375
|
-
const max = +filterItem.max;
|
|
376
|
-
group.reset({ from: min, to: max, slider: [min, max] });
|
|
377
|
-
break;
|
|
378
|
-
}
|
|
379
|
-
default:
|
|
380
|
-
break;
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
385
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScCatalogFiltersComponent, isStandalone: true, selector: "sc-catalog-filters", inputs: { showResultsButton: { classPropertyName: "showResultsButton", publicName: "showResultsButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resetFilters: "resetFilters", showResults: "showResults" }, ngImport: i0, template: "@if (filters()?.length) {\n <form\n [formGroup]=\"form\"\n class=\"flex flex-col pb-1\"\n >\n @for (filter of filters(); track filter.id; let isFirst = $first) {\n @if (!isFirst) {\n <hr class=\"my-3 w-full h-px\" />\n }\n\n <div class=\"flex flex-col gap-2\">\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B. \u0414\u043B\u044F toggle \u043F\u043E\u0434\u043F\u0438\u0441\u0438 \u043D\u0435\u0442: \u043C\u0435\u0442\u043A\u0430 \u0438\u0434\u0451\u0442 \u043F\u0440\u044F\u043C\u043E \u0440\u044F\u0434\u043E\u043C \u0441 \u0441\u0430\u043C\u0438\u043C checkbox. -->\n @if (filter.type !== 'toggle') {\n <label class=\"text-body-s-bold\">{{ filter.label }}</label>\n }\n\n <!-- Checkbox: FormGroup(value.id \u2192 boolean) \u0434\u043B\u044F \u043B\u044E\u0431\u043E\u0433\u043E \u0447\u0438\u0441\u043B\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439.\n \u0420\u0430\u0437\u0432\u0438\u043B\u043A\u0430 \u043E\u0434\u043D\u043E/\u043C\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0432\u044B\u043D\u0435\u0441\u0435\u043D\u0430 \u0432 TS (\u0441\u043C. processCheckboxFilter).\n ng-template \u0432\u043D\u0443\u0442\u0440\u0438 formGroupName: \u0438\u043D\u0430\u0447\u0435 reactive forms \u043D\u0435 \u043D\u0430\u0439\u0434\u0451\u0442 ControlContainer \u043F\u0440\u0438 \u043F\u0440\u043E\u0435\u043A\u0446\u0438\u0438 \u0432 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442. -->\n @if (filter.type === 'checkbox') {\n <div\n class=\"flex flex-col gap-2\"\n [formGroupName]=\"filter.id\"\n >\n <sc-catalog-filter-collapsible\n [itemsCount]=\"filter.values.length\"\n [showReset]=\"form.get(filter.id)?.dirty ?? false\"\n (resetGroup)=\"resetCheckboxGroup(filter.id)\"\n >\n <ng-template>\n <div class=\"flex flex-col gap-2\">\n @for (value of filter.values; track value.id) {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"value.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s\">{{ value.label }}</span>\n </label>\n }\n </div>\n </ng-template>\n </sc-catalog-filter-collapsible>\n </div>\n\n <!-- Toggle: \u043E\u0434\u0438\u043D boolean \u043D\u0430 \u043A\u043E\u0440\u043D\u0435 \u0444\u043E\u0440\u043C\u044B, \u043F\u043E\u0434\u043F\u0438\u0441\u044C = filter.label -->\n } @else if (filter.type === 'toggle') {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"filter.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s-bold\">{{ filter.label }}</span>\n </label>\n\n <!-- Range: FormGroup(from, to, slider) \u0441 \u0434\u0432\u0443\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0439 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0435\u0439 -->\n } @else if (filter.type === 'range') {\n <div\n [formGroupName]=\"filter.id\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex gap-3 px-1\">\n <label\n tuiLabel\n class=\"min-w-0 flex-1\"\n >\n \u041E\u0442\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n scSelectOnFocusin\n tuiInputNumber\n formControlName=\"from\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n autocomplete=\"off\"\n />\n @if (form.get(filter.id)?.get('from')?.dirty) {\n <button\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n appearance=\"icon\"\n iconStart=\"@tui.x\"\n (click)=\"resetRangeFrom(filter.id, filter.min)\"\n ></button>\n }\n </tui-textfield>\n </label>\n <label\n tuiLabel\n class=\"min-w-0 flex-1\"\n >\n \u0414\u043E\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n scSelectOnFocusin\n tuiInputNumber\n formControlName=\"to\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n autocomplete=\"off\"\n />\n @if (form.get(filter.id)?.get('to')?.dirty) {\n <button\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n appearance=\"icon\"\n iconStart=\"@tui.x\"\n (click)=\"resetRangeTo(filter.id, filter.max)\"\n ></button>\n }\n </tui-textfield>\n </label>\n </div>\n\n <tui-range\n size=\"m\"\n formControlName=\"slider\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n [style.--tui-thickness.rem]=\"0.25\"\n />\n </div>\n }\n </div>\n }\n <button\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n class=\"mt-2\"\n (click)=\"onResetFiltersClick()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u044B\n </button>\n @if (showResultsButton()) {\n <button\n tuiButton\n appearance=\"primary\"\n type=\"button\"\n class=\"mt-2\"\n (click)=\"onShowResultsClick()\"\n >\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B\n </button>\n }\n </form>\n}\n", styles: [".accordion [tuiAccordion]{border:none;mask:none}.accordion tui-expand{box-shadow:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[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: i2.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i3.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i3.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { 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: ScCatalogFilterCollapsibleComponent, selector: "sc-catalog-filter-collapsible", inputs: ["itemsCount", "showReset"], outputs: ["resetGroup"] }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: i4.TuiInputNumberDirective, selector: "input[tuiInputNumber]", inputs: ["min", "max", "prefix", "postfix"] }, { kind: "component", type: TuiRange, selector: "tui-range", inputs: ["min", "max", "step", "size", "segments", "keySteps", "focusable", "margin", "limit"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
386
|
-
}
|
|
387
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFiltersComponent, decorators: [{
|
|
388
|
-
type: Component,
|
|
389
|
-
args: [{ standalone: true, selector: 'sc-catalog-filters', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
390
|
-
ReactiveFormsModule,
|
|
391
|
-
TuiTextfield,
|
|
392
|
-
ScSelectOnFocusinDirective,
|
|
393
|
-
ScCatalogFilterCollapsibleComponent,
|
|
394
|
-
TuiLabel,
|
|
395
|
-
TuiNumberFormat,
|
|
396
|
-
TuiCheckbox,
|
|
397
|
-
TuiInputNumber,
|
|
398
|
-
TuiRange,
|
|
399
|
-
TuiButton,
|
|
400
|
-
], template: "@if (filters()?.length) {\n <form\n [formGroup]=\"form\"\n class=\"flex flex-col pb-1\"\n >\n @for (filter of filters(); track filter.id; let isFirst = $first) {\n @if (!isFirst) {\n <hr class=\"my-3 w-full h-px\" />\n }\n\n <div class=\"flex flex-col gap-2\">\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B. \u0414\u043B\u044F toggle \u043F\u043E\u0434\u043F\u0438\u0441\u0438 \u043D\u0435\u0442: \u043C\u0435\u0442\u043A\u0430 \u0438\u0434\u0451\u0442 \u043F\u0440\u044F\u043C\u043E \u0440\u044F\u0434\u043E\u043C \u0441 \u0441\u0430\u043C\u0438\u043C checkbox. -->\n @if (filter.type !== 'toggle') {\n <label class=\"text-body-s-bold\">{{ filter.label }}</label>\n }\n\n <!-- Checkbox: FormGroup(value.id \u2192 boolean) \u0434\u043B\u044F \u043B\u044E\u0431\u043E\u0433\u043E \u0447\u0438\u0441\u043B\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439.\n \u0420\u0430\u0437\u0432\u0438\u043B\u043A\u0430 \u043E\u0434\u043D\u043E/\u043C\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0432\u044B\u043D\u0435\u0441\u0435\u043D\u0430 \u0432 TS (\u0441\u043C. processCheckboxFilter).\n ng-template \u0432\u043D\u0443\u0442\u0440\u0438 formGroupName: \u0438\u043D\u0430\u0447\u0435 reactive forms \u043D\u0435 \u043D\u0430\u0439\u0434\u0451\u0442 ControlContainer \u043F\u0440\u0438 \u043F\u0440\u043E\u0435\u043A\u0446\u0438\u0438 \u0432 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442. -->\n @if (filter.type === 'checkbox') {\n <div\n class=\"flex flex-col gap-2\"\n [formGroupName]=\"filter.id\"\n >\n <sc-catalog-filter-collapsible\n [itemsCount]=\"filter.values.length\"\n [showReset]=\"form.get(filter.id)?.dirty ?? false\"\n (resetGroup)=\"resetCheckboxGroup(filter.id)\"\n >\n <ng-template>\n <div class=\"flex flex-col gap-2\">\n @for (value of filter.values; track value.id) {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"value.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s\">{{ value.label }}</span>\n </label>\n }\n </div>\n </ng-template>\n </sc-catalog-filter-collapsible>\n </div>\n\n <!-- Toggle: \u043E\u0434\u0438\u043D boolean \u043D\u0430 \u043A\u043E\u0440\u043D\u0435 \u0444\u043E\u0440\u043C\u044B, \u043F\u043E\u0434\u043F\u0438\u0441\u044C = filter.label -->\n } @else if (filter.type === 'toggle') {\n <label class=\"flex items-center gap-2\">\n <input\n [formControlName]=\"filter.id\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span class=\"text-body-s-bold\">{{ filter.label }}</span>\n </label>\n\n <!-- Range: FormGroup(from, to, slider) \u0441 \u0434\u0432\u0443\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0439 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0435\u0439 -->\n } @else if (filter.type === 'range') {\n <div\n [formGroupName]=\"filter.id\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex gap-3 px-1\">\n <label\n tuiLabel\n class=\"min-w-0 flex-1\"\n >\n \u041E\u0442\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n scSelectOnFocusin\n tuiInputNumber\n formControlName=\"from\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n autocomplete=\"off\"\n />\n @if (form.get(filter.id)?.get('from')?.dirty) {\n <button\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n appearance=\"icon\"\n iconStart=\"@tui.x\"\n (click)=\"resetRangeFrom(filter.id, filter.min)\"\n ></button>\n }\n </tui-textfield>\n </label>\n <label\n tuiLabel\n class=\"min-w-0 flex-1\"\n >\n \u0414\u043E\n <tui-textfield [tuiTextfieldCleaner]=\"false\">\n <input\n scSelectOnFocusin\n tuiInputNumber\n formControlName=\"to\"\n [tuiNumberFormat]=\"{ precision: 0 }\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n autocomplete=\"off\"\n />\n @if (form.get(filter.id)?.get('to')?.dirty) {\n <button\n tuiIconButton\n type=\"button\"\n size=\"xs\"\n appearance=\"icon\"\n iconStart=\"@tui.x\"\n (click)=\"resetRangeTo(filter.id, filter.max)\"\n ></button>\n }\n </tui-textfield>\n </label>\n </div>\n\n <tui-range\n size=\"m\"\n formControlName=\"slider\"\n [min]=\"+filter.min\"\n [max]=\"+filter.max\"\n [style.--tui-thickness.rem]=\"0.25\"\n />\n </div>\n }\n </div>\n }\n <button\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n class=\"mt-2\"\n (click)=\"onResetFiltersClick()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0444\u0438\u043B\u044C\u0442\u0440\u044B\n </button>\n @if (showResultsButton()) {\n <button\n tuiButton\n appearance=\"primary\"\n type=\"button\"\n class=\"mt-2\"\n (click)=\"onShowResultsClick()\"\n >\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B\n </button>\n }\n </form>\n}\n", styles: [".accordion [tuiAccordion]{border:none;mask:none}.accordion tui-expand{box-shadow:none}\n"] }]
|
|
401
|
-
}], ctorParameters: () => [] });
|
|
402
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGFsb2ctZmlsdGVycy9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL3NjLWNhdGFsb2ctZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUNILGdCQUFnQixFQUVoQixzQkFBc0IsRUFFdEIsY0FBYyxHQUlqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNB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Q3hELE1BQU07Z0JBQ1YsQ0FBQztnQkFDRDtvQkFDSSxNQUFNO1lBQ2QsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F2YlEseUJBQXlCO21HQUF6Qix5QkFBeUIsNlRDaER0QyxxNlFBeUpBLGlKRHJIUSxtQkFBbUIsdW1EQUVuQiwwQkFBMEIsZ01BQzFCLG1DQUFtQyx3SUFFbkMsZUFBZSwyRkFDZixXQUFXLDZPQUVYLFFBQVEsc0pBQ1IsU0FBUzs7NEZBR0oseUJBQXlCO2tCQW5CckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ0wsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLDBCQUEwQjt3QkFDMUIsbUNBQW1DO3dCQUNuQyxRQUFRO3dCQUNSLGVBQWU7d0JBQ2YsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFFBQVE7d0JBQ1IsU0FBUztxQkFDWiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU0NfQ0FURUdPUllfSU5GTyxcbiAgICBTY0NhdGFsb2dGaWx0ZXIsXG4gICAgU2NDYXRhbG9nRmlsdGVyU2VydmljZSxcbiAgICBTY0lDaGVja2JveEZpbHRlcixcbiAgICBTY0lkT3JTbHVnUGlwZSxcbiAgICBTY1Byb3BlcnR5RmlsdGVycyxcbiAgICBTY1JhbmdlRmlsdGVyLFxuICAgIFNjVG9nZ2xlRmlsdGVyLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlMYWJlbCwgVHVpTnVtYmVyRm9ybWF0LCBUdWlUZXh0ZmllbGQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlDaGVja2JveCwgVHVpSW5wdXROdW1iZXIsIFR1aVJhbmdlIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIEVNUFRZLCBmaWx0ZXIsIG1hcCwgbWVyZ2UsIHNoYXJlLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjU2VsZWN0T25Gb2N1c2luRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zZWxlY3Qtb24tZm9jdXNpbi9zYy1zZWxlY3Qtb24tZm9jdXNpbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2NDYXRhbG9nRmlsdGVyQ29sbGFwc2libGVDb21wb25lbnQgfSBmcm9tICcuL2NvbGxhcHNpYmxlL3NjLWNhdGFsb2ctZmlsdGVyLWNvbGxhcHNpYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTQ19DQVRBTE9HX1BST0RVQ1RTX0ZJTFRFUlMgfSBmcm9tICcuL3Rva2Vucy9zYy1jYXRhbG9nLXByb2R1Y3RzLWZpbHRlcnMnO1xuaW1wb3J0IHsgU0NfQ0FUQUxPR19TSE9XX1BST0RVQ1RTX1JFQ1VSU0lWRUxZIH0gZnJvbSAnLi90b2tlbnMvc2MtY2F0YWxvZy1zaG93LXByb2R1Y3RzLXJlY3Vyc2l2ZWx5JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LLRi9Cy0L7QtNCwINGE0LjQu9GM0YLRgNC+0LIg0LrQsNGC0LDQu9C+0LPQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWNhdGFsb2ctZmlsdGVycycsXG4gICAgc3R5bGVVcmw6ICcuL3NjLWNhdGFsb2ctZmlsdGVycy5jb21wb25lbnQuc2NzcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWNhdGFsb2ctZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBUdWlUZXh0ZmllbGQsXG4gICAgICAgIFNjU2VsZWN0T25Gb2N1c2luRGlyZWN0aXZlLFxuICAgICAgICBTY0NhdGFsb2dGaWx0ZXJDb2xsYXBzaWJsZUNvbXBvbmVudCxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFR1aU51bWJlckZvcm1hdCxcbiAgICAgICAgVHVpQ2hlY2tib3gsXG4gICAgICAgIFR1aUlucHV0TnVtYmVyLFxuICAgICAgICBUdWlSYW5nZSxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2F0YWxvZ0ZpbHRlcnNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCf0L7QtNC/0LjRgdC60Lgg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Lgg0LrQvtC90YLRgNC+0LvQvtCyINGE0L7RgNC80YsgKHJhbmdlIHNsaWRlciwgc2luZ2xlLXNlbGVjdCBjaGVja2JveCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtU3luY3MgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDRhNC40LvRjNGC0YDQsNC80Lgg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2dGaWx0ZXJTZXJ2aWNlOiBTY0NhdGFsb2dGaWx0ZXJTZXJ2aWNlID0gaW5qZWN0KFNjQ2F0YWxvZ0ZpbHRlclNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8sINCy0L7Qt9Cy0YDQsNGJ0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lgg0YHQuNC80LLQvtC70YzQvdC+0LUg0L7QsdC+0LfQvdCw0YfQtdC90LjQtSAoc2x1Zykg0LjRgdGF0L7QtNGPINC40Lcg0L3QsNGB0YLRgNC+0LXQuiDQvtC60YDRg9C20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpZE9yU2x1Z1BpcGU6IFNjSWRPclNsdWdQaXBlID0gaW5qZWN0KFNjSWRPclNsdWdQaXBlKTtcblxuICAgIC8qKlxuICAgICAqIFN1YmplY3Qg0LTQu9GPINGF0YDQsNC90LXQvdC40Y8g0YTQuNC70YzRgtGA0L7QsiDQv9GA0L7QtNGD0LrRgtC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nUHJvZHVjdHNGaWx0ZXJzJCA9IGluamVjdChTQ19DQVRBTE9HX1BST0RVQ1RTX0ZJTFRFUlMpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Lgg0L7RgtC+0LHRgNCw0LbQsNGC0Ywg0YTQuNC70YzRgtGA0Ysg0LTQu9GPINCy0LvQvtC20LXQvdC90YvRhSDQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1JlY3Vyc2l2ZWx5ID0gaW5qZWN0KFNDX0NBVEFMT0dfU0hPV19QUk9EVUNUU19SRUNVUlNJVkVMWSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LrQsNC30YvQstCw0YLRjCDQu9C4INC60L3QvtC/0LrRgyDCq9Cf0L7QutCw0LfQsNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGC0YvCuy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2hvd1Jlc3VsdHNCdXR0b24gPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyDRgdCx0YDQvtGB0LAg0LLRgdC10YUg0YTQuNC70YzRgtGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVzZXRGaWx0ZXJzID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyDQv9C+0LrQsNC30LAg0YDQtdC30YPQu9GM0YLQsNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2hvd1Jlc3VsdHMgPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqIEZvcm1Hcm91cCDQtNC70Y8g0YTQuNC70YzRgtGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXA8XG4gICAgICAgIFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHRoaXMuY3JlYXRlQ2hlY2tib3hGb3JtQ29udHJvbD4gfCBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNyZWF0ZVJhbmdlRm9ybUNvbnRyb2w+IHwgUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jcmVhdGVUb2dnbGVGb3JtQ29udHJvbD4+XG4gICAgPih7fSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YTQuNC70YzRgtGA0L7QsiDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcnMgPSB0b1NpZ25hbChcbiAgICAgICAgaW5qZWN0KFNDX0NBVEVHT1JZX0lORk8pLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IEVNUFRZKSxcbiAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChjYXRlZ29yeSkgPT4gdGhpcy5jYXRhbG9nRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJzJCh0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkpLCB0aGlzLmlzUmVjdXJzaXZlbHkpKSxcbiAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgbWFwKChmaWx0ZXJzKSA9PlxuICAgICAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50eXBlICE9PSAncmFuZ2UnIHx8IGl0ZW0ubWluICE9PSBpdGVtLm1heClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gKGl0ZW0udHlwZSA9PT0gJ2NoZWNrYm94JyA/IHsgLi4uaXRlbSwgdmFsdWVzOiBbLi4uaXRlbS52YWx1ZXNdLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSkgfSA6IGl0ZW0pKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRhcCgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xzKGZpbHRlcnMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhdGFsb2dGaWx0ZXJzQ29tcG9uZW50fS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtU3luY3MudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXRhbG9nUHJvZHVjdHNGaWx0ZXJzJC5uZXh0KHRoaXMuYnVpbGRQcm9wZXJ0eUZpbHRlcnMoZmlsdGVycykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0YHQvtGB0YLQsNCyINC60L7QvdGC0YDQvtC70L7QsiDRhNC+0YDQvNGLINC90LAg0L7RgdC90L7QstC1INC/0LXRgNC10LTQsNC90L3Ri9GFINGE0LjQu9GM0YLRgNC+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVycyDQnNCw0YHRgdC40LIg0YTQuNC70YzRgtGA0L7QsiDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQutC+0L3RgtGA0L7Qu9C+0LIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUZvcm1Db250cm9scyhmaWx0ZXJzOiBTY0NhdGFsb2dGaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1TeW5jcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmZvcm1TeW5jcyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woa2V5IGFzIG5ldmVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tib3hDb250cm9sID0gdGhpcy5jcmVhdGVDaGVja2JveEZvcm1Db250cm9sKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChpdGVtLmlkLCBjaGVja2JveENvbnRyb2wsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTaW5nbGUtc2VsZWN0INC00LvRjyAhaXNNdWx0aXBsZTog0L/RgNC4INCy0YvQsdC+0YDQtSDQvtC00L3QvtCz0L4g0L7RgdGC0LDQu9GM0L3Ri9C1INGB0L3QuNC80LDRjtGC0YHRjy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmlzTXVsdGlwbGUgJiYgaXRlbS52YWx1ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3luY3MuYWRkKHRoaXMuc3luY1NpbmdsZVNlbGVjdENoZWNrYm94KGNoZWNrYm94Q29udHJvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VDb250cm9sID0gdGhpcy5jcmVhdGVSYW5nZUZvcm1Db250cm9sKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChpdGVtLmlkLCByYW5nZUNvbnRyb2wsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3luY3MuYWRkKHRoaXMuc3luY1JhbmdlRnJvbVRvQW5kU2xpZGVyKHJhbmdlQ29udHJvbCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woaXRlbS5pZCwgdGhpcy5jcmVhdGVUb2dnbGVGb3JtQ29udHJvbChpdGVtKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQt9C90LDRh9C10L3QuNGPINGE0L7RgNC80Ysg0LIg0L7QsdGK0LXQutGCINGE0LjQu9GM0YLRgNC+0LIg0YHQstC+0LnRgdGC0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUg0JfQvdCw0YfQtdC90LjRjyDRhNC+0YDQvNGLLlxuICAgICAqIEByZXR1cm5zINCe0LHRitC10LrRgiDRhNC40LvRjNGC0YDQvtCyINGB0LLQvtC50YHRgtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBidWlsZFByb3BlcnR5RmlsdGVycyh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTY1Byb3BlcnR5RmlsdGVycyB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2NQcm9wZXJ0eUZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLmZpbHRlcnMoKT8uZm9yRWFjaCgoZmlsdGVySXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlID0gdmFsdWVbZmlsdGVySXRlbS5pZF07XG5cbiAgICAgICAgICAgIGlmIChpc05pbChjb250cm9sVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpbHRlckl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ2hlY2tib3hGaWx0ZXIocmVzdWx0LCBmaWx0ZXJJdGVtLCBjb250cm9sVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JhbmdlRmlsdGVyKHJlc3VsdCwgZmlsdGVySXRlbS5pZCwgY29udHJvbFZhbHVlIGFzIHsgZnJvbTogbnVtYmVyOyB0bzogbnVtYmVyIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NUb2dnbGVGaWx0ZXIocmVzdWx0LCBmaWx0ZXJJdGVtLmlkLCBjb250cm9sVmFsdWUgYXMgYm9vbGVhbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCIEZvcm1Hcm91cCDQtNC70Y8gY2hlY2tib3g6INC90LAg0LrQsNC20LTRi9C5IHtAY29kZSB2YWx1ZS5pZH0g4oCUINCx0YPQu9C10LLRi9C5INC60L7QvdGC0YDQvtC7LlxuICAgICAqXG4gICAgICog0JXQtNC40L3Ri9C5INGE0L7RgNC80LDRgiDQuCDQtNC70Y8g0L7QtNC90L7Qs9C+LCDQuCDQtNC70Y8g0LzQvdC+0LbQtdGB0YLQstCwINC30L3QsNGH0LXQvdC40Lk6INGI0LDQsdC70L7QvSDRgNC10L3QtNC10YDQuNGCINC40YUg0L7QtNC40L3QsNC60L7QstC+LlxuICAgICAqINCg0LDQt9C70LjRh9C40LUg0LIgQVBJLdCy0YvQstC+0LTQtSDQtNC70Y8g0L7QtNC40L3QvtGH0L3QvtCz0L4g0LfQvdCw0YfQtdC90LjRjyAoYm9vbGVhbiDQstC80LXRgdGC0L4g0LzQsNGB0YHQuNCy0LApINC+0LHRgNCw0LHQsNGC0YvQstCw0LXRgtGB0Y8g0LIge0BsaW5rIHByb2Nlc3NDaGVja2JveEZpbHRlcn0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hlY2tib3hGaWx0ZXIg0KTQuNC70YzRgtGAINGC0LjQv9CwIGNoZWNrYm94LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDaGVja2JveEZvcm1Db250cm9sKGNoZWNrYm94RmlsdGVyOiBTY0lDaGVja2JveEZpbHRlcik6IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+IHtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IChpZDogc3RyaW5nKTogYm9vbGVhbiA9PiBjaGVja2JveEZpbHRlci5zZWxlY3RlZFZhbHVlcz8uaW5jbHVkZXMoaWQpID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBjb250cm9sczogUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w8Ym9vbGVhbj4+ID0ge307XG5cbiAgICAgICAgY2hlY2tib3hGaWx0ZXIudmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sc1t2YWx1ZS5pZF0gPSBuZXcgRm9ybUNvbnRyb2woaXNTZWxlY3RlZCh2YWx1ZS5pZCksIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiB7QGxpbmsgRm9ybUdyb3VwfSDQtNC70Y8gcmFuZ2U6IHtAY29kZSBmcm9tfSwge0Bjb2RlIHRvfSwge0Bjb2RlIHNsaWRlcn0gKNC60L7RgNGC0LXQtiDQtNC70Y8ge0BsaW5rIFR1aVJhbmdlfSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmFuZ2VGaWx0ZXIg0KTQuNC70YzRgtGAINGC0LjQv9CwIHJhbmdlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVSYW5nZUZvcm1Db250cm9sKHJhbmdlRmlsdGVyOiBTY1JhbmdlRmlsdGVyKTogRm9ybUdyb3VwPHtcbiAgICAgICAgZnJvbTogRm9ybUNvbnRyb2w8bnVtYmVyPjtcbiAgICAgICAgdG86IEZvcm1Db250cm9sPG51bWJlcj47XG4gICAgICAgIHNsaWRlcjogRm9ybUNvbnRyb2w8W251bWJlciwgbnVtYmVyXT47XG4gICAgfT4ge1xuICAgICAgICBjb25zdCBmcm9tVmFsdWUgPSBOdW1iZXIocmFuZ2VGaWx0ZXIuc2VsZWN0ZWRNaW4gPz8gcmFuZ2VGaWx0ZXIubWluKTtcbiAgICAgICAgY29uc3QgdG9WYWx1ZSA9IE51bWJlcihyYW5nZUZpbHRlci5zZWxlY3RlZE1heCA/PyByYW5nZUZpbHRlci5tYXgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGZyb206IG5ldyBGb3JtQ29udHJvbChmcm9tVmFsdWUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksXG4gICAgICAgICAgICB0bzogbmV3IEZvcm1Db250cm9sKHRvVmFsdWUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksXG4gICAgICAgICAgICBzbGlkZXI6IG5ldyBGb3JtQ29udHJvbDxbbnVtYmVyLCBudW1iZXJdPihbZnJvbVZhbHVlLCB0b1ZhbHVlXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KDQtdCw0LvQuNC30YPQtdGCIHNpbmdsZS1zZWxlY3Qg0L/QvtCy0LXQtNC10L3QuNC1INC00LvRjyBGb3JtR3JvdXAg0YEg0LHRg9C70LXQstGL0LzQuCDQutC+0L3RgtGA0L7Qu9Cw0LzQuDpcbiAgICAgKiDQv9GA0Lgg0L/QvtGP0LLQu9C10L3QuNC4INC90L7QstC+0LPQviB0cnVlINC+0YHRgtCw0LvRjNC90YvQtSDQutC+0L3RgtGA0L7Qu9GLINCz0YDRg9C/0L/RiyDRgdCx0YDQsNGB0YvQstCw0Y7RgtGB0Y8g0LIgZmFsc2UuXG4gICAgICpcbiAgICAgKiDQodC+0YXRgNCw0L3Rj9C10YIg0L/QvtGB0LvQtdC00L3QtdC1IMKr0YHRgtCw0LHQuNC70YzQvdC+0LXCuyDRgdC+0YHRgtC+0Y/QvdC40LUg0Lgg0YHRgNCw0LLQvdC40LLQsNC10YIg0YHQu9C10LTRg9GO0YnQtdC1INC30L3QsNGH0LXQvdC40LUg0YEg0L3QuNC8IOKAlFxuICAgICAqINC90L7QstGL0LkgdHJ1ZSAo0L7RgtGB0YPRgtGB0YLQstC+0LLQsNC7INCyIHByZXYpINGB0YfQuNGC0LDQtdGC0YHRjyDQstGL0LHRgNCw0L3QvdGL0LwsINC+0YHRgtCw0LvRjNC90YvQtSDRgdCx0YDQsNGB0YvQstCw0Y7RgtGB0Y8g0YfQtdGA0LXQtyBzZXRWYWx1ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncm91cCBGb3JtR3JvdXAgY2hlY2tib3gt0YTQuNC70YzRgtGA0LAgKGlkIOKGkiBib29sZWFuKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN5bmNTaW5nbGVTZWxlY3RDaGVja2JveChncm91cDogRm9ybUdyb3VwPFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPGJvb2xlYW4+Pj4pOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBsZXQgcHJldmlvdXNTdGF0ZSA9IGdyb3VwLmdldFJhd1ZhbHVlKCkgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgICAgICAgICBjb25zdCBuZXdseUNoZWNrZWQgPSBPYmplY3QuZW50cmllcyhjdXJyZW50KS5maW5kKChbaWQsIGlzQ2hlY2tlZF0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNDaGVja2VkICYmICFwcmV2aW91c1N0YXRlW2lkXTtcbiAgICAgICAgICAgIH0pPy5bMF07XG5cbiAgICAgICAgICAgIGlmICghbmV3bHlDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdGF0ZSA9IHsgLi4uY3VycmVudCB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXAuY29udHJvbHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgbmV4dFtpZF0gPSBpZCA9PT0gbmV3bHlDaGVja2VkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2aW91c1N0YXRlID0gbmV4dDtcbiAgICAgICAgICAgIGdyb3VwLnNldFZhbHVlKG5leHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodCy0Y/Qt9GL0LLQsNC10YIg0L/QvtC70Y8gwqvQvtGCwrsvwqvQtNC+wrsg0YEg0LrQvtC90YLRgNC+0LvQvtC8INGB0LvQsNC50LTQtdGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JvdXAgRm9ybUdyb3VwIHJhbmdlLdGE0LjQu9GM0YLRgNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3luY1JhbmdlRnJvbVRvQW5kU2xpZGVyKGdyb3VwOiBGb3JtR3JvdXApOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBmcm9tID0gZ3JvdXAuZ2V0KCdmcm9tJyk7XG4gICAgICAgIGNvbnN0IHRvID0gZ3JvdXAuZ2V0KCd0bycpO1xuICAgICAgICBjb25zdCBzbGlkZXIgPSBncm91cC5nZXQoJ3NsaWRlcicpO1xuXG4gICAgICAgIGlmICghZnJvbSB8fCAhdG8gfHwgIXNsaWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICAvLyDQmNC90L/Rg9GC0Ysg4oaSINGB0LvQsNC50LTQtdGAOyDQtdGB0LvQuCDCq9C+0YLCuyA+IMKr0LTQvsK7LCDQv9C+0LTQvdC40LzQsNC10LwgwqvQtNC+wrsg0LTQviDCq9C+0YLCuy5cbiAgICAgICAgY29uc3QgYXBwbHlTbGlkZXJGcm9tSW5wdXRzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG93ID0gTnVtYmVyKGZyb20udmFsdWUpO1xuICAgICAgICAgICAgbGV0IGhpZ2ggPSBOdW1iZXIodG8udmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAobG93ID4gaGlnaCkge1xuICAgICAgICAgICAgICAgIGhpZ2ggPSBsb3c7XG4gICAgICAgICAgICAgICAgdG8uc2V0VmFsdWUoaGlnaCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFpciA9IHNsaWRlci52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFBhaXJbMF0gIT09IGxvdyB8fCBjdXJyZW50UGFpclsxXSAhPT0gaGlnaCkge1xuICAgICAgICAgICAgICAgIHNsaWRlci5zZXRWYWx1ZShbbG93LCBoaWdoXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIHNsaWRlci5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHN1Yi5hZGQobWVyZ2UoZnJvbS52YWx1ZUNoYW5nZXMsIHRvLnZhbHVlQ2hhbmdlcykuc3Vic2NyaWJlKGFwcGx5U2xpZGVyRnJvbUlucHV0cykpO1xuXG4gICAgICAgIHN1Yi5hZGQoXG4gICAgICAgICAgICBzbGlkZXIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbG93LCBoaWdoXSA9IHZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG5cbiAgICAgICAgICAgICAgICBpZiAoZnJvbS52YWx1ZSAhPT0gbG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb20uc2V0VmFsdWUobG93LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIGZyb20ubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodG8udmFsdWUgIT09IGhpZ2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdG8uc2V0VmFsdWUoaGlnaCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICB0by5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g0KHQvtCy0L/QsNGB0YLRjCDRgSDQv9C+0LvRj9C80Lgg0L/RgNC4INC/0LXRgNCy0L7QvCDQv9C+0LrQsNC30LUgKNGD0LbQtSDRgdC+0LLQv9Cw0LTQsNC10YIg0L/RgNC4INGB0L7Qt9C00LDQvdC40LgsINC90L4g0L3QsCDQstGB0Y/QutC40Lkg0YHQu9GD0YfQsNC5KS5cbiAgICAgICAgYXBwbHlTbGlkZXJGcm9tSW5wdXRzKCk7XG5cbiAgICAgICAgcmV0dXJuIHN1YjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiBGb3JtQ29udHJvbCDQtNC70Y8gdG9nZ2xlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRvZ2dsZUZpbHRlciDQpNC40LvRjNGC0YAg0YLQuNC/0LAgdG9nZ2xlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVUb2dnbGVGb3JtQ29udHJvbCh0b2dnbGVGaWx0ZXI6IFNjVG9nZ2xlRmlsdGVyKTogRm9ybUNvbnRyb2w8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHRvZ2dsZUZpbHRlci5zZWxlY3RlZFZhbHVlID8/IGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiBjaGVja2JveDogRm9ybUdyb3VwIOKGkiBzdHJpbmdbXSDQstGL0LHRgNCw0L3QvdGL0YUgaWQ7INC00LvRjyDQtdC00LjQvdGB0YLQstC10L3QvdC+0LPQviDQt9C90LDRh9C10L3QuNGPIOKAlCBib29sZWFuICjQutCw0LogdG9nZ2xlKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQg0J7QsdGK0LXQutGCINGA0LXQt9GD0LvRjNGC0LDRgtCwINC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gY2hlY2tib3hGaWx0ZXIg0JzQtdGC0LDRhNC40LvRjNGC0YAgY2hlY2tib3guXG4gICAgICogQHBhcmFtIGNvbnRyb2xWYWx1ZSDQl9C90LDRh9C10L3QuNC1INC60L7QvdGC0YDQvtC70LAg0YTQvtGA0LzRiyAo0LfQsNC/0LjRgdGMIGlkIOKGkiBib29sZWFuKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NDaGVja2JveEZpbHRlcihyZXN1bHQ6IFNjUHJvcGVydHlGaWx0ZXJzLCBjaGVja2JveEZpbHRlcjogU2NJQ2hlY2tib3hGaWx0ZXIsIGNvbnRyb2xWYWx1ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBPYmplY3QuZW50cmllcyhjb250cm9sVmFsdWUpXG4gICAgICAgICAgICAuZmlsdGVyKChbLCBpc1NlbGVjdGVkXSkgPT4gaXNTZWxlY3RlZClcbiAgICAgICAgICAgIC5tYXAoKFtpZF0pID0+IGlkKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24sIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHJlc3VsdFtjaGVja2JveEZpbHRlci5pZF0gPSBzZWxlY3RlZElkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIgcmFuZ2Ug0YTQuNC70YzRgtGALlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCDQntCx0YrQtdC60YIg0YDQtdC30YPQu9GM0YLQsNGC0LAg0LTQu9GPINC30LDQv9C+0LvQvdC10L3QuNGPLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRhNC40LvRjNGC0YDQsC5cbiAgICAgKiBAcGFyYW0gcmFuZ2Ug0JfQvdCw0YfQtdC90LjQtSDQutC+0L3RgtGA0L7Qu9CwINGE0L7RgNC80YsgKNC+0LHRitC10LrRgiDRgSDQs9GA0LDQvdC40YbQsNC80LgpLlxuICAgICAqIEBwYXJhbSByYW5nZS5mcm9tINCd0LDRh9Cw0LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LjQsNC/0LDQt9C+0L3QsC5cbiAgICAgKiBAcGFyYW0gcmFuZ2UudG8g0JrQvtC90LXRh9C90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LjQsNC/0LDQt9C+0L3QsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NSYW5nZUZpbHRlcihyZXN1bHQ6IFNjUHJvcGVydHlGaWx0ZXJzLCBmaWx0ZXJJZDogc3RyaW5nLCByYW5nZTogeyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24sIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHJlc3VsdFtmaWx0ZXJJZF0gPSB7XG4gICAgICAgICAgICBmcm9tOiBTdHJpbmcocmFuZ2UuZnJvbSksXG4gICAgICAgICAgICB0bzogU3RyaW5nKHJhbmdlLnRvKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIgdG9nZ2xlINGE0LjQu9GM0YLRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQg0J7QsdGK0LXQutGCINGA0LXQt9GD0LvRjNGC0LDRgtCwINC00LvRjyDQt9Cw0L/QvtC70L3QtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmlsdGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQuNC70YzRgtGA0LAuXG4gICAgICogQHBhcmFtIGNvbnRyb2xWYWx1ZSDQl9C90LDRh9C10L3QuNC1INC60L7QvdGC0YDQvtC70LAg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NUb2dnbGVGaWx0ZXIocmVzdWx0OiBTY1Byb3BlcnR5RmlsdGVycywgZmlsdGVySWQ6IHN0cmluZywgY29udHJvbFZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvbiwgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHJlc3VsdFtmaWx0ZXJJZF0gPSBjb250cm9sVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodCx0YDQsNGB0YvQstCw0LXRgiDQv9C+0LvQtSDCq9C+0YLCuyDQtNC40LDQv9Cw0LfQvtC90LAg0Log0LzQuNC90LjQvNCw0LvRjNC90L7QvNGDINC30L3QsNGH0LXQvdC40Y4g0YTQuNC70YzRgtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQuNC70YzRgtGA0LAuXG4gICAgICogQHBhcmFtIG1pbiDQnNC40L3QuNC80LDQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQuNCw0L/QsNC30L7QvdCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNldFJhbmdlRnJvbShmaWx0ZXJJZDogc3RyaW5nLCBtaW46IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KGZpbHRlcklkKT8uZ2V0KCdmcm9tJyk/LnJlc2V0KCttaW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LHRgNCw0YHRi9Cy0LDQtdGCINC/0L7Qu9C1IMKr0LTQvsK7INC00LjQsNC/0LDQt9C+0L3QsCDQuiDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LzRgyDQt9C90LDRh9C10L3QuNGOINGE0LjQu9GM0YLRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlcklkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LjQu9GM0YLRgNCwLlxuICAgICAqIEBwYXJhbSBtYXgg0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQuNCw0L/QsNC30L7QvdCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNldFJhbmdlVG8oZmlsdGVySWQ6IHN0cmluZywgbWF4OiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmdldChmaWx0ZXJJZCk/LmdldCgndG8nKT8ucmVzZXQoK21heCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQsdGA0LDRgdGL0LLQsNC10YIg0LLRgdC1INGH0LXQutCx0L7QutGB0Ysg0LPRgNGD0L/Qv9GLINCyIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQuNC70YzRgtGA0LAgKNC60LvRjtGHIEZvcm1Hcm91cCDQsiDRhNC+0YDQvNC1KS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzZXRDaGVja2JveEdyb3VwKGZpbHRlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZvcm0uZ2V0KGZpbHRlcklkKSBhcyBGb3JtR3JvdXA8UmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w8Ym9vbGVhbj4+PiB8IG51bGw7XG5cbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzZXRWYWx1ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXAuY29udHJvbHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgIHJlc2V0VmFsdWVbaWRdID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBncm91cC5yZXNldChyZXNldFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodCx0YDQsNGB0YvQstCw0LXRgiDQstGB0LUg0YTQuNC70YzRgtGA0Ysg0Lgg0L7Qv9C+0LLQtdGJ0LDQtdGCINGA0L7QtNC40YLQtdC70Y8g0L4g0L3QsNC20LDRgtC40Lgg0LrQvdC+0L/QutC4INGB0LHRgNC+0YHQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZXNldEZpbHRlcnNDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldEFsbEZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy5yZXNldEZpbHRlcnMuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0L/QvtCy0LXRidCw0LXRgiDRgNC+0LTQuNGC0LXQu9GPINC+INC90LDQttCw0YLQuNC4INC60L3QvtC/0LrQuCDQv9C+0LrQsNC30LAg0YDQtdC30YPQu9GM0YLQsNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TaG93UmVzdWx0c0NsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dSZXN1bHRzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodCx0YDQsNGB0YvQstCw0LXRgiDQstGB0LUg0YTQuNC70YzRgtGA0Ysg0Log0LjRgdGF0L7QtNC90YvQvCDQt9C90LDRh9C10L3QuNGP0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEFsbEZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVycygpPy5mb3JFYWNoKChmaWx0ZXJJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWx0ZXJJdGVtLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGZpbHRlckl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwPFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPGJvb2xlYW4+Pj47XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFZhbHVlW2lkXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAucmVzZXQocmVzZXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnJlc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncmFuZ2UnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbiA9ICtmaWx0ZXJJdGVtLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gK2ZpbHRlckl0ZW0ubWF4O1xuICAgICAgICAgICAgICAgICAgICBncm91cC5yZXNldCh7IGZyb206IG1pbiwgdG86IG1heCwgc2xpZGVyOiBbbWluLCBtYXhdIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIkBpZiAoZmlsdGVycygpPy5sZW5ndGgpIHtcbiAgICA8Zm9ybVxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgcGItMVwiXG4gICAgPlxuICAgICAgICBAZm9yIChmaWx0ZXIgb2YgZmlsdGVycygpOyB0cmFjayBmaWx0ZXIuaWQ7IGxldCBpc0ZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICBAaWYgKCFpc0ZpcnN0KSB7XG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXktMyB3LWZ1bGwgaC1weFwiIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPCEtLSDQl9Cw0LPQvtC70L7QstC+0Log0LPRgNGD0L/Qv9GLLiDQlNC70Y8gdG9nZ2xlINC/0L7QtNC/0LjRgdC4INC90LXRgjog0LzQtdGC0LrQsCDQuNC00ZHRgiDQv9GA0Y/QvNC+INGA0Y/QtNC+0Lwg0YEg0YHQsNC80LjQvCBjaGVja2JveC4gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIudHlwZSAhPT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1ib2R5LXMtYm9sZFwiPnt7IGZpbHRlci5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveDogRm9ybUdyb3VwKHZhbHVlLmlkIOKGkiBib29sZWFuKSDQtNC70Y8g0LvRjtCx0L7Qs9C+INGH0LjRgdC70LAg0LfQvdCw0YfQtdC90LjQuS5cbiAgICAgICAgICAgICAgICAgICAgINCg0LDQt9Cy0LjQu9C60LAg0L7QtNC90L4v0LzQvdC+0LPQviDQt9C90LDRh9C10L3QuNC5INCy0YvQvdC10YHQtdC90LAg0LIgVFMgKNGB0LwuIHByb2Nlc3NDaGVja2JveEZpbHRlcikuXG4gICAgICAgICAgICAgICAgICAgICBuZy10ZW1wbGF0ZSDQstC90YPRgtGA0LggZm9ybUdyb3VwTmFtZTog0LjQvdCw0YfQtSByZWFjdGl2ZSBmb3JtcyDQvdC1INC90LDQudC00ZHRgiBDb250cm9sQ29udGFpbmVyINC/0YDQuCDQv9GA0L7QtdC60YbQuNC4INCyINC00L7Rh9C10YDQvdC40Lkg0LrQvtC80L/QvtC90LXQvdGCLiAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGZpbHRlci50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCJmaWx0ZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2MtY2F0YWxvZy1maWx0ZXItY29sbGFwc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNDb3VudF09XCJmaWx0ZXIudmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dSZXNldF09XCJmb3JtLmdldChmaWx0ZXIuaWQpPy5kaXJ0eSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc2V0R3JvdXApPVwicmVzZXRDaGVja2JveEdyb3VwKGZpbHRlci5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHZhbHVlIG9mIGZpbHRlci52YWx1ZXM7IHRyYWNrIHZhbHVlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInZhbHVlLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zXCI+e3sgdmFsdWUubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2MtY2F0YWxvZy1maWx0ZXItY29sbGFwc2libGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVG9nZ2xlOiDQvtC00LjQvSBib29sZWFuINC90LAg0LrQvtGA0L3QtSDRhNC+0YDQvNGLLCDQv9C+0LTQv9C40YHRjCA9IGZpbHRlci5sYWJlbCAtLT5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktcy1ib2xkXCI+e3sgZmlsdGVyLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gUmFuZ2U6IEZvcm1Hcm91cChmcm9tLCB0bywgc2xpZGVyKSDRgSDQtNCy0YPRgdGC0L7RgNC+0L3QvdC10Lkg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40LXQuSAtLT5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCJmaWx0ZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMgcHgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LTAgZmxleC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCe0YJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS10ZXh0ZmllbGQgW3R1aVRleHRmaWVsZENsZWFuZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjU2VsZWN0T25Gb2N1c2luXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmcm9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpTnVtYmVyRm9ybWF0XT1cInsgcHJlY2lzaW9uOiAwIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiK2ZpbHRlci5taW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiK2ZpbHRlci5tYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmdldChmaWx0ZXIuaWQpPy5nZXQoJ2Zyb20nKT8uZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS54XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0UmFuZ2VGcm9tKGZpbHRlci5pZCwgZmlsdGVyLm1pbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluLXctMCBmbGV4LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQvlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXRleHRmaWVsZCBbdHVpVGV4dGZpZWxkQ2xlYW5lcl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NTZWxlY3RPbkZvY3VzaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpTnVtYmVyRm9ybWF0XT1cInsgcHJlY2lzaW9uOiAwIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiK2ZpbHRlci5taW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiK2ZpbHRlci5tYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmb3JtLmdldChmaWx0ZXIuaWQpPy5nZXQoJ3RvJyk/LmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkueFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFJhbmdlVG8oZmlsdGVyLmlkLCBmaWx0ZXIubWF4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCIrZmlsdGVyLm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCIrZmlsdGVyLm1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tdHVpLXRoaWNrbmVzcy5yZW1dPVwiMC4yNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm10LTJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVzZXRGaWx0ZXJzQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCh0LHRgNC+0YHQuNGC0Ywg0YTQuNC70YzRgtGA0YtcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIEBpZiAoc2hvd1Jlc3VsdHNCdXR0b24oKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNob3dSZXN1bHRzQ2xpY2soKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0J/QvtC60LDQt9Cw0YLRjCDRgNC10LfRg9C70YzRgtCw0YLRi1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L2Zvcm0+XG59XG4iXX0=
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
/**
|
|
4
|
-
* Токен для инъекции {@link Subject} для хранения фильтров продуктов.
|
|
5
|
-
*/
|
|
6
|
-
export const SC_CATALOG_PRODUCTS_FILTERS = new InjectionToken('SC_CATALOG_PRODUCTS_FILTERS$', {
|
|
7
|
-
providedIn: 'root',
|
|
8
|
-
factory: () => new Subject(),
|
|
9
|
-
});
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1wcm9kdWN0cy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL3Rva2Vucy9zYy1jYXRhbG9nLXByb2R1Y3RzLWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQTZCLDhCQUE4QixFQUFFO0lBQ3RILFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBcUI7Q0FDbEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjUHJvcGVydHlGaWx0ZXJzIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0KLQvtC60LXQvSDQtNC70Y8g0LjQvdGK0LXQutGG0LjQuCB7QGxpbmsgU3ViamVjdH0g0LTQu9GPINGF0YDQsNC90LXQvdC40Y8g0YTQuNC70YzRgtGA0L7QsiDQv9GA0L7QtNGD0LrRgtC+0LIuXG4gKi9cbmV4cG9ydCBjb25zdCBTQ19DQVRBTE9HX1BST0RVQ1RTX0ZJTFRFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3ViamVjdDxTY1Byb3BlcnR5RmlsdGVycz4+KCdTQ19DQVRBTE9HX1BST0RVQ1RTX0ZJTFRFUlMkJywge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiAoKSA9PiBuZXcgU3ViamVjdDxTY1Byb3BlcnR5RmlsdGVycz4oKSxcbn0pO1xuIl19
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* Токен для инъекции признака необходимости отображать фильтры для вложенных категорий.
|
|
4
|
-
*/
|
|
5
|
-
export const SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY = new InjectionToken('SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY');
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1zaG93LXByb2R1Y3RzLXJlY3Vyc2l2ZWx5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL3Rva2Vucy9zYy1jYXRhbG9nLXNob3ctcHJvZHVjdHMtcmVjdXJzaXZlbHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLElBQUksY0FBYyxDQUFVLHNDQUFzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqINCi0L7QutC10L0g0LTQu9GPINC40L3RitC10LrRhtC40Lgg0L/RgNC40LfQvdCw0LrQsCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQvtGC0L7QsdGA0LDQttCw0YLRjCDRhNC40LvRjNGC0YDRiyDQtNC70Y8g0LLQu9C+0LbQtdC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNDX0NBVEFMT0dfU0hPV19QUk9EVUNUU19SRUNVUlNJVkVMWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignU0NfQ0FUQUxPR19TSE9XX1BST0RVQ1RTX1JFQ1VSU0lWRUxZJyk7XG4iXX0=
|