@perevorot/shop 2.0.104 → 2.0.106

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Checkout.js","sources":["../../../../src/components/shop/order/CheckoutItem.vue","../../../../src/components/shop/order/CheckoutItem.vue?vue&type=template&id=4d5a1fac&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=6b29a630&lang.js"],"sourcesContent":["<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>&nbsp;<span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :preventModelCleanupOnSchemaChange=\"true\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"divider is-hidden\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row discount\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row fee\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row shipping\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a>, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n provide('field', field);\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone'),\n registration_number: field('registration_number'),\n user_type: field('user_type', 'individual'),\n });\n\n provide('user', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\n };\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchemaFields = {\n user_type: {\n component: FormRadio,\n model: 'user_type',\n label: '',\n list: [\n { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n ],\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n registration_number: {\n component: FormText,\n label: __('auth.registration.form.registration_number'),\n model: 'registration_number',\n condition: (model) => model.user_type === 'legal'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n },\n };\n\n const userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userSchemaFields[key];\n }\n\n return obj;\n }, {});\n\n const userSchema = ref(userSchemaFieldsFiltered);\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n const userValidationFields = {\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n registration_number: yup.string().when('user_type', (user_type) => {\n if (user_type == 'legal') {\n return yup.string().numberFilled();\n }\n })\n };\n\n const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userValidationFields[key];\n }\n\n return obj;\n }, {});\n\n const userValidation = yup.object().shape(userValidationFieldsFiltered);\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userSubmitButton.value.click();\n\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const checkout = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (shippingSelected.value.component && (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid)) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!isShippingComponentFormsValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email,\n user_type: user.value.user_type,\n registration_number: user.value.registration_number,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n item_category: item.attributes.category ? item.attributes.category : '',\n item_brand: item.attributes.brand ? item.attributes.brand : '',\n quantity: item.quantity\n });\n });\n\n let object = {\n ecommerce: {\n transaction_id: response.data.order.id,\n value: parseFloat(total.value),\n tax: '0',\n shipping: '0',\n items: products\n },\n event: 'purchase',\n };\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (window.dataLayer) {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n item_brand: item.attributes.brand,\n item_category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n items: products\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home,\n isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>&nbsp;<span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :preventModelCleanupOnSchemaChange=\"true\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-show=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"divider is-hidden\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row discount\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row fee\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row shipping\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a>, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n provide('field', field);\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone'),\n registration_number: field('registration_number'),\n user_type: field('user_type', 'individual'),\n });\n\n provide('user', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\n };\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchemaFields = {\n user_type: {\n component: FormRadio,\n model: 'user_type',\n label: '',\n list: [\n { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n ],\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n registration_number: {\n component: FormText,\n label: __('auth.registration.form.registration_number'),\n model: 'registration_number',\n condition: (model) => model.user_type === 'legal'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n },\n };\n\n const userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userSchemaFields[key];\n }\n\n return obj;\n }, {});\n\n const userSchema = ref(userSchemaFieldsFiltered);\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n const userValidationFields = {\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n registration_number: yup.string().when('user_type', (user_type) => {\n if (user_type == 'legal') {\n return yup.string().numberFilled();\n }\n })\n };\n\n const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userValidationFields[key];\n }\n\n return obj;\n }, {});\n\n const userValidation = yup.object().shape(userValidationFieldsFiltered);\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userSubmitButton.value.click();\n\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const checkout = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (shippingSelected.value.component && (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid)) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!isShippingComponentFormsValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email,\n user_type: user.value.user_type,\n registration_number: user.value.registration_number,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n item_category: item.attributes.category ? item.attributes.category : '',\n item_brand: item.attributes.brand ? item.attributes.brand : '',\n quantity: item.quantity\n });\n });\n\n let object = {\n ecommerce: {\n transaction_id: response.data.order.id,\n value: parseFloat(total.value),\n tax: '0',\n shipping: '0',\n items: products\n },\n event: 'purchase',\n };\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (window.dataLayer) {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n item_brand: item.attributes.brand,\n item_category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n items: products\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home,\n isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","then","Promise","resolve","f","i","arguments","e","reject","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","href","image","src","_hoisted_10","_hoisted_11","_hoisted_12","code","_hoisted_13","_hoisted_14","_hoisted_16","_hoisted_17","quantity","parseInt","_hoisted_18","innerHTML","price","_hoisted_20","priceOld","amount","percent","sum","_hoisted_24","_hoisted_25","_hoisted_26","index","key","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_32","_hoisted_33","_hoisted_34","second","_hoisted_40","_hoisted_41","_hoisted_42","third","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_52","_hoisted_53","_hoisted_54","yup","addMethod","string","min","msg","this","test","exclusive","message","__","params","isNaN","markRaw","FormText","FormRadio","SchemaForm","SchemaFormFactory","VeeValidatePlugin","HtmlMessage","template","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","isLogin","type","Boolean","isPromoCode","isConsent","isPaymentMethodOverSummary","userFields","Array","redirectOnEmpty","String","slots","useSlots","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","consent","shippingComponent","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","isPromoCodeToggled","promoCode","promoCodeApplied","isPromoLoading","app","getCurrentInstance","isUserConsent","dontcall","get","set","commit","comment","watch","substring","field","defaultValue","data","JSON","parse","stringify","provide","user","last_name","email","phone","registration_number","user_type","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","response","userSchemaFields","component","model","label","list","mask","condition","userSchemaFieldsFiltered","reduce","obj","userSchema","useSchemaForm","userValidationFields","trim","required","matches","when","numberFilled","userValidationFieldsFiltered","userValidation","object","shape","addEventListener","validate","shippingComponentValid","isShippingComponentFormsValid","click","isValid","isUserValid","shippingComponentUserData","checkout","valid","clientId","shippingUserData","document","cookie","split","parts","products","item_name","item_id","item_category","category","item_brand","brand","ecommerce","transaction_id","parseFloat","tax","event","coupon","dataLayer","$env","debug","console","log","url","nextTick","setTimeout","submit","querySelector","classList","add","resertStore","error","onMounted","currencyCode","facebook","$ziggy","provider","google","loginCallback","pluralize","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","locale","applyPromoCode","promoCodeApply","number","appContext","config","globalProperties","$filters","resetPromoCode","calculateWithPromoCodeDiscount","max","action","method","_hoisted_5","_hoisted_6","_hoisted_7","_renderSlot","_hoisted_8","_createCommentVNode","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_hoisted_19","_hoisted_21","_hoisted_22","schemaRowClasses","schema","preventModelCleanupOnSchemaChange","afterForm","_hoisted_23","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","nextDates","_hoisted_43","_hoisted_47","icon","_hoisted_50","description","price_label","_hoisted_55","shippingFooter","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_66","_hoisted_68","_hoisted_69","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_92","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_98","_hoisted_99","_hoisted_100","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_113","_hoisted_114","_hoisted_115","_hoisted_117","onMouseenter","_hoisted_118","_hoisted_119","_hoisted_121","_hoisted_122","_hoisted_123","placeholder","disabled","_hoisted_125","_hoisted_127","_hoisted_128","_hoisted_129","_hoisted_130","filters","_hoisted_131","_hoisted_132","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_150","_hoisted_152","_hoisted_153","_hoisted_154","_hoisted_157"],"mappings":"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"}
1
+ {"version":3,"file":"Checkout.js","sources":["../../../../src/components/shop/order/CheckoutItem.vue","../../../../src/components/shop/order/CheckoutItem.vue?vue&type=template&id=4d5a1fac&lang.js","../../../../src/components/shop/order/Checkout.vue","../../../../src/components/shop/order/Checkout.vue?vue&type=template&id=1d0c31dc&lang.js"],"sourcesContent":["<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"columns is-multiline shop-cart-item\" v-bind:class=\"{ 'is-bundle': item.attributes.bundle }\">\n <div class=\"column is-12\" v-if=\"item.attributes.bundle\">\n <div class=\"bundle-title\">{{ __('shop.cart.bundle') }}</div>\n </div>\n <div class=\"column name\">\n <div class=\"columns\" v-bind:class=\"{ 'mb-0': item.attributes.bundle }\">\n <div class=\"column is-narrow\">\n <a :href=\"item.attributes.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.image }\">\n <img :src=\"item.attributes.image\" v-if=\"item.attributes.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"columns is-gapless mb-0\">\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.code\">{{ __('shop.cart.code') }} {{ item.attributes.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.href\">{{ item.name }}</a>\n </div>\n </div>\n <div class=\"column is-2 has-text-centered is-relative\">\n <div class=\"quantity\">⨉ {{ item.quantity }}</div>\n <div class=\"quantity-price\" v-if=\"parseInt(item.quantity) > 1\"><span v-html=\"$filters.price(item.attributes.price)\"></span> / {{ __('shop.cart.q') }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">\n <div class=\"price\" v-bind:class=\"{ 'bundle-price': item.attributes.bundle }\">\n <div v-if=\"item.attributes.priceOld\" class=\"price-old\" v-html=\"$filters.price(item.attributes.priceOld * item.quantity)\"></div>\n <div class=\"bundle-amount\" v-if=\"item.attributes.bundle && item.attributes.amount\" v-html=\"__('shop.cart.bundle_amount') + (item.attributes.amount.percent ? item.attributes.amount.percent + '%' : $filters.price(item.attributes.amount.sum * item.quantity))\"></div>\n <div v-html=\"$filters.price(item.attributes.price * item.quantity)\"></div>\n </div>\n </div>\n </div>\n <div class=\"options is-toggled\" v-if=\"itemOptions && itemOptions.length\">\n <div class=\"toggler\">\n <span>{{ __('shop.cart.additional') }} {{ itemOptions.length }}</span>\n </div>\n <div class=\"wrapper\">\n <div v-for=\"(option, index) in itemOptions\" v-bind:key=\"index\" class=\"columns is-checked\">\n <div class=\"column\">\n <div class=\"option-title\">{{ option.name }}</div>\n </div>\n <div class=\"column is-2 has-text-right\">+<span v-html=\"$filters.price(option.price)\"></span></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.second.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.second.image }\">\n <img :src=\"item.attributes.second.image\" v-if=\"item.attributes.second.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.second.code\">{{ __('shop.cart.code') }} {{ item.attributes.second.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.second.href\">{{ item.attributes.second.name }}</a>\n </div>\n </div>\n </div>\n <div class=\"bundle columns\" v-if=\"item.attributes.bundle && item.attributes.third\">\n <div class=\"column is-narrow\">\n <svg class=\"bundle-icon\"><use xlink:href=\"#bundle-plus\" /></svg>\n <a :href=\"item.attributes.third.href\">\n <figure class=\"image is-square\" v-bind:class=\"{ 'no-thumb': !item.attributes.third.image }\">\n <img :src=\"item.attributes.third.image\" v-if=\"item.attributes.third.image\" />\n <svg v-else><use xlink:href=\"#logo\" /></svg>\n </figure>\n </a>\n </div>\n <div class=\"column\">\n <div class=\"code\" v-if=\"item.attributes.third.code\">{{ __('shop.cart.code') }} {{ item.attributes.third.code }}</div>\n <div class=\"title\">\n <a :href=\"item.attributes.third.href\">{{ item.attributes.third.name }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { defineComponent, computed } from 'vue';\n\nexport default /*#__PURE__*/ defineComponent({\n name: 'CheckoutItem',\n props: {\n item: Object\n },\n setup(props) {\n const options = computed(() => (props.item.attributes.options && props.item.attributes.options.length ? props.item.attributes.options : []));\n const itemOptions = computed(() => (props.item.options && props.item.options.length ? props.item.options.filter((option) => options.value.indexOf(option.id) !== -1) : []));\n\n return {\n itemOptions\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>&nbsp;<span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :preventModelCleanupOnSchemaChange=\"true\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"divider is-hidden\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row discount\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row fee\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row shipping\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a>, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n provide('field', field);\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone'),\n registration_number: field('registration_number'),\n user_type: field('user_type', 'individual'),\n });\n\n provide('user', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\n };\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchemaFields = {\n user_type: {\n component: FormRadio,\n model: 'user_type',\n label: '',\n list: [\n { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n ],\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n registration_number: {\n component: FormText,\n label: __('auth.registration.form.registration_number'),\n model: 'registration_number',\n condition: (model) => model.user_type === 'legal'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n },\n };\n\n const userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userSchemaFields[key];\n }\n\n return obj;\n }, {});\n\n const userSchema = ref(userSchemaFieldsFiltered);\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n const userValidationFields = {\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n registration_number: yup.string().when('user_type', (user_type) => {\n if (user_type == 'legal') {\n return yup.string().numberFilled();\n }\n })\n };\n\n const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userValidationFields[key];\n }\n\n return obj;\n }, {});\n\n const userValidation = yup.object().shape(userValidationFieldsFiltered);\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userSubmitButton.value.click();\n\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const checkout = async () => {\n const isShippingComponentFormsValid = shippingComponentValid.value();\n\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (shippingSelected.value.component && (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid)) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!isShippingComponentFormsValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email,\n user_type: user.value.user_type,\n registration_number: user.value.registration_number,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n item_category: item.attributes.category ? item.attributes.category : '',\n item_brand: item.attributes.brand ? item.attributes.brand : '',\n quantity: item.quantity\n });\n });\n\n let object = {\n ecommerce: {\n transaction_id: response.data.order.id,\n value: parseFloat(total.value),\n tax: '0',\n shipping: '0',\n items: products\n },\n event: 'purchase',\n };\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (window.dataLayer) {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n item_brand: item.attributes.brand,\n item_category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n items: products\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home,\n isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n };\n }\n});\n</script>","<template>\n <div class=\"cart checkout\">\n <form ref=\"redirectForm\" v-if=\"redirect.url\" :action=\"redirect.url\" class=\"is-hidden\" method=\"post\">\n <input type=\"hidden\" :name=\"name\" :value=\"value\" v-for=\"(value, name, index) in redirect.data\" v-bind:key=\"index\" />\n </form>\n\n <div class=\"items-wrapper\" v-if=\"items.length && !thanks\">\n <div class=\"checkout-title\">{{ __('shop.order.checkout_title') }}</div>\n <div class=\"columns\">\n <div class=\"column checkout-blocks-wrapper\">\n <slot name=\"header\"></slot>\n <div class=\"checkout-block is-cart\"><!--items-->\n <div class=\"wrapper\">\n <div class=\"title-row\">\n <div class=\"items-title\">\n {{ __('shop.order.your_order') }}\n <span class=\"ml-3\" v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span>&nbsp;<span v-html=\"__('shop.cart.bysum') + ' ' + $filters.price(total)\"></span>\n </div>\n </div>\n <slot name=\"cart\" :items=\"items\">\n <checkout-item v-for=\"item in items\" v-bind:key=\"item.id\" :item=\"item\"></checkout-item>\n <cart-trigger class=\"trigger\">\n <template #default=\"props\">\n <button class=\"button\" @click=\"props.open\">\n <svg>\n <use xlink:href=\"#cart-edit\" />\n </svg>\n <span>{{ __('shop.order.edit') }}</span>\n </button>\n </template>\n </cart-trigger>\n </slot>\n <slot name=\"cart-footer\" :total=\"total\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-user auth-user\">\n <div class=\"wrapper\">\n <div class=\"items-title\">{{ __('shop.order.contact_title') }}</div>\n <div class=\"user-tabs\" v-if=\"!auth && isLogin\">\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"new\" />{{ __('shop.order.auth_new') }}</label>\n <label> <input type=\"radio\" class=\"radio\" v-model=\"userType\" value=\"login\" />{{ __('shop.order.auth_old') }}</label>\n </div>\n <div class=\"columns\">\n <div class=\"column user-form\" v-show=\"userType == 'new'\">\n <SchemaForm schemaRowClasses=\"field\" :schema=\"userSchema\" :validation-schema=\"userValidation\" :preventModelCleanupOnSchemaChange=\"true\">\n <template #afterForm>\n <button type=\"submit\" ref=\"userSubmitButton\" class=\"is-hidden\"></button>\n </template>\n </SchemaForm>\n </div>\n <div class=\"column user-login user-form\" v-show=\"userType == 'login'\" v-if=\"isLogin\">\n <login :login-callback=\"loginCallback\"></login>\n </div>\n <div class=\"column\" v-if=\"isLogin\">\n <div class=\"social-auth\" v-if=\"!auth\">\n <div class=\"socials\">\n <div class=\"description\">{{ __('shop.order.auth_social') }}</div>\n <div class=\"buttons\">\n <a class=\"button\" @click=\"facebook\">\n <svg class=\"icon fb-btn\">\n <use xlink:href=\"#logo-facebook-icon\" />\n </svg>\n <span>Facebook</span>\n </a>\n <a class=\"button\" @click=\"google\">\n <svg class=\"icon google-btn\">\n <use xlink:href=\"#logo-google-icon\" />\n </svg>\n <span>Google</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block is-shipping\">\n <div class=\"wrapper shipping-type-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.shipping') }}</div>\n </div>\n <div class=\"value\" v-if=\"shippingSelected && shippingSelected.nextDates\">\n <div class=\"next-dates\">на {{ shippingSelected.nextDates }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"shipping = null\" class=\"reset\" v-bind:class=\"{ 'is-active': shipping }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in shippingTypesRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"shipping\" :value=\"item.id\" @click=\"toggleShippingRadio(item.id)\" />\n <img class=\"icon\" :src=\"item.icon\" v-if=\"item.icon\" />\n <svg v-else class=\"icon\">\n <use xlink:href=\"#shipping\" />\n </svg>\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\">\n <span class=\"green\" v-if=\"!item.amount && item.price_label\">{{ item.price_label }}</span>\n <span v-else v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n <div v-if=\"!slots.shippingFooter\">\n <component :is=\"item.component\" v-if=\"item.component && item.id == shipping\" :commit=\"shippingStoreData\" :data=\"shippingComponentData\" :item=\"item\"></component>\n </div>\n </div>\n </div>\n <slot name=\"shipping-footer\" :shippingTypesRestricted=\"shippingTypesRestricted\" :shipping=\"shipping\" :shippingStoreData=\"shippingStoreData\" :shippingComponentData=\"shippingComponentData\"></slot>\n </div>\n </div>\n <div class=\"checkout-block is-payment\" v-if=\"!isPaymentMethodOverSummary\">\n <div class=\"wrapper payment-method-block\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"column is-4\">\n <div class=\"checkout-block summary\">\n <div class=\"inner payment-method-block\" v-if=\"isPaymentMethodOverSummary\">\n <div class=\"rows\">\n <div class=\"item\">\n <div class=\"row\">\n <div class=\"info\">\n <div class=\"items-title mb-1\">{{ __('shop.order.payment') }}</div>\n </div>\n <div class=\"value\" v-if=\"1 != 1\">\n <a @click=\"payment = null\" class=\"reset\" v-bind:class=\"{ 'is-active': payment }\">{{ __('shop.order.reset') }}</a>\n </div>\n </div>\n </div>\n <div class=\"item\" v-for=\"item in paymentMethodsRestricted\" v-bind:key=\"item.id\" v-bind:class=\"{ 'is-disabled': item.restricted }\">\n <div class=\"row no-icon\" v-bind:class=\"'is-' + item.code\">\n <div class=\"info\">\n <label>\n <input type=\"radio\" class=\"radio\" v-model=\"payment\" :value=\"item.id\" @click=\"togglePaymentRadio(item.id)\" />\n <span>{{ item.name }}</span>\n </label>\n <div class=\"description\" v-if=\"item.description\">{{ item.description }}</div>\n </div>\n <div class=\"value\" v-if=\"item.amount\">\n <span v-html=\"item.type == 'percent' ? item.amount + '%' : $filters.price(item.amount)\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"divider is-hidden\"></div>\n <div class=\"inner\">\n <div class=\"items-title\">{{ __('shop.order.total') }}</div>\n <div class=\"rows\">\n <div class=\"row products\">\n <div class=\"info\"><span v-text=\"pluralize(quantity, __('shop.pluralize.products'))\"></span> {{ __('shop.cart.bysum') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(total)\"></span>\n </div>\n </div>\n <div class=\"row discount\" v-if=\"discount\">\n <div class=\"info\">{{ __('shop.order.discount') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(discount)\"></span>\n </div>\n </div>\n <div class=\"row fee\" v-if=\"fee > 0\">\n <div class=\"info\">{{ __('shop.order.fee') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(fee)\"></span>\n </div>\n </div>\n <div class=\"row shipping\" v-if=\"shipping\">\n <div class=\"info\">{{ __('shop.order.shipping_price') }}</div>\n <div class=\"value\">\n <span v-html=\"$filters.price(shippingPrice)\" v-if=\"shippingPrice > 0\"></span>\n <span class=\"green\" v-else-if=\"shippingSelected && shippingSelected.price_label\">{{ shippingSelected.price_label }}</span>\n </div>\n </div>\n <div class=\"row promo\" v-if=\"promoCodeApplied\">\n <div class=\"info\">{{ __('shop.order.promo_code') }}<br><span class=\"green\">{{ promoCode }}</span></div>\n <div class=\"value\">\n <span v-html=\"(promoCodeApplied.type == 'percent' ? promoCodeApplied.amount + '%' : $filters.price(promoCodeApplied.amount))\"></span>\n </div>\n </div>\n <div class=\"row price\">\n <div class=\"info\">{{ __('shop.order.price') }}</div>\n <div class=\"value orange\">\n <span v-html=\"$filters.price(calculateWithPromoCodeDiscount())\"></span>\n </div>\n </div>\n </div>\n <div class=\"checkbox-wrapper nocall\">\n <label> <input type=\"checkbox\" class=\"checkbox\" v-model=\"dontcall\" />{{ __('shop.order.nocall') }}</label>\n </div>\n <button class=\"button submit\" @click=\"checkout\" @mouseenter=\"validate\" v-bind:class=\"{ red: !ifCheckoutReady, 'is-loading': loading }\">{{ __('shop.order.action') }}</button>\n <slot name=\"submit\"></slot>\n <div class=\"consent\" v-if=\"isConsent\">\n <div class=\"checkbox-wrapper\">\n <label>\n <input type=\"checkbox\" class=\"checkbox\" v-model=\"consent\" />\n <div class=\"label\" v-html=\"__('shop.order.consent')\"></div>\n </label>\n </div>\n </div>\n <div class=\"comment-wrapper is-promo-code\" v-bind:class=\"{ 'is-open': isPromoCodeToggled }\" v-if=\"isPromoCode\">\n <div class=\"toggler\" @click=\"isPromoCodeToggled = !isPromoCodeToggled\">\n <span>{{ __('shop.order.promo_code') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form is-promo-code\">\n <div class=\"control\">\n <input type=\"text\" class=\"input\" placeholder=\" \" v-model=\"promoCode\" :disabled=\"promoCodeApplied\" id=\"promo-code-applied\">\n <label class=\"label\" for=\"promo-code-applied\">{{ __('shop.order.promo.placeholder') }}</label>\n </div>\n <button v-if=\"!promoCodeApplied\" class=\"button\" @click=\"applyPromoCode\" :disabled=\"!promoCode\" v-bind:class=\"{ 'is-loading': isPromoLoading }\">{{ __('shop.order.promo.apply') }}</button>\n <button v-else class=\"button\" @click=\"resetPromoCode\">{{ __('shop.order.promo.reset') }}</button>\n </div>\n </div>\n <div class=\"comment-wrapper\" v-bind:class=\"{ 'is-open': isCommentToggled }\">\n <div class=\"toggler\" @click=\"isCommentToggled = !isCommentToggled\">\n <span>{{ __('shop.order.comment') }}</span>\n <svg>\n <use xlink:href=\"#arrow-down\" />\n </svg>\n </div>\n <div class=\"user-form\">\n <textarea class=\"textarea\" v-model=\"comment\"></textarea>\n <div class=\"chars-count\" v-if=\"comment.length\">{{ commentMaxLength - comment.length }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"checkout-block thanks\" v-else-if=\"thanks && order\">\n <slot name=\"thanks\" :order=\"order\" :redirect=\"redirect\" :redirectForm=\"redirectForm\" :home=\"home\" :auth=\"auth\" :filters=\"$filters\">\n <div class=\"title\">\n {{ __('shop.order.order') }}\n <span>№{{ order.id }}</span> {{ __('shop.order.success') }}\n </div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"redirect.url\">\n <div class=\"subtitle\">{{ __('shop.order.pay_online') }}</div>\n <button class=\"button is-payment\" @click=\"redirectForm.submit()\">{{ __('shop.order.pay_online_go') }}</button>\n </div>\n <div class=\"column is-6\" v-else>\n <button class=\"button is-orange\" @click=\"home\">{{ __('shop.cart.continue') }}</button>\n </div>\n <div class=\"column is-6\">\n <div class=\"info-wrapper\" v-if=\"order.shipping[0]\">\n <div class=\"title\">{{ __('shop.order.shipping') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.shipping[0]\" v-html=\"order.shipping[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.shipping[1]\" v-html=\"order.shipping[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.payment[0]\">\n <div class=\"title\">{{ __('shop.order.payment') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\" v-if=\"order.payment[0]\" v-html=\"order.payment[0]\"></div>\n <div class=\"column is-6\" v-if=\"order.payment[1]\" v-html=\"order.payment[1]\"></div>\n </div>\n </div>\n <div class=\"info-wrapper\" v-if=\"order.promoCode\">\n <div class=\"title\">{{ __('shop.order.promo_code') }}</div>\n <div class=\"columns\">\n <div class=\"column is-6\">\n <span v-html=\"order.promoCode\" class=\"green\"></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </slot>\n </div>\n <div v-else-if=\"!redirectOnEmpty\" class=\"checkout-block empty\">\n <div class=\"title\">{{ __('shop.cart.no_no') }}</div>\n <div class=\"message\">\n {{ __('shop.cart.no_prop') }}\n <a :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.no_home') }}</a>, <br />{{ __('shop.cart.no_search') }}\n </div>\n <a class=\"button continue\" :href=\"$env.locale.url ? $env.locale.url : '/'\">{{ __('shop.cart.continue') }}</a>\n </div>\n </div>\n</template>\n\n<script>\nimport { ref, computed, markRaw, defineComponent, watch, getCurrentInstance, nextTick, provide, useSlots, onMounted } from 'vue';\nimport CheckoutItem from './CheckoutItem.vue';\nimport { pluralize } from '@perevorot/shop/dist/helpers';\nimport { useStore } from 'vuex';\nimport { SchemaFormFactory, useSchemaForm } from 'formvuelate';\nimport VeeValidatePlugin from '@formvuelate/plugin-vee-validate';\nimport FormText from '@perevorot/shop/dist/forms/FormText';\nimport FormRadio from '@perevorot/shop/dist/forms/FormRadio';\nimport * as yup from 'yup';\nimport { useToast } from 'vue-toastification';\n\nyup.addMethod(yup.string, 'numberFilled', function (min, msg) {\n return this.test({\n name: 'numberFilled',\n exclusive: true,\n message: __('auth.validation.number'),\n params: {\n min: min,\n },\n test: (value) => !(value == '' || isNaN(value)),\n });\n});\n\nmarkRaw(FormText);\nmarkRaw(FormRadio);\n\nconst SchemaForm = SchemaFormFactory([VeeValidatePlugin({})]);\n\nconst HtmlMessage = {\n props: {\n message: '',\n },\n template: '<div v-html=\"message\"></div>',\n};\n\nwindow.viewedSwiperOptions = {\n slidesPerView: 'auto',\n freeMode: true,\n slideClass: 'product',\n mousewheel: {\n forceToAxis: true\n },\n navigation: {\n nextEl: '.next',\n prevEl: '.prev'\n },\n observer: true,\n observeParents: true\n};\n\nexport default /*#__PURE__*/ defineComponent({\n components: {\n CheckoutItem,\n SchemaForm\n },\n props: {\n isLogin: {\n type: Boolean,\n default: true\n },\n isPromoCode: {\n type: Boolean,\n default: true\n },\n isConsent: {\n type: Boolean,\n default: false\n },\n isPaymentMethodOverSummary: {\n type: Boolean,\n default: false\n },\n userFields: {\n type: Array,\n default: ['last_name', 'name', 'email', 'phone'],\n },\n redirectOnEmpty: {\n type: String,\n default: false\n }\n },\n name: 'order-checkout',\n setup(props) {\n const slots = useSlots();\n const toast = useToast();\n const store = useStore();\n const loading = ref(false);\n const quantity = computed(() => store.getters['cart/quantity']);\n const items = computed(() => store.getters['cart/items']);\n const total = computed(() => store.getters['cart/total']);\n const auth = computed(() => store.getters['auth/is']);\n const userCheckout = computed(() => store.getters['checkout/user']);\n const ifCheckoutReady = ref(true);\n const redirectForm = ref(null);\n const thanks = ref(false);\n const order = ref(null);\n const consent = ref(false);\n const shippingComponent = ref(null);\n\n const redirect = ref({});\n\n const shippingTypes = ref([]);\n const paymentMethods = ref([]);\n\n const userType = ref('new');\n const userSubmitButton = ref(null);\n\n const shippingComponentData = computed(() => store.getters['checkout/shippingData']);\n const isCommentToggled = ref(false);\n const commentMaxLength = 1000;\n\n const isPromoCodeToggled = ref(false);\n const promoCode = ref('');\n const promoCodeApplied = ref(null);\n const isPromoLoading = ref(false);\n const app = getCurrentInstance();\n\n const resetPromoCode = () => {\n promoCode.value = '';\n promoCodeApplied.value = null;\n };\n\n const isUserConsent = computed(() => {\n return (props.isConsent && consent.value) || !props.isConsent;\n });\n\n const applyPromoCode = () => {\n if (promoCode.value) {\n isPromoLoading.value = true;\n\n $http\n .post(window.location.href, {\n promoCodeApply: promoCode.value,\n email: user.value.email,\n total: total.value\n })\n .then(response => {\n promoCodeApplied.value = response.data;\n }).catch(error => {\n if (error.response && error.response.data.length) {\n error.response.data.forEach(error => {\n const component = {\n component: HtmlMessage,\n props: {\n message: __('shop.order.promo.error_' + error.error, { number: app.appContext.config.globalProperties.$filters.price(error.number) }),\n },\n };\n\n toast(component, {\n type: 'error'\n });\n\n if (error.error == 'not_found') {\n promoCode.value = '';\n }\n });\n\n promoCodeApplied.value = null;\n }\n }).finally(() => {\n isPromoLoading.value = false;\n });\n }\n };\n\n const dontcall = computed({\n get() {\n return store.getters['checkout/dontcall'];\n },\n set(value) {\n store.commit('checkout/dontcall', value);\n }\n });\n\n const comment = computed({\n get() {\n const comment = store.getters['checkout/comment'];\n\n if (!!comment) {\n isCommentToggled.value = true;\n }\n\n return comment;\n },\n set(value) {\n store.commit('checkout/comment', value);\n }\n });\n\n watch(comment, (value) => {\n if (value.length > commentMaxLength) {\n comment.value = comment.value.substring(0, commentMaxLength);\n }\n });\n\n const field = (name, defaultValue) => {\n return computed({\n get() {\n return userCheckout.value[name] ? userCheckout.value[name] : defaultValue;\n },\n set(value) {\n let data = JSON.parse(JSON.stringify(userCheckout.value));\n data[name] = value;\n\n store.commit('checkout/user', data);\n }\n });\n };\n\n provide('field', field);\n\n const user = ref({\n last_name: field('last_name'),\n name: field('name'),\n email: field('email'),\n phone: field('phone'),\n registration_number: field('registration_number'),\n user_type: field('user_type', 'individual'),\n });\n\n provide('user', user);\n\n store.dispatch('auth/me', {\n finally: () => { }\n });\n\n const calculateWithPromoCodeDiscount = () => {\n const sum = total.value + fee.value + shippingPrice.value;\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'percent') {\n return Math.round(sum - sum * promoCodeApplied.value.amount / 100);\n }\n\n if (promoCodeApplied.value && promoCodeApplied.value.type == 'discount') {\n return Math.max(0, sum - promoCodeApplied.value.amount);\n }\n\n return sum;\n };\n\n const shipping = computed({\n get() {\n return store.getters['checkout/shipping'];\n },\n set(id) {\n store.commit('checkout/shipping', id);\n }\n });\n\n const payment = computed({\n get() {\n return store.getters['checkout/payment'];\n },\n set(id) {\n store.commit('checkout/payment', id);\n }\n });\n\n const shippingSelected = computed(() => {\n return shipping.value ? shippingTypes.value.find((item) => item.id == shipping.value) : {};\n });\n\n const paymentSelected = computed(() => {\n return payment.value ? paymentMethods.value.find((item) => item.id == payment.value) : {};\n });\n\n const shippingPrice = computed(() => {\n return calculatePrice(shippingTypes.value, shipping.value);\n });\n\n const fee = computed(() => {\n return calculatePrice(paymentMethods.value, payment.value);\n });\n\n const shippingTypesRestricted = computed(() => {\n return restrictCheck(shippingTypes.value);\n });\n\n const paymentMethodsRestricted = computed(() => {\n return restrictCheck(paymentMethods.value);\n });\n\n const categoriesInCart = computed(() => {\n let categories = [];\n\n items.value.forEach((item) => {\n if (categories.indexOf(item.category_id) === -1) {\n categories.push(item.category_id);\n }\n });\n\n return categories;\n });\n\n const calculatePrice = (items, value) => {\n let price = 0;\n\n if (value) {\n const item = items.find((item) => item.id == value);\n\n if (item) {\n if (item.type == 'sum') {\n price = item.amount;\n } else {\n price = Math.round((total.value * item.amount) / 100);\n }\n }\n }\n\n return price;\n };\n\n const restrictCheck = (elements) => {\n let items = [];\n\n elements.forEach((item) => {\n if (item.restrictions && Object.keys(item.restrictions).length) {\n let ok = true;\n\n const r = item.restrictions;\n\n if (r.price_min && r.price_max) {\n ok = total.value >= r.price_min && total.value <= r.price_max;\n item.restrictedForce = !ok;\n } else if (r.price_min) {\n ok = total.value >= r.price_min;\n item.restrictedForce = !ok;\n } else if (r.price_max) {\n ok = total.value <= r.price_max;\n item.restrictedForce = !ok;\n }\n\n if (ok && shipping.value) {\n if (r.shipping_type && r.shipping_type.length) {\n ok = r.shipping_type.indexOf(shipping.value) !== -1;\n }\n }\n\n if (ok && payment.value) {\n if (r.payment_method && r.payment_method.length) {\n ok = r.payment_method.indexOf(payment.value) !== -1;\n }\n }\n\n if (ok && r.categories && r.categories.length) {\n ok = !categoriesInCart.value.filter((value) => !r.categories.includes(value)).length;\n item.restrictedForce = !ok;\n }\n\n if (ok && r.code === 'user_type') {\n ok = r.value === user.value.user_type;\n item.restrictedForce = !ok;\n }\n\n item.restricted = !ok;\n } else {\n item.restricted = false;\n }\n\n if (!item.restrictedForce) {\n items.push(item);\n }\n });\n\n return items;\n };\n\n const discount = computed(() => {\n let sum = 0;\n\n items.value.forEach((item) => {\n let s = 0;\n\n if (item.attributes.priceOld) {\n s = item.attributes.priceOld - item.attributes.price;\n }\n\n sum += s * item.quantity;\n });\n\n return sum;\n });\n\n const facebook = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'facebook'\n });\n };\n\n const google = () => {\n window.location.href = $ziggy('auth.login.social', {\n provider: 'google'\n });\n };\n\n const loginCallback = () => {\n userType.value = 'new';\n };\n\n $http.post(window.location.href).then((response) => {\n shippingTypes.value = response.data.shipping;\n paymentMethods.value = response.data.payment;\n });\n\n watch(userType, (value) => {\n if (value == 'login') {\n store.commit('auth/modal', 'login');\n }\n });\n\n const userSchemaFields = {\n user_type: {\n component: FormRadio,\n model: 'user_type',\n label: '',\n list: [\n { code: 'individual', value: __('auth.registration.form.user_type_individual') },\n { code: 'legal', value: __('auth.registration.form.user_type_legal') }\n ],\n },\n name: {\n component: FormText,\n label: __('auth.registration.form.name'),\n model: 'first_name'\n },\n last_name: {\n component: FormText,\n label: __('auth.registration.form.last_name'),\n model: 'last_name'\n },\n phone: {\n component: FormText,\n label: __('auth.registration.form.phone'),\n model: 'phone',\n mask: '(###) ###-##-##',\n type: 'phone'\n //placeholder: '(050) 123-45-67'\n },\n registration_number: {\n component: FormText,\n label: __('auth.registration.form.registration_number'),\n model: 'registration_number',\n condition: (model) => model.user_type === 'legal'\n },\n email: {\n component: FormText,\n label: __('auth.login.form.email'),\n model: 'email'\n },\n };\n\n const userSchemaFieldsFiltered = Object.keys(userSchemaFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userSchemaFields[key];\n }\n\n return obj;\n }, {});\n\n const userSchema = ref(userSchemaFieldsFiltered);\n\n useSchemaForm(user);\n\n const phoneRegExp = /^\\(\\d{3}\\) \\d{3}\\-\\d{2}\\-\\d{2}$/;\n const userValidationFields = {\n last_name: yup.string().trim().required(__('auth.validation.required')),\n name: yup.string().trim().required(__('auth.validation.required')),\n phone: yup.string().required(__('auth.validation.phone')).matches(phoneRegExp, __('auth.validation.phone')),\n email: yup.string().trim().email(__('auth.validation.email')).required(__('auth.validation.required')),\n registration_number: yup.string().when('user_type', (user_type) => {\n if (user_type == 'legal') {\n return yup.string().numberFilled();\n }\n })\n };\n\n const userValidationFieldsFiltered = Object.keys(userValidationFields).reduce((obj, key) => {\n if (props.userFields.includes(key)) {\n obj[key] = userValidationFields[key];\n }\n\n return obj;\n }, {});\n\n const userValidation = yup.object().shape(userValidationFieldsFiltered);\n\n window.addEventListener('beforeunload', () => {\n store.commit('auth/modal', null);\n });\n\n window.addEventListener('pagehide', () => {\n store.commit('auth/modal', null);\n });\n\n const validate = async () => {\n const isShippingComponentFormsValid = await shippingComponentValid.value();\n\n userSubmitButton.value.click();\n\n userValidation.isValid(user.value).then(function (isUserValid) {\n ifCheckoutReady.value = isUserValid && payment.value && isUserConsent.value && shipping.value && (!shippingSelected.value.component || (shippingSelected.value.component && shippingComponentData.value[shippingSelected.value.code] && shippingComponentData.value[shippingSelected.value.code].isValid)) && isShippingComponentFormsValid;\n });\n };\n\n const shippingComponentValid = ref(null);\n provide('shippingComponentValid', shippingComponentValid);\n\n const shippingComponentUserData = ref({});\n provide('shippingComponentUserData', shippingComponentUserData);\n\n const checkout = async () => {\n const isShippingComponentFormsValid = shippingComponentValid.value();\n\n userValidation.isValid(user.value).then(function (valid) {\n if (!valid) {\n userType.value = 'new';\n userSubmitButton.value.click();\n\n toast(__('shop.order.validate_user'), {\n type: 'error'\n });\n } else if (!shipping.value) {\n toast(__('shop.order.validate_shipping'), {\n type: 'error'\n });\n } else if (shippingSelected.value.component && (!shippingComponentData.value[shippingSelected.value.code] || !shippingComponentData.value[shippingSelected.value.code].isValid)) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!isShippingComponentFormsValid) {\n toast(__('shop.order.validate_shipping1') + ': «' + shippingSelected.value.name + '»', {\n type: 'error'\n });\n } else if (!payment.value) {\n toast(__('shop.order.validate_payment'), {\n type: 'error'\n });\n } else if (!isUserConsent.value) {\n toast(__('shop.order.validate_consent'), {\n type: 'error'\n });\n } else {\n let clientId;\n let data = shippingComponentData.value[shippingSelected.value.code] ? JSON.parse(JSON.stringify(shippingComponentData.value[shippingSelected.value.code])) : {};\n\n delete data.isValid;\n\n const shippingUserData = JSON.parse(JSON.stringify(shippingComponentUserData.value));\n\n if (document.cookie) {\n const cookies = document.cookie.split(';');\n\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n\n if (parts[0].trim() === '_ga') {\n clientId = parts[1].split('.')[2] + '.' + parts[1].split('.')[3];\n }\n });\n }\n\n const model = {\n checkout: true,\n user: {\n last_name: user.value.last_name,\n name: user.value.name,\n phone: user.value.phone,\n email: user.value.email,\n user_type: user.value.user_type,\n registration_number: user.value.registration_number,\n },\n shipping: {\n id: shipping.value,\n data: data,\n user: shippingUserData,\n },\n payment: {\n id: payment.value\n },\n comment: comment.value,\n dontcall: dontcall.value,\n promoCode: promoCode.value,\n clientId: clientId\n };\n\n loading.value = true;\n\n $http\n .post(window.location.href, model)\n .then((response) => {\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: item.price,\n item_category: item.attributes.category ? item.attributes.category : '',\n item_brand: item.attributes.brand ? item.attributes.brand : '',\n quantity: item.quantity\n });\n });\n\n let object = {\n ecommerce: {\n transaction_id: response.data.order.id,\n value: parseFloat(total.value),\n tax: '0',\n shipping: '0',\n items: products\n },\n event: 'purchase',\n };\n\n if (promoCode.value) {\n object.ecommerce.coupon = promoCode.value;\n }\n\n if (window.dataLayer) {\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n\n if (response.data.redirect) {\n redirect.value = {\n url: response.data.redirect.url,\n data: response.data.redirect.data\n };\n\n nextTick(() => {\n setTimeout(() => {\n redirectForm.value.submit();\n }, 400);\n });\n }\n\n thanks.value = true;\n order.value = response.data.order;\n\n document.querySelector('html').classList.add('is-checkout-thanks');\n\n resertStore();\n })\n .catch((e) => {\n toast(__('shop.order.error'), {\n type: 'error'\n });\n\n console.error(e);\n })\n .finally(() => {\n loading.value = false;\n });\n }\n });\n };\n\n const toggleShippingRadio = (id) => {\n if (shipping.value === id) {\n shipping.value = null;\n }\n };\n\n const togglePaymentRadio = (id) => {\n if (payment.value === id) {\n payment.value = null;\n }\n };\n\n const resertStore = () => {\n store.commit('checkout/reset');\n };\n\n const shippingStoreData = (code, data, isValid) => {\n let d = JSON.parse(JSON.stringify(shippingComponentData.value));\n\n data.isValid = isValid;\n d[code] = data;\n\n store.commit('checkout/shippingData', d);\n };\n\n const home = () => {\n window.location.href = $env.locale.url ? $env.locale.url : '/';\n };\n\n onMounted(() => {\n if (!quantity.value && props.redirectOnEmpty) {\n window.location.href = props.redirectOnEmpty;\n }\n\n let products = [];\n\n items.value.forEach((item) => {\n products.push({\n item_name: item.name,\n item_id: item.attributes.code,\n price: parseFloat(item.attributes.price),\n item_brand: item.attributes.brand,\n item_category: item.attributes.category,\n quantity: item.quantity\n });\n });\n\n const object = {\n ecommerce: {\n currencyCode: 'UAH',\n items: products\n },\n event: 'begin_checkout'\n };\n\n if ($env.debug.ecommerce) {\n console.log(object);\n }\n\n if (!$env.debug.ecommerce && window.dataLayer) {\n window.dataLayer.push({\n ecommerce: null\n });\n\n window.dataLayer.push(object);\n }\n });\n\n return {\n auth,\n userType,\n facebook,\n google,\n loginCallback,\n quantity,\n items,\n loading,\n pluralize,\n discount,\n total,\n shipping,\n shippingPrice,\n payment,\n fee,\n userValidation,\n userSchema,\n userSubmitButton,\n checkout,\n ifCheckoutReady,\n validate,\n shippingTypesRestricted,\n paymentMethodsRestricted,\n toggleShippingRadio,\n togglePaymentRadio,\n shippingSelected,\n paymentSelected,\n shippingComponentData,\n shippingStoreData,\n resertStore,\n user,\n dontcall,\n comment,\n isCommentToggled,\n commentMaxLength,\n userCheckout,\n thanks,\n order,\n redirect,\n redirectForm,\n home,\n isPromoCodeToggled,\n applyPromoCode,\n promoCode,\n isPromoLoading,\n promoCodeApplied,\n resetPromoCode,\n calculateWithPromoCodeDiscount,\n consent,\n shippingComponent,\n slots,\n };\n }\n});\n</script>"],"names":["defineComponent","name","props","item","Object","setup","options","computed","attributes","length","itemOptions","filter","option","value","indexOf","id","_createElementVNode","then","Promise","resolve","f","i","arguments","e","reject","_createElementBlock","_ctx","bundle","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","href","image","src","_hoisted_10","_hoisted_11","_hoisted_12","code","_hoisted_13","_hoisted_14","_hoisted_16","_hoisted_17","quantity","parseInt","_hoisted_18","innerHTML","price","_hoisted_20","priceOld","amount","percent","sum","_hoisted_24","_hoisted_25","_hoisted_26","index","key","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_32","_hoisted_33","_hoisted_34","second","_hoisted_40","_hoisted_41","_hoisted_42","third","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_52","_hoisted_53","_hoisted_54","yup","addMethod","string","min","msg","this","test","exclusive","message","__","params","isNaN","markRaw","FormText","FormRadio","SchemaForm","SchemaFormFactory","VeeValidatePlugin","HtmlMessage","template","window","viewedSwiperOptions","slidesPerView","freeMode","slideClass","mousewheel","forceToAxis","navigation","nextEl","prevEl","observer","observeParents","components","CheckoutItem","isLogin","type","Boolean","isPromoCode","isConsent","isPaymentMethodOverSummary","userFields","Array","redirectOnEmpty","String","slots","useSlots","toast","useToast","store","useStore","loading","ref","getters","items","total","auth","userCheckout","ifCheckoutReady","redirectForm","thanks","order","consent","shippingComponent","redirect","shippingTypes","paymentMethods","userType","userSubmitButton","shippingComponentData","isCommentToggled","isPromoCodeToggled","promoCode","promoCodeApplied","isPromoLoading","app","getCurrentInstance","isUserConsent","dontcall","get","set","commit","comment","watch","substring","field","defaultValue","data","JSON","parse","stringify","provide","user","last_name","email","phone","registration_number","user_type","dispatch","shipping","payment","shippingSelected","find","paymentSelected","shippingPrice","calculatePrice","fee","shippingTypesRestricted","restrictCheck","paymentMethodsRestricted","categoriesInCart","categories","forEach","category_id","push","Math","round","elements","restrictions","keys","ok","r","price_min","price_max","restrictedForce","shipping_type","payment_method","includes","restricted","discount","s","$http","post","location","response","userSchemaFields","component","model","label","list","mask","condition","userSchemaFieldsFiltered","reduce","obj","userSchema","useSchemaForm","userValidationFields","trim","required","matches","when","numberFilled","userValidationFieldsFiltered","userValidation","object","shape","addEventListener","validate","shippingComponentValid","isShippingComponentFormsValid","click","isValid","isUserValid","shippingComponentUserData","checkout","valid","clientId","shippingUserData","document","cookie","split","parts","products","item_name","item_id","item_category","category","item_brand","brand","ecommerce","transaction_id","parseFloat","tax","event","coupon","dataLayer","$env","debug","console","log","url","nextTick","setTimeout","submit","querySelector","classList","add","resertStore","error","onMounted","currencyCode","facebook","$ziggy","provider","google","loginCallback","pluralize","toggleShippingRadio","togglePaymentRadio","shippingStoreData","d","commentMaxLength","home","locale","applyPromoCode","promoCodeApply","number","appContext","config","globalProperties","$filters","resetPromoCode","calculateWithPromoCodeDiscount","max","action","method","_hoisted_5","_hoisted_6","_hoisted_7","_renderSlot","_hoisted_8","_createCommentVNode","_hoisted_9","_toDisplayString","_createBlock","_createVNode","onClick","open","_hoisted_19","_hoisted_21","_hoisted_22","schemaRowClasses","schema","preventModelCleanupOnSchemaChange","afterForm","_hoisted_23","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","nextDates","_hoisted_43","_hoisted_47","icon","_hoisted_50","description","price_label","_hoisted_55","shippingFooter","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_66","_hoisted_68","_hoisted_69","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_80","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_92","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_98","_hoisted_99","_hoisted_100","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_113","_hoisted_114","_hoisted_115","_hoisted_117","onMouseenter","_hoisted_118","_hoisted_119","_hoisted_121","_hoisted_122","_hoisted_123","placeholder","disabled","_hoisted_125","_hoisted_127","_hoisted_128","_hoisted_129","_hoisted_130","filters","_hoisted_131","_hoisted_132","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_142","_hoisted_143","_hoisted_144","_hoisted_147","_hoisted_148","_hoisted_149","_hoisted_150","_hoisted_152","_hoisted_153","_hoisted_154","_hoisted_157"],"mappings":"ksBA0F6BA,kBAAgB,CACzCC,KAAM,eACNC,MAAO,CACHC,KAAMC,QAEVC,eAAMH,OACII,EAAUC,YAAS,kBAAOL,EAAMC,KAAKK,WAAWF,SAAWJ,EAAMC,KAAKK,WAAWF,QAAQG,OAASP,EAAMC,KAAKK,WAAWF,QAAU,YAGjI,CACHI,YAHgBH,YAAS,kBAAOL,EAAMC,KAAKG,SAAWJ,EAAMC,KAAKG,QAAQG,OAASP,EAAMC,KAAKG,QAAQK,QAAO,SAACC,UAAiD,IAAtCN,EAAQO,MAAMC,QAAQF,EAAOG,OAAc,yBC/F5J,yBACI,yBAEJ,wBAEQ,sDAIaC,qBAA0B,oBAAV,4BAI7B,mBACI,oCACI,yBACI,iBACA,6BAIJ,sDACI,2BACA,2CAEJ,6FAQJ,+BACI,oBAGA,oBAEQ,mBACI,yBAEJ,kDAA6B,oCAMjD,2BACI,sBACPA,kCAAW,gBAAcA,qBAAiC,oBAAjB,wDAIrBA,qBAA0B,oBAAV,4BAI7B,0BACI,kBACA,qCAKR,4BACI,uBACPA,kCAAW,gBAAcA,qBAAiC,oBAAjB,4DAIrBA,qBAA0B,oBAAV,6BAI7B,0BACI,kBACA,iCCqURH,EAAOI,cAErBA,EAAOA,KAAcJ,MAEdA,WACNK,QAAQC,QAAQN,IAElBI,EAAOJ,EAAMI,KAAKA,GAAQJ,eArBXO,+DAGfC,GAAKC,+DAIHC,kBACQC,gED7YdC,oDAAW,mDAAmEC,OAAKlB,WAAWmB,YAC1DD,OAAKlB,WAAWmB,sBAAhDF,2BAAAG,GACIZ,2BAAAa,oBAA6BH,gEAEjCV,2BAAAc,GACId,oDAAW,kBAAkCU,OAAKlB,WAAWmB,YACzDX,2BAAAe,GACIf,0BAAIgB,KAAMN,OAAKlB,WAAWwB,OACtBhB,uDAAc,+BAA+CU,OAAKlB,WAAWyB,WACjCP,OAAKlB,WAAWyB,qBAAxDR,kCAAMS,IAAKR,OAAKlB,WAAWyB,iCAC3BR,6CAIZT,2BAAAmB,GACInB,2BAAAoB,GACIpB,2BAAAqB,GAC4BX,OAAKlB,WAAW8B,oBAAxCb,2BAAAc,oBAAiDb,8CAA2BA,OAAKlB,WAAW8B,0CAC5FtB,2BAAAwB,GACIxB,0BAAIgB,KAAMN,OAAKlB,WAAWwB,wBAASN,OAAKzB,eAGhDe,2BAAAyB,GACIzB,2BAAA0B,EAAsB,uBAAKhB,OAAKiB,aACEC,SAASlB,OAAKiB,2BAAhDlB,2BAAAoB,GAA+D7B,6BAAM8B,UAAQpB,WAASqB,MAAMrB,OAAKlB,WAAWuC,4DAAqBrB,6DAErIV,2BAAAgC,GACIhC,oDAAW,wBAAwCU,OAAKlB,WAAWmB,YACpDD,OAAKlB,WAAWyC,wBAA3BxB,wCAA2C,YAAYqB,UAAQpB,WAASqB,MAAMrB,OAAKlB,WAAWyC,SAAWvB,OAAKiB,sDAC7EjB,OAAKlB,WAAWmB,QAAUD,OAAKlB,WAAW0C,sBAA3EzB,wCAAW,gBAAwEqB,UAAQpB,iCAAiCA,OAAKlB,WAAW0C,OAAOC,QAAUzB,OAAKlB,WAAW0C,OAAOC,YAAgBzB,WAASqB,MAAMrB,OAAKlB,WAAW0C,OAAOE,IAAM1B,OAAKiB,uDACrP3B,4BAAK8B,UAAQpB,WAASqB,MAAMrB,OAAKlB,WAAWuC,MAAQrB,OAAKiB,6BAI/BjB,eAAeA,cAAYjB,sBAAjEgB,2BAAA4B,GACIrC,2BAAAsC,GACItC,mDAASU,oDAAiCA,cAAYjB,aAE1DO,2BAAAuC,oBACI9B,kDAA+BC,wBAAlBd,EAAQ4C,wBAArB/B,4BAAmDgC,IAAKD,QAAa,uBACjExC,2BAAA0C,GACI1C,2BAAA2C,oBAA6B/C,EAAOX,WAExCe,2BAAA4C,KAAyC5C,qBAAmD,QAA7C8B,UAAQpB,WAASqB,MAAMnC,EAAOmC,0EAM/DrB,OAAKlB,WAAWmB,sBAAlDF,2BAAAoC,GACI7C,2BAAA8C,GACIC,EACA/C,0BAAIgB,KAAMN,OAAKlB,WAAWwD,OAAOhC,OAC7BhB,uDAAc,+BAA+CU,OAAKlB,WAAWwD,OAAO/B,WACjCP,OAAKlB,WAAWwD,OAAO/B,qBAAtER,kCAAMS,IAAKR,OAAKlB,WAAWwD,OAAO/B,iCAClCR,6CAIZT,2BAAAiD,GAC4BvC,OAAKlB,WAAWwD,OAAO1B,oBAA/Cb,2BAAAyC,qBAAwDxC,8CAA2BA,OAAKlB,WAAWwD,OAAO1B,0CAC1GtB,2BAAAmD,IACInD,0BAAIgB,KAAMN,OAAKlB,WAAWwD,OAAOhC,wBAASN,OAAKlB,WAAWwD,OAAO/D,mDAI3CyB,OAAKlB,WAAWmB,QAAUD,OAAKlB,WAAW4D,qBAA5E3C,2BAAA4C,IACIrD,2BAAAsD,IACIC,GACAvD,0BAAIgB,KAAMN,OAAKlB,WAAW4D,MAAMpC,OAC5BhB,uDAAc,+BAA+CU,OAAKlB,WAAW4D,MAAMnC,WACjCP,OAAKlB,WAAW4D,MAAMnC,qBAApER,kCAAMS,IAAKR,OAAKlB,WAAW4D,MAAMnC,kCACjCR,gDAIZT,2BAAAwD,IAC4B9C,OAAKlB,WAAW4D,MAAM9B,oBAA9Cb,2BAAAgD,qBAAuD/C,8CAA2BA,OAAKlB,WAAW4D,MAAM9B,0CACxGtB,2BAAA0D,IACI1D,0BAAIgB,KAAMN,OAAKlB,WAAW4D,MAAMpC,wBAASN,OAAKlB,WAAW4D,MAAMnE,0DC4PvF0E,EAAIC,UAAUD,EAAIE,OAAQ,gBAAgB,SAAUC,EAAKC,UAC9CC,KAAKC,KAAK,CACbhF,KAAM,eACNiF,WAAW,EACXC,QAASC,GAAG,0BACZC,OAAQ,CACJP,IAAKA,GAETG,KAAM,SAACpE,WAAqB,IAATA,GAAeyE,MAAMzE,UAIhD0E,UAAQC,WACRD,UAAQE,WAER,IAAMC,GAAaC,oBAAkB,CAACC,UAAkB,MAElDC,GAAc,CAChB3F,MAAO,CACHiF,QAAS,IAEbW,SAAU,gCAGdC,OAAOC,oBAAsB,CACzBC,cAAe,OACfC,UAAU,EACVC,WAAY,UACZC,WAAY,CACRC,aAAa,GAEjBC,WAAY,CACRC,OAAQ,QACRC,OAAQ,SAEZC,UAAU,EACVC,gBAAgB,GAGpB,OAA6B1G,kBAAgB,CACzC2G,WAAY,CACRC,aAAAA,EACAlB,WAAAA,IAEJxF,MAAO,CACH2G,QAAS,CACLC,KAAMC,iBACG,GAEbC,YAAa,CACTF,KAAMC,iBACG,GAEbE,UAAW,CACPH,KAAMC,iBACG,GAEbG,2BAA4B,CACxBJ,KAAMC,iBACG,GAEbI,WAAY,CACRL,KAAMM,cACG,CAAC,YAAa,OAAQ,QAAS,UAE5CC,gBAAiB,CACbP,KAAMQ,gBACG,IAGjBrH,KAAM,iBACNI,eAAMH,OACIqH,EAAQC,aACRC,EAAQC,aACRC,EAAQC,aACRC,EAAUC,OAAI,GACdnF,EAAWpC,YAAS,kBAAMoH,EAAMI,QAAQ,oBACxCC,EAAQzH,YAAS,kBAAMoH,EAAMI,QAAQ,iBACrCE,EAAQ1H,YAAS,kBAAMoH,EAAMI,QAAQ,iBACrCG,EAAO3H,YAAS,kBAAMoH,EAAMI,QAAQ,cACpCI,EAAe5H,YAAS,kBAAMoH,EAAMI,QAAQ,oBAC5CK,EAAkBN,OAAI,GACtBO,EAAeP,MAAI,MACnBQ,EAASR,OAAI,GACbS,EAAQT,MAAI,MACZU,EAAUV,OAAI,GACdW,EAAoBX,MAAI,MAExBY,EAAWZ,MAAI,IAEfa,EAAgBb,MAAI,IACpBc,EAAiBd,MAAI,IAErBe,EAAWf,MAAI,OACfgB,EAAmBhB,MAAI,MAEvBiB,EAAwBxI,YAAS,kBAAMoH,EAAMI,QAAQ,4BACrDiB,EAAmBlB,OAAI,GAGvBmB,EAAqBnB,OAAI,GACzBoB,EAAYpB,MAAI,IAChBqB,EAAmBrB,MAAI,MACvBsB,EAAiBtB,OAAI,GACrBuB,EAAMC,uBAONC,EAAgBhJ,YAAS,kBACnBL,EAAM+G,WAAauB,EAAQ3H,QAAWX,EAAM+G,aA0ClDuC,EAAWjJ,WAAS,CACtBkJ,sBACW9B,EAAMI,QAAQ,sBAEzB2B,aAAI7I,GACA8G,EAAMgC,OAAO,oBAAqB9I,MAIpC+I,EAAUrJ,WAAS,CACrBkJ,mBACUG,EAAUjC,EAAMI,QAAQ,2BAExB6B,IACFZ,EAAiBnI,OAAQ,GAGtB+I,GAEXF,aAAI7I,GACA8G,EAAMgC,OAAO,mBAAoB9I,MAIzCgJ,QAAMD,GAAS,SAAC/I,GACRA,EAAMJ,OAjFW,MAkFjBmJ,EAAQ/I,MAAQ+I,EAAQ/I,MAAMiJ,UAAU,EAlFvB,aAsFnBC,EAAQ,SAAC9J,EAAM+J,UACVzJ,WAAS,CACZkJ,sBACWtB,EAAatH,MAAMZ,GAAQkI,EAAatH,MAAMZ,GAAQ+J,GAEjEN,aAAI7I,OACIoJ,EAAOC,KAAKC,MAAMD,KAAKE,UAAUjC,EAAatH,QAClDoJ,EAAKhK,GAAQY,EAEb8G,EAAMgC,OAAO,gBAAiBM,OAK1CI,UAAQ,QAASN,OAEXO,EAAOxC,MAAI,CACbyC,UAAWR,EAAM,aACjB9J,KAAM8J,EAAM,QACZS,MAAOT,EAAM,SACbU,MAAOV,EAAM,SACbW,oBAAqBX,EAAM,uBAC3BY,UAAWZ,EAAM,YAAa,gBAGlCM,UAAQ,OAAQC,GAEhB3C,EAAMiD,SAAS,UAAW,SACb,mBAiBPC,EAAWtK,WAAS,CACtBkJ,sBACW9B,EAAMI,QAAQ,sBAEzB2B,aAAI3I,GACA4G,EAAMgC,OAAO,oBAAqB5I,MAIpC+J,EAAUvK,WAAS,CACrBkJ,sBACW9B,EAAMI,QAAQ,qBAEzB2B,aAAI3I,GACA4G,EAAMgC,OAAO,mBAAoB5I,MAInCgK,EAAmBxK,YAAS,kBACvBsK,EAAShK,MAAQ8H,EAAc9H,MAAMmK,MAAK,SAAC7K,UAASA,EAAKY,IAAM8J,EAAShK,SAAS,MAGtFoK,EAAkB1K,YAAS,kBACtBuK,EAAQjK,MAAQ+H,EAAe/H,MAAMmK,MAAK,SAAC7K,UAASA,EAAKY,IAAM+J,EAAQjK,SAAS,MAGrFqK,EAAgB3K,YAAS,kBACpB4K,EAAexC,EAAc9H,MAAOgK,EAAShK,UAGlDuK,EAAM7K,YAAS,kBACV4K,EAAevC,EAAe/H,MAAOiK,EAAQjK,UAGlDwK,EAA0B9K,YAAS,kBAC9B+K,EAAc3C,EAAc9H,UAGjC0K,EAA2BhL,YAAS,kBAC/B+K,EAAc1C,EAAe/H,UAGlC2K,EAAmBjL,YAAS,eAC1BkL,EAAa,UAEjBzD,EAAMnH,MAAM6K,SAAQ,SAACvL,IAC6B,IAA1CsL,EAAW3K,QAAQX,EAAKwL,cACxBF,EAAWG,KAAKzL,EAAKwL,gBAItBF,KAGLN,EAAiB,SAACnD,EAAOnH,OACvBkC,EAAQ,KAERlC,EAAO,KACDV,EAAO6H,EAAMgD,MAAK,SAAC7K,UAASA,EAAKY,IAAMF,KAEzCV,IAEI4C,EADa,OAAb5C,EAAK2G,KACG3G,EAAK+C,OAEL2I,KAAKC,MAAO7D,EAAMpH,MAAQV,EAAK+C,OAAU,aAKtDH,GAGLuI,EAAgB,SAACS,OACf/D,EAAQ,UAEZ+D,EAASL,SAAQ,SAACvL,MACVA,EAAK6L,cAAgB5L,OAAO6L,KAAK9L,EAAK6L,cAAcvL,OAAQ,KACxDyL,GAAK,EAEHC,EAAIhM,EAAK6L,aAEXG,EAAEC,WAAaD,EAAEE,WACjBH,EAAKjE,EAAMpH,OAASsL,EAAEC,WAAanE,EAAMpH,OAASsL,EAAEE,UACpDlM,EAAKmM,iBAAmBJ,GACjBC,EAAEC,WACTF,EAAKjE,EAAMpH,OAASsL,EAAEC,UACtBjM,EAAKmM,iBAAmBJ,GACjBC,EAAEE,YACTH,EAAKjE,EAAMpH,OAASsL,EAAEE,UACtBlM,EAAKmM,iBAAmBJ,GAGxBA,GAAMrB,EAAShK,OACXsL,EAAEI,eAAiBJ,EAAEI,cAAc9L,SACnCyL,GAAkD,IAA7CC,EAAEI,cAAczL,QAAQ+J,EAAShK,QAI1CqL,GAAMpB,EAAQjK,OACVsL,EAAEK,gBAAkBL,EAAEK,eAAe/L,SACrCyL,GAAkD,IAA7CC,EAAEK,eAAe1L,QAAQgK,EAAQjK,QAI1CqL,GAAMC,EAAEV,YAAcU,EAAEV,WAAWhL,SACnCyL,GAAMV,EAAiB3K,MAAMF,QAAO,SAACE,UAAWsL,EAAEV,WAAWgB,SAAS5L,MAAQJ,OAC9EN,EAAKmM,iBAAmBJ,GAGxBA,GAAiB,cAAXC,EAAE7J,OACR4J,EAAKC,EAAEtL,QAAUyJ,EAAKzJ,MAAM8J,UAC5BxK,EAAKmM,iBAAmBJ,GAG5B/L,EAAKuM,YAAcR,OAEnB/L,EAAKuM,YAAa,EAGjBvM,EAAKmM,iBACNtE,EAAM4D,KAAKzL,MAIZ6H,GAGL2E,EAAWpM,YAAS,eAClB6C,EAAM,SAEV4E,EAAMnH,MAAM6K,SAAQ,SAACvL,OACbyM,EAAI,EAEJzM,EAAKK,WAAWyC,WAChB2J,EAAIzM,EAAKK,WAAWyC,SAAW9C,EAAKK,WAAWuC,OAGnDK,GAAOwJ,EAAIzM,EAAKwC,YAGbS,KAmBXyJ,MAAMC,KAAK/G,OAAOgH,SAAS/K,MAAMf,MAAK,SAAC+L,GACnCrE,EAAc9H,MAAQmM,EAAS/C,KAAKY,SACpCjC,EAAe/H,MAAQmM,EAAS/C,KAAKa,WAGzCjB,QAAMhB,GAAU,SAAChI,GACA,SAATA,GACA8G,EAAMgC,OAAO,aAAc,gBAI7BsD,EAAmB,CACrBtC,UAAW,CACPuC,UAAWzH,UACX0H,MAAO,YACPC,MAAO,GACPC,KAAM,CACF,CAAE/K,KAAM,aAAczB,MAAOuE,GAAG,gDAChC,CAAE9C,KAAM,QAASzB,MAAOuE,GAAG,6CAGnCnF,KAAM,CACFiN,UAAW1H,UACX4H,MAAOhI,GAAG,+BACV+H,MAAO,cAEX5C,UAAW,CACP2C,UAAW1H,UACX4H,MAAOhI,GAAG,oCACV+H,MAAO,aAEX1C,MAAO,CACHyC,UAAW1H,UACX4H,MAAOhI,GAAG,gCACV+H,MAAO,QACPG,KAAM,kBACNxG,KAAM,SAGV4D,oBAAqB,CACjBwC,UAAW1H,UACX4H,MAAOhI,GAAG,8CACV+H,MAAO,sBACPI,UAAW,SAACJ,SAA8B,UAApBA,EAAMxC,YAEhCH,MAAO,CACH0C,UAAW1H,UACX4H,MAAOhI,GAAG,yBACV+H,MAAO,UAITK,GAA2BpN,OAAO6L,KAAKgB,GAAkBQ,QAAO,SAACC,EAAKjK,UACpEvD,EAAMiH,WAAWsF,SAAShJ,KAC1BiK,EAAIjK,GAAOwJ,EAAiBxJ,IAGzBiK,IACR,IAEGC,GAAa7F,MAAI0F,IAEvBI,gBAActD,OAGRuD,GAAuB,CACzBtD,UAAW5F,EAAIE,SAASiJ,OAAOC,SAAS3I,GAAG,6BAC3CnF,KAAM0E,EAAIE,SAASiJ,OAAOC,SAAS3I,GAAG,6BACtCqF,MAAO9F,EAAIE,SAASkJ,SAAS3I,GAAG,0BAA0B4I,QAJ1C,kCAI+D5I,GAAG,0BAClFoF,MAAO7F,EAAIE,SAASiJ,OAAOtD,MAAMpF,GAAG,0BAA0B2I,SAAS3I,GAAG,6BAC1EsF,oBAAqB/F,EAAIE,SAASoJ,KAAK,aAAa,SAACtD,MAChC,SAAbA,SACOhG,EAAIE,SAASqJ,mBAK1BC,GAA+B/N,OAAO6L,KAAK4B,IAAsBJ,QAAO,SAACC,EAAKjK,UAC5EvD,EAAMiH,WAAWsF,SAAShJ,KAC1BiK,EAAIjK,GAAOoK,GAAqBpK,IAG7BiK,IACR,IAEGU,GAAiBzJ,EAAI0J,SAASC,MAAMH,IAE1CpI,OAAOwI,iBAAiB,gBAAgB,WACpC5G,EAAMgC,OAAO,aAAc,SAG/B5D,OAAOwI,iBAAiB,YAAY,WAChC5G,EAAMgC,OAAO,aAAc,aAGzB6E,4BAC0CC,GAAuB5N,kBAA7D6N,GAEN5F,EAAiBjI,MAAM8N,QAEvBP,GAAeQ,QAAQtE,EAAKzJ,OAAOI,MAAK,SAAU4N,GAC9CzG,EAAgBvH,MAAQgO,GAAe/D,EAAQjK,OAAS0I,EAAc1I,OAASgK,EAAShK,SAAWkK,EAAiBlK,MAAMqM,WAAcnC,EAAiBlK,MAAMqM,WAAanE,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,OAASyG,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,MAAMsM,UAAaF,WAIhTD,GAAyB3G,MAAI,MACnCuC,UAAQ,yBAA0BoE,QAE5BK,GAA4BhH,MAAI,IACtCuC,UAAQ,4BAA6ByE,QAE/BC,sBACIL,EAAgCD,GAAuB5N,eAE7DuN,GAAeQ,QAAQtE,EAAKzJ,OAAOI,MAAK,SAAU+N,MACzCA,EAOE,GAAKnE,EAAShK,MAId,IAAIkK,EAAiBlK,MAAMqM,WAAenE,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,OAAUyG,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,MAAMsM,QAIhK,GAAKF,EAIL,GAAK5D,EAAQjK,MAIb,GAAK0I,EAAc1I,MAInB,KACCoO,EACAhF,EAAOlB,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,MAAQ4H,KAAKC,MAAMD,KAAKE,UAAUrB,EAAsBlI,MAAMkK,EAAiBlK,MAAMyB,QAAU,UAEtJ2H,EAAK2E,YAENM,EAAmBhF,KAAKC,MAAMD,KAAKE,UAAU0E,GAA0BjO,WAEzEsO,SAASC,OACOD,SAASC,OAAOC,MAAM,KAE9B3D,SAAQ,SAAC0D,OACPE,EAAQF,EAAOC,MAAM,KAEH,QAApBC,EAAM,GAAGxB,SACTmB,EAAWK,EAAM,GAAGD,MAAM,KAAK,GAAK,IAAMC,EAAM,GAAGD,MAAM,KAAK,WAKpElC,EAAQ,CACV4B,UAAU,EACVzE,KAAM,CACFC,UAAWD,EAAKzJ,MAAM0J,UACtBtK,KAAMqK,EAAKzJ,MAAMZ,KACjBwK,MAAOH,EAAKzJ,MAAM4J,MAClBD,MAAOF,EAAKzJ,MAAM2J,MAClBG,UAAWL,EAAKzJ,MAAM8J,UACtBD,oBAAqBJ,EAAKzJ,MAAM6J,qBAEpCG,SAAU,CACN9J,GAAI8J,EAAShK,MACboJ,KAAMA,EACNK,KAAM4E,GAEVpE,QAAS,CACL/J,GAAI+J,EAAQjK,OAEhB+I,QAASA,EAAQ/I,MACjB2I,SAAUA,EAAS3I,MACnBqI,UAAWA,EAAUrI,MACrBoO,SAAUA,GAGdpH,EAAQhH,OAAQ,EAEhBgM,MACKC,KAAK/G,OAAOgH,SAAS/K,KAAMmL,GAC3BlM,MAAK,SAAC+L,OACCuC,EAAW,GAEfvH,EAAMnH,MAAM6K,SAAQ,SAACvL,GACjBoP,EAAS3D,KAAK,CACV4D,UAAWrP,EAAKF,KAChBwP,QAAStP,EAAKK,WAAW8B,KACzBS,MAAO5C,EAAK4C,MACZ2M,cAAevP,EAAKK,WAAWmP,SAAWxP,EAAKK,WAAWmP,SAAW,GACrEC,WAAYzP,EAAKK,WAAWqP,MAAQ1P,EAAKK,WAAWqP,MAAQ,GAC5DlN,SAAUxC,EAAKwC,kBAInB0L,EAAS,CACTyB,UAAW,CACPC,eAAgB/C,EAAS/C,KAAK1B,MAAMxH,GACpCF,MAAOmP,WAAW/H,EAAMpH,OACxBoP,IAAK,IACLpF,SAAU,IACV7C,MAAOuH,GAEXW,MAAO,YAGPhH,EAAUrI,QACVwN,EAAOyB,UAAUK,OAASjH,EAAUrI,OAGpCkF,OAAOqK,YACHC,KAAKC,MAAMR,WACXS,QAAQC,IAAInC,GAGhBtI,OAAOqK,UAAUxE,KAAK,CAClBkE,UAAW,OAGf/J,OAAOqK,UAAUxE,KAAKyC,IAGtBrB,EAAS/C,KAAKvB,WACdA,EAAS7H,MAAQ,CACb4P,IAAKzD,EAAS/C,KAAKvB,SAAS+H,IAC5BxG,KAAM+C,EAAS/C,KAAKvB,SAASuB,MAGjCyG,YAAS,WACLC,YAAW,WACPtI,EAAaxH,MAAM+P,WACpB,SAIXtI,EAAOzH,OAAQ,EACf0H,EAAM1H,MAAQmM,EAAS/C,KAAK1B,MAE5B4G,SAAS0B,cAAc,QAAQC,UAAUC,IAAI,sBAE7CC,eAEG,SAACzP,GACJkG,EAAMrC,GAAG,oBAAqB,CAC1B0B,KAAM,UAGVyJ,QAAQU,MAAM1P,eAET,WACLsG,EAAQhH,OAAQ,UAxHxB4G,EAAMrC,GAAG,+BAAgC,CACrC0B,KAAM,eALVW,EAAMrC,GAAG,+BAAgC,CACrC0B,KAAM,eALVW,EAAMrC,GAAG,iCAAmC,MAAQ2F,EAAiBlK,MAAMZ,KAAO,IAAK,CACnF6G,KAAM,eALVW,EAAMrC,GAAG,iCAAmC,MAAQ2F,EAAiBlK,MAAMZ,KAAO,IAAK,CACnF6G,KAAM,eALVW,EAAMrC,GAAG,gCAAiC,CACtC0B,KAAM,eARV+B,EAAShI,MAAQ,MACjBiI,EAAiBjI,MAAM8N,QAEvBlH,EAAMrC,GAAG,4BAA6B,CAClC0B,KAAM,qBA6JhBkK,GAAc,WAChBrJ,EAAMgC,OAAO,0BAgBjBuH,aAAU,YACDvO,EAAS9B,OAASX,EAAMmH,kBACzBtB,OAAOgH,SAAS/K,KAAO9B,EAAMmH,qBAG7BkI,EAAW,GAEfvH,EAAMnH,MAAM6K,SAAQ,SAACvL,GACjBoP,EAAS3D,KAAK,CACV4D,UAAWrP,EAAKF,KAChBwP,QAAStP,EAAKK,WAAW8B,KACzBS,MAAOiN,WAAW7P,EAAKK,WAAWuC,OAClC6M,WAAYzP,EAAKK,WAAWqP,MAC5BH,cAAevP,EAAKK,WAAWmP,SAC/BhN,SAAUxC,EAAKwC,kBAIjB0L,EAAS,CACXyB,UAAW,CACPqB,aAAc,MACdnJ,MAAOuH,GAEXW,MAAO,kBAGPG,KAAKC,MAAMR,WACXS,QAAQC,IAAInC,IAGXgC,KAAKC,MAAMR,WAAa/J,OAAOqK,YAChCrK,OAAOqK,UAAUxE,KAAK,CAClBkE,UAAW,OAGf/J,OAAOqK,UAAUxE,KAAKyC,OAIvB,CACHnG,KAAAA,EACAW,SAAAA,EACAuI,SAhWa,WACbrL,OAAOgH,SAAS/K,KAAOqP,OAAO,oBAAqB,CAC/CC,SAAU,cA+VdC,OA3VW,WACXxL,OAAOgH,SAAS/K,KAAOqP,OAAO,oBAAqB,CAC/CC,SAAU,YA0VdE,cAtVkB,WAClB3I,EAAShI,MAAQ,OAsVjB8B,SAAAA,EACAqF,MAAAA,EACAH,QAAAA,EACA4J,UAAAA,YACA9E,SAAAA,EACA1E,MAAAA,EACA4C,SAAAA,EACAK,cAAAA,EACAJ,QAAAA,EACAM,IAAAA,EACAgD,eAAAA,GACAT,WAAAA,GACA7E,iBAAAA,EACAiG,SAAAA,GACA3G,gBAAAA,EACAoG,SAAAA,GACAnD,wBAAAA,EACAE,yBAAAA,EACAmG,oBA5FwB,SAAC3Q,GACrB8J,EAAShK,QAAUE,IACnB8J,EAAShK,MAAQ,OA2FrB8Q,mBAvFuB,SAAC5Q,GACpB+J,EAAQjK,QAAUE,IAClB+J,EAAQjK,MAAQ,OAsFpBkK,iBAAAA,EACAE,gBAAAA,EACAlC,sBAAAA,EACA6I,kBAjFsB,SAACtP,EAAM2H,EAAM2E,OAC/BiD,EAAI3H,KAAKC,MAAMD,KAAKE,UAAUrB,EAAsBlI,QAExDoJ,EAAK2E,QAAUA,EACfiD,EAAEvP,GAAQ2H,EAEVtC,EAAMgC,OAAO,wBAAyBkI,IA4EtCb,YAAAA,GACA1G,KAAAA,EACAd,SAAAA,EACAI,QAAAA,EACAZ,iBAAAA,EACA8I,iBAlpBqB,IAmpBrB3J,aAAAA,EACAG,OAAAA,EACAC,MAAAA,EACAG,SAAAA,EACAL,aAAAA,EACA0J,KApFS,WACThM,OAAOgH,SAAS/K,KAAOqO,KAAK2B,OAAOvB,IAAMJ,KAAK2B,OAAOvB,IAAM,KAoF3DxH,mBAAAA,EACAgJ,eAzoBmB,WACf/I,EAAUrI,QACVuI,EAAevI,OAAQ,EAEvBgM,MACKC,KAAK/G,OAAOgH,SAAS/K,KAAM,CACxBkQ,eAAgBhJ,EAAUrI,MAC1B2J,MAAOF,EAAKzJ,MAAM2J,MAClBvC,MAAOA,EAAMpH,QAEhBI,MAAK,SAAA+L,GACF7D,EAAiBtI,MAAQmM,EAAS/C,eAC7B,SAAAgH,GACDA,EAAMjE,UAAYiE,EAAMjE,SAAS/C,KAAKxJ,SACtCwQ,EAAMjE,SAAS/C,KAAKyB,SAAQ,SAAAuF,OAClB/D,EAAY,CACdA,UAAWrH,GACX3F,MAAO,CACHiF,QAASC,GAAG,0BAA4B6L,EAAMA,MAAO,CAAEkB,OAAQ9I,EAAI+I,WAAWC,OAAOC,iBAAiBC,SAASxP,MAAMkO,EAAMkB,YAInI1K,EAAMyF,EAAW,CACbpG,KAAM,UAGS,aAAfmK,EAAMA,QACN/H,EAAUrI,MAAQ,OAI1BsI,EAAiBtI,MAAQ,kBAEtB,WACPuI,EAAevI,OAAQ,OAwmBnCqI,UAAAA,EACAE,eAAAA,EACAD,iBAAAA,EACAqJ,eAtpBmB,WACnBtJ,EAAUrI,MAAQ,GAClBsI,EAAiBtI,MAAQ,MAqpBzB4R,+BA1iBmC,eAC7BrP,EAAM6E,EAAMpH,MAAQuK,EAAIvK,MAAQqK,EAAcrK,aAEhDsI,EAAiBtI,OAAwC,WAA/BsI,EAAiBtI,MAAMiG,KAC1C+E,KAAKC,MAAM1I,EAAMA,EAAM+F,EAAiBtI,MAAMqC,OAAS,KAG9DiG,EAAiBtI,OAAwC,YAA/BsI,EAAiBtI,MAAMiG,KAC1C+E,KAAK6G,IAAI,EAAGtP,EAAM+F,EAAiBtI,MAAMqC,QAG7CE,GAgiBPoF,QAAAA,EACAC,kBAAAA,EACAlB,MAAAA,gBC/kCG,mEAKI,2BACI,4BACA,qBACI,4CAEI,oCACI,qBACI,uBACI,uDAE+E,wCAQ9EvG,iCACIA,yCAAgB,8BAUjC,8CACI,qBACI,+BACA,uBAIA,qBACI,wBAGS8F,KAAK,SAASgB,IAAI,yBAAyB,6BAIpD,+CAGA,0BACI,yBACI,qBACI,yBACA,eAEH9G,kCAAW,gBACPA,yCAAgB,6BAEpBA,iCAAM,oBAGNA,kCAAW,oBACPA,yCAAgB,2BAEpBA,iCAAM,wBAS3B,wCACI,yCACI,kBACI,kBACI,iBACI,kBACI,oCAEJ,mBACI,wBAQR,iBACI,0DAIe,YACdA,yCAAgB,uCAIb,yBAEJ,yBACK,qDAYzB,uCACI,0CACI,kBACI,kBACI,iBACI,kBACI,8BASJ,+CAKI,+BAEJ,oCASxB,yBACI,0CACI,wCACI,kBACI,kBACI,iBACI,kBACI,8BASJ,+CAKI,+BAEJ,6BAO3BA,kCAAW,wCACA,mBACI,yBACA,kBACI,0BACI,qCACA,0CAIJ,0BACI,kBACA,0CAIJ,qBACI,kBACA,0CAIJ,0BACI,kBACA,0CAEK,yBAGT,uBACI,WAAwCA,qBAAI,6BAAY,mBACxD,oCAIJ,uBACI,kBACA,2CAKR,2CAKA,qBACI,wCAUPA,iCACIA,yCAAgB,+BAGb,qCACI,qCAEM,YAAY,yCAS7BA,iCACIA,yCAAgB,+BAGb,6BAEI,+BAQ5B,mCAEQ,mBAIA,2BACI,yBACI,4BAGJ,yBAGA,+BACI,0BACI,mBACA,6DAKJ,0BACI,mBACA,6DAKJ,0BACI,mBACA,qBACI,gDASK,kCACzB,mBACA,4CAE6E,SAAEA,qBAAM,oOAxTxGS,2BAAAG,IACmCF,WAAS+O,mBAAxChP,mCAAMqG,IAAI,eAAoC6K,OAAQjR,WAAS+O,UAAW,YAAYmC,OAAO,0BACzFnR,kDAAgFC,WAASuI,eAAhCpJ,EAAOZ,EAAMuD,wBAAtE/B,8BAAOqF,KAAK,SAAU7G,KAAMA,EAAOY,MAAOA,EAA4D4C,IAAKD,+DAG9E9B,QAAMjB,SAAWiB,wBAAlDD,2BAAAM,IACIf,2BAAA6R,qBAA+BnR,sCAC/BV,2BAAA8R,IACI9R,2BAAA+R,IACIC,gCACAhS,2BAAAiS,IAAoCC,8BAChClS,2BAAAmS,IACInS,2BAAAmB,IACInB,2BAAAoB,wCACOV,sCACHV,qBAAsF,cAA1E,mBAAOoS,kBAAQ1R,YAAUA,WAAUA,iDAA6CV,6BAAM8B,UAAQpB,4BAA8BA,WAASqB,MAAMrB,yBAG/JsR,8BAAmBhL,MAAOtG,UAA1B,mCACID,kDAA8BC,kBAARvB,wBAAtBkT,iBAA4C5P,IAAKtD,EAAKY,GAAKZ,KAAMA,6BACjEmT,uBAAoB,+BAEZ,mBAAAtS,qCAAc,SAAUuS,QAAOrT,EAAMsT,OACjC/Q,GAGAzB,mDAASU,iDAKzBsR,qCAA0B/K,MAAOvG,cAGzCV,2BAAA0B,IACI1B,2BAAA6B,IACI7B,2BAAAyS,qBAA4B/R,sCACEA,QAAQA,yBAAtCD,2BAAAuB,IACIhC,oDAAQA,qBAAmE,SAA5D8F,KAAK,cAAc,6DAAiBpF,eAAUb,MAAM,iCAAhBa,kDAA2BA,kCAC9EV,oDAAQA,qBAAqE,SAA9D8F,KAAK,cAAc,6DAAiBpF,eAAUb,MAAM,mCAAhBa,kDAA6BA,qEAEpFV,2BAAA0S,qBACI1S,2BAAA2S,IACIL,iBAAYM,iBAAiB,QAASC,OAAQnS,iCAAgCA,iBAAiBoS,mCAAmC,IACnHC,qBACP,kBAAA/S,8BAAAgT,+EAH0BtS,cAOsCA,0CAA5ED,2BAAA4B,IACIiQ,kCAAwB5R,sEADqBA,8CAGvBA,yBAA1BD,2BAAA6B,IACoC5B,sDAAhCD,2BAAA8B,IACIvC,2BAAA0C,IACI1C,2BAAA2C,qBAA4BjC,mCAC5BV,2BAAA4C,IACI5C,gCAAS,SAAUuS,sCAAO7R,iDAM1BV,gCAAS,SAAUuS,sCAAO7R,6FAatDV,2BAAAiT,IACIjT,2BAAAkT,IACIlT,2BAAAmT,IACInT,2BAAAoT,IACIpT,2BAAAiD,IACIjD,2BAAAkD,IACIlD,2BAAAmD,qBAAiCzC,kCAEZA,oBAAoBA,mBAAiB2S,yBAA9D5S,2BAAA6S,IACItT,2BAAAqD,GAAwB,wBAAM3C,mBAAiB2S,sGAO3D5S,kDAAiCC,oCAARvB,wBAAzBsB,oDAAW,sBAAmGtB,EAAKuM,cAAlDjJ,IAAKtD,EAAKY,KACvEC,2BAAAuD,IACIvD,2BAAAuT,IACIvT,oDACIA,8BAAO8F,KAAK,cAAc,6DAAiBpF,eAAWb,MAAOV,EAAKY,GAAKwS,2BAAO7R,sBAAoBvB,EAAKY,iCAA5DW,cACFvB,EAAKqU,oBAA9C/S,wCAAW,OAAQS,IAAK/B,EAAKqU,iCAC7B/S,2BAAAgT,QAGAzT,mDAASb,EAAKF,WAEaE,EAAKuU,2BAApCjT,2BAAAgD,qBAAoDtE,EAAKuU,mDAE7D1T,2BAAA0D,KAC+BvE,EAAK+C,QAAU/C,EAAKwU,2BAA/ClT,4BAAAmT,qBAA+DzU,EAAKwU,gCACpElT,mCAAaqB,qBAAQ3C,EAAK2G,KAAoB3G,EAAK+C,WAAexB,WAASqB,MAAM5C,EAAK+C,yBAGlFxB,QAAMmT,8DAAlBpT,+BAC0CtB,EAAK+M,WAAa/M,EAAKY,IAAMW,0BAAnE2R,wCAAgBlT,EAAK+M,kBAAyDvD,OAAQjI,oBAAoBuI,KAAMvI,wBAAwBvB,KAAMA,uFAI1J6S,yCAA8B3H,wBAAyB3J,0BAA0BmJ,SAAUnJ,WAAWkQ,kBAAmBlQ,oBAAoBqH,sBAAuBrH,8BAG9HA,4EAA9CD,2BAAAqT,IACI9T,2BAAA+T,IACI/T,2BAAAgU,IACIhU,2BAAAiU,IACIjU,2BAAAkU,IACIlU,2BAAAmU,IACInU,2BAAAoU,qBAAiC1T,sFAO7CD,kDAAiCC,qCAARvB,wBAAzBsB,oDAAW,sBAAoGtB,EAAKuM,cAAlDjJ,IAAKtD,EAAKY,KACxEC,oDAAW,oBAAoCb,EAAKmC,SAChDtB,2BAAAqU,IACIrU,oDACIA,8BAAO8F,KAAK,cAAc,6DAAiBpF,cAAUb,MAAOV,EAAKY,GAAKwS,2BAAO7R,qBAAmBvB,EAAKY,iCAA1DW,aAC3CV,mDAASb,EAAKF,WAEaE,EAAKuU,2BAApCjT,2BAAA6T,qBAAoDnV,EAAKuU,mDAEpCvU,EAAK+C,sBAA9BzB,2BAAA8T,IACIvU,6BAAM8B,qBAAQ3C,EAAK2G,KAAoB3G,EAAK+C,WAAexB,WAASqB,MAAM5C,EAAK+C,iFAQ3GlC,2BAAAwU,IACIxU,2BAAAyU,IACkD/T,4CAA9CD,2BAAAiU,IACI1U,2BAAA2U,IACI3U,2BAAA4U,IACI5U,2BAAA6U,IACI7U,2BAAA8U,IACI9U,2BAAA+U,qBAAiCrU,sFAO7CD,kDAAiCC,qCAARvB,wBAAzBsB,oDAAW,sBAAoGtB,EAAKuM,cAAlDjJ,IAAKtD,EAAKY,KACxEC,oDAAW,oBAAoCb,EAAKmC,SAChDtB,2BAAAgV,IACIhV,oDACIA,8BAAO8F,KAAK,cAAc,6DAAiBpF,cAAUb,MAAOV,EAAKY,GAAKwS,2BAAO7R,qBAAmBvB,EAAKY,iCAA1DW,aAC3CV,mDAASb,EAAKF,WAEaE,EAAKuU,2BAApCjT,2BAAAwU,qBAAoD9V,EAAKuU,mDAEpCvU,EAAK+C,sBAA9BzB,2BAAAyU,IACIlV,6BAAM8B,qBAAQ3C,EAAK2G,KAAoB3G,EAAK+C,WAAexB,WAASqB,MAAM5C,EAAK+C,6GAMnGiT,GACAnV,2BAAAoV,IACIpV,2BAAAqV,qBAA4B3U,6BAC5BV,2BAAAsV,IACItV,2BAAAuV,IACIvV,2BAAAwV,IAAkBxV,yCAAMoS,kBAAQ1R,YAAUA,WAAUA,sFAA2CA,8BAC/FV,2BAAAyV,IACIzV,6BAAM8B,UAAQpB,WAASqB,MAAMrB,yBAGLA,0BAAhCD,2BAAAiV,IACI1V,2BAAA2V,qBAAqBjV,gCACrBV,2BAAA4V,IACI5V,6BAAM8B,UAAQpB,WAASqB,MAAMrB,6DAGVA,uBAA3BD,2BAAAoV,IACI7V,2BAAA8V,qBAAqBpV,2BACrBV,2BAAA+V,IACI/V,6BAAM8B,UAAQpB,WAASqB,MAAMrB,wDAGLA,0BAAhCD,2BAAAuV,IACIhW,2BAAAiW,qBAAqBvV,sCACrBV,2BAAAkW,IACuDxV,iCAAnDD,mCAAMqB,UAAQpB,WAASqB,MAAMrB,8BACEA,oBAAoBA,mBAAiBiT,2BAApElT,4BAAA0V,qBAAoFzV,mBAAiBiT,sFAGhFjT,kCAA7BD,2BAAA2V,IACIpW,2BAAAqW,wCAAqB3V,kCAA8B4V,GAAItW,qBAA0C,OAA1CuW,qBAAuB7V,kBAC9EV,2BAAAwW,IACIxW,6BAAM8B,qBAASpB,mBAAiBoF,KAAoBpF,mBAAiBwB,WAAexB,WAASqB,MAAMrB,mBAAiBwB,yDAG5HlC,2BAAAyW,IACIzW,2BAAA0W,qBAAqBhW,6BACrBV,2BAAA2W,IACI3W,6BAAM8B,UAAQpB,WAASqB,MAAMrB,sDAIzCV,2BAAA4W,IACI5W,oDAAQA,qBAA6D,SAAtD8F,KAAK,iBAAiB,kEAAoBpF,6CAAAA,kDAAeA,kCAE5EV,uDAAc,sBAA+EU,+BAA+BA,aAA7F6R,wCAAO7R,4CAAWmW,6CAAYnW,+DAA6EA,+BAC1IsR,gCAC2BtR,2BAA3BD,2BAAAqW,IACI9W,2BAAA+W,IACI/W,oDACIA,8BAAO8F,KAAK,iBAAiB,kEAAoBpF,4CAAAA,aACjDV,kCAAW,QAAQ8B,UAAQpB,8EAI2DA,6BAAlGD,0DAAW,2CAA2DC,0BAClEV,kCAAW,UAAWuS,yCAAO7R,sBAAsBA,yBAC/CV,mDAASU,kCACTsW,KAIJhX,2BAAAiX,IACIjX,2BAAAkX,qBACIlX,8BAAO8F,KAAK,aAAa,QAAQqR,YAAY,2DAAazW,gBAAY0W,SAAU1W,mBAAkBX,GAAG,gDAA3CW,eAC1DV,6BAAAqX,qBAAiD3W,2CAEtCA,kCACfD,2CAAqB,SAAU8R,wCAAO7R,2EAAmBA,mDADzDD,6DAAuC,uBAAsFC,oBAA5E6R,wCAAO7R,wDAAiB0W,UAAW1W,+BAA8DA,+EAI1JV,oDAAW,6BAA6CU,wBACpDV,kCAAW,UAAWuS,yCAAO7R,oBAAoBA,uBAC7CV,mDAASU,+BACT4W,KAIJtX,2BAAAuX,qBACIvX,uCAAgB,kEAAoBU,wCAAAA,aACLA,UAAQjB,sBAAvCgB,2BAAA+W,qBAAkD9W,mBAAmBA,UAAQjB,6DAQ3DiB,UAAUA,uBAAxDD,2BAAAgX,IACIzF,gCAAqBzK,MAAO7G,QAAQgH,SAAUhH,WAAW2G,aAAc3G,eAAeqQ,KAAMrQ,OAAOwG,KAAMxG,OAAOgX,QAAShX,aAAzH,kBACIV,2BAAA2X,wCACOjX,iCACHV,iCAAM,sBAAIU,QAAMX,+CAAgBW,iCAEpCV,2BAAA4X,IACmClX,WAAS+O,mBAAxChP,2BAAAoX,IACI7X,2BAAA8X,qBAAyBpX,kCACzBV,qCAAc,oBAAqBuS,yCAAO7R,eAAakP,8BAAalP,uDAExED,2BAAAsX,IACI/X,qCAAc,mBAAoBuS,wCAAO7R,uDAASA,kCAEtDV,2BAAAgY,IACoCtX,QAAMmJ,2BAAtCpJ,2BAAAwX,IACIjY,2BAAAkY,qBAAsBxX,gCACtBV,2BAAAmY,IACmCzX,QAAMmJ,2BAArCpJ,wCAAW,cAAuCqB,UAAQpB,QAAMmJ,yDACjCnJ,QAAMmJ,2BAArCpJ,wCAAW,cAAuCqB,UAAQpB,QAAMmJ,8FAGxCnJ,QAAMoJ,0BAAtCrJ,2BAAA2X,IACIpY,2BAAAqY,qBAAsB3X,+BACtBV,2BAAAsY,IACmC5X,QAAMoJ,0BAArCrJ,wCAAW,cAAsCqB,UAAQpB,QAAMoJ,wDAChCpJ,QAAMoJ,0BAArCrJ,wCAAW,cAAsCqB,UAAQpB,QAAMoJ,6FAGvCpJ,QAAMwH,yBAAtCzH,2BAAA8X,IACIvY,2BAAAwY,qBAAsB9X,kCACtBV,2BAAAyY,IACIzY,2BAAA0Y,IACI1Y,6BAAM8B,UAAQpB,QAAMwH,gBAAiB,sEAQhDxH,iEAAjBD,2BAAAkY,IACI3Y,2BAAA4Y,qBAAsBlY,4BACtBV,2BAAA6Y,wCACOnY,kCACHV,qBAAoF,KAAhFgB,KAAMN,OAAKsQ,OAAOvB,IAAM/O,OAAKsQ,OAAOvB,2BAAc/O,oCAAgCoY,uCAASpY,kCAEnGV,gCAAS,kBAAmBgB,KAAMN,OAAKsQ,OAAOvB,IAAM/O,OAAKsQ,OAAOvB,2BAAc/O"}