gw-customer-accounts 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/address-form.js +1 -0
- package/dist/assets/index-DI2a6rRk.js +1 -0
- package/dist/assets/tab-B7UDegaP.js +1 -0
- package/dist/country-selector.js +1 -0
- package/dist/dashboard.js +17 -0
- package/dist/loyalty-integrations.js +29 -0
- package/dist/main.css +1 -0
- package/dist/main.js +1 -0
- package/dist/malomo-button.js +1 -0
- package/dist/orders.js +1 -0
- package/dist/preferences-form.js +1 -0
- package/dist/price.js +1 -0
- package/dist/profile.js +1 -0
- package/dist/quick-add-to-cart.js +4 -0
- package/dist/sign-in.js +1 -0
- package/dist/wishlist-button.js +21 -0
- package/package.json +3 -2
- package/src/scripts/components/dashboard.js +7 -10
- package/src/scripts/components/price.js +130 -0
- package/src/scripts/components/profile.js +4 -0
- package/src/scripts/components/quick-add-to-cart.js +6 -0
- package/src/scripts/components/sign-in.js +50 -25
- package/src/scripts/components/wishlist-button.js +311 -253
- package/src/scripts/index.js +18 -11
- package/src/styles/main.css +19 -0
- package/vite.config.js +10 -32
- /package/{postcss.config.js → postcss.config.cjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as a,a as i}from"./assets/index-DI2a6rRk.js";customElements.define("gw-address-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.type=this.getAttribute("type"),this.addressId=this.getAttribute("address-id")}connectedCallback(){if(this._handleFormSubmit(),this.type==="edit"){const e=this.querySelector("[data-delete-address]");if(!e)return;e.addEventListener("click",()=>{this._deleteAddress()})}this.type}async _handleFormSubmit(){await Promise.all([customElements.whenDefined("sl-input")]).then(()=>{this.form.addEventListener("sl-invalid",e=>{e.preventDefault(),this._clearErrorMessages(),this.form.querySelectorAll("sl-input").forEach(t=>{if(t.hasAttribute("data-invalid")){const r=document.createElement("div");r.slot="help-text",r.classList.add("gw-error-message"),r.textContent=t.validationMessage,t.appendChild(r)}}),e.target.focus()},{capture:!0}),this.form.addEventListener("submit",e=>{e.preventDefault();const t=new FormData(this.form),r=Object.fromEntries(t.entries());this._submitAddressForm(r)})})}async _submitAddressForm(e){try{this._clearErrorMessages(),this.form.querySelector("[data-loader]").hidden=!1,e.province&&(e.province=e.province.replaceAll("_"," ")),e.country=e.country.replaceAll("_"," ");let t=e.isDefault;delete e.isDefault;let r=null;if(this.type==="edit"?r=await a.request(i.ENDPOINTS.ADDRESS.EDIT,{address:e,addrID:this.addressId,isDefault:t}):r=await a.request(i.ENDPOINTS.ADDRESS.ADD,{address:e,isDefault:t}),r.error)throw new Error(r.error);this.form.closest("sl-drawer").hide(),a.updateAjaxContent(["[data-gw-addresses-list]","[data-gw-addresses-carousel]"])}catch(t){console.error(t)}finally{this.form.querySelector("[data-loader]").hidden=!0}}async _deleteAddress(){try{this.querySelector("[data-delete-address]").querySelector("[data-loader]").hidden=!1;let e=await a.request(i.ENDPOINTS.ADDRESS.REMOVE,{addrID:this.addressId});if(e.error)throw new Error(e.error);this.form.closest("sl-drawer").hide(),await a.app.updateContent(["[data-gw-addresses-list]","[data-gw-addresses-carousel]"])}catch(e){console.error(e)}}_handleSubmitButton(){const e=this.form.querySelectorAll("sl-input, sl-select, sl-checkbox"),t=this.form.querySelector('button[type="submit"]'),r=()=>Array.from(e).some(s=>{if(s.tagName==="SL-CHECKBOX"){const n=s.getAttribute("defaultChecked"),c=s.getAttribute("checked");return n!==c}const d=s.getAttribute("value"),l=s.value;return d!==l});e.forEach(o=>{o.addEventListener("sl-input",()=>{r()?t.hidden=!1:t.hidden=!0})})}_clearErrorMessages(){this.form.querySelectorAll(".gw-error-message").forEach(e=>e.remove())}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const i=Object.freeze({MAP:{"#my-account":"dashboard","#my-orders":"orders","#my-profile":"profile","#my-favorites":"dashboard##favorites"},STORAGE_KEYS:{TOKEN:"i-shsgi--u0mihh3co1e3y9sns",EMAIL:"gw-customer-accounts-email",RECENTLY_VIEWED:"gw-recently-viewed",RECENTLY_VIEWED_COLLECTION:"gw-recently-viewed-collection",LOYALTY_POINTS:"gw-loyalty-points",YOTPO_POINTS:"gw-yotpo-points",WISHLIST_PRODUCT_IDS:"gw-wishlist-product-ids",RISE_POINTS:"gw-rise-points",REDIRECT_URL:"gw-customer-accounts-login-redirect",TEMP_WISHLIST_PRODUCTS:"gw-temp-wishlist-products",TEMP_CART_PRODUCTS:"gw-temp-cart-products",TEMP_RECENTLY_VIEWED_ITEMS:"gw-temp-recently-viewed-items",TEMP_PRODUCTS_UPDATED:"gw-temp-products-updated"},ENDPOINTS:{AUTH:{SIGN_IN:"/email-sign",VERIFY_CODE:"/code-sign",GET_TOKEN:"/logged-sign",CUSTOMER_LOGGED:"/customer-logged"},FAVORITES:{GET_ALL_IDS:"/get-all-favorites",GET:"/get-favorites",ADD:"/add-favorite",REMOVE:"/remove-favorite",ADD_BULK:"/add-favorites"},VIEWED_PRODUCTS:{GET:"/get-viewed-products",ADD:"/add-viewed-product",ADD_BULK:"/add-viewed-products"},CART:{GET:"/get-cart-products",ADD:"/add-cart-product",ADD_BULK:"/add-cart-products",REMOVE:"/remove-cart"},ADDRESS:{ADD:"/add-address",EDIT:"/edit-address",REMOVE:"/remove-address"},CUSTOMER:{UPDATE:"/update-customer"},LOYALTY:{GET_LL:"/get-ll-customer",GET_YOTPO_CUSTOMER:"/get-youtpo-customer",GET_RISE_CREDIT:"/get-rise-customer"},MISC:{GET_MALOMO_ORDER:"/get-malomo-order"}},TAGS_TO_HIDE:["accounts:hidden"],TEMPLATE_IDS:{PRODUCT_CARD:"gw-standard-product-card-template",FORM_PRODUCT_CARD:"gw-form-product-card-template"},CUSTOM_EVENTS:{FAVORITES_STORAGE_UPDATED:"gw:favorites-storage-updated",SAVED_ITEMS_FROM_CART:"gw:saved-items-from-cart"},DRAWER_IDS:{favorites:"#Drawer-Favorites"}});class u{constructor(){}get componentData(){const e=document.querySelector("gw-customer-accounts").shadowRoot.querySelector("[data-component-data]");return JSON.parse(e.textContent)}get customerId(){var t,e;return(e=(t=this.componentData)==null?void 0:t.customer)==null?void 0:e.id}get customerFirstName(){var t,e;return(e=(t=this.componentData)==null?void 0:t.customer)==null?void 0:e.firstName}get customerEmail(){return localStorage.getItem(i.STORAGE_KEYS.EMAIL)}get hasCustomer(){var t,e;return!!((e=(t=this.componentData)==null?void 0:t.customer)!=null&&e.id)}get customerToken(){return localStorage.getItem(i.STORAGE_KEYS.TOKEN)}get baseURL(){return this.componentData.baseUrl}get app(){return document.querySelector("gw-customer-accounts")}get appShadow(){return this.app.shadowRoot}get dashboard(){return this.appShadow.querySelector("gw-customer-accounts-dashboard")}get tabId(){return i.MAP[window.location.hash]||"dashboard"}async request(t,e={},s="POST"){const a=()=>{const o={method:s,mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}};return s==="POST"&&(o.body=JSON.stringify(e)),o};if(s==="GET"){const o=new URLSearchParams(e);t=`${t}?${o}`}return s==="POST"&&(e.token=this.customerToken,e.email=this.customerEmail,e.customerID=this.customerId),await(await fetch(this.baseURL+t,a())).json()}notify(t,e="success",s=3e3){const a=document.querySelector("gw-customer-accounts"),r=a.shadowRoot.querySelector("[data-notification-alert]"),o=a.shadowRoot.querySelector("[data-notification-message]");o.innerHTML=t,r.open=!0}async updateAjaxContent(t){return await this.app.updateContent(t)}parseVariantId(t){return String(t).split("/").pop()}formatMoney(t){return(t/100).toLocaleString("en-US",{style:"currency",currency:"USD"})}addToStorage({key:t,values:e,storageType:s="local",position:a="start"}){const r=s==="local"?localStorage:sessionStorage,o=JSON.parse(r.getItem(t))||[];a==="start"?r.setItem(t,JSON.stringify([...e,...o])):r.setItem(t,JSON.stringify([...o,...e]))}removeFromStorage({key:t,values:e,storageType:s="local",nestedKey:a}){const r=s==="local"?localStorage:sessionStorage,o=JSON.parse(r.getItem(t))||[];if(a){const n=o.map(c=>e.includes(c[a])?null:c);r.setItem(t,JSON.stringify(n.filter(Boolean)))}else{const n=o.filter(c=>!e.includes(c));r.setItem(t,JSON.stringify(n))}}}const g=new u;export{g as G,i as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as i,a as e}from"./index-DI2a6rRk.js";class l extends HTMLElement{constructor(){var a;super(),this.tabData=this._parseTabData(),this.tabId=(a=this.tabData)==null?void 0:a.id,this.tabGroup=this.closest("sl-tab-group"),this.tabPanel=this.closest("sl-tab-panel"),this.mainDrawerLabel=i.appShadow.querySelector("[data-main-drawer-label]")}connectedCallback(){if(this._addAnimations(),this.tabGroup.addEventListener("sl-tab-show",n=>{n.detail.name===this.tabId?(this._playFadeInAnimations(),this._updateMainDrawerLabel(),this._updateSignInBlockHeading(),this._updateHash(),i.app.reinitializeCarousels()):this._resetAnimations()}),!e.MAP[window.location.hash])return;const a=window.location.hash===this.tabId,t=e.MAP[window.location.hash].includes(this.tabId);(a||t)&&this._playFadeInAnimations()}get animationElements(){const t=[...this.querySelectorAll("sl-animation")],n=i.appShadow.querySelector("[gw-sign-in-block-animation]");return n&&t.unshift(n),t}_parseTabData(){const a=this.querySelector("[data-tab-panel-data]");return a?JSON.parse(a.textContent):{}}_updateHash(){var n,s;const a=window.location.hash;(n=e.MAP[a])!=null&&n.includes("##")||(window.location.hash=(s=this.tabData)==null?void 0:s.hash)}_updateMainDrawerLabel(){var t;const a=(t=this.tabData)==null?void 0:t.label;a&&this.mainDrawerLabel&&(this.mainDrawerLabel.textContent=a)}_updateSignInBlockHeading(){var n;const a=(n=this.tabData)==null?void 0:n.signInBlockHeading,t=i.appShadow.querySelector("[data-sign-in-block-heading]");a&&t&&(t.textContent=a)}_playFadeInAnimations(){this.animationElements.forEach(a=>a.play=!0)}_addAnimations(){this.animationElements.forEach((a,t)=>{a.keyframes=[{offset:0,opacity:"0",transform:"translate3d(0, -10px, 0)",easing:"ease-in-out"},{offset:1,opacity:"1",transform:"translate3d(0, 0, 0)",easing:"ease-in-out"}],a.delay=t*80})}_resetAnimations(){this.animationElements.forEach(a=>{a.currentTime>0&&(a.currentTime=0)})}}export{l as G};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
customElements.define("gw-customer-accounts-country-selector",class extends HTMLElement{constructor(){super(),this.countrySelector=this.querySelector('sl-select[name="country"]')}connectedCallback(){this.countrySelector.addEventListener("sl-change",()=>{const e=this.countrySelector.selectedOptions[0];this._renderProvinces(e)}),Promise.all([customElements.whenDefined("sl-select")]).then(()=>{setTimeout(()=>{const e=this.countrySelector.selectedOptions[0];this._renderProvinces(e)},1e3)}),this._updateOptionElements()}_renderProvinces(e){this.closest("form").querySelectorAll('sl-select[name="province"]').forEach(o=>o.remove());const c=JSON.parse(e.getAttribute("data-provinces"));if(!c||!c.length)return;const t=document.createElement("sl-select");t.setAttribute("name","province"),t.label="State",t.required=!0,c.forEach(o=>{const r=document.createElement("sl-option");r.value=o[0].replaceAll(" ","_"),r.textContent=o[1],t.appendChild(r)}),t.setAttribute("value",c[0][0]),this.after(t)}_updateOptionElements(){this.countrySelector.querySelectorAll("option").forEach(e=>{e.value=e.value.replaceAll(" ","_"),e.outerHTML=e.outerHTML.replace(/option/g,"sl-option")})}});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import{G as i,a as m}from"./assets/index-DI2a6rRk.js";import{G as f}from"./assets/tab-B7UDegaP.js";customElements.define("gw-customer-accounts-dashboard",class extends f{constructor(){super()}connectedCallback(){super.connectedCallback(),this._initDashboard()}async _initDashboard(){i.hasCustomer&&this._renderRecentlyViewedCollections(),this.loadSavedCartItems(),this.loadFavoriteItems(),this.loadRecentlyViewedItems()}async loadRecentlyViewedItems(e={}){const{preventDrawerRender:a=!1,preventCarouselRender:r=!1,page:t=1,limit:o=8}=e;try{const n=await this._getRecentlyViewedItems(t,o);this._renderRecentlyViewedItems(n,{preventDrawerRender:a,preventCarouselRender:r,page:t,limit:o})}catch(n){console.error("Error rendering recently viewed items:",n)}}async _getRecentlyViewedItems(e,a){if(!i.hasCustomer)return JSON.parse(localStorage.getItem(m.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS))||[];const r=await i.request(m.ENDPOINTS.VIEWED_PRODUCTS.GET,{customerID:i.customerId,limit:a,page:e},"GET");if(r.error)throw new Error(r.error);return r.products||[]}_renderRecentlyViewedItems(e,a){const r="[data-recently-viewed-container]",t="[data-recently-viewed-drawer-container]";if(i.appShadow.querySelector(r)){if(!e.length){this._renderEmptyState(r,t);return}a.preventCarouselRender||this._renderProductsToCarousel(e,r),a.preventDrawerRender||this._renderProductsToDrawer({products:e,containerSelector:t,productTemplateId:m.TEMPLATE_IDS.PRODUCT_CARD,currentPage:a.page,nextPage:null})}}async _getSavedCartItems(e,a){if(!i.customerId)return JSON.parse(localStorage.getItem(m.STORAGE_KEYS.TEMP_CART_PRODUCTS))||[];const r=await i.request(m.ENDPOINTS.CART.GET,{customerEmail:i.customerEmail,limit:a,page:e},"GET");if(r.error)throw new Error(r.error);return r.products||[]}_renderSavedCartItems(e,a){const r="[data-saved-from-cart-items-container]",t="[data-saved-from-cart-drawer-container]";if(!this.querySelector(r))return;if(!e.length){this._renderEmptyState(r,t);return}const n=this._calculateNextPage({totalItems:e.length,currentPage:a.page,limit:a.limit});a.preventCarouselRender||this._renderProductsToCarousel(e,r),a.preventDrawerRender||this._renderProductsToDrawer({products:e,containerSelector:t,removeButtonAction:"data-saved-from-cart-remove",productTemplateId:m.TEMPLATE_IDS.FORM_PRODUCT_CARD,currentPage:a.page,nextPage:n})}async loadSavedCartItems(e={}){const{preventDrawerRender:a=!1,preventCarouselRender:r=!1,page:t=1,limit:o=10}=e;try{const n=await this._getSavedCartItems(t,o);this._renderSavedCartItems(n,{preventDrawerRender:a,preventCarouselRender:r,page:t,limit:o})}catch(n){console.error("Error rendering saved items from cart:",n)}}async _getFavoriteItems(e,a){if(!i.hasCustomer)return JSON.parse(localStorage.getItem(m.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS))||[];const r=await i.request(m.ENDPOINTS.FAVORITES.GET,{limit:a,page:e,customerID:i.customerId},"GET");if(r.error)throw new Error(r.error);return r.products||[]}_renderFavoriteItems(e,a){const r="[data-favorites-container]",t="[data-favorites-drawer-container]";if(!i.appShadow.querySelector(r))return;if(!e.length){this._renderEmptyState(r,t,"You have no favorite items.");return}const{preventDrawerRender:n=!1,preventCarouselRender:s=!1,page:d=1,limit:l=10}=a;s||this._renderProductsToCarousel(e,r);const c=this._calculateNextPage({totalItems:e.length,currentPage:d,limit:l});n||this._renderProductsToDrawer({products:e,containerSelector:t,removeButtonAction:"data-wishlist-remove",productTemplateId:m.TEMPLATE_IDS.FORM_PRODUCT_CARD,currentPage:d,nextPage:c})}_renderSingleFavoriteItem(e){const a="[data-favorites-container]",r="[data-favorites-drawer-container]",t=i.appShadow.querySelector(a),o=document.getElementById(m.TEMPLATE_IDS.PRODUCT_CARD);if(!o){console.warn("Product card template not found.");return}const n=o.content.cloneNode(!0),s=this._populateCarouselItem(n,e),d=t.querySelector("sl-carousel");if(d)d.prepend(s);else{const c=document.createElement("sl-carousel");c.setAttribute("navigation",""),c.setAttribute("slides-per-page","3"),c.setAttribute("slides-per-move","3"),c.setAttribute("style","--scroll-hint: 5%; --aspect-ratio: none"),c.appendChild(s),t.innerHTML="",t.appendChild(c)}const l=i.appShadow.querySelector(r);if(l){const c=document.getElementById(m.TEMPLATE_IDS.FORM_PRODUCT_CARD);if(!c){console.warn("Drawer product card template not found.");return}const p=this._createProductElement(e,c,"data-wishlist-remove");this._ensureDrawerNotEmpty(t),l.prepend(p)}}_removeFavoriteItem(e){const a="[data-favorites-container]",r="[data-favorites-drawer-container]",t=i.appShadow.querySelector(a),o=i.appShadow.querySelector(r);if(t){const n=t.querySelector(`[data-product-id="${e}"]`);n&&n.remove(),t.querySelector("sl-carousel-item")||this._renderEmptyState(a,r,"You have no favorite items.")}if(o){const n=o.querySelector(`[data-product-id="${e}"]`);n&&n.remove()}}async loadFavoriteItems(e={}){const{page:a=1,limit:r=10}=e;try{const t=await this._getFavoriteItems(a,r);this._renderFavoriteItems(t,e)}catch(t){console.error("Error rendering favorite items:",t)}}_renderRecentlyViewedCollections(){const e=m.STORAGE_KEYS.RECENTLY_VIEWED_COLLECTION,a=JSON.parse(localStorage.getItem(e))||[],r=this.querySelector("[data-recently-viewed-collections-container]");if(!r||(r.innerHTML="",!a.length))return;const t=document.createElement("sl-carousel");t.setAttribute("navigation",""),t.setAttribute("style","--scroll-hint: 5%; --aspect-ratio: none"),a.forEach(o=>{const n=document.createElement("sl-carousel-item");n.innerHTML=`
|
|
2
|
+
<a href="${o.url}" class="gw-button-text gw-unstyled-link gw-recently-viewed-collection">
|
|
3
|
+
${o.title}
|
|
4
|
+
</a>
|
|
5
|
+
`,t.appendChild(n)}),r.appendChild(t)}_renderProductsToCarousel(e,a){const r=i.appShadow.querySelector(a);if(!r)return;r.innerHTML="",this._ensureDrawerNotEmpty(r);const t=document.createElement("sl-carousel");t.setAttribute("navigation",""),t.setAttribute("slides-per-page","3"),t.setAttribute("slides-per-move","3"),t.setAttribute("style","--scroll-hint: 5%; --aspect-ratio: none"),e.length>3&&t.setAttribute("data-has-next",""),t.addEventListener("sl-slide-change",n=>{n.detail.index>0?t.setAttribute("data-has-previous",""):t.removeAttribute("data-has-previous"),n.detail.index+3<e.length?t.setAttribute("data-has-next",""):t.removeAttribute("data-has-next")});const o=document.getElementById(m.TEMPLATE_IDS.PRODUCT_CARD);if(!o){console.warn("Carousel item template not found.");return}e.forEach(n=>{if(this._shouldHideProduct(n))return;const s=o.content.cloneNode(!0),d=this._populateCarouselItem(s,n);t.appendChild(d)}),r.appendChild(t)}_renderProductsToDrawer({products:e,currentPage:a,nextPage:r,containerSelector:t,removeButtonAction:o,productTemplateId:n}){const s=i.appShadow.querySelector(t);if(!s)return;a===1&&(s.innerHTML="");const d=s.querySelector("[data-load-more-button]");d&&d.remove();const l=document.getElementById(n||m.TEMPLATE_IDS.PRODUCT_CARD);if(!l){console.warn("Product card template not found.");return}e.forEach(c=>{if(this._shouldHideProduct(c))return;const p=this._createProductElement(c,l,o);s.appendChild(p)}),r&&this._renderLoadMoreButton(s,r)}_renderEmptyState(e,a,r){const t=i.appShadow.querySelector(e);if(!t)return;const o=t.getAttribute("data-drawer-selector"),n=t.getAttribute("data-empty-state-message")||"No items found.";if(o){const s=i.appShadow.querySelector(`#${o}`);if(s){s.setAttribute("empty","");const d=s.querySelector(a);d&&(d.innerHTML=`
|
|
6
|
+
<h2 class="gw-header drawer-empty-message">${r}</h2>
|
|
7
|
+
`),s.hasAttribute("open")&&s.hide()}}t.innerHTML=`
|
|
8
|
+
<div class="gw-empty-list">
|
|
9
|
+
<div class="gw-empty-list-inner">
|
|
10
|
+
<p>${n}</p>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
`}_calculateNextPage({totalItems:e,currentPage:a,limit:r}){const t=Math.ceil(e/r);return a<t?a+1:null}_renderLoadMoreButton(e,a){const r=document.createElement("button");r.textContent="Load More",r.classList.add("gw-button","gw-button--stroke"),r.setAttribute("data-load-more-button",""),r.insertAdjacentHTML("beforeend",`
|
|
14
|
+
<span class="gw-loader-container" hidden data-loader>
|
|
15
|
+
<span class="gw-loader"></span>
|
|
16
|
+
</span>
|
|
17
|
+
`),r.addEventListener("click",()=>{r.querySelector("[data-loader]").removeAttribute("hidden"),this.loadFavoriteItems({preventCarouselRender:!0,page:a})}),e.appendChild(r)}_shouldHideProduct(e){var a;return(a=e.tags)==null?void 0:a.some(r=>m.TAGS_TO_HIDE.includes(r))}_createProductElement(e,a,r){var p;const t=a.content.cloneNode(!0),o=t.querySelector("[data-product-title]"),n=t.querySelectorAll("[data-product-link]"),s=t.querySelector("[data-product-image]"),d=t.querySelector("[data-quick-add-to-cart-form]"),l=t.querySelector("[data-product-price]");if(l.setAttribute("product-handle",e.handle),e.variant_id&&l.setAttribute("product-variant",e.variant_id),t.querySelector(".gw-product-card").setAttribute("data-product-id",i.parseVariantId(e.id)),n.length&&n.forEach(u=>{u.href=`/products/${e.handle}`}),o&&(o.textContent=e.title),s&&((p=e.featuredImage)!=null&&p.url)&&(s.src=e.featuredImage.url+"&width=300",e.featuredImage.altText&&(s.alt=e.featuredImage.altText)),d){this._populateVariantFields(e,d);const u=document.createElement("input");u.type="hidden",u.name="productId",u.value=i.parseVariantId(e.id),d.prepend(u)}if(r){const u=t.querySelector("[data-remove-button]");u&&(u.setAttribute(r,""),r==="data-saved-from-cart-remove"&&u.setAttribute("aria-label",`Remove ${e.title} from saved items`),r==="data-wishlist-remove"&&u.setAttribute("aria-label",`Remove ${e.title} from favorites`))}const c=t.querySelector("gw-wishlist-button");if(c){c.setAttribute("product-id",i.parseVariantId(e.id));const u=document.createElement("script");u.type="application/json",u.setAttribute("data-product-data",""),u.textContent=JSON.stringify(e),c.appendChild(u)}return t}_populateVariantFields(e,a){var t;const r=((t=e.variants)==null?void 0:t.nodes)||[];if(r.length>1){const o=document.createElement("select");o.name="id",o.classList.add("gw-product-card__variant-selector"),r.forEach(n=>{const s=document.createElement("option"),d=i.parseVariantId(n.id);s.value=d,s.textContent=n.title,d==(e.variant_id||e.variantId)&&(s.selected=!0),o.appendChild(s)}),a.prepend(o)}else if(r.length===1){const o=document.createElement("input");o.type="hidden",o.name="id",o.value=e.variant_id||e.variantId?e.variant_id||e.variantId:i.parseVariantId(r[0].id),a.prepend(o)}}_updatePriceDisplay(e,a,r){var d,l;let t=(d=e.variants)==null?void 0:d.nodes[0];const o=e.variant_id||e.variantId;if(o){const c=(l=e.variants)==null?void 0:l.nodes.find(p=>i.parseVariantId(p.id)==o);c&&(t=c)}const n=(t==null?void 0:t.compareAtPrice)||(t==null?void 0:t.compare_at_price),s=t==null?void 0:t.price;if(a&&n&&(typeof n=="number"?a.textContent=i.formatMoney(n):a.textContent=n.includes("$")?n:`$${n}`),s&&r)if(typeof s=="number")r.textContent=i.formatMoney(s);else{const c="$"+s;r.textContent=s.includes("$")?s:c}n&&s&&(a.removeAttribute("hidden"),r.classList.add("gw-product-card__price--sale"))}_ensureDrawerNotEmpty(e){const a=e.getAttribute("data-drawer-selector");if(a){const r=i.appShadow.querySelector(`#${a}`);r&&r.removeAttribute("empty");const t=r.querySelector(".drawer-empty-message");t&&t.remove()}}_populateCarouselItem(e,a){const r=this._populateProductCard(e,a),t=document.createElement("sl-carousel-item");return t.setAttribute("data-product-id",i.parseVariantId(a.id)),t.appendChild(r),t}_populateProductCard(e,a){var d;const r=e.querySelector("[data-product-title]"),t=e.querySelector("[data-product-link]"),o=e.querySelector("[data-product-image]"),n=e.querySelector("[data-product-price]");r&&(r.textContent=a.title),t&&(t.href=`/products/${a.handle}`),o&&((d=a.featuredImage)!=null&&d.url)&&(o.src=a.featuredImage.url+"&width=300",a.featuredImage.altText&&(o.alt=a.featuredImage.altText)),n.setAttribute("product-handle",a.handle),a.variant_id&&n.setAttribute("product-variant",a.variant_id);const s=e.querySelector("gw-wishlist-button");if(s){s.setAttribute("product-id",i.parseVariantId(a.id));const l=document.createElement("script");l.type="application/json",l.setAttribute("data-product-data",""),l.textContent=JSON.stringify(a),s.appendChild(l)}return e}});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import{a as i,G as r}from"./assets/index-DI2a6rRk.js";customElements.define("gw-integrations-loyalty-points",class extends HTMLElement{constructor(){switch(super(),this.integration=this.getAttribute("integration"),this.loyaltyPageUrl=this.getAttribute("page-url"),this.pointsLabel=this.getAttribute("points-label"),this.linkLabel=this.getAttribute("link-label"),this.innerHTML=`
|
|
2
|
+
<a href="${this.loyaltyPageUrl}" class="gw-loyalty-points__link gw-unstyled-link">
|
|
3
|
+
<span class="gw-loader" data-loader></span>
|
|
4
|
+
<span class="gw-loyalty-points__points-value gw-header" data-points-container></span>
|
|
5
|
+
<span class="gw-loyalty-points__points-label" data-points-label hidden>${this.pointsLabel}</span>
|
|
6
|
+
<span class="gw-loyalty-points__link-label">
|
|
7
|
+
${this.linkLabel}
|
|
8
|
+
|
|
9
|
+
<svg
|
|
10
|
+
fill='none'
|
|
11
|
+
xmlns='http://www.w3.org/2000/svg'
|
|
12
|
+
viewBox='0 0 32 32'
|
|
13
|
+
aria-hidden='true'
|
|
14
|
+
width='16'
|
|
15
|
+
height='16'
|
|
16
|
+
>
|
|
17
|
+
<path d="m13.333 8 8 8-8 8" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path>
|
|
18
|
+
</svg>
|
|
19
|
+
</span>
|
|
20
|
+
</a>
|
|
21
|
+
`,this.API=null,this.SESSION_KEY=null,this.GET_POINTS=null,this.integration){case"loyalty-lion":this.API=i.ENDPOINTS.LOYALTY.GET_LL,this.SESSION_KEY=i.STORAGE_KEYS.LOYALTY_POINTS,this.GET_POINTS=t=>t.points_approved;break;case"yotpo":this.API=i.ENDPOINTS.LOYALTY.GET_YOTPO_CUSTOMER,this.SESSION_KEY=i.STORAGE_KEYS.YOTPO_POINTS,this.GET_POINTS=t=>{var e;return(e=t.customer)==null?void 0:e.points_balance};break;case"rise":this.API=i.ENDPOINTS.LOYALTY.GET_RISE_CREDIT,this.SESSION_KEY=i.STORAGE_KEYS.RISE_POINTS,this.GET_POINTS=t=>t.amount?this._formatUSD(t.amount):"$0.00",this.innerHTML+=`
|
|
22
|
+
<div class="gw-loyalty-points__id-container" hidden>
|
|
23
|
+
<span class="gw-loyalty-points__id" data-points-id></span>
|
|
24
|
+
<button class="gw-loyalty-points__copy-button" data-copy-button hidden>
|
|
25
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 12" fill="none" aria-hidden="true"><g clip-path="url(#copy-icon-clip-path)"><path d="M11.203 0h-6C4.383 0 3.72.67 3.72 1.497v1.458H2.176a1.491 1.491 0 0 0-1.489 1.49v6.058A1.495 1.495 0 0 0 2.173 12h6c.82 0 1.484-.67 1.484-1.497V9.045H11.2a1.491 1.491 0 0 0 1.489-1.49V1.497A1.495 1.495 0 0 0 11.203 0ZM8.47 10.5c0 .165-.133.299-.297.299h-6a.303.303 0 0 1-.297-.3V4.444c0-.165.133-.299.297-.299h6a.294.294 0 0 1 .297.3v6.058-.004Zm3.03-2.945c0 .166-.133.3-.296.3H9.661v-3.41a1.49 1.49 0 0 0-1.485-1.497h-3.27V1.497c0-.166.133-.3.297-.3h6a.302.302 0 0 1 .297.3v6.058Z" fill="currentColor"></path></g><defs><clipPath id="copy-icon-clip-path"><path fill="#fff" transform="translate(.5)" d="M0 0h12v12H0z"></path></clipPath></defs></svg>
|
|
26
|
+
Copy ID
|
|
27
|
+
</button>
|
|
28
|
+
</div>
|
|
29
|
+
`;break;default:return}}connectedCallback(){this._renderPointsFromSession(),this._initLoyaltyPoints()}_formatUSD(t){return t.toLocaleString("en-US",{style:"currency",currency:"USD"})}_renderPointsFromSession(){const t=sessionStorage.getItem(this.SESSION_KEY);if(t){const e=this.querySelector("[data-loader]"),o=this.querySelector("[data-points-container]"),n=this.querySelector("[data-points-label]");o.textContent=t,n.removeAttribute("hidden"),e.hidden=!0}}async _initLoyaltyPoints(){try{const t=await r.request(this.API);if(t.error)throw new Error(t.error);const e=this.querySelector("[data-loader]");e.hidden=!0;const o=this.querySelector("[data-points-container]"),n=this.querySelector("[data-points-label]"),s=this.GET_POINTS(t);if(s&&o&&(o.textContent=s,n.removeAttribute("hidden"),sessionStorage.setItem(this.SESSION_KEY,s)),this.integration==="rise"){if(t==null?void 0:t.code)this.querySelector(".gw-loyalty-points__id-container").removeAttribute("hidden");else{this.querySelector(".gw-loyalty-points__id-container").remove();return}const l=this.querySelector("[data-points-id]"),a=this.querySelector("[data-copy-button]");a.removeAttribute("hidden"),l.textContent="ID: "+t.code,a.addEventListener("click",()=>{navigator.clipboard.writeText(t==null?void 0:t.code),r.notify("ID copied to clipboard")})}}catch(t){console.error(t)}}});
|
package/dist/main.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer resets, tokens, utilities, components, shoelace, main, overrides;@layer shoelace{.sl-theme-light,:host,:root{color-scheme:light;--sl-color-gray-50:#f9f9f9;--sl-color-gray-100:#f4f4f5;--sl-color-gray-200:#e4e4e7;--sl-color-gray-300:#d4d4d8;--sl-color-gray-400:#a1a1aa;--sl-color-gray-500:#71717a;--sl-color-gray-600:#52525b;--sl-color-gray-700:#3f3f46;--sl-color-gray-800:#27272a;--sl-color-gray-900:#18181b;--sl-color-gray-950:#131316;--sl-color-red-50:#fef2f2;--sl-color-red-100:#fee2e2;--sl-color-red-200:#fecaca;--sl-color-red-300:#fca5a5;--sl-color-red-400:#f87171;--sl-color-red-500:#ef4444;--sl-color-red-600:#dc2626;--sl-color-red-700:#b91c1c;--sl-color-red-800:#991b1b;--sl-color-red-900:#7f1d1d;--sl-color-red-950:#501414;--sl-color-orange-50:#fff7ed;--sl-color-orange-100:#ffedd5;--sl-color-orange-200:#fed7aa;--sl-color-orange-300:#fdba74;--sl-color-orange-400:#fb923c;--sl-color-orange-500:#f97316;--sl-color-orange-600:#ea580c;--sl-color-orange-700:#c2410c;--sl-color-orange-800:#9a3412;--sl-color-orange-900:#7c2d12;--sl-color-orange-950:#52200f;--sl-color-amber-50:#fffbeb;--sl-color-amber-100:#fef3c7;--sl-color-amber-200:#fde68a;--sl-color-amber-300:#fcd34d;--sl-color-amber-400:#fbbf24;--sl-color-amber-500:#f59e0b;--sl-color-amber-600:#d97706;--sl-color-amber-700:#b45309;--sl-color-amber-800:#92400e;--sl-color-amber-900:#78350f;--sl-color-amber-950:#4a230b;--sl-color-yellow-50:#fefce8;--sl-color-yellow-100:#fef9c3;--sl-color-yellow-200:#fef08a;--sl-color-yellow-300:#fde047;--sl-color-yellow-400:#facc15;--sl-color-yellow-500:#eab308;--sl-color-yellow-600:#ca8a04;--sl-color-yellow-700:#a16207;--sl-color-yellow-800:#854d0e;--sl-color-yellow-900:#713f12;--sl-color-yellow-950:#3c260b;--sl-color-lime-50:#f7fee7;--sl-color-lime-100:#ecfccb;--sl-color-lime-200:#d9f99d;--sl-color-lime-300:#bef264;--sl-color-lime-400:#a3e635;--sl-color-lime-500:#84cc16;--sl-color-lime-600:#65a30d;--sl-color-lime-700:#4d7c0f;--sl-color-lime-800:#3f6212;--sl-color-lime-900:#365314;--sl-color-lime-950:#26390e;--sl-color-green-50:#f0fdf4;--sl-color-green-100:#dcfce7;--sl-color-green-200:#bbf7d0;--sl-color-green-300:#86efac;--sl-color-green-400:#4ade80;--sl-color-green-500:#22c55e;--sl-color-green-600:#16a34a;--sl-color-green-700:#15803d;--sl-color-green-800:#166534;--sl-color-green-900:#14532d;--sl-color-green-950:#0c311b;--sl-color-emerald-50:#ecfdf5;--sl-color-emerald-100:#d1fae5;--sl-color-emerald-200:#a7f3d0;--sl-color-emerald-300:#6ee7b7;--sl-color-emerald-400:#34d399;--sl-color-emerald-500:#10b981;--sl-color-emerald-600:#059669;--sl-color-emerald-700:#047857;--sl-color-emerald-800:#065f46;--sl-color-emerald-900:#064e3b;--sl-color-emerald-950:#032d22;--sl-color-teal-50:#f0fdfa;--sl-color-teal-100:#ccfbf1;--sl-color-teal-200:#99f6e4;--sl-color-teal-300:#5eead4;--sl-color-teal-400:#2dd4bf;--sl-color-teal-500:#14b8a6;--sl-color-teal-600:#0d9488;--sl-color-teal-700:#0f766e;--sl-color-teal-800:#115e59;--sl-color-teal-900:#134e4a;--sl-color-teal-950:#0c2e2c;--sl-color-cyan-50:#ecfeff;--sl-color-cyan-100:#cffafe;--sl-color-cyan-200:#a5f3fc;--sl-color-cyan-300:#67e8f9;--sl-color-cyan-400:#22d3ee;--sl-color-cyan-500:#06b6d4;--sl-color-cyan-600:#0891b2;--sl-color-cyan-700:#0e7490;--sl-color-cyan-800:#155e75;--sl-color-cyan-900:#164e63;--sl-color-cyan-950:#103442;--sl-color-sky-50:#f0f9ff;--sl-color-sky-100:#e0f2fe;--sl-color-sky-200:#bae6fd;--sl-color-sky-300:#7dd3fc;--sl-color-sky-400:#38bdf8;--sl-color-sky-500:#0ea5e9;--sl-color-sky-600:#0284c7;--sl-color-sky-700:#0369a1;--sl-color-sky-800:#075985;--sl-color-sky-900:#0c4a6e;--sl-color-sky-950:#0b3249;--sl-color-blue-50:#eff6ff;--sl-color-blue-100:#dbeafe;--sl-color-blue-200:#bfdbfe;--sl-color-blue-300:#93c5fd;--sl-color-blue-400:#60a5fa;--sl-color-blue-500:#3b82f6;--sl-color-blue-600:#2563eb;--sl-color-blue-700:#1d4ed8;--sl-color-blue-800:#1e40af;--sl-color-blue-900:#1e3a8a;--sl-color-blue-950:#152149;--sl-color-indigo-50:#eef2ff;--sl-color-indigo-100:#e0e7ff;--sl-color-indigo-200:#c7d2fe;--sl-color-indigo-300:#a5b4fc;--sl-color-indigo-400:#818cf8;--sl-color-indigo-500:#6366f1;--sl-color-indigo-600:#4f46e5;--sl-color-indigo-700:#4338ca;--sl-color-indigo-800:#3730a3;--sl-color-indigo-900:#312e81;--sl-color-indigo-950:#242154;--sl-color-violet-50:#f5f3ff;--sl-color-violet-100:#ede9fe;--sl-color-violet-200:#ddd6fe;--sl-color-violet-300:#c4b5fd;--sl-color-violet-400:#a78bfa;--sl-color-violet-500:#8b5cf6;--sl-color-violet-600:#7c3aed;--sl-color-violet-700:#6d28d9;--sl-color-violet-800:#5b21b6;--sl-color-violet-900:#4c1d95;--sl-color-violet-950:#311558;--sl-color-purple-50:#faf5ff;--sl-color-purple-100:#f3e8ff;--sl-color-purple-200:#e9d5ff;--sl-color-purple-300:#d8b4fe;--sl-color-purple-400:#c084fc;--sl-color-purple-500:#a855f7;--sl-color-purple-600:#9333ea;--sl-color-purple-700:#7e22ce;--sl-color-purple-800:#6b21a8;--sl-color-purple-900:#581c87;--sl-color-purple-950:#2f1143;--sl-color-fuchsia-50:#fdf4ff;--sl-color-fuchsia-100:#fae8ff;--sl-color-fuchsia-200:#f5d0fe;--sl-color-fuchsia-300:#f0abfc;--sl-color-fuchsia-400:#e879f9;--sl-color-fuchsia-500:#d946ef;--sl-color-fuchsia-600:#c026d3;--sl-color-fuchsia-700:#a21caf;--sl-color-fuchsia-800:#86198f;--sl-color-fuchsia-900:#701a75;--sl-color-fuchsia-950:#38103a;--sl-color-pink-50:#fdf2f8;--sl-color-pink-100:#fce7f3;--sl-color-pink-200:#fbcfe8;--sl-color-pink-300:#f9a8d4;--sl-color-pink-400:#f472b6;--sl-color-pink-500:#ec4899;--sl-color-pink-600:#db2777;--sl-color-pink-700:#be185d;--sl-color-pink-800:#9d174d;--sl-color-pink-900:#831843;--sl-color-pink-950:#430e23;--sl-color-rose-50:#fff1f2;--sl-color-rose-100:#ffe4e6;--sl-color-rose-200:#fecdd3;--sl-color-rose-300:#fda4af;--sl-color-rose-400:#fb7185;--sl-color-rose-500:#f43f5e;--sl-color-rose-600:#e11d48;--sl-color-rose-700:#be123c;--sl-color-rose-800:#9f1239;--sl-color-rose-900:#881337;--sl-color-rose-950:#4a0d20;--sl-color-primary-50:var(--sl-color-sky-50);--sl-color-primary-100:var(--sl-color-sky-100);--sl-color-primary-200:var(--sl-color-sky-200);--sl-color-primary-300:var(--sl-color-sky-300);--sl-color-primary-400:var(--sl-color-sky-400);--sl-color-primary-500:var(--sl-color-sky-500);--sl-color-primary-600:var(--sl-color-sky-600);--sl-color-primary-700:var(--sl-color-sky-700);--sl-color-primary-800:var(--sl-color-sky-800);--sl-color-primary-900:var(--sl-color-sky-900);--sl-color-primary-950:var(--sl-color-sky-950);--sl-color-success-50:var(--sl-color-green-50);--sl-color-success-100:var(--sl-color-green-100);--sl-color-success-200:var(--sl-color-green-200);--sl-color-success-300:var(--sl-color-green-300);--sl-color-success-400:var(--sl-color-green-400);--sl-color-success-500:var(--sl-color-green-500);--sl-color-success-600:var(--sl-color-green-600);--sl-color-success-700:var(--sl-color-green-700);--sl-color-success-800:var(--sl-color-green-800);--sl-color-success-900:var(--sl-color-green-900);--sl-color-success-950:var(--sl-color-green-950);--sl-color-warning-50:var(--sl-color-amber-50);--sl-color-warning-100:var(--sl-color-amber-100);--sl-color-warning-200:var(--sl-color-amber-200);--sl-color-warning-300:var(--sl-color-amber-300);--sl-color-warning-400:var(--sl-color-amber-400);--sl-color-warning-500:var(--sl-color-amber-500);--sl-color-warning-600:var(--sl-color-amber-600);--sl-color-warning-700:var(--sl-color-amber-700);--sl-color-warning-800:var(--sl-color-amber-800);--sl-color-warning-900:var(--sl-color-amber-900);--sl-color-warning-950:var(--sl-color-amber-950);--sl-color-danger-50:var(--sl-color-red-50);--sl-color-danger-100:var(--sl-color-red-100);--sl-color-danger-200:var(--sl-color-red-200);--sl-color-danger-300:var(--sl-color-red-300);--sl-color-danger-400:var(--sl-color-red-400);--sl-color-danger-500:var(--sl-color-red-500);--sl-color-danger-600:var(--sl-color-red-600);--sl-color-danger-700:var(--sl-color-red-700);--sl-color-danger-800:var(--sl-color-red-800);--sl-color-danger-900:var(--sl-color-red-900);--sl-color-danger-950:var(--sl-color-red-950);--sl-color-neutral-50:var(--sl-color-gray-50);--sl-color-neutral-100:var(--sl-color-gray-100);--sl-color-neutral-200:var(--sl-color-gray-200);--sl-color-neutral-300:var(--sl-color-gray-300);--sl-color-neutral-400:var(--sl-color-gray-400);--sl-color-neutral-500:var(--sl-color-gray-500);--sl-color-neutral-600:var(--sl-color-gray-600);--sl-color-neutral-700:var(--sl-color-gray-700);--sl-color-neutral-800:var(--sl-color-gray-800);--sl-color-neutral-900:var(--sl-color-gray-900);--sl-color-neutral-950:var(--sl-color-gray-950);--sl-color-neutral-0:#fff;--sl-color-neutral-1000:#000;--sl-border-radius-small:0.1875rem;--sl-border-radius-medium:0.25rem;--sl-border-radius-large:0.5rem;--sl-border-radius-x-large:1rem;--sl-border-radius-circle:50%;--sl-border-radius-pill:9999px;--sl-shadow-x-small:0 1px 2px hsla(240,4%,46%,.06);--sl-shadow-small:0 1px 2px hsla(240,4%,46%,.12);--sl-shadow-medium:0 2px 4px hsla(240,4%,46%,.12);--sl-shadow-large:0 2px 8px hsla(240,4%,46%,.12);--sl-shadow-x-large:0 4px 16px hsla(240,4%,46%,.12);--sl-spacing-3x-small:0.125rem;--sl-spacing-2x-small:0.25rem;--sl-spacing-x-small:0.5rem;--sl-spacing-small:0.75rem;--sl-spacing-medium:1rem;--sl-spacing-large:1.25rem;--sl-spacing-x-large:1.75rem;--sl-spacing-2x-large:2.25rem;--sl-spacing-3x-large:3rem;--sl-spacing-4x-large:4.5rem;--sl-transition-x-slow:1000ms;--sl-transition-slow:500ms;--sl-transition-medium:250ms;--sl-transition-fast:150ms;--sl-transition-x-fast:50ms;--sl-font-mono:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;--sl-font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--sl-font-serif:Georgia,"Times New Roman",serif;--sl-font-size-2x-small:0.625rem;--sl-font-size-x-small:0.75rem;--sl-font-size-small:0.875rem;--sl-font-size-medium:1rem;--sl-font-size-large:1.25rem;--sl-font-size-x-large:1.5rem;--sl-font-size-2x-large:2.25rem;--sl-font-size-3x-large:3rem;--sl-font-size-4x-large:4.5rem;--sl-font-weight-light:300;--sl-font-weight-normal:400;--sl-font-weight-semibold:500;--sl-font-weight-bold:700;--sl-letter-spacing-denser:-0.03em;--sl-letter-spacing-dense:-0.015em;--sl-letter-spacing-normal:normal;--sl-letter-spacing-loose:0.075em;--sl-letter-spacing-looser:0.15em;--sl-line-height-denser:1;--sl-line-height-dense:1.4;--sl-line-height-normal:1.8;--sl-line-height-loose:2.2;--sl-line-height-looser:2.6;--sl-focus-ring-color:var(--sl-color-primary-600);--sl-focus-ring-style:solid;--sl-focus-ring-width:3px;--sl-focus-ring:var(--sl-focus-ring-style) var(--sl-focus-ring-width) var(--sl-focus-ring-color);--sl-focus-ring-offset:1px;--sl-button-font-size-small:var(--sl-font-size-x-small);--sl-button-font-size-medium:var(--sl-font-size-small);--sl-button-font-size-large:var(--sl-font-size-medium);--sl-input-height-small:1.875rem;--sl-input-height-medium:2.5rem;--sl-input-height-large:3.125rem;--sl-input-background-color:var(--sl-color-neutral-0);--sl-input-background-color-hover:var(--sl-input-background-color);--sl-input-background-color-focus:var(--sl-input-background-color);--sl-input-background-color-disabled:var(--sl-color-neutral-100);--sl-input-border-color:var(--sl-color-neutral-300);--sl-input-border-color-hover:var(--sl-color-neutral-400);--sl-input-border-color-focus:var(--sl-color-primary-500);--sl-input-border-color-disabled:var(--sl-color-neutral-300);--sl-input-border-width:1px;--sl-input-required-content:"*";--sl-input-required-content-offset:-2px;--sl-input-required-content-color:var(--sl-input-label-color);--sl-input-border-radius-small:var(--sl-border-radius-medium);--sl-input-border-radius-medium:var(--sl-border-radius-medium);--sl-input-border-radius-large:var(--sl-border-radius-medium);--sl-input-font-family:var(--sl-font-sans);--sl-input-font-weight:var(--sl-font-weight-normal);--sl-input-font-size-small:var(--sl-font-size-small);--sl-input-font-size-medium:var(--sl-font-size-medium);--sl-input-font-size-large:var(--sl-font-size-large);--sl-input-letter-spacing:var(--sl-letter-spacing-normal);--sl-input-color:var(--sl-color-neutral-700);--sl-input-color-hover:var(--sl-color-neutral-700);--sl-input-color-focus:var(--sl-color-neutral-700);--sl-input-color-disabled:var(--sl-color-neutral-900);--sl-input-icon-color:var(--sl-color-neutral-500);--sl-input-icon-color-hover:var(--sl-color-neutral-600);--sl-input-icon-color-focus:var(--sl-color-neutral-600);--sl-input-placeholder-color:var(--sl-color-neutral-500);--sl-input-placeholder-color-disabled:var(--sl-color-neutral-600);--sl-input-spacing-small:var(--sl-spacing-small);--sl-input-spacing-medium:var(--sl-spacing-medium);--sl-input-spacing-large:var(--sl-spacing-large);--sl-input-focus-ring-color:rgba(14,165,233,.4);--sl-input-focus-ring-offset:0;--sl-input-filled-background-color:var(--sl-color-neutral-100);--sl-input-filled-background-color-hover:var(--sl-color-neutral-100);--sl-input-filled-background-color-focus:var(--sl-color-neutral-100);--sl-input-filled-background-color-disabled:var(--sl-color-neutral-100);--sl-input-filled-color:var(--sl-color-neutral-800);--sl-input-filled-color-hover:var(--sl-color-neutral-800);--sl-input-filled-color-focus:var(--sl-color-neutral-700);--sl-input-filled-color-disabled:var(--sl-color-neutral-800);--sl-input-label-font-size-small:var(--sl-font-size-small);--sl-input-label-font-size-medium:var(--sl-font-size-medium);--sl-input-label-font-size-large:var(--sl-font-size-large);--sl-input-label-color:inherit;--sl-input-help-text-font-size-small:var(--sl-font-size-x-small);--sl-input-help-text-font-size-medium:var(--sl-font-size-small);--sl-input-help-text-font-size-large:var(--sl-font-size-medium);--sl-input-help-text-color:var(--sl-color-neutral-500);--sl-toggle-size-small:0.875rem;--sl-toggle-size-medium:1.125rem;--sl-toggle-size-large:1.375rem;--sl-overlay-background-color:hsla(240,4%,46%,.33);--sl-panel-background-color:var(--sl-color-neutral-0);--sl-panel-border-color:var(--sl-color-neutral-200);--sl-panel-border-width:1px;--sl-tooltip-border-radius:var(--sl-border-radius-medium);--sl-tooltip-background-color:var(--sl-color-neutral-800);--sl-tooltip-color:var(--sl-color-neutral-0);--sl-tooltip-font-family:var(--sl-font-sans);--sl-tooltip-font-weight:var(--sl-font-weight-normal);--sl-tooltip-font-size:var(--sl-font-size-small);--sl-tooltip-line-height:var(--sl-line-height-dense);--sl-tooltip-padding:var(--sl-spacing-2x-small) var(--sl-spacing-x-small);--sl-tooltip-arrow-size:6px;--sl-z-index-drawer:700;--sl-z-index-dialog:800;--sl-z-index-dropdown:900;--sl-z-index-toast:950;--sl-z-index-tooltip:1000}@supports (scrollbar-gutter:stable){.sl-scroll-lock{scrollbar-gutter:var(--sl-scroll-lock-gutter)!important}.sl-scroll-lock body{overflow:hidden!important}}@supports not (scrollbar-gutter:stable){.sl-scroll-lock body{overflow:hidden!important;padding-right:var(--sl-scroll-lock-size)!important}}.sl-toast-stack{inset-inline-end:0;max-height:100%;max-width:100%;overflow:auto;position:fixed;top:0;width:28rem;z-index:var(--sl-z-index-toast)}.sl-toast-stack sl-alert{margin:var(--sl-spacing-medium)}.sl-toast-stack sl-alert::part(base){box-shadow:var(--sl-shadow-large)}}@layer resets{*{box-sizing:border-box}[hidden]{display:none!important}h1,h2,h3,h4,h5,h6,p{font-family:inherit;font-size:inherit;margin:0;padding:0}a{color:inherit;text-decoration:underline;text-underline-offset:2px}ul{list-style:none;margin:0}button svg{pointer-events:none}}@layer components{.gw-header{font-family:var(--header-font-family);font-size:18px;font-style:normal;font-weight:var(--header-font-weight);line-height:20px}.gw-header--large{font-size:24px;line-height:30px}.gw-body{font-size:14px;font-style:normal;font-weight:var(--body-font-weight);line-height:18px}.gw-body--strong{font-weight:600}.gw-body--small{font-size:12px}.gw-small-text{font-size:13px;font-style:normal;font-weight:var(--body-font-weight);line-height:1.2}.gw-uppercase-text{font-weight:var(--body-font-weight)}.gw-button-text,.gw-uppercase-text{font-size:11px;font-style:normal;line-height:14px;text-transform:uppercase}.gw-button,.gw-button-text{font-weight:var(--button-font-weight);letter-spacing:2.2px}.gw-button{border:none;border-radius:var(--corner-radius-button);cursor:pointer;font-family:var(--button-font-family);font-size:11px;font-style:normal;line-height:14px;padding:13px;text-transform:var(--text-case-button);width:100%}.gw-button--solid{background-color:var(--color-solid-button-background);border:var(--thickness-button) solid var(--color-solid-button-border);color:var(--color-solid-button-text);transition:background-color .3s,color .3s,border-color .3s}.gw-button--solid:hover{background-color:var(--color-solid-button-hover-background);border-color:var(--color-solid-button-hover-border);color:var(--color-solid-button-hover-text)}.gw-button--stroke{background-color:var(--color-stroke-button-background);border:var(--thickness-button) solid var(--color-stroke-button-border);color:var(--color-stroke-button-text);transition:background-color .3s,color .3s,border-color .3s}.gw-button--stroke:hover{background-color:var(--color-stroke-button-hover-background);border-color:var(--color-stroke-button-hover-border);color:var(--color-stroke-button-hover-text)}.gw-button--disabled{background-color:var(--color-disabled-button-background);color:var(--color-disabled-button-text);cursor:not-allowed}.gw-button--text{background-color:transparent;color:var(--color-text-subdued);padding:5px;text-decoration-line:underline}.gw-button svg{pointer-events:none}}@layer utilities{.gw-unstyled-link{color:inherit;text-decoration:none}.gw-button[href]{display:block;text-align:center;text-decoration:none}.gw-empty-button{background:transparent;border:none;cursor:pointer}.gw-main-content-container{display:flex;flex-direction:column;gap:var(--tab-panel-vertical-gap);padding-bottom:var(--tab-panel-vertical-gap)}.gw-main-content-container--small-gap{--tab-panel-vertical-gap:16px}.gw-empty-list{padding:0 var(--tab-panel-edge-padding);text-align:center}.gw-empty-list-inner{border:1px solid var(--border-color);border-radius:var(--border-radius);padding:30px}.gw-error-message{color:#a50000;font-size:13px;margin-top:8px}.gw-loader-container{--loader-size:14px;--loader-border-weight:1px;position:relative}.gw-loader-container--block{display:block;height:var(--loader-size);margin:24px auto;width:var(--loader-size)}.gw-loader-container--large{--loader-size:24px;--loader-border-weight:3px}.gw-loader{animation:rotation 1s linear infinite;border:var(--loader-border-weight) solid transparent;border-bottom-color:inherit;border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--loader-size);left:8px;position:absolute;width:var(--loader-size)}.gw-loader-container--block .gw-loader{left:0}.gw-loader--white{border:2px solid var(--border-color);border-bottom-color:var(--color-text)}.visually-hidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}}@layer main{:host{--sl-input-font-size-medium:14px;--sl-font-size-medium:14px;--tab-panel-edge-padding:20px;--tab-panel-vertical-gap:24px;all:initial;color:var(--color-text);font-family:var(--body-font-family);font-size:14px;font-style:normal;font-weight:var(--body-font-weight);line-height:18px;position:relative;z-index:2147483647}sl-drawer{--size:var(--drawer-width);--body-spacing:0;--header-spacing:20px}sl-drawer::part(close-button){display:none}sl-drawer[main-drawer]::part(body){background-color:var(--color-drawer-background);display:flex;flex-direction:column}sl-drawer[main-drawer]::part(header){background-color:var(--color-drawer-header-background)}sl-drawer[main-drawer].inner-drawer-open::part(header){display:none}sl-drawer[main-drawer].inner-drawer-open sl-tab-group::part(nav){display:none}sl-drawer[main-drawer].inner-drawer-open gw-customer-accounts-sign-in{display:none}sl-drawer[main-drawer] sl-tab{background-color:var(--color-drawer-footer-background)}.gw-customer-accounts-drawer__header,.gw-secondary-drawer__header{align-items:center;display:flex;gap:8px}.gw-secondary-drawer__header{background-color:transparent;border:none;color:var(--color-text);cursor:pointer;padding:0}.gw-product-card{position:relative;width:100%}.gw-product-card--splitted{align-items:center;display:flex;flex-direction:row-reverse;gap:16px}.gw-product-card--splitted .gw-product-card__image-container{flex-shrink:0}.gw-product-card--reversed{display:flex;flex-direction:column-reverse}.gw-product-card--removing:after{background:hsla(0,0%,100%,.5);content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.gw-product-card--splitted .gw-product-card__image-container{width:120px}.gw-product-card__image-container:after{content:"";display:block;padding-bottom:var(--product-card-image-ratio);width:100%}.gw-product-card__info{display:flex;flex:1;flex-direction:column;gap:8px}.gw-product-card__info--no-gap{gap:0}.gw-product-card__link{display:block;width:100%}.gw-product-card__link:focus{outline:2px solid #005fcc}.gw-product-card__link:after{content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:10}.gw-product-card__link--hide-after:after{content:none}.gw-product-card__image-container{border:1px solid var(--border-color);position:relative;width:100%}.gw-product-card__image{height:100%;left:0;object-fit:contain;position:absolute;top:0;width:100%}.gw-product-card__info{margin-top:8px}.gw-product-card__form{display:flex;flex-direction:column;gap:10px}.gw-product-card__actions{display:flex}.gw-product-card__variant-selector{border:1px solid var(--border-color);border-radius:0;color:var(--color-text);padding:4px 8px;width:100%}.gw-product-card__price{display:flex;font-size:13px;font-style:normal;font-weight:var(--body-font-weight);gap:4px;line-height:1.2}.gw-product-card__price-compare{text-decoration:line-through}.gw-product-card__price--sale{color:#c70100}.gw-notifications{bottom:54px;left:20px;position:fixed;z-index:900}.gw-notifications sl-alert::part(base){background-color:var(--color-notifications-background);border:none;border-radius:var(--border-radius);min-width:300px;width:100%}.gw-notifications *{color:var(--color-notifications-label);font-family:var(--body-font-family);font-size:16px}.gw-notifications [data-notification-message]{align-items:center;display:flex;gap:8px;justify-content:space-between}.gw-customer-accounts-orders__empty{padding:40px var(--tab-panel-edge-padding) 0;text-align:center}.gw-customer-accounts-order__carousel::part(base){display:block}.gw-customer-accounts-order__header{align-items:center;cursor:pointer;display:flex;gap:8px;margin-bottom:16px;padding:0 var(--tab-panel-edge-padding)}.gw-order-detail{padding-bottom:var(--tab-panel-vertical-gap)}.gw-order-detail__delivery,.gw-order-detail__integrations,.gw-order-detail__line-items,.gw-order-detail__payment{display:flex;flex-direction:column;gap:var(--tab-panel-vertical-gap);padding:0 var(--tab-panel-edge-padding)}.gw-order-detail__integrations{gap:8px}.gw-order-detail__line-item{align-items:center;display:flex;gap:16px}.gw-order-detail__line-item:first-child{margin-top:16px}.gw-order-detail__status{align-items:center;background-color:#a13818;color:#fff;display:flex;gap:8px;padding:12px var(--tab-panel-edge-padding)}.gw-order-detail__line-item-image-container{border:1px solid var(--border-color);flex-shrink:0;position:relative;width:120px}.gw-order-detail__line-item-image-container:after{content:"";display:block;padding-bottom:var(--product-card-image-ratio);width:100%}.gw-order-detail__line-item-image{border-radius:var(--border-radius);height:100%;left:0;object-fit:contain;position:absolute;top:0;width:100%}.gw-order-detail__line-item-quantity{background-color:var(--color-text);border-radius:50%;color:#fff;font-size:10px;font-weight:600;line-height:14px;padding:2px 7px;position:absolute;right:0;top:0;transform:translate(50%,-50%)}.gw-order-detail__line-item-price{margin-left:auto}.gw-order-detail__price-breakdown{border-bottom:1px solid var(--border-color);border-top:1px solid var(--border-color);display:flex;flex-direction:column;padding:var(--tab-panel-vertical-gap) var(--tab-panel-edge-padding) 0}.gw-order-detail__price-breakdown-item{align-items:center;display:flex;justify-content:space-between}.gw-order-detail__price-breakdown-item+.gw-order-detail__price-breakdown-item{margin-top:14px}.gw-order-detail__price-breakdown-item--total{border-top:1px solid var(--border-color);margin-top:var(--tab-panel-vertical-gap)!important;padding:var(--tab-panel-vertical-gap) 0}.gw-order-detail__discount-title{text-transform:uppercase}.gw-order-detail__delivery-info p:first-child,.gw-order-detail__payment-info p:first-child{margin-bottom:10px}.gw-order-detail__additional-info{padding:0 var(--tab-panel-edge-padding)}.gw-order-detail__additional-info p:not(:last-child){margin-bottom:8px}.gw-icon--close{align-items:center;display:flex;height:18px;justify-content:center;width:18px}sl-input,sl-select{color:var(--color-text);font-family:var(--form-font-family);font-weight:var(--form-font-weight);position:relative;text-transform:var(--form-elements-text-case)}sl-input.input--empty::part(form-control-label),sl-select.input--empty::part(form-control-label){font-size:14px;padding-top:17px}sl-input.input--focus::part(form-control-label),sl-input::part(form-control-label),sl-select::part(form-control-label){font-size:10px;padding-left:12px;padding-top:6px;position:absolute;transition:all .3s ease;z-index:1}sl-input::part(base){border:var(--form-elements-thickness) solid var(--border-color);border-radius:var(--form-elements-corner-radius);height:50px;position:relative}sl-input::part(input){height:50px;padding-left:12px;padding-top:12px}sl-input[data-user-invalid]::part(base){--border-color:#a50000}sl-select::part(combobox){border:var(--form-elements-thickness) solid var(--border-color);border-radius:var(--form-elements-corner-radius);height:50px}sl-select::part(display-input){top:8px}sl-checkbox::part(base){align-items:center}sl-checkbox::part(control){--toggle-size:16px;--sl-focus-ring:solid 2px #000;border-color:#181818;border-radius:0}sl-checkbox[checked]::part(control){background-color:#000;color:#fff}sl-option[value="---"]{display:none}.gw-recently-viewed-collections sl-carousel::part(scroll-container){grid-auto-columns:auto;justify-content:flex-start}.gw-recently-viewed-collection{border:1px solid #000;padding:8px 18px;white-space:nowrap}.gw-favorites-tab,.gw-saved-from-cart-tab{display:flex;flex-direction:column;gap:var(--tab-panel-vertical-gap);padding:0 var(--tab-panel-edge-padding) var(--tab-panel-vertical-gap)}.gw-recently-viewed-items-tab{display:grid;gap:24px 16px;grid-template-columns:1fr 1fr;padding:0 var(--tab-panel-edge-padding) var(--tab-panel-vertical-gap)}.gw-quick-links{display:flex;flex-direction:column;gap:12px;list-style:none;margin:0;padding:0 var(--tab-panel-edge-padding)}.gw-quick-link{align-items:center;display:flex;gap:8px}.gw-card__item{display:flex;flex-direction:column;gap:8px;padding:0 var(--tab-panel-edge-padding);position:relative}.gw-card__item a{height:100%;left:0;position:absolute;top:0;width:100%;z-index:10}.gw-card__item-image-wrapper{overflow:hidden;width:100%}.gw-card__item-image{display:block;height:100%;object-fit:cover;transition:transform .5s ease;width:100%}.gw-card__item:hover .gw-card__item-image{transform:scale(1.05)}.gw-sign-in{display:flex;flex-direction:column;gap:14px;margin-bottom:24px;padding:0 var(--tab-panel-edge-padding)}.gw-sign-in__form button[type=submit]{margin-top:16px}.gw-sign-in__link{margin-bottom:24px;padding:0 var(--tab-panel-edge-padding)}.gw-verify-code{margin-bottom:24px;text-align:center}.gw-verify-code .input-code-group{display:flex;gap:8px;justify-content:center;margin:35px 0 16px}.gw-verify-code .code-input{appearance:textfield;-moz-appearance:textfield;background:#fff;border:1px solid var(--border-color);font-family:var(--form-font-family);font-size:22px;font-weight:600;height:68px;text-align:center;width:56px}.gw-verify-code .code-input::-webkit-inner-spin-button,.gw-verify-code .code-input::-webkit-outer-spin-button{-webkit-appearance:none}.gw-verify-code__actions .gw-error-message{margin:16px 0}.my-preferences{padding:0 var(--tab-panel-edge-padding)}.my-preferences__header{align-items:center;cursor:pointer;display:flex;gap:8px;margin-bottom:22px}.my-preferences__field{border:1px solid var(--border-color);display:flex;flex-direction:column;padding:16px 20px}.my-preferences__field+.my-preferences__field{border-top:0}.my-preferences__fields+.my-preferences__fields{margin-top:22px}.my-preferences__fields{cursor:pointer}.gw-preference-details__notification{border-bottom:1px solid var(--border-color);display:flex;flex-direction:column;gap:var(--tab-panel-vertical-gap);padding:0 var(--tab-panel-edge-padding) var(--tab-panel-vertical-gap)}.gw-preference-details__email{display:flex;flex-direction:column;gap:16px}.gw-preference-details__email sl-input::part(form-control-help-text){margin-top:8px}.gw-preference-details__email sl-checkbox::part(base){align-items:center}.gw-preference-details__email sl-checkbox::part(control){--sl-focus-ring:solid 2px #000;border-color:#181818;border-radius:0}.gw-preference-details__email sl-checkbox[checked]::part(control){background-color:#000;color:#fff}.gw-preference-details__phone{display:flex;flex-direction:column;gap:16px}.gw-preference-details__phone sl-checkbox::part(form-control-help-text){margin-top:8px}.gw-preference-details__personal-info{display:flex;flex-direction:column;gap:var(--tab-panel-vertical-gap)}.gw-address,.gw-preference-details__personal-info{padding:var(--tab-panel-vertical-gap) var(--tab-panel-edge-padding)}.gw-address{border-bottom:1px solid var(--border-color);cursor:pointer}.gw-address p:first-child{margin-bottom:8px}.gw-address-add,.gw-address-edit{padding:var(--tab-panel-vertical-gap) var(--tab-panel-edge-padding)}.gw-address__icon{position:absolute;right:16px;top:50%;transform:translateY(-50%)}.gw-button-wrapper{padding:0 var(--tab-panel-edge-padding)}.my-addresses{cursor:pointer}.my-addresses sl-carousel::part(scroll-container){grid-auto-columns:auto}.my-addresses__header{align-items:center;cursor:pointer;display:flex;gap:8px;margin-bottom:22px}.my-addresses__header,.my-addresses__list--single{padding:0 var(--tab-panel-edge-padding)}.my-addresses__address{border:1px solid var(--border-color);min-height:160px;min-width:270px;padding:16px 20px}.my-addresses__address p:first-child{margin-bottom:8px}.my-addresses__default-badge{background-color:var(--border-color);padding:2px 8px;white-space:nowrap}.gw-latest-order-wrapper{padding:0 20px}.gw-latest-order{background:#fff;border:1px solid rgba(0,0,0,.1);box-shadow:0 0 20px 0 rgba(0,0,0,.1);cursor:pointer;display:flex;gap:16px;padding:16px}.gw-latest-order__image-container{flex-shrink:0;position:relative;width:56px}.gw-latest-order__image-container:after{content:"";display:block;padding-bottom:var(--product-card-image-ratio);width:100%}.gw-latest-order__image{height:100%;left:0;object-fit:cover;position:absolute;top:0;width:100%}.gw-latest-order__info{display:flex;flex-direction:column;gap:4px;justify-content:center}sl-tab-group{--indicator-color:var(--color-text);--track-color:var(--border-color);--track-width:2px;--sign-in-block-height:202px;--sign-in-block-margin-bottom:24px;flex:1;max-height:calc(100% - var(--sign-in-block-height) - var(--sign-in-block-margin-bottom))}sl-tab-group[sign-in-type-password]{--sign-in-block-height:70px}sl-tab-group[has-customer]{max-height:100%}sl-tab-group::part(base),sl-tab-group::part(body){height:100%}sl-tab-group::part(nav){padding:0}sl-tab-group sl-tab-panel{height:100%}sl-tab-group sl-tab-panel::part(base){height:100%;padding:0}sl-tab-group sl-tab{cursor:pointer;padding:16px 0;text-align:center;width:33.33333%}sl-tab-group sl-tab::part(base){all:unset}.gw-collections{display:flex;gap:8px}.gw-collections sl-skeleton{--border-radius:0;flex-shrink:0;height:30px;width:90px}.gw-collections sl-skeleton:nth-child(odd){width:120px}.gw-products-carousel{display:flex;flex-direction:column;gap:24px}.gw-products-carousel__header-wrapper{padding:0 20px}.gw-products-carousel__header{align-items:center;cursor:pointer;display:flex;gap:8px}.gw-products-carousel__feed{display:flex;gap:8px;padding:0 0 0 20px}.gw-products-carousel sl-skeleton{--border-radius:0;flex-shrink:0;width:115px}.gw-products-carousel sl-skeleton:after{content:"";display:block;padding-bottom:var(--product-card-image-ratio);width:100%}sl-carousel::part(base){gap:0}sl-carousel::part(navigation-button){align-items:center;background-color:#fff;display:flex;height:42px;justify-content:center;opacity:0;position:absolute;transition:all .3s ease;width:32px;z-index:10}sl-carousel::part(navigation-button):hover{scale:1.1}sl-carousel::part(navigation-button--previous){border:1px solid var(--border-color);border-left:none;border-radius:0 8px 8px 0;left:0}sl-carousel::part(navigation-button--next){border-right:none;border:1px solid var(--border-color);border-radius:8px 0 0 8px;right:0}sl-carousel:focus-within::part(navigation-button),sl-carousel:focus::part(navigation-button),sl-carousel:hover::part(navigation-button){opacity:1}gw-wishlist-button{bottom:0;position:absolute;right:4px;z-index:10}gw-wishlist-button[processing]::part(button){opacity:.5;pointer-events:none}gw-wishlist-button:active::part(button){transform:scale(.9)}gw-wishlist-button::part(button){background-color:transparent;border:none;color:var(--color-text);cursor:pointer;height:14px;padding:0;transition:.2s cubic-bezier(.39,.575,.565,1);width:14px}gw-wishlist-button::part(filled-icon),gw-wishlist-button::part(icon){display:block;left:0;position:absolute;top:0;transition:opacity .3s}gw-wishlist-button::part(filled-icon),gw-wishlist-button:hover::part(icon){opacity:0}gw-wishlist-button:hover::part(filled-icon),gw-wishlist-button[saved]::part(filled-icon){opacity:1}gw-integrations-loyalty-points{padding:0 var(--tab-panel-edge-padding)}.gw-loyalty-points__link{align-items:center;background-color:var(--background-color);border-radius:var(--border-radius);color:var(--text-color);display:flex;gap:8px;min-height:54px;padding:16px}.gw-loyalty-points__link:hover .gw-loyalty-points__link-label{transform:translateX(0)}.gw-loyalty-points__link-label{align-items:center;display:flex;gap:4px;margin-left:auto;transform:translateX(-5px);transition:transform .3s ease-in-out}.gw-loyalty-points__id-container{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:16px 20px}.gw-loyalty-points__copy-button{align-items:center;background-color:transparent;border:none;color:var(--color-text);cursor:pointer;display:flex;font-family:var(--body-font-family);gap:4px}.gw-loyalty-points__copy-button svg{height:12px;width:12px}}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as i,a as s}from"./assets/index-DI2a6rRk.js";customElements.define("gw-customer-accounts",class extends HTMLElement{constructor(){super(),this.shadow=this.attachShadow({mode:"open"});const t=document.getElementById("gw-customer-accounts-template");this.shadow.appendChild(t.content.cloneNode(!0)),t.remove(),this.drawer=this.shadowRoot.querySelector("sl-drawer"),this.tabGroup=this.shadowRoot.querySelector("sl-tab-group"),this.closeButtons=this.drawer.querySelectorAll("[data-main-drawer-close]")}connectedCallback(){this._checkCustomerStatus(),this._watchSavedItemsFromCart(),i.hasCustomer&&(this._saveTempWishlistProducts(),this._saveTempCartProducts(),this._saveTempRecentlyViewedProducts()),Promise.all([customElements.whenDefined("sl-drawer")]).then(()=>this.init())}init(){this.drawer.removeAttribute("hidden"),window.location.search.includes("my-account-open")&&!window.location.pathname.includes("/account")&&(window.history.replaceState({},document.title,window.location.pathname),window.location.hash="#my-account"),window.addEventListener("hashchange",()=>{this._handleHashChange(),this.reinitializeCarousels()}),this._handleHashChange(),this.closeButtons.forEach(t=>{t.addEventListener("click",()=>{this._closeDrawer()})}),this.drawer.addEventListener("sl-hide",t=>{t.target===this.drawer&&(window.location.hash="")}),this._updateAccountLinks(),this._handleInputElements(),this._addRecentlyViewedProducts(),i.hasCustomer&&this._updateRecentlyViewedCollection(),this.reinitializeCarousels(),this.shadowRoot.addEventListener("click",t=>{if(!t.target.closest("[data-drawer-id]"))return;const o=t.target.closest("[data-drawer-id]").getAttribute("data-drawer-id"),r=this.shadowRoot.querySelector(`#${o}`);r.hasAttribute("empty")||(r.open=!0,navigator.userAgent.indexOf("iPhone")>-1&&setTimeout(()=>{this.drawer.classList.add("inner-drawer-open")},150))}),this.shadowRoot.addEventListener("click",t=>{t.target.closest("[data-inner-drawer-close]")&&(t.target.closest("sl-drawer").open=!1,navigator.userAgent.indexOf("iPhone")>-1&&this.drawer.classList.remove("inner-drawer-open"))}),i.hasCustomer&&this.updateFavoriteItemsStorage(),!i.hasCustomer&&sessionStorage.getItem(s.STORAGE_KEYS.TEMP_PRODUCTS_UPDATED)!=="true"&&this._syncTempProducts()}reinitializeCarousels(){Promise.all([customElements.whenDefined("sl-carousel"),customElements.whenDefined("sl-carousel-item")]).then(()=>{setTimeout(()=>{this.shadowRoot.querySelectorAll("sl-carousel").forEach(t=>{t.initializeSlides()})},1e3)})}_updateAccountLinks(){const t=document.querySelectorAll("a[href]");Array.from(t).filter(r=>r.getAttribute("href").includes("/account")||r.getAttribute("href").startsWith("#status")).forEach(r=>{r.hasAttribute("data-ignore-account-link")||(r.getAttribute("href").includes("logout")?r.href="#my-profile":r.href="#my-account",Shopify.designMode&&r.addEventListener("click",()=>{this._openDrawer()}))})}_handleInputElements(){const t=e=>{!e.value&&!e.getAttribute("value")?e.classList.add("input--empty"):e.classList.remove("input--empty")},o=e=>{e.classList.add("input--focus")},r=e=>{e.classList.remove("input--focus")};this.shadowRoot.querySelectorAll("sl-input").forEach(e=>{e.addEventListener("sl-input",()=>t(e)),e.addEventListener("sl-focus",()=>o(e)),e.addEventListener("sl-blur",()=>r(e)),t(e)})}async _handleHashChange(){const t=window.location.hash;if(s.MAP[t]){if(await this._fetchComponents(),s.MAP[t].includes("##")){const[o,r]=s.MAP[t].split("##");this._renderTab(o),setTimeout(()=>{this._renderSubTab(r),this._openDrawer()},100);return}else this.shadowRoot.querySelectorAll("sl-drawer").forEach(o=>{o.open=!1});this._renderTab(),this._openDrawer()}}async _openDrawer(){this.drawer.open||this.drawer.show()}_closeDrawer(){this.drawer.open&&this.drawer.hide()}_fetchComponents(){const t="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.19.1/cdn/components/",r=["tab-group","tab-panel","tab","animation","skeleton","select","input","checkbox","carousel","carousel-item","popup","option","alert"].map(e=>new Promise((n,a)=>{if(customElements.get(`sl-${e}`)){n();return}const c=document.createElement("script");c.type="module",c.src=`${t}${e}/${e}.js`,c.onload=n,c.onerror=a,document.body.appendChild(c)}));return Promise.all(r)}async _addRecentlyViewedProducts(){if(!window.location.pathname.includes("/products/"))return;const{product:o}=i.componentData;if(!o||!(o!=null&&o.id))return;const{id:r}=o;if(i.hasCustomer)try{const e=await i.request(s.ENDPOINTS.VIEWED_PRODUCTS.ADD,{prodID:r});if(e.error)throw new Error(e.error);return e}catch(e){console.error(e)}else{if(JSON.parse(localStorage.getItem(s.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS)||"[]").some(n=>n.id===r))return;i.addToStorage({key:s.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS,values:[{...o}]})}}_updateRecentlyViewedCollection(){if(!window.location.pathname.includes("/collections/"))return;const{collection:o}=i.componentData;if(!o)return;const{url:r,title:e}=o,n=localStorage.getItem(s.STORAGE_KEYS.RECENTLY_VIEWED_COLLECTION),c=(JSON.parse(n)||[]).filter(l=>l.url!==r),d=[{url:r,title:e},...c];localStorage.setItem(s.STORAGE_KEYS.RECENTLY_VIEWED_COLLECTION,JSON.stringify(d))}_renderTab(t){Promise.all([(customElements.whenDefined("sl-tab-group"),customElements.whenDefined("sl-tab-panel"),customElements.whenDefined("sl-tab"))]).then(()=>{this.tabGroup.show(t||i.tabId)})}_renderSubTab(t){const o=s.DRAWER_IDS[t];if(!o)return;const r=this.shadowRoot.querySelector(o);r&&(r.open=!0,navigator.userAgent.indexOf("iPhone")>-1&&setTimeout(()=>{this.drawer.classList.add("inner-drawer-open")},150))}async updateContent(t=[]){const o=this.getAttribute("data-section-id"),r=await this._fetchContent(o);t.forEach(e=>{const n=this.shadow.querySelector(e);if(n){const c=r.querySelector("#gw-customer-accounts-template").content.querySelector(e);n.innerHTML=c.innerHTML}})}async _fetchContent(t){const r=await(await fetch(window.location.pathname+`?section_id=${t}`)).text();return new DOMParser().parseFromString(r,"text/html")}async updateFavoriteItemsStorage(t){const{removeIds:o,addIds:r}=t||{};let e=!1;if(r!=null&&r.length&&(i.addToStorage({key:s.STORAGE_KEYS.WISHLIST_PRODUCT_IDS,values:r,storageType:"session"}),e=!0),o!=null&&o.length&&(i.removeFromStorage({key:s.STORAGE_KEYS.WISHLIST_PRODUCT_IDS,values:o,storageType:"session"}),e=!0),e){this.dispatchEvent(new CustomEvent(s.CUSTOM_EVENTS.FAVORITES_STORAGE_UPDATED));return}try{const n=await i.request(s.ENDPOINTS.FAVORITES.GET_ALL_IDS,{customerID:i.customerId},"GET");if(n.error)throw new Error(n.error);sessionStorage.setItem(s.STORAGE_KEYS.WISHLIST_PRODUCT_IDS,JSON.stringify(n.products)),this.dispatchEvent(new CustomEvent(s.CUSTOM_EVENTS.FAVORITES_STORAGE_UPDATED))}catch(n){console.error("Error initializing wishlist:",n)}}async _checkCustomerStatus(){const t=i.customerToken,{id_sha256:o,email:r,tags:e,id:n}=i.componentData.customer;if(!t&&n)try{const a=await i.request(s.ENDPOINTS.AUTH.GET_TOKEN,{customerEmail:r,encode:o},"POST");if(a.error)throw new Error(a.error);a.token&&(localStorage.setItem(s.STORAGE_KEYS.TOKEN,a.token),localStorage.setItem(s.STORAGE_KEYS.EMAIL,r))}catch(a){console.error("Error checking customer status:",a)}if(e&&!e.includes("gw-customer"))try{const a=await i.request(s.ENDPOINTS.AUTH.CUSTOMER_LOGGED,{});if(a.error)throw new Error(a.error)}catch(a){console.error("Error checking customer status:",a)}}async _saveTempWishlistProducts(){var r;const t=JSON.parse(localStorage.getItem(s.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS));if(!(t!=null&&t.length))return;const o={products:t.map(e=>{const{id:n,variantId:a}=e;return{prodID:n,varID:a}})};try{const e=await i.request(s.ENDPOINTS.FAVORITES.ADD_BULK,o);if(e.error)throw new Error(e.error);localStorage.removeItem(s.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS),(r=e.products)!=null&&r.length&&(sessionStorage.setItem(s.STORAGE_KEYS.WISHLIST_PRODUCT_IDS,JSON.stringify(e.products)),this.dispatchEvent(new CustomEvent(s.CUSTOM_EVENTS.FAVORITES_STORAGE_UPDATED))),i.dashboard.loadFavoriteItems()}catch(e){console.error("Error saving temp wishlist products:",e)}}async _saveTempCartProducts(){const t=JSON.parse(localStorage.getItem(s.STORAGE_KEYS.TEMP_CART_PRODUCTS));if(!(t!=null&&t.length))return;const o={products:t.map(r=>{const{id:e,variantId:n}=r;return{prodID:e,varID:n}})};try{const r=await i.request(s.ENDPOINTS.CART.ADD_BULK,o);if(r.error)throw new Error(r.error);localStorage.removeItem(s.STORAGE_KEYS.TEMP_CART_PRODUCTS),i.dashboard.loadSavedCartItems()}catch(r){console.error("Error saving temp cart products:",r)}}async _saveTempRecentlyViewedProducts(){const t=JSON.parse(localStorage.getItem(s.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS));if(!(t!=null&&t.length))return;const o={products:t.map(r=>{const{id:e}=r;return{prodID:e}})};try{const r=await i.request(s.ENDPOINTS.VIEWED_PRODUCTS.ADD_BULK,o);if(r.error)throw new Error(r.error);localStorage.removeItem(s.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS),console.log("Saved temp recently viewed products:",r),i.dashboard.loadRecentlyViewedItems()}catch(r){console.error("Error saving temp recently viewed products:",r)}}async _watchSavedItemsFromCart(){this.addEventListener(s.CUSTOM_EVENTS.SAVED_ITEMS_FROM_CART,async t=>{i.hasCustomer?await this._handleAuthedCartEvent(t):this._handleGuestCartEvent(t)})}async _handleGuestCartEvent(t){const o=t.detail.extra,r=o.handle,e={};try{const n=await fetch(`/products/${r}.js`);if(!n.ok)throw new Error("Product not found");const a=await n.json();e.variant_id=o.variant_id,e.featuredImage=o.featured_image,e.title=o.title,e.variants={},e.variants.nodes=a.variants,e.id=a.id,e.tags=a.tags,e.handle=a.handle;const d=(JSON.parse(localStorage.getItem(s.STORAGE_KEYS.TEMP_CART_PRODUCTS))||[]).filter(u=>u.id!==a.id),l=[e,...d];localStorage.setItem(s.STORAGE_KEYS.TEMP_CART_PRODUCTS,JSON.stringify(l)),i.dashboard.loadSavedCartItems()}catch(n){console.error("Error adding product to cart:",n)}}async _handleAuthedCartEvent(t){try{const{productId:o,variantId:r}=t.detail||{};if(!o||!r)return;const e=await i.request(s.ENDPOINTS.CART.ADD,{prodID:o,varID:r});if(e.error)throw new Error(e.error);i.dashboard.loadSavedCartItems()}catch(o){console.error("Error adding product to cart:",o)}}async _syncTempProducts(){const t=[s.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS,s.STORAGE_KEYS.TEMP_CART_PRODUCTS,s.STORAGE_KEYS.TEMP_RECENTLY_VIEWED_ITEMS],o=t.flatMap(a=>(JSON.parse(localStorage.getItem(a))||[]).filter(Boolean)),r=[...new Map(o.map(a=>[a.id,a])).values()];console.log("Unique products:",r);const n=(await Promise.all(r.map(async({id:a,handle:c})=>{try{const d=await fetch(`/products/${c}.js`);return d.ok?await d.json():null}catch{return null}}))).reduce((a,c)=>(c&&c.available&&(a[c.id]=c),a),{});t.forEach(a=>{const d=(JSON.parse(localStorage.getItem(a))||[]).map(l=>{if(!l)return null;const u=n[l.id];return u?(l.variants.nodes=u.variants,l):null}).filter(Boolean);localStorage.setItem(a,JSON.stringify(d))}),sessionStorage.setItem(s.STORAGE_KEYS.TEMP_PRODUCTS_UPDATED,"true")}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as o,a as s}from"./assets/index-DI2a6rRk.js";customElements.define("gw-malomo-button",class extends HTMLElement{constructor(){super(),this.trackingPageUrl=this.getAttribute("tracking-page-url"),this.orderId=this.getAttribute("order-id")}connectedCallback(){this._initMalomoButton()}async _initMalomoButton(){var r;const t=await o.request(s.ENDPOINTS.MISC.GET_MALOMO_ORDER,{orderID:this.orderId});if(t.error){console.error(t.error);return}if((r=t.order)!=null&&r.url){const e=this.querySelector("a");e.href=t.order.url}else this.remove()}});
|
package/dist/orders.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as c}from"./assets/tab-B7UDegaP.js";import"./assets/index-DI2a6rRk.js";customElements.define("gw-customer-accounts-orders",class extends c{constructor(){super()}connectedCallback(){super.connectedCallback()}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as a,a as o}from"./assets/index-DI2a6rRk.js";customElements.define("gw-preferences-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form")}connectedCallback(){this._handleFormSubmit()}async _handleFormSubmit(){await Promise.all([customElements.whenDefined("sl-input")]).then(()=>{this.form.addEventListener("sl-invalid",e=>{e.preventDefault(),this._clearErrorMessages(),this.form.querySelectorAll("sl-input").forEach(r=>{if(r.hasAttribute("data-invalid")){const t=document.createElement("div");t.slot="help-text",t.classList.add("gw-error-message"),t.textContent=r.validationMessage,r.appendChild(t)}})},{capture:!0}),this.form.addEventListener("submit",e=>{e.preventDefault();const r=new FormData(this.form),t=Object.fromEntries(r.entries());this._submitPreferencesForm(t)})})}async _submitPreferencesForm(e){try{this._clearErrorMessages(),this.form.querySelector("[data-loader]").hidden=!1;let r=await a.request(o.ENDPOINTS.CUSTOMER.UPDATE,e);if(r.error)throw new Error(r.error);this.form.closest("sl-drawer").hide(),a.updateAjaxContent(["[data-main-drawer-label]","[data-my-preference-fields]"])}catch(r){this._handleErrors(r)}finally{this.form.querySelector("[data-loader]").hidden=!0}}_clearErrorMessages(){this.form.querySelectorAll(".gw-error-message").forEach(e=>e.remove())}_handleErrors(e){e.message.includes("valid phone number")&&this._displayErrorMessage('[name="phone"]',e.message)}_displayErrorMessage(e,r){let t=e;typeof e=="string"&&(t=this.form.querySelector(e));const s=document.createElement("div");s.slot="help-text",s.classList.add("gw-error-message"),s.textContent=r,t.appendChild(s),t.focus()}});
|
package/dist/price.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var p=Object.defineProperty;var d=(o,s,e)=>s in o?p(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e;var a=(o,s,e)=>d(o,typeof s!="symbol"?s+"":s,e);class l extends HTMLElement{constructor(){super();a(this,"SECTION_ID","gw-customer-accounts-price");this.productHandle=this.getAttribute("product-handle"),this.productVariant=this.getAttribute("product-variant"),this.activeCurrency=Shopify.currency.active,this.sessionKey="priceDetails-"+this.activeCurrency+"-"+this.productHandle}async connectedCallback(){const e=await this.getPriceDetails();this.render(e)}render(e){const t=e==null?void 0:e.price,n=e==null?void 0:e.compareAtPrice,r=document.createElement("span");r.innerHTML=t,t&&n&&r.classList.add("gw-product-card__price--sale");const i=document.createElement("span");i.classList.add("gw-product-card__price-compare"),i.innerHTML=n,this.appendChild(i),this.appendChild(r)}async fetchPriceDetails(e,t){var n;try{if(!e)throw new Error("Product handle is required");const r=((n=Shopify.routes)==null?void 0:n.root)||"/",i=new URLSearchParams;t&&i.append("variant",t),i.append("sections",this.SECTION_ID);const c=await fetch(r+"products/"+e+"?"+i.toString());if(!c.ok)throw new Error("Network response was not ok");const h=await c.json();return this.parsePrice(h)}catch(r){console.error("There has been a problem with your fetch operation:",r)}}async getPriceDetails(){const e=this.getPriceDetailsFromSession();if(e)return e;const t=await this.fetchPriceDetails(this.productHandle,this.productVariant);return this.savePriceDetailsToSession(t),t}savePriceDetailsToSession(e){sessionStorage.setItem(this.sessionKey,JSON.stringify(e))}getPriceDetailsFromSession(){const e=sessionStorage.getItem(this.sessionKey);return e?e==="undefined"?(sessionStorage.removeItem(this.sessionKey),null):JSON.parse(e):null}parsePrice(e){const n=new DOMParser().parseFromString(e[this.SECTION_ID],"text/html").querySelector("#price-json");return JSON.parse(n.textContent)}}customElements.define("gw-price",l);
|
package/dist/profile.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as t}from"./assets/index-DI2a6rRk.js";import{G as c}from"./assets/tab-B7UDegaP.js";customElements.define("gw-customer-accounts-profile",class extends c{constructor(){super()}connectedCallback(){var e;super.connectedCallback(),(e=this.querySelector("[data-logout-button]"))==null||e.addEventListener("click",function(o){o.preventDefault(),this.querySelector("[data-loader]").hidden=!1,localStorage.removeItem(t.STORAGE_KEYS.TOKEN),localStorage.removeItem(t.STORAGE_KEYS.EMAIL),document.dispatchEvent(new CustomEvent("gw-customer-accounts:logout")),window.location.href="/account/logout"})}});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{G as a,a as d}from"./assets/index-DI2a6rRk.js";customElements.define("gw-quick-add-to-cart-form",class extends HTMLElement{constructor(){super(),this.form=this.querySelector("form"),this.productId=this.getAttribute("product-id")}connectedCallback(){this.form.addEventListener("submit",async e=>{e.preventDefault(),this._handleFormSubmit()}),this.addEventListener("click",e=>{e.target.matches("[data-wishlist-remove]")&&this.closest(".gw-product-card").querySelector("gw-wishlist-button").dispatchEvent(new Event("click")),e.target.matches("[data-saved-from-cart-remove]")&&this._handleRemoveFromSavedItems()})}async _handleFormSubmit(){this.form.querySelector("[data-loader]").hidden=!1;const r={method:"POST",body:new FormData(this.form),headers:{Accept:"application/javascript"}};try{const t=await fetch(routes.cart_add_url,r);if(t.error)throw new Error(t.error);const s=[await t.json()];document.dispatchEvent(new CustomEvent("CART_UPDATED",{detail:{added:s}})),a.notify(`
|
|
2
|
+
<span>Product added to cart</span>
|
|
3
|
+
<a href="/cart" class="gw-notification__link">View</a>
|
|
4
|
+
`)}catch(t){console.error(t)}finally{if(this.form.querySelector("[data-loader]").hidden=!0,!this.closest("[data-favorites-drawer-container]"))return;const t=this.form.querySelector('[name="productId"]').value,o=this.form.querySelector('[name="id"]').value;if(!t||!o)return;const s=new CustomEvent(d.CUSTOM_EVENTS.SAVED_ITEMS_FROM_CART,{detail:{productId:t,variantId:o,target:this}});a.app.dispatchEvent(s)}}async _handleRemoveFromSavedItems(){if(!a.hasCustomer){const r=this.form.querySelector('[name="productId"]').value,o=(JSON.parse(localStorage.getItem(d.STORAGE_KEYS.TEMP_CART_PRODUCTS))||[]).filter(s=>s.id!=r);localStorage.setItem(d.STORAGE_KEYS.TEMP_CART_PRODUCTS,JSON.stringify(o)),a.dashboard.loadSavedCartItems();return}this.form.closest(".gw-product-card").classList.add("gw-product-card--removing");const e={prodID:this.form.querySelector('[name="productId"]').value};try{const r=await a.request(d.ENDPOINTS.CART.REMOVE,e);if(r.error)throw new Error(r.error);await a.dashboard.loadSavedCartItems()}catch(r){console.error(r)}}});
|
package/dist/sign-in.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as f,a}from"./assets/index-DI2a6rRk.js";customElements.define("gw-customer-accounts-sign-in",class extends HTMLElement{constructor(){super(),this.signInType=this.getAttribute("type"),this.signInBlock=this.querySelector("[data-sign-in-block]"),this.signInType!=="password"&&(this.verifyCodeBlock=this.querySelector("[data-verify-code-block]"),this.tryAnotherEmailButton=this.querySelector("[data-try-another-email]"),this.sendAnotherCodeButton=this.querySelector("[data-send-another-code]"),this.inputtedEmail="",this.inputtedCode="")}connectedCallback(){if(this.signInType==="password"){const t=this.querySelector("[data-sign-in-button]"),i=t.getAttribute("href");t.addEventListener("click",n=>{n.preventDefault();let e=i;e.includes("?")&&(e+="&return_url="+window.location.pathname+"?my-account-open=true"),window.location.href=e})}else this._handleEmailSubmitForm(),this._handleInputCodeGroup(),this.tryAnotherEmailButton.addEventListener("click",()=>{this.signInBlock.removeAttribute("hidden"),this.verifyCodeBlock.setAttribute("hidden",""),this.signInBlock.querySelector("sl-input").value="",this.signInBlock.querySelector("sl-input").focus(),this.inputtedEmail="",this.inputtedCode=""}),this.sendAnotherCodeButton.addEventListener("click",()=>{this._submitEmailForm(this.querySelector("[data-sign-in-form]")),f.notify("Another code has been sent to your email.")})}async _handleEmailSubmitForm(){await Promise.all([customElements.whenDefined("sl-input")]).then(()=>{const t=this.querySelector("[data-sign-in-form]"),i=this.querySelector("[data-email-error]");t.addEventListener("sl-invalid",n=>{n.preventDefault(),i.textContent=n.target.validationMessage,i.hidden=!1,n.target.focus()},{capture:!0}),t.addEventListener("submit",n=>{n.preventDefault(),i.hidden=!0,i.textContent="",this._submitEmailForm(t).then(()=>{const e=this.verifyCodeBlock.querySelector(".code-input");e&&e.focus()})})})}async _submitEmailForm(t){const i=t.querySelector('button[type="submit"]');i.disabled=!0,i.querySelector("[data-loader]").hidden=!1;const n=new FormData(t);this.inputtedEmail=n.get("email");try{const e=await this._request({customerEmail:this.inputtedEmail},a.ENDPOINTS.AUTH.SIGN_IN);if(e.error){console.error(e.error);return}const r=this.querySelector("[data-code-sent-to]");return r&&(r.textContent=this.inputtedEmail),this.signInBlock.setAttribute("hidden",""),this.verifyCodeBlock.removeAttribute("hidden"),e}catch(e){console.error(e),alert("An error occurred. Please try again later.")}finally{i.disabled=!1,i.querySelector("[data-loader]").hidden=!0}}async _submitVerificationCode(){var l,c;const t=this.querySelector(".gw-verify-code__actions"),i=t.querySelectorAll("button, a"),n=t.querySelector("[data-verify-error]"),e=t.querySelector("[data-loader]"),r=this.querySelectorAll("input.code-input");try{r.forEach(d=>{d.disabled=!0}),i.forEach(d=>{d.disabled=!0,d.hidden=!0}),n.hidden=!0,e.hidden=!1;const o=await this._request({customerEmail:this.inputtedEmail,code:this.inputtedCode},a.ENDPOINTS.AUTH.VERIFY_CODE);if(!o.url)throw new Error("Verification failed");localStorage.setItem(a.STORAGE_KEYS.TOKEN,o.token),localStorage.setItem(a.STORAGE_KEYS.EMAIL,this.inputtedEmail);const s=await fetch(o.url);if(s.error)throw new Error(s.error);const y=await(await fetch(window.location.href)).text(),u=new DOMParser().parseFromString(y,"text/html"),h=(c=(l=u.querySelector("#gw-customer-accounts-template").content)==null?void 0:l.querySelector("gw-integrations-loyalty-points"))==null?void 0:c.getAttribute("page-url");document.documentElement.innerHTML=u.documentElement.innerHTML,document.dispatchEvent(new CustomEvent("gw-customer-accounts:login"));const m=sessionStorage.getItem(a.STORAGE_KEYS.REDIRECT_URL);if(m&&(sessionStorage.removeItem(a.STORAGE_KEYS.REDIRECT_URL),window.location.href=m),!h)return;window.location.pathname.includes(h)&&window.location.reload()}catch(o){console.error(o),setTimeout(()=>{r[r.length-1].focus()})}finally{r.forEach(o=>{o.disabled=!1}),i.forEach(o=>{o.disabled=!1,o.hidden=!1}),n.hidden=!1,e.hidden=!0}}async _request(t,i,n="POST"){return await(await fetch(f.baseURL+i,{method:n,body:JSON.stringify(t),mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}_handleInputCodeGroup(){const t=[...this.querySelectorAll("input.code-input")];t.forEach((i,n)=>{i.addEventListener("keydown",e=>{(e.ctrlKey||e.metaKey)&&e.keyCode===86||(e.keyCode!==8&&(e.keyCode<48||e.keyCode>57)&&e.preventDefault(),e.keyCode===8&&e.target.value===""&&t[Math.max(0,n-1)].focus())}),i.addEventListener("input",e=>{const[r,...l]=e.target.value;e.target.value=r??"";const c=n===t.length-1,o=r!==void 0;o&&!c&&(t[n+1].focus(),t[n+1].value=l.join(""),t[n+1].dispatchEvent(new Event("input"))),o&&c&&t.every(s=>s.value)&&(this.inputtedCode=t.map(s=>s.value).join(""),this._submitVerificationCode())})})}});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{G as s,a as i}from"./assets/index-DI2a6rRk.js";customElements.whenDefined("gw-customer-accounts").then(()=>{customElements.define("gw-wishlist-button",class extends HTMLElement{constructor(){var r,o;super(),this.shadow=this.attachShadow({mode:"open"}),this.isIconOnly=this.hasAttribute("icon-only");const t=this.querySelector('template[name="icon"]');this.iconEl=this._createIcon(t,"icon");const e=this.querySelector('template[name="filled-icon"]');this.filledIconEl=this._createIcon(e,"filled-icon"),this.hasAttribute("icon-only")?this.shadowRoot.innerHTML=`
|
|
2
|
+
<button class="wishlist-button wishlist-button--icon-only" part="button">
|
|
3
|
+
${this.iconEl}
|
|
4
|
+
${this.filledIconEl}
|
|
5
|
+
</button>
|
|
6
|
+
`:this.shadowRoot.innerHTML=`
|
|
7
|
+
<button class="wishlist-button" part="button">
|
|
8
|
+
<span class="icon-container" part="icon-container">
|
|
9
|
+
${this.iconEl}
|
|
10
|
+
${this.filledIconEl}
|
|
11
|
+
</span>
|
|
12
|
+
<span class="" data-button-label></span>
|
|
13
|
+
<span class="loader" data-loader></span>
|
|
14
|
+
</button>
|
|
15
|
+
`,this.productId=this.getAttribute("product-id"),console.log("GWUtils.componentData",s.componentData),this.labels={inactive:((r=s.componentData.wishlist)==null?void 0:r.addToWishlistLabel)||"Add to wishlist",active:((o=s.componentData.wishlist)==null?void 0:o.addedToWishlistLabel)||"Added to wishlist"},this.button=this.shadowRoot.querySelector("button"),this.buttonLabel=this.shadowRoot.querySelector("[data-button-label]"),this.loader=this.shadowRoot.querySelector("[data-loader]"),this.buttonIcon=this.shadowRoot.querySelectorAll("[data-button-icon]")}set variantId(t){this.setAttribute("variant-id",t)}get variantId(){return this.getAttribute("variant-id")}connectedCallback(){this.addEventListener("click",t=>this._handleFavoriteButtonClick(t)),this._activateButton(this._isProductInFavorites()),document.addEventListener("variant:change",({detail:{productId:t,variant:e}})=>{t!==this.productId||!e||(this.variantId=e.id)}),s.app.addEventListener(i.CUSTOM_EVENTS.FAVORITES_STORAGE_UPDATED,()=>{this._activateButton(this._isProductInFavorites())})}_createIcon(t,e){if(!t)return"";const o=t.content.cloneNode(!0).querySelector("svg");return o.setAttribute("part",e),o.setAttribute("data-button-icon",""),o.setAttribute("hidden",""),o.outerHTML}_getVariantId(){const e=new URLSearchParams(window.location.search).get("variant");return e||this.variantId}async _handleFavoriteButtonClick(t){if(t.preventDefault(),t.stopPropagation(),this.button.disabled=!0,this.button.setAttribute("aria-disabled","true"),this.setAttribute("processing",""),this.loader&&(this.loader.hidden=!1),this.hasAttribute("saved")){this._activateButton(!1);try{const e=await this._removeFromFavorites();if(e.error)throw new Error(e.error);const r=e.products;if(!r)throw new Error("Product not found");s.dashboard._removeFavoriteItem(s.parseVariantId(r.id)),s.app.updateFavoriteItemsStorage({removeIds:[s.parseVariantId(r.id)]});const o=s.customerFirstName?`${s.customerFirstName}'s`:"Your";s.notify(`
|
|
16
|
+
<span>Product removed from ${o} favorites</span>
|
|
17
|
+
<a href="#my-favorites" class="gw-notification__link">View</a>
|
|
18
|
+
`)}catch(e){console.error(e),this._activateButton(!0),s.notify("An error occurred. Please try again later.")}}else{this._activateButton(!0);try{const e=await this._addToFavorites();if(e.error)throw new Error(e.error);const r=e.products;if(!r)throw new Error("Product not found");s.app.updateFavoriteItemsStorage({addIds:[s.parseVariantId(r.id)]}),s.dashboard._renderSingleFavoriteItem(r);const o=s.customerFirstName?`${s.customerFirstName}'s`:"Your";s.notify(`
|
|
19
|
+
<span>Added to ${o} favorites</span>
|
|
20
|
+
<a href="#my-favorites" class="gw-notification__link">View</a>
|
|
21
|
+
`),document.dispatchEvent(new CustomEvent("wishlist:add",{detail:{product:{id:this.productData.id,title:this.productData.title},variant:this.currentVariant}}))}catch(e){console.error(e),this._activateButton(!1),s.notify("An error occurred. Please try again later.")}}this.loader&&(this.loader.hidden=!0),this.button.disabled=!1,this.button.removeAttribute("aria-disabled"),this.removeAttribute("Processing")}get productData(){if(!this._productData){const t=this.querySelector("[data-product-data]");this._productData=JSON.parse(t.textContent)}return this._productData}get productVariants(){var t;return((t=this.productData.variants)==null?void 0:t.nodes)||[]}get currentVariant(){return this.productVariants.find(t=>t.id==this.variantId)}async _addToFavorites(){if(!s.hasCustomer){const e=this.querySelector("[data-product-data]"),r=JSON.parse(e.textContent),o=localStorage.getItem(i.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS)||"[]",a=JSON.parse(o).filter(d=>d.id!==r.id);return a.push(r),localStorage.setItem(i.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS,JSON.stringify(a)),{success:!0,products:r}}const t=await s.request(i.ENDPOINTS.FAVORITES.ADD,{prodID:this.productId,varID:this.variantId||this._getVariantId()});if(t.error)throw new Error(t.error);return t}async _removeFromFavorites(){if(!s.hasCustomer){const e=this.querySelector("[data-product-data]"),r=JSON.parse(e.textContent),o=localStorage.getItem(i.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS)||"[]",a=JSON.parse(o).filter(d=>d.id!==r.id);return localStorage.setItem(i.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS,JSON.stringify(a)),{success:!0,products:r}}const t=await s.request(i.ENDPOINTS.FAVORITES.REMOVE,{prodID:this.productId});if(t.error)throw new Error(t.error);return t}_activateButton(t){this.buttonIcon.length&&this.buttonIcon.forEach(e=>e.removeAttribute("hidden")),this.loader&&this.loader.setAttribute("hidden",""),t?(this.setAttribute("saved",""),this.button.setAttribute("aria-label",this.labels.active),this.buttonLabel&&(this.buttonLabel.textContent=this.labels.active)):(this.removeAttribute("saved"),this.button.setAttribute("aria-label",this.labels.inactive),this.buttonLabel&&(this.buttonLabel.textContent=this.labels.inactive))}_isProductInFavorites(){if(!s.hasCustomer){const r=localStorage.getItem(i.STORAGE_KEYS.TEMP_WISHLIST_PRODUCTS);return(r?JSON.parse(r):[]).some(n=>n.id===this.productId)}const t=sessionStorage.getItem(i.STORAGE_KEYS.WISHLIST_PRODUCT_IDS);return(t?JSON.parse(t):[]).includes(this.productId)}})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gw-customer-accounts",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "gw-customer-accounts.js",
|
|
6
6
|
"type": "module",
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
9
9
|
"build:js": "vite build",
|
|
10
10
|
"build:css": "postcss src/styles/main.css -o dist/main.css",
|
|
11
|
+
"build": "pnpm run build:js && pnpm run build:css",
|
|
11
12
|
"format": "prettier --write .",
|
|
12
13
|
"build:watch": "vite build --watch",
|
|
13
14
|
"preview": "vite preview --port 3000",
|
|
14
|
-
"dev": "concurrently \"
|
|
15
|
+
"dev": "concurrently \"pnpm run build:watch\" \"pnpm run preview\""
|
|
15
16
|
},
|
|
16
17
|
"repository": {
|
|
17
18
|
"type": "git",
|
|
@@ -727,10 +727,11 @@ customElements.define(
|
|
|
727
727
|
const quickAddForm = element.querySelector(
|
|
728
728
|
'[data-quick-add-to-cart-form]'
|
|
729
729
|
);
|
|
730
|
-
|
|
731
|
-
'[data-product-price-compare]'
|
|
732
|
-
);
|
|
730
|
+
|
|
733
731
|
const priceEl = element.querySelector('[data-product-price]');
|
|
732
|
+
priceEl.setAttribute('product-handle', product.handle);
|
|
733
|
+
if (product.variant_id)
|
|
734
|
+
priceEl.setAttribute('product-variant', product.variant_id);
|
|
734
735
|
|
|
735
736
|
element
|
|
736
737
|
.querySelector('.gw-product-card')
|
|
@@ -766,9 +767,6 @@ customElements.define(
|
|
|
766
767
|
quickAddForm.prepend(productIdHiddenInput);
|
|
767
768
|
}
|
|
768
769
|
|
|
769
|
-
// Set product prices
|
|
770
|
-
this._updatePriceDisplay(product, compareAtPriceEl, priceEl);
|
|
771
|
-
|
|
772
770
|
// Set remove button action if applicable
|
|
773
771
|
if (removeButtonAction) {
|
|
774
772
|
const removeButton = element.querySelector('[data-remove-button]');
|
|
@@ -942,9 +940,6 @@ customElements.define(
|
|
|
942
940
|
const productTitle = element.querySelector('[data-product-title]');
|
|
943
941
|
const productLink = element.querySelector('[data-product-link]');
|
|
944
942
|
const productImage = element.querySelector('[data-product-image]');
|
|
945
|
-
const compareAtPriceEl = element.querySelector(
|
|
946
|
-
'[data-product-price-compare]'
|
|
947
|
-
);
|
|
948
943
|
const priceEl = element.querySelector('[data-product-price]');
|
|
949
944
|
|
|
950
945
|
if (productTitle) productTitle.textContent = product.title;
|
|
@@ -957,7 +952,9 @@ customElements.define(
|
|
|
957
952
|
}
|
|
958
953
|
}
|
|
959
954
|
|
|
960
|
-
|
|
955
|
+
priceEl.setAttribute('product-handle', product.handle);
|
|
956
|
+
if (product.variant_id)
|
|
957
|
+
priceEl.setAttribute('product-variant', product.variant_id);
|
|
961
958
|
|
|
962
959
|
// If there is a gw-wishlist-button element, populate it with the product ID
|
|
963
960
|
const wishlistButton = element.querySelector('gw-wishlist-button');
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
class GWPrice extends HTMLElement {
|
|
2
|
+
SECTION_ID = 'gw-customer-accounts-price';
|
|
3
|
+
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
this.productHandle = this.getAttribute('product-handle');
|
|
7
|
+
this.productVariant = this.getAttribute('product-variant');
|
|
8
|
+
|
|
9
|
+
this.activeCurrency = Shopify.currency.active;
|
|
10
|
+
this.sessionKey =
|
|
11
|
+
'priceDetails-' + this.activeCurrency + '-' + this.productHandle;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async connectedCallback() {
|
|
15
|
+
const priceDetails = await this.getPriceDetails();
|
|
16
|
+
this.render(priceDetails);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Render the price and compare at price
|
|
21
|
+
* @param {Object} priceDetails
|
|
22
|
+
* @param {String} priceDetails.price
|
|
23
|
+
* @param {String} priceDetails.compareAtPrice
|
|
24
|
+
*/
|
|
25
|
+
render(priceDetails) {
|
|
26
|
+
const price = priceDetails?.price;
|
|
27
|
+
const compareAtPrice = priceDetails?.compareAtPrice;
|
|
28
|
+
|
|
29
|
+
const priceElement = document.createElement('span');
|
|
30
|
+
priceElement.innerHTML = price;
|
|
31
|
+
if (price && compareAtPrice)
|
|
32
|
+
priceElement.classList.add('gw-product-card__price--sale');
|
|
33
|
+
|
|
34
|
+
const compareAtPriceElement = document.createElement('span');
|
|
35
|
+
compareAtPriceElement.classList.add('gw-product-card__price-compare');
|
|
36
|
+
compareAtPriceElement.innerHTML = compareAtPrice;
|
|
37
|
+
|
|
38
|
+
this.appendChild(compareAtPriceElement);
|
|
39
|
+
this.appendChild(priceElement);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Fetch the price from the shopify section rendering api
|
|
44
|
+
* @param {String} productHandle
|
|
45
|
+
* @returns {Object} priceDetails
|
|
46
|
+
* @returns {String} price
|
|
47
|
+
* @returns {String} compareAtPrice
|
|
48
|
+
*/
|
|
49
|
+
async fetchPriceDetails(productHandle, productVariant) {
|
|
50
|
+
try {
|
|
51
|
+
if (!productHandle) {
|
|
52
|
+
throw new Error('Product handle is required');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const root = Shopify.routes?.root || '/';
|
|
56
|
+
|
|
57
|
+
const params = new URLSearchParams();
|
|
58
|
+
if (productVariant) params.append('variant', productVariant);
|
|
59
|
+
params.append('sections', this.SECTION_ID);
|
|
60
|
+
|
|
61
|
+
const response = await fetch(
|
|
62
|
+
root + 'products/' + productHandle + '?' + params.toString()
|
|
63
|
+
);
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
throw new Error('Network response was not ok');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const data = await response.json();
|
|
69
|
+
const priceDetails = this.parsePrice(data);
|
|
70
|
+
return priceDetails;
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error(
|
|
73
|
+
'There has been a problem with your fetch operation:',
|
|
74
|
+
error
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async getPriceDetails() {
|
|
80
|
+
// Check if the price details are saved in the session
|
|
81
|
+
const priceDetailsFromSession = this.getPriceDetailsFromSession();
|
|
82
|
+
if (priceDetailsFromSession) return priceDetailsFromSession;
|
|
83
|
+
|
|
84
|
+
// Fetch the price details from the shopify
|
|
85
|
+
const priceDetails = await this.fetchPriceDetails(
|
|
86
|
+
this.productHandle,
|
|
87
|
+
this.productVariant
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
this.savePriceDetailsToSession(priceDetails);
|
|
91
|
+
return priceDetails;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
savePriceDetailsToSession(priceDetails) {
|
|
95
|
+
sessionStorage.setItem(this.sessionKey, JSON.stringify(priceDetails));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
getPriceDetailsFromSession() {
|
|
99
|
+
const priceDetails = sessionStorage.getItem(this.sessionKey);
|
|
100
|
+
if (!priceDetails) {
|
|
101
|
+
return null;
|
|
102
|
+
} else {
|
|
103
|
+
if (priceDetails === 'undefined') {
|
|
104
|
+
sessionStorage.removeItem(this.sessionKey);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return JSON.parse(priceDetails);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Parse the price from the response
|
|
114
|
+
* @param {Object} response
|
|
115
|
+
* @returns {Object}
|
|
116
|
+
* @returns {String} price
|
|
117
|
+
* @returns {String} compareAtPrice
|
|
118
|
+
*/
|
|
119
|
+
parsePrice(response) {
|
|
120
|
+
const html = new DOMParser().parseFromString(
|
|
121
|
+
response[this.SECTION_ID],
|
|
122
|
+
'text/html'
|
|
123
|
+
);
|
|
124
|
+
const jsonElement = html.querySelector('#price-json');
|
|
125
|
+
const json = JSON.parse(jsonElement.textContent);
|
|
126
|
+
return json;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
customElements.define('gw-price', GWPrice);
|
|
@@ -20,6 +20,10 @@ customElements.define(
|
|
|
20
20
|
localStorage.removeItem(GWCA.STORAGE_KEYS.TOKEN);
|
|
21
21
|
localStorage.removeItem(GWCA.STORAGE_KEYS.EMAIL);
|
|
22
22
|
|
|
23
|
+
document.dispatchEvent(
|
|
24
|
+
new CustomEvent('gw-customer-accounts:logout')
|
|
25
|
+
);
|
|
26
|
+
|
|
23
27
|
window.location.href = '/account/logout';
|
|
24
28
|
}
|
|
25
29
|
);
|
|
@@ -54,6 +54,12 @@ customElements.define(
|
|
|
54
54
|
throw new Error(response.error);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
const added = [data];
|
|
59
|
+
document.dispatchEvent(
|
|
60
|
+
new CustomEvent('CART_UPDATED', { detail: { added } })
|
|
61
|
+
);
|
|
62
|
+
|
|
57
63
|
GWUtils.notify(`
|
|
58
64
|
<span>Product added to cart</span>
|
|
59
65
|
<a href="/cart" class="gw-notification__link">View</a>
|