www.luckyeo.com
Open in
urlscan Pro
104.17.247.119
Public Scan
Submitted URL: https://lle.soundestlink.com/ce/c/65c1e354c22e051e087b9e4c/6711d0c6cddbec1e7a7ed4c6/67130b99d2a3ef710c09abb1?signature=0122e8...
Effective URL: https://www.luckyeo.com/products/dust-proof-screen-protector?omnisendContactID=65c1e354c22e051e087b9e4c&utm_campaign=cam...
Submission: On October 21 via api from BE — Scanned from DE
Effective URL: https://www.luckyeo.com/products/dust-proof-screen-protector?omnisendContactID=65c1e354c22e051e087b9e4c&utm_campaign=cam...
Submission: On October 21 via api from BE — Scanned from DE
Form analysis
3 forms found in the DOMGET /search
<form action="/search" method="get" class="">
<div tabindex="-1" class="tw-flex tw-relative header__search">
<input autocomplete="off" name="q" type="text"
class="tw-w-full tw-flex-1 tw-h-10 tw-py-0 tw-pl-[14px] tw-pr-13 tw-bg-header-search tw-text-current tw-text-sm tw-leading-none tw-rounded-global tw-border tw-border-solid tw-border-header tw-placeholder-current header__search-input"
placeholder="Search...">
<button type="submit" class="tw-flex tw-items-center tw-px-[14px] tw-m-0 tw-bg-transparent tw-text-current tw-border-none tw-outline-none tw-cursor-pointer tw-h-full tw-absolute tw-right-0 header__search-icon" tabindex="-1"><svg class=""
width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path d="M11.16 1a9.16 9.16 0 1 1 0 18.322A9.16 9.16 0 0 1 11.16 1zm0 1.629a7.532 7.532 0 1 0 0 15.064 7.532 7.532 0 0 0 0-15.064zm5.465 14.148 1.152-1.152L23 20.848 21.848 22l-5.223-5.223z" fill="currentColor"></path>
</svg></button>
<button type="button" class="tw-hidden tw-justify-center tw-items-center tw-pr-2 tw-pl-6 tw-m-0 tw-bg-transparent tw-text-header-color tw-border-none tw-outline-none tw-cursor-pointer header__search-close "><svg class="" width="14" height="14"
xmlns="http://www.w3.org/2000/svg">
<path d="m3 3 8.485 8.485m0-8.485L3 11.485" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"></path>
</svg></button>
</div>
</form>
<form class="product-info product-info-387037bb-504a-47f0-af33-91fdc9ceb9cc">
<style>
.product-info__body>.product-info__block:first-child {
margin-top: 0;
}
.product-info__body>.product-info__block:last-child {
margin-bottom: 0;
}
@media (max-width: 959.98px) {
[data-section-id="1539149753700"].card-spacing {
padding-top: 0px;
}
}
</style>
<input type="hidden" name="product_id" value="387037bb-504a-47f0-af33-91fdc9ceb9cc">
<input type="hidden" name="variant_id" id="selected_variant_id_387037bb-504a-47f0-af33-91fdc9ceb9cc" class="selected_variant_id_387037bb-504a-47f0-af33-91fdc9ceb9cc" value="8a4f5cb8-2679-4990-8289-744a17435d8d">
<div class="tw-relative product-info__body" data-sold-out="Sorry, the goods have been sold out." data-unavailable="This combination does not exist, please try other.">
<div class="product-info__header product-info__block tw-my-3">
<h1 class="tw-mt-0 tw-mb-0 tw-title-sm type-title-font-family tw-break-words product-title-transform product-info__header_title">Powerful Protection for Your new phone screen - Dust-Proof Screen Protector</h1>
</div>
<div class="product-info__header_price-wrapper product-info__block tw-my-6">
<div class="tw-body-plus-1 tw-leading-none tw-font-semibold">Price</div>
<div class="tw-flex tw-justify-between tw-items-center tw-mt-3 lg:tw-mt-[10px]">
<div class="tw-flex tw-flex-wrap">
<del class="tw-text-price-color tw-mr-3 product-info__header_compare-at-price money notranslate">€36.79</del>
<div class="tw-text-price-color tw-mr-3 product-info__header_price money notranslate">€18.39</div>
<div class="tw-flex tw-items-center tw-text-save-color product-info__save"> Save <span class="product-info__header_save-amount money notranslate">€18.39</span>
</div>
</div>
</div>
</div>
<div class="bootstrap">
<div class="plugin__wrappers d-flex flex-column">
<div class="plugin_modals position-relative plugin_modals-rebate" id="Modal206974" style="order: 8">
<style>
#Modal206974 {
--modal_background: linear-gradient(0deg, #ebc19e, #fff3e8 100%);
--modal_caret_background: #fff2e9;
--modal_title_color: #B83D07;
--modal_close_color: #FFFFFF;
--modal_close_background_color: #F03010;
--list_border_color: #dddddd;
}
@media (max-width: 767.98px) {
#Modal206974 .coupon_plugin__coupon:last-child {
padding-bottom: 0;
}
}
#Modal206974 .modal-footer {
position: relative;
margin-top: -30px;
}
#Modal206974 .modal-footer::before {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 150%;
background-image: url(//img.fantaskycdn.com/oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg);
background-repeat: no-repeat;
background-size: 100%;
pointer-events: none;
}
@media (max-width: 767.98px) {
#Modal206974 .discount-present-item:last-child {
padding-bottom: 40px;
}
#Modal206974 .plugin_modals__wrapper-list>a:last-child {
padding-bottom: 14px;
}
}
</style>
<!-- 入口 -->
<div class="plugin_modals__list" data-toggle="modal" data-target="#target_Modal206974" impr="1" imprevt="1">
<div class="plugin_modals__list-name">
<style>
a.product_detail_rebate_list {
display: inline-flex;
gap: 4px;
align-items: start;
color: #EB391B;
}
a.product_detail_rebate_list:hover {
color: #EB391B;
}
a.product_detail_rebate_list .money {
white-space: nowrap;
}
.plugin_modals__modal .rebate-icon {
display: none;
}
.rebate-icon {
padding-top: 4px;
}
</style>
<a class="product_detail_rebate_list" impr="1" imprevt="1" href="/promotions/rebate/744da5cc-61cf-4a9e-b882-87022f58256d">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="24" fill="none" class="rebate-icon">
<g clip-path="url(#a)">
<path fill="#EB391B" fill-rule="evenodd" d="M9.127 1.275a1.576 1.576 0 0 0-2.255 0l-.693.709a1.576 1.576 0 0 1-1.146.475l-.991-.012a1.576 1.576 0 0 0-1.595 1.595l.011.991a1.576 1.576 0 0 1-.475 1.146l-.708.693a1.576 1.576 0 0 0 0 2.255l.709.693c.308.3.48.716.475 1.146l-.012.992a1.576 1.576 0 0 0 1.595 1.594l.991-.011a1.577 1.577 0 0 1 1.146.475l.693.709a1.575 1.575 0 0 0 2.255 0l.693-.71a1.576 1.576 0 0 1 1.146-.475l.992.012a1.575 1.575 0 0 0 1.594-1.594l-.011-.992a1.577 1.577 0 0 1 .475-1.146l.709-.693a1.575 1.575 0 0 0 0-2.255l-.71-.693a1.576 1.576 0 0 1-.475-1.146l.012-.991a1.576 1.576 0 0 0-1.594-1.595l-.992.011a1.576 1.576 0 0 1-1.146-.475l-.693-.708ZM5.84 6.92a1.08 1.08 0 1 0 0-2.16 1.08 1.08 0 0 0 0 2.16Zm4.32 4.32a1.08 1.08 0 1 0 0-2.161 1.08 1.08 0 0 0 0 2.16Zm.56-5.96a.793.793 0 0 1 0 1.12L6.4 10.72A.792.792 0 0 1 5.28 9.6L9.6 5.28a.792.792 0 0 1 1.12 0Z" clip-rule="evenodd"></path>
</g>
<defs>
<clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"></path></clipPath>
</defs>
</svg>
<div style="flex: 1;word-break: break-word">
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€92.04</span></b> more and save <b>10%</b> off
</li>
<li id="pdr__rule" class="pdr__rule">
Buy <b><span class="money notranslate">€138.06</span></b> more and save <b>15%</b> off
</li>
</div>
</a>
</div>
<div class="plugin_modals__list-labels text-right"></div>
</div>
</div>
</div>
</div>
<div class="tw-space-y-6 product-info__variants product-info__block tw-my-6">
<div class="product-info__variants-wrapper slider-switch product-info__variants_items !tw--mb-4" data-selected-variant="false">
<div class="tw-body-plus-1 tw-font-semibold tw-capitalize product-info__variants_title">Style</div>
<div class="tw-mt-[10px] tw-flex tw-flex-wrap product-info__variants_value-wrapper">
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option1-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option1-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="High-definition" checked="">
<label for="option1-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="High-definition" data-options-order="0" data-click="select" data-track="switch_variants"> High-definition </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option1-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option1-1-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="Anti-peep">
<label for="option1-1-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="Anti-peep" data-options-order="1" data-click="select" data-track="switch_variants"> Anti-peep </label>
</div>
</div>
<div class="product-info__variant-tips tw-mt-[-6px] tw-pb-[15px] tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a style</div>
</div>
<div class="product-info__variants-wrapper slider-switch product-info__variants_items !tw--mb-4" data-selected-variant="false">
<div class="tw-body-plus-1 tw-font-semibold tw-capitalize product-info__variants_title">Models</div>
<div class="tw-mt-[10px] tw-flex tw-flex-wrap product-info__variants_value-wrapper">
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 16 Pro Max" checked="">
<label for="option2-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 16 Pro Max" data-options-order="0" data-click="select" data-track="switch_variants"> For iPhone 16 Pro Max </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-1-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 16 Pro">
<label for="option2-1-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 16 Pro" data-options-order="1" data-click="select" data-track="switch_variants"> For iPhone 16 Pro </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-2-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 15 Pro Max">
<label for="option2-2-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 15 Pro Max" data-options-order="2" data-click="select" data-track="switch_variants"> For iPhone 15 Pro Max </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-3-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 15 Pro">
<label for="option2-3-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 15 Pro" data-options-order="3" data-click="select" data-track="switch_variants"> For iPhone 15 Pro </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-4-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 15 Plus">
<label for="option2-4-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 15 Plus" data-options-order="4" data-click="select" data-track="switch_variants"> For iPhone 15 Plus </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-5-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 15">
<label for="option2-5-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 15" data-options-order="5" data-click="select" data-track="switch_variants"> For iPhone 15 </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-6-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 14 Pro Max">
<label for="option2-6-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 14 Pro Max" data-options-order="6" data-click="select" data-track="switch_variants"> For iPhone 14 Pro Max </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-7-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 14 Pro">
<label for="option2-7-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 14 Pro" data-options-order="7" data-click="select" data-track="switch_variants"> For iPhone 14 Pro </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-8-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 14 Plus">
<label for="option2-8-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 14 Plus" data-options-order="8" data-click="select" data-track="switch_variants"> For iPhone 14 Plus </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-9-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 14">
<label for="option2-9-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 14" data-options-order="9" data-click="select" data-track="switch_variants"> For iPhone 14 </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-10-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 13 Pro Max">
<label for="option2-10-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 13 Pro Max" data-options-order="10" data-click="select" data-track="switch_variants"> For iPhone 13 Pro Max </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-11-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 13 Pro">
<label for="option2-11-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 13 Pro" data-options-order="11" data-click="select" data-track="switch_variants"> For iPhone 13 Pro </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-12-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 13">
<label for="option2-12-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 13" data-options-order="12" data-click="select" data-track="switch_variants"> For iPhone 13 </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-13-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 12 Pro Max">
<label for="option2-13-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 12 Pro Max" data-options-order="13" data-click="select" data-track="switch_variants"> For iPhone 12 Pro Max </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-14-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 12 Pro">
<label for="option2-14-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 12 Pro" data-options-order="14" data-click="select" data-track="switch_variants"> For iPhone 12 Pro </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-15-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 12">
<label for="option2-15-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 12" data-options-order="15" data-click="select" data-track="switch_variants"> For iPhone 12 </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-16-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 11/XR">
<label for="option2-16-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 11/XR" data-options-order="16" data-click="select" data-track="switch_variants"> For iPhone 11/XR </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-17-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 11 Pro/XS/X">
<label for="option2-17-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 11 Pro/XS/X" data-options-order="17" data-click="select" data-track="switch_variants"> For iPhone 11 Pro/XS/X </label>
</div>
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option2-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option2-18-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="For iPhone 11 Pro Max/XS Max">
<label for="option2-18-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="For iPhone 11 Pro Max/XS Max" data-options-order="18" data-click="select" data-track="switch_variants"> For iPhone 11 Pro Max/XS Max </label>
</div>
</div>
<div class="product-info__variant-tips tw-mt-[-6px] tw-pb-[15px] tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a models</div>
</div>
<div class="product-info__variants-wrapper slider-switch product-info__variants_items !tw--mb-4" data-selected-variant="false">
<div class="tw-body-plus-1 tw-font-semibold tw-capitalize product-info__variants_title">BUY MORE GET MORE</div>
<div class="tw-mt-[10px] tw-flex tw-flex-wrap product-info__variants_value-wrapper">
<div class="tw-relative tw-flex tw-items-center tw-mb-4 tw-mr-2 product-info__variants_value notranslate">
<input type="radio" class="tw-hidden product-info__variants_radio" name="option3-387037bb-504a-47f0-af33-91fdc9ceb9cc" id="option3-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" value="Buy 2 Get 1 Free (Each Only $6.66)"
checked="">
<label for="option3-0-387037bb-504a-47f0-af33-91fdc9ceb9cc-1539149753700" class="tw-flex tw-items-center tw-justify-center tw-min-w-[42px] tw-h-[42px] lg:tw-h-10 tw-px-4 tw-cursor-pointer tw-rounded-[1px] product-info__label"
data-variants-value="Buy 2 Get 1 Free (Each Only $6.66)" data-options-order="0" data-click="select" data-track="switch_variants"> Buy 2 Get 1 Free (Each Only $6.66) </label>
</div>
</div>
<div class="product-info__variant-tips tw-mt-[-6px] tw-pb-[15px] tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a buy more get more</div>
</div>
</div>
<div class="product-info__block tw-my-6 product-info__qty_container">
<div class="tw-body-plus-1 tw-font-semibold">Quantity</div>
<div class="tw-relative tw-flex tw-w-25 tw-h-[46px] lg:tw-h-11 tw-mt-[10px] tw-border tw-border-solid tw-border-line tw-rounded-[1px] product-info__qty notranslate" data-qty-type="select">
<select class="tw-absolute tw-inset-0 tw-w-full tw-h-full tw-pr-8 tw-pl-[14px] tw-z-10 type-body-font-family tw-body-plus-4 lg:tw-body-plus-2 tw-text-current tw-bg-transparent tw-border-none tw-cursor-pointer tw-appearance-none">
<option value="1" selected="">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10+</option>
</select>
<input id="product_quantity_387037bb-504a-47f0-af33-91fdc9ceb9cc" name="quantity" type="text" value="1"
class="tw-box-border tw-absolute tw-inset-0 tw-w-full tw-h-full tw-px-4 tw-body-plus-4 lg:tw-body-plus-2 tw-bg-transparent tw-border-none tw-appearance-none type-body-font-family product-info__qty_num product_quantity_387037bb-504a-47f0-af33-91fdc9ceb9cc">
<div class="tw-absolute tw-flex tw-top-1/2 tw-right-3 tw-transform tw--translate-y-1/2 tw-pointer-events-none select-icon"><svg class="" width="12" height="10" xmlns="http://www.w3.org/2000/svg">
<path d="M10.945 2.54a.65.65 0 0 1 .068.84l-.068.08-4.243 4.242a.647.647 0 0 1-.36.183l-.1.008a.648.648 0 0 1-.378-.122l-.081-.069L1.54 3.46a.65.65 0 0 1 .84-.988l.08.068 3.782 3.783 3.784-3.783a.65.65 0 0 1 .919 0z" fill="currentColor"
fill-rule="nonzero"></path>
</svg></div>
</div>
</div>
<style>
@keyframes free__shipping-progress-bar-stripes {
0% {
background-position-x: -16px;
}
}
@keyframes free__shipping-progress-bar-stripes-rtl {
0% {
background-position-x: 16px;
}
}
.product-info__free-shipping {
background: white;
color: black;
border: 1px solid var(--color-primary-btn-bg);
}
[data-section-id="1539149753700"] .free__shipping-progress-bar {
background: linear-gradient(to right, rgba(255, 204, 213, 1), rgba(249, 125, 187, 1));
transition: width 1.2s ease;
}
[data-section-id="1539149753700"] .free__shipping-progress-bar-striped::before {
content: "";
display: block;
width: 100%;
height: 100%;
background-image: linear-gradient(135deg,
rgba(255, 255, 255, .1) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, .1) 50%,
rgba(255, 255, 255, .1) 75%,
transparent 75%,
transparent);
background-size: 16px 16px;
animation: 1s linear infinite free__shipping-progress-bar-stripes;
}
[data-section-id="1539149753700"] .free__shipping-text {
text-shadow: 0 1px 1px rgba(46, 22, 4, 0.25);
}
html[dir="rtl"] [data-section-id="1539149753700"] .free__shipping-progress-bar {
left: initial;
right: 0;
background: linear-gradient(to left, rgba(255, 204, 213, 1), rgba(249, 125, 187, 1));
}
html[dir="rtl"] [data-section-id="1539149753700"] .free__shipping-progress-bar-striped::before {
background-image: linear-gradient(45deg,
rgba(255, 255, 255, .1) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, .1) 50%,
rgba(255, 255, 255, .1) 75%,
transparent 75%,
transparent);
animation-name: free__shipping-progress-bar-stripes-rtl;
}
</style>
<div class="product-info__free-shipping tw-relative tw-h-[30px] tw-mt-6 tw-text-white tw-bg-[#403934] tw-bg-opacity-[96] tw-rounded-sm tw-overflow-hidden">
<div class="free__shipping-progress-bar free__shipping-progress-bar-striped tw-absolute tw-top-0 tw-left-0 tw-h-full tw-w-0" style="width: 0%;"></div>
<div class="tw-absolute tw-inset-0">
<div class="tw-box-border tw-px-6 tw-flex tw-justify-center tw-leading-[30px]">
<svg class="tw-flex-shrink-0 tw-mt-[3px]" width="24" height="24" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M14.698 7.522V5.631A.633.633 0 0 0 14.063 5H2.635A.633.633 0 0 0 2 5.63v10.721c0 .349.284.63.635.63H4.59A2.536 2.536 0 0 0 7.08 19a2.536 2.536 0 0 0 2.488-2.018h5.816A2.536 2.536 0 0 0 17.873 19a2.536 2.536 0 0 0 2.489-2.018h1.003c.35 0 .635-.282.635-.63v-3.62a.628.628 0 0 0-.081-.308l-2.594-4.58a.636.636 0 0 0-.553-.322h-4.074zm-.952-1.26a.316.316 0 0 0-.317-.316H3.269a.316.316 0 0 0-.317.315v9.46c0 .174.143.315.318.315h1.308a2.536 2.536 0 0 1 2.501-2.081c1.251 0 2.291.898 2.501 2.08h4.166V6.262zm.952 2.206v7.568h.674l-.004.026a2.535 2.535 0 0 1 2.505-2.107c1.251 0 2.29.898 2.5 2.081h.357a.316.316 0 0 0 .318-.315v-2.744h-3.27a.316.316 0 0 1-.318-.315V9.95c0-.174.142-.315.318-.315h1.469l-.661-1.167h-3.888zm-6.031 8.01c0 .87-.711 1.576-1.588 1.576a1.582 1.582 0 0 1-1.587-1.576c0-.871.71-1.577 1.587-1.577s1.588.706 1.588 1.576zm9.206 1.576c.877 0 1.587-.706 1.587-1.576 0-.871-.71-1.577-1.587-1.577s-1.587.706-1.587 1.576c0 .871.71 1.577 1.587 1.577zm.413-7.399c0-.11.09-.2.2-.2h1.225l.964 1.703h-2.19a.2.2 0 0 1-.2-.2v-1.303z"
fill="currentColor"></path>
</svg>
<span class="free__shipping-text tw-ml-2 tw-text-xs tw-leading-[30px] tw-font-bold tw-break-all">Buy <span class="money notranslate">€54.30</span> more to enjoy FREE Shipping</span>
</div>
</div>
</div>
<div class="tw-space-y-3 product-info__block tw-my-6">
<div class="tw-flex tw-items-center">
<svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
<path
d="M17.14 13.65h-3.457c.327-1.022.517-2.081.568-3.164h3.751a7.954 7.954 0 0 1-.862 3.165zm-5.784 4.259a13.405 13.405 0 0 0 1.968-3.285h3.226a8.038 8.038 0 0 1-5.194 3.285zM3.45 14.624h3.227a13.407 13.407 0 0 0 1.968 3.285 8.039 8.039 0 0 1-5.195-3.285zm-1.451-4.138h3.751c.051 1.083.24 2.142.568 3.165H2.86a7.97 7.97 0 0 1-.862-3.165zM2.86 6.35h3.457a12.244 12.244 0 0 0-.568 3.164H1.998A7.97 7.97 0 0 1 2.86 6.35zm5.784-4.258a13.416 13.416 0 0 0-1.968 3.285H3.449a8.04 8.04 0 0 1 5.195-3.285zm7.906 3.285h-3.226a13.414 13.414 0 0 0-1.968-3.285 8.04 8.04 0 0 1 5.194 3.285zm-4.3 0h-4.5A12.805 12.805 0 0 1 10 2.007a12.807 12.807 0 0 1 2.25 3.37zM6.734 9.513C6.79 8.43 7 7.37 7.358 6.35h5.284c.359 1.02.568 2.08.624 3.164H6.734zm.624 4.138a11.26 11.26 0 0 1-.624-3.165h6.532a11.26 11.26 0 0 1-.624 3.165H7.358zm.392.973h4.5A12.799 12.799 0 0 1 10 17.992a12.797 12.797 0 0 1-2.25-3.368zm10.252-5.11h-3.75a12.265 12.265 0 0 0-.569-3.165h3.457c.493.96.794 2.03.862 3.164zM1 10c0 4.963 4.037 9 9 9s9-4.037 9-9-4.037-9-9-9-9 4.037-9 9z"
fill="currentColor"></path>
</svg>
<div class="product-info__sales_points-item tw-body-minus-1 tw-pl-3">Worldwide shipping</div>
</div>
<div class="tw-flex tw-items-center">
<svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
<path
d="M18.41 14.672a1.811 1.811 0 0 0-1.743-1.359c-.834 0-1.538.578-1.743 1.359H13.81v-4.366h5.238v4.366h-.638zm-1.743 1.552a1.04 1.04 0 0 1-.929-.582 1.042 1.042 0 0 1 0-.97 1.04 1.04 0 0 1 .929-.582c.404 0 .757.237.928.582a1.042 1.042 0 0 1 0 .97 1.04 1.04 0 0 1-.928.582zm-3.81-1.552h-5.4a1.811 1.811 0 0 0-1.743-1.359c-.833 0-1.538.578-1.743 1.359H.952V4.97h11.905v9.702zm-7.143 1.552a1.04 1.04 0 0 1-.928-.582 1.042 1.042 0 0 1 0-.97 1.04 1.04 0 0 1 .928-.582c.405 0 .757.237.929.582a1.042 1.042 0 0 1 0 .97 1.04 1.04 0 0 1-.929.582zM16.9 6.91l1.699 2.426h-4.79V6.91H16.9zm.486-.97H13.81V4H0v11.642h3.971c.205.78.91 1.358 1.743 1.358.834 0 1.538-.577 1.743-1.358H14.924c.205.78.91 1.358 1.743 1.358.833 0 1.538-.577 1.743-1.358H20V9.666L17.386 5.94z"
fill="currentColor"></path>
</svg>
<div class="product-info__sales_points-item tw-body-minus-1 tw-pl-3">Free returns</div>
</div>
<div class="tw-flex tw-items-center">
<svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
<path
d="M9.496 0 0 5.45v8.993L9.5 20l9.5-5.522V5.281L9.496 0zm-7.96 5.745 7.968-4.573 3.01 1.673-7.67 4.77-3.308-1.87zm4.321 2.442 7.678-4.775 3.929 2.183-7.968 4.648-3.639-2.056zm4.149 2.94 7.983-4.657v7.416l-7.983 4.64v-7.4zM1.01 13.852V6.62l3.34 1.888v3.007l1.012.45V9.079l3.631 2.052v7.391l-7.983-4.67z"
fill="currentColor"></path>
</svg>
<div class="product-info__sales_points-item tw-body-minus-1 tw-pl-3">24/7 customer support</div>
</div>
<div class="tw-flex tw-items-center">
<svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
<path
d="M9.5 1c2.757 0 5 2.243 5 5v.813H18v12.34H1V6.814h3.5V6c0-2.757 2.243-5 5-5zM17 7.813H2v10.34h15V7.814zM9.5 10.5a1.25 1.25 0 0 1 .5 2.394v2.318H9v-2.318a1.25 1.25 0 0 1 .5-2.394zm0-8.5c-2.205 0-4 1.794-4 4v.813h8V6c0-2.206-1.794-4-4-4z"
fill="currentColor"></path>
</svg>
<div class="product-info__sales_points-item tw-body-minus-1 tw-pl-3">Secure payments</div>
</div>
</div>
<div class="product-info__btn product-info__block tw-flex tw-flex-col tw-mt-6 tw-space-y-[10px]">
<button type="button" class="tw-relative tw-mx-0 tw-h-[54px] tw-body-plus-2 tw-font-semibold tw-cursor-pointer tw-rounded-btn tw-secondary-btn product-info__add-to-cart" data-click="addToCart" data-on-sale="Add to Cart"
data-adding="Adding" data-added="Added" data-unavailable="Unavailable" data-sold-out="Sold out" data-btn-class=" tw-secondary-btn "> Add to Cart </button>
<button type="button" class="tw-h-[54px] tw-mx-0 tw-primary-btn tw-border-none tw-body-plus-2 tw-font-semibold tw-rounded-btn product-info__buy-now" data-click="submit"> Buy Now </button>
<div class="paypal-express-button-container notranslate" id="paypal-express-button-container1539149753700">
<div id="zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg" class="paypal-buttons paypal-buttons-context-iframe paypal-buttons-label-unknown paypal-buttons-layout-horizontal" data-paypal-smart-button-version="5.0.461"
style="height: 54px; transition: 0.2s ease-in-out;">
<style nonce="">
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg {
position: relative;
display: inline-block;
width: 100%;
min-height: 25px;
min-width: 150px;
font-size: 0;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>iframe.component-frame {
z-index: 100;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>iframe.prerender-frame {
transition: opacity .2s linear;
z-index: 200;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>iframe.visible {
opacity: 1;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>iframe.invisible {
opacity: 0;
pointer-events: none;
}
#zoid-paypal-buttons-uid_241d9772e4_mdi6mjk6ntg>.smart-menu {
position: absolute;
z-index: 300;
top: 0;
left: 0;
width: 100%;
}
</style><iframe allowtransparency="true"
name="__zoid__paypal_buttons__eyJzZW5kZXIiOnsiZG9tYWluIjoiaHR0cHM6Ly93d3cubHVja3llby5jb20ifSwibWV0YURhdGEiOnsid2luZG93UmVmIjp7InR5cGUiOiJwYXJlbnQiLCJkaXN0YW5jZSI6MH19LCJyZWZlcmVuY2UiOnsidHlwZSI6InJhdyIsInZhbCI6IntcInVpZFwiOlwiem9pZC1wYXlwYWwtYnV0dG9ucy11aWRfMjQxZDk3NzJlNF9tZGk2bWprNm50Z1wiLFwiY29udGV4dFwiOlwiaWZyYW1lXCIsXCJ0YWdcIjpcInBheXBhbC1idXR0b25zXCIsXCJjaGlsZERvbWFpbk1hdGNoXCI6e1wiX190eXBlX19cIjpcInJlZ2V4XCIsXCJfX3ZhbF9fXCI6XCJcXFxcLnBheXBhbFxcXFwuKGNvbXxjbikoOlxcXFxkKyk/JFwifSxcInZlcnNpb25cIjpcIjEwXzNfM1wiLFwicHJvcHNcIjp7XCJlbnZcIjpcInByb2R1Y3Rpb25cIixcImNvbW1pdFwiOnRydWUsXCJzdHlsZVwiOntcImxhYmVsXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImxheW91dFwiOlwiaG9yaXpvbnRhbFwiLFwiY29sb3JcIjpcImdvbGRcIixcInNoYXBlXCI6XCJyZWN0XCIsXCJ0YWdsaW5lXCI6ZmFsc2UsXCJoZWlnaHRcIjo1NCxcInBlcmlvZFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJtZW51UGxhY2VtZW50XCI6XCJiZWxvd1wiLFwiZGlzYWJsZU1heFdpZHRoXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImRpc2FibGVNYXhIZWlnaHRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiYm9yZGVyUmFkaXVzXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifX0sXCJmdW5kaW5nXCI6e1wiZGlzYWxsb3dlZFwiOltcImNyZWRpdFwiXX0sXCJvbkFwcHJvdmVcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF8wMzcyODcyMjUzX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJvbkFwcHJvdmVcIn19LFwiY3JlYXRlT3JkZXJcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF84YzhmNWIyNTgyX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJjcmVhdGVPcmRlclwifX0sXCJjc3BOb25jZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJhbGxvd0JpbGxpbmdQYXltZW50c1wiOnRydWUsXCJhbW91bnRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiYXBpU3RhZ2VIb3N0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImFwcGxlUGF5XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImFwcGxlUGF5U3VwcG9ydFwiOmZhbHNlLFwiYnJhbmRlZFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJidXR0b25Mb2NhdGlvblwiOlwid3d3Lmx1Y2t5ZW8uY29tXCIsXCJidXR0b25TZXNzaW9uSURcIjpcInVpZF82ZTVhOTc3Nzc1X21kaTZtams2bnRnXCIsXCJidXR0b25TaXplXCI6XCJodWdlXCIsXCJidXllckNvdW50cnlcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiY2xpZW50QWNjZXNzVG9rZW5cIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiY3VzdG9tZXJJZFwiOlwiXCIsXCJjbGllbnRJRFwiOlwiQVV3b1JsdjNpWjNqdDNvM2hoY2Z0X3RaNWc2dHZlZkVwakNmOVlOR2VIN3E4cF9XcmFsZWl0a0tmTG5XSXM4SExwemFsZ1JBNUFNVDBCWU9cIixcImNsaWVudE1ldGFkYXRhSURcIjpcInVpZF80ZjkxZWZjMDlkX21kaTZtams2bnRnXCIsXCJjb21wb25lbnRzXCI6W1wiYnV0dG9uc1wiXSxcImNyZWF0ZUJpbGxpbmdBZ3JlZW1lbnRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiY3JlYXRlU3Vic2NyaXB0aW9uXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImNyZWF0ZVZhdWx0U2V0dXBUb2tlblwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJjc3BcIjp7XCJub25jZVwiOlwiXCJ9LFwiY3VycmVuY3lcIjpcIlVTRFwiLFwiZGVidWdcIjpmYWxzZSxcImRpc2FibGVDYXJkXCI6W10sXCJkaXNhYmxlRnVuZGluZ1wiOltcImNhcmRcIixcImJhbmNvbnRhY3RcIixcImJsaWtcIixcImVwc1wiLFwiZ2lyb3BheVwiLFwiaWRlYWxcIixcIm1lcmNhZG9wYWdvXCIsXCJteWJhbmtcIixcInAyNFwiLFwic2VwYVwiLFwic29mb3J0XCIsXCJ2ZW5tb1wiXSxcImRpc2FibGVTZXRDb29raWVcIjp0cnVlLFwiZGlzcGxheU9ubHlcIjpbXSxcImVuYWJsZUZ1bmRpbmdcIjpbXCJwYXlsYXRlclwiXSxcImVuYWJsZVRocmVlRG9tYWluU2VjdXJlXCI6ZmFsc2UsXCJlbmFibGVWYXVsdFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJleHBlcmltZW50XCI6e1wiZW5hYmxlVmVubW9cIjpmYWxzZSxcInZlbm1vVmF1bHRXaXRob3V0UHVyY2hhc2VcIjpmYWxzZSxcInZlbm1vV2ViRW5hYmxlZFwiOmZhbHNlfSxcImV4cGVyaW1lbnRhdGlvblwiOnt9LFwiZmxvd1wiOlwicHVyY2hhc2VcIixcImZ1bmRpbmdFbGlnaWJpbGl0eVwiOntcInBheXBhbFwiOntcImVsaWdpYmxlXCI6dHJ1ZSxcInZhdWx0YWJsZVwiOmZhbHNlfSxcInBheWxhdGVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOmZhbHNlLFwicHJvZHVjdHNcIjp7XCJwYXlJbjNcIjp7XCJlbGlnaWJsZVwiOmZhbHNlLFwidmFyaWFudFwiOm51bGx9LFwicGF5SW40XCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhcmlhbnRcIjpudWxsfSxcInBheWxhdGVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhcmlhbnRcIjpudWxsfX19LFwiY2FyZFwiOntcImVsaWdpYmxlXCI6ZmFsc2UsXCJicmFuZGVkXCI6dHJ1ZSxcImluc3RhbGxtZW50c1wiOmZhbHNlLFwidmVuZG9yc1wiOntcInZpc2FcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcIm1hc3RlcmNhcmRcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcImFtZXhcIjp7XCJlbGlnaWJsZVwiOnRydWUsXCJ2YXVsdGFibGVcIjp0cnVlfSxcImRpc2NvdmVyXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiaGlwZXJcIjp7XCJlbGlnaWJsZVwiOmZhbHNlLFwidmF1bHRhYmxlXCI6ZmFsc2V9LFwiZWxvXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiamNiXCI6e1wiZWxpZ2libGVcIjpmYWxzZSxcInZhdWx0YWJsZVwiOnRydWV9LFwibWFlc3Ryb1wiOntcImVsaWdpYmxlXCI6dHJ1ZSxcInZhdWx0YWJsZVwiOnRydWV9LFwiZGluZXJzXCI6e1wiZWxpZ2libGVcIjp0cnVlLFwidmF1bHRhYmxlXCI6dHJ1ZX0sXCJjdXBcIjp7XCJlbGlnaWJsZVwiOmZhbHNlLFwidmF1bHRhYmxlXCI6dHJ1ZX19LFwiZ3Vlc3RFbmFibGVkXCI6dHJ1ZX0sXCJ2ZW5tb1wiOntcImVsaWdpYmxlXCI6ZmFsc2UsXCJ2YXVsdGFibGVcIjpmYWxzZX0sXCJpdGF1XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJjcmVkaXRcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImFwcGxlcGF5XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzZXBhXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJpZGVhbFwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiYmFuY29udGFjdFwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiZ2lyb3BheVwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiZXBzXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzb2ZvcnRcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm15YmFua1wiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwicDI0XCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJ3ZWNoYXRwYXlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcInBheXVcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImJsaWtcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcInRydXN0bHlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm94eG9cIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcImJvbGV0b1wiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwiYm9sZXRvYmFuY2FyaW9cIjp7XCJlbGlnaWJsZVwiOmZhbHNlfSxcIm1lcmNhZG9wYWdvXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJtdWx0aWJhbmNvXCI6e1wiZWxpZ2libGVcIjpmYWxzZX0sXCJzYXRpc3BheVwiOntcImVsaWdpYmxlXCI6ZmFsc2V9LFwicGFpZHlcIjp7XCJlbGlnaWJsZVwiOmZhbHNlfX0sXCJmdW5kaW5nU291cmNlXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcImdldFBhZ2VVcmxcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF8wZTI2NWJmZTYxX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJnZXRQYWdlVXJsXCJ9fSxcImdldFBvcHVwQnJpZGdlXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfZWIyYTZkYjdkN19tZGk2bWprNm50Z1wiLFwibmFtZVwiOlwiZ2V0UG9wdXBCcmlkZ2VcIn19LFwiZ2V0UHJlcmVuZGVyRGV0YWlsc1wiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzdiOThhZGI3MzBfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcImdldFByZXJlbmRlckRldGFpbHNcIn19LFwiZ2V0UXVlcmllZEVsaWdpYmxlRnVuZGluZ1wiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkX2U4M2NiZTZhMWZfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcImdldFF1ZXJpZWRFbGlnaWJsZUZ1bmRpbmdcIn19LFwiaG9zdGVkQnV0dG9uSWRcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwiaW50ZW50XCI6XCJjYXB0dXJlXCIsXCJqc1Nka0xpYnJhcnlcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwibG9jYWxlXCI6e1wiY291bnRyeVwiOlwiVVNcIixcImxhbmdcIjpcImVuXCJ9LFwibWVyY2hhbnRJRFwiOltcIkI4Rzg5VTdGNkJWU1NcIl0sXCJtZXJjaGFudFJlcXVlc3RlZFBvcHVwc0Rpc2FibGVkXCI6ZmFsc2UsXCJtZXNzYWdlXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcIm5vbmNlXCI6XCJcIixcIm9uQ2FuY2VsXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcIm9uQ2xpY2tcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwib25Db21wbGV0ZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJvbkluaXRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF8wNzFhYjAwZGYzX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJvbkluaXRcIn19LFwib25NZXNzYWdlQ2xpY2tcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF85ZDE0MTUzZmY3X21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJvbk1lc3NhZ2VDbGlja1wifX0sXCJvbk1lc3NhZ2VIb3ZlclwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzUwN2I2NTdkOGFfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcIm9uTWVzc2FnZUhvdmVyXCJ9fSxcIm9uTWVzc2FnZVJlYWR5XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfYmQyNGZkMDBiN19tZGk2bWprNm50Z1wiLFwibmFtZVwiOlwib25NZXNzYWdlUmVhZHlcIn19LFwib25TaGlwcGluZ0FkZHJlc3NDaGFuZ2VcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwib25TaGlwcGluZ0NoYW5nZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJvblNoaXBwaW5nT3B0aW9uc0NoYW5nZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJoYXNTaGlwcGluZ0NhbGxiYWNrXCI6ZmFsc2UsXCJwYWdlVHlwZVwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJwYXJ0bmVyQXR0cmlidXRpb25JRFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJwYXltZW50TWV0aG9kTm9uY2VcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwicGF5bWVudE1ldGhvZFRva2VuXCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInBheW1lbnRSZXF1ZXN0XCI6e1wiX190eXBlX19cIjpcInVuZGVmaW5lZFwifSxcInBsYXRmb3JtXCI6XCJkZXNrdG9wXCIsXCJyZWZlcnJlckRvbWFpblwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn0sXCJyZW1lbWJlclwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzI1NTQzODRmY2VfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcInJlbWVtYmVyXCJ9fSxcInJlbWVtYmVyZWRcIjpbXSxcInJlbmRlcmVkQnV0dG9uc1wiOltcInBheXBhbFwiXSxcInNlc3Npb25JRFwiOlwidWlkXzRmOTFlZmMwOWRfbWRpNm1qazZudGdcIixcInNka0NvcnJlbGF0aW9uSURcIjpcImY2MjU2NDEzZGM2NDhcIixcInNlc3Npb25TdGF0ZVwiOntcImdldFwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzYzNGM2ZDFjZGFfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcImdldFwifX0sXCJzZXRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF8zZmZiNjA5OGUyX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJzZXRcIn19fSxcImdldFNob3BwZXJJbnNpZ2h0c1VzZWRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9lMWY3ZDQ4NDAwX21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJDclwifX0sXCJzdGFnZUhvc3RcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwic3RvcmFnZUlEXCI6XCJ1aWRfYzM2NzJkMjYxYl9tZGk2bWprNm50Z1wiLFwic3RvcmFnZVN0YXRlXCI6e1wiZ2V0XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfZWEyMmJiMjQwOV9tZGk2bWprNm50Z1wiLFwibmFtZVwiOlwiZ2V0XCJ9fSxcInNldFwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzAyZTYyN2VjN2VfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcInNldFwifX19LFwic3VwcG9ydGVkTmF0aXZlQnJvd3NlclwiOmZhbHNlLFwic3VwcG9ydHNQb3B1cHNcIjp0cnVlLFwidGVzdFwiOntcImFjdGlvblwiOlwiY2hlY2tvdXRcIn0sXCJ1c2VyRXhwZXJpZW5jZUZsb3dcIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwidXNlcklEVG9rZW5cIjp7XCJfX3R5cGVfX1wiOlwidW5kZWZpbmVkXCJ9LFwidmF1bHRcIjpmYWxzZSxcIndhbGxldFwiOntcIl9fdHlwZV9fXCI6XCJ1bmRlZmluZWRcIn19LFwiZXhwb3J0c1wiOntcImluaXRcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9kZmMxMjgyZTM0X21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJpbml0XCJ9fSxcImNsb3NlXCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfYzViMzYyNDYxM19tZGk2bWprNm50Z1wiLFwibmFtZVwiOlwiY2xvc2U6Om1lbW9pemVkXCJ9fSxcImNoZWNrQ2xvc2VcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF9lYWI1YzRjODk4X21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJjaGVja0Nsb3NlXCJ9fSxcInJlc2l6ZVwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzI0N2JiOGQxOGZfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcIl9uXCJ9fSxcIm9uRXJyb3JcIjp7XCJfX3R5cGVfX1wiOlwiY3Jvc3NfZG9tYWluX2Z1bmN0aW9uXCIsXCJfX3ZhbF9fXCI6e1wiaWRcIjpcInVpZF81MDViN2ZiZDk2X21kaTZtams2bnRnXCIsXCJuYW1lXCI6XCJxblwifX0sXCJzaG93XCI6e1wiX190eXBlX19cIjpcImNyb3NzX2RvbWFpbl9mdW5jdGlvblwiLFwiX192YWxfX1wiOntcImlkXCI6XCJ1aWRfNGRmNzAwZTNjMV9tZGk2bWprNm50Z1wiLFwibmFtZVwiOlwiZ25cIn19LFwiaGlkZVwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkXzBmYWEyNzZjOThfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcInZuXCJ9fSxcImV4cG9ydFwiOntcIl9fdHlwZV9fXCI6XCJjcm9zc19kb21haW5fZnVuY3Rpb25cIixcIl9fdmFsX19cIjp7XCJpZFwiOlwidWlkX2RiYmU0NzhiOGRfbWRpNm1qazZudGdcIixcIm5hbWVcIjpcIlduXCJ9fX19In19__"
title="PayPal" allowpaymentrequest="allowpaymentrequest" scrolling="no" id="jsx-iframe-7cea341285" class="component-frame visible" style="background-color: transparent; border: none;"></iframe>
<div id="smart-menu" class="smart-menu"></div>
<div id="installments-modal" class="installments-modal"></div><iframe name="__detect_close_uid_ed5af17d0a_mdi6mjk6ntg__" style="display: none;"></iframe>
</div>
</div>
<div class="product-info__tips empty:tw-hidden tw-mt-3 tw-text-center tw-font-medium tw-text-sm tw-opacity-70 lg:tw-text-[17px] lg:tw-leading-6" data-unavailable="Product is unavailable." data-out-of-stock="Product was out of stock."></div>
</div>
<div class="product-info__share-wrapper tw-flex tw-space-x-5 product-info__block tw-my-6">
<a target="_blank" data-track="social_share" href="//www.facebook.com/sharer.php?u=https://www.luckyeo.com/products/dust-proof-screen-protector" class="tw-flex tw-items-center tw-text-current tw-no-underline share-facebook dj_skin_text">
<svg class="" width="20" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M11.605 2c-.48 0-.932.057-1.464.283-1.092.48-1.624 1.555-1.624 3.279V7.23H7V10h1.517v8h3.088v-8h2.102L14 7.23h-2.395V5.986c0-.396.026-.679.133-.82.133-.254.399-.367.825-.367h1.41v-2.77h-2.368V2z" fill="currentColor"></path></svg>
<span class="product-info__share-item-label tw-pl-2 tw-body-sm">Share</span>
</a>
<a target="_blank" data-track="social_share" href="//twitter.com/share?text=&url=https://www.luckyeo.com/products/dust-proof-screen-protector" class="tw-flex tw-items-center tw-text-current tw-no-underline share-twitter dj_skin_text">
<svg class="" width="20" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M17.423 6.564c0 6.41-4.21 11.026-10.404 11.228C4.4 17.995 2.606 17.2 1 15.998c1.794.202 4.21-.39 5.397-1.606-1.794 0-2.807-1.013-3.4-2.388h1.606C2.997 11.397 1.78 10.196 1.78 8.2c.391.202.796.39 1.606.39-1.403-.795-2.199-3.4-1.2-5.006C3.98 5.58 6.18 7.39 9.811 7.577c-1.013-3.994 4.21-6.02 6.41-3.4 1.013-.203 1.606-.594 2.387-1.014-.202 1.013-.795 1.607-1.606 1.997.796 0 1.404-.202 1.997-.593-.188.796-.984 1.606-1.577 1.997z" fill="currentColor"></path></svg>
<span class="product-info__share-item-label tw-pl-2 tw-body-sm">Tweet</span>
</a>
<a target="_blank" data-track="social_share" href="//pinterest.com/pin/create/button/?url=https://www.luckyeo.com/products/dust-proof-screen-protector&media=&description=" class="tw-flex tw-items-center tw-text-current tw-no-underline share-pinterest dj_skin_text">
<svg class="" width="20" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M11.719 13.817a2.784 2.784 0 0 1-2.34-1.132l-.636 2.338c-.304.912-.731 1.78-1.272 2.583-.045.132-.417.394-.417.394a1.716 1.716 0 0 1-.25-.653 9.155 9.155 0 0 1 .035-2.824c.185-.769 1.193-4.891 1.193-4.891a3.468 3.468 0 0 1-.304-1.462c0-1.367.82-2.391 1.84-2.391.705-.01 1.286.535 1.297 1.218.001.056-.002.112-.009.168a19.2 19.2 0 0 1-.842 3.278c-.2.765.28 1.542 1.07 1.735.14.035.287.05.432.042 1.807 0 3.199-1.844 3.199-4.506.067-2.144-1.676-3.934-3.892-4a3.83 3.83 0 0 0-.363.005c-2.43-.1-4.484 1.724-4.588 4.075a3.748 3.748 0 0 0 .747 2.445c.073.076.1.183.072.283-.076.308-.25.985-.284 1.12-.045.185-.145.223-.34.135-1.328-.837-2.11-2.282-2.065-3.814 0-3.102 2.333-5.956 6.723-5.956 3.295-.16 6.101 2.293 6.267 5.481.005.07.007.14.008.21.01 3.387-2.203 6.12-5.281 6.12" fill="currentColor"></path></svg>
<span class="product-info__share-item-label tw-pl-2 tw-body-sm">Pin it</span>
</a>
</div>
<div class="product-info__block tw-my-6 tw-relative tw-block tw-w-full tw-rounded-global" style="padding-bottom:9.533%;">
<img class="tw-absolute tw-inset-0 tw-m-auto tw-w-full tw-h-full tw-object-cover tw-rounded-global lazyautosizes lazyloaded"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" data-sizes="auto" alt=""
data-srcset="//img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 48w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 180w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 540w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 720w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 900w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1024w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1280w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1366w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1440w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1536w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1600w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1920w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2056w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2560w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2732w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2880w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3072w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3200w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3840w"
sizes="616px"
srcset="//img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 48w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 180w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 540w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 720w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 900w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1024w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1280w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1366w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1440w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1536w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1600w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 1920w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2056w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2560w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2732w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 2880w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3072w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3200w, //img.fantaskycdn.com/8a4d380b79aad4086bc793bdd43d100a_720x.jpg 3840w">
</div>
<div class="bundle-combination-container">
<div class="common__product-row">
<bundle-product-list data-version="0112 15:08" class="bundle-main" style-type="sutra" is-quick-shop="true" pid="387037bb-504a-47f0-af33-91fdc9ceb9cc" title-text="Buy Together Get More OFF!! " title-color="rgba(208, 44, 36, 1)"
btn-bg-color="rgba(12, 68, 55, 1)" btn-text-color="#ffffff" impr="1" imprevt="1" style="cursor: wait; pointer-events: none;"></bundle-product-list>
</div>
</div>
<style>
.bundle-combination-container {
--color_price: #CD201A;
--color_title: rgba(208, 44, 36, 1);
--color_btn_bg: rgba(12, 68, 55, 1);
--color_btn_color: #ffffff;
--color_origin_price: rgba(171, 171, 171, 1);
}
.app-container {
padding: var(--general-layout-spacing, var(--page-spacing, 40px));
max-width: var(--general-layout-width, var(--layout-width, var(--page-width, 1140px)));
margin: 0 auto;
}
</style>
<script id="apps_bundle-1539149753700">
try {
(() => {
const productInfo = document.querySelector('.product-info');
const productInfoBody = document.querySelector('.product-info-body');
const curProductInfo = productInfo || productInfoBody;
const productInfoIn = !document.querySelector('div[data-section-type*="//apps/appbundle/blocks/bundle-combination/"] bundle-product-list');
// 仅针对 Hero 做处理 ,debug APPS-2880
if (window.C_SETTINGS.theme.merchant_theme_name === 'Hero' && productInfoIn) {
const $target = curProductInfo?.parentElement;
if ($target) {
const $targetZIndex = window.getComputedStyle($target)['zIndex'];
let newIndex = $targetZIndex === ' auto' ? 1 : parseInt($targetZIndex) + 1;
$target.style.zIndex = newIndex;
}
}
// Flash主题的遮挡问题,低于20,被兄弟节点图片覆盖,超过100,盖住了底部满减优惠,超过1000盖住了顶部吸附,只能取20-100之间
if (curProductInfo && window?.C_SETTINGS?.theme.merchant_theme_name === "Flash") {
curProductInfo.style.zIndex = 20;
}
try {
! function(t) {
"function" == typeof define && define.amd ? define(t) : t()
}((function() {
"use strict";
function t(t, e, i, o) {
var n, s = arguments.length,
r = s < 3 ? e : null === o ? o = Object.getOwnPropertyDescriptor(e, i) : o;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(t, e, i, o);
else
for (var l = t.length - 1; l >= 0; l--)(n = t[l]) && (r = (s < 3 ? n(r) : s > 3 ? n(e, i, r) : n(e, i)) || r);
return s > 3 && r && Object.defineProperty(e, i, r), r
}
function e(t, e, i, o) {
return new(i || (i = Promise))((function(n, s) {
function r(t) {
try {
a(o.next(t))
} catch (t) {
s(t)
}
}
function l(t) {
try {
a(o.throw(t))
} catch (t) {
s(t)
}
}
function a(t) {
var e;
t.done ? n(t.value) : (e = t.value, e instanceof i ? e : new i((function(t) {
t(e)
}))).then(r, l)
}
a((o = o.apply(t, e || [])).next())
}))
}
"function" == typeof SuppressedError && SuppressedError;
const i = window,
o = i.ShadowRoot && (void 0 === i.ShadyCSS || i.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype,
n = Symbol(),
s = new WeakMap;
class r {
constructor(t, e, i) {
if (this._$cssResult$ = !0, i !== n) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
this.cssText = t, this.t = e
}
get styleSheet() {
let t = this.o;
const e = this.t;
if (o && void 0 === t) {
const i = void 0 !== e && 1 === e.length;
i && (t = s.get(e)), void 0 === t && ((this.o = t = new CSSStyleSheet).replaceSync(this.cssText), i && s.set(e, t))
}
return t
}
toString() {
return this.cssText
}
}
const l = (t, ...e) => {
const i = 1 === t.length ? t[0] : e.reduce(((e, i, o) => e + (t => {
if (!0 === t._$cssResult$) return t.cssText;
if ("number" == typeof t) return t;
throw Error("Value passed to 'css' function must be a 'css' function result: " + t + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")
})(i) + t[o + 1]), t[0]);
return new r(i, t, n)
},
a = o ? t => t : t => t instanceof CSSStyleSheet ? (t => {
let e = "";
for (const i of t.cssRules) e += i.cssText;
return (t => new r("string" == typeof t ? t : t + "", void 0, n))(e)
})(t) : t;
var d;
const c = window,
p = c.trustedTypes,
h = p ? p.emptyScript : "",
u = c.reactiveElementPolyfillSupport,
f = {
toAttribute(t, e) {
switch (e) {
case Boolean:
t = t ? h : null;
break;
case Object:
case Array:
t = null == t ? t : JSON.stringify(t)
}
return t
},
fromAttribute(t, e) {
let i = t;
switch (e) {
case Boolean:
i = null !== t;
break;
case Number:
i = null === t ? null : Number(t);
break;
case Object:
case Array:
try {
i = JSON.parse(t)
} catch (t) {
i = null
}
}
return i
}
},
v = (t, e) => e !== t && (e == e || t == t),
m = {
attribute: !0,
type: String,
converter: f,
reflect: !1,
hasChanged: v
},
g = "finalized";
class y extends HTMLElement {
constructor() {
super(), this._$Ei = new Map, this.isUpdatePending = !1, this.hasUpdated = !1, this._$El = null, this._$Eu()
}
static addInitializer(t) {
var e;
this.finalize(), (null !== (e = this.h) && void 0 !== e ? e : this.h = []).push(t)
}
static get observedAttributes() {
this.finalize();
const t = [];
return this.elementProperties.forEach(((e, i) => {
const o = this._$Ep(i, e);
void 0 !== o && (this._$Ev.set(o, i), t.push(o))
})), t
}
static createProperty(t, e = m) {
if (e.state && (e.attribute = !1), this.finalize(), this.elementProperties.set(t, e), !e.noAccessor && !this.prototype.hasOwnProperty(t)) {
const i = "symbol" == typeof t ? Symbol() : "__" + t,
o = this.getPropertyDescriptor(t, i, e);
void 0 !== o && Object.defineProperty(this.prototype, t, o)
}
}
static getPropertyDescriptor(t, e, i) {
return {
get() {
return this[e]
},
set(o) {
const n = this[t];
this[e] = o, this.requestUpdate(t, n, i)
},
configurable: !0,
enumerable: !0
}
}
static getPropertyOptions(t) {
return this.elementProperties.get(t) || m
}
static finalize() {
if (this.hasOwnProperty(g)) return !1;
this[g] = !0;
const t = Object.getPrototypeOf(this);
if (t.finalize(), void 0 !== t.h && (this.h = [...t.h]), this.elementProperties = new Map(t.elementProperties), this._$Ev = new Map, this.hasOwnProperty("properties")) {
const t = this.properties,
e = [...Object.getOwnPropertyNames(t), ...Object.getOwnPropertySymbols(t)];
for (const i of e) this.createProperty(i, t[i])
}
return this.elementStyles = this.finalizeStyles(this.styles), !0
}
static finalizeStyles(t) {
const e = [];
if (Array.isArray(t)) {
const i = new Set(t.flat(1 / 0).reverse());
for (const t of i) e.unshift(a(t))
} else void 0 !== t && e.push(a(t));
return e
}
static _$Ep(t, e) {
const i = e.attribute;
return !1 === i ? void 0 : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : void 0
}
_$Eu() {
var t;
this._$E_ = new Promise((t => this.enableUpdating = t)), this._$AL = new Map, this._$Eg(), this.requestUpdate(), null === (t = this.constructor.h) || void 0 === t || t.forEach((t => t(this)))
}
addController(t) {
var e, i;
(null !== (e = this._$ES) && void 0 !== e ? e : this._$ES = []).push(t), void 0 !== this.renderRoot && this.isConnected && (null === (i = t.hostConnected) || void 0 === i || i.call(t))
}
removeController(t) {
var e;
null === (e = this._$ES) || void 0 === e || e.splice(this._$ES.indexOf(t) >>> 0, 1)
}
_$Eg() {
this.constructor.elementProperties.forEach(((t, e) => {
this.hasOwnProperty(e) && (this._$Ei.set(e, this[e]), delete this[e])
}))
}
createRenderRoot() {
var t;
const e = null !== (t = this.shadowRoot) && void 0 !== t ? t : this.attachShadow(this.constructor.shadowRootOptions);
return ((t, e) => {
o ? t.adoptedStyleSheets = e.map((t => t instanceof CSSStyleSheet ? t : t.styleSheet)) : e.forEach((e => {
const o = document.createElement("style"),
n = i.litNonce;
void 0 !== n && o.setAttribute("nonce", n), o.textContent = e.cssText, t.appendChild(o)
}))
})(e, this.constructor.elementStyles), e
}
connectedCallback() {
var t;
void 0 === this.renderRoot && (this.renderRoot = this.createRenderRoot()), this.enableUpdating(!0), null === (t = this._$ES) || void 0 === t || t.forEach((t => {
var e;
return null === (e = t.hostConnected) || void 0 === e ? void 0 : e.call(t)
}))
}
enableUpdating(t) {}
disconnectedCallback() {
var t;
null === (t = this._$ES) || void 0 === t || t.forEach((t => {
var e;
return null === (e = t.hostDisconnected) || void 0 === e ? void 0 : e.call(t)
}))
}
attributeChangedCallback(t, e, i) {
this._$AK(t, i)
}
_$EO(t, e, i = m) {
var o;
const n = this.constructor._$Ep(t, i);
if (void 0 !== n && !0 === i.reflect) {
const s = (void 0 !== (null === (o = i.converter) || void 0 === o ? void 0 : o.toAttribute) ? i.converter : f).toAttribute(e, i.type);
this._$El = t, null == s ? this.removeAttribute(n) : this.setAttribute(n, s), this._$El = null
}
}
_$AK(t, e) {
var i;
const o = this.constructor,
n = o._$Ev.get(t);
if (void 0 !== n && this._$El !== n) {
const t = o.getPropertyOptions(n),
s = "function" == typeof t.converter ? {
fromAttribute: t.converter
} : void 0 !== (null === (i = t.converter) || void 0 === i ? void 0 : i.fromAttribute) ? t.converter : f;
this._$El = n, this[n] = s.fromAttribute(e, t.type), this._$El = null
}
}
requestUpdate(t, e, i) {
let o = !0;
void 0 !== t && (((i = i || this.constructor.getPropertyOptions(t)).hasChanged || v)(this[t], e) ? (this._$AL.has(t) || this._$AL.set(t, e), !0 === i.reflect && this._$El !== t && (void 0 === this._$EC && (this._$EC =
new Map), this._$EC.set(t, i))) : o = !1), !this.isUpdatePending && o && (this._$E_ = this._$Ej())
}
async _$Ej() {
this.isUpdatePending = !0;
try {
await this._$E_
} catch (t) {
Promise.reject(t)
}
const t = this.scheduleUpdate();
return null != t && await t, !this.isUpdatePending
}
scheduleUpdate() {
return this.performUpdate()
}
performUpdate() {
var t;
if (!this.isUpdatePending) return;
this.hasUpdated, this._$Ei && (this._$Ei.forEach(((t, e) => this[e] = t)), this._$Ei = void 0);
let e = !1;
const i = this._$AL;
try {
e = this.shouldUpdate(i), e ? (this.willUpdate(i), null === (t = this._$ES) || void 0 === t || t.forEach((t => {
var e;
return null === (e = t.hostUpdate) || void 0 === e ? void 0 : e.call(t)
})), this.update(i)) : this._$Ek()
} catch (t) {
throw e = !1, this._$Ek(), t
}
e && this._$AE(i)
}
willUpdate(t) {}
_$AE(t) {
var e;
null === (e = this._$ES) || void 0 === e || e.forEach((t => {
var e;
return null === (e = t.hostUpdated) || void 0 === e ? void 0 : e.call(t)
})), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(t)), this.updated(t)
}
_$Ek() {
this._$AL = new Map, this.isUpdatePending = !1
}
get updateComplete() {
return this.getUpdateComplete()
}
getUpdateComplete() {
return this._$E_
}
shouldUpdate(t) {
return !0
}
update(t) {
void 0 !== this._$EC && (this._$EC.forEach(((t, e) => this._$EO(e, this[e], t))), this._$EC = void 0), this._$Ek()
}
updated(t) {}
firstUpdated(t) {}
}
var b;
y[g] = !0, y.elementProperties = new Map, y.elementStyles = [], y.shadowRootOptions = {
mode: "open"
}, null == u || u({
ReactiveElement: y
}), (null !== (d = c.reactiveElementVersions) && void 0 !== d ? d : c.reactiveElementVersions = []).push("1.6.3");
const x = window,
w = x.trustedTypes,
_ = w ? w.createPolicy("lit-html", {
createHTML: t => t
}) : void 0,
$ = "$lit$",
S = `lit$${(Math.random()+"").slice(9)}$`,
C = "?" + S,
k = `<${C}>`,
E = document,
T = () => E.createComment(""),
P = t => null === t || "object" != typeof t && "function" != typeof t,
A = Array.isArray,
I = "[ \t\n\f\r]",
z = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,
O = /-->/g,
H = />/g,
L = RegExp(`>|${I}(?:([^\\s"'>=/]+)(${I}*=${I}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"),
B = /'/g,
j = /"/g,
N = /^(?:script|style|textarea|title)$/i,
R = (t => (e, ...i) => ({
_$litType$: t,
strings: e,
values: i
}))(1),
q = Symbol.for("lit-noChange"),
V = Symbol.for("lit-nothing"),
M = new WeakMap,
U = E.createTreeWalker(E, 129, null, !1);
function D(t, e) {
if (!Array.isArray(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array");
return void 0 !== _ ? _.createHTML(e) : e
}
const W = (t, e) => {
const i = t.length - 1,
o = [];
let n, s = 2 === e ? "<svg>" : "",
r = z;
for (let e = 0; e < i; e++) {
const i = t[e];
let l, a, d = -1,
c = 0;
for (; c < i.length && (r.lastIndex = c, a = r.exec(i), null !== a);) c = r.lastIndex, r === z ? "!--" === a[1] ? r = O : void 0 !== a[1] ? r = H : void 0 !== a[2] ? (N.test(a[2]) && (n = RegExp("</" + a[2], "g")), r = L) :
void 0 !== a[3] && (r = L) : r === L ? ">" === a[0] ? (r = null != n ? n : z, d = -1) : void 0 === a[1] ? d = -2 : (d = r.lastIndex - a[2].length, l = a[1], r = void 0 === a[3] ? L : '"' === a[3] ? j : B) : r === j ||
r === B ? r = L : r === O || r === H ? r = z : (r = L, n = void 0);
const p = r === L && t[e + 1].startsWith("/>") ? " " : "";
s += r === z ? i + k : d >= 0 ? (o.push(l), i.slice(0, d) + $ + i.slice(d) + S + p) : i + S + (-2 === d ? (o.push(void 0), e) : p)
}
return [D(t, s + (t[i] || "<?>") + (2 === e ? "</svg>" : "")), o]
};
class F {
constructor({
strings: t,
_$litType$: e
}, i) {
let o;
this.parts = [];
let n = 0,
s = 0;
const r = t.length - 1,
l = this.parts,
[a, d] = W(t, e);
if (this.el = F.createElement(a, i), U.currentNode = this.el.content, 2 === e) {
const t = this.el.content,
e = t.firstChild;
e.remove(), t.append(...e.childNodes)
}
for (; null !== (o = U.nextNode()) && l.length < r;) {
if (1 === o.nodeType) {
if (o.hasAttributes()) {
const t = [];
for (const e of o.getAttributeNames())
if (e.endsWith($) || e.startsWith(S)) {
const i = d[s++];
if (t.push(e), void 0 !== i) {
const t = o.getAttribute(i.toLowerCase() + $).split(S),
e = /([.?@])?(.*)/.exec(i);
l.push({
type: 1,
index: n,
name: e[2],
strings: t,
ctor: "." === e[1] ? Z : "?" === e[1] ? X : "@" === e[1] ? tt : Y
})
} else l.push({
type: 6,
index: n
})
} for (const e of t) o.removeAttribute(e)
}
if (N.test(o.tagName)) {
const t = o.textContent.split(S),
e = t.length - 1;
if (e > 0) {
o.textContent = w ? w.emptyScript : "";
for (let i = 0; i < e; i++) o.append(t[i], T()), U.nextNode(), l.push({
type: 2,
index: ++n
});
o.append(t[e], T())
}
}
} else if (8 === o.nodeType)
if (o.data === C) l.push({
type: 2,
index: n
});
else {
let t = -1;
for (; - 1 !== (t = o.data.indexOf(S, t + 1));) l.push({
type: 7,
index: n
}), t += S.length - 1
} n++
}
}
static createElement(t, e) {
const i = E.createElement("template");
return i.innerHTML = t, i
}
}
function G(t, e, i = t, o) {
var n, s, r, l;
if (e === q) return e;
let a = void 0 !== o ? null === (n = i._$Co) || void 0 === n ? void 0 : n[o] : i._$Cl;
const d = P(e) ? void 0 : e._$litDirective$;
return (null == a ? void 0 : a.constructor) !== d && (null === (s = null == a ? void 0 : a._$AO) || void 0 === s || s.call(a, !1), void 0 === d ? a = void 0 : (a = new d(t), a._$AT(t, i, o)), void 0 !== o ? (null !== (r = (l =
i)._$Co) && void 0 !== r ? r : l._$Co = [])[o] = a : i._$Cl = a), void 0 !== a && (e = G(t, a._$AS(t, e.values), a, o)), e
}
class Q {
constructor(t, e) {
this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = e
}
get parentNode() {
return this._$AM.parentNode
}
get _$AU() {
return this._$AM._$AU
}
u(t) {
var e;
const {
el: {
content: i
},
parts: o
} = this._$AD, n = (null !== (e = null == t ? void 0 : t.creationScope) && void 0 !== e ? e : E).importNode(i, !0);
U.currentNode = n;
let s = U.nextNode(),
r = 0,
l = 0,
a = o[0];
for (; void 0 !== a;) {
if (r === a.index) {
let e;
2 === a.type ? e = new J(s, s.nextSibling, this, t) : 1 === a.type ? e = new a.ctor(s, a.name, a.strings, this, t) : 6 === a.type && (e = new et(s, this, t)), this._$AV.push(e), a = o[++l]
}
r !== (null == a ? void 0 : a.index) && (s = U.nextNode(), r++)
}
return U.currentNode = E, n
}
v(t) {
let e = 0;
for (const i of this._$AV) void 0 !== i && (void 0 !== i.strings ? (i._$AI(t, i, e), e += i.strings.length - 2) : i._$AI(t[e])), e++
}
}
class J {
constructor(t, e, i, o) {
var n;
this.type = 2, this._$AH = V, this._$AN = void 0, this._$AA = t, this._$AB = e, this._$AM = i, this.options = o, this._$Cp = null === (n = null == o ? void 0 : o.isConnected) || void 0 === n || n
}
get _$AU() {
var t, e;
return null !== (e = null === (t = this._$AM) || void 0 === t ? void 0 : t._$AU) && void 0 !== e ? e : this._$Cp
}
get parentNode() {
let t = this._$AA.parentNode;
const e = this._$AM;
return void 0 !== e && 11 === (null == t ? void 0 : t.nodeType) && (t = e.parentNode), t
}
get startNode() {
return this._$AA
}
get endNode() {
return this._$AB
}
_$AI(t, e = this) {
t = G(this, t, e), P(t) ? t === V || null == t || "" === t ? (this._$AH !== V && this._$AR(), this._$AH = V) : t !== this._$AH && t !== q && this._(t) : void 0 !== t._$litType$ ? this.g(t) : void 0 !== t.nodeType ? this.$(
t) : (t => A(t) || "function" == typeof(null == t ? void 0 : t[Symbol.iterator]))(t) ? this.T(t) : this._(t)
}
k(t) {
return this._$AA.parentNode.insertBefore(t, this._$AB)
}
$(t) {
this._$AH !== t && (this._$AR(), this._$AH = this.k(t))
}
_(t) {
this._$AH !== V && P(this._$AH) ? this._$AA.nextSibling.data = t : this.$(E.createTextNode(t)), this._$AH = t
}
g(t) {
var e;
const {
values: i,
_$litType$: o
} = t, n = "number" == typeof o ? this._$AC(t) : (void 0 === o.el && (o.el = F.createElement(D(o.h, o.h[0]), this.options)), o);
if ((null === (e = this._$AH) || void 0 === e ? void 0 : e._$AD) === n) this._$AH.v(i);
else {
const t = new Q(n, this),
e = t.u(this.options);
t.v(i), this.$(e), this._$AH = t
}
}
_$AC(t) {
let e = M.get(t.strings);
return void 0 === e && M.set(t.strings, e = new F(t)), e
}
T(t) {
A(this._$AH) || (this._$AH = [], this._$AR());
const e = this._$AH;
let i, o = 0;
for (const n of t) o === e.length ? e.push(i = new J(this.k(T()), this.k(T()), this, this.options)) : i = e[o], i._$AI(n), o++;
o < e.length && (this._$AR(i && i._$AB.nextSibling, o), e.length = o)
}
_$AR(t = this._$AA.nextSibling, e) {
var i;
for (null === (i = this._$AP) || void 0 === i || i.call(this, !1, !0, e); t && t !== this._$AB;) {
const e = t.nextSibling;
t.remove(), t = e
}
}
setConnected(t) {
var e;
void 0 === this._$AM && (this._$Cp = t, null === (e = this._$AP) || void 0 === e || e.call(this, t))
}
}
class Y {
constructor(t, e, i, o, n) {
this.type = 1, this._$AH = V, this._$AN = void 0, this.element = t, this.name = e, this._$AM = o, this.options = n, i.length > 2 || "" !== i[0] || "" !== i[1] ? (this._$AH = Array(i.length - 1).fill(new String), this
.strings = i) : this._$AH = V
}
get tagName() {
return this.element.tagName
}
get _$AU() {
return this._$AM._$AU
}
_$AI(t, e = this, i, o) {
const n = this.strings;
let s = !1;
if (void 0 === n) t = G(this, t, e, 0), s = !P(t) || t !== this._$AH && t !== q, s && (this._$AH = t);
else {
const o = t;
let r, l;
for (t = n[0], r = 0; r < n.length - 1; r++) l = G(this, o[i + r], e, r), l === q && (l = this._$AH[r]), s || (s = !P(l) || l !== this._$AH[r]), l === V ? t = V : t !== V && (t += (null != l ? l : "") + n[r + 1]), this
._$AH[r] = l
}
s && !o && this.j(t)
}
j(t) {
t === V ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, null != t ? t : "")
}
}
class Z extends Y {
constructor() {
super(...arguments), this.type = 3
}
j(t) {
this.element[this.name] = t === V ? void 0 : t
}
}
const K = w ? w.emptyScript : "";
class X extends Y {
constructor() {
super(...arguments), this.type = 4
}
j(t) {
t && t !== V ? this.element.setAttribute(this.name, K) : this.element.removeAttribute(this.name)
}
}
class tt extends Y {
constructor(t, e, i, o, n) {
super(t, e, i, o, n), this.type = 5
}
_$AI(t, e = this) {
var i;
if ((t = null !== (i = G(this, t, e, 0)) && void 0 !== i ? i : V) === q) return;
const o = this._$AH,
n = t === V && o !== V || t.capture !== o.capture || t.once !== o.once || t.passive !== o.passive,
s = t !== V && (o === V || n);
n && this.element.removeEventListener(this.name, this, o), s && this.element.addEventListener(this.name, this, t), this._$AH = t
}
handleEvent(t) {
var e, i;
"function" == typeof this._$AH ? this._$AH.call(null !== (i = null === (e = this.options) || void 0 === e ? void 0 : e.host) && void 0 !== i ? i : this.element, t) : this._$AH.handleEvent(t)
}
}
class et {
constructor(t, e, i) {
this.element = t, this.type = 6, this._$AN = void 0, this._$AM = e, this.options = i
}
get _$AU() {
return this._$AM._$AU
}
_$AI(t) {
G(this, t)
}
}
const it = x.litHtmlPolyfillSupport;
null == it || it(F, J), (null !== (b = x.litHtmlVersions) && void 0 !== b ? b : x.litHtmlVersions = []).push("2.8.0");
var ot, nt;
class st extends y {
constructor() {
super(...arguments), this.renderOptions = {
host: this
}, this._$Do = void 0
}
createRenderRoot() {
var t, e;
const i = super.createRenderRoot();
return null !== (t = (e = this.renderOptions).renderBefore) && void 0 !== t || (e.renderBefore = i.firstChild), i
}
update(t) {
const e = this.render();
this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = ((t, e, i) => {
var o, n;
const s = null !== (o = null == i ? void 0 : i.renderBefore) && void 0 !== o ? o : e;
let r = s._$litPart$;
if (void 0 === r) {
const t = null !== (n = null == i ? void 0 : i.renderBefore) && void 0 !== n ? n : null;
s._$litPart$ = r = new J(e.insertBefore(T(), t), t, void 0, null != i ? i : {})
}
return r._$AI(t), r
})(e, this.renderRoot, this.renderOptions)
}
connectedCallback() {
var t;
super.connectedCallback(), null === (t = this._$Do) || void 0 === t || t.setConnected(!0)
}
disconnectedCallback() {
var t;
super.disconnectedCallback(), null === (t = this._$Do) || void 0 === t || t.setConnected(!1)
}
render() {
return q
}
}
st.finalized = !0, st._$litElement$ = !0, null === (ot = globalThis.litElementHydrateSupport) || void 0 === ot || ot.call(globalThis, {
LitElement: st
});
const rt = globalThis.litElementPolyfillSupport;
null == rt || rt({
LitElement: st
}), (null !== (nt = globalThis.litElementVersions) && void 0 !== nt ? nt : globalThis.litElementVersions = []).push("3.3.3");
const lt = (t, e) => "method" === e.kind && e.descriptor && !("value" in e.descriptor) ? {
...e,
finisher(i) {
i.createProperty(e.key, t)
}
} : {
kind: "field",
key: Symbol(),
placement: "own",
descriptor: {},
originalKey: e.key,
initializer() {
"function" == typeof e.initializer && (this[e.key] = e.initializer.call(this))
},
finisher(i) {
i.createProperty(e.key, t)
}
},
at = (t, e, i) => {
e.constructor.createProperty(i, t)
};
function dt(t) {
return (e, i) => void 0 !== i ? at(t, e, i) : lt(t, e)
}
function ct(t) {
return dt({
...t,
state: !0
})
}
const pt = ({
finisher: t,
descriptor: e
}) => (i, o) => {
var n;
if (void 0 === o) {
const o = null !== (n = i.originalKey) && void 0 !== n ? n : i.key,
s = null != e ? {
kind: "method",
placement: "prototype",
key: o,
descriptor: e(i.key)
} : {
...i,
key: o
};
return null != t && (s.finisher = function(e) {
t(e, o)
}), s
} {
const n = i.constructor;
void 0 !== e && Object.defineProperty(i, o, e(o)), null == t || t(n, o)
}
};
function ht(t, e) {
return pt({
descriptor: i => {
const o = {
get() {
var e, i;
return null !== (i = null === (e = this.renderRoot) || void 0 === e ? void 0 : e.querySelector(t)) && void 0 !== i ? i : null
},
enumerable: !0,
configurable: !0
};
if (e) {
const e = "symbol" == typeof i ? Symbol() : "__" + i;
o.get = function() {
var i, o;
return void 0 === this[e] && (this[e] = null !== (o = null === (i = this.renderRoot) || void 0 === i ? void 0 : i.querySelector(t)) && void 0 !== o ? o : null), this[e]
}
}
return o
}
})
}
var ut;
function ft(t) {
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t
}
null === (ut = window.HTMLSlotElement) || void 0 === ut || ut.prototype.assignedElements;
var vt = {
exports: {}
};
! function(t) {
function e(i) {
return t.exports = e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
return typeof t
} : function(t) {
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
}, t.exports.__esModule = !0, t.exports.default = t.exports, e(i)
}
t.exports = e, t.exports.__esModule = !0, t.exports.default = t.exports
}(vt);
var mt, gt, yt = ft(vt.exports),
bt = {
exports: {}
},
xt = {
exports: {}
},
wt = {
exports: {}
};
! function(t) {
var e = vt.exports.default;
t.exports = function(t, i) {
if ("object" !== e(t) || null === t) return t;
var o = t[Symbol.toPrimitive];
if (void 0 !== o) {
var n = o.call(t, i || "default");
if ("object" !== e(n)) return n;
throw new TypeError("@@toPrimitive must return a primitive value.")
}
return ("string" === i ? String : Number)(t)
}, t.exports.__esModule = !0, t.exports.default = t.exports
}(wt),
function(t) {
var e = vt.exports.default,
i = wt.exports;
t.exports = function(t) {
var o = i(t, "string");
return "symbol" === e(o) ? o : String(o)
}, t.exports.__esModule = !0, t.exports.default = t.exports
}(xt), gt = xt.exports, (mt = bt).exports = function(t, e, i) {
return (e = gt(e)) in t ? Object.defineProperty(t, e, {
value: i,
enumerable: !0,
configurable: !0,
writable: !0
}) : t[e] = i, t
}, mt.exports.__esModule = !0, mt.exports.default = mt.exports;
var _t = ft(bt.exports),
$t = {
exports: {}
};
! function(t) {
function e(t, e, i, o, n, s, r) {
try {
var l = t[s](r),
a = l.value
} catch (t) {
return void i(t)
}
l.done ? e(a) : Promise.resolve(a).then(o, n)
}
t.exports = function(t) {
return function() {
var i = this,
o = arguments;
return new Promise((function(n, s) {
var r = t.apply(i, o);
function l(t) {
e(r, n, s, l, a, "next", t)
}
function a(t) {
e(r, n, s, l, a, "throw", t)
}
l(void 0)
}))
}
}, t.exports.__esModule = !0, t.exports.default = t.exports
}($t);
var St = ft($t.exports),
Ct = {
exports: {}
};
! function(t) {
var e = vt.exports.default;
function i() {
t.exports = i = function() {
return n
}, t.exports.__esModule = !0, t.exports.default = t.exports;
var o, n = {},
s = Object.prototype,
r = s.hasOwnProperty,
l = Object.defineProperty || function(t, e, i) {
t[e] = i.value
},
a = "function" == typeof Symbol ? Symbol : {},
d = a.iterator || "@@iterator",
c = a.asyncIterator || "@@asyncIterator",
p = a.toStringTag || "@@toStringTag";
function h(t, e, i) {
return Object.defineProperty(t, e, {
value: i,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e]
}
try {
h({}, "")
} catch (o) {
h = function(t, e, i) {
return t[e] = i
}
}
function u(t, e, i, o) {
var n = e && e.prototype instanceof x ? e : x,
s = Object.create(n.prototype),
r = new O(o || []);
return l(s, "_invoke", {
value: P(t, i, r)
}), s
}
function f(t, e, i) {
try {
return {
type: "normal",
arg: t.call(e, i)
}
} catch (t) {
return {
type: "throw",
arg: t
}
}
}
n.wrap = u;
var v = "suspendedStart",
m = "suspendedYield",
g = "executing",
y = "completed",
b = {};
function x() {}
function w() {}
function _() {}
var $ = {};
h($, d, (function() {
return this
}));
var S = Object.getPrototypeOf,
C = S && S(S(H([])));
C && C !== s && r.call(C, d) && ($ = C);
var k = _.prototype = x.prototype = Object.create($);
function E(t) {
["next", "throw", "return"].forEach((function(e) {
h(t, e, (function(t) {
return this._invoke(e, t)
}))
}))
}
function T(t, i) {
function o(n, s, l, a) {
var d = f(t[n], t, s);
if ("throw" !== d.type) {
var c = d.arg,
p = c.value;
return p && "object" == e(p) && r.call(p, "__await") ? i.resolve(p.__await).then((function(t) {
o("next", t, l, a)
}), (function(t) {
o("throw", t, l, a)
})) : i.resolve(p).then((function(t) {
c.value = t, l(c)
}), (function(t) {
return o("throw", t, l, a)
}))
}
a(d.arg)
}
var n;
l(this, "_invoke", {
value: function(t, e) {
function s() {
return new i((function(i, n) {
o(t, e, i, n)
}))
}
return n = n ? n.then(s, s) : s()
}
})
}
function P(t, e, i) {
var n = v;
return function(s, r) {
if (n === g) throw new Error("Generator is already running");
if (n === y) {
if ("throw" === s) throw r;
return {
value: o,
done: !0
}
}
for (i.method = s, i.arg = r;;) {
var l = i.delegate;
if (l) {
var a = A(l, i);
if (a) {
if (a === b) continue;
return a
}
}
if ("next" === i.method) i.sent = i._sent = i.arg;
else if ("throw" === i.method) {
if (n === v) throw n = y, i.arg;
i.dispatchException(i.arg)
} else "return" === i.method && i.abrupt("return", i.arg);
n = g;
var d = f(t, e, i);
if ("normal" === d.type) {
if (n = i.done ? y : m, d.arg === b) continue;
return {
value: d.arg,
done: i.done
}
}
"throw" === d.type && (n = y, i.method = "throw", i.arg = d.arg)
}
}
}
function A(t, e) {
var i = e.method,
n = t.iterator[i];
if (n === o) return e.delegate = null, "throw" === i && t.iterator.return && (e.method = "return", e.arg = o, A(t, e), "throw" === e.method) || "return" !== i && (e.method = "throw", e.arg = new TypeError(
"The iterator does not provide a '" + i + "' method")), b;
var s = f(n, t.iterator, e.arg);
if ("throw" === s.type) return e.method = "throw", e.arg = s.arg, e.delegate = null, b;
var r = s.arg;
return r ? r.done ? (e[t.resultName] = r.value, e.next = t.nextLoc, "return" !== e.method && (e.method = "next", e.arg = o), e.delegate = null, b) : r : (e.method = "throw", e.arg = new TypeError(
"iterator result is not an object"), e.delegate = null, b)
}
function I(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e)
}
function z(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e
}
function O(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(I, this), this.reset(!0)
}
function H(t) {
if (t || "" === t) {
var i = t[d];
if (i) return i.call(t);
if ("function" == typeof t.next) return t;
if (!isNaN(t.length)) {
var n = -1,
s = function e() {
for (; ++n < t.length;)
if (r.call(t, n)) return e.value = t[n], e.done = !1, e;
return e.value = o, e.done = !0, e
};
return s.next = s
}
}
throw new TypeError(e(t) + " is not iterable")
}
return w.prototype = _, l(k, "constructor", {
value: _,
configurable: !0
}), l(_, "constructor", {
value: w,
configurable: !0
}), w.displayName = h(_, p, "GeneratorFunction"), n.isGeneratorFunction = function(t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === w || "GeneratorFunction" === (e.displayName || e.name))
}, n.mark = function(t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, _) : (t.__proto__ = _, h(t, p, "GeneratorFunction")), t.prototype = Object.create(k), t
}, n.awrap = function(t) {
return {
__await: t
}
}, E(T.prototype), h(T.prototype, c, (function() {
return this
})), n.AsyncIterator = T, n.async = function(t, e, i, o, s) {
void 0 === s && (s = Promise);
var r = new T(u(t, e, i, o), s);
return n.isGeneratorFunction(e) ? r : r.next().then((function(t) {
return t.done ? t.value : r.next()
}))
}, E(k), h(k, p, "Generator"), h(k, d, (function() {
return this
})), h(k, "toString", (function() {
return "[object Generator]"
})), n.keys = function(t) {
var e = Object(t),
i = [];
for (var o in e) i.push(o);
return i.reverse(),
function t() {
for (; i.length;) {
var o = i.pop();
if (o in e) return t.value = o, t.done = !1, t
}
return t.done = !0, t
}
}, n.values = H, O.prototype = {
constructor: O,
reset: function(t) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = o, this.done = !1, this.delegate = null, this.method = "next", this.arg = o, this.tryEntries.forEach(z), !t)
for (var e in this) "t" === e.charAt(0) && r.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = o)
},
stop: function() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval
},
dispatchException: function(t) {
if (this.done) throw t;
var e = this;
function i(i, n) {
return l.type = "throw", l.arg = t, e.next = i, n && (e.method = "next", e.arg = o), !!n
}
for (var n = this.tryEntries.length - 1; n >= 0; --n) {
var s = this.tryEntries[n],
l = s.completion;
if ("root" === s.tryLoc) return i("end");
if (s.tryLoc <= this.prev) {
var a = r.call(s, "catchLoc"),
d = r.call(s, "finallyLoc");
if (a && d) {
if (this.prev < s.catchLoc) return i(s.catchLoc, !0);
if (this.prev < s.finallyLoc) return i(s.finallyLoc)
} else if (a) {
if (this.prev < s.catchLoc) return i(s.catchLoc, !0)
} else {
if (!d) throw new Error("try statement without catch or finally");
if (this.prev < s.finallyLoc) return i(s.finallyLoc)
}
}
}
},
abrupt: function(t, e) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var o = this.tryEntries[i];
if (o.tryLoc <= this.prev && r.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var n = o;
break
}
}
n && ("break" === t || "continue" === t) && n.tryLoc <= e && e <= n.finallyLoc && (n = null);
var s = n ? n.completion : {};
return s.type = t, s.arg = e, n ? (this.method = "next", this.next = n.finallyLoc, b) : this.complete(s)
},
complete: function(t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), b
},
finish: function(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var i = this.tryEntries[e];
if (i.finallyLoc === t) return this.complete(i.completion, i.afterLoc), z(i), b
}
},
catch: function(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var i = this.tryEntries[e];
if (i.tryLoc === t) {
var o = i.completion;
if ("throw" === o.type) {
var n = o.arg;
z(i)
}
return n
}
}
throw new Error("illegal catch attempt")
},
delegateYield: function(t, e, i) {
return this.delegate = {
iterator: H(t),
resultName: e,
nextLoc: i
}, "next" === this.method && (this.arg = o), b
}
}, n
}
t.exports = i, t.exports.__esModule = !0, t.exports.default = t.exports
}(Ct);
var kt = Ct.exports(),
Et = kt;
try {
regeneratorRuntime = kt
} catch (t) {
"object" == typeof globalThis ? globalThis.regeneratorRuntime = kt : Function("r", "regeneratorRuntime = r")(kt)
}
var Tt, Pt;
function At(t, e) {
if ("string" == typeof t && "string" == typeof e) {
if (!e.startsWith("/")) throw new Error("prefixionPath: urlPath must be start with /");
if (!t.startsWith("/")) throw new Error("prefixionPath: prefix must be start with /");
return t + e
}
}
function It(t) {
if ("string" != typeof t) throw new Error("globalizePath: urlPath must be string");
if (t.startsWith("http")) throw new Error("globalizePath: urlPath can't be http url");
t.startsWith("/") || (t = "/" + t);
var e = function() {
var t = window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root || "";
return t.length > 0 && (t.startsWith("/") || (t = "/" + t)), t
}();
return e.length > 0 && !t.startsWith(e) || "/ca" === e && t.startsWith("/cart") ? At(e, t) : t
}
function zt(t, e) {
var i = Object.keys(t);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(t);
e && (o = o.filter((function(e) {
return Object.getOwnPropertyDescriptor(t, e).enumerable
}))), i.push.apply(i, o)
}
return i
}
function Ot(t) {
for (var e = 1; e < arguments.length; e++) {
var i = null != arguments[e] ? arguments[e] : {};
e % 2 ? zt(Object(i), !0).forEach((function(e) {
_t(t, e, i[e])
})) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(i)) : zt(Object(i)).forEach((function(e) {
Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(i, e))
}))
}
return t
}
var Ht = function(t) {
var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 50,
i = null;
return function() {
for (var o = arguments.length, n = new Array(o), s = 0; s < o; s++) n[s] = arguments[s];
var r = this;
i && clearTimeout(i), i = setTimeout((function() {
t.apply(r, n)
}), e)
}
},
Lt = function(t, e) {
var i = null;
return function() {
var o = this,
n = arguments;
i || (i = setTimeout((function() {
t.apply(o, n), clearTimeout(i), i = null
}), e))
}
},
Bt = {
ROOT_URL: C_SETTINGS && C_SETTINGS.routes && C_SETTINGS.routes.root || "",
post: function(t) {
return (Tt = Tt || St(Et.mark((function t(e) {
var i, o, n, s = arguments;
return Et.wrap((function(t) {
for (;;) switch (t.prev = t.next) {
case 0:
return i = s.length > 1 && void 0 !== s[1] ? s[1] : {}, t.prev = 1, t.next = 4, fetch(Bt.ROOT_URL + e, Ot(Ot({
method: "POST",
headers: {
"Content-Type": "application/json"
}
}, i), {}, {
body: JSON.stringify(i.body)
}));
case 4:
return o = t.sent, t.next = 7, o.json();
case 7:
return n = t.sent, t.abrupt("return", n);
case 11:
throw t.prev = 11, t.t0 = t.catch(1), new Error("post request error" + t.t0);
case 14:
case "end":
return t.stop()
}
}), t, null, [
[1, 11]
])
})))).apply(this, arguments)
},
get: function(t) {
return (Pt = Pt || St(Et.mark((function t(e) {
var i, o;
return Et.wrap((function(t) {
for (;;) switch (t.prev = t.next) {
case 0:
return t.prev = 1, t.next = 4, fetch(Bt.ROOT_URL + e);
case 4:
return i = t.sent, t.next = 7, i.json();
case 7:
return o = t.sent, t.abrupt("return", o);
case 11:
throw t.prev = 11, t.t0 = t.catch(1), new Error("get request error" + t.t0);
case 14:
case "end":
return t.stop()
}
}), t, null, [
[1, 11]
])
})))).apply(this, arguments)
}
},
jt = function(t, e) {
var i, o = {
amount: {
n: 2,
x: 3,
s: ",",
c: "."
},
amount_no_decimals: {
n: 0,
x: 3,
s: ",",
c: ""
},
amount_with_comma_separator: {
n: 2,
x: 3,
s: ".",
c: ","
},
amount_no_decimals_with_comma_separator: {
n: 0,
x: 3,
s: ".",
c: ""
},
amount_with_apostrophe_separator: {
n: 2,
x: 3,
s: "'",
c: "."
}
} [e] || "amount",
n = "\\d(?=(\\d{" + (o.x || 3) + "})+" + (o.n > 0 ? "\\D" : "$") + ")";
return i = 0 === o.n ? t.toFixed(0) : parseFloat(t).toFixed(o.n + 1).slice(0, -1), (o.c ? i.replace(".", o.c) : i).replace(new RegExp(n, "g"), "$&" + (o.s || ","))
},
Nt = function(t) {
if (window.C_APPS_MULTI_CURRENCY && window.C_APPS_MULTI_CURRENCY.globalFinance) return window.C_APPS_MULTI_CURRENCY.globalFinance(Number(t));
var e = window.C_SETTINGS.currency_symbol,
i = window.C_SETTINGS ? window.C_SETTINGS.currency_symbol_pos : "left",
o = window.C_SETTINGS ? window.C_SETTINGS.money_format : "amount";
return "right" === i ? jt(1 * Number(t), o) + e : e + jt(1 * Number(t), o)
},
Rt = !!window.$;
function qt(t) {
var e = document.querySelector(".product-info"),
i = document.querySelector(".product-info-body"),
o = document.querySelector(".product-info__body"),
n = e || i || o,
s = document.querySelector("bundle-product-list"),
r = document.querySelector('div[data-section-type*="//apps/appbundle/blocks/bundle-combination/"]'),
l = r && r.contains(s),
a = {
isInProductInfo: n ? n.contains(s) : !l,
productInfo: n || null
};
if (t) {
var d = Number(window.getComputedStyle(n).paddingLeft.replace(/[^/.\d]/g, "")),
c = Number(n.offsetWidth) - d;
return Ot(Ot({}, a), {}, {
productInfoWidth: c
})
}
return a
}
const Vt = {
FASHION_HORIZONTAL: "fashionHorizontal",
FASHION_VERTICAL: "fashionVertical"
},
Mt = "fixed_price",
Ut = "fixed_amount",
Dt = "percentage",
Wt = "multi",
Ft = "single";
class Gt extends st {
constructor() {
super(...arguments), this.titleText = "", this.switchable = !1, this.titleColor = "", this.btnBgColor = "", this.btnTextColor = "", this.pid = "", this.discount_ids = "", this.styleType = "sutra", this.isQuickShop = "false",
this.atcBtnStyle = void 0, this.selected_all = !0, this.select_one = !1, this.selectedInfo = [], this.modalVisible = !1, this.loading = !1, this.success = !1, this.onResize = () => {}
}
requestUpdate() {
super.requestUpdate()
}
connectedCallback() {
this.onResize = Lt(this.computeWidth, 50), super.connectedCallback(), window.addEventListener("resize", this.onResize)
}
disconnectedCallback() {
super.disconnectedCallback(), window.removeEventListener("resize", this.onResize)
}
computeWidth() {
var t, e;
const {
isInProductInfo: i,
productInfo: o,
productInfoWidth: n
} = qt(!0), s = null === (t = this.shadowRoot) || void 0 === t ? void 0 : t.querySelector(".main");
if (s)
if (i) {
if (o) {
let t = n;
"Flash" === (null === (e = null === window || void 0 === window ? void 0 : window.SHOPLAZZA) || void 0 === e ? void 0 : e.theme.merchant_theme_name) && (null === window || void 0 === window ? void 0 : window
.innerWidth) < 960 && (t -= 32), s.style.maxWidth = `${t}px`, s.classList.add("main--in")
}
} else o && this.styleType === Vt.FASHION_VERTICAL && (s.style.maxWidth = `${n}px`), s.classList.remove("main--in")
}
showToast(t) {
const e = document.createElement("bundle-toast");
t && (e.text = t), document.body.appendChild(e)
}
buySelectedProduct() {
return e(this, void 0, void 0, (function*() {
if (this.selectedInfo.every((t => !t.is_selected))) return;
this.loading = !0;
const t = this.bundleInfo.entitled_products.filter((t => t.is_selected)),
i = t.map((t => ({
product_id: t.id,
variant_id: t.selected_id,
quantity: Number(t.count),
note: t.note || "",
price: t.variants.find((e => e.id === t.selected_id)).price,
available: "true",
selected: "true"
})));
let o = [];
o.push(this.bundleInfo.id), Bt.post("/api/bundle-sales/cart", {
body: {
cart: {
line_items: i
},
action_type: "buy_now",
bundle_sale_ids: o
}
}).then((t => {
const o = {
line_items: (i || []).map((t => ({
quantity: Number(t.quantity),
variant_id: t.variant_id,
note: t.note || "",
properties: t.properties || {}
}))),
refer_info: {
source: "buy_now"
}
};
fetch(It("/api/checkout/order"), {
method: "POST",
body: JSON.stringify(o),
headers: {
"Content-Type": "application/json;charset=utf-8"
}
}).then((t => e(this, void 0, void 0, (function*() {
if (t.redirected && t.url.includes("/account/login")) return window.location.href = It(`/account/login?_returnUrl=${encodeURIComponent(window.location.pathname)}`);
const e = yield t.json();
if ("success" !== e.state) this.showToast(e.message || e.errors[0] || "Unknown error"), location.reload();
else {
const t = e && e.data && e.data.order_token;
t && (window.safeHref ? window.safeHref = It(`/checkout/${t}?step=contact_information`) : window.location.href = It(`/checkout/${t}?step=contact_information`))
}
}))))
}))
}))
}
addSelectedToCart() {
var t;
return e(this, void 0, void 0, (function*() {
if (this.selectedInfo.every((t => !t.is_selected))) return;
this.loading = !0;
const e = this.bundleInfo.entitled_products.filter((t => t.is_selected)),
i = e.map((t => ({
product_id: t.id,
variant_id: t.selected_id,
quantity: t.count
})));
try {
const e = {
discount_id: this.bundleInfo.id,
value_type: this.bundleInfo.value_type,
popups_setting: this.bundleInfo.popups_setting,
global_show_text: this.bundleInfo.global_show_text,
target_selection: this.bundleInfo.target_selection,
page: null === (t = window.SHOP_PARAMS) || void 0 === t ? void 0 : t.template_type,
product_ids: this.bundleInfo.entitled_products.map((t => t.id)),
block: !0,
operation_type: this.bundleInfo.operation_type,
entitled_product_ids: this.bundleInfo.entitled_product_ids.join(",")
};
window.sa && window.sa.track("plugin_bundle_combination_click_atc", e)
} catch (t) {}
const o = yield Bt.post("/api/cart/batch", {
body: {
line_items: i
}
});
if (this.loading = !1, o.errors && o.errors[0]) this.showToast(o.errors[0]);
else {
this.success = !0;
try {
const t = sessionStorage.bundle_sale_ids && JSON.parse(sessionStorage.bundle_sale_ids) || [];
t.includes(this.bundleInfo.id) || (t.push(this.bundleInfo.id), sessionStorage.setItem("bundle_sale_ids", JSON.stringify(t)))
} catch (t) {}
e.forEach((t => {
var e;
const i = {
id: t.id,
product_id: t.id,
number: t.count || 1,
quantity: t.count || 1,
variant_id: t.selected_id,
childrenId: t.selected_id,
item_price: null === (e = t.variants.find((e => e.id === t.selected_id))) || void 0 === e ? void 0 : e.price,
name: t.title,
type: "",
source: "bundle"
};
Rt ? window.$(document.body).trigger("dj.addToCart", i) : document.dispatchEvent(new CustomEvent("dj.addToCart", {
detail: i
}))
})), setTimeout((() => {
window.safeHref ? window.safeHref = It("/cart") : window.location.href = It("/cart")
}))
}
}))
}
switch () {
this.dispatchEvent(new CustomEvent("bundle-combination-switch"))
}
clickSelect() {
var t, e;
this.select_one = this.selectedInfo.filter((t => t.is_selected)).length <= 1, this.selectedInfo.every((t => t.is_selected)) && (null === (e = null === (t = this.bundleInfo) || void 0 === t ? void 0 : t.entitled_products) ||
void 0 === e ? void 0 : e.length) === this.selectedInfo.length ? (this.selected_all = !0, this.requestUpdate()) : this.selected_all = !1
}
clickProduct(t) {
const e = t.detail;
"true" === this.isQuickShop && (this.modalProduct = e, this.modalVisible = !0);
const i = {
block: !0,
discount_ids: this.discount_ids,
product_id: this.pid,
discount_id: this.bundleInfo.id,
CurrProd_id: e.id,
operation_type: this.bundleInfo.operation_type,
entitled_product_ids: this.bundleInfo.entitled_product_ids.join(",")
};
window.sa && window.sa.track("plugin_bundle_combination_product_click", i)
}
renderImgs(t, e) {
var i;
const o = this.parentNode.offsetWidth > 960;
return null === (i = this.selectedInfo) || void 0 === i ? void 0 : i.slice(t, e).map(((e, i) => {
var n, s, r;
const l = null === (n = e.variants) || void 0 === n ? void 0 : n.find((t => t.id === e.selected_id)),
a = (null === (s = null == l ? void 0 : l.image) || void 0 === s ? void 0 : s.src) || (null === (r = e.image) || void 0 === r ? void 0 : r.src);
return R`<div class="img-item">${0!==i||3===t?R`<svg style="${o?"":"padding: 0 12px;"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path d="M18.573 8.571h-7.145V1.428a1.427 1.427 0 1 0-2.856 0V8.57H1.428a1.428 1.428 0 0 0 0 2.856h7.144v7.144a1.428 1.428 0 0 0 2.856 0v-7.145h7.144a1.428 1.428 0 0 0 0-2.855z" fill="#C5C5C5"/></svg>`:""}<bundle-product-img class="${o?"":"main--in"}" ?is-select="${e.is_selected}" .isQuickShop="${"true"===this.isQuickShop}" .count="${e.count}" .href="${e.url}" .src="${a}" @click="${()=>this.clickProduct(e)}"></bundle-product-img></div>`
}))
}
getlowestPricedProduct(t, e) {
let i = [],
o = [],
n = e;
const s = [...t];
return s.sort(((t, e) => Number(t.price) - Number(e.price))), s.forEach((t => {
if (0 === n) o.push(t);
else {
const e = Number(t.count);
e <= n ? (i.push(t), n -= e) : (i.push(Object.assign(Object.assign({}, t), {
count: `${n}`
})), o.push(Object.assign(Object.assign({}, t), {
count: "" + (e - n)
})), n = 0)
}
})), [i, o]
}
getPrice(t, e = "price") {
let i = 0;
return t.filter((t => t.is_selected)).forEach((t => {
var o;
const n = null === (o = t.variants) || void 0 === o ? void 0 : o.find((e => e.id === t.selected_id)),
s = +(n && n[e] || 0);
i += +t.count * s
})), i
}
handlePriceValue() {
const t = this.getPrice(this.selectedInfo);
let e = t,
i = 0;
if (this.bundleInfo.layer_type === Wt) {
const t = this.selectedInfo.filter((t => t.is_selected));
if (!this.bundleInfo.target_product_id || this.bundleInfo.target_product_id && this.selectedInfo.filter((t => t.is_selected)).some((t => t.id === this.bundleInfo.target_product_id))) {
let o = 0,
n = 0;
const s = t.reduce(((t, e) => t + Number(e.count)), 0),
r = this.bundleInfo.prerequisite_quantity_range;
for (let t = r.length - 1; t >= 0; t--) {
const e = r[t],
{
value: i,
greater_than_or_equal_to: l
} = e;
if (s >= Number(l)) {
o = Number(i), n = Number(l);
break
}
}
if (this.bundleInfo.value_type === Ut) i = o, e -= o;
else if (this.bundleInfo.value_type === Dt) {
const [s, r] = this.getlowestPricedProduct(t, n), l = this.getPrice(s), a = this.getPrice(r);
i = Math.round(l * (o / 100) * 100) / 100, e = l - i + a
}
}
} else {
const o = Number(this.bundleInfo.value);
this.bundleInfo.value_type === Mt ? o < Number(e) && (e = o, i = t - o) : this.bundleInfo.value_type === Ut ? (i = o, e -= o) : this.bundleInfo.value_type === Dt && (i = Math.round(e * (o / 100) * 100) / 100, e -= i)
}
return e = e < 0 ? 0 : e, this.bundleInfo.totalPrice = e.toFixed(2), {
salePrice: t.toFixed(2),
savePrice: i.toFixed(2)
}
}
updated() {
var t;
if (this.computeWidth(), this.modalVisible) {
const e = document.createElement("bundle-product-modal");
e.data = this.modalProduct, e.setAttribute("btn-bg-color", this.btnBgColor), e.setAttribute("btn-text-color", this.btnTextColor), e.setAttribute("top", document.documentElement.scrollTop.toString()), e.close = () => {
this.modalVisible = !1, e.remove()
}, null === (t = document.querySelector(".bundle-combination-container")) || void 0 === t || t.appendChild(e)
}
}
changeCheckBox(t) {
const {
index: e
} = t.detail, i = this.selectedInfo[e].is_selected;
this.selectedInfo[e].is_selected = !i, this.requestUpdate(), window.sa && window.sa.track("plugin_bundle_combination_product_select", {
block: !0
})
}
render() {
var t, e;
if (!this.bundleInfo) return;
const i = this.parentNode.offsetWidth > 960;
i && (null === (e = null === (t = document.querySelector(".bundle-combination-container")) || void 0 === t ? void 0 : t.classList) || void 0 === e || e.add("app-container")), this.selectedInfo = this.bundleInfo ? this
.bundleInfo.entitled_products.filter((t => t.published)) : [], this.clickSelect();
const {
salePrice: o,
savePrice: n
} = this.handlePriceValue();
let s = "";
return [Vt.FASHION_HORIZONTAL, Vt.FASHION_VERTICAL].includes(this.styleType) && (s = this.styleType),
R`<div class="main ${s}"><div class="header" style="${s?"margin-bottom: 20px;":""}"><div class="title" style="${i?"":"font-size: 20px;"}"><span style="color:${this.titleColor}">${this.titleText}</span></div>${this.switchable?R`<div class="switch" @click="${this.switch}" style="${i?"":"font-size: 14px;"}">Related Items</div>`:""}</div>${s?R`<bundle-fashion .overWidth="${i}" title-text="${this.titleText}" switchable="${this.switchable}" title-color="${this.titleColor}" btn-bg-color="${this.btnBgColor}" btn-text-color="${this.btnTextColor}" styleTypeClass="${s}" .isQuickShop="${"true"===this.isQuickShop}" .atcBtnStyle="${this.atcBtnStyle}" .select_one="${this.select_one}" .loading="${this.loading}" .success="${this.success}" .selected_all="${this.selected_all}" .selectedInfo="${this.selectedInfo}" .bundleInfo="${this.bundleInfo}" .salePrice="${o}" .savePrice="${n}" @clickSelect="${this.clickSelect}" @clickProduct="${this.clickProduct}" @changeCheckBox="${this.changeCheckBox}" @addToCart="${this.addSelectedToCart}" @buySelectedProduct="${this.buySelectedProduct}"></bundle-fashion>`:R`<bundle-sutra .overWidth="${i}" title-text="${this.titleText}" switchable="${this.switchable}" title-color="${this.titleColor}" btn-bg-color="${this.btnBgColor}" btn-text-color="${this.btnTextColor}" styleTypeClass="${s}" .isQuickShop="${"true"===this.isQuickShop}" .atcBtnStyle="${this.atcBtnStyle}" .select_one="${this.select_one}" .loading="${this.loading}" .success="${this.success}" .selected_all="${this.selected_all}" .selectedInfo="${this.selectedInfo}" .bundleInfo="${this.bundleInfo}" .salePrice="${o}" .savePrice="${n}" @clickSelect="${this.clickSelect}" @clickProduct="${this.clickProduct}" @changeCheckBox="${this.changeCheckBox}" @addToCart="${this.addSelectedToCart}" @buySelectedProduct="${this.buySelectedProduct}"></bundle-sutra>`}</div>${""}`
}
}
Gt.styles = [
l`.main{padding:20px 0;margin-left:auto;margin-right:auto;max-width:var(--layout-width,1366px)}.header{display:flex;align-items:center}.title{font-size:24px;line-height:24px}.switch{cursor:pointer;text-decoration:underline;font-size:16px;white-space:nowrap;margin-left:10px}.main--in.main{padding:20px 0}.main--in .header{flex-direction:column;align-items:flex-start}.main--in .switch{font-size:14px;margin-top:4px;margin-left:0}@media (max-width:960px){.main{padding:20px 0;max-width:unset}.header{flex-direction:column;align-items:flex-start;margin-bottom:8px}.title{font-size:16px!important}.switch{font-size:14px;margin-top:4px;margin-left:0}}`,
l`.fashionHorizontal .title{font-size:22px;line-height:24px}.fashionHorizontal .switch{color:val(--color-body-text,#292929);font-weight:400}.fashionHorizontal .header{justify-content:space-between}.fashionVertical .header{flex-direction:column;align-items:flex-start}.fashionVertical .switch{margin-top:10px;margin-left:0}.fashionVertical.main{margin-right:initial}.main--in.fashionHorizontal .header{flex-direction:column;align-items:flex-start;justify-content:flex-start}.main--in.fashionHorizontal .switch{margin-top:4px;margin-left:0}.main--in.fashionHorizontal.main{padding:20px 0}.main--in.fashionVertical.main{padding:20px 0!important;margin-left:0}.main--in.fashionVertical.main{margin-right:auto}@media (max-width:960px){.fashionVertical.main{margin-right:auto}}`
], t([dt({
type: String,
attribute: "title-text"
})], Gt.prototype, "titleText", void 0), t([dt()], Gt.prototype, "switchable", void 0), t([dt({
type: String,
attribute: "title-color"
})], Gt.prototype, "titleColor", void 0), t([dt({
type: String,
attribute: "btn-bg-color"
})], Gt.prototype, "btnBgColor", void 0), t([dt({
type: String,
attribute: "btn-text-color"
})], Gt.prototype, "btnTextColor", void 0), t([dt({
type: String,
attribute: !1
})], Gt.prototype, "pid", void 0), t([dt({
type: String,
attribute: !1
})], Gt.prototype, "discount_ids", void 0), t([dt({
attribute: !1
})], Gt.prototype, "bundleInfo", void 0), t([dt({
type: String,
attribute: "style-type"
})], Gt.prototype, "styleType", void 0), t([dt({
attribute: "is-quick-shop"
})], Gt.prototype, "isQuickShop", void 0), t([dt({
attribute: !1
})], Gt.prototype, "atcBtnStyle", void 0), t([ct()], Gt.prototype, "selected_all", void 0), t([ct()], Gt.prototype, "select_one", void 0), t([ct()], Gt.prototype, "selectedInfo", void 0), t([ct()], Gt.prototype, "modalProduct",
void 0), t([ct()], Gt.prototype, "modalVisible", void 0), t([ct()], Gt.prototype, "loading", void 0), t([ct()], Gt.prototype, "success", void 0), t([ct()], Gt.prototype, "onResize", void 0), window.customElements.get(
"bundle-product-list") || window.customElements.define("bundle-product-list", Gt);
class Qt extends st {
constructor() {
super(...arguments), this.src = "", this.href = "", this.styleTypeClass = "", this.isFirst = !1, this.isSelect = !0, this.isQuickShop = !1, this.count = 1, this.icon = R`<div class="icon"></div>`
}
updated() {
if (window.innerWidth < 960) return;
const {
isInProductInfo: t,
productInfoWidth: e
} = qt(!0);
if (!t) return;
this.item.classList.add("product-img--in");
const i = e || 500;
if (this.styleTypeClass === Vt.FASHION_HORIZONTAL) {
const t = (i - 32) / 3;
this.item.style.width = `${t}px`, this.item.style.height = 4 * t / 3 + "px"
} else if (this.styleTypeClass === Vt.FASHION_VERTICAL);
else {
const t = (i - 88) / 3;
this.item.style.height = `${t}px`, this.item.style.width = `${t}px`
}
}
render() {
return R`<div class="product-img"><a .href="${this.isQuickShop?"javascript:void(0);":It(this.href)}"><img src="${this.src}" class="${this.isSelect?"select":""} lazyload" alt="appbundle"> </a>${this.count>1?R`<div class="count notranslate ${this.isSelect?"select":""}">x ${this.count}</div>`:""}</div>`
}
}
Qt.styles = [
l`:host{display:flex;align-items:center}:host(.sutra) .product-img{position:relative;max-width:160px;max-height:160px;width:9vw;height:9vw;border-radius:4px;overflow:hidden}a{position:relative;display:block;width:100%;height:100%}img{position:absolute;left:0;right:0;top:0;bottom:0;max-width:100%;max-height:100%;display:block;margin:auto;opacity:.2}.product-img .select{opacity:1}.icon{padding:0 16px}.count{position:absolute;top:0;right:0;background-color:#ec9154;color:#fff;font-size:12px;line-height:1;padding:4px 6px;font-weight:800;border-bottom-left-radius:4px;opacity:.2}@media (max-width:960px){:host(.sutra) .product-img{width:90px!important;height:90px!important}}`,
l`:host(.fashionHorizontal) .product-img{width:100%;height:260px;position:relative}:host(.fashionHorizontal) .count{top:initial;bottom:0;right:0;border-bottom-left-radius:0;padding:6px 10px;background:rgba(41,41,41,.4);font-family:Jost;font-size:14px;font-style:normal;font-weight:400;line-height:14px}:host(.fashionHorizontal) .product-img--in.product-img{height:200px}:host(.fashionHorizontal) .product-img--in .count{padding:2px 4px;font-size:12px}@media (max-width:960px){:host(.fashionHorizontal) .product-img{height:200px}:host(.fashionHorizontal) .count{padding:4px 8px;font-size:12px}}`,
l`:host(.fashionVertical){height:100%;margin:0 16px;position:relative}:host(.fashionVertical) .product-img{width:103px;height:138px}:host(.fashionVertical) .count{top:initial;bottom:0;right:0;border-bottom-left-radius:0;padding:6px 10px;background:rgba(41,41,41,.4);font-family:Jost;font-size:14px;font-style:normal;font-weight:400;line-height:14px}:host(.fashionVertical) .product-img--in.product-img{width:85px;height:113px}:host(.fashionVertical) .product-img--in.count{padding:2px 4px;font-size:12px}@media (max-width:960px){:host(.fashionVertical) .product-img{width:85px;height:113px}:host(.fashionVertical) .count{padding:4px 8px;font-size:12px}}`
], t([dt({
type: String
})], Qt.prototype, "src", void 0), t([dt({
type: String
})], Qt.prototype, "href", void 0), t([dt()], Qt.prototype, "styleTypeClass", void 0), t([dt({
type: Boolean,
attribute: "is-first"
})], Qt.prototype, "isFirst", void 0), t([dt({
type: Boolean,
attribute: "is-select"
})], Qt.prototype, "isSelect", void 0), t([dt({
type: Boolean
})], Qt.prototype, "isQuickShop", void 0), t([dt({
type: Number
})], Qt.prototype, "count", void 0), t([ht(".product-img")], Qt.prototype, "item", void 0), window.customElements.get("bundle-product-img") || window.customElements.define("bundle-product-img", Qt);
const Jt = R`<svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16" fill="none"><path d="M8.5 0.928955L1.42893 8.00002L8.5 15.0711" stroke="#222222" stroke-width="2"/></svg>`,
Yt = R`<svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16" fill="none"><path d="M1.5 0.928955L8.57107 8.00002L1.5 15.0711" stroke="#222222" stroke-width="2"/></svg>`,
Zt =
R`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><rect x="1" y="1" width="22" height="22" rx="1" fill="#292929"/><path d="M5.3938 12.4719L10.8058 17.0053L18.6062 6.99475" stroke="white" stroke-width="2.2"/><rect x="1" y="1" width="22" height="22" rx="1" stroke="#292929" stroke-width="2"/></svg>`,
Kt =
R`<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect width="16" height="16" rx="2" fill="#2C77F6"/><path d="M12.328 3.75l1.422 1.408-7.163 7.092L2.25 7.956l1.422-1.409 2.915 2.886 5.74-5.683z" fill="#fff"/></svg>`,
Xt =
R`<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="1" width="14" height="14" rx="1" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M16 1.994C16 .894 15.107 0 14.006 0H1.994C.894 0 0 .893 0 1.994v12.012C0 15.106.893 16 1.994 16h12.012c1.1 0 1.994-.893 1.994-1.994V1.994zM1.994 1h12.012l.116.007a.996.996 0 0 1 .878.987v12.012l-.007.116a.996.996 0 0 1-.987.878H1.994l-.116-.007A.995.995 0 0 1 1 14.006V1.994l.007-.116A.996.996 0 0 1 1.994 1z" fill="#D8DBE6"/></svg>`,
te =
R`<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path opacity=".01" fill="#fff" d="M0 0h16v16H0z"/><path d="M8 11.048a.748.748 0 0 0 .57-.26l4.555-4.556a.75.75 0 0 0-1.06-1.06L8 9.236 3.936 5.172a.75.75 0 0 0-1.061 1.06l4.555 4.556a.748.748 0 0 0 .57.26z" fill="#0A1533"/></svg>`,
ee =
R`<svg style="display:block;margin:auto" width="22" height="22" viewBox="0 0 50 50"><path fill="currentColor" fill-opacity=".6" d="M43.935 25.145c0-10.318-8.364-18.683-18.683-18.683-10.318 0-18.683 8.365-18.683 18.683h4.068c0-8.071 6.543-14.615 14.615-14.615s14.615 6.543 14.615 14.615h4.068z"><animateTransform attributeName="transform" attributeType="xml" dur="0.6s" from="0 25 25" repeatCount="indefinite" to="360 25 25" type="rotate"/></path></svg>`,
ie = document.querySelector("bundle-product-list");
class oe extends st {
constructor() {
super(...arguments), this.backgroundColor = (null == ie ? void 0 : ie.getAttribute("btn-bg-color")) || "#EE7C30", this.textColor = (null == ie ? void 0 : ie.getAttribute("btn-text-color")) || "#FFFFFF", this.disabled = !1,
this.loading = !1, this.success = !1, this.successHtml =
R`<svg width="16" height="17" viewBox="0 0 16 17"><path d="M8 16.5a8 8 0 1 1 .001-16A8 8 0 0 1 8 16.5zM8 2.043c-3.787 0-6.457 2.67-6.457 6.457S4.213 14.957 8 14.957s6.457-2.67 6.457-6.457S11.787 2.043 8 2.043zm-.74 9.148l-.138.137-.027-.027a.555.555 0 0 1-.238.056.559.559 0 0 1-.321-.111l-.014.013-.068-.068-.001-.002-2.355-2.354.808-.808 1.951 1.95 4.306-4.306.808.809-4.71 4.71z" fill="currentColor"/></svg> Added`
}
render() {
let t = null;
return this.loading && (t = ee), this.success && (t = this.successHtml),
R`<div class="button" style="${`background-color: ${this.backgroundColor};color: ${this.textColor};${this.disabled?"background-color: #D9DADB;":""}`}">${t||R`<slot></slot>`}</div>`
}
}
oe.styles = [
l`.button{font-size:14px;line-height:24px;font-weight:500;justify-content:center;align-items:center;padding:12px 20px;border-radius:4px 4px 4px 4px;cursor:pointer;white-space:initial;word-break:keep-all}@media (max-width:960px){.button{text-align:center}}`,
l`:host(.fashionHorizontal) .button{border-radius:0;text-align:center}`, l`:host(.fashionVertical) .button{border-radius:0}`
], t([dt({
type: String,
attribute: "bg-color"
})], oe.prototype, "backgroundColor", void 0), t([dt({
type: String,
attribute: "text-color"
})], oe.prototype, "textColor", void 0), t([dt({
type: Boolean
})], oe.prototype, "disabled", void 0), t([dt({
type: Boolean
})], oe.prototype, "loading", void 0), t([dt({
type: Boolean
})], oe.prototype, "success", void 0), window.customElements.get("bundle-button") || window.customElements.define("bundle-button", oe);
const ne = l`:host(fashion-horizontal) .content_flex{display:flex}`;
class se extends st {
constructor() {
super(...arguments), this.index = 0, this.isSelect = !1, this.selectedOptions = {}, this.thisOne = !1, this.styleTypeClass = "", this.price = "", this.compare_at_price = "", this.modalWidth = 260, this.modalLeft = 0, this
.modalTop = 0, this.showModal = t => {
if (window.innerWidth < 960 || /none/.test(t.target.classList)) return;
const e = t.clientX - t.offsetX;
e + 300 > window.innerWidth ? this.modalLeft = e - (this.modalWidth - t.target.offsetWidth) : this.modalLeft = e, this.modalTop = t.clientY - t.offsetY + t.target.offsetHeight, this.isSelect = !0, this.eva(this.isSelect)
}, this.hideModal = () => {
window.innerWidth < 960 || (this.isSelect = !1, this.eva(this.isSelect))
}
}
requestUpdate() {
super.requestUpdate()
}
willUpdate() {
if (this.data.variants) {
if (this.data.selected_options) this.selectedOptions = Object.assign({}, this.data.selected_options);
else
for (let t of this.data.variants)
if (t.available) {
this.selectedOptions.option1 = t.option1, this.selectedOptions.option2 = t.option2, this.selectedOptions.option3 = t.option3;
break
} this.data.selected_id ? this.data.variants.forEach((t => {
t.id === this.data.selected_id && (this.price = t.price, this.compare_at_price = t.compare_at_price)
})) : (this.price = this.data.variants[0].price, this.compare_at_price = this.data.variants[0].compare_at_price)
}
}
updated() {
const {
isInProductInfo: t
} = qt();
t && this.bundleProductSelect && (t ? this.bundleProductSelect.classList.add("bundle-product-select--in") : this.bundleProductSelect.classList.remove("bundle-product-select--in"))
}
eva(t) {
const e = !document.querySelector('div[data-section-type*="//apps/appbundle/blocks/bundle-combination/"] bundle-product-list');
if ("Eva" === window.C_SETTINGS.theme.merchant_theme_name && e) {
const e = document.querySelector(".product-info__body");
e && (t ? e.classList.remove("tw-overflow-hidden") : e.classList.add("tw-overflow-hidden"))
}
}
clickBundle() {
if (window.innerWidth > 960) return;
const t = this.data.options && 0 === this.data.options.length,
e = this.data.options && this.data.options.length > 0 && 1 === this.data.variants.length;
t || e || (this.isSelect = !this.isSelect, this.eva(this.isSelect))
}
variantClick(t) {
var e, i;
const o = this;
Object.assign(this.selectedOptions, t.detail), null === (i = null === (e = this.data) || void 0 === e ? void 0 : e.variants) || void 0 === i || i.forEach((function(t) {
t.option1 === o.selectedOptions.option1 && t.option2 === ((null == o ? void 0 : o.selectedOptions.option2) || "") && t.option3 === ((null == o ? void 0 : o.selectedOptions.option3) || "") && (o.data.selected_id = t
.id, o.price = t.price, o.compare_at_price = t.compare_at_price)
})), this.data.selected_options = Object.assign({}, this.selectedOptions)
}
onChange() {
this.dispatchEvent(new CustomEvent("changeCheckBox", {
detail: {
index: this.index
},
bubbles: !0,
composed: !0
}))
}
render() {
var t;
const e = this.data.options && 0 === this.data.options.length || !this.data.options,
i = this.data.options && this.data.options.length > 0 && 1 === this.data.variants.length,
o = R`<div class="price money notranslate">${Nt(Number(this.price).toFixed(2))}</div>`;
return R`<div class="bundle-product-select"><div class="title" @click="${this.onChange}">${this.thisOne?R`<span style="font-weight:800">This item: </span>`:""}${this.data.title}</div>${this.styleTypeClass?R`<div class="price-wrap">${o}</div>`:""}<div class="content_flex select notranslate ${e||i?"none":""}" @mouseenter="${this.showModal}" @mouseleave="${this.hideModal}">${e?"":R`<div class="label ${this.isSelect?" lable-select":""} ${i?"one-option":""}" @click="${this.clickBundle}"><div class="selected-variant ${i?"white-space: normal;":""}">${Object.values(this.selectedOptions).filter((t=>!!t)).join("/")}</div>${i?"":te}</div>`} ${this.styleTypeClass?"":o} ${this.isSelect?R`<bundle-select-modal @variantClick="${this.variantClick}" @closeModal="${()=>{setTimeout((()=>{this.isSelect=!1,this.eva(this.isSelect)}),200)}}" class="option_overlay ${this.isSelect?"":"hidden"}" style="${window.innerWidth>960?`left: ${this.modalLeft}px; top: ${this.modalTop}px;`:""}width:${this.modalWidth}" .selectedOptions="${this.data.selected_options||this.selectedOptions}" .options="${null===(t=this.data)||void 0===t?void 0:t.options}" .data="${this.data}" .isSelect="${this.isSelect}" top="${document.documentElement.scrollTop.toString()}"></bundle-select-modal>`:""}<div class="dropdown-overlay ${this.isSelect?"":"hidden"}" @click="${()=>this.isSelect=!1}"></div></div></div>`
}
}
se.styles = [ne, l`.content_flex{display:flex;align-items:center;position:relative;max-width:100%}.price{white-space:nowrap;color:var(--color_price)}.label{cursor:pointer}`,
l`:host(.sutra) .bundle-product-select{display:flex}:host(.sutra) .title{margin-left:16px;margin-right:16px;width:372px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;line-height:16px;color:#212b36;align-self:center}input{width:16px;height:16px;margin:0;padding:0;margin-right:12px;cursor:pointer}:host(.sutra) .label{display:flex;align-items:center;justify-content:space-between;width:260px;min-width:0;margin-right:16px;padding:6px 12px;border-radius:2px 2px 2px 2px;border:1px solid #d8dbe6;box-sizing:border-box}.one-option{padding-left:0;padding-right:0;border:none;width:auto!important}.label>svg{flex-shrink:0;margin-left:10px}.hidden{display:none!important}.lable-select{border:1px solid #30354d!important}.options{max-width:212px}:host(.sutra) .price{margin-right:auto;flex-shrink:0;font-size:16px}.selected-variant{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#212b36}.option_overlay{position:fixed;box-sizing:border-box;top:100%;left:0;max-height:300px;width:260px;overflow-y:scroll;background:#fff;box-shadow:0 2px 10px 1px rgba(0,0,0,.10000000149011612),0 0 4px 1px rgba(0,0,0,.03999999910593033);display:none;z-index:1100;padding:16px;padding-bottom:0;display:block;scrollbar-width:none;-ms-overflow-style:none}.option_overlay::-webkit-scrollbar{display:none}:host(.w-full) .bundle-product-select{flex-direction:column}:host(.w-full) .bundle-product-select .title{align-self:auto}:host(.w-full) .select{justify-content:space-between;margin-top:8px;margin-left:16px;box-sizing:border-box}:host(.w-full) .content,:host(.w-full) .content_flex,:host(.w-full) .title{width:auto}:host(.w-full) .label{flex:1}@media (max-width:960px){.bundle-product-select{flex-direction:column}.bundle-product-select .title{align-self:auto}.content,.content_flex,.title{width:auto}:host(.sutra) .label{flex:1}:host(.sutra) .bundle-product-select{flex-direction:column}.option_overlay{position:fixed;max-height:80vh;top:50%;left:50%!important;overflow-y:auto;transform:translate(-50%,-50%);z-index:1101;border-radius:4px;width:90%!important;padding:0}:host(.sutra) .title{width:auto}:host(.sutra) .price{font-size:14px}.dropdown-overlay{position:fixed;top:0;bottom:0;left:0;right:0;display:block;background-color:rgba(0,0,0,.5);z-index:1100}:host(.sutra) .select{justify-content:space-between;margin-top:8px;margin-left:16px;box-sizing:border-box}}`,
l`:host(.fashionHorizontal) .title,:host(.fashionVertical) .title{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:rgba(41,41,41,.75);font-family:Jost;font-size:14px;font-style:normal;font-weight:400;margin-bottom:10px}:host(.fashionHorizontal) .price-wrap{display:flex;flex-wrap:wrap;align-items:baseline;margin-bottom:20px}:host(.fashionHorizontal) .price,:host(.fashionVertical) .price{font-size:22px;margin-right:8px;line-height:18px;overflow:hidden;text-overflow:ellipsis}:host(.fashionHorizontal) .originPrice,:host(.fashionVertical) .originPrice{color:var(--color_price);color:#9f9f9f;font-family:Jost;font-size:16px;font-style:normal;font-weight:400;text-decoration:line-through;line-height:18px}:host(.fashionHorizontal) .label{display:flex;align-items:center;justify-content:center;width:100%;max-width:200px;border:1px solid #e6e6e6;box-sizing:border-box;padding:10px 20px}:host(.fashionHorizontal) .option_overlay{position:fixed}:host(.fashion-full.fashionHorizontal) .label{padding:4px 8px}:host(.fashion-full.fashionHorizontal) .price-wrap{display:block;margin-bottom:10px}:host(.fashion-full.fashionHorizontal) .price{margin-right:0;margin-bottom:8px;font-size:14px;white-space:initial}@media (max-width:960px){:host(.fashionHorizontal) .label{padding:4px 8px}:host(.fashionHorizontal) .price{font-size:14px}}`,
l`:host(.fashionVertical) .select{margin-right:auto}:host(.fashionVertical) .bundle-product-select{display:flex;flex-direction:column;min-height:128px;height:100%}:host(.fashionVertical) .price-wrap{display:flex;flex-wrap:wrap;align-items:baseline;margin-bottom:auto}:host(.fashionVertical) .label{display:flex;align-items:center;justify-content:center;width:auto;max-width:100%;border:1px solid #e6e6e6;box-sizing:border-box;padding:10px 20px;margin-top:10px}:host(.fashion-full.fashionVertical) .label{padding:4px 8px}:host(.fashionVertical) .bundle-product-select--in .price{font-size:14px}:host(.fashion-full.fashionVertical) .bundle-product-select{min-height:100px}:host(.fashion-full.fashionVertical) .select{width:auto}@media (min-width:960px){:host(.fashionVertical) .bundle-product-select--in .label>svg{margin-left:0}}@media (max-width:960px){:host(.fashionVertical) .label{padding:4px 8px}:host(.fashionVertical) .bundle-product-select{min-height:100px}:host(.fashionVertical) .select{margin-right:initial;width:auto}:host(.fashionVertical) .price{font-size:14px}}`
], t([dt()], se.prototype, "data", void 0), t([dt({
type: Number,
attribute: "index"
})], se.prototype, "index", void 0), t([dt({
type: Boolean
})], se.prototype, "isSelect", void 0), t([dt()], se.prototype, "selectedOptions", void 0), t([dt({
type: Boolean,
attribute: "this-one"
})], se.prototype, "thisOne", void 0), t([dt()], se.prototype, "styleTypeClass", void 0), t([ht(".option_overlay")], se.prototype, "modalEl", void 0), t([ht(".label")], se.prototype, "labelEl", void 0), t([ht(
".bundle-product-select")], se.prototype, "bundleProductSelect", void 0), t([ht(".dropdown-overlay")], se.prototype, "maskEl", void 0), t([ct()], se.prototype, "price", void 0), t([ct()], se.prototype, "compare_at_price",
void 0), t([ct()], se.prototype, "modalWidth", void 0), t([ct()], se.prototype, "modalLeft", void 0), t([ct()], se.prototype, "modalTop", void 0), window.customElements.get("bundle-product-select") || window.customElements
.define("bundle-product-select", se);
var re = !1;
if ("undefined" != typeof window) {
var le = {
get passive() {
re = !0
}
};
window.addEventListener("testPassive", null, le), window.removeEventListener("testPassive", null, le)
}
var ae = "undefined" != typeof window && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || "MacIntel" === window.navigator.platform && window.navigator.maxTouchPoints > 1),
de = [],
ce = !1,
pe = -1,
he = void 0,
ue = void 0,
fe = void 0,
ve = function(t) {
return de.some((function(e) {
return !(!e.options.allowTouchMove || !e.options.allowTouchMove(t))
}))
},
me = function(t) {
var e = t || window.event;
return !!ve(e.target) || (e.touches.length > 1 || (e.preventDefault && e.preventDefault(), !1))
},
ge = function(t, e) {
if (t) {
if (!de.some((function(e) {
return e.targetElement === t
}))) {
var i = {
targetElement: t,
options: e || {}
};
de = [].concat(function(t) {
if (Array.isArray(t)) {
for (var e = 0, i = Array(t.length); e < t.length; e++) i[e] = t[e];
return i
}
return Array.from(t)
}(de), [i]), ae ? window.requestAnimationFrame((function() {
if (void 0 === ue) {
ue = {
position: document.body.style.position,
top: document.body.style.top,
left: document.body.style.left
};
var t = window,
e = t.scrollY,
i = t.scrollX,
o = t.innerHeight;
document.body.style.position = "fixed", document.body.style.top = -e, document.body.style.left = -i, setTimeout((function() {
return window.requestAnimationFrame((function() {
var t = o - window.innerHeight;
t && e >= o && (document.body.style.top = -(e + t))
}))
}), 300)
}
})) : function(t) {
if (void 0 === fe) {
var e = !!t && !0 === t.reserveScrollBarGap,
i = window.innerWidth - document.documentElement.clientWidth;
if (e && i > 0) {
var o = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"), 10);
fe = document.body.style.paddingRight, document.body.style.paddingRight = o + i + "px"
}
}
void 0 === he && (he = document.body.style.overflow, document.body.style.overflow = "hidden")
}(e), ae && (t.ontouchstart = function(t) {
1 === t.targetTouches.length && (pe = t.targetTouches[0].clientY)
}, t.ontouchmove = function(e) {
1 === e.targetTouches.length && function(t, e) {
var i = t.targetTouches[0].clientY - pe;
!ve(t.target) && (e && 0 === e.scrollTop && i > 0 || function(t) {
return !!t && t.scrollHeight - t.scrollTop <= t.clientHeight
}(e) && i < 0 ? me(t) : t.stopPropagation())
}(e, t)
}, ce || (document.addEventListener("touchmove", me, re ? {
passive: !1
} : void 0), ce = !0))
}
} else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")
},
ye = function(t) {
t ? (de = de.filter((function(e) {
return e.targetElement !== t
})), ae && (t.ontouchstart = null, t.ontouchmove = null, ce && 0 === de.length && (document.removeEventListener("touchmove", me, re ? {
passive: !1
} : void 0), ce = !1)), ae ? function() {
if (void 0 !== ue) {
var t = -parseInt(document.body.style.top, 10),
e = -parseInt(document.body.style.left, 10);
document.body.style.position = ue.position, document.body.style.top = ue.top, document.body.style.left = ue.left, window.scrollTo(e, t), ue = void 0
}
}() : (void 0 !== fe && (document.body.style.paddingRight = fe, fe = void 0), void 0 !== he && (document.body.style.overflow = he, he = void 0))) : console.error(
"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")
};
let be;
class xe extends st {
constructor() {
super(...arguments), this.selectedOptions = {}, this.options = [], this.data = {}, this.top = "", this.price = "", this.compareAtPrice = "", this.image = {}, this.isSelect = !1, this.priceScope = "", this.backgroundColor =
"#EE7C30"
}
willUpdate() {
var t, e, i;
const o = this;
null === (e = null === (t = this.data) || void 0 === t ? void 0 : t.variants) || void 0 === e || e.forEach((function(t, e) {
var i;
t.option1 === o.selectedOptions.option1 && t.option2 === ((null == o ? void 0 : o.selectedOptions.option2) || "") && t.option3 === ((null == o ? void 0 : o.selectedOptions.option3) || "") && (o.image = (null === (i =
null == t ? void 0 : t.image) || void 0 === i ? void 0 : i.src) ? null == t ? void 0 : t.image : o.data.image, o.price = t.price, o.compareAtPrice = t.compare_at_price)
})), null === (i = this.modalInputEl) || void 0 === i || i.focus()
}
attributeChangedCallback(t, e, i) {
"top" === t && +i > 0 && (be = +i)
}
closeModal() {
var t;
window.innerWidth < 960 && ye(null === (t = this.shadowRoot) || void 0 === t ? void 0 : t.querySelector(".select")), document.documentElement.scrollTop = be, this.dispatchEvent(new CustomEvent("closeModal", {
bubbles: !0,
composed: !0,
cancelable: !0
}))
}
firstUpdated() {
window.innerWidth < 960 || (this.modalEl.addEventListener("mousedown", (t => {
this.closeIconEl.contains(t.target) || t.preventDefault()
})), this.modalInputEl.addEventListener("blur", (() => {
this.closeModal()
})))
}
variantChange(t) {
this.priceScope = t.detail
}
render() {
var t, e;
this.isSelect && window.innerWidth < 960 && ge(this.selectEl);
const i = (null === (t = this.selectEl) || void 0 === t ? void 0 : t.scrollHeight) > (null === (e = this.selectEl) || void 0 === e ? void 0 : e.clientHeight);
return R`<input id="modal" readonly="readonly"> <label class="modal notranslate" for="modal"><div class="modal_content"><div class="modal_header"><div class="modal_header_img"><img src="${this.image.src}" class="lazyload" alt="appbundle"></div><div class="modal_header_info"><div class="modal_header_title">${this.data.title}</div><div class="prices"><div class="modal_header_price money notranslate">${this.priceScope||Nt(this.price)}</div><div class="modal_compare_price money notranslate">${Nt(this.compareAtPrice)}</div></div></div><div class="modal_close_icon" @click="${this.closeModal}"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none"><path fill="#000" d="m17.41 16.02 4.24 4.24a1.002 1.002 0 0 1-1.418 1.416l-4.241-4.24-4.269 4.269a1.009 1.009 0 0 1-1.427-1.427l4.27-4.27-4.24-4.24a1 1 0 0 1 1.414-1.416l4.241 4.241 4.298-4.298a1.009 1.009 0 0 1 1.427 1.427l-4.296 4.299Z"/></svg></div></div><div class="options"><bundle-product-option class="select" .isSelect="${this.isSelect}" .selectedOptions="${this.selectedOptions}" .options="${this.options}" .data="${this.data}" @variantClick="${()=>this.priceScope=""}" @variantChange="${this.variantChange}"></bundle-product-option></div></div></label><div class="btn" style="${i?"box-shadow: 0px 2px 10px 1px rgb(0 0 0 / 10%);":""}"><bundle-button @click="${this.closeModal}">confirm</bundle-button></div>`
}
}
xe.styles =
l`:host{position:relative}.modal_header{display:none}input#modal{height:0;opacity:0;border:0;position:absolute}.btn{display:none}@media(max-width:960px){.modal{display:flex;max-height:80vh;overflow:hidden}.modal_content{display:flex;flex-direction:column;overflow:hidden;width:100%}.modal_header{display:flex;position:relative;margin-bottom:16px;padding:16px;padding-bottom:0;flex-shrink:0}.modal_header .modal_close_icon{position:absolute;top:8px;right:6px}.modal_header_img img{margin-right:16px;flex-shrink:0}.modal_header_img{height:66px}.modal_header_img img{width:66px;height:66px;object-fit:cover;border-radius:4px 4px 4px 4px}.modal_header_info{margin-right:36px}.prices{display:flex;align-items:baseline}.modal_header_title{width:100%;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:16px}.modal_header_price{color:var(--color_price);font-size:16px;font-weight:500}.modal_compare_price{color:var(--color_origin_price);font-size:14px;margin-left:8px;text-decoration:line-through;font-weight:400}.options_wrap{padding:0 16px 78px 16px;flex:1;overflow:hidden}.options{flex:1;display:flex;overflow:hidden;padding-bottom:74px}.select{overflow:auto;padding:0 16px}.btn{display:block;position:fixed;bottom:0;left:0;width:100%;box-sizing:border-box;padding:16px;background-color:#fff;font-size:16px}}`,
t([dt({})], xe.prototype, "selectedOptions", void 0), t([dt({
type: Array
})], xe.prototype, "options", void 0), t([dt()], xe.prototype, "data", void 0), t([dt()], xe.prototype, "top", void 0), t([dt()], xe.prototype, "price", void 0), t([dt()], xe.prototype, "compareAtPrice", void 0), t([dt()], xe
.prototype, "image", void 0), t([dt({
type: Boolean
})], xe.prototype, "isSelect", void 0), t([ht("label.modal")], xe.prototype, "modalEl", void 0), t([ht("input#modal")], xe.prototype, "modalInputEl", void 0), t([ht(".modal_close_icon")], xe.prototype, "closeIconEl", void 0), t(
[ht(".select")], xe.prototype, "selectEl", void 0), t([ct()], xe.prototype, "priceScope", void 0), t([dt({
type: String,
attribute: "background-color"
})], xe.prototype, "backgroundColor", void 0), window.customElements.get("bundle-select-modal") || window.customElements.define("bundle-select-modal", xe);
class we extends st {
constructor() {
super(...arguments), this.options = [], this.selectedOptions = {}, this.overlay = !1, this.index = 0, this.isSelect = !1
}
variantsTypeChange(t) {
var e, i;
let o = t.currentTarget;
if (o.classList.contains("option_container_selected")) o.classList.remove("option_container_selected");
else {
null === (e = o.parentElement.querySelector(".option_container_selected")) || void 0 === e || e.classList.remove("option_container_selected"), o.classList.add("option_container_selected");
if (this.options.length === ((null === (i = this.shadowRoot.querySelectorAll(".option_container_selected")) || void 0 === i ? void 0 : i.length) || 0)) {
let t = {};
for (let e = 0; e < this.options.length; e++) t[`option${e+1}`] = this.contentEls[e].querySelector(".option_container_selected").getAttribute("val");
this.dispatchEvent(new CustomEvent("variantClick", {
detail: t,
bubbles: !0,
composed: !0,
cancelable: !0
}))
}
}
this.requestUpdate(), setTimeout((() => {
var t;
if (this.options.length === ((null === (t = this.shadowRoot.querySelectorAll(".option_container_selected")) || void 0 === t ? void 0 : t.length) || 0)) return;
let e = this.data.variants.slice();
const i = this.data.options;
this.shadowRoot.querySelectorAll(".option_container_selected").forEach((t => {
const o = t.id.split("-"),
n = parseInt(o[0].substring(6), 10) - 1,
s = parseInt(o[1], 10);
e = e.filter((t => t[o[0]] == i[n].values[s]))
}));
const o = e.reduce(((t, e) => parseFloat(t.price) > parseFloat(e.price) ? e : t), e[0]).price,
n = e.reduce(((t, e) => parseFloat(t.price) < parseFloat(e.price) ? e : t), e[0]).price,
s = o === n ? Nt(o) : `${Nt(o)} - ${Nt(n)}`;
this.dispatchEvent(new CustomEvent("variantChange", {
detail: s
}))
}), 50)
}
updated() {
var t = this.data.variants.slice();
const e = this.data.options;
let i = [];
this.shadowRoot.querySelectorAll(".option_container_selected").forEach((o => {
var n = o.id.split("-"),
s = parseInt(n[0].substring(6), 10) - 1,
r = parseInt(n[1], 10);
i.push(n[0]), t = t.filter((t => t[n[0]] == e[s].values[r]))
}));
this.shadowRoot.querySelectorAll(".option_container:not(.option_container_selected)").forEach((o => {
var n = o.id.split("-"),
s = parseInt(n[0].substring(6), 10) - 1,
r = parseInt(n[1], 10),
l = Object.assign({}, t[0]);
l[n[0]] = e[s].values[r];
var a = i.slice(); - 1 == a.indexOf(n[0]) && a.push(n[0]);
var d = 0 == this.data.variants.filter((t => (t.option1 == l.option1 || -1 === a.indexOf("option1")) && (t.option2 == l.option2 || -1 === a.indexOf("option2")) && (t.option3 == l.option3 || -1 === a.indexOf(
"option3")) && +t.available_quantity > 0)).length;
d ? o.classList.add("disabled") : o.classList.remove("disabled")
}))
}
render() {
var t;
return R`<div class="product_option notranslate">${null===(t=this.options)||void 0===t?void 0:t.map(((t,e)=>R`<div class="option_name">${t.name}</div><div class="option_content" index="${e}">${t.values.map(((t,i)=>R`<div val="${t}" option="${`option${e+1}`}" id="${`option${e+1}-${i}`}" class="option_container ${this.selectedOptions["option"+(+e+1)]===t?"option_container_selected":""}" @click="${this.variantsTypeChange}">${t}</div>`))}</div>`))}</div>`
}
}
we.styles =
l`@media(max-width:960px){:host(.select) .product_option{max-height:70vh}}.option_content{display:flex;flex-wrap:wrap;margin-bottom:8px;margin-top:8px}.option_name{font-size:12px;line-height:16px}.option_container{min-width:36px;min-height:36px;box-shadow:inset 0 0 0 1px rgba(33,43,54,.25),inset 0 0 0 3px transparent;padding:6px 12px;margin-right:8px;margin-bottom:8px;display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:2px;font-size:14px;cursor:pointer;word-break:break-word}.option_container_selected{box-shadow:inset 0 0 0 2px var(--color-body-text,#212b36)}.disabled{background-color:#efefef;pointer-events:none}@media(max-width:960px){.option_name{font-size:14px}.option_content{font-size:16px}.option_container{min-width:42px;min-height:42px}.product_option{scrollbar-width:none;-ms-overflow-style:none}.product_option::-webkit-scrollbar{display:none}}`,
t([function(t) {
return pt({
descriptor: e => ({
get() {
var e, i;
return null !== (i = null === (e = this.renderRoot) || void 0 === e ? void 0 : e.querySelectorAll(t)) && void 0 !== i ? i : []
},
enumerable: !0,
configurable: !0
})
})
}(".option_content")], we.prototype, "contentEls", void 0), t([dt()], we.prototype, "options", void 0), t([dt()], we.prototype, "data", void 0), t([dt({})], we.prototype, "selectedOptions", void 0), t([dt({
type: Boolean
})], we.prototype, "overlay", void 0), t([dt({
type: Number
})], we.prototype, "index", void 0), t([dt({
type: Boolean
})], we.prototype, "isSelect", void 0), window.customElements.get("bundle-product-option") || window.customElements.define("bundle-product-option", we);
const _e = window.C_SETTINGS.shop.wholesale_enabled;
class $e extends st {
constructor() {
super(...arguments), this.data = {}, this.selectedOptions = {}, this.options = [], this.numDropDown = 1, this.imgList = [], this.currentImgIndex = 0, this.currentPosition = 1, this.loading = !1, this.priceScope = "", this
.icon =
R`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"><path opacity=".01" fill="#fff" d="M0 0h16v16H0z"/><path d="M8 11.048a.748.748 0 0 0 .57-.26l4.555-4.556a.75.75 0 0 0-1.06-1.06L8 9.236 3.936 5.172a.75.75 0 0 0-1.061 1.06l4.555 4.556a.748.748 0 0 0 .57.26z" fill="#0A1533"/></svg>`,
this.closeIcon =
R`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M3.404 2.343l4.595 4.595 4.597-4.595a.75.75 0 1 1 1.06 1.06L9.06 8l4.597 4.597a.75.75 0 1 1-1.06 1.06L7.998 9.06l-4.595 4.597a.75.75 0 1 1-1.06-1.06l4.594-4.598-4.595-4.595a.75.75 0 1 1 1.06-1.06z" fill="currentColor"/></svg>`
}
firstUpdated() {
var t, e, i, o, n;
if (ge(null === (t = this.shadowRoot) || void 0 === t ? void 0 : t.querySelector(".content")), this.imgList = this.data.images.map((t => t.src)) || [], null === (e = this.data) || void 0 === e ? void 0 : e.variants) {
if (this.data.selected_options) this.selectedOptions = Object.assign({}, this.data.selected_options);
else
for (let t of this.data.variants)
if (t.available) {
this.selectedOptions.option1 = t.option1, this.selectedOptions.option2 = t.option2, this.selectedOptions.option3 = t.option3;
break
} this.data.selected_id && this.data.variants.forEach(((t, e) => {
if (t.id === this.data.selected_id) {
let e = this.imgList.findIndex((e => {
var i;
return (null === (i = t.image) || void 0 === i ? void 0 : i.src) === e
}));
e > -1 && (this.currentImgIndex = e), this.changeNextOrPrev(0, 1)
}
}))
}
this.listEl.addEventListener("scroll", Lt((t => {
const e = this.listEl.scrollLeft,
i = .75 * document.body.offsetWidth;
this.currentPosition = Math.round(e / i) + 1
}), 100)), this.shadowRoot.querySelector(".modal").addEventListener("touchstart", (t => {
t.stopPropagation()
}));
(null === (i = this.shadowRoot) || void 0 === i ? void 0 : i.querySelector(".num_input")).addEventListener("blur", (t => {
if (t.target.value = t.target.value.replace(/[^\d]/g, ""), "" === t.target.value.trim() || +t.target.value.trim() < 1) return t.target.value = 1, void(this.numDropDown = 1);
this.numDropDown = +t.target.value
}));
const s = null === (o = this.shadowRoot) || void 0 === o ? void 0 : o.querySelector(".num_item_sub"),
r = null === (n = this.shadowRoot) || void 0 === n ? void 0 : n.querySelector(".num_item_add");
1 === this.numDropDown && s.classList.add("num_item_not_allow"), s.addEventListener("click", (t => {
this.numDropDown > 1 && this.numDropDown--
})), r.addEventListener("click", (t => {
var e, i, o;
const n = this.data.variants.find((t => t.id === this.data.selected_id)); + n.available_quantity > +this.numDropDown && (this.numDropDown++, null === (o = null === (i = null === (e = this.shadowRoot) || void 0 ===
e ? void 0 : e.querySelector(".num_item_not_allow")) || void 0 === i ? void 0 : i.classList) || void 0 === o || o.remove("num_item_not_allow"))
}))
}
variantChange(t) {
this.priceScope = t.detail
}
getQualifiedWPriceClassName(t) {
let e = "";
return t.max_quantity ? this.numDropDown <= t.max_quantity && this.numDropDown >= t.min_quantity && (e = "w-price-qualified") : this.numDropDown >= t.min_quantity && (e = "w-price-qualified"), e
}
variantClick(t) {
var e, i;
Object.assign(this.selectedOptions, t.detail), null === (i = null === (e = this.data) || void 0 === e ? void 0 : e.variants) || void 0 === i || i.forEach(((t, e) => {
if (t.option1 === this.selectedOptions.option1 && t.option2 === ((null == this ? void 0 : this.selectedOptions.option2) || "") && t.option3 === ((null == this ? void 0 : this.selectedOptions.option3) || "")) {
const e = this.imgList.findIndex((e => {
var i;
return (null === (i = t.image) || void 0 === i ? void 0 : i.src) === e
}));
this.data.selected_id = t.id, -1 !== e && (this.currentImgIndex = e)
}
})), this.data.selected_options = Object.assign({}, this.selectedOptions), this.scrollList(), this.changeNextOrPrev(0);
const o = this.data.variants.find((t => t.id === this.data.selected_id)); + this.numDropDown > +o.available_quantity && (this.numDropDown = +o.available_quantity), this.priceScope = "", this.requestUpdate()
}
changeImage(t) {
this.currentImgIndex = t, this.scrollList(), this.changeNextOrPrev(0)
}
scrollList() {
setTimeout((() => {
try {
const t = this.shadowRoot.querySelector(".img-item-selected");
t.parentElement.scrollTo({
left: t.offsetLeft,
behavior: "smooth"
})
} catch (t) {
console.error(t)
}
}))
}
changeNextOrPrev(t, e) {
const i = this.currentImgIndex + t;
i < 0 || i > this.imgList.length - 1 || (this.currentImgIndex += t, e ? setTimeout((() => {
this.shadowRoot.querySelector(".img-item-selected").scrollIntoView({
inline: "start"
})
})) : this.scrollList())
}
closeModal() {
var t;
ye(null === (t = this.shadowRoot) || void 0 === t ? void 0 : t.querySelector(".content")), document.documentElement.scrollTop = this.currentScrollTop, this.close()
}
buyNowProcess(t) {
var i;
return e(this, void 0, void 0, (function*() {
let e = t.properties || {};
const o = yield Bt.post("/api/checkout/order", {
body: {
line_items: [{
quantity: +this.numDropDown || 1,
variant_id: t.selected_id,
note: "",
properties: e
}],
refer_info: {
source: "buy_now"
}
}
});
if ("success" === o.state) return window.safeHref = It(`/checkout/${null===(i=o.data)||void 0===i?void 0:i.order_token}?step=contact_information`)
}))
}
addToCart() {
var t, i;
return e(this, void 0, void 0, (function*() {
if ("" !== this.priceScope) return void this.showToast('Please select a variant at least');
this.loading = !0;
const e = {
product_id: this.data.id,
variant_id: this.data.selected_id,
quantity: +this.numDropDown || 1
},
o = yield Bt.post("/api/cart/batch", {
body: {
line_items: [e]
}
});
if (o.errors) return this.showToast(o.errors[0]), this.loading = !1, void this.closeModal();
this.loading = !1;
const n = ((null === (t = window.SHOP_PARAMS) || void 0 === t ? void 0 : t.product_settings) || {}).add_to_cart_process;
"to_cart" === n && "page" === n || (Rt ? window.$(document).trigger("dj.common.cart.change") : document.dispatchEvent(new CustomEvent("dj.cartChange")));
const s = {
id: this.data.id,
product_id: this.data.id,
number: this.data.count || 1,
quantity: this.numDropDown || 1,
variant_id: this.data.selected_id,
childrenId: this.data.selected_id,
item_price: this.data.variants.find((t => t.id === this.data.selected_id)).price,
name: this.data.title,
type: "",
source: "bundle",
process: ((null === (i = window.SHOP_PARAMS) || void 0 === i ? void 0 : i.product_settings) || {}).add_to_cart_process
};
Rt ? window.$(document.body).trigger("dj.addToCart", s) : document.dispatchEvent(new CustomEvent("dj.addToCart", {
detail: s
})), this.closeModal(), "to_cart" === n || "page" === n ? window.safeHref ? window.safeHref = It("/cart") : window.location.href = It("/cart") : "to_checkout" === n && this.buyNowProcess(this.data), this
.showToast()
}))
}
showToast(t) {
const e = document.createElement("bundle-toast");
t && (e.text = t), document.body.appendChild(e)
}
render() {
const t = this.data.variants.find((t => t.id === this.data.selected_id)),
e = null == t ? void 0 : t.price,
i = null == t ? void 0 : t.compare_at_price,
o = window.innerWidth < 960,
n = this.currentImgIndex > 0,
s = this.currentImgIndex < this.imgList.length - 1;
return R`<div class="modal"><div class="content"><div class="slider"><div class="image"><img src="${this.imgList[this.currentImgIndex]}" class="lazyload" alt="appbundle"> ${n?R`<div class="arrow arrow-l" @click="${()=>this.changeNextOrPrev(-1)}"><svg viewBox="0 0 100 100"><path d="M30 50l25 25 5-5-20-20 20-20-5-5z" fill="#fff"/></svg></div>`:""} ${s?R`<div class="arrow arrow-r" @click="${()=>this.changeNextOrPrev(1)}"><svg viewBox="0 0 100 100"><path d="M70 50L45 25l-5 5 20 20-20 20 5 5z" fill="#fff"/></svg></div>`:""}</div><div class="list" style="grid-template-columns:repeat(${this.imgList.length},${o?this.imgList.length>1?"75%":"100%":"68px"})">${this.imgList.map(((t,e)=>R`<img alt="appbundle" class="lazyload img-item ${e===this.currentImgIndex?"img-item-selected":""} ${1===this.imgList.length?"lonely":""}" src="${t}" @click="${()=>this.changeImage(e)}">`))} ${this.imgList.length>1?R`<div class="position notranslate">${this.currentPosition}/${this.imgList.length}</div>`:""}</div></div><div class="body"><div class="header"><div class="title">${this.data.title}</div>${_e?R`<div><a href="${It(this.data.url)}" class="see-detail see-detail-trial">See detail${this.icon}</a></div><div class="w-price-list notranslate">${((null==t?void 0:t.wholesale_price)||[]).map((t=>R`<div class="w-price-item"><div class="w-price ${this.getQualifiedWPriceClassName(t)}">${Nt(t.price)}</div><div class="w-item">${t.max_quantity?`${t.min_quantity} - ${t.max_quantity} Pieces`:`>= ${t.min_quantity} Pieces`}</div></div>`))}</div>`:R`<div class="sub"><div class="prices"><span class="price money notranslate">${this.priceScope||Nt(e)}</span> <span class="compare-price money notranslate">${Nt(i)}</span></div><a href="${It(this.data.url)}" class="see-detail">See detail${this.icon}</a></div>`}</div>${o?R`<div class="divider"></div>`:""}<div class="options"><bundle-product-option .selectedOptions="${this.selectedOptions}" .options="${this.data.options}" .data="${this.data}" @variantClick="${this.variantClick}" @variantChange="${this.variantChange}"></bundle-product-option></div><div class="quantity"><div class="quantity_title">Quantity</div><div class="num_select_mobile"><div class="num_item_sub ${1==+this.numDropDown?"num_item_not_allow":""}"><svg fill="currentColor" width="13" height="14" xmlns="http://www.w3.org/2000/svg"><rect y="6" width="13" height="1" rx=".5" transform="translate(0 .5)" fill-rule="evenodd"></rect></svg></div><input type="tel" class="num_input" .value="${this.numDropDown}"><div class="num_item_add ${+this.numDropDown>=t.available_quantity?"num_item_not_allow":""}"><svg width="13" height="14" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 0a.5.5 0 0 1 .5.5V6h5.5a.5.5 0 1 1 0 1H7v5.5a.5.5 0 1 1-1 0V7H.5a.5.5 0 0 1 0-1H6V.5a.5.5 0 0 1 .5-.5z" fill="currentColor"></path></svg></div></div></div><div class="btn"><bundle-button text-color="${this.btnTextColor}" bg-color="${this.btnBgColor}" @click="${this.addToCart}" ?loading="${this.loading}">Add to Cart</bundle-button></div></div><div class="close-icon" @click="${this.closeModal}">${this.closeIcon}</div></div><div class="mask" @click="${this.closeModal}"></div></div>`
}
}
$e.styles =
l`.content{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1101;background-color:#fff;display:flex}@media (max-width:960px){.content{top:68px;left:0;right:0;bottom:0;transform:unset;flex-direction:column;overflow:scroll;padding-bottom:86px}}.slider{position:relative;flex-shrink:0;padding:24px;width:360px;user-select:none;padding-inline-end:0}@media (max-width:960px){.slider{width:100%;padding:0}}.title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#212b36;line-height:22px;font-size:16px}.price{font-size:22px;font-weight:500;color:var(--color_price);line-height:22px}.prices{display:flex;align-items:center}.compare-price{margin-left:8px;font-size:16px;font-weight:400;color:var(--color_origin_price);line-height:22px;text-decoration:line-through}@media (min-width:960px){.options{max-height:420px;overflow:scroll;scrollbar-width:none;-ms-overflow-style:none}.options::-webkit-scrollbar{display:none}}.image{position:relative;width:100%;height:480px}@media (max-width:960px){.image{display:none}}.image>img{width:100%;height:100%;object-fit:contain}.arrow{position:absolute;top:50%;width:40px;height:40px;background-color:rgba(0,0,0,.14);border-radius:50%;cursor:pointer;z-index:1}.arrow-not-allow{opacity:.7}.arrow-l{left:16px;transform:translate(0,-50%)}.arrow-r{right:16px;transform:translate(0,-50%)}.body{display:flex;flex-direction:column;width:350px;padding:24px 48px 24px 40px}.quantity{font-size:14px}.quantity_title{margin-bottom:8px}.num_select_mobile{display:none}.num_select_mobile{display:flex;align-items:center;justify-content:center;width:120px}.num_item_add,.num_item_sub{border:1px solid #ddd;cursor:pointer}.num_item_add,.num_item_sub,.num_item_val{display:flex;align-items:center;justify-content:center;width:38px;height:38px}.num_item_not_allow{background-color:#e6e6e6;color:rgba(16,16,16,.3)}.num_input{box-sizing:border-box;border:1px solid transparent;width:36px;height:40px;outline:0;font-size:16px;text-align:center}.quantity_select{display:flex}.select_icon{margin-top:10px;margin-left:-26px;pointer-events:none}@media (max-width:960px){.body{width:100%;padding:16px;box-sizing:border-box}}.header{display:flex;flex-direction:column}.sub{display:flex;align-items:center;padding:16px 0}.see-detail{display:flex;align-items:center;margin-left:auto;color:#30354d;font-size:14px;text-decoration:auto;cursor:pointer;white-space:nowrap;flex-shrink:0}.see-detail svg{margin-left:4px;transform:rotateZ(270deg)}.see-detail-trial{margin-top:8px}.w-price-list{display:flex;padding:12px 16px;background:#f9f9fa;border-radius:4px;overflow-x:scroll;margin-top:8px}.w-price-list::-webkit-scrollbar{height:4px}.w-price-list::-webkit-scrollbar-track{background:#f9f9fa}.w-price-list::-webkit-scrollbar-thumb{background:#cccbcb;border-radius:2px}.w-price-list::-webkit-scrollbar-thumb:hover{background:#888}.w-price-item{margin-right:32px;flex-shrink:0}.w-price-item:last-child{margin-right:0}.w-price{font-weight:500;font-size:16px;line-height:23px;color:val(--color-body-text,#292929)}.w-price-qualified{color:#ff3f02}.w-item{font-weight:400;font-size:12px;line-height:17px;color:rgba(41,41,41,.7);margin-top:4px}.list{display:grid;grid-column-gap:8px;overflow-x:scroll;width:100%;margin-top:8px;scrollbar-width:none;-ms-overflow-style:none}.list::-webkit-scrollbar{display:none}@media (max-width:960px){.list{scroll-snap-type:x mandatory;margin-top:0}.sub{padding:8px 0}.price{font-size:20px}.divider{border-bottom:1px solid #d8dbe6;margin:12px 0 20px 0}.see-detail{font-size:12px}}@media (min-width:960px){.position{display:none}}.position{position:absolute;right:12px;bottom:12px;z-index:1;background:rgba(0,0,0,.4);border-radius:17px 17px 17px 17px;padding:4px 8px;font-size:12px;color:#fff;line-height:14px}.img-item{width:68px;height:68px;object-fit:cover;border-radius:4px;box-sizing:border-box}@media (max-width:960px){.img-item{width:100%;height:75vw;scroll-snap-align:start;border-radius:0}.lonely{height:80vw;object-fit:contain;background-color:#f9f9f9}}@media (min-width:960px){.img-item-selected{padding:3px;border:1px solid #212b36}}.btn{margin-top:auto;text-align:center;padding-top:16px;margin-bottom:-8px}@media (max-width:960px){.btn{position:fixed;bottom:0;left:0;width:100%;box-sizing:border-box;padding:16px;box-shadow:0 2px 10px 1px rgb(0 0 0 / 10%);background-color:#fff;margin-bottom:0}.title{font-size:14px;line-height:16px}}.mask{position:fixed;top:0;left:0;bottom:0;right:0;z-index:1100;background-color:rgba(0,0,0,.7)}.close-icon{position:absolute;top:8px;right:8px;display:flex;justify-content:center;align-items:center;color:#0a1533;width:36px;height:36px;background-color:transparent;cursor:pointer;z-index:1}html[dir=rtl] .close-icon{left:8px;right:unset}@media (max-width:960px){.close-icon{position:fixed;top:80px;right:12px;color:#fff;border-radius:50%;background-color:rgba(0,0,0,.2)}}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}`,
t([ht(".list")], $e.prototype, "listEl", void 0), t([dt()], $e.prototype, "data", void 0), t([dt()], $e.prototype, "selectedOptions", void 0), t([dt({
type: Array
})], $e.prototype, "options", void 0), t([dt()], $e.prototype, "close", void 0), t([dt()], $e.prototype, "numDropDown", void 0), t([dt({
attribute: "btn-bg-color"
})], $e.prototype, "btnBgColor", void 0), t([dt({
attribute: "btn-text-color"
})], $e.prototype, "btnTextColor", void 0), t([dt({
attribute: "top"
})], $e.prototype, "currentScrollTop", void 0), t([ct()], $e.prototype, "imgList", void 0), t([ct()], $e.prototype, "currentImgIndex", void 0), t([ct()], $e.prototype, "currentPosition", void 0), t([ct()], $e.prototype,
"loading", void 0), t([ct()], $e.prototype, "priceScope", void 0), window.customElements.get("bundle-product-modal") || window.customElements.define("bundle-product-modal", $e);
class Se extends st {
updated() {
var t;
const e = window.innerWidth < 960,
i = !document.querySelector('div[data-section-type*="//apps/appbundle/blocks/bundle-combination/"] bundle-product-list'),
o = this.shadowRoot.querySelector(".wrap"),
n = this.shadowRoot.querySelector(".skeleton");
i && !e && (o.style.padding = "40px 0", n.style.padding = "40px 8px 12px", null === (t = this.shadowRoot.querySelector(".skeleton br")) || void 0 === t || t.remove()), i && e && (o.style.padding = "16px 0"), i || e || (o
.style.padding = "40px 0"), !i && e && (o.style.padding = "16px 0")
}
render() {
return R`<div class="wrap"><div class="skeleton">The current item does not participate in the bundling. Switch the participating items to check the design.<br>(This prompt will not be displayed on the client-side)</div></div>`
}
}
Se.styles =
l`.wrap{max-width:var(--layout-width,1000px);margin:0 auto}.skeleton{position:relative;border-radius:4px;border:2px dashed #000;color:#000;line-height:20px!important;text-align:center;font-size:14px;padding:24px 16px;font-weight:500}@media (max-width:960px){.skeleton{font-size:12px;padding:40px 8px 12px!important}.skeleton::before{font-size:12px}}.skeleton::before{content:"Bundle sales";position:absolute;top:-2px;left:-2px;padding:8px 12px;font-size:14px;background-color:#000;color:#fff;border-radius:4px 0 4px 0;text-align:center;font-weight:500}`,
window.customElements.get("bundle-skeleton") || window.customElements.define("bundle-skeleton", Se);
class Ce extends st {
constructor() {
super(...arguments), this.text = "", this.successHtml =
R`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M12 24C5.373 24 0 18.628 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zm0-21.685c-5.68 0-9.686 4.006-9.686 9.686S6.32 21.686 12 21.686s9.686-4.005 9.686-9.685c0-5.68-4.006-9.686-9.686-9.686zm-1.11 13.721l-.207.207-.04-.04a.833.833 0 0 1-.357.084.838.838 0 0 1-.482-.168l-.02.02-.103-.103-.002-.001-3.532-3.533 1.212-1.212 2.927 2.927 6.458-6.46 1.213 1.213-7.064 7.065-.002.001z" fill="#EE7C30"/></svg>`
}
firstUpdated() {
setTimeout((() => {
const t = document.querySelector("bundle-toast");
null == t || t.remove()
}), 3e3)
}
render() {
return R`<div class="toast">${this.text?"":R`<div class="icon">${this.successHtml}</div>`} ${this.text||'Added'}</div>`
}
}
Ce.styles =
l`.toast{position:fixed;z-index:1250;left:50%;transform:translateX(-50%);display:flex;justify-content:center;align-items:center;padding:12px 120px;background-color:rgba(0,0,0,.8);font-size:16px;color:#fff;animation:fade_pc 3s;animation-fill-mode:forwards;border-radius:4px;text-align:center}.icon{display:flex;align-items:center;margin-right:12px}@media (max-width:960px){.toast{padding:12px 28px;animation:fade_mobile 3s;animation-fill-mode:forwards}}@keyframes fade_pc{0%{opacity:.1;top:20px}20%{opacity:1;top:100px}80%{opacity:1;top:100px}100%{opacity:0;top:20px}}@keyframes fade_mobile{0%{opacity:.1;top:0}20%{opacity:1;top:50px}80%{opacity:1;top:50px}100%{opacity:0;top:0}}`,
t([dt()], Ce.prototype, "text", void 0), window.customElements.get("bundle-toast") || window.customElements.define("bundle-toast", Ce);
class ke extends st {
constructor() {
super(...arguments), this.overWidth = !1, this.titleText = "", this.savePrice = "", this.salePrice = "", this.switchable = !1, this.atcBtnStyle = 1, this.titleColor = "", this.btnBgColor = "", this.btnTextColor = "", this
.bundleInfo = {}, this.styleType = "sutra", this.isQuickShop = !1, this.selected_all = !1, this.select_one = !1, this.selectedInfo = [], this.loading = !1, this.success = !1, this.styleTypeClass = ""
}
renderImgs(t, e) {
var i;
const o = this.overWidth;
return null === (i = this.selectedInfo) || void 0 === i ? void 0 : i.slice(t, e).map(((e, i) => {
var n, s, r;
const l = null === (n = e.variants) || void 0 === n ? void 0 : n.find((t => t.id === e.selected_id)),
a = (null === (s = null == l ? void 0 : l.image) || void 0 === s ? void 0 : s.src) || (null === (r = e.image) || void 0 === r ? void 0 : r.src);
return R`<div class="img-item">${0!==i||3===t?R`<svg style="${o?"":"padding: 0 12px;"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path d="M18.573 8.571h-7.145V1.428a1.427 1.427 0 1 0-2.856 0V8.57H1.428a1.428 1.428 0 0 0 0 2.856h7.144v7.144a1.428 1.428 0 0 0 2.856 0v-7.145h7.144a1.428 1.428 0 0 0 0-2.855z" fill="#C5C5C5"/></svg>`:""}<bundle-product-img class="sutra ${o?"":"w-full"}" ?is-select="${e.is_selected}" .isQuickShop="${this.isQuickShop}" .count="${e.count}" .href="${e.url}" .src="${a}" @click="${()=>this.clickProduct(e)}"></bundle-product-img></div>`
}))
}
clickProduct(t) {
this.dispatchEvent(new CustomEvent("clickProduct", {
detail: t
}))
}
clickSelect() {
this.dispatchEvent(new CustomEvent("clickSelect"))
}
render() {
const t = this.overWidth,
e =
R`<bundle-add-cart class="sutra ${t?"":"w-full"}" styleTypeClass="${this.styleTypeClass}" layer_type="${this.bundleInfo.layer_type}" total_price="${this.bundleInfo.totalPrice}" value="${this.bundleInfo.value}" value_type="${this.bundleInfo.value_type}" .atcBtnStyle="${this.atcBtnStyle}" .salePrice="${this.salePrice}" .savePrice="${this.savePrice}" .selectedInfo="${this.selectedInfo}" .selected_all="${this.selected_all}" .success="${this.success}" .loading="${this.loading}" .btnTextColor="${this.btnTextColor}" .btnBgColor="${this.btnBgColor}" .select_one="${this.select_one}"></bundle-add-cart>`;
return R`<div class="container"><div class="content-list"><div class="img-list" style="${t?"":"justify-content:center; flex-wrap: wrap"}"><div class="first-list">${this.renderImgs(0,3)}</div><div class="second-list">${this.renderImgs(3)}</div></div>${t?e:""}</div><div class="select-list">${this.selectedInfo.map(((e,i)=>R`<div class="content"><div class="checkbox-wrap ${t?"":"checkbox-top"}"><bundle-check-box class="${this.styleTypeClass}" styleTypeClass="${this.styleTypeClass}" .data="${e}" .index="${i}" ?this-one="${e.thisOne}"></bundle-check-box></div><div class="select-wrap"><bundle-product-select class="sutra ${t?"":"w-full"}" ?this-one="${e.thisOne}" .data="${e}" .index="${i}" @click="${this.clickSelect}"></bundle-product-select></div></div>`))}</div>${t?"":e}</div>`
}
}
ke.styles =
l`.select-list{width:100%}.container{display:flex;flex-wrap:wrap}.checkbox-wrap{flex-shrink:0}.select-wrap{flex:1;width:0}.content{position:relative;display:flex;flex-wrap:wrap;align-items:center;margin-bottom:16px;flex-wrap:wrap;font-size:14px}.content-list{display:flex;margin-bottom:24px}.content-list svg{width:20px;height:20px;padding:0 16px}.img-list{display:flex}.img-item{display:flex;align-items:center;margin-top:32px}.grow-1{flex-grow:1;text-align:center}.first-list,.second-list{display:flex}.checkbox-top{align-self:flex-start}@media (max-width:960px){.checkbox-wrap{align-self:flex-start}.content-list svg{width:12px;height:12px;padding:0 8px!important}.bundle_money{color:var(--color_price)}.origin_money{font-size:14px}.img-item{margin-top:16px}.first-list{width:100%;justify-content:center}.second-list{width:100%;margin-left:50px}}`,
t([dt({
type: Boolean
})], ke.prototype, "overWidth", void 0), t([dt({
type: String,
attribute: "title-text"
})], ke.prototype, "titleText", void 0), t([dt({
attribute: "savePrice"
})], ke.prototype, "savePrice", void 0), t([dt({
attribute: "salePrice"
})], ke.prototype, "salePrice", void 0), t([dt()], ke.prototype, "switchable", void 0), t([dt({
attribute: "atcBtnStyle"
})], ke.prototype, "atcBtnStyle", void 0), t([dt({
type: String,
attribute: "title-color"
})], ke.prototype, "titleColor", void 0), t([dt({
type: String,
attribute: "btn-bg-color"
})], ke.prototype, "btnBgColor", void 0), t([dt({
type: String,
attribute: "btn-text-color"
})], ke.prototype, "btnTextColor", void 0), t([dt({
type: Object,
attribute: "bundleInfo"
})], ke.prototype, "bundleInfo", void 0), t([dt({
type: String,
attribute: "style-type"
})], ke.prototype, "styleType", void 0), t([dt({
type: Boolean
})], ke.prototype, "isQuickShop", void 0), t([dt({
type: Boolean,
attribute: "selected_all"
})], ke.prototype, "selected_all", void 0), t([dt({
type: Boolean,
attribute: "select_one"
})], ke.prototype, "select_one", void 0), t([dt({
type: Object,
attribute: "selectedInfo",
reflect: !0
})], ke.prototype, "selectedInfo", void 0), t([dt({
type: Boolean,
attribute: "loading"
})], ke.prototype, "loading", void 0), t([dt({
type: Boolean,
attribute: "success"
})], ke.prototype, "success", void 0), t([dt()], ke.prototype, "styleTypeClass", void 0), window.customElements.get("bundle-sutra") || window.customElements.define("bundle-sutra", ke);
class Ee extends st {
constructor() {
super(...arguments), this.overWidth = !1, this.titleText = "", this.salePrice = "", this.savePrice = "", this.switchable = !1, this.atcBtnStyle = 1, this.titleColor = "", this.btnBgColor = "", this.btnTextColor = "", this
.bundleInfo = {}, this.styleType = "sutra", this.isQuickShop = !1, this.selected_all = !1, this.select_one = !1, this.selectedInfo = [], this.loading = !1, this.success = !1, this.styleTypeClass = "", this.vertical = !1,
this.scrollTimer = null, this.isShowArrow = !1, this.isArSa = "ar-SA" === document.documentElement.lang
}
clickProduct(t) {
this.dispatchEvent(new CustomEvent("clickProduct", {
detail: t
}))
}
clickSelect() {
this.dispatchEvent(new CustomEvent("clickSelect"))
}
shiftMove(t) {
if (this.scrollContainer) {
let e = this.scrollContainer.scrollLeft;
if (t) e -= 230, this.isArSa || (e = e < 0 ? 0 : e);
else {
const t = this.scrollContainer.offsetWidth,
i = this.scrollContainer.scrollWidth - t;
e += 230, e = e > i ? i : e
}
this.scrollContainer.scrollTo ? this.scrollContainer.scrollTo({
left: e,
behavior: "smooth"
}) : this.scrollContainer.scrollLeft = e
}
}
shiftLeft() {
this.shiftMove(!0)
}
shiftRight() {
this.shiftMove(!1)
}
showArrow() {
this.isShowArrow = !0
}
hideArrow() {
this.isShowArrow = !1
}
updated() {
if (window.innerWidth < 960) return;
const {
isInProductInfo: t
} = qt(!1);
t ? this.fashionContainer.classList.add("fashion--in") : this.fashionContainer.classList.remove("fashion--in")
}
render() {
var t;
const e = this.styleTypeClass === Vt.FASHION_VERTICAL;
let i = !1;
return this.scrollContainer && (i = this.scrollContainer.scrollWidth > this.scrollContainer.offsetWidth),
R`<div class="fashion-container ${this.styleTypeClass}"><div class="container" @mouseenter="${this.showArrow}" @mouseleave="${this.hideArrow}"><div class="container-scroll"><div class="container-scroll-inner">${null===(t=this.selectedInfo)||void 0===t?void 0:t.map(((t,e)=>{var i,o,n;const s=null===(i=t.variants)||void 0===i?void 0:i.find((e=>e.id===t.selected_id)),r=(null===(o=null==s?void 0:s.image)||void 0===o?void 0:o.src)||(null===(n=t.image)||void 0===n?void 0:n.src);return R`<div class="container-img"><div class="img-checkbox"><bundle-check-box class="${this.styleTypeClass} ${this.overWidth?"":"fashion-full"}" styleTypeClass="${this.styleTypeClass}" .data="${t}" .index="${e}" ?this-one="${t.thisOne}"></bundle-check-box></div><div class="img-wrap"><bundle-product-img class="${this.styleTypeClass} ${this.overWidth?"":"fashion-full"}" styleTypeClass="${this.styleTypeClass}" ?is-select="${t.is_selected}" .isQuickShop="${this.isQuickShop}" .count="${t.count}" .href="${t.url}" .src="${r}" @click="${()=>this.clickProduct(t)}"></bundle-product-img></div><div class="select-specification"><bundle-product-select class="${this.styleTypeClass} ${this.overWidth?"":"fashion-full"}" styleTypeClass="${this.styleTypeClass}" ?this-one="${t.thisOne}" .data="${t}" .index="${e}" @click="${this.clickSelect}"></bundle-product-select></div></div>`}))}</div></div>${e?"":R`<div class="container-arrow-left container-arrow flex-center ${this.isShowArrow&&i?"container-arrow--show":""}" @mouseup="${this.shiftLeft}">${Jt}</div>`} ${e?"":R`<div class="container-arrow-right container-arrow flex-center ${this.isShowArrow&&i?"container-arrow--show":""}" @mouseup="${this.shiftRight}">${Yt}</div>`}</div><div class="interval"></div><div class="totalinfo">${R`<bundle-add-cart class="${this.styleTypeClass} ${this.overWidth?"":"fashion-full"}" styleTypeClass="${this.styleTypeClass}" total_price="${this.bundleInfo.totalPrice}" layer_type="${this.bundleInfo.layer_type}" value="${this.bundleInfo.value}" value_type="${this.bundleInfo.value_type}" .atcBtnStyle="${this.atcBtnStyle}" .salePrice="${this.salePrice}" .savePrice="${this.savePrice}" .selectedInfo="${this.selectedInfo}" .selected_all="${this.selected_all}" .success="${this.success}" .loading="${this.loading}" .btnTextColor="${this.btnTextColor}" .btnBgColor="${this.btnBgColor}" .select_one="${this.select_one}"></bundle-add-cart>`}</div></div>`
}
}
Ee.styles = [l`.fashion-container{overflow:hidden;display:flex;border:1px solid #e6e6e6}.flex-center{display:flex;align-items:center;justify-content:center}`,
l`.fashionHorizontal.fashion-container{flex-direction:row;padding:20px;display:inline-flex;max-width:100%;box-sizing:border-box}.fashionHorizontal .container{flex:1;min-width:0;position:relative}.fashionHorizontal .container-scroll{overflow:overlay;width:100%;height:100%}.fashionHorizontal .container-scroll::-webkit-scrollbar{width:0;height:0}.fashionHorizontal .container-scroll-inner{display:flex;height:100%}.fashionHorizontal .container-img{position:relative;width:210px;display:flex;flex-direction:column;flex-shrink:0}.fashionHorizontal .container-img:not(:first-child){margin-left:20px}.fashionHorizontal .img-checkbox{position:absolute;top:10px;right:10px;z-index:10}.fashionHorizontal .container-arrow{position:absolute;width:40px;height:40px;top:50%;border-radius:50%;border:1px solid #e6e6e6;transform:translateY(-50%);background-color:#fff;cursor:pointer;opacity:0;transition:opacity .3s cubic-bezier(.455,.03,.515,.955)}.fashionHorizontal .container-arrow--show{opacity:1}.fashionHorizontal .container-arrow-left{left:10px}.fashionHorizontal .container-arrow-right{right:10px}.fashionHorizontal .interval{border-left:1px solid #e6e6e6;margin:0 20px;flex-shrink:0}.fashionHorizontal .select-specification{margin-top:12px}.fashionHorizontal .totalinfo{display:flex;align-items:center;padding:0 30px;width:220px;flex-shrink:0;box-sizing:border-box}.fashion--in.fashionHorizontal.fashion-container{flex-direction:column;padding:16px;display:flex}.fashion--in.fashionHorizontal .container{width:auto}.fashion--in.fashionHorizontal .interval{border-top:1px solid #e6e6e6;margin:20px 0;flex-shrink:0}.fashion--in.fashionHorizontal .container-img{width:calc((100% - 32px)/ 3)}.fashion--in.fashionHorizontal .container-img:not(:first-child){margin-left:16px}.fashion--in.fashionHorizontal .select-specification{margin-top:10px}.fashion--in.fashionHorizontal .totalinfo{width:auto;padding:0}@media (max-width:960px){.fashionHorizontal.fashion-container{flex-direction:column;padding:16px;display:flex}.fashionHorizontal .container{width:auto}.fashionHorizontal .interval{border-top:1px solid #e6e6e6;margin:20px 0;flex-shrink:0}.fashionHorizontal .container-img{width:120px}.fashion--in.fashionHorizontal .container-img{width:120px}.fashionHorizontal .container-img:not(:first-child){margin-left:16px}.fashionHorizontal .select-specification{margin-top:10px}.fashionHorizontal .totalinfo{width:auto;padding:0}}`,
l`.fashionVertical.fashion-container{flex-direction:column;padding:10px 0}.fashionVertical .container-img{display:flex;padding:20px}.fashionVertical .img-checkbox{flex-shrink:0;display:flex;align-items:center}.fashionVertical .select-specification{flex:1;width:0}.fashionVertical .interval{border-top:1px solid #e6e6e6;margin:10px 20px;flex-shrink:0}.fashionVertical .totalinfo{display:flex;flex-direction:column;padding:20px}.fashion--in.fashionVertical .container-img{padding:20px 16px}.fashion--in.fashionVertical .interval{margin:0 16px}.fashion--in.fashionVertical .totalinfo{padding:20px 16px}@media (max-width:960px){.fashionVertical .container-img{padding:20px 16px}.fashionVertical .interval{margin:0 16px}.fashionVertical .totalinfo{padding:20px 16px}}`
], t([dt({
type: Boolean
})], Ee.prototype, "overWidth", void 0), t([dt({
type: String,
attribute: "title-text"
})], Ee.prototype, "titleText", void 0), t([dt({
attribute: "salePrice"
})], Ee.prototype, "salePrice", void 0), t([dt({
attribute: "savePrice"
})], Ee.prototype, "savePrice", void 0), t([dt()], Ee.prototype, "switchable", void 0), t([dt({
attribute: "atcBtnStyle"
})], Ee.prototype, "atcBtnStyle", void 0), t([dt({
type: String,
attribute: "title-color"
})], Ee.prototype, "titleColor", void 0), t([dt({
type: String,
attribute: "btn-bg-color"
})], Ee.prototype, "btnBgColor", void 0), t([dt({
type: String,
attribute: "btn-text-color"
})], Ee.prototype, "btnTextColor", void 0), t([dt({
type: Object,
attribute: "bundleInfo"
})], Ee.prototype, "bundleInfo", void 0), t([dt({
type: String,
attribute: "style-type"
})], Ee.prototype, "styleType", void 0), t([dt({
type: Boolean
})], Ee.prototype, "isQuickShop", void 0), t([dt({
type: Boolean,
attribute: "selected_all"
})], Ee.prototype, "selected_all", void 0), t([dt({
type: Boolean,
attribute: "select_one"
})], Ee.prototype, "select_one", void 0), t([dt({
type: Object,
attribute: "selectedInfo",
reflect: !0
})], Ee.prototype, "selectedInfo", void 0), t([dt({
type: Boolean,
attribute: "loading"
})], Ee.prototype, "loading", void 0), t([dt({
type: Boolean,
attribute: "success"
})], Ee.prototype, "success", void 0), t([dt()], Ee.prototype, "styleTypeClass", void 0), t([ht(".fashion-container")], Ee.prototype, "fashionContainer", void 0), t([ht(".container-scroll")], Ee.prototype, "scrollContainer",
void 0), t([ct()], Ee.prototype, "vertical", void 0), t([ct()], Ee.prototype, "scrollTimer", void 0), t([ct()], Ee.prototype, "isShowArrow", void 0), t([ct()], Ee.prototype, "isArSa", void 0), window.customElements.get(
"bundle-fashion") || window.customElements.define("bundle-fashion", Ee);
class Te extends st {
constructor() {
super(...arguments), this.layer_type = Ft, this.value = "", this.value_type = "", this.total_price = "", this.atcBtnStyle = 1, this.selectedInfo = [], this.selected_all = !1, this.salePrice = "", this.savePrice = "", this
.loading = !1, this.success = !1, this.select_one = !1, this.btnTextColor = "", this.btnBgColor = "", this.styleTypeClass = ""
}
updated() {
if (window.innerWidth < 960) return;
const {
isInProductInfo: t
} = qt();
t && this.addCartPanel.classList.add("addCartPanel--in")
}
addToCart() {
this.dispatchEvent(new CustomEvent("addToCart", {
bubbles: !0,
composed: !0
}))
}
buySelectedProduct() {
this.dispatchEvent(new CustomEvent("buySelectedProduct", {
bubbles: !0,
composed: !0
}))
}
render() {
const t = this.layer_type === Wt && 0 !== Number(this.savePrice),
e = !t && this.selected_all,
i = t || e ? this.total_price : this.salePrice,
o = this.value_type === Mt && !t && Number(this.value) >= Number(this.salePrice),
n = !t && !this.selected_all || "none" === this.value_type || o ? "display: none" : "",
s = this.selectedInfo.every((t => !t.is_selected));
return R`<div class="addCartPanel ${this.styleTypeClass}">${this.styleTypeClass&&0!==Number(this.savePrice)&&(t||this.selected_all)?R`<div class="discountAmount"><span>save</span> <span class="money notranslate">${` ${Nt(this.savePrice)}`}</span></div>`:""}<div class="price"><span class="price-title">Total price:</span> <span class="bundle_money money notranslate">${Nt(i)}</span> <span class="origin_money money notranslate money_delete" style="${n}">${Nt(this.salePrice)}</span></div><div class="add-cart-btn"><bundle-button class="${this.styleTypeClass}" text-color="${this.btnTextColor}" bg-color="${this.btnBgColor}" ?disabled="${s}" ?loading="${this.loading}" ?success="${this.success}" @click="${2===this.atcBtnStyle?this.buySelectedProduct:this.addToCart}">${2===this.atcBtnStyle?'Buy Now':this.select_one?'Add to Cart':'Add selected to cart'}</bundle-button></div></div>`
}
}
Te.styles = [
l`.addCartPanel{flex-shrink:0}.discountAmount{display:inline-block;border:1px solid var(--color-text-critical,#db393a);color:var(--color-text-critical,#db393a);font-size:14px;font-weight:400;padding:4px 8px}.price-title{white-space:nowrap}.bundle_money{color:var(--color_price,#db393a);font-weight:500;white-space:nowrap}.origin_money{color:var(--color_price);font-weight:500;font-size:16px;white-space:nowrap}.money_delete{text-decoration:line-through;color:var(--color_origin_price)}`,
l`:host(.sutra){width:100%}:host(.sutra) .addCartPanel{margin-top:56px;text-align:center;margin-left:60px;white-space:nowrap}:host(.sutra) .price{display:flex;justify-content:center;align-items:center;margin-bottom:16px;line-height:20px;font-size:16px}:host(.sutra) .price-title{margin-right:8px}:host(.sutra) .bundle_money{margin-right:8px}:host(.sutra) .origin_money{margin-right:8px}:host(.w-full) .addCartPanel{width:100%;text-align:center;margin-top:8px;margin-left:0}@media (max-width:960px){:host(.sutra) .addCartPanel{width:100%;text-align:center;margin-top:8px;margin-left:0}}`,
l`:host(.fashionHorizontal){width:100%}.fashionHorizontal .discountAmount{margin-bottom:20px}.fashionHorizontal .price{margin-bottom:40px;display:flex;flex-wrap:wrap;align-items:baseline}.fashionHorizontal .price-title{width:100%;margin-bottom:8px;color:val(--color-body-text,#292929);font-family:Jost;font-size:18px;font-style:normal;font-weight:500;line-height:20px;text-transform:capitalize}.fashionHorizontal .bundle_money{margin-right:10px;font-size:24px}.fashionHorizontal .origin_money{font-weight:400}.addCartPanel--in.fashionHorizontal .price-title{width:auto}.addCartPanel--in.fashionHorizontal.addCartPanel{display:flex;flex-direction:column;align-items:flex-end}.addCartPanel--in.fashionHorizontal .price{text-align:right;margin-bottom:30px;justify-content:flex-end}.addCartPanel--in.fashionHorizontal .bundle_money{margin:0 10px}.addCartPanel--in.fashionHorizontal .add-cart-btn{width:auto}@media (max-width:960px){.addCartPanel--in.fashionHorizontal.addCartPanel,.fashionHorizontal.addCartPanel{display:flex;flex-direction:column;align-items:center}.fashionHorizontal .price-title{width:auto}.fashionHorizontal .price{margin-bottom:30px}.fashionHorizontal .bundle_money{margin:0 10px}.addCartPanel--in.fashionHorizontal .add-cart-btn,.fashionHorizontal .add-cart-btn{width:100%}}`,
l`.fashionVertical{text-align:right;white-space:nowrap}.fashionVertical .discountAmount{margin-bottom:10px}.fashionVertical .price{margin-bottom:30px;display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:baseline}.fashionVertical .price-title{margin-bottom:8px;color:val(--color-body-text,#292929);font-family:Jost;font-size:18px;font-style:normal;font-weight:500;line-height:20px;text-transform:capitalize}.fashionVertical .bundle_money{margin:0 10px;font-size:22px}.fashionVertical .origin_money{font-weight:400}.fashionVertical .add-cart-btn{width:auto;display:inline-block;margin-left:auto}:host(.fashion-full) .fashionVertical .add-cart-btn{width:auto}@media (max-width:960px){.fashionVertical .add-cart-btn,:host(.fashion-full) .fashionVertical .add-cart-btn{width:100%}}`
], t([dt()], Te.prototype, "layer_type", void 0), t([dt()], Te.prototype, "value", void 0), t([dt()], Te.prototype, "value_type", void 0), t([dt()], Te.prototype, "total_price", void 0), t([dt({
attribute: "atcBtnStyle"
})], Te.prototype, "atcBtnStyle", void 0), t([dt({
type: Object,
attribute: "selectedInfo",
reflect: !0
})], Te.prototype, "selectedInfo", void 0), t([dt({
type: Boolean,
attribute: "selected_all"
})], Te.prototype, "selected_all", void 0), t([dt({
attribute: "salePrice"
})], Te.prototype, "salePrice", void 0), t([dt({
attribute: "savePrice"
})], Te.prototype, "savePrice", void 0), t([dt({
type: Boolean,
attribute: "loading"
})], Te.prototype, "loading", void 0), t([dt({
type: Boolean,
attribute: "success"
})], Te.prototype, "success", void 0), t([dt({
type: Boolean,
attribute: "select_one"
})], Te.prototype, "select_one", void 0), t([dt({
attribute: "btnTextColor"
})], Te.prototype, "btnTextColor", void 0), t([dt({
attribute: "btnBgColor"
})], Te.prototype, "btnBgColor", void 0), t([dt()], Te.prototype, "styleTypeClass", void 0), t([ht(".addCartPanel")], Te.prototype, "addCartPanel", void 0), window.customElements.get("bundle-add-cart") || window.customElements
.define("bundle-add-cart", Te);
class Pe extends st {
constructor() {
super(...arguments), this.data = {}, this.styleTypeClass = "", this.thisOne = !1, this.index = 0
}
onChange() {
this.dispatchEvent(new CustomEvent("changeCheckBox", {
detail: {
index: this.index
},
bubbles: !0,
composed: !0
}))
}
requestUpdate() {
super.requestUpdate()
}
render() {
return R`<div class="content_flex"><input style="display:none" type="checkbox" class="bundle-checked" id="bundle-checked" .checked="${this.data.is_selected}" @click="${this.onChange}"> <label for="bundle-checked" class="check-label"><div class="close-icon">${this.data.is_selected?this.styleTypeClass?Zt:Kt:Xt}</div></label></div>`
}
}
Pe.styles =
l`.content_flex{display:flex;align-items:center;position:relative}.check-label{display:flex;align-items:center}.close-icon{display:flex;cursor:pointer}:host(.fashionHorizontal) .close-icon svg,:host(.fashionVertical) .close-icon svg{width:24px;height:24px}:host(.fashion-full.fashionHorizontal) .close-icon svg,:host(.fashion-full.fashionVertical) .close-icon svg{width:16px;height:16px}@media (max-width:960px){:host(.fashionHorizontal) .close-icon svg,:host(.fashionVertical) .close-icon svg{width:16px;height:16px}}`,
t([dt()], Pe.prototype, "data", void 0), t([dt()], Pe.prototype, "styleTypeClass", void 0), t([dt({
type: Boolean,
attribute: "thisOne"
})], Pe.prototype, "thisOne", void 0), t([dt({
type: Number,
attribute: "index"
})], Pe.prototype, "index", void 0), window.customElements.get("bundle-check-box") || window.customElements.define("bundle-check-box", Pe), e(void 0, void 0, void 0, (function*() {
var t, i;
let o = [];
const n = t => e(void 0, void 0, void 0, (function*() {
if (!t) return [];
const {
data: e
} = yield Bt.get(
`/api/product/list?${function(t){var e=[],i=function(t,i){i=null==(i="function"==typeof i?i():i)?"":i,e[e.length]=encodeURIComponent(t)+"="+encodeURIComponent(i)};return function t(o,n){var s,r,l;if(o)if(Array.isArray(n))for(s=0,r=n.length;s<r;s++)t(o+"["+("object"==yt(n[s])&&n[s]?s:"")+"]",n[s]);else if("[object Object]"===Object.prototype.toString.call(n))for(l in n)t(o+"["+l+"]",n[l]);else i(o,n);else if(Array.isArray(n))for(s=0,r=n.length;s<r;s++)i(n[s].name,n[s].value);else for(l in n)t(l,n[l]);return e}("",t).join("&")}({ids:t,limit:t.length,page:1})}`
), i = e.list;
return i.forEach((t => {
window.C_SETTINGS.store_trial && (t.variant || []).forEach((t => {
(t.wholesale_price || []).forEach(((e, i) => {
const o = t.wholesale_price[i + 1];
o && (e.max_quantity = o.min_quantity - 1)
}))
}))
})), i
})),
s = t => e(void 0, void 0, void 0, (function*() {
if (d && (d.style.cursor = "wait", d.pid = t, d.style.pointerEvents = "none", d.switchable = p.bundle_sales.length > 1), 0 === p.bundle_sales.length) return void r(d);
const e = p.bundle_sales[a];
e.entitled_products.forEach((t => Object.assign(t, o.find((e => e.id === t.id)))));
const i = e.entitled_products.find((e => e.id === t)),
n = e.entitled_products.findIndex((e => e.id === t));
e.entitled_products.splice(n, 1), e.entitled_products.unshift(i), e.isRequested = !0, d && (d.bundleInfo = e, d.discount_ids = p.bundle_sales.map((t => t.id)).join(","), d.bundleInfo.entitled_products.filter((t =>
t.price)).forEach((e => {
e.is_selected = !0, e.selected_id = e.variants.filter((t => t.available))[0].id, e.id === t && (e.thisOne = !0)
})), d.style.cursor = "", d.style.pointerEvents = ""),
function(t, e) {
var i = document.querySelector(t),
o = function() {
e()
};
i && !i.getAttribute("imprsd") ? i.addEventListener("impress", o) : o()
}("bundle-product-list", (() => {
var e, i;
const o = p.bundle_sales[a],
n = {
discount_id: o.id,
value_type: o.value_type,
popups_setting: o.popups_setting,
global_show_text: o.global_show_text,
target_selection: o.target_selection,
page: null === (e = window.SHOP_PARAMS) || void 0 === e ? void 0 : e.template_type,
product_id: t,
plugin_timestamp: Date.now(),
show_related_items: p.bundle_sales.length > 1,
block: !0,
discount_ids: p.bundle_sales.map((t => t.id)).join(","),
operation_type: o.operation_type,
entitled_product_ids: o.entitled_product_ids
};
window.sa && (null === (i = window.sa) || void 0 === i || i.track("plugin_bundle_combination_pv", n))
}))
})),
r = t => {
var e;
if (!document.querySelector("bundle-skeleton") && window.self !== window.top) {
const i = document.createElement("bundle-skeleton");
null === (e = null == t ? void 0 : t.parentElement) || void 0 === e || e.insertBefore(i, t)
}
};
let l = window.innerWidth;
window.addEventListener("resize", Ht((() => {
window.innerWidth !== l && window.top !== window.self && window.location.reload()
}), 500));
let a = 0;
const d = document.querySelector('[data-section-id="1539149753700"] .bundle-main'),
c = d.getAttribute("pid") || "",
p = yield Bt.get(`/api/bundle-sales?product_id=${c}`);
yield e(void 0, void 0, void 0, (function*() {
const t = yield Bt.get("/api/bundle-sales/setting?type=discount_code");
d && (d.atcBtnStyle = t.style || 1)
})), yield e(void 0, void 0, void 0, (function*() {
const t = p.bundle_sales.map((t => t.entitled_product_ids)).flat();
o = yield n(t);
const e = [];
p.bundle_sales.forEach((t => {
t.entitled_product_ids.every((t => null == o ? void 0 : o.find((e => e.id === t && e.available)))) && e.push(t)
})), p.bundle_sales = e
})), yield s(c);
const {
isInProductInfo: h
} = qt();
h || null === (i = null === (t = document.querySelector(".bundle-combination-container")) || void 0 === t ? void 0 : t.classList) || void 0 === i || i.add("tw-container", "container", "container-gap", "page-width"),
null == d || d.addEventListener("bundle-combination-switch", Ht((() => e(void 0, void 0, void 0, (function*() {
var t;
if (a = a === p.bundle_sales.length - 1 ? 0 : a + 1, p.bundle_sales[a].isRequested) return void(d.bundleInfo = p.bundle_sales[a]);
yield s(c);
const e = p.bundle_sales[a];
window.sa && (null === (t = window.sa) || void 0 === t || t.track("plugin_bundle_combination_related_item_click", {
discount_ids: p.bundle_sales.map((t => t.id)),
product_id: c,
block: !0,
discount_id: e.id,
operation_type: e.operation_type,
entitled_product_ids: e.entitled_product_ids.join(",")
}))
}))), 300))
}))
}));
} catch (err) {
console.log('bundle sales error' + err)
}
})()
} catch (e) {
console.error(e)
}
</script>
</div>
<div class="plugin__buy_on_others empty:tw-hidden"></div>
</form>
POST //translate.googleapis.com/translate_voting?client=te
<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text"
name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form>
Text Content
FREE SHIPPING OVER $59 Powered by Google Übersetzer English,简体中文,Português,español,français,Italiano,Deutsch,Nederlands,svenska,Norsk,suomi,dansk,עברית EUR * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Australian Dollars (AUD) * Brazilian Real (BRL) * Danish Kroner (DKK) * Israeli New Shekel (NIS) * Mexican Pesos (MXN) * Norwegian Kroner (NOK) * New Zealand Dollars (NZD) * Swedish Kronor (SEK) * Swiss Francs (CHF) Search LUCKYEO English,简体中文,Português,español,français,Italiano,Deutsch,Nederlands,svenska,Norsk,suomi,dansk,עברית EUR * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Australian Dollars (AUD) * Brazilian Real (BRL) * Danish Kroner (DKK) * Israeli New Shekel (NIS) * Mexican Pesos (MXN) * Norwegian Kroner (NOK) * New Zealand Dollars (NZD) * Swedish Kronor (SEK) * Swiss Francs (CHF) Search Search Account * Log in * Create an account 0 Cart Close * 🏠 Home * Hot🔥 * New * Clothing * Clothing * Women * Women * Dresses * Women Tops * Women Pants * Bras & Underpants * Two-piece Suit * Jumpsuits * Coats * Men * Men * Men Tops * Men Pants * Men Underpants * Men Shirt Suits * Men Coat * Shoes & Socks * Shoes & Socks * Women Shoes * Men Shoes * Socks * Accessories * Accessories * Jewelry * Bags * Hats * Houseware * Electronics * Tools * Beauty * Car * Toys & Kids * Pets * Outdoors * GIFTS * GIFTS * GIFTS BY RECIPIENT * GIFTS BY RECIPIENT * For Lovers * For Students * For Kids * For Parents * For Dad * For Mom * For Pets * For Friends * SHOP BY OCCASION * SHOP BY OCCASION * Anniversary * Birthday * Graduation Gifts * Back to School * Housewarming Gifts * Wedding Gifts * SHOP BY BUDGET * SHOP BY BUDGET * Under $29.9 * Under $19.9 * Under $9.9 Log in English,简体中文,Português,español,français,Italiano,Deutsch,Nederlands,svenska,Norsk,suomi,dansk,עברית EUR * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Australian Dollars (AUD) * Brazilian Real (BRL) * Danish Kroner (DKK) * Israeli New Shekel (NIS) * Mexican Pesos (MXN) * Norwegian Kroner (NOK) * New Zealand Dollars (NZD) * Swedish Kronor (SEK) * Swiss Francs (CHF) * 🏠 Home * Hot🔥 * New * Clothing * Women Dresses Women Tops Women Pants Bras & Underpants Two-piece Suit Jumpsuits Coats * Men Men Tops Men Pants Men Underpants Men Shirt Suits Men Coat * Shoes & Socks Women Shoes Men Shoes Socks * Accessories Jewelry Bags Hats * Houseware * Electronics * Tools * Beauty * Car * Toys & Kids * Pets * Outdoors * GIFTS * GIFTS BY RECIPIENT For Lovers For Students For Kids For Parents For Dad For Mom For Pets For Friends * SHOP BY OCCASION Anniversary Birthday Graduation Gifts Back to School Housewarming Gifts Wedding Gifts * SHOP BY BUDGET Under $29.9 Under $19.9 Under $9.9 * More links POWERFUL PROTECTION FOR YOUR NEW PHONE SCREEN - DUST-PROOF SCREEN PROTECTOR Price €36.79 €18.39 Save €18.39 Buy €92.04 more and save 10% off Buy €138.06 more and save 15% off Style High-definition Anti-peep Please select a style Models For iPhone 16 Pro Max For iPhone 16 Pro For iPhone 15 Pro Max For iPhone 15 Pro For iPhone 15 Plus For iPhone 15 For iPhone 14 Pro Max For iPhone 14 Pro For iPhone 14 Plus For iPhone 14 For iPhone 13 Pro Max For iPhone 13 Pro For iPhone 13 For iPhone 12 Pro Max For iPhone 12 Pro For iPhone 12 For iPhone 11/XR For iPhone 11 Pro/XS/X For iPhone 11 Pro Max/XS Max Please select a models BUY MORE GET MORE Buy 2 Get 1 Free (Each Only $6.66) Please select a buy more get more Quantity 1 2 3 4 5 6 7 8 9 10+ Buy €54.30 more to enjoy FREE Shipping Worldwide shipping Free returns 24/7 customer support Secure payments Add to Cart Buy Now Share Tweet Pin it Description SILK SCREEN DUST-FREE ROOM TEMPERED FILM Experience Ultimate Protection and Clarity! Transform your device with our Silk Screen Dust-Free Room Tempered Film. Say goodbye to dust and bubbles while ensuring your screen stays pristine! KEY FEATURES: Automatic Dust Removal:??This innovative film applies seamlessly in seconds with zero bubbles, making installation a breeze! Perfect Fit: Designed for an extreme, all-encompassing fit, it offers excellent dust protection. Enjoy a clean screen without compromising style! 3D Curved Edge Coverage:Our new large arc design ensures full coverage without unsightly white edges or lift-off. Your device will look sleek and polished! Integrated Dust Protection:The built-in dust mesh keeps your earpiece clear of dust while ensuring optimal sound quality no more worrying about blockages! LONG-LASTING PROTECTION: Scratch-Resistant:This ultra-thin film provides a seamless layer of protection against scratches and everyday wear and tear. Invisible Shield:Maintain the beauty of your device while ensuring it remains safe from harm. Upgrade your device with our Silk Screen Dust-Free Room Tempered Film today and enjoy the ultimate protection and clarity! NOTES * Due to manual measurements, please allow slight measurement deviations. * Due to the different display and lighting effects, the actual color of the item may be slightly different from the color displayed on the picture. Service * FAQ * About Us * Contact Us * Why Choose Us? * Intellectual Property Rights Policy * Privacy Policy * Payment Policy * Shipping Policy * Return & Refund Policy * Terms & Conditions Get in touch Thank you for visiting us! If you have any questions about our products, please contact us online or mail to: service@luckyeo.com We accept Visa Mastercard JCB Diners Club American Express Discover PayPal Klarna DMCA report © 2024 luckyeo SIGN UP AND SAVE Entice customers to sign up for your mailing list with discounts or exclusive offers. Include an image for extra impact. Subscribe Thanks for subscribing Optional button 111 GIFTS POINTS word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 mmMwWLliI0fiflO&1 Originaltext Diese Übersetzung bewerten Mit deinem Feedback können wir Google Übersetzer weiter verbessern