simpo-component-library 3.5.52 → 3.6.2
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/README.md +24 -24
- package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
- package/esm2022/lib/components/document/document.component.mjs +3 -3
- package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +3 -3
- package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
- package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
- package/esm2022/lib/constants/business.constant.mjs +1 -1
- package/esm2022/lib/directive/alignment.directive.mjs +23 -0
- package/esm2022/lib/directive/background-directive.mjs +130 -5
- package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
- package/esm2022/lib/directive/border-directive.mjs +2 -2
- package/esm2022/lib/directive/borderlessImage.directive.mjs +4 -1
- package/esm2022/lib/directive/button-directive.directive.mjs +72 -17
- package/esm2022/lib/directive/button-editor.directive.mjs +22 -4
- package/esm2022/lib/directive/color.directive.mjs +1 -1
- package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
- package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
- package/esm2022/lib/directive/content-title-spacing.directive.mjs +4 -4
- package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
- package/esm2022/lib/directive/corner-directive.mjs +1 -1
- package/esm2022/lib/directive/height.directive.mjs +29 -0
- package/esm2022/lib/directive/hover-animation.directive.mjs +142 -0
- package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
- package/esm2022/lib/directive/image-container.directive.mjs +1 -1
- package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/image-editor.directive.mjs +25 -5
- package/esm2022/lib/directive/image-position.directive.mjs +1 -1
- package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/set-dynamic-background.directive.mjs +66 -0
- package/esm2022/lib/directive/spacing-around.directive.mjs +40 -3
- package/esm2022/lib/directive/spacing-horizontal.directive.mjs +5 -1
- package/esm2022/lib/directive/spacing.directive.mjs +29 -0
- package/esm2022/lib/directive/sticky-directive.mjs +2 -2
- package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/text-size.directive.mjs +1 -1
- package/esm2022/lib/directive/translate-onhover.directive.mjs +47 -0
- package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +96 -59
- package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +128 -14
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +199 -0
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.model.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +214 -36
- package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +405 -0
- package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +6 -4
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +7 -5
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +42 -7
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +144 -0
- package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +99 -11
- package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +395 -21
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +626 -142
- package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +95 -0
- package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +57 -0
- package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +36 -0
- package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +49 -4
- package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +157 -0
- package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +120 -0
- package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +2 -0
- package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +5 -4
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +66 -16
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +17 -12
- package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +5 -3
- package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/product.modal.mjs +22 -1
- package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/user.modal.mjs +3 -1
- package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -4
- package/esm2022/lib/elements/address-list/address-list.component.mjs +98 -0
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +13 -8
- package/esm2022/lib/elements/button/button.component.mjs +3 -3
- package/esm2022/lib/elements/button/button.model.mjs +1 -1
- package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +8 -4
- package/esm2022/lib/elements/editor-service.service.mjs +29 -12
- package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
- package/esm2022/lib/elements/image-editor/image-editor.component.mjs +147 -15
- package/esm2022/lib/elements/index.mjs +1 -1
- package/esm2022/lib/elements/link-editor/link-editor.component.mjs +108 -10
- package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +94 -0
- package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
- package/esm2022/lib/elements/navbar-button-element/navbar-button-element.component.mjs +1 -2
- package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
- package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +80 -0
- package/esm2022/lib/elements/property/property.component.mjs +3 -3
- package/esm2022/lib/elements/schedule-video-call/schedule-video-call.component.mjs +187 -0
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
- package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
- package/esm2022/lib/elements/text/text.component.mjs +3 -3
- package/esm2022/lib/elements/text-editor/text-editor.component.mjs +72 -27
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +7 -3
- package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
- package/esm2022/lib/pipes/gender.pipe.mjs +5 -1
- package/esm2022/lib/sections/BaseSection.mjs +1 -1
- package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +164 -98
- package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +6 -32
- package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +52 -17
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +6 -25
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +4 -4
- package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +8 -7
- package/esm2022/lib/sections/carousel-banner/carousel-banner.model.mjs +1 -1
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +6 -4
- package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
- package/esm2022/lib/sections/contact-us/contact-us.component.mjs +37 -7
- package/esm2022/lib/sections/contact-us/contact-us.modal.mjs +1 -1
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +4 -4
- package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
- package/esm2022/lib/sections/features-section/features-section.component.mjs +6 -4
- package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
- package/esm2022/lib/sections/footer/footer.component.mjs +6 -9
- package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
- package/esm2022/lib/sections/header-section/header-section.component.mjs +95 -13
- package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
- package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
- package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +12 -22
- package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +9 -4
- package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/image-section/image-section.component.mjs +12 -5
- package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
- package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
- package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
- package/esm2022/lib/sections/logo-gallery/logo-gallery.component.mjs +9 -4
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +9 -3
- package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
- package/esm2022/lib/sections/moving-text/moving-text.component.mjs +119 -0
- package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +2 -0
- package/esm2022/lib/sections/new-services/new-services.component.mjs +4 -4
- package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +12 -6
- package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
- package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +108 -0
- package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +2 -0
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +28 -4
- package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +12 -4
- package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
- package/esm2022/lib/sections/process-section/process-section.component.mjs +6 -3
- package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
- package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
- package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
- package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
- package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +6 -4
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
- package/esm2022/lib/sections/registration-form/registration-form.component.mjs +9 -9
- package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
- package/esm2022/lib/sections/service-section/service-section.component.mjs +4 -4
- package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
- package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +6 -3
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +18 -3
- package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
- package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +3 -17
- package/esm2022/lib/sections/text-section/text-section.component.mjs +3 -21
- package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
- package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
- package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
- package/esm2022/lib/sections/video-section/video-section.component.mjs +16 -16
- package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +3 -3
- package/esm2022/lib/services/cart.service.mjs +38 -35
- package/esm2022/lib/services/endUser.service.mjs +1 -1
- package/esm2022/lib/services/events.service.mjs +3 -8
- package/esm2022/lib/services/image-upload-service.service.mjs +7 -4
- package/esm2022/lib/services/rest.service.mjs +125 -68
- package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
- package/esm2022/lib/services/storage.service.mjs +27 -44
- package/esm2022/lib/styles/index.mjs +8 -1
- package/esm2022/lib/styles/style.model.mjs +3 -2
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/lib/tokens/api-token.mjs +1 -1
- package/esm2022/public-api.mjs +14 -2
- package/fesm2022/simpo-component-library.mjs +5815 -1711
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/directive/alignment.directive.d.ts +11 -0
- package/lib/directive/button-directive.directive.d.ts +2 -0
- package/lib/directive/button-editor.directive.d.ts +6 -2
- package/lib/directive/height.directive.d.ts +11 -0
- package/lib/directive/hover-animation.directive.d.ts +19 -0
- package/lib/directive/image-editor.directive.d.ts +6 -1
- package/lib/directive/set-dynamic-background.directive.d.ts +14 -0
- package/lib/directive/spacing-around.directive.d.ts +7 -2
- package/lib/directive/spacing.directive.d.ts +12 -0
- package/lib/directive/translate-onhover.directive.d.ts +11 -0
- package/lib/ecommerce/sections/address/address.component.d.ts +11 -3
- package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +23 -5
- package/lib/ecommerce/sections/book-appointment/book-appointment.component.d.ts +70 -0
- package/lib/ecommerce/sections/book-appointment/book-appointment.model.d.ts +14 -0
- package/lib/ecommerce/sections/cart/cart.component.d.ts +35 -3
- package/lib/ecommerce/sections/enrollment-form/enrollment-form.component.d.ts +54 -0
- package/lib/ecommerce/sections/enrollment-form/enrollment-form.model.d.ts +29 -0
- package/lib/ecommerce/sections/featured-category/featured-category.modal.d.ts +2 -0
- package/lib/ecommerce/sections/featured-products/featured-products.component.d.ts +6 -1
- package/lib/ecommerce/sections/featured-products/featured-products.modal.d.ts +6 -2
- package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +36 -0
- package/lib/ecommerce/sections/new-collection/new-collection.modal.d.ts +23 -0
- package/lib/ecommerce/sections/order-details/order-details.component.d.ts +18 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +61 -2
- package/lib/ecommerce/sections/product-desc/product-desc.modal.d.ts +5 -0
- package/lib/ecommerce/sections/product-list/product-list.component.d.ts +110 -17
- package/lib/ecommerce/sections/returns-calculator/returns-calculator.component.d.ts +31 -0
- package/lib/ecommerce/sections/returns-calculator/returns-calculator.model.d.ts +14 -0
- package/lib/ecommerce/sections/scheme-details/scheme-details.component.d.ts +16 -0
- package/lib/ecommerce/sections/scheme-selection/scheme-selection.component.d.ts +18 -0
- package/lib/ecommerce/sections/small-product-listing/small-product-listing.component.d.ts +6 -1
- package/lib/ecommerce/sections/store-list/store-list.component.d.ts +43 -0
- package/lib/ecommerce/sections/store-list/store-list.modal.d.ts +11 -0
- package/lib/ecommerce/sections/store-page/store-page.component.d.ts +27 -0
- package/lib/ecommerce/sections/store-page/store-page.model.d.ts +11 -0
- package/lib/ecommerce/sections/user-profile/user-profile.component.d.ts +10 -1
- package/lib/ecommerce/sections/whislist/whislist.component.d.ts +4 -1
- package/lib/ecommerce/styles/Collection.modal.d.ts +1 -0
- package/lib/ecommerce/styles/product.modal.d.ts +19 -0
- package/lib/ecommerce/styles/user.modal.d.ts +3 -0
- package/lib/elements/address-list/address-list.component.d.ts +27 -0
- package/lib/elements/below-image-card/below-image-card.component.d.ts +3 -0
- package/lib/elements/covering-image-card/covering-image-card.component.d.ts +3 -0
- package/lib/elements/editor-service.service.d.ts +4 -4
- package/lib/elements/image-editor/image-editor.component.d.ts +29 -3
- package/lib/elements/link-editor/link-editor.component.d.ts +13 -1
- package/lib/elements/list-home-appointment/list-home-appointment.component.d.ts +27 -0
- package/lib/elements/pricing-s1/pricing-s1.component.d.ts +21 -0
- package/lib/elements/schedule-video-call/schedule-video-call.component.d.ts +33 -0
- package/lib/elements/text-editor/text-editor.component.d.ts +3 -0
- package/lib/elements/top-of-image-card/top-of-image-card.component.d.ts +3 -0
- package/lib/sections/appointment-form/appointment-form.component.d.ts +11 -4
- package/lib/sections/banner-carousel/banner-carousel.component.d.ts +1 -1
- package/lib/sections/banner-grid-section/banner-grid-section.component.d.ts +8 -1
- package/lib/sections/carousel-banner/carousel-banner.model.d.ts +1 -0
- package/lib/sections/contact-us/contact-us.component.d.ts +2 -1
- package/lib/sections/contact-us/contact-us.modal.d.ts +5 -1
- package/lib/sections/features-section/features-section.model.d.ts +2 -0
- package/lib/sections/header-section/header-section.component.d.ts +29 -2
- package/lib/sections/header-section/header-section.model.d.ts +14 -2
- package/lib/sections/header-text/header-text.model.d.ts +2 -1
- package/lib/sections/image-carousel-section/image-carousel-section.component.d.ts +2 -1
- package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -0
- package/lib/sections/image-grid-section/image-grid-section.model.d.ts +3 -1
- package/lib/sections/image-section/image-section.component.d.ts +2 -1
- package/lib/sections/logo-gallery/logo-gallery.component.d.ts +2 -1
- package/lib/sections/logo-showcase/logo-showcase.component.d.ts +3 -1
- package/lib/sections/logo-showcase/logo-showcase.modal.d.ts +11 -2
- package/lib/sections/moving-text/moving-text.component.d.ts +28 -0
- package/lib/sections/moving-text/moving-text.modal.d.ts +19 -0
- package/lib/sections/new-testimonials/new-testimonials.component.d.ts +2 -1
- package/lib/sections/news-letter-component/news-letter-component.component.d.ts +26 -0
- package/lib/sections/news-letter-component/news-letter.modal.d.ts +19 -0
- package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -0
- package/lib/sections/pricing-section/pricing-section.modal.d.ts +3 -0
- package/lib/sections/process-modern/process-modern.component.d.ts +2 -0
- package/lib/sections/process-section/process-section.component.d.ts +1 -0
- package/lib/sections/process-section/process-section.modal.d.ts +2 -0
- package/lib/sections/service-section/service-section.model.d.ts +5 -1
- package/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.d.ts +1 -0
- package/lib/sections/testimonial-section/testimonial-section.component.d.ts +1 -0
- package/lib/sections/video-section/video-section.component.d.ts +4 -3
- package/lib/sections/video-section/video-section.model.d.ts +1 -1
- package/lib/services/cart.service.d.ts +1 -6
- package/lib/services/events.service.d.ts +2 -6
- package/lib/services/rest.service.d.ts +29 -18
- package/lib/services/storage.service.d.ts +6 -5
- package/lib/styles/index.d.ts +7 -1
- package/lib/styles/style.model.d.ts +15 -1
- package/lib/styles/types.d.ts +10 -2
- package/package.json +1 -1
- package/public-api.d.ts +13 -0
- package/simpo-component-library-3.6.2.tgz +0 -0
- package/src/lib/styles/global-styles.css +251 -191
- package/simpo-component-library-3.5.52.tgz +0 -0
|
@@ -28,7 +28,7 @@ export class TextEditorComponent {
|
|
|
28
28
|
selectedSize: '',
|
|
29
29
|
selectedList: '',
|
|
30
30
|
selectedAlignment: '',
|
|
31
|
-
selectedColor: ''
|
|
31
|
+
selectedColor: '#000000'
|
|
32
32
|
};
|
|
33
33
|
this.selectedColorType = 'SOLID';
|
|
34
34
|
this.primaryColor = '#000000';
|
|
@@ -143,42 +143,52 @@ export class TextEditorComponent {
|
|
|
143
143
|
changeColor(event) {
|
|
144
144
|
if (!isPlatformBrowser(this.platformId))
|
|
145
145
|
return;
|
|
146
|
-
this.restoreSelection(); // Restore
|
|
146
|
+
this.restoreSelection(); // Restore selection before touching DOM
|
|
147
147
|
const color = event.target.value;
|
|
148
|
-
//
|
|
148
|
+
// Grab current selection
|
|
149
149
|
const selection = window.getSelection();
|
|
150
150
|
if (selection && selection.rangeCount > 0) {
|
|
151
151
|
const range = selection.getRangeAt(0);
|
|
152
|
-
let
|
|
153
|
-
if (!
|
|
152
|
+
let targetNode = range.commonAncestorContainer;
|
|
153
|
+
if (!targetNode)
|
|
154
154
|
return;
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
// If it's a text node, work with its parent element
|
|
156
|
+
if (targetNode.nodeType === Node.TEXT_NODE && targetNode.parentElement) {
|
|
157
|
+
targetNode = targetNode.parentElement;
|
|
157
158
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
if (
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// Force remove the transparency that was applied for gradients
|
|
170
|
-
targetElement.style.color = color;
|
|
171
|
-
// Ensure the change is emitted
|
|
159
|
+
if (targetNode instanceof HTMLElement) {
|
|
160
|
+
const el = targetNode;
|
|
161
|
+
// 1) If it *has* gradient styling, strip it off and immediately apply your solid color
|
|
162
|
+
const hasGradient = el.style.backgroundClip === 'text' ||
|
|
163
|
+
el.style.webkitBackgroundClip === 'text';
|
|
164
|
+
if (hasGradient) {
|
|
165
|
+
el.style.background = '';
|
|
166
|
+
el.style.backgroundClip = '';
|
|
167
|
+
el.style.webkitBackgroundClip = '';
|
|
168
|
+
el.style.webkitTextFillColor = '';
|
|
169
|
+
el.style.color = color;
|
|
172
170
|
this.valueChange.emit(this.editor.nativeElement.innerHTML);
|
|
173
171
|
this.toolbarData.selectedColor = color;
|
|
174
172
|
return;
|
|
175
173
|
}
|
|
174
|
+
// 2) If *no* gradient styling, look for any <span> wrappers and unwrap them
|
|
175
|
+
// so that our execCommand('foreColor') can cleanly apply to plain text
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
const spans = this.editor.nativeElement.querySelectorAll('span');
|
|
179
|
+
spans.forEach((span) => {
|
|
180
|
+
// Only unwrap spans that *don’t* carry gradient—i.e. strips any residual tags
|
|
181
|
+
const parent = span.parentNode;
|
|
182
|
+
while (span.firstChild) {
|
|
183
|
+
parent.insertBefore(span.firstChild, span);
|
|
184
|
+
}
|
|
185
|
+
parent.removeChild(span);
|
|
186
|
+
});
|
|
187
|
+
// 3) Finally, use the legacy execCommand for solid color
|
|
180
188
|
document.execCommand('foreColor', false, color);
|
|
189
|
+
// Update toolbar state
|
|
181
190
|
this.toolbarData.selectedColor = color;
|
|
191
|
+
this.valueChange.emit(this.editor.nativeElement.innerHTML);
|
|
182
192
|
}
|
|
183
193
|
updateText(event) {
|
|
184
194
|
// console.log(this.editor.nativeElement.innerHTML)
|
|
@@ -249,7 +259,7 @@ export class TextEditorComponent {
|
|
|
249
259
|
}
|
|
250
260
|
changeGradientColor() {
|
|
251
261
|
this.restoreSelection(); // Restore the selection before applying gradient
|
|
252
|
-
const color = `linear-gradient(
|
|
262
|
+
const color = `linear-gradient(90deg, ${this.primaryColor} 0%, ${this.secondaryColor} 100%)`;
|
|
253
263
|
this.applyGradientToText(color);
|
|
254
264
|
}
|
|
255
265
|
applyGradientToText(gradientValue) {
|
|
@@ -265,6 +275,15 @@ export class TextEditorComponent {
|
|
|
265
275
|
return;
|
|
266
276
|
// Extract the selected content
|
|
267
277
|
const selectedContent = range.extractContents();
|
|
278
|
+
const spans = this.editor.nativeElement.querySelectorAll('span');
|
|
279
|
+
spans.forEach((span) => {
|
|
280
|
+
// Only unwrap spans that *don’t* carry gradient—i.e. strips any residual tags
|
|
281
|
+
const parent = span.parentNode;
|
|
282
|
+
while (span.firstChild) {
|
|
283
|
+
parent.insertBefore(span.firstChild, span);
|
|
284
|
+
}
|
|
285
|
+
parent.removeChild(span);
|
|
286
|
+
});
|
|
268
287
|
// Create a new <span> element to wrap the selected text
|
|
269
288
|
const span = document.createElement('span');
|
|
270
289
|
span.style.background = gradientValue;
|
|
@@ -308,8 +327,34 @@ export class TextEditorComponent {
|
|
|
308
327
|
selection?.addRange(this.savedRange);
|
|
309
328
|
}
|
|
310
329
|
}
|
|
330
|
+
onPaste(event) {
|
|
331
|
+
if (!isPlatformBrowser(this.platformId))
|
|
332
|
+
return;
|
|
333
|
+
event.preventDefault();
|
|
334
|
+
const html = event.clipboardData?.getData('text/html') || '';
|
|
335
|
+
const cleanHtml = this.stripStyles(html);
|
|
336
|
+
document.execCommand('insertHTML', false, cleanHtml);
|
|
337
|
+
}
|
|
338
|
+
stripStyles(html) {
|
|
339
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
340
|
+
const elements = doc.body.querySelectorAll('*');
|
|
341
|
+
elements.forEach(el => {
|
|
342
|
+
el.removeAttribute('style'); // Remove all inline styles
|
|
343
|
+
el.removeAttribute('class'); // Optional
|
|
344
|
+
});
|
|
345
|
+
return doc.body.innerHTML;
|
|
346
|
+
}
|
|
347
|
+
getText() {
|
|
348
|
+
const textContent = this.value
|
|
349
|
+
.replace(/<\/?[^>]+(>|$)/g, "")
|
|
350
|
+
.replace(/\s+/g, ' ').trim();
|
|
351
|
+
if (!textContent) {
|
|
352
|
+
return "";
|
|
353
|
+
}
|
|
354
|
+
return this.value;
|
|
355
|
+
}
|
|
311
356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextEditorComponent, deps: [{ token: i1.ElementServiceService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
312
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\n </div>\n\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\n <option value=\"H1\">Heading1</option>\n <option value=\"H2\">Heading2</option>\n <option value=\"H3\">Heading3</option>\n <option value=\"div\">Text</option>\n </select> -->\n\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\n\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\n <option value=\"\" selected>Default</option>\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Medium</option>\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\n </select>\n\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\n\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\n\n <div class=\"colorType\">\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\" (click)=\"selectedColorType = 'SOLID'\">Solid</button>\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\" (click)=\"selectedColorType = 'GRADIENT'\">Gradient</button>\n </div>\n\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\n </button>\n \n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"primaryColor\">\n </button>\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"secondaryColor\">\n </button>\n </div>\n </div>\n\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\n <div class=\"suggestion\" (click)=\"regenerateText()\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\n <div>\n <p class=\"name\">Regenerate Text</p>\n <p class=\"desc\">Get a fresh variation of a current text</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["
|
|
357
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TextEditorComponent, isStandalone: true, selector: "simpo-text-editor", inputs: { value: "value", editable: "editable", sectionId: "sectionId", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "editor", first: true, predicate: ["editor"], descendants: true }, { propertyName: "colorPicker", first: true, predicate: ["colorPicker"], descendants: true }, { propertyName: "parentElement", first: true, predicate: ["parentElement"], descendants: true }, { propertyName: "suggestion", first: true, predicate: ["suggestion"], descendants: true }], ngImport: i0, template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement [class.d-none]=\"!editable && getText() == ''\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Medium</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\" (click)=\"selectedColorType = 'SOLID'\">Solid</button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\" (click)=\"selectedColorType = 'GRADIENT'\">Gradient</button>\r\n </div>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n \r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border,.border:hover{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ContenteditableValueAccessor, selector: "[contenteditable][ngModel]", inputs: ["contenteditable"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
313
358
|
}
|
|
314
359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextEditorComponent, decorators: [{
|
|
315
360
|
type: Component,
|
|
@@ -318,7 +363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
318
363
|
FormsModule,
|
|
319
364
|
ContenteditableValueAccessor,
|
|
320
365
|
MatIconModule
|
|
321
|
-
], template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement>\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\">\n </div>\n\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\n <option value=\"H1\">Heading1</option>\n <option value=\"H2\">Heading2</option>\n <option value=\"H3\">Heading3</option>\n <option value=\"div\">Text</option>\n </select> -->\n\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\n\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\n <option value=\"\" selected>Default</option>\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Medium</option>\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\n </select>\n\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\n\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\n\n <div class=\"colorType\">\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\" (click)=\"selectedColorType = 'SOLID'\">Solid</button>\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\" (click)=\"selectedColorType = 'GRADIENT'\">Gradient</button>\n </div>\n\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\n </button>\n \n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"primaryColor\">\n </button>\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\n <mat-icon>format_color_text</mat-icon>\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"secondaryColor\">\n </button>\n </div>\n </div>\n\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\n <div class=\"suggestion\" (click)=\"regenerateText()\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\n <div>\n <p class=\"name\">Regenerate Text</p>\n <p class=\"desc\">Get a fresh variation of a current text</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["
|
|
366
|
+
], template: "<div class=\"editor-container\" [ngClass]=\"{'border': editable}\" #parentElement [class.d-none]=\"!editable && getText() == ''\">\r\n <div [contenteditable]=\"editable\" [(ngModel)]=\"value\" class=\"editable-text\" (mouseup)=\"showToolbar($event)\" #editor\r\n (ngModelChange)=\"updateText($event)\" (mousedown)=\"hideToolbar($event)\" (paste)=\"onPaste($event)\">\r\n </div>\r\n\r\n <div class=\"toolbar\" *ngIf=\"editable && show\" [ngStyle]=\"{'top.px': toolbarY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" #toolbar >\r\n <!-- <select class=\"tool\" (change)=\"onFormatChange($event)\" [(ngModel)]=\"toolbarData.selectedHeading\">\r\n <option value=\"H1\">Heading1</option>\r\n <option value=\"H2\">Heading2</option>\r\n <option value=\"H3\">Heading3</option>\r\n <option value=\"div\">Text</option>\r\n </select> -->\r\n\r\n <button class=\"tool\" (click)=\"formatText('bold')\" [ngClass]=\"{'selectedTool': toolbarData.isBold}\"><mat-icon> format_bold</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('italic')\" [ngClass]=\"{'selectedTool': toolbarData.isItalic}\"><mat-icon> format_italic</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('underline')\" [ngClass]=\"{'selectedTool': toolbarData.isUnderlined}\"><mat-icon> format_underlined</mat-icon></button>\r\n\r\n <select class=\"tool\" (change)=\"changeFontSize($event)\" [(ngModel)]=\"toolbarData.selectedSize\">\r\n <option value=\"\" selected>Default</option>\r\n <option value=\"clamp(0.75rem, 2vw, 1rem)\">Small</option>\r\n <option value=\"clamp(1rem, 3vw, 1.5rem)\">Medium</option>\r\n <option value=\"clamp(1.25rem, 4vw, 2rem)\">Large</option>\r\n <option value=\"clamp(2rem, 5vw, 3rem)\">Extra Large</option>\r\n <option value=\"clamp(3.1rem, 7vw, 4.5rem)\">Huge</option>\r\n </select>\r\n\r\n <button class=\"tool\" (click)=\"formatText('insertOrderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertOrderedList'}\"><mat-icon>format_list_numbered</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('insertUnorderedList')\" [ngClass]=\"{'selectedTool': toolbarData.selectedList === 'insertUnorderedList'}\"><mat-icon> format_list_bulleted</mat-icon></button>\r\n\r\n <button class=\"tool\" (click)=\"formatText('justifyLeft')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyLeft'}\"><mat-icon> format_align_left</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyCenter')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyCenter'}\"><mat-icon> format_align_center</mat-icon></button>\r\n <button class=\"tool\" (click)=\"formatText('justifyRight')\" [ngClass]=\"{'selectedTool': toolbarData.selectedAlignment === 'justifyRight'}\"><mat-icon> format_align_right</mat-icon></button>\r\n\r\n <div class=\"colorType\">\r\n <button class=\"solid\" [ngClass]=\"{'solidColorSelected': selectedColorType === 'SOLID'}\" (click)=\"selectedColorType = 'SOLID'\">Solid</button>\r\n <button class=\"gradient\" [ngClass]=\"{'gradientColorSelected': selectedColorType === 'GRADIENT'}\" (click)=\"selectedColorType = 'GRADIENT'\">Gradient</button>\r\n </div>\r\n\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker()\" *ngIf=\"selectedColorType === 'SOLID'\">\r\n <mat-icon>format_color_text</mat-icon>\r\n <input type=\"color\" #colorPicker class=\"hidden-color-picker\" (input)=\"changeColor($event)\" [(ngModel)]=\"toolbarData.selectedColor\">\r\n </button>\r\n \r\n <div class=\"colorType\" *ngIf=\"selectedColorType === 'GRADIENT'\">\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); primaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"primaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #primaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"primaryColor\">\r\n </button>\r\n <button class=\"tool color-picker-btn\" (click)=\"openColorPicker(); secondaryColorPicker.click()\">\r\n <mat-icon [style.color]=\"secondaryColor\">format_color_text</mat-icon>\r\n <input type=\"color\" #secondaryColorPicker class=\"hidden-color-picker\" (input)=\"changeGradientColor()\" [(ngModel)]=\"secondaryColor\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"suggestion-box\" [ngStyle]=\"{'top.px': suggestionY}\" [style.right]=\"rightZero ? '0px' : 'auto'\" [style.left]=\"!rightZero ? '0px' : 'auto'\" *ngIf=\"editable && label && showSuggestion\" #suggestion>\r\n <div class=\"suggestion\" (click)=\"regenerateText()\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/887493c1742273970151Frame%201244831740.png\" alt=\"\">\r\n <div>\r\n <p class=\"name\">Regenerate Text</p>\r\n <p class=\"desc\">Get a fresh variation of a current text</p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.editor-container{position:relative;display:inline-block;overflow:visible;width:100%}.editor-container div{outline:none}.editable-text{padding:4px;cursor:text}.toolbar{position:absolute;background:#fff;box-shadow:0 2px 5px #0003;display:flex;gap:5px;align-items:center;z-index:100000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:22px}.toolbar:hover{border:1px solid #ccc}.toolbar button{background:none;border:none;padding:5px 8px;cursor:pointer;font-weight:700;display:flex;align-items:center}.toolbar button:hover{background:#ddd}.toolbar select{padding:3px;border:none;outline:none;font-size:14px;font-weight:600;cursor:pointer}.toolbar input[type=color]{border:none;width:30px;height:30px;padding:0;cursor:pointer}.color-picker-btn{position:relative;background:none;border:none;cursor:pointer;padding:5px}.hidden-color-picker{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer}.border,.border:hover{border:1px solid #E9E9E9!important;border-radius:8px}.selectedTool{background:var(--primary-bg-color)!important;color:#fff;border-radius:5px}p{margin-bottom:0rem!important}.suggestion-box{position:absolute;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #0003;z-index:10000;box-shadow:#00000029 0 1px 4px;padding:5px 15px;border-radius:10px}.suggestion{display:flex;gap:10px;width:307px;align-items:center;cursor:pointer}.suggestion img{border-radius:5px;width:32px;height:32px;background:#faf1fc;padding:3px}.suggestion .name{color:#000;font-family:var(--primary-font-family)}.suggestion .desc{color:#000;font-size:12px;color:#918585;font-family:var(--primary-font-family)}.colorType{display:flex;border:1px solid #E9E9E9;border-radius:5px;height:35px}.colorType .solid{border-right:1px solid #E9E9E9;font-size:14px!important;font-family:Mulish}.colorType .gradient{font-size:14px!important;font-family:Mulish}.solidColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-left-radius:5px;border-bottom-left-radius:5px}.gradientColorSelected{background:var(--primary-bg-color)!important;color:#fff;border-top-right-radius:5px;border-bottom-right-radius:5px}@media screen and (max-width: 475px){.toolbar{max-width:100%;flex-wrap:wrap;row-gap:15px}.tool{width:max-content!important}}\n"] }]
|
|
322
367
|
}], ctorParameters: () => [{ type: i1.ElementServiceService }, { type: Object, decorators: [{
|
|
323
368
|
type: Inject,
|
|
324
369
|
args: [PLATFORM_ID]
|
|
@@ -348,4 +393,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
348
393
|
}], label: [{
|
|
349
394
|
type: Input
|
|
350
395
|
}] } });
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFnQnZELE1BQU0sT0FBTyxtQkFBbUI7SUFnQzlCLFlBQW9CLGFBQW9DLEVBQ3pCLFVBQWtCO1FBRDdCLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBMUJ4QyxVQUFLLEdBQVcscUNBQXFDLENBQUM7UUFDckQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFJbkMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLG1CQUFjLEdBQVksS0FB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QixVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRWpDLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBQTEFURk9STV9JRCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb250ZW50ZWRpdGFibGVWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnRlZGl0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50U2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3Itc2VydmljZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tdGV4dC1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IsXG4gICAgTWF0SWNvbk1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGV4dC1lZGl0b3IuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgVGV4dEVkaXRvckNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXInLCB7IHN0YXRpYzogZmFsc2UgfSkgdG9vbGJhciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3IhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb2xvclBpY2tlcicpIGNvbG9yUGlja2VyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncGFyZW50RWxlbWVudCcpIHBhcmVudEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uJywgeyBzdGF0aWM6IGZhbHNlIH0pIHN1Z2dlc3Rpb24hOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgPSAnPHA+SGVsbG8gdGhpcyBpcyBwYWxhc2ggbWFraGlqYTwvcD4nO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VjdGlvbklkPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcblxuICBzaG93ID0gZmFsc2U7XG4gIHRvb2xiYXJZID0gMDtcbiAgc3VnZ2VzdGlvblkgPSAwO1xuICByaWdodFplcm86IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93U3VnZ2VzdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICB0b29sYmFyRGF0YTogYW55ID0ge1xuICAgIHNlbGVjdGVkSGVhZGluZzogJycsXG4gICAgaXNCb2xkOiBmYWxzZSxcbiAgICBpc0l0YWxpYzogZmFsc2UsXG4gICAgaXNVbmRlcmxpbmVkOiBmYWxzZSxcbiAgICBzZWxlY3RlZFNpemU6ICcnLFxuICAgIHNlbGVjdGVkTGlzdDogJycsXG4gICAgc2VsZWN0ZWRBbGlnbm1lbnQ6ICcnLFxuICAgIHNlbGVjdGVkQ29sb3I6ICcnXG4gIH1cbiAgc2VsZWN0ZWRDb2xvclR5cGU6ICdTT0xJRCcgfCAnR1JBRElFTlQnID0gJ1NPTElEJztcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCc7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFbGVtZW50U2VydmljZVNlcnZpY2UsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oaWRlVG9vbGJhci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oaWRlVG9vbGJhci5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuXG4gIHNob3dUb29sYmFyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmVkaXRhYmxlKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbiA9PSBudWxsKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGFyZW50UmVjdCA9IHRoaXMucGFyZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRvcEZyb21QYXJlbnQgPSByZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wO1xuXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IHRvb2xiYXJXaWR0aCA9IDU0MTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgY29uc3QgcmlnaHRQb3NpdG9uID0gdmlld3BvcnRXaWR0aCAtIHBhcmVudFJlY3QubGVmdDtcbiAgICAgIGlmIChyaWdodFBvc2l0b24gKyB0b29sYmFyV2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIHRoaXMucmlnaHRaZXJvID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJpZ2h0WmVybyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9vbGJhclkgPSB0b3BGcm9tUGFyZW50ICsgMzA7XG5cbiAgICAgIHRoaXMucmVGb3JtYXR0aW5nRGF0YSgpO1xuICAgICAgdGhpcy5yZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKTtcblxuICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaGlkZVRvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgIXRoaXMuZWRpdGFibGUpIHJldHVybjtcblxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVFZGl0b3IgPSB0aGlzLmVkaXRvcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGVUb29sYmFyID0gdGhpcy50b29sYmFyPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24gPSB0aGlzLnN1Z2dlc3Rpb24/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcblxuICAgIC8vIEhpZGUgdGhlIHRvb2xiYXIgaWYgdGhlIGNsaWNrIGlzIG91dHNpZGUgYm90aCB0aGUgZWRpdG9yIGFuZCB0b29sYmFyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlRWRpdG9yICYmICFjbGlja2VkSW5zaWRlVG9vbGJhcikge1xuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pIHtcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRUZXh0KGNvbW1hbmQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyA9ICcnKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICAvLyAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKSB7XG4gICAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAvLyAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIC8vICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIC8vICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcblxuICAgIC8vICAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBuZXdFbGVtZW50LnRleHRDb250ZW50ID0gc2VsZWN0ZWRUZXh0O1xuXG4gICAgLy8gICAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIC8vICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShuZXdFbGVtZW50KTtcblxuICAgIC8vICAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEhlYWRpbmcgPSB2YWx1ZTtcbiAgICAvLyAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgdmFsdWUpO1xuXG4gICAgaWYgKGNvbW1hbmQgPT09ICdib2xkJylcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNCb2xkID0gIXRoaXMudG9vbGJhckRhdGEuaXNCb2xkO1xuICAgIGlmIChjb21tYW5kID09PSAnaXRhbGljJylcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNJdGFsaWMgPSAhdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYztcbiAgICBpZiAoY29tbWFuZCA9PT0gJ3VuZGVybGluZScpXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxuICAgIGlmIChjb21tYW5kID09PSAnaW5zZXJ0T3JkZXJlZExpc3QnIHx8IGNvbW1hbmQgPT09ICdpbnNlcnRVbm9yZGVyZWRMaXN0JylcbiAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPyAnJyA6IGNvbW1hbmQ7XG4gICAgaWYgKGNvbW1hbmQgPT09ICdqdXN0aWZ5TGVmdCcgfHwgY29tbWFuZCA9PT0gJ2p1c3RpZnlDZW50ZXInIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5UmlnaHQnKVxuICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9IGNvbW1hbmQgPT09IHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPyAnJyA6IGNvbW1hbmQ7XG4gICAgaWYgKGNvbW1hbmQgPT09ICdmb3JtYXRCbG9jaycpXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xuICB9XG5cbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIEFwcGx5IGEgZGVmYXVsdCBzaXplIG9mIDQgKG5lZWRlZCBmb3IgZXhlY0NvbW1hbmQgdG8gd29yaylcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzQnKTtcblxuICAgIC8vIENvbnZlcnQgc2VsZWN0ZWQgZm9udCBlbGVtZW50cyB0byBoYXZlIGFjdHVhbCBmb250LXNpemUgaW5zdGVhZCBvZiBcInNpemVcIiBhdHRyaWJ1dGVcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJmb250W3NpemU9JzQnXVwiKTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQ7IC8vIOKchSBFeHBsaWNpdGx5IGNhc3QgdG8gSFRNTEVsZW1lbnRcbiAgICAgIGh0bWxFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpOyAvLyBSZW1vdmUgb2xkIHNpemUgYXR0cmlidXRlXG4gICAgICBodG1sRWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IHNpemU7IC8vIEFwcGx5IENTUyBmb250IHNpemVcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IHNpemU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAvLyB0aGlzLnNob3cgPSBmYWxzZTsgLy8gSGlkZSB0b29sYmFyIGFmdGVyIGFjdGlvblxuICB9XG5cbiAgY2hhbmdlQ29sb3IoZXZlbnQ6IGFueSkge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvbigpOyAvLyBSZXN0b3JlIHRoZSBzZWxlY3Rpb24gYmVmb3JlIGFwcGx5aW5nIGNvbG9yXG5cbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIG5lZWQgdG8gY2xlYXIgZ3JhZGllbnQgc3R5bGluZ1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIGxldCB0YXJnZXRFbGVtZW50OiBOb2RlIHwgbnVsbCA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuXG5cbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgdGFyZ2V0RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgZ3JhZGllbnQgc3R5bGluZywgd2UgbmVlZCB0byBjbGVhciBpdCBmaXJzdFxuICAgICAgaWYgKHRhcmdldEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAvLyBDaGVjayBpZiBlbGVtZW50IGhhcyBncmFkaWVudCBzdHlsaW5nXG4gICAgICAgIGNvbnN0IGhhc0dyYWRpZW50U3R5bGluZyA9XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gJ3RleHQnIHx8XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudC5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9PT0gJ3RleHQnO1xuXG4gICAgICAgIGlmIChoYXNHcmFkaWVudFN0eWxpbmcpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgZ3JhZGllbnQgc3R5bGluZ1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9ICcnO1xuICAgICAgICAgIHRhcmdldEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAnJztcbiAgICAgICAgICB0YXJnZXRFbGVtZW50LnN0eWxlLndlYmtpdEJhY2tncm91bmRDbGlwID0gJyc7XG4gICAgICAgICAgdGFyZ2V0RWxlbWVudC5zdHlsZS53ZWJraXRUZXh0RmlsbENvbG9yID0gJyc7XG5cbiAgICAgICAgICAvLyBGb3JjZSByZW1vdmUgdGhlIHRyYW5zcGFyZW5jeSB0aGF0IHdhcyBhcHBsaWVkIGZvciBncmFkaWVudHNcbiAgICAgICAgICB0YXJnZXRFbGVtZW50LnN0eWxlLmNvbG9yID0gY29sb3I7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhlIGNoYW5nZSBpcyBlbWl0dGVkXG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbiBlbGVtZW50IHdpdGggZ3JhZGllbnQgc3R5bGluZyBvciBjb3VsZG4ndCBoYW5kbGUgaXQsXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBzdGFuZGFyZCBleGVjQ29tbWFuZCBhcHByb2FjaFxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb3JlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xuICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvciA9IGNvbG9yO1xuICB9XG4gIHVwZGF0ZVRleHQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgfVxuXG4gIG9uRm9ybWF0Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLmZvcm1hdFRleHQoJ2Zvcm1hdEJsb2NrJywgc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuXG4gIG9wZW5Db2xvclBpY2tlcigpIHtcbiAgICAvLyB0aGlzLmNvbG9yUGlja2VyLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTsgLy8gUHJvZ3JhbW1hdGljYWxseSB0cmlnZ2VyIGlucHV0XG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKCk7IC8vIFNhdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gIH1cblxuICByZWFkRm9ybWF0dGluZ1Byb3BlcnRpZXMoKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIENoZWNrIGlmIG5vZGUgaXMgbnVsbFxuICAgIGlmICghbm9kZSkgcmV0dXJuO1xuXG4gICAgbGV0IGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICAgICAgaWYgKG5vZGVOYW1lID09PSAnSDEnIHx8IG5vZGVOYW1lID09PSAnSDInIHx8IG5vZGVOYW1lID09PSAnSDMnKSB7XG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRIZWFkaW5nID0gbm9kZU5hbWU7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnQicgfHwgbm9kZU5hbWUgPT09ICdTVFJPTkcnKSB7XG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuaXNCb2xkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdJJyB8fCBub2RlTmFtZSA9PT0gJ0VNJykge1xuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdVJykge1xuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnT0wnKSB7XG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID0gJ2luc2VydE9yZGVyZWRMaXN0JztcbiAgICAgIH0gZWxzZSBpZiAobm9kZU5hbWUgPT09ICdVTCcpIHtcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCc7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUudGV4dEFsaWduKSB7XG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPSBganVzdGlmeSR7ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlbGVtZW50LnN0eWxlLnRleHRBbGlnbi5zbGljZSgxKX1gO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0eWxlLmZvbnRTaXplKSB7XG4gICAgICAgIHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRTaXplID0gZWxlbWVudC5zdHlsZS5mb250U2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS5jb2xvcikge1xuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBlbGVtZW50LnN0eWxlLmNvbG9yXG4gICAgICB9XG5cblxuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZUZvcm1hdHRpbmdEYXRhKCkge1xuICAgIHRoaXMudG9vbGJhckRhdGEgPSB7XG4gICAgICBzZWxlY3RlZEhlYWRpbmc6ICcnLFxuICAgICAgaXNCb2xkOiBmYWxzZSxcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgIGlzVW5kZXJsaW5lZDogZmFsc2UsXG4gICAgICBzZWxlY3RlZFNpemU6ICcnLFxuICAgICAgc2VsZWN0ZWRMaXN0OiAnJyxcbiAgICAgIHNlbGVjdGVkQWxpZ25tZW50OiAnJyxcbiAgICAgIHNlbGVjdGVkQ29sb3I6ICcnXG4gICAgfVxuICB9XG5cbiAgY2hhbmdlR3JhZGllbnRDb2xvcigpIHtcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24oKTsgLy8gUmVzdG9yZSB0aGUgc2VsZWN0aW9uIGJlZm9yZSBhcHBseWluZyBncmFkaWVudFxuICAgIGNvbnN0IGNvbG9yID0gYGxpbmVhci1ncmFkaWVudCg5NC4yMmRlZywgJHt0aGlzLnByaW1hcnlDb2xvcn0gLTQuNDUlLCAke3RoaXMuc2Vjb25kYXJ5Q29sb3J9IDExMS44OCUpYFxuICAgIHRoaXMuYXBwbHlHcmFkaWVudFRvVGV4dChjb2xvcilcbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRUb1RleHQoZ3JhZGllbnRWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gcmFuZ2VcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHJhbmdlIGlzIHZhbGlkIGZvciB3cmFwcGluZ1xuICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSByZXR1cm47XG5cbiAgICAvLyBFeHRyYWN0IHRoZSBzZWxlY3RlZCBjb250ZW50XG4gICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG5cblxuICAgIC8vIENyZWF0ZSBhIG5ldyA8c3Bhbj4gZWxlbWVudCB0byB3cmFwIHRoZSBzZWxlY3RlZCB0ZXh0XG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSBncmFkaWVudFZhbHVlO1xuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZENsaXAgPSAndGV4dCc7XG4gICAgc3Bhbi5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcbiAgICBzcGFuLnN0eWxlLmNvbG9yID0gJ3RyYW5zcGFyZW50JztcbiAgICBzcGFuLnN0eWxlLndlYmtpdFRleHRGaWxsQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgLy8gQXBwZW5kIHRoZSBzZWxlY3RlZCBjb250ZW50IHRvIHRoZSA8c3Bhbj5cbiAgICBzcGFuLmFwcGVuZENoaWxkKHNlbGVjdGVkQ29udGVudCk7XG5cbiAgICAvLyBJbnNlcnQgdGhlIDxzcGFuPiBiYWNrIGludG8gdGhlIHJhbmdlXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcblxuICAgIC8vIENsZWFyIHRoZSBzZWxlY3Rpb25cbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIEhUTUwgY29udGVudFxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gIH1cbiAgcmVnZW5lcmF0ZVRleHQoKSB7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBidXNpbmVzc0lkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgZGF0YUlkOiB0aGlzLnNlY3Rpb25JZCxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBzdWdnZXN0ZWREYXRhVHlwZTogJ0NPTVBPTkVOVCcsXG4gICAgICB0b25lOiAnUFJPRkVTU0lPTkFMJyxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWxcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRvclNlcnZpY2UucmVnZW5lcmF0ZVRleHQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IHJlcy5kYXRhO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHNhdmVkUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XG5cblxuICBzYXZlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYXZlZFJhbmdlKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZSh0aGlzLnNhdmVkUmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2JvcmRlcic6IGVkaXRhYmxlfVwiICNwYXJlbnRFbGVtZW50PlxuICA8ZGl2IFtjb250ZW50ZWRpdGFibGVdPVwiZWRpdGFibGVcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgY2xhc3M9XCJlZGl0YWJsZS10ZXh0XCIgKG1vdXNldXApPVwic2hvd1Rvb2xiYXIoJGV2ZW50KVwiICNlZGl0b3JcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUZXh0KCRldmVudClcIiAobW91c2Vkb3duKT1cImhpZGVUb29sYmFyKCRldmVudClcIj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIiAqbmdJZj1cImVkaXRhYmxlICYmIHNob3dcIiBbbmdTdHlsZV09XCJ7J3RvcC5weCc6IHRvb2xiYXJZfVwiIFtzdHlsZS5yaWdodF09XCJyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiIFtzdHlsZS5sZWZ0XT1cIiFyaWdodFplcm8gPyAnMHB4JyA6ICdhdXRvJ1wiICN0b29sYmFyID5cbiAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJ0b29sXCIgKGNoYW5nZSk9XCJvbkZvcm1hdENoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZEhlYWRpbmdcIj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCJIMVwiPkhlYWRpbmcxPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiSDJcIj5IZWFkaW5nMjwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCI+SGVhZGluZzM8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCJkaXZcIj5UZXh0PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+IC0tPlxuXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnYm9sZCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0JvbGR9XCI+PG1hdC1pY29uPiBmb3JtYXRfYm9sZDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnaXRhbGljJylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLmlzSXRhbGljfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2l0YWxpYzwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgndW5kZXJsaW5lJylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZH1cIj48bWF0LWljb24+IGZvcm1hdF91bmRlcmxpbmVkPC9tYXQtaWNvbj48L2J1dHRvbj5cblxuICAgIDxzZWxlY3QgY2xhc3M9XCJ0b29sXCIgKGNoYW5nZSk9XCJjaGFuZ2VGb250U2l6ZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZFNpemVcIj5cbiAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD5EZWZhdWx0PC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMC43NXJlbSwgMnZ3LCAxcmVtKVwiPlNtYWxsPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMXJlbSwgM3Z3LCAxLjVyZW0pXCI+TWVkaXVtPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMS4yNXJlbSwgNHZ3LCAycmVtKVwiPkxhcmdlPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMnJlbSwgNXZ3LCAzcmVtKVwiPkV4dHJhIExhcmdlPC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMy4xcmVtLCA3dncsIDQuNXJlbSlcIj5IdWdlPC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPT09ICdpbnNlcnRPcmRlcmVkTGlzdCd9XCI+PG1hdC1pY29uPmZvcm1hdF9saXN0X251bWJlcmVkPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9PT0gJ2luc2VydFVub3JkZXJlZExpc3QnfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeUxlZnQnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPT09ICdqdXN0aWZ5TGVmdCd9XCI+PG1hdC1pY29uPiBmb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeUNlbnRlcicpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlDZW50ZXInfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2FsaWduX2NlbnRlcjwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeVJpZ2h0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeVJpZ2h0J31cIj48bWF0LWljb24+IGZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic29saWRcIiBbbmdDbGFzc109XCJ7J3NvbGlkQ29sb3JTZWxlY3RlZCc6IHNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnfVwiIChjbGljayk9XCJzZWxlY3RlZENvbG9yVHlwZSA9ICdTT0xJRCdcIj5Tb2xpZDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdyYWRpZW50XCIgW25nQ2xhc3NdPVwieydncmFkaWVudENvbG9yU2VsZWN0ZWQnOiBzZWxlY3RlZENvbG9yVHlwZSA9PT0gJ0dSQURJRU5UJ31cIiAoY2xpY2spPVwic2VsZWN0ZWRDb2xvclR5cGUgPSAnR1JBRElFTlQnXCI+R3JhZGllbnQ8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG5cIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKClcIiAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnU09MSUQnXCI+XG4gICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxuICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiICNjb2xvclBpY2tlciBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiAoaW5wdXQpPVwiY2hhbmdlQ29sb3IoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwidG9vbGJhckRhdGEuc2VsZWN0ZWRDb2xvclwiPlxuICAgIDwvYnV0dG9uPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJjb2xvclR5cGVcIiAqbmdJZj1cInNlbGVjdGVkQ29sb3JUeXBlID09PSAnR1JBRElFTlQnXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCBjb2xvci1waWNrZXItYnRuXCIgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigpOyBwcmltYXJ5Q29sb3JQaWNrZXIuY2xpY2soKVwiPlxuICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI3ByaW1hcnlDb2xvclBpY2tlciBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiAoaW5wdXQpPVwiY2hhbmdlR3JhZGllbnRDb2xvcigpXCIgWyhuZ01vZGVsKV09XCJwcmltYXJ5Q29sb3JcIj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKTsgc2Vjb25kYXJ5Q29sb3JQaWNrZXIuY2xpY2soKVwiPlxuICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI3NlY29uZGFyeUNvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VHcmFkaWVudENvbG9yKClcIiBbKG5nTW9kZWwpXT1cInNlY29uZGFyeUNvbG9yXCI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tYm94XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiBzdWdnZXN0aW9uWX1cIiBbc3R5bGUucmlnaHRdPVwicmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAqbmdJZj1cImVkaXRhYmxlICYmIGxhYmVsICYmIHNob3dTdWdnZXN0aW9uXCIgI3N1Z2dlc3Rpb24+XG4gICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb25cIiAoY2xpY2spPVwicmVnZW5lcmF0ZVRleHQoKVwiPlxuICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzg4NzQ5M2MxNzQyMjczOTcwMTUxRnJhbWUlMjAxMjQ0ODMxNzQwLnBuZ1wiIGFsdD1cIlwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJuYW1lXCI+UmVnZW5lcmF0ZSBUZXh0PC9wPlxuICAgICAgICA8cCBjbGFzcz1cImRlc2NcIj5HZXQgYSBmcmVzaCB2YXJpYXRpb24gb2YgYSBjdXJyZW50IHRleHQ8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFnQnZELE1BQU0sT0FBTyxtQkFBbUI7SUFnQzlCLFlBQW9CLGFBQW9DLEVBQ3pCLFVBQWtCO1FBRDdCLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtRQUN6QixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBMUJ4QyxVQUFLLEdBQVcscUNBQXFDLENBQUM7UUFDckQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFJbkMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLG1CQUFjLEdBQVksS0FB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QUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE91dHB1dCwgUExBVEZPUk1fSUQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRlbnRlZGl0YWJsZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXRleHQtZWRpdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29udGVudGVkaXRhYmxlVmFsdWVBY2Nlc3NvcixcclxuICAgIE1hdEljb25Nb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RleHQtZWRpdG9yLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXh0RWRpdG9yQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRvb2xiYXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3IhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbG9yUGlja2VyJykgY29sb3JQaWNrZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3BhcmVudEVsZW1lbnQnKSBwYXJlbnRFbGVtZW50ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uJywgeyBzdGF0aWM6IGZhbHNlIH0pIHN1Z2dlc3Rpb24hOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJzxwPkhlbGxvIHRoaXMgaXMgcGFsYXNoIG1ha2hpamE8L3A+JztcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25JZD86IHN0cmluZztcclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgc2hvdyA9IGZhbHNlO1xyXG4gIHRvb2xiYXJZID0gMDtcclxuICBzdWdnZXN0aW9uWSA9IDA7XHJcbiAgcmlnaHRaZXJvOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93U3VnZ2VzdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRvb2xiYXJEYXRhOiBhbnkgPSB7XHJcbiAgICBzZWxlY3RlZEhlYWRpbmc6ICcnLFxyXG4gICAgaXNCb2xkOiBmYWxzZSxcclxuICAgIGlzSXRhbGljOiBmYWxzZSxcclxuICAgIGlzVW5kZXJsaW5lZDogZmFsc2UsXHJcbiAgICBzZWxlY3RlZFNpemU6ICcnLFxyXG4gICAgc2VsZWN0ZWRMaXN0OiAnJyxcclxuICAgIHNlbGVjdGVkQWxpZ25tZW50OiAnJyxcclxuICAgIHNlbGVjdGVkQ29sb3I6ICcjMDAwMDAwJ1xyXG4gIH1cclxuICBzZWxlY3RlZENvbG9yVHlwZTogJ1NPTElEJyB8ICdHUkFESUVOVCcgPSAnU09MSUQnO1xyXG4gIHByaW1hcnlDb2xvcjogc3RyaW5nID0gJyMwMDAwMDAnO1xyXG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmcgPSAnIzAwMDAwMCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdG9yU2VydmljZTogRWxlbWVudFNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGlkZVRvb2xiYXIuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1Rvb2xiYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSB8fCAhdGhpcy5lZGl0YWJsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24gPT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5wYXJlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCB0b3BGcm9tUGFyZW50ID0gcmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcDtcclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICB0aGlzLnN1Z2dlc3Rpb25ZID0gdG9wRnJvbVBhcmVudCArIDMwO1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpIHtcclxuICAgICAgY29uc3QgdG9vbGJhcldpZHRoID0gNTQxO1xyXG5cclxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICBjb25zdCByaWdodFBvc2l0b24gPSB2aWV3cG9ydFdpZHRoIC0gcGFyZW50UmVjdC5sZWZ0O1xyXG4gICAgICBpZiAocmlnaHRQb3NpdG9uICsgdG9vbGJhcldpZHRoID4gdmlld3BvcnRXaWR0aCkge1xyXG4gICAgICAgIHRoaXMucmlnaHRaZXJvID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yaWdodFplcm8gPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRvb2xiYXJZID0gdG9wRnJvbVBhcmVudCArIDMwO1xyXG5cclxuICAgICAgdGhpcy5yZUZvcm1hdHRpbmdEYXRhKCk7XHJcbiAgICAgIHRoaXMucmVhZEZvcm1hdHRpbmdQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgICB0aGlzLnNob3cgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlVG9vbGJhcihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmVkaXRhYmxlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZUVkaXRvciA9IHRoaXMuZWRpdG9yPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XHJcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlVG9vbGJhciA9IHRoaXMudG9vbGJhcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xyXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24gPSB0aGlzLnN1Z2dlc3Rpb24/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcclxuXHJcbiAgICAvLyBIaWRlIHRoZSB0b29sYmFyIGlmIHRoZSBjbGljayBpcyBvdXRzaWRlIGJvdGggdGhlIGVkaXRvciBhbmQgdG9vbGJhclxyXG4gICAgaWYgKCFjbGlja2VkSW5zaWRlRWRpdG9yICYmICFjbGlja2VkSW5zaWRlVG9vbGJhcikge1xyXG4gICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghY2xpY2tlZEluc2lkZUVkaXRvciAmJiAhY2xpY2tlZEluc2lkZVN1Z2dlc3Rpb24pIHtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0VGV4dChjb21tYW5kOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgPSAnJykge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgLy8gICBpZiAoY29tbWFuZCA9PT0gJ2Zvcm1hdEJsb2NrJykge1xyXG4gICAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIC8vICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgLy8gICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG5cclxuICAgIC8vICAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHZhbHVlKTtcclxuICAgIC8vICAgICAgICAgbmV3RWxlbWVudC50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuXHJcbiAgICAvLyAgICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICAvLyAgICAgICAgIHJhbmdlLmluc2VydE5vZGUobmV3RWxlbWVudCk7XHJcblxyXG4gICAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTtcclxuXHJcbiAgICBpZiAoY29tbWFuZCA9PT0gJ2JvbGQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzQm9sZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnaXRhbGljJylcclxuICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0l0YWxpYyA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljO1xyXG4gICAgaWYgKGNvbW1hbmQgPT09ICd1bmRlcmxpbmUnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZCA9ICF0aGlzLnRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZFxyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdpbnNlcnRPcmRlcmVkTGlzdCcgfHwgY29tbWFuZCA9PT0gJ2luc2VydFVub3JkZXJlZExpc3QnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9IGNvbW1hbmQgPT09IHRoaXMudG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID8gJycgOiBjb21tYW5kO1xyXG4gICAgaWYgKGNvbW1hbmQgPT09ICdqdXN0aWZ5TGVmdCcgfHwgY29tbWFuZCA9PT0gJ2p1c3RpZnlDZW50ZXInIHx8IGNvbW1hbmQgPT09ICdqdXN0aWZ5UmlnaHQnKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID0gY29tbWFuZCA9PT0gdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA/ICcnIDogY29tbWFuZDtcclxuICAgIGlmIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snKVxyXG4gICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2l6ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBBcHBseSBhIGRlZmF1bHQgc2l6ZSBvZiA0IChuZWVkZWQgZm9yIGV4ZWNDb21tYW5kIHRvIHdvcmspXHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzQnKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHNlbGVjdGVkIGZvbnQgZWxlbWVudHMgdG8gaGF2ZSBhY3R1YWwgZm9udC1zaXplIGluc3RlYWQgb2YgXCJzaXplXCIgYXR0cmlidXRlXHJcbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJmb250W3NpemU9JzQnXVwiKTtcclxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50OyAvLyDinIUgRXhwbGljaXRseSBjYXN0IHRvIEhUTUxFbGVtZW50XHJcbiAgICAgIGh0bWxFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc2l6ZScpOyAvLyBSZW1vdmUgb2xkIHNpemUgYXR0cmlidXRlXHJcbiAgICAgIGh0bWxFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gc2l6ZTsgLy8gQXBwbHkgQ1NTIGZvbnQgc2l6ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkU2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgLy8gdGhpcy5zaG93ID0gZmFsc2U7IC8vIEhpZGUgdG9vbGJhciBhZnRlciBhY3Rpb25cclxuICB9XHJcblxyXG4gIGNoYW5nZUNvbG9yKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKCk7IC8vIFJlc3RvcmUgc2VsZWN0aW9uIGJlZm9yZSB0b3VjaGluZyBET01cclxuXHJcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIC8vIEdyYWIgY3VycmVudCBzZWxlY3Rpb25cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICAgIGxldCB0YXJnZXROb2RlOiBOb2RlIHwgbnVsbCA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG5cclxuICAgICAgaWYgKCF0YXJnZXROb2RlKSByZXR1cm47XHJcbiAgICAgIC8vIElmIGl0J3MgYSB0ZXh0IG5vZGUsIHdvcmsgd2l0aCBpdHMgcGFyZW50IGVsZW1lbnRcclxuICAgICAgaWYgKHRhcmdldE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHRhcmdldE5vZGUucGFyZW50RWxlbWVudCkge1xyXG4gICAgICAgIHRhcmdldE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldE5vZGUgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIDEpIElmIGl0ICpoYXMqIGdyYWRpZW50IHN0eWxpbmcsIHN0cmlwIGl0IG9mZiBhbmQgaW1tZWRpYXRlbHkgYXBwbHkgeW91ciBzb2xpZCBjb2xvclxyXG4gICAgICAgIGNvbnN0IGhhc0dyYWRpZW50ID1cclxuICAgICAgICAgIGVsLnN0eWxlLmJhY2tncm91bmRDbGlwID09PSAndGV4dCcgfHxcclxuICAgICAgICAgIGVsLnN0eWxlLndlYmtpdEJhY2tncm91bmRDbGlwID09PSAndGV4dCc7XHJcblxyXG4gICAgICAgIGlmIChoYXNHcmFkaWVudCkge1xyXG4gICAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZCA9ICcnO1xyXG4gICAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAnJztcclxuICAgICAgICAgIGVsLnN0eWxlLndlYmtpdEJhY2tncm91bmRDbGlwID0gJyc7XHJcbiAgICAgICAgICBlbC5zdHlsZS53ZWJraXRUZXh0RmlsbENvbG9yID0gJyc7XHJcbiAgICAgICAgICBlbC5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG5cclxuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XHJcbiAgICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBjb2xvcjtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIDIpIElmICpubyogZ3JhZGllbnQgc3R5bGluZywgbG9vayBmb3IgYW55IDxzcGFuPiB3cmFwcGVycyBhbmQgdW53cmFwIHRoZW1cclxuICAgICAgICAvLyAgICBzbyB0aGF0IG91ciBleGVjQ29tbWFuZCgnZm9yZUNvbG9yJykgY2FuIGNsZWFubHkgYXBwbHkgdG8gcGxhaW4gdGV4dFxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc3BhbnMgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4nKTtcclxuICAgIHNwYW5zLmZvckVhY2goKHNwYW46IGFueSkgPT4ge1xyXG4gICAgICAvLyBPbmx5IHVud3JhcCBzcGFucyB0aGF0ICpkb27igJl0KiBjYXJyeSBncmFkaWVudOKAlGkuZS4gc3RyaXBzIGFueSByZXNpZHVhbCB0YWdzXHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHNwYW4ucGFyZW50Tm9kZSE7XHJcbiAgICAgIHdoaWxlIChzcGFuLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYW4uZmlyc3RDaGlsZCwgc3Bhbik7XHJcbiAgICAgIH1cclxuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHNwYW4pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMykgRmluYWxseSwgdXNlIHRoZSBsZWdhY3kgZXhlY0NvbW1hbmQgZm9yIHNvbGlkIGNvbG9yXHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGNvbG9yKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdG9vbGJhciBzdGF0ZVxyXG4gICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yID0gY29sb3I7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGV4dChldmVudDogRXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICB9XHJcblxyXG4gIG9uRm9ybWF0Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy5mb3JtYXRUZXh0KCdmb3JtYXRCbG9jaycsIHNlbGVjdGVkVmFsdWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5Db2xvclBpY2tlcigpIHtcclxuICAgIC8vIHRoaXMuY29sb3JQaWNrZXIubmF0aXZlRWxlbWVudC5jbGljaygpOyAvLyBQcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgaW5wdXRcclxuICAgIHRoaXMuc2F2ZVNlbGVjdGlvbigpOyAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG4gIH1cclxuXHJcbiAgcmVhZEZvcm1hdHRpbmdQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybjtcclxuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIENoZWNrIGlmIG5vZGUgaXMgbnVsbFxyXG4gICAgaWYgKCFub2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICBjb25zdCBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XHJcblxyXG4gICAgICBpZiAobm9kZU5hbWUgPT09ICdIMScgfHwgbm9kZU5hbWUgPT09ICdIMicgfHwgbm9kZU5hbWUgPT09ICdIMycpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkSGVhZGluZyA9IG5vZGVOYW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnQicgfHwgbm9kZU5hbWUgPT09ICdTVFJPTkcnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5pc0JvbGQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnSScgfHwgbm9kZU5hbWUgPT09ICdFTScpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLmlzSXRhbGljID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ1UnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5pc1VuZGVybGluZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnT0wnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPSAnaW5zZXJ0T3JkZXJlZExpc3QnO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAnVUwnKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZExpc3QgPSAnaW5zZXJ0VW5vcmRlcmVkTGlzdCc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24pIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID0gYGp1c3RpZnkke2VsZW1lbnQuc3R5bGUudGV4dEFsaWduLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24uc2xpY2UoMSl9YDtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnN0eWxlLmZvbnRTaXplKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyRGF0YS5zZWxlY3RlZFNpemUgPSBlbGVtZW50LnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUuY29sb3IpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJEYXRhLnNlbGVjdGVkQ29sb3IgPSBlbGVtZW50LnN0eWxlLmNvbG9yXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVGb3JtYXR0aW5nRGF0YSgpIHtcclxuICAgIHRoaXMudG9vbGJhckRhdGEgPSB7XHJcbiAgICAgIHNlbGVjdGVkSGVhZGluZzogJycsXHJcbiAgICAgIGlzQm9sZDogZmFsc2UsXHJcbiAgICAgIGlzSXRhbGljOiBmYWxzZSxcclxuICAgICAgaXNVbmRlcmxpbmVkOiBmYWxzZSxcclxuICAgICAgc2VsZWN0ZWRTaXplOiAnJyxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiAnJyxcclxuICAgICAgc2VsZWN0ZWRBbGlnbm1lbnQ6ICcnLFxyXG4gICAgICBzZWxlY3RlZENvbG9yOiAnJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlR3JhZGllbnRDb2xvcigpIHtcclxuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvbigpOyAvLyBSZXN0b3JlIHRoZSBzZWxlY3Rpb24gYmVmb3JlIGFwcGx5aW5nIGdyYWRpZW50XHJcbiAgICBjb25zdCBjb2xvciA9IGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7dGhpcy5wcmltYXJ5Q29sb3J9IDAlLCAke3RoaXMuc2Vjb25kYXJ5Q29sb3J9IDEwMCUpYFxyXG4gICAgdGhpcy5hcHBseUdyYWRpZW50VG9UZXh0KGNvbG9yKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlHcmFkaWVudFRvVGV4dChncmFkaWVudFZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiByYW5nZVxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgcmFuZ2UgaXMgdmFsaWQgZm9yIHdyYXBwaW5nXHJcbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgdGhlIHNlbGVjdGVkIGNvbnRlbnRcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xyXG5cclxuICAgIGNvbnN0IHNwYW5zID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuJyk7XHJcbiAgICBzcGFucy5mb3JFYWNoKChzcGFuOiBhbnkpID0+IHtcclxuICAgICAgLy8gT25seSB1bndyYXAgc3BhbnMgdGhhdCAqZG9u4oCZdCogY2FycnkgZ3JhZGllbnTigJRpLmUuIHN0cmlwcyBhbnkgcmVzaWR1YWwgdGFnc1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBzcGFuLnBhcmVudE5vZGUhO1xyXG4gICAgICB3aGlsZSAoc3Bhbi5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShzcGFuLmZpcnN0Q2hpbGQsIHNwYW4pO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChzcGFuKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgPHNwYW4+IGVsZW1lbnQgdG8gd3JhcCB0aGUgc2VsZWN0ZWQgdGV4dFxyXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9IGdyYWRpZW50VmFsdWU7XHJcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ3RleHQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICd0ZXh0JztcclxuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgc3Bhbi5zdHlsZS53ZWJraXRUZXh0RmlsbENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIHNlbGVjdGVkIGNvbnRlbnQgdG8gdGhlIDxzcGFuPlxyXG4gICAgc3Bhbi5hcHBlbmRDaGlsZChzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuICAgIC8vIEluc2VydCB0aGUgPHNwYW4+IGJhY2sgaW50byB0aGUgcmFuZ2VcclxuICAgIHJhbmdlLmluc2VydE5vZGUoc3Bhbik7XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIHNlbGVjdGlvblxyXG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG5cclxuICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgSFRNTCBjb250ZW50XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xyXG4gIH1cclxuXHJcblxyXG4gIHJlZ2VuZXJhdGVUZXh0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgIGRhdGFJZDogdGhpcy5zZWN0aW9uSWQsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXHJcbiAgICAgIHN1Z2dlc3RlZERhdGFUeXBlOiAnQ09NUE9ORU5UJyxcclxuICAgICAgdG9uZTogJ1BST0ZFU1NJT05BTCcsXHJcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZWdlbmVyYXRlVGV4dChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSByZXMuZGF0YTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVkUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICBzYXZlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXN0b3JlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2F2ZWRSYW5nZSkge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UodGhpcy5zYXZlZFJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgaHRtbCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvaHRtbCcpIHx8ICcnO1xyXG4gICAgY29uc3QgY2xlYW5IdG1sID0gdGhpcy5zdHJpcFN0eWxlcyhodG1sKTtcclxuXHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBjbGVhbkh0bWwpO1xyXG4gIH1cclxuXHJcbiAgc3RyaXBTdHlsZXMoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2MuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOyAvLyBSZW1vdmUgYWxsIGlubGluZSBzdHlsZXNcclxuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpOyAvLyBPcHRpb25hbFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZG9jLmJvZHkuaW5uZXJIVE1MO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dCgpIHtcclxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gdGhpcy52YWx1ZVxyXG4gICAgICAucmVwbGFjZSgvPFxcLz9bXj5dKyg+fCQpL2csIFwiXCIpIFxyXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcclxuICAgIGlmICghdGV4dENvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnYm9yZGVyJzogZWRpdGFibGV9XCIgI3BhcmVudEVsZW1lbnQgW2NsYXNzLmQtbm9uZV09XCIhZWRpdGFibGUgJiYgZ2V0VGV4dCgpID09ICcnXCI+XHJcbiAgPGRpdiBbY29udGVudGVkaXRhYmxlXT1cImVkaXRhYmxlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIGNsYXNzPVwiZWRpdGFibGUtdGV4dFwiIChtb3VzZXVwKT1cInNob3dUb29sYmFyKCRldmVudClcIiAjZWRpdG9yXHJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUZXh0KCRldmVudClcIiAobW91c2Vkb3duKT1cImhpZGVUb29sYmFyKCRldmVudClcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCIgKm5nSWY9XCJlZGl0YWJsZSAmJiBzaG93XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiB0b29sYmFyWX1cIiBbc3R5bGUucmlnaHRdPVwicmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAjdG9vbGJhciA+XHJcbiAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJ0b29sXCIgKGNoYW5nZSk9XCJvbkZvcm1hdENoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZEhlYWRpbmdcIj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCI+SGVhZGluZzE8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgyXCI+SGVhZGluZzI8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgzXCI+SGVhZGluZzM8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImRpdlwiPlRleHQ8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PiAtLT5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdib2xkJylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLmlzQm9sZH1cIj48bWF0LWljb24+IGZvcm1hdF9ib2xkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2l0YWxpYycpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5pc0l0YWxpY31cIj48bWF0LWljb24+IGZvcm1hdF9pdGFsaWM8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgndW5kZXJsaW5lJylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLmlzVW5kZXJsaW5lZH1cIj48bWF0LWljb24+IGZvcm1hdF91bmRlcmxpbmVkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8c2VsZWN0IGNsYXNzPVwidG9vbFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udFNpemUoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwidG9vbGJhckRhdGEuc2VsZWN0ZWRTaXplXCI+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD5EZWZhdWx0PC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgwLjc1cmVtLCAydncsIDFyZW0pXCI+U21hbGw8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDFyZW0sIDN2dywgMS41cmVtKVwiPk1lZGl1bTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiY2xhbXAoMS4yNXJlbSwgNHZ3LCAycmVtKVwiPkxhcmdlPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJjbGFtcCgycmVtLCA1dncsIDNyZW0pXCI+RXh0cmEgTGFyZ2U8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImNsYW1wKDMuMXJlbSwgN3Z3LCA0LjVyZW0pXCI+SHVnZTwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRMaXN0ID09PSAnaW5zZXJ0T3JkZXJlZExpc3QnfVwiPjxtYXQtaWNvbj5mb3JtYXRfbGlzdF9udW1iZXJlZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkTGlzdCA9PT0gJ2luc2VydFVub3JkZXJlZExpc3QnfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJ0b29sXCIgKGNsaWNrKT1cImZvcm1hdFRleHQoJ2p1c3RpZnlMZWZ0JylcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVG9vbCc6IHRvb2xiYXJEYXRhLnNlbGVjdGVkQWxpZ25tZW50ID09PSAnanVzdGlmeUxlZnQnfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInRvb2xcIiAoY2xpY2spPVwiZm9ybWF0VGV4dCgnanVzdGlmeUNlbnRlcicpXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRvb2wnOiB0b29sYmFyRGF0YS5zZWxlY3RlZEFsaWdubWVudCA9PT0gJ2p1c3RpZnlDZW50ZXInfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2FsaWduX2NlbnRlcjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbFwiIChjbGljayk9XCJmb3JtYXRUZXh0KCdqdXN0aWZ5UmlnaHQnKVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRUb29sJzogdG9vbGJhckRhdGEuc2VsZWN0ZWRBbGlnbm1lbnQgPT09ICdqdXN0aWZ5UmlnaHQnfVwiPjxtYXQtaWNvbj4gZm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3JUeXBlXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzb2xpZFwiIFtuZ0NsYXNzXT1cInsnc29saWRDb2xvclNlbGVjdGVkJzogc2VsZWN0ZWRDb2xvclR5cGUgPT09ICdTT0xJRCd9XCIgKGNsaWNrKT1cInNlbGVjdGVkQ29sb3JUeXBlID0gJ1NPTElEJ1wiPlNvbGlkPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJncmFkaWVudFwiIFtuZ0NsYXNzXT1cInsnZ3JhZGllbnRDb2xvclNlbGVjdGVkJzogc2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCd9XCIgKGNsaWNrKT1cInNlbGVjdGVkQ29sb3JUeXBlID0gJ0dSQURJRU5UJ1wiPkdyYWRpZW50PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwidG9vbCBjb2xvci1waWNrZXItYnRuXCIgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigpXCIgKm5nSWY9XCJzZWxlY3RlZENvbG9yVHlwZSA9PT0gJ1NPTElEJ1wiPlxyXG4gICAgICA8bWF0LWljb24+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI2NvbG9yUGlja2VyIGNsYXNzPVwiaGlkZGVuLWNvbG9yLXBpY2tlclwiIChpbnB1dCk9XCJjaGFuZ2VDb2xvcigkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJ0b29sYmFyRGF0YS5zZWxlY3RlZENvbG9yXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZVwiICpuZ0lmPVwic2VsZWN0ZWRDb2xvclR5cGUgPT09ICdHUkFESUVOVCdcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRvb2wgY29sb3ItcGlja2VyLWJ0blwiIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoKTsgcHJpbWFyeUNvbG9yUGlja2VyLmNsaWNrKClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInByaW1hcnlDb2xvclwiPmZvcm1hdF9jb2xvcl90ZXh0PC9tYXQtaWNvbj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgI3ByaW1hcnlDb2xvclBpY2tlciBjbGFzcz1cImhpZGRlbi1jb2xvci1waWNrZXJcIiAoaW5wdXQpPVwiY2hhbmdlR3JhZGllbnRDb2xvcigpXCIgWyhuZ01vZGVsKV09XCJwcmltYXJ5Q29sb3JcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJ0b29sIGNvbG9yLXBpY2tlci1idG5cIiAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCk7IHNlY29uZGFyeUNvbG9yUGlja2VyLmNsaWNrKClcIj5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCI+Zm9ybWF0X2NvbG9yX3RleHQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiAjc2Vjb25kYXJ5Q29sb3JQaWNrZXIgY2xhc3M9XCJoaWRkZW4tY29sb3ItcGlja2VyXCIgKGlucHV0KT1cImNoYW5nZUdyYWRpZW50Q29sb3IoKVwiIFsobmdNb2RlbCldPVwic2Vjb25kYXJ5Q29sb3JcIj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tYm94XCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiBzdWdnZXN0aW9uWX1cIiBbc3R5bGUucmlnaHRdPVwicmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiBbc3R5bGUubGVmdF09XCIhcmlnaHRaZXJvID8gJzBweCcgOiAnYXV0bydcIiAqbmdJZj1cImVkaXRhYmxlICYmIGxhYmVsICYmIHNob3dTdWdnZXN0aW9uXCIgI3N1Z2dlc3Rpb24+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvblwiIChjbGljayk9XCJyZWdlbmVyYXRlVGV4dCgpXCI+XHJcbiAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy84ODc0OTNjMTc0MjI3Mzk3MDE1MUZyYW1lJTIwMTI0NDgzMTc0MC5wbmdcIiBhbHQ9XCJcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8cCBjbGFzcz1cIm5hbWVcIj5SZWdlbmVyYXRlIFRleHQ8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJkZXNjXCI+R2V0IGEgZnJlc2ggdmFyaWF0aW9uIG9mIGEgY3VycmVudCB0ZXh0PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -5,6 +5,7 @@ import { ImageDirectiveDirective } from './../../directive/image-directive.direc
|
|
|
5
5
|
import { TextBackgroundDirectiveDirective } from './../../directive/text-background-directive.directive';
|
|
6
6
|
import { SimpoButtonComponent } from '../simpo-button/simpo-button.component';
|
|
7
7
|
import { TextEditorComponent } from '../text-editor/text-editor.component';
|
|
8
|
+
import { HoverAnimationDirective } from '../../directive/hover-animation.directive';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../../services/events.service";
|
|
10
11
|
import * as i2 from "@angular/common";
|
|
@@ -14,15 +15,18 @@ export class TopOfImageCardComponent {
|
|
|
14
15
|
}
|
|
15
16
|
ngOnInit() {
|
|
16
17
|
}
|
|
18
|
+
getContentAnimation() {
|
|
19
|
+
return { contentAnimation: this.styles?.contentAnimation };
|
|
20
|
+
}
|
|
17
21
|
redirectTo() {
|
|
18
22
|
this._eventService.buttonRedirection.emit({ data: this.data.button });
|
|
19
23
|
}
|
|
20
24
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopOfImageCardComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopOfImageCardComponent, isStandalone: true, selector: "simpo-top-of-image-card", inputs: { data: "data", styles: "styles", content: "content", componentId: "componentId", button: "button", edit: "edit" }, ngImport: i0, template: "<!-- <div style=\"position: relative;\">\n\n <img loading=\"lazy\" [src]=\"data.image.url\" [alt]=\"data.image.altText\" [simpoImageDirective]=\"styles?.image\"\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" class=\"w-100\" *ngIf=\"content.showImage\">\n\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" [simpoTextBackgroundDirective]=\"styles?.textBackground\">\n <div style=\"color: white;\" class=\"heading-medium mb-1\" [innerHtml]=\"data.inputText[0].value\"\n *ngIf=\"content.showHeading\"></div>\n <div style=\"color: white;\" class=\"body-desc\" [innerHtml]=\"data.inputText[01].value\" *ngIf=\"content.showContent\">\n </div>\n <app-button-element [buttonData]=\"data?.button\" [sectionId]=\"componentId\" [buttonStyle]=\"styles?.button\" [color]=\"styles?.background?.accentColor\"></app-button-element>\n </div>\n</div>\n -->\n<div class=\"top-container\" (click)=\"(content?.display?.showLink && content?.display?.linkType === 'List Item' ? redirectTo() : '')\"\n [ngStyle]=\"{'background-image' : content.display.showImage ? 'url('+data.image.url+')' : ''}\"\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\">\n <div [simpoImageDirective]=\"styles?.image\" [id]=\"componentId\" *ngIf=\"content.display.showImage\"></div>\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\"\n [simpoTextBackgroundDirective]=\"content.display.showImage ? styles?.textBackground : ''\">\n <div class=\"heading-medium mb-1 lh-40\" *ngIf=\"content.display.showHeading\">\n <simpo-text-editor [(value)]=\"data.inputText[0].value \" [editable]=\"edit || false\"></simpo-text-editor>\n\n </div>\n <div class=\"body-desc\" *ngIf=\"content.display.showContent\">\n <simpo-text-editor [(value)]=\"data.inputText[1].value \" [editable]=\"edit || false\"></simpo-text-editor>\n </div>\n <div *ngIf=\"content.display.showLink && content.display.linkType === 'Button'\">\n
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TopOfImageCardComponent, isStandalone: true, selector: "simpo-top-of-image-card", inputs: { data: "data", styles: "styles", content: "content", componentId: "componentId", button: "button", edit: "edit" }, ngImport: i0, template: "<!-- <div style=\"position: relative;\">\r\n\r\n <img loading=\"lazy\" [src]=\"data.image.url\" [alt]=\"data.image.altText\" [simpoImageDirective]=\"styles?.image\"\r\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" class=\"w-100\" *ngIf=\"content.showImage\">\r\n\r\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" [simpoTextBackgroundDirective]=\"styles?.textBackground\">\r\n <div style=\"color: white;\" class=\"heading-medium mb-1\" [innerHtml]=\"data.inputText[0].value\"\r\n *ngIf=\"content.showHeading\"></div>\r\n <div style=\"color: white;\" class=\"body-desc\" [innerHtml]=\"data.inputText[01].value\" *ngIf=\"content.showContent\">\r\n </div>\r\n <app-button-element [buttonData]=\"data?.button\" [sectionId]=\"componentId\" [buttonStyle]=\"styles?.button\" [color]=\"styles?.background?.accentColor\"></app-button-element>\r\n </div>\r\n</div>\r\n -->\r\n<div class=\"top-container\" (click)=\"(content?.display?.showLink && content?.display?.linkType === 'List Item' ? redirectTo() : '')\"\r\n [ngStyle]=\"{'background-image' : content.display.showImage ? 'url('+data.image.url+')' : ''}\"\r\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\">\r\n <div class=\"popular-tag\" [simpoCorner]=\"styles?.corners\"\r\n [ngStyle]=\"{'background-color': styles?.background?.accentColor}\"\r\n *ngIf=\"data?.highlight?.highlighted === true\">\r\n <simpo-text-editor [(value)]=\"data.highlight.label\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div [simpoImageDirective]=\"styles?.image\" [id]=\"componentId\" *ngIf=\"content.display.showImage\"></div>\r\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\"\r\n [simpoTextBackgroundDirective]=\"content.display.showImage ? styles?.textBackground : ''\">\r\n <div class=\"heading-medium mb-1 lh-40\" *ngIf=\"content.display.showHeading\">\r\n <simpo-text-editor [(value)]=\"data.inputText[0].value \" [editable]=\"edit || false\"></simpo-text-editor>\r\n\r\n </div>\r\n <div class=\"body-desc\" *ngIf=\"content.display.showContent\">\r\n <simpo-text-editor [(value)]=\"data.inputText[1].value \" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div *ngIf=\"content.display.showLink && content.display.linkType === 'Button'\" [simpoHoverAnimation]=\"getContentAnimation()\" style=\"width: max-content;\">\r\n <app-button-element [buttonContent]=\"data.button\" [buttonStyle]=\"button?.styles\" [sectionId]=\"componentId\"\r\n [buttonId]=\"button ? button.id : ''\" [color]=\"styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\" [edit]=\"edit\"></app-button-element>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".w-100{width:100%}.mb-1{margin-bottom:1rem!important}.content{padding:3rem 1.5rem 1.5rem;min-height:256px;display:flex;flex-direction:column;justify-content:end;bottom:0}.top-container{background-position:center center;background-size:cover;height:100%;position:relative;display:flex;flex-direction:column;justify-content:flex-end}.popular-tag{position:absolute;top:-1px;right:-2px;padding:1px 20px 3px;border-top-left-radius:0!important;border-bottom-right-radius:0!important}.lh-40{line-height:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: TextBackgroundDirectiveDirective, selector: "[simpoTextBackgroundDirective]", inputs: ["simpoTextBackgroundDirective"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label"], outputs: ["valueChange"] }, { kind: "component", type: SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo"] }, { kind: "directive", type: HoverAnimationDirective, selector: "[simpoHoverAnimation]", inputs: ["simpoHoverAnimation"] }] }); }
|
|
22
26
|
}
|
|
23
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopOfImageCardComponent, decorators: [{
|
|
24
28
|
type: Component,
|
|
25
|
-
args: [{ selector: 'simpo-top-of-image-card', standalone: true, imports: [CommonModule, ImageDirectiveDirective, CornerDirective, TextBackgroundDirectiveDirective, TextEditorComponent, SimpoButtonComponent], template: "<!-- <div style=\"position: relative;\">\n\n <img loading=\"lazy\" [src]=\"data.image.url\" [alt]=\"data.image.altText\" [simpoImageDirective]=\"styles?.image\"\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" class=\"w-100\" *ngIf=\"content.showImage\">\n\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" [simpoTextBackgroundDirective]=\"styles?.textBackground\">\n <div style=\"color: white;\" class=\"heading-medium mb-1\" [innerHtml]=\"data.inputText[0].value\"\n *ngIf=\"content.showHeading\"></div>\n <div style=\"color: white;\" class=\"body-desc\" [innerHtml]=\"data.inputText[01].value\" *ngIf=\"content.showContent\">\n </div>\n <app-button-element [buttonData]=\"data?.button\" [sectionId]=\"componentId\" [buttonStyle]=\"styles?.button\" [color]=\"styles?.background?.accentColor\"></app-button-element>\n </div>\n</div>\n -->\n<div class=\"top-container\" (click)=\"(content?.display?.showLink && content?.display?.linkType === 'List Item' ? redirectTo() : '')\"\n [ngStyle]=\"{'background-image' : content.display.showImage ? 'url('+data.image.url+')' : ''}\"\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\">\n <div [simpoImageDirective]=\"styles?.image\" [id]=\"componentId\" *ngIf=\"content.display.showImage\"></div>\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\"\n [simpoTextBackgroundDirective]=\"content.display.showImage ? styles?.textBackground : ''\">\n <div class=\"heading-medium mb-1 lh-40\" *ngIf=\"content.display.showHeading\">\n <simpo-text-editor [(value)]=\"data.inputText[0].value \" [editable]=\"edit || false\"></simpo-text-editor>\n\n </div>\n <div class=\"body-desc\" *ngIf=\"content.display.showContent\">\n <simpo-text-editor [(value)]=\"data.inputText[1].value \" [editable]=\"edit || false\"></simpo-text-editor>\n </div>\n <div *ngIf=\"content.display.showLink && content.display.linkType === 'Button'\">\n
|
|
29
|
+
args: [{ selector: 'simpo-top-of-image-card', standalone: true, imports: [CommonModule, ImageDirectiveDirective, CornerDirective, TextBackgroundDirectiveDirective, TextEditorComponent, SimpoButtonComponent, HoverAnimationDirective], template: "<!-- <div style=\"position: relative;\">\r\n\r\n <img loading=\"lazy\" [src]=\"data.image.url\" [alt]=\"data.image.altText\" [simpoImageDirective]=\"styles?.image\"\r\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" class=\"w-100\" *ngIf=\"content.showImage\">\r\n\r\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\" [simpoTextBackgroundDirective]=\"styles?.textBackground\">\r\n <div style=\"color: white;\" class=\"heading-medium mb-1\" [innerHtml]=\"data.inputText[0].value\"\r\n *ngIf=\"content.showHeading\"></div>\r\n <div style=\"color: white;\" class=\"body-desc\" [innerHtml]=\"data.inputText[01].value\" *ngIf=\"content.showContent\">\r\n </div>\r\n <app-button-element [buttonData]=\"data?.button\" [sectionId]=\"componentId\" [buttonStyle]=\"styles?.button\" [color]=\"styles?.background?.accentColor\"></app-button-element>\r\n </div>\r\n</div>\r\n -->\r\n<div class=\"top-container\" (click)=\"(content?.display?.showLink && content?.display?.linkType === 'List Item' ? redirectTo() : '')\"\r\n [ngStyle]=\"{'background-image' : content.display.showImage ? 'url('+data.image.url+')' : ''}\"\r\n [simpoCorner]=\"styles?.corners\" [id]=\"componentId\">\r\n <div class=\"popular-tag\" [simpoCorner]=\"styles?.corners\"\r\n [ngStyle]=\"{'background-color': styles?.background?.accentColor}\"\r\n *ngIf=\"data?.highlight?.highlighted === true\">\r\n <simpo-text-editor [(value)]=\"data.highlight.label\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div [simpoImageDirective]=\"styles?.image\" [id]=\"componentId\" *ngIf=\"content.display.showImage\"></div>\r\n <div class=\"content\" [simpoCorner]=\"styles?.corners\" [id]=\"componentId\"\r\n [simpoTextBackgroundDirective]=\"content.display.showImage ? styles?.textBackground : ''\">\r\n <div class=\"heading-medium mb-1 lh-40\" *ngIf=\"content.display.showHeading\">\r\n <simpo-text-editor [(value)]=\"data.inputText[0].value \" [editable]=\"edit || false\"></simpo-text-editor>\r\n\r\n </div>\r\n <div class=\"body-desc\" *ngIf=\"content.display.showContent\">\r\n <simpo-text-editor [(value)]=\"data.inputText[1].value \" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <div *ngIf=\"content.display.showLink && content.display.linkType === 'Button'\" [simpoHoverAnimation]=\"getContentAnimation()\" style=\"width: max-content;\">\r\n <app-button-element [buttonContent]=\"data.button\" [buttonStyle]=\"button?.styles\" [sectionId]=\"componentId\"\r\n [buttonId]=\"button ? button.id : ''\" [color]=\"styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\" [edit]=\"edit\"></app-button-element>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".w-100{width:100%}.mb-1{margin-bottom:1rem!important}.content{padding:3rem 1.5rem 1.5rem;min-height:256px;display:flex;flex-direction:column;justify-content:end;bottom:0}.top-container{background-position:center center;background-size:cover;height:100%;position:relative;display:flex;flex-direction:column;justify-content:flex-end}.popular-tag{position:absolute;top:-1px;right:-2px;padding:1px 20px 3px;border-top-left-radius:0!important;border-bottom-right-radius:0!important}.lh-40{line-height:40px}\n"] }]
|
|
26
30
|
}], ctorParameters: () => [{ type: i1.EventsService }], propDecorators: { data: [{
|
|
27
31
|
type: Input
|
|
28
32
|
}], styles: [{
|
|
@@ -36,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
36
40
|
}], edit: [{
|
|
37
41
|
type: Input
|
|
38
42
|
}] } });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLW9mLWltYWdlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy90b3Atb2YtaW1hZ2UtY2FyZC90b3Atb2YtaW1hZ2UtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3RvcC1vZi1pbWFnZS1jYXJkL3RvcC1vZi1pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7QUFTcEYsTUFBTSxPQUFPLHVCQUF1QjtJQVFsQyxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUFFLENBQUM7SUFDbkQsUUFBUTtJQUNSLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxFQUFFLGdCQUFnQixFQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDOytHQWxCVSx1QkFBdUI7bUdBQXZCLHVCQUF1QiwrTUNsQnBDLHN5RkF3Q0EsZ2pCRDFCWSxZQUFZLHdOQUFDLHVCQUF1QixtR0FBQyxlQUFlLG1GQUFDLGdDQUFnQyxxSEFBQyxtQkFBbUIsNklBQUMsb0JBQW9CLHFLQUFDLHVCQUF1Qjs7NEZBSXJKLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFDLHVCQUF1QixFQUFDLGVBQWUsRUFBQyxnQ0FBZ0MsRUFBQyxtQkFBbUIsRUFBQyxvQkFBb0IsRUFBQyx1QkFBdUIsQ0FBQztrRkFLeEosSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZS90ZXh0LWJhY2tncm91bmQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3ZlckFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1hbmltYXRpb24uZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tdG9wLW9mLWltYWdlLWNhcmQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxDb3JuZXJEaXJlY3RpdmUsVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsVGV4dEVkaXRvckNvbXBvbmVudCxTaW1wb0J1dHRvbkNvbXBvbmVudCxIb3ZlckFuaW1hdGlvbkRpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvcC1vZi1pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdG9wLW9mLWltYWdlLWNhcmQuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvcE9mSW1hZ2VDYXJkQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgc3R5bGVzOiBhbnk7XHJcbiAgQElucHV0KCkgY29udGVudDogYW55O1xyXG4gIEBJbnB1dCgpIGNvbXBvbmVudElkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJ1dHRvbj86IEJ1dHRvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGVkaXQ/IDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlKXt9XHJcbiAgbmdPbkluaXQoKXtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRBbmltYXRpb24oKXtcclxuICAgIHJldHVybiB7IGNvbnRlbnRBbmltYXRpb24gOiB0aGlzLnN0eWxlcz8uY29udGVudEFuaW1hdGlvbn1cclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG8oKXtcclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5idXR0b25SZWRpcmVjdGlvbi5lbWl0KHtkYXRhOiB0aGlzLmRhdGEuYnV0dG9ufSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuXHJcbiAgPGltZyBsb2FkaW5nPVwibGF6eVwiICBbc3JjXT1cImRhdGEuaW1hZ2UudXJsXCIgW2FsdF09XCJkYXRhLmltYWdlLmFsdFRleHRcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZXM/LmltYWdlXCJcclxuICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbaWRdPVwiY29tcG9uZW50SWRcIiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJjb250ZW50LnNob3dJbWFnZVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbaWRdPVwiY29tcG9uZW50SWRcIiBbc2ltcG9UZXh0QmFja2dyb3VuZERpcmVjdGl2ZV09XCJzdHlsZXM/LnRleHRCYWNrZ3JvdW5kXCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IHdoaXRlO1wiIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gbWItMVwiIFtpbm5lckh0bWxdPVwiZGF0YS5pbnB1dFRleHRbMF0udmFsdWVcIlxyXG4gICAgICAqbmdJZj1cImNvbnRlbnQuc2hvd0hlYWRpbmdcIj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogd2hpdGU7XCIgY2xhc3M9XCJib2R5LWRlc2NcIiBbaW5uZXJIdG1sXT1cImRhdGEuaW5wdXRUZXh0WzAxXS52YWx1ZVwiICpuZ0lmPVwiY29udGVudC5zaG93Q29udGVudFwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25EYXRhXT1cImRhdGE/LmJ1dHRvblwiIFtzZWN0aW9uSWRdPVwiY29tcG9uZW50SWRcIiBbYnV0dG9uU3R5bGVdPVwic3R5bGVzPy5idXR0b25cIiBbY29sb3JdPVwic3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIC0tPlxyXG48ZGl2IGNsYXNzPVwidG9wLWNvbnRhaW5lclwiICAoY2xpY2spPVwiKGNvbnRlbnQ/LmRpc3BsYXk/LnNob3dMaW5rICYmIGNvbnRlbnQ/LmRpc3BsYXk/LmxpbmtUeXBlID09PSAnTGlzdCBJdGVtJyA/IHJlZGlyZWN0VG8oKSA6ICcnKVwiXHJcbiAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWltYWdlJyA6IGNvbnRlbnQuZGlzcGxheS5zaG93SW1hZ2UgPyAndXJsKCcrZGF0YS5pbWFnZS51cmwrJyknIDogJyd9XCJcclxuICBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCIgW2lkXT1cImNvbXBvbmVudElkXCI+XHJcbiAgPGRpdiBjbGFzcz1cInBvcHVsYXItdGFnXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiXHJcbiAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOiBzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yfVwiXHJcbiAgICAqbmdJZj1cImRhdGE/LmhpZ2hsaWdodD8uaGlnaGxpZ2h0ZWQgPT09IHRydWVcIj5cclxuICAgIDxzaW1wby10ZXh0LWVkaXRvciBbKHZhbHVlKV09XCJkYXRhLmhpZ2hsaWdodC5sYWJlbFwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbaWRdPVwiY29tcG9uZW50SWRcIiAqbmdJZj1cImNvbnRlbnQuZGlzcGxheS5zaG93SW1hZ2VcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIiBbaWRdPVwiY29tcG9uZW50SWRcIlxyXG4gICAgW3NpbXBvVGV4dEJhY2tncm91bmREaXJlY3RpdmVdPVwiY29udGVudC5kaXNwbGF5LnNob3dJbWFnZSA/IHN0eWxlcz8udGV4dEJhY2tncm91bmQgOiAnJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIG1iLTEgbGgtNDBcIiAgKm5nSWY9XCJjb250ZW50LmRpc3BsYXkuc2hvd0hlYWRpbmdcIj5cclxuICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFsodmFsdWUpXT1cImRhdGEuaW5wdXRUZXh0WzBdLnZhbHVlIFwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJib2R5LWRlc2NcIiAqbmdJZj1cImNvbnRlbnQuZGlzcGxheS5zaG93Q29udGVudFwiPlxyXG4gICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwiZGF0YS5pbnB1dFRleHRbMV0udmFsdWUgXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj48L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnQuZGlzcGxheS5zaG93TGluayAmJiBjb250ZW50LmRpc3BsYXkubGlua1R5cGUgPT09ICdCdXR0b24nXCIgW3NpbXBvSG92ZXJBbmltYXRpb25dPVwiZ2V0Q29udGVudEFuaW1hdGlvbigpXCIgc3R5bGU9XCJ3aWR0aDogbWF4LWNvbnRlbnQ7XCI+XHJcbiAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJkYXRhLmJ1dHRvblwiIFtidXR0b25TdHlsZV09XCJidXR0b24/LnN0eWxlc1wiIFtzZWN0aW9uSWRdPVwiY29tcG9uZW50SWRcIlxyXG4gICAgICAgICAgW2J1dHRvbklkXT1cImJ1dHRvbiA/IGJ1dHRvbi5pZCA6ICcnXCIgW2NvbG9yXT1cInN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW2VkaXRdPVwiZWRpdFwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
32
32
|
name: 'formateAmount',
|
|
33
33
|
}]
|
|
34
34
|
}] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1vdW50LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3BpcGVzL2Ftb3VudC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQWFsRCxNQUFNLE9BQU8sYUFBYTtJQUV0QixTQUFTLENBQUMsS0FBc0IsRUFBRSxTQUF3QixLQUFLO1FBRTNELElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2xCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBZ0IsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pELENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLDZCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUFlLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBa0IsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDOytHQW5CUSxhQUFhOzZHQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRSxlQUFlO2lCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuY29uc3QgZW51bSBBTU9VTlQge1xyXG4gICAgTEFLSFMgPSAxMDAwMDAsXHJcbiAgICBDUk9SRSA9IDEwMDAwMDAwLFxyXG4gICAgTUlMTElPTiA9IDEwMDAwMDBcclxufVxyXG5cclxuQFBpcGUoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgbmFtZTogJ2Zvcm1hdGVBbW91bnQnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybWF0ZUFtb3VudCBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCBzeXN0ZW06IFwiSU5EXCIgfCBcIklOVFwiID0gXCJJTkRcIik6IHN0cmluZyB7XHJcblxyXG4gICAgICAgIGlmIChzeXN0ZW0gPT0gXCJJTkRcIikge1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyKHZhbHVlKSA+PSBBTU9VTlQuQ1JPUkUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoTnVtYmVyKHZhbHVlKSAvIEFNT1VOVC5DUk9SRSkgKyAnY3InO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKE51bWJlcih2YWx1ZSkgPj0gQU1PVU5ULkxBS0hTKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKE51bWJlcih2YWx1ZSkgLyBBTU9VTlQuTEFLSFMpICsgJ2xrJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKE51bWJlcih2YWx1ZSkgPj0gQU1PVU5ULk1JTExJT04pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoTnVtYmVyKHZhbHVlKSAvIEFNT1VOVC5NSUxMSU9OKSArICdtbic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|