1/*! @version 1.1.8 */ 2(window.webpackJsonp=window.webpackJsonp||[]).push([[11,79],{"9ZpK":function(e,n,t){"use strict" 3t.d(n,"a",function(){return l}),t.d(n,"b",function(){return u}) 4var a,r,o=t("VkAN"),i=t.n(o),s=t("VX74"),c=t("s0i0"),l=Object(s.gql)(a||(a=i()(["\n query GetCartDetails($cartId: String!) {\n cart(cart_id: $cartId) {\n id\n is_virtual\n newsletter_subscribe\n sms_subscribe\n ...CartPageFragment\n }\n }\n ","\n"])),c.a),u=Object(s.gql)(r||(r=i()(["\n query getKlarnaKco($cartId: String!) {\n getKlarnaKcoHtml(cart_id: $cartId) {\n html\n pwa_url\n }\n }\n"])))},Def3:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".cartItem-root-3GI {\n display: grid;\n grid-template-columns: 1fr 5fr;\n gap: var(--space-md);\n padding: var(--space-md) 0;\n list-style: none;\n}\n\n.cartItem-root-3GI:not(:last-child) {\n border-bottom: 1px solid var(--global-color-background-dark);\n}\n\n.cartItem-rootUpdating-3s6 {\n opacity: 0.6;\n pointer-events: none;\n}\n\n/* ââ media ââ */\n\n.cartItem-media-47X {\n width: 100%;\n}\n\n.cartItem-imageLink-3FI {\n display: block;\n}\n\n/* This is the same element venia gives `position: relative`, and the real\n <img> inside it is `position: absolute`. Flex centring never applied to it â\n the only in-flow child is the transparent placeholder, which `.image` below\n already stretches to the full width. Just clip the corners. */\n.cartItem-imageRoot-1ef {\n border-radius: 12px;\n overflow: hidden;\n}\n\n/* Both the real <img> and the placeholder wear this class. The placeholder is\n in flow with `height: auto` resolved from its width/height attributes, so it\n still sets the box; the real one is absolute, and `height: 100%` makes it\n fill that same box instead of falling back to its own intrinsic ratio. The\n media host serves originals untouched â 400x142 for one frame, near-square\n for another â so `contain` is what keeps them undistorted. */\n.cartItem-image-29v {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* ââ heading row ââ */\n\n.cartItem-body-1xn {\n display: flex;\n flex-direction: column;\n gap: var(--space-component-tight);\n min-width: 0;\n}\n\n.cartItem-heading-1HL {\n display: grid;\n grid-template-columns: 1fr auto auto;\n align-items: center;\n gap: var(--space-md);\n}\n\n.cartItem-identity-3Qj {\n display: flex;\n flex-direction: column;\n gap: 0.45rem;\n min-width: 0;\n}\n\n.cartItem-name-1VM {\n font-family: var(--font-secondary);\n font-size: var(--font-step-2);\n font-weight: var(--font-weight-regular);\n line-height: 1.2;\n color: var(--te-brand-color-black);\n}\n\n.cartItem-brand-_Q8 {\n font-size: var(--font-step--1);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n/* The one splash of colour on the card: the cover is on, and the row total\n beside it already carries what that costs. */\n.cartItem-insuredBadge-25Y {\n display: inline-flex;\n align-self: flex-start;\n align-items: center;\n gap: var(--space-xs);\n padding: 2px var(--space-sm);\n border-radius: 20px;\n background-color: var(--color-status-success-bg);\n color: var(--color-status-success);\n font-size: var(--font-step--1);\n font-weight: var(--font-weight-medium);\n}\n\n/* The Price component brings its own size, black colour and line-height; in\n the badge it must follow the badge instead. The compound selector already\n outweighs Price's own media-query rule, so no !important. */\n.cartItem-insuredBadge-25Y div[class*='price'] {\n font-size: 120%;\n line-height: inherit;\n min-height: 0;\n color: inherit;\n}\n\n.cartItem-insuredBadgeIcon-1wL {\n display: flex;\n}\n\n.cartItem-quantity-3Qt {\n display: flex;\n align-items: center;\n}\n\n.cartItem-rowTotal-19a {\n font-size: var(--font-step-1);\n font-weight: var(--font-weight-medium);\n white-space: nowrap;\n text-align: right;\n}\n\n.cartItem-stockStatus-2VG {\n color: var(--global-color-error);\n font-size: var(--font-step--1);\n}\n\n/* ââ variant attributes ââ */\n\n.cartItem-variants-3cX {\n display: flex;\n flex-wrap: wrap;
4\n align-items: center;\n gap: var(--space-md);\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n.cartItem-variant-Z4R {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n.cartItem-swatch-ZDs {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 1px solid rgb(var(--venia-global-color-border));\n border-radius: 50%;\n}\n\n/* ââ lens configuration ââ */\n\n.cartItem-lensBlock-Ptt {\n background: var(--global-color-background-light);\n border-radius: 12px;\n}\n\n.cartItem-lensHeader-2r7 {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-md);\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n}\n\n.cartItem-lensIcon-36j {\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n.cartItem-lensTitle-1yG {\n font-size: var(--font-step-0);\n font-weight: var(--font-weight-medium);\n}\n\n.cartItem-chevron-9nq {\n transition: transform 150ms ease;\n}\n\n.cartItem-chevronCollapsed-1Qa {\n transform: rotate(180deg);\n}\n\n.cartItem-lensBody-2uH {\n display: flex;\n flex-direction: column;\n gap: var(--space-md);\n padding: 0 var(--space-md) var(--space-md);\n}\n\n.cartItem-selectionList-13g {\n display: flex;\n flex-direction: column;\n gap: var(--space-sm);\n margin: 0;\n padding-top: var(--space-md);\n border-top: 1px solid rgb(var(--venia-global-color-border));\n}\n\n.cartItem-selectionGroup-1Q4 {\n display: grid;\n grid-template-columns: minmax(6rem, 10rem) 1fr;\n gap: var(--space-md);\n align-items: start;\n}\n\n.cartItem-selectionLabel-CnM {\n font-size: var(--font-step--1);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n.cartItem-selectionValues-3x2 {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n margin: 0;\n}\n\n.cartItem-selectionRow-1Oe {\n display: flex;\n justify-content: space-between;\n gap: var(--space-md);\n}\n\n.cartItem-selectionValue-3mZ {\n min-width: 0;\n}\n\n.cartItem-selectionPrice-_Kq {\n white-space: nowrap;\n}\n\n.cartItem-selectionPrice-_Kq div[class*='price'] {\n font-size: var(--te-text-body-md);\n font-weight: 400;\n}\n\n.cartItem-selectionIncluded-1dG {\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n/* ââ prescription ââ */\n\n.cartItem-prescription-277 {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n padding-top: var(--space-md);\n border-top: 1px solid rgb(var(--venia-global-color-border));\n}\n\n/* Same small caps as the row labels below, but full-strength â otherwise the\n heading and the labels read as one flat list. */\n.cartItem-prescriptionTitle-xxh {\n font-weight: var(--font-weight-medium);\n color: rgb(var(--venia-global-color-text));\n}\n\n/* The same two columns as .selectionGroup: every label in the lens panel sits\n in one column, every value in the other, and a long prism string wraps under\n its own value instead of under the label. */\n.cartItem-prescriptionList-1iG {\n display: grid;\n grid-template-columns: minmax(6rem, 10rem) 1fr;\n gap: var(--space-xs) var(--space-md);\n align-items: start;\n margin: 0;\n}\n\n.cartItem-prescriptionLabel-wGh {\n}\n\n.cartItem-prescriptionValue-Y1A {\n margin: 0;\n font-variant-numeric: tabular-nums;\n}\n\n.cartItem-prescriptionMessage-32l {\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n/* ââ price breakdown ââ */\n\n.cartItem-breakdown-L6Z {\n}\n\n/* Same label column as the prescription above; prices sit flush right so the\n figures stack under the row total. */\n.cartItem-breakdownList-1ka {\n}\n\n.cartItem-breakdownValue-3BX {\n margin: 0;\n text-align: right;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n\n.cartItem-breakdownValue-3BX div[class*='price'] {\n font-size: var(--te-text-body-md);\n font-weight: 400;\n}\n\n.cartItem-breakdownTotalLabel-tm3 {\n padding-top: var(--space-xs);\n border-top: 1px solid rgb(var(--venia-global-color-border));\n}\n\n.cartItem-breakdownTotalValue-12O {\n padding-top: var(--space-xs);\n border-top: 1px solid rgb(var(--venia-global-color-border));\n}\n\n.cartItem-breakdownTotalValue-12O div[class*='price'] {\n font-weight: var(--font-weight-medium);\n}\n\n/* ââ lens quantity (contact lenses, per eye) ââ */\n\n.cartItem-lensQuantity-3_T {\n display: flex;\n flex-direction: column;\n gap: var(--space-xs);\n}\n\n.cartItem-lensQuantityRow-FK2 {\n display: grid;\n grid-template-columns: 1fr auto;
4\n align-items: center;\n gap: var(--space-sm);\n}\n\n.cartItem-lensQuantityLabel-3bB {\n font-size: var(--font-step--1);\n color: rgb(var(--venia-global-color-text-alt));\n white-space: nowrap;\n text-align: left;\n}\n\n/* ââ footer ââ */\n\n.cartItem-actions-3Wa {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-md);\n margin-top: var(--space-sm);\n}\n\n.cartItem-actionIcon-KpC {\n display: flex;\n}\n\n.cartItem-removeButton-1Q6 {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n background: none;\n border: none;\n padding: var(--space-xs) 0;\n cursor: pointer;\n color: rgb(var(--venia-global-color-text-alt));\n font: inherit;\n}\n\n.cartItem-removeButton-1Q6:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n@media (max-width: 960px) {\n /* The media column is a fraction, so on a narrower container the image\n shrinks faster than the text needs it to. Pin it instead. */\n .cartItem-root-3GI {\n grid-template-columns: 128px 1fr;\n }\n}\n\n@media (max-width: 640px) {\n /* One column: the image on top, everything else under it. */\n .cartItem-root-3GI {\n grid-template-columns: 1fr;\n gap: var(--space-md);\n }\n\n /* Full width of the line, but capped and centred so it reads as the hero\n of the card rather than a full-bleed banner. */\n .cartItem-media-47X {\n max-width: 18rem;\n margin: 0 auto;\n }\n\n /* Name, quantity and total stack and centre. Anything below the lens\n header stays left-aligned â those are label/value rows and a\n prescription table, and centring them would break the reading column. */\n .cartItem-heading-1HL {\n grid-template-columns: 1fr;\n justify-items: center;\n gap: var(--space-sm);\n text-align: center;\n }\n\n .cartItem-identity-3Qj {\n align-items: center;\n }\n\n .cartItem-insuredBadge-25Y {\n align-self: center;\n }\n\n .cartItem-name-1VM {\n /* Frame names run long and are not always breakable. */\n overflow-wrap: anywhere;\n }\n\n .cartItem-rowTotal-19a {\n text-align: center;\n }\n\n .cartItem-stockStatus-2VG {\n text-align: center;\n }\n\n .cartItem-variants-3cX {\n justify-content: center;\n gap: var(--space-sm);\n }\n\n .cartItem-lensHeader-2r7 {\n gap: var(--space-xs) var(--space-sm);\n padding: var(--space-sm);\n }\n\n .cartItem-lensBody-2uH {\n gap: var(--space-sm);\n padding: 0 var(--space-sm) var(--space-sm);\n }\n\n .cartItem-selectionGroup-1Q4 {\n grid-template-columns: 1fr;\n gap: 2px;\n }\n\n /* Prescription values are short, so the two columns survive a phone â a\n narrower label column is enough. */\n .cartItem-prescriptionList-1iG {\n grid-template-columns: minmax(4rem, auto) 1fr;\n gap: var(--space-xs) var(--space-sm);\n }\n\n .cartItem-lensQuantity-3_T {\n width: 100%;\n }\n\n /* The insurance toggle claims a full row (see insuranceToggle.css), so\n remove centres on the row below it. */\n .cartItem-actions-3Wa {\n justify-content: center;\n gap: var(--space-md);\n margin-top: var(--space-xs);\n }\n\n .cartItem-removeButton-1Q6 {\n min-height: 2.75rem;\n }\n}\n",""]),n.locals={root:"cartItem-root-3GI",rootUpdating:"cartItem-rootUpdating-3s6 cartItem-root-3GI",media:"cartItem-media-47X",imageLink:"cartItem-imageLink-3FI",imageRoot:"cartItem-imageRoot-1ef",image:"cartItem-image-29v",body:"cartItem-body-1xn",heading:"cartItem-heading-1HL",identity:"cartItem-identity-3Qj",name:"cartItem-name-1VM",brand:"cartItem-brand-_Q8",insuredBadge:"cartItem-insuredBadge-25Y",insuredBadgeIcon:"cartItem-insuredBadgeIcon-1wL",quantity:"cartItem-quantity-3Qt",rowTotal:"cartItem-rowTotal-19a",stockStatus:"cartItem-stockStatus-2VG",variants:"cartItem-variants-3cX",variant:"cartItem-variant-Z4R",swatch:"cartItem-swatch-ZDs",lensBlock:"cartItem-lensBlock-Ptt",lensHeader:"cartItem-lensHeader-2r7",lensIcon:"cartItem-lensIcon-36j",lensTitle:"cartItem-lensTitle-1yG",chevron:"cartItem-chevron-9nq",chevronCollapsed:"c
4artItem-chevronCollapsed-1Qa cartItem-chevron-9nq",lensBody:"cartItem-lensBody-2uH",selectionList:"cartItem-selectionList-13g",selectionGroup:"cartItem-selectionGroup-1Q4",selectionLabel:"cartItem-selectionLabel-CnM",selectionValues:"cartItem-selectionValues-3x2",selectionRow:"cartItem-selectionRow-1Oe",selectionValue:"cartItem-selectionValue-3mZ",selectionPrice:"cartItem-selectionPrice-_Kq",selectionIncluded:"cartItem-selectionIncluded-1dG cartItem-selectionPrice-_Kq",prescription:"cartItem-prescription-277",prescriptionTitle:"cartItem-prescriptionTitle-xxh cartItem-selectionLabel-CnM",prescriptionList:"cartItem-prescriptionList-1iG",prescriptionLabel:"cartItem-prescriptionLabel-wGh cartItem-selectionLabel-CnM",prescriptionValue:"cartItem-prescriptionValue-Y1A",prescriptionMessage:"cartItem-prescriptionMessage-32l",breakdown:"cartItem-breakdown-L6Z cartItem-prescription-277",breakdownList:"cartItem-breakdownList-1ka cartItem-prescriptionList-1iG",breakdownValue:"cartItem-breakdownValue-3BX",breakdownTotalLabel:"cartItem-breakdownTotalLabel-tm3 cartItem-prescriptionTitle-xxh cartItem-selectionLabel-CnM",breakdownTotalValue:"cartItem-breakdownTotalValue-12O cartItem-breakdownValue-3BX",lensQuantity:"cartItem-lensQuantity-3_T",lensQuantityRow:"cartItem-lensQuantityRow-FK2",lensQuantityLabel:"cartItem-lensQuantityLabel-3bB",actions:"cartItem-actions-3Wa",actionIcon:"cartItem-actionIcon-KpC",removeButton:"cartItem-removeButton-1Q6"}},E1Jx:function(e,n,t){"use strict" 5t.d(n,"a",function(){return getItemPricing}) 6var a=t("ySXH") 7function toNumber(e){if("number"==typeof e)return isNaN(e)?0:e 8var n=parseFloat(e) 9return isNaN(n)?0:n}function getItemPricing(e){var n=Object(a.a)(e,"prices.row_total_including_tax",null),t=toNumber(Object(a.a)(n,"value",0)),r=Object(a.a)(n,"currency","NOK"),o=Object(a.a)(e,"prescription.selections_data",null),i=0 10o&&Object.keys(o).forEach(function(e){if("__typename"!==e){var n=o[e];(Array.isArray(n)?n:[n]).forEach(function(e){e&&(i+=toNumber(e.full_price)-toNumber(e.final_price))})}}) 11var s=toNumber(Object(a.a)(e,"product.price_range.maximum_price.discount.amount_off",0)) 12return{currency:r,total:t,wasTotal:t+i,hasDiscount:i>0||s>0}}},EbI9:function(e,n,t){"use strict";(function(e){t.d(n,"a",function(){return I}) 13var a=t("lSNA"),r=t.n(a),o=t("MVZn"),i=t.n(o),s=t("o0o1"),c=t.n(s),l=t("yXPU"),u=t.n(l),d=t("J4zp"),m=t.n(d),p=t("VX74"),g=t("9872"),b=t("+sVj"),h=t("y1Xp"),f=t("ySXH"),v=t("q1tI"),y=t("y1rh"),w=t("qbVN"),x=t("G820"),I=function useProduct(e){var n=e.item,t=e.setActiveEditItem,a=e.setIsCartUpdating,o=Object(h.a)(x.a,e.operations),s=o.insuranceMutation,l=o.removeItemMutation,d=o.updateItemQuantityMutation,I=o.updateLensQuantityMutation,C=o.getConfigurableThumbnailSource,k=Object(p.useQuery)(C,{fetchPolicy:"cache-first"}).data,O=Object(v.useMemo)(function(){if(k)return k.storeConfig.configurable_thumbnail_source},[k]),_=j(n,O),E=Object(p.useMutation)(s,{onCompleted:function onCompleted(){a&&a(!1)},onError:function onError(){a&&a(!1)}}),M=m()(E,2),T=M[0],N=M[1],A=N.called,S=N.error,P=N.loading,q=Object(p.useMutation)(l,{onCompleted:function onCompleted(){a&&a(!1)},onError:function onError(){a&&a(!1)}}),L=m()(q,2),Q=L[0],R=L[1],V=R.called,B=R.error,F=R.loading,$=Object(p.useMutation)(d,{onCompleted:function onCompleted(){a&&a(!1)},onError:function onError(){a&&a(!1)}}),U=m()($,2),H=U[0],D=U[1],G=D.loading,z=D.error,X=D.called,J=Object(p.useMutation)(I,{onCompleted:function onCompleted(){a&&a(!1)},onError:function onError(){a&&a(!1)}}),K=m()(J,2),Z=K[0],W=K[1],Y=W.loading,ee=W.error,ne=W.called,te=Object(v.useCallback)(function(){var e=Object(f.a)(n,"product.__typename",""),t=!!Object(f.a)(n,"product.links_purchased_separately",!1) 14return!!_.options.length||!!("BundleProduct"===e||"GroupProduct"===e||"DownloadableProduct"===e&&t)},[_,n]),ae=Object(g.b)(),re=m()(ae,1)[0].cartId,oe=Object(v.useState)(!1),ie=m()(oe,2),se=ie[0],ce=ie[1],le=Object(v.useState)(function(){return Object(f.a)(n,"lenses_qty",{})}),ue=m()(le,2),de=ue[0],me=ue[1],pe=Object(v.useRef)(!1),ge=Object(v.useRef)(!0) 15Object(v.useEffect)(function(){return ge.current=!0,function(){ge.current=!1}},[])
16var be=Object(v.useState)(!0),he=m()(be,2),fe=(he[0],he[1]),ve=Object(v.useCallback)(function(e){ge.current&&fe(e)},[]),ye=Object(v.useCallback)(function(e){ge.current&&a(e)},[a]) 17Object(v.useEffect)(function(){return(X||V||A||ne)&&ye(G||F||P||Y),function(){ye(!1)}},[V,F,A,P,ye,X,G,ne,Y]) 18var we=Object(v.useMemo)(function(){return Object(b.a)([B||z||ee||S])},[B,z,ee,S]),xe=Object(v.useCallback)(function(){ce(!se)},[se]),Ie=Object(v.useCallback)(function(){ge.current&&(t(n),ve(!1))},[n,t,ve]),je=Object(v.useCallback)(function(){var e=u()(c.a.mark(function _callee(e){return c.a.wrap(function _callee$(t){for(;;)switch(t.prev=t.next){case 0:if(ge.current){t.next=2 19break}return t.abrupt("return") 20case 2:return ye(!0),t.prev=3,t.next=6,T({variables:{cartId:re,itemId:n.id,value:e}}) 21case 6:t.next=11 22break 23case 8:t.prev=8,t.t0=t.catch(3),ge.current&&ve(!0) 24case 11:case"end":return t.stop()}},_callee,null,[[3,8]])})) 25return function(n){return e.apply(this,arguments)}}(),[re,n.id,T,ve,ye]),Ce=Object(v.useCallback)(function(){var e=u()(c.a.mark(function _callee2(e,t){var a 26return c.a.wrap(function _callee2$(r){for(;;)switch(r.prev=r.next){case 0:if(ge.current){r.next=2 27break}return r.abrupt("return") 28case 2:if("none"!==(a=Object(w.a)(t,e,n.quantity)).action){r.next=5 29break}return r.abrupt("return") 30case 5:if("optOut"!==a.action){r.next=8 31break}return je(!1),r.abrupt("return") 32case 8:return ye(!0),r.prev=9,r.next=12,H({variables:{cartId:re,itemId:Number(e.coverItemId),quantity:a.quantity}}) 33case 12:r.next=17 34break 35case 14:r.prev=14,r.t0=r.catch(9),ge.current&&ve(!0) 36case 17:case"end":return r.stop()}},_callee2,null,[[9,14]])})) 37return function(n,t){return e.apply(this,arguments)}}(),[re,n.quantity,H,je,ve,ye]),ke=Object(v.useCallback)(u()(c.a.mark(function _callee3(){return c.a.wrap(function _callee3$(e){for(;;)switch(e.prev=e.next){case 0:if(ge.current){e.next=2 38break}return e.abrupt("return") 39case 2:return ye(!0),e.prev=3,e.next=6,Q({variables:{cartId:re,itemId:n.id}}) 40case 6:e.next=11 41break 42case 8:e.prev=8,e.t0=e.catch(3),ge.current&&ve(!0) 43case 11:case"end":return e.stop()}},_callee3,null,[[3,8]])})),[re,n.id,Q,ye,ve]),Oe=Object(v.useCallback)(function(){var e=u()(c.a.mark(function _callee4(e){var t 44return c.a.wrap(function _callee4$(a){for(;;)switch(a.prev=a.next){case 0:if(ge.current){a.next=2 45break}return a.abrupt("return") 46case 2:if(t=Number(e),Number.isFinite(t)&&!(t<=0)){a.next=7 47break}return a.next=6,ke() 48case 6:return a.abrupt("return") 49case 7:return ye(!0),a.prev=8,a.next=11,H({variables:{cartId:re,itemId:n.id,quantity:t}}) 50case 11:a.next=16 51break 52case 13:a.prev=13,a.t0=a.catch(8),ge.current&&ve(!0) 53case 16:case"end":return a.stop()}},_callee4,null,[[8,13]])})) 54return function(n){return e.apply(this,arguments)}}(),[re,n,H,ke,ve,ye]),_e=Object(v.useCallback)(function(e,n){me(function(t){return i()({},t,r()({},n,e))})},[re,n.id,H]) 55return Object(v.useEffect)(function(){var e=!0 56if(pe.current)return u()(c.a.mark(function _callee5(){return c.a.wrap(function _callee5$(t){for(;;)switch(t.prev=t.next){case 0:if(Object(y.a)(de)){t.next=2 57break}return t.abrupt("return") 58case 2:return ye(!0),t.prev=3,t.next=6,Z({variables:i()({cartId:re,itemId:n.id},de)}) 59case 6:t.next=11 60break 61case 8:t.prev=8,t.t0=t.catch(3),e&&ge.current&&ve(!0) 62case 11:case"end":return t.stop()}},_callee5,null,[[3,8]])}))(),function(){e=!1} 63pe.current=!0},[de,re,n.id,Z,ve,ye]),{errorMessage:we,updateQuantityError:z,updateLensQuantityError:ee,handleToggleInsurance:je,handleUpdateCoverQuantity:Ce,handleEditItem:Ie,handleRemoveFromCart:ke,handleToggleFavorites:xe,handleUpdateItemQuantity:Oe,handleUpdateLensQuantity:_e,isEditable:te(),isFavorite:se,product:_}},j=function flattenProduct(e,n){var t=e||{},a=Object(f.a)(t,"configurable_options",[]),r=Object(f.a)(t,"prices",{}),o=Object(f.a)(t,"product",{}),i=Object(f.a)(t,"quantity",0),s=Object(f.a)(t,"prescription",null),c=C(a,o),l=Object(f.a)(r,"row_total_including_tax",{}),u=Object(f.a)(l,"value",0),d=Object(f.a)(l,"currency","NOK"),m=o.name,p=o.manufacturer,g=o.producer,b=o.small_image,h=o.stock_status,v=o.url_key,y=o.url_suffix,w=o.contact_lenses,x="itself"===n&&c?Object(f.a)(c,"small_image",{}):b 64return{currency:d,image:Object(f.a)(x,"url",""),name:m,manufacturer:p,producer:g,options:a,quantity:i,stockStatus:h,unitPrice:u,urlKey:v,urlSuffix:y,contactLenses:w,prescription:s}}
64,C=function resolveConfiguredVariant(n,t){var a=Array.isArray(n)?n.filter(Boolean):[],r=Object(f.a)(t,"variants",[]) 65if(!a.length||!Array.isArray(r)||!r.length)return null 66var o=a.map(function(n){return e.from("configurable/".concat(n.id,"/").concat(n.value_id)).toString("base64")}).sort().toString() 67return r.map(function(e){var n=Object(f.a)(e,"attributes",[]),t=Object(f.a)(e,"product",null) 68return Array.isArray(n)&&n.length&&n.map(function(e){return Object(f.a)(e,"uid","")}).filter(Boolean).sort().toString()===o?t:null}).filter(Boolean)[0]||null}}).call(this,t("tjlA").Buffer)},FvCY:function(e,n,t){"use strict" 69t.d(n,"a",function(){return b}),t.d(n,"b",function(){return f}) 70var a,r,o,i,s,c,l=t("VkAN"),u=t.n(l),d=t("VX74"),m=Object(d.gql)(a||(a=u()(["\n mutation applyCreditToCart($creditAmount: Float!) {\n applyCreditToCart(creditAmount: $creditAmount)\n }\n"]))),p=Object(d.gql)(r||(r=u()(["\n mutation cancelCreditFromCart($creditAmount: Float!) {\n cancelCreditFromCart(creditAmount: $creditAmount)\n }\n"]))),g=Object(d.gql)(o||(o=u()(["\n query getOrderCreditAmount($orderId: Int!) {\n getOrderCreditAmount(orderId: $orderId)\n }\n"]))),b=Object(d.gql)(i||(i=u()(["\n query {\n getCustomerBalance\n }\n"]))),h=Object(d.gql)(s||(s=u()(["\n query GetCartBalanceUse {\n getCartBalanceUse {\n creditAmount\n creditAmountUsed\n currencyCode\n }\n }\n"]))),f=Object(d.gql)(c||(c=u()(["\n query {\n getCustomerTransactions {\n transaction_id\n created_at\n action\n message\n balance_amount\n balance_delta\n customer_id\n expiration_date\n expired_status\n }\n }\n"]))) 71n.c={applyCreditMutation:m,cancelCreditMutation:p,getOrderCredit:g,getCustomerBalance:b,getCartCredit:h,getCustomerTransactionsQuery:f}},G820:function(e,n,t){"use strict" 72var a,r,o=t("VkAN"),i=t.n(o),s=t("VX74"),c=t("Sdjr"),l=t("s0i0"),u=t("KCL6"),d=Object(s.gql)(a||(a=i()(["\n query getConfigurableThumbnailSource {\n storeConfig {\n id\n configurable_thumbnail_source\n }\n }\n"]))),m=Object(s.gql)(r||(r=i()(["\n mutation insuranceProduct(\n $cartId: String!\n $itemId: Int!\n $value: Boolean!\n ) {\n insuranceProduct(cartId: $cartId, itemId: $itemId, value: $value) {\n id\n ...MiniCartFragment\n ...CartPageFragment\n ...AvailableShippingMethodsCartFragment\n }\n }\n ","\n ","\n ","\n"])),c.a,l.a,u.a) 73n.a={getConfigurableThumbnailSource:d,insuranceMutation:m}},GN5e:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".modal-root_open_modal-1aj {\n margin: 0 auto;\n width: 100%;\n flex-direction: column;\n box-sizing: border-box;\n height: auto;\n left: 0;\n position: fixed;\n right: 0;\n transition-duration: 0.2s;\n transition-property: transform, visibility;\n transition-timing-function: ease;\n z-index: 3;\n opacity: 1;\n pointer-events: auto;\n background: var(--global-color-background);\n display: flex;\n top: 50%;\n transform: translateY(-50%);\n max-height: 100dvh;\n overflow-y: auto;\n padding: 1.5rem;\n border-radius: var(--global-border-radius-md);\n}\n\n.modal-root_open_modal-1aj iframe {\n width: 100%;\n\n /*position: absolute;*/\n /*left: 0;*/\n /*top: 0;*/\n /*height: 100%;*/\n}\n/* .root_open_modal header {\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n} */\n.modal-root_open_modal-1aj h1 {\n font-weight: 300;\n padding-bottom: 10px;\n font-size: 26px;\n margin-bottom: 0;\n min-height: 1em;\n word-wrap: break-word;\n}\n.modal-root_open_modal-1aj p,\n.modal-root_open_modal-1aj header {\n margin-bottom: 1rem;\n}\n\n.modal-root_open_modal-1aj header {\n position: relative;\n}\n\n.modal-root_open_modal-1aj .modal-closeModal-18x {\n position: absolute;\n right: 0;\n top: 0;\n cursor: pointer;\n}\n.modal-modalСontent-2We {\n line-height: var(--venia-global-lineHeight-400);\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n}\n\n/*\n * A modal opened on top of another one. The app mask sits at z-index 2 and\n * belongs to whichever modal holds the drawer â the one behind â so a nested\n * modal brings a scrim of its own and rises above both.\n */\n.modal-backdrop-1g2 {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 4;\n background-color: rgba(var(--te-brand-color-black-rgb), 0.5);\n cursor: pointer;\n}\n\n.modal-root_nested-1C2 {\n z-index: 5;\n}\n/*\n * A 2rem frame on a desktop, so the page behind stays visible as context\n * without being reachable. Left and right are insets;
73 top and bottom are a\n * height cap rather than insets, so the box still hugs its content and stays\n * centred instead of being stretched to fill the frame â a short form would\n * otherwise open two thirds empty.\n *\n * Literal `top: 2rem; bottom: 2rem` would also fight the `translateY(-50%)`\n * above, which is exactly what broke the per-page copies this rule replaces.\n */\n@media (min-width: 1024px) {\n .modal-root_open_modal-1aj {\n left: 2rem;\n right: 2rem;\n width: auto;\n max-width: none;\n max-height: calc(100dvh - 4rem);\n }\n}\n",""]),n.locals={root_open_modal:"modal-root_open_modal-1aj",closeModal:"modal-closeModal-18x",modalСontent:"modal-modalСontent-2We",backdrop:"modal-backdrop-1g2",root_nested:"modal-root_nested-1C2"}},IeEq:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".priceAdjustments-module-root-3GF {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: var(--space-sm);\n}\n\n/* Same card as the lens panel on a checkout cart line: tinted surface, 12px\n radius, no rules between rows â the gap separates them. Padding and radius\n stay constant across states, because the applied outline is drawn with an\n inset shadow and never changes the box. */\n.priceAdjustments-module-section-2G0 {\
73n box-sizing: border-box;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n background: var(--global-color-background-light);\n border-radius: 12px;\n transition: background-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\n}\n\n.priceAdjustments-module-section-2G0:has(button[aria-expanded='false']):hover {\n background-color: var(--color-status-info-bg);\n}\n\n/* Tone: one class on the section, consumed by both the outline and the badge,\n using the same status tokens as the global .badge-* helpers. */\n.priceAdjustments-module-toneInfo-Spn {\n --status-fg: var(--color-status-info);\n --status-bg: var(--color-status-info-bg);\n}\n\n.priceAdjustments-module-toneSuccess-pjU {\n --status-fg: var(--color-status-success);\n --status-bg: var(--color-status-success-bg);\n}\n\n.priceAdjustments-module-toneWarning-JQR {\n --status-fg: var(--color-status-warning);\n --status-bg: var(--color-status-warning-bg);\n}\n\n.priceAdjustments-module-toneError-2-Q {\n --status-fg: var(--color-status-error);\n --status-bg: var(--color-status-error-bg);\n}\n\n/* Something is applied in this section: tinted fill + matching outline, so the\n state is readable while the section is collapsed. The outline is an inset\n shadow â it paints inside the box instead of growing it. */\n.priceAdjustments-module-sectionApplied-3DK {\n background-color: var(--status-bg);\n box-shadow: inset 0 0 0 1px var(--status-fg);\n}\n\n/* Mirrors .lensHeader: chevron, title, then whatever states the row carries.\n The title track is `minmax(0, 1fr)` and not `1fr`: a bare `1fr` floors at the\n title's min-content, so a long unbreakable word claimed the row and squeezed\n the badge â which, having `overflow: hidden`, has an automatic minimum size of\n zero â down to a single glyph. Now the title yields first. */\n.priceAdjustments-module-header-3XQ {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--space-sm);\n width: 100%;\n padding: var(--space-md);\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n}\n\n.priceAdjustments-module-chevron-18a {\n display: flex;\n align-items: center;\n color: rgb(var(--venia-global-color-text-alt));\n transition: transform 150ms ease;\n}\n\n.priceAdjustments-module-chevron-18a svg {\n width: 1.125rem;\n height: 1.125rem;\n}\n\n.priceAdjustments-module-chevronOpen-2G_ {\n transform: rotate(180deg);\n}\n\n/* Also handed to the newsletter row, which is a flex row rather than a grid â\n hence the grow, which the header's own grid ignores. */\n.priceAdjustments-module-toggleLabel-Aed {\n flex: 1 1 auto;\n min-width: 0;\n overflow-wrap: anywhere;\n cursor: pointer;\n font-size: var(--font-step-0);\n font-weight: var(--font-weight-medium);\n color: var(--te-brand-color-black);\n}\n\n/* The newsletter section names a choice the customer did not come here to make;\n at medium weight it read as loud as the coupon and the gift points. Same row,\n ordinary weight. */\n.priceAdjustments-module-toggleLabelPlain-8B4 {\n font-weight: var(--font-weight-regular);\n}\n\n/* Same colour scheme as the global .badge-* helpers; on its own tinted row it\n sits on white so the chip still reads as a separate object. */\n.priceAdjustments-module-badge-3aC {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 0.125rem 0.625rem;\n border-radius: 20px;\n font-size: var(--te-text-body-xs);\n font-weight: 500;\n color: var(--status-fg);\n background-color: var(--global-color-background);\n box-shadow: inset 0 0 0 1px var(--status-fg);\n}\n\n/* 0fr â 1fr instead of a max-height guess, so taller applied content\n (chips, a long note) can never be clipped. */\n.priceAdjustments-module-region-2s6 {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.3s ease-in-out;\n}\n\n.priceAdjustments-module-region-2s6.priceAdjustments-module-regionOpen-2Zj {\n grid-template-rows: 1fr;\n}
73\n\n/* `visibility` and not only the 0fr row: a collapsed section that keeps its\n children mounted (gift points) would otherwise leave its inputs in the tab\n order, reachable but invisible. */\n.priceAdjustments-module-regionContent-5MD {\n min-height: 0;\n overflow: hidden;\n visibility: hidden;\n transition: visibility 0.3s ease-in-out;\n padding: 0 var(--space-md) 0;\n}\n\n/* Padding lines up with .lensBody: the header already paid for the top space. */\n.priceAdjustments-module-region-2s6.priceAdjustments-module-regionOpen-2Zj .priceAdjustments-module-regionContent-5MD {\n visibility: visible;\n padding: 0 var(--space-md) var(--space-md);\n}\n",""]),n.locals={root:"priceAdjustments-module-root-3GF",section:"priceAdjustments-module-section-2G0",toneInfo:"priceAdjustments-module-toneInfo-Spn",toneSuccess:"priceAdjustments-module-toneSuccess-pjU",toneWarning:"priceAdjustments-module-toneWarning-JQR",toneError:"priceAdjustments-module-toneError-2-Q",sectionApplied:"priceAdjustments-module-sectionApplied-3DK",header:"priceAdjustments-module-header-3XQ",chevron:"priceAdjustments-module-chevron-18a",chevronOpen:"priceAdjustments-module-chevronOpen-2G_",toggleLabel:"priceAdjustments-module-toggleLabel-Aed",toggleLabelPlain:"priceAdjustments-module-toggleLabelPlain-8B4 priceAdjustments-module-toggleLabel-Aed",badge:"priceAdjustments-module-badge-3aC",region:"priceAdjustments-module-region-2s6",regionOpen:"priceAdjustments-module-regionOpen-2Zj",regionContent:"priceAdjustments-module-regionContent-5MD"}},KCL6:function(e,n,t){"use strict" 74t.d(n,"a",function(){return l}) 75var a,r,o,i=t("VkAN"),s=t.n(i),c=t("VX74"),l=Object(c.gql)(a||(a=s()(["\n fragment AvailableShippingMethodsCartFragment on Cart {\n id\n shipping_addresses {\n available_shipping_methods {\n amount {\n currency\n value\n }\n available\n carrier_code\n carrier_title\n method_code\n method_title\n }\n street\n }\n }\n"]))),u=Object(c.gql)(r||(r=s()(["\n fragment SelectedShippingMethodCartFragment on Cart {\n id\n shipping_addresses {\n selected_shipping_method {\n carrier_code\n method_code\n }\n street\n }\n }\n"]))) 76Object(c.gql)(o||(o=s()(["\n fragment ShippingMethodsCartFragment on Cart {\n id\n ...AvailableShippingMethodsCartFragment\n ...SelectedShippingMethodCartFragment\n shipping_addresses {\n country {\n code\n }\n postcode\n region {\n code\n }\n street\n }\n }\n ","\n ","\n"])),l,u)},Lo79:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".coupon-module-root-25c {\n display: grid;\n grid-row-gap: 8px;\n}\n",""]),n.locals={root:"coupon-module-root-25c"}},M1Dr:function(e,n,t){"use strict" 77var a=t("J4zp"),r=t.n(a),o=t("MVZn"),i=t.n(o),s=t("q1tI"),c=t.n(s),l=t("17x9"),u=t("dDsW"),d=t("kriW"),m=t("55Ip"),p=t("QMhA"),g=t("g437"),b=t("04CE"),h=t("JoNN"),f=t("1raM"),v=t("J3e4"),y=t("EbI9"),w=t("STEg"),x=t("y1Xp"),I=t("dgmk"),j=t("t+/2"),C=t("Q0Ao"),k=t("bcDk"),O=t("+vrd"),_=t("HWP6"),E=t("ZRVi"),M=t("3f9F"),T=t("UZ/M"),N=t("dsxs"),A=t("LboF"),S=t.n(A),P=t("qfVd"),q=t.n(P),L={injectType:"singletonStyleTag",insert:"head",singleton:!0},Q=(S()(q.a,L),q.a.locals||{}),R=t("gDcD"),V=t.n(R),B={injectType:"singletonStyleTag",insert:"head",singleton:!0},F=(S()(V.a,B),V.a.locals||{}),$=function InsuranceToggle(e){var n=e.insurance,t=e.handleToggleInsurance,a=e.handleUpdateCoverQuantity,o=e.coverLink,i=e.parentQuantity,l=e.isUpdatingCover,m=e.isJustLens,p=e.disabled,g=Object(x.a)(F,e.classes),b=Object(u.a)().formatMessage,f=function useInsurance(){var e=Object(s.useState)(!1),n=r()(e,2),t=n[0],a=n[1],o=Object(s.useCallback)(function(){a(arguments.length>0&&void 0!==arguments[0]&&arguments[0])},[]) 78return{isOpenedModal:t,toggleOpenModal:o}}(),v=f.isOpenedModal,y=f.toggleOpenModal 79if(!n)return null 80var w=!!n.is_applied,j=n.price,C=Math.max(Number(i)||0,1),A=o&&Number(o.coverQuantity)||0,S=Boolean(o&&A>C),P=Boolean(w&&o&&a&&(C>1||S)),q=Math.max(C,A),L=P||S,R=j?c.a.createElement("span",{className:g.price}
80,c.a.createElement(O.a,{value:j.value,currencyCode:j.currency})):null,V=m?c.a.createElement(d.a,{id:"checkoutCartItem.serviceToggle",defaultMessage:"General service of the glasses"}):c.a.createElement(d.a,{id:"checkoutCartItem.insuranceToggle",defaultMessage:"Accident insurance"}),B=m?"insurance-just-lens-no":"accident-insurance-info-no" 81return c.a.createElement("div",{className:L?g.panel:g.root},c.a.createElement("div",{className:L?g.panelHeader:g.row},c.a.createElement("button",{type:"button",className:L?g.buttonInPanel:w?g.buttonApplied:g.button,"aria-pressed":w,disabled:p,onClick:function onClick(){t(!w)}},w?c.a.createElement("span",{className:g.shieldMark},c.a.createElement(I.a,{src:_.a,size:16,classes:{root:g.icon}}),c.a.createElement(I.a,{src:h.a,size:8,attrs:{strokeWidth:3.5},classes:{root:g.shieldCheck}})):c.a.createElement(I.a,{src:E.a,size:16,classes:{root:g.icon}}),c.a.createElement("span",{className:g.label},V),R),c.a.createElement("button",{type:"button",className:g.info,onClick:function onClick(){y(!0)}},c.a.createElement(I.a,{src:M.a,size:18,classes:{root:g.icon}}),c.a.createElement("span",{className:g.visuallyHidden},c.a.createElement(d.a,{id:"checkoutCartItem.insuranceInfo",defaultMessage:"About this cover"})))),P&&c.a.createElement("div",{className:g.quantityRow},c.a.createElement("span",{className:g.quantityLabel},c.a.createElement(d.a,{id:"insurance.coverQuantityLabel",defaultMessage:"Insured items"})),c.a.createElement("div",{className:g.quantityControl},c.a.createElement(k.b,{itemId:"cover-"+o.coverItemId,label:b({id:"insurance.coverQuantityLabel",defaultMessage:"Insured items"}),initialValue:A,min:0,max:q,loading:!!l||p,onChange:function onChange(e){a(o,e)}}),c.a.createElement("span",{className:g.quantityMax},c.a.createElement(d.a,{id:"insurance.coverQuantityOf",defaultMessage:"of {quantity}",values:{quantity:C}})))),S&&c.a.createElement("div",{className:g.coverHintRow},c.a.createElement("p",{className:g.coverHint},c.a.createElement(d.a,{id:"insurance.coverSurplusHint",defaultMessage:"You are paying for {coverQuantity} covers, but this line only has {quantity}.",values:{coverQuantity:A,quantity:C}})),a&&c.a.createElement("button",{type:"button",className:g.coverHintAction,disabled:!!l||p,onClick:function onClick(){a(o,C)}},c.a.createElement(d.a,{id:"insurance.coverSurplusAction",defaultMessage:"Reduce to {quantity}",values:{quantity:C}}))),c.a.createElement(N.a,{showModal:v,onClose:function onClose(){y(!1)}},c.a.createElement("div",{className:Q.infoContent},c.a.createElement(T.b,{identifiers:B}))))} 82$.propTypes={insurance:l.object,handleToggleInsurance:l.func.isRequired,handleUpdateCoverQuantity:l.func,coverLink:l.object,parentQuantity:l.number,isUpdatingCover:l.bool,isJustLens:l.bool,disabled:l.bool,classes:l.object} 83var U,H=$,D=t("VX74"),G=t("+sVj"),z=t("qbVN"),X=t("VkAN"),J=t.n(X),K=t("vPL8"),Z=Object(D.gql)(U||(U=J()(["\n mutation insuranceProduct(\n $cartId: String!\n $itemId: Int!\n $value: Boolean!\n ) {\n insuranceProduct(cartId: $cartId, itemId: $itemId, value: $value) {\n id\n total_quantity\n ...CartItemsFragment\n ...CartPricesFragment\n }\n }\n ","\n ","\n"])),K.a,K.c),W=t("0yUf"),Y=function useInsuranceToggle(e){var n=e.itemId,t=e.parentQuantity,a=Object(W.b)().cartId,o=Object(D.useMutation)(Z),i=r()(o,1)[0],c=Object(D.useMutation)(C.c),l=r()(c,1)[0],u=Object(s.useState)(!1),d=r()(u,2),m=d[0],p=d[1],g=Object(s.useState)(!1),b=r()(g,2),h=b[0],f=b[1],v=Object(s.useState)(null),y=r()(v,2),w=y[0],x=y[1],I=Object(s.useRef)(!0) 84Object(s.useEffect)(function(){return I.current=!0,function(){I.current=!1}},[]) 85var j=Object(s.useCallback)(function(e){a&&(x(null),p(!0),i({variables:{cartId:a,itemId:n,value:e}}).catch(function(e){I.current&&x(e)}).then(function(){I.current&&p(!1)}))},[a,n,i]),k=Object(s.useCallback)(function(e,n){if(a){var r=Object(z.a)(n,e,t) 86"none"!==r.action&&("optOut"!==r.action?(x(null),f(!0),l({variables:{cartId:a,itemId:Number(e.coverItemId),quantity:r.quantity}}).catch(function(e){I.current&&x(e)}).then(function(){I.current&&f(!1)})):j(!1))}},[a,t,l,j]),O=Object(s.useMemo)(function(){return w?Object(G.a)([w]):""},[w])
87return{handleToggleInsurance:j,handleUpdateCoverQuantity:k,isTogglingInsurance:m,isUpdatingCover:h,insuranceErrorMessage:O}},ee=t("ySXH"),ne=t("AZhL"),te=t("cDf5"),ae=t.n(te) 88function toAttributeValue(e){return null==e?null:"string"==typeof e||"number"==typeof e?String(e):"object"!==ae()(e)||Array.isArray(e)?null:void 0!==e.label&&null!==e.label?String(e.label):void 0!==e.value&&null!==e.value?String(e.value):void 0!==e.name&&null!==e.name?String(e.name):null}var re=[],oe=["frame_name","product_name"],ie=["double_vision","coating"],se=toAttributeValue 89function toNumber(e){if("number"==typeof e)return isNaN(e)?0:e 90var n=parseFloat(e) 91return isNaN(n)?0:n}function toSelectionRow(e,n,t){if(!n||!n.value)return null 92var a=toNumber(n.final_price),r=toNumber(n.full_price) 93return{key:e,group:t||null,label:n.name||null,value:n.value,price:a,wasPrice:r,isIncluded:0===a,isDiscounted:r>a}}function toPriceRow(e,n,t){return{key:e,price:n,wasPrice:t,isDiscounted:t>n}}function getPriceBreakdown(e,n){if(!n.headline)return re 94var t=[],a=0,r=0 95if("lenses"===n.headline.key){var o=function getFramePrice(e){for(var n=Object(ee.a)(e,"prescription.selections_data",null)||{},t=0;t<oe.length;t++){var a=n[oe[t]] 96if(a&&null!==a.final_price&&void 0!==a.final_price){var r=toNumber(a.final_price) 97return toPriceRow("frame",r,Math.max(toNumber(a.full_price),r))}}return null}(e) 98o&&(t.push(o),a+=o.price,r+=o.wasPrice)}t.push(toPriceRow("lenses",n.total,n.wasTotal)),a+=n.total,r+=n.wasTotal 99var i=toNumber(Object(ee.a)(e,"quantity",1))||1 100if(i>1){var s=toPriceRow("quantity",a*i,r*i) 101s.quantity=i,t.push(s)}var c=toNumber(Object(ee.a)(e,"foldedFees.cover",0)) 102return c&&t.push(toPriceRow("cover",c,c)),t}var ce=t("E1Jx"),le=t("Def3"),ue=t.n(le),de={injectType:"singletonStyleTag",insert:"head",singleton:!0},me=(S()(ue.a,de),ue.a.locals||{}),pe={display:"block",aspectRatio:"1",background:"var(--global-color-background-light)"},ge=[],be=c.a.createElement(I.a,{src:p.a,size:20}),he=function CartItem(e){var n=e.item,t=e.isCartUpdating,a=Object(u.a)().formatMessage,o=Object(x.a)(me,e.classes),l=Object(y.a)(i()({operations:{removeItemMutation:C.a,updateItemQuantityMutation:C.c,updateLensQuantityMutation:C.b}},e)),p=l.errorMessage,_=l.updateQuantityError,E=l.updateLensQuantityError,M=l.handleRemoveFromCart,T=l.handleUpdateItemQuantity,N=l.handleUpdateLensQuantity,A=Y({itemId:n.id,parentQuantity:n.quantity}),S=A.handleToggleInsurance,P=A.handleUpdateCoverQuantity,q=A.isTogglingInsurance,L=A.isUpdatingCover,Q=A.insuranceErrorMessage,R=Object(s.useState)(!1),V=r()(R,2),B=V[0],F=V[1],$=Object(s.useMemo)(function(){return function getItemImage(e){for(var n=[Object(ee.a)(e,"configured_variant.thumbnail.url"),Object(ee.a)(e,"configured_variant.small_image.url"),Object(ee.a)(e,"product.small_image.url"),Object(ee.a)(e,"product.thumbnail.url")],t=0;t<n.length;t++)if(n[t])return n[t] 103return null}(n)},[n]),U=Object(s.useMemo)(function(){return function getBrand(e){var n=se(Object(ee.a)(e,"product.manufacturer")) 104return n||se(Object(ee.a)(e,"product.producer"))}(n)},[n]),D=Object(s.useMemo)(function(){return function getVariantAttributes(e){var n=Object(ee.a)(e,"configurable_options",re) 105return Array.isArray(n)&&n.length?n.filter(Boolean).map(function(e){return{label:e.option_label,value:e.value_label}}).filter(function(e){return!!e.value}):re}(n)},[n]),G=Object(s.useMemo)(function(){return function getColorSwatch(e){var n=Object(ee.a)(e,"configured_variant.color_swatches"),t=se(n) 106return t||se(Object(ee.a)(e,"configured_variant.color"))}(n)},[n]),z=Object(s.useMemo)(function(){return Object(ce.a)(n)},[n]),X=Object(s.useMemo)(function(){return function getLensSummary(e){var n=Object(ee.a)(e,"selections_data",null) 107if(!n)return{headline:null,rows:re,total:0,wasTotal:0,hasDiscount:!1} 108var t=toSelectionRow("lenses",n.lenses,"lens")||toSelectionRow("contact_lense_name",n.contact_lense_name),a=[] 109ie.forEach(function(e){var t=toSelectionRow(e,n[e],e) 110t&&a.push(t)}),(Array.isArray(n.addons)?n.addons:re).forEach(function(e,n){var t=toSelectionRow("addon-"+n,e,"addons") 111t&&a.push(t)}) 112var r=t?[t].concat(a):a,o=r.reduce(function(e,n){return e+n.price},0),i=r.reduce(function(e,n){return e+n.wasPrice},0) 113return{headline:t,rows:a,total:o,wasTotal:i,hasDiscount:i>o}}(n.prescription)},[n]),J=Object(s.useMemo)(function(){return function groupSelectionRows(e){if(!e||!e.length)return re 114var n=[],t=new Map 115return e.forEach(function(e){var a=e.group||e.label||"" 116t.has(a)||(t.set(a,{group:e.group||null,label:e.label||null,rows:[]}),n.push(a)),t.get(a).rows.push(e)}),n.map(function(e){return t.get(e)})}(function getDetailRows(e){return e.headline&&"lenses"===e.headline.key?[e.headline].concat(e.rows):e.rows}(X)).map(function(e){var n=e.label 117switch(e.group){case"lens":n=a({id:"checkoutCartItem.lens",defaultMessage:"Lenses"}) 118break 119case"double_vision":n=a({id:"checkoutCartItem.doubleVision",defaultMessage:"Double vision"}) 120break 121case"coating":n=a({id:"checkoutCartItem.coating",defaultMessage:"Coating"}) 122break 123case"addons":n=a({id:"checkoutCartItem.addons",defaultMessage:"Add-ons"})}return Object.assign({},e,{label:n})})},[X,a]),K=Object(s.useMemo)(function(){return function getPrescriptionSummary(e){var n=Object(ee.a)(e,"prescription_data",null) 124return n&&(n.right||n.left||n.pd||n.pd_r_l||n.add)?{usage:n.usage||null,right:n.right||null,left:n.left||null,add:n.add||null,pd:n.pd||null,pdRl:n.pd_r_l||null,prism:n.prism||null,message:n.message||null}:null}(n.prescription)},[n]),Z=Object(s.useMemo)(function(){if(!K)return ge 125var e=function millimetres(e){return a({id:"checkoutCartItem.millimetres",defaultMessage:"{value} mm"},{value:e})},n=[] 126return K.right&&n.push({key:"right",label:a({id:"checkoutCartItem.rightEye",defaultMessage:"Right"}
126),value:K.right}),K.left&&n.push({key:"left",label:a({id:"checkoutCartItem.leftEye",defaultMessage:"Left"}),value:K.left}),K.add&&n.push({key:"add",label:a({id:"checkoutCartItem.addPower",defaultMessage:"ADD"}),value:K.add}),K.pd&&n.push({key:"pd",label:a({id:"checkoutCartItem.pupillaryDistanceLabel",defaultMessage:"PD"}),value:e(K.pd)}),K.pdRl&&n.push({key:"pdRl",label:a({id:"checkoutCartItem.pupillaryDistanceRlLabel",defaultMessage:"PD R/L"}),value:e(K.pdRl)}),K.prism&&n.push({key:"prism",label:a({id:"specifications.prism",defaultMessage:"Prism"}),value:K.prism}),n},[K,a]),W=Object(s.useMemo)(function(){var e=Object(ne.c)(n) 127return getPriceBreakdown(n,X).map(function(n){var t 128switch(n.key){case"frame":t=a({id:"checkoutCartItem.frame",defaultMessage:"Frame"}) 129break 130case"lenses":t="lenses"===X.headline.key?a({id:"checkoutCartItem.lenses",defaultMessage:"Lenses, coating, add-ons"}):a({id:"checkoutCartItem.contactLenses",defaultMessage:"Contact lenses"}) 131break 132case"quantity":t=a({id:"checkoutCartItem.quantityTimes",defaultMessage:"à {quantity}"},{quantity:n.quantity}) 133break 134default:t=a(e?{id:"checkoutCartItem.coverService",defaultMessage:"General service"}:{id:"checkoutCartItem.coverInsurance",defaultMessage:"Accident insurance"})}return Object.assign({},n,{label:t})})},[n,X,a]),te=Object(ee.a)(n,"product.name",""),ae=(Object(ee.a)(n,"product.sku",""),Object(ee.a)(n,"product.stock_status","")),oe=Object(s.useMemo)(function(){var e=Object(ee.a)(n,"product.url_key",""),t=Object(ee.a)(n,"product.url_suffix","") 135return e?Object(w.a)("/"+e+t):null},[n]),le=Object(ne.d)(n),ue=Object(ne.c)(n),de=Object(ne.b)(n),he=Object(v.a)(),fe=r()(he,2)[1].addToast,ve=Object(s.useRef)(!0) 136Object(s.useEffect)(function(){return ve.current=!0,function(){ve.current=!1}},[]) 137var ye=p||Q 138Object(s.useEffect)(function(){ye&&ve.current&&fe({type:"error",icon:be,message:ye,dismissable:!0,timeout:7e3})},[fe,ye]) 139var we=n.lenses_qty,xe=le?null:we?c.a.createElement("div",{className:o.lensQuantity},0!==we.qty_left&&c.a.createElement("label",{className:o.lensQuantityRow},c.a.createElement("span",{className:o.lensQuantityLabel},c.a.createElement(d.a,{id:"product.leftLens",defaultMessage:"Left lens"})),c.a.createElement(k.b,{itemId:n.id,initialValue:we.qty_left,loading:t,min:0,max:99,error:E,onChange:function onChange(e){N(e,"qty_left")}})),0!==we.qty_right&&c.a.createElement("label",{className:o.lensQuantityRow},c.a.createElement("span",{className:o.lensQuantityLabel},c.a.createElement(d.a,{id:"product.rightLens",defaultMessage:"Right lens"})),c.a.createElement(k.b,{itemId:n.id,initialValue:we.qty_right,loading:t,min:0,max:99,error:E,onChange:function onChange(e){N(e,"qty_right")}}))):c.a.createElement(k.b,{itemId:n.id,initialValue:Object(ee.a)(n,"quantity",1),loading:t,min:0,max:de?99:10,error:_,onChange:T}),Ie=n.insurance&&n.insurance.is_applied?n.insurance:null,je=J.length>0||Boolean(K)||W.length>1,Ce=X.headline&&je?c.a.createElement("section",{className:o.lensBlock},c.a.createElement("button",{type:"button",className:o.lensHeader,onClick:function onClick(){F(function(e){return!e})},"aria-expanded":B},c.a.createElement(I.a,{src:g.a,size:18,classes:{root:o.lensIcon}}),c.a.createElement("span",{className:o.lensTitle},c.a.createElement(d.a,{id:"checkoutCartItem.details",defaultMessage:"Details"})),c.a.createElement(I.a,{src:b.a,size:18,classes:{root:B?o.chevron:o.chevronCollapsed}})),B&&c.a.createElement("div",{className:o.lensBody},J.length>0&&c.a.createElement("dl",{className:o.selectionList},J.map(function(e){return c.a.createElement("div",{className:o.selectionGroup,key:e.group||e.label||"other"},c.a.createElement("dt",{className:o.selectionLabel},e.label),c.a.createElement("dd",{className:o.selectionValues},e.rows.map(function(e){return c.a.createElement("span",{className:o.selectionRow,key:e.key},c.a.createElement("span",{className:o.selectionValue},e.value),c.a.createElement("span",{className:e.isIncluded?o.selectionIncluded:o.selectionPrice},e.isIncluded?c.a.createElement(d.a,{id:"checkoutCartItem.included",defaultMessage:"Included"}):c.a.createElement(O.a,{currencyCode:z.currency,value:e.price,discount:e.isDiscounted,totalDiscountPrice:e.wasPrice})))})))})),K&&c.a.createElement("div",{className:o.prescription},c.a.createElement("p",{className:o.prescriptionTitle},c.a.createElement(d.a,{id:"checkoutCartItem.prescription",defaultMessage:"Prescription"})),c.a.createElement("dl",{className:o.prescriptionList},Z.map(function(e){return c.a.createElement(c.a.Fragment,{key:e.key},c.a.createElement("dt",{className:o.prescriptionLabel},e.label),c.a.createElement("dd",{className:o.prescriptionValue},e.value))})),K.message&&c.a.createElement("p",{className:o.prescriptionMessage},K.message)),W.length>1&&c.a.createElement("div",{className:o.breakdown},c.a.createElement("p",{className:o.prescriptionTitle},c.a.createElement(d.a,{id:"checkoutCartItem.priceBreakdown",defaultMessage:"Price"})),c.a.createElement("dl",{className:o.breakdownList},W.map(function(e){return c.a.createElement(c.a.Fragment,{key:e.key},c.a.createElement("dt",{className:o.prescriptionLabel},e.label),c.a.createElement("dd",{className:o.breakdownValue},c.a.createElement(O.a,{currencyCode:z.currency,value:e.price,discount:e.isDiscounted,totalDiscountPrice:e.wasPrice})))}),c.a.createElement("dt",{className:o.breakdownTotalLabel},c.a.createElement(d.a,{id:"checkoutCartItem.lineTotal",defaultMessage:"Total"})),c.a.createElement("dd",{className:o.breakdownTotalValue},c.a.createElement(O.a,{currencyCode:z.currency,value:z.total})))))):null,ke="OUT_OF_STOCK"===ae?a({id:"product.outOfStock",defaultMessage:"Out-of-stock"}):"",Oe=$?c.a.createElement(j.a,{alt:te,classes:{root:o.imageRoot,image:o.image},width:240,resource:$}):c.a.createElement("span",{className:o.imageRoot,style:pe}) 140return c.a.createElement("li",{className:t?o.rootUpdating:o.root},c.a.createElement("div",{className:o.media},oe?c.a.createElement(m.b,{to:oe,className:o.imageLink},Oe):Oe),c.a.createElement("div",{className:o.body},c.a.createElement("div",{className:o.heading},c.a.createElement("div",{className:o.identity},c.a.createElement("span",{className:o.name},te),U&&c.a.createElement("span",{className:o.brand},U),Ie&&c.a.createElement("span",{className:o.insuredBadge},c.a.createElement(I.a,{src:h.a,size:14,classes:{root:o.insuredBadgeIcon}}),ue?c.a.createElement(d.a,{id:"checkoutCartItem.servicedBadge",defaultMessage:"Service included"}):c.a.createElement(d.a,{id:"checkoutCartItem.insuredBadge",defaultMessage:"Insured"}))),c.a.createElement("div",{className:o.quantity},xe),c.a.createElement("div",{className:o.rowTotal},c.a.createElement(O.a,{currencyCode:z.currency,value:z.total,discount:z.hasDiscount,totalDiscountPrice:z.wasTotal}))),ke&&c.a.createElement("p",{className:o.stockStatus},ke),D.length>0&&c.a.createElement("p",{className:o.variants},D.map(function(e,n){var t=0===n 141return c.a.createElement("span",{className:o.variant,key:e.label+e.value},t&&G&&c.a.createElement("span",{className:o.swatch,style:{background:G}}),t?e.value:c.a.createElement(d.a,{id:"checkoutCartItem.variantAttribute",defaultMessage:"{label} · {value}",values:{label:e.label,value:e.value}}))})),Ce,c.a.createElement("div",{className:o.actions},c.a.createElement(H,{insurance:n.insurance,handleToggleInsurance:S,handleUpdate
141CoverQuantity:P,coverLink:e.coverLink,parentQuantity:n.quantity,isUpdatingCover:L,isJustLens:ue,disabled:t||q}),c.a.createElement("button",{type:"button",className:o.removeButton,disabled:t,onClick:M},c.a.createElement(I.a,{src:f.a,size:16,classes:{root:o.actionIcon}}),c.a.createElement(d.a,{id:"product.remove",defaultMessage:"Remove"})))))} 142he.propTypes={item:l.object.isRequired,isCartUpdating:l.bool,setIsCartUpdating:l.func,cartData:l.object,classes:l.object} 143n.a=he},Q0Ao:function(e,n,t){"use strict" 144t.d(n,"a",function(){return m}),t.d(n,"c",function(){return p}),t.d(n,"b",function(){return g}) 145var a,r,o,i=t("VkAN"),s=t.n(i),c=t("VX74"),l=t("Sdjr"),u=t("s0i0"),d=t("KCL6"),m=Object(c.gql)(a||(a=s()(["\n mutation removeItem($cartId: String!, $itemId: Int!) {\n removeItemFromCart(input: { cart_id: $cartId, cart_item_id: $itemId }) {\n cart {\n id\n ...MiniCartFragment\n ...CartPageFragment\n ...AvailableShippingMethodsCartFragment\n }\n }\n }\n ","\n ","\n ","\n"])),l.a,u.a,d.a),p=Object(c.gql)(r||(r=s()(["\n mutation updateItemQuantity(\n $cartId: String!\n $itemId: Int!\n $quantity: Float!\n ) {\n updateCartItems(\n input: {\n cart_id: $cartId\n cart_items: [{ cart_item_id: $itemId, quantity: $quantity }]\n }\n ) {\n cart {\n id\n ...MiniCartFragment\n ...CartPageFragment\n ...AvailableShippingMethodsCartFragment\n }\n }\n }\n ","\n ","\n ","\n"])),l.a,u.a,d.a),g=Object(c.gql)(o||(o=s()(["\n mutation updateItemQuantity(\n $cartId: String!\n $itemId: Int!\n $qty_right: Float!\n $qty_left: Float!\n ) {\n updateContactLensesQtyPerEye(\n input: {\n cart_id: $cartId\n item_id: $itemId\n qty_right: $qty_right\n qty_left: $qty_left\n }\n ) {\n cart {\n id\n ...MiniCartFragment\n ...CartPageFragment\n ...AvailableShippingMethodsCartFragment\n }\n }\n }\n ","\n ","\n ","\n"])),l.a,u.a,d.a)},TsSr:function(e,n,t){"use strict" 146var a=t("q1tI"),r=t("i8i4"),o=t("17x9"),i=function Portal(e){var n=e.children,t=e.container,o=!globalThis.document,i=Object(a.useMemo)(function(){return o?null:t instanceof HTMLElement?t:document.getElementById("root")},[t,o]) 147return o?null:Object(r.createPortal)(n,i)} 148n.a=i,i.propTypes={children:o.node,container:o.object}},XvNS:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".orderNote-module-root-11J {\n display: grid;\n grid-row-gap: 8px;\n}\n\n.orderNote-module-counter-avy {\n resize: none;\n font-size: 12px;\n color: rgb(var(--venia-global-color-text));\n text-align: right;\n}\n",""]),n.locals={root:"orderNote-module-root-11J",counter:"orderNote-module-counter-avy"}},dsxs:function(e,n,t){"use strict" 149var a=t("lSNA"),r=t.n(a),o=t("J4zp"),i=t.n(o),s=t("q1tI"),c=t.n(s),l=t("i8i4"),u=t.n(l),d=t("/MKj"),m=t("OlZo"),p=t("17x9"),g=t("y1Xp"),b=t("wHH0"),h=t("iqKj"),f=t("LboF"),v=t.n(f),y=t("GN5e"),w=t.n(y),x={injectType:"singletonStyleTag",insert:"head",singleton:!0},I=(v()(w.a,x),w.a.locals||{}),j=t("dgmk"),C=t("TsSr"),k="modal",O=Object(s.createContext)(!1),_=function Modal(e){var n=e.showModal,t=e.title,a=e.onClose,o=e.children,l=e.className,p=Object(g.a)(I,e.classes),f=function useIsInsideModal(){return Object(s.useContext)(O)}(),v=Object(m.b)(),y=i()(v,2)[1].toggleDrawer,w=Object(d.d)(function(e){return e&&e.app?e.app.drawer:null}),x=Object(s.useRef)(a) 150x.current=a 151var _=Object(s.useCallback)(function(){x.current&&x.current(!1)},[]) 152Object(s.useEffect)(function(){if(n&&!f)return y(k),function(){y(null)}},[n,f,y]) 153var E=Object(s.useRef)(!1) 154if(Object(s.useEffect)(function(){n&&!f?w!==k?E.current&&(E.current=!1,_()):E.current=!0:E.current=!1},[n,f,w,_]),!n)return null 155var M=Object(h.a)(p.root_open_modal,r()({},p.root_nested,f),l) 156return u.a.createPortal(c.a.createElement(C.a,null,c.a.createElement(O.Provider,{value:!0},f?c.a.createElement("div",{"aria-hidden":"true",className:p.backdrop,onClick:_}):null,c.a.createElement("aside",{className:M},c.a.createElement("header",{className:p.modalHeader},t&&c.a.createElement("h1",{className:p.modalTitle},t),c.a.createElement("div",{className:p.closeModal,onClick:_},c.a.createElement(j.a,{src:b.a}))),c.a.createElement("div",{className:p.modalСontent},o)))),document.body)} 157_.propTypes={showModal:p.bool,title:p.node,onClose:p.func,children:p.node,className:p.string,classes:Object(p.shape)({root_open_modal:p.string,root_nested:p.string,backdrop:p.string,modalHeader:p.string,modalTitle:p.string,closeModal:p.string,modalСontent:p.string})} 158n.a=_},e9Xd:function(e,n,t){"use strict" 159var a,r=t("lSNA"),o=t.n(r),i=t("MVZn"),s=t.n(i),c=t("J4zp"),l=t.n(c),u=t("q1tI"),d=t.n(u),m=t("dDsW"),p=t("pVnL"),g=t.n(p),b=t("j7o3"),h=t("dgmk"),f=t("iqKj"),v={info:"toneInfo",success:"toneSuccess",warning:"toneWarning",error:"toneError"},y=d.a.memo(function ToggleSection(e){var n,t=e.id,a=e.title,r=e.isOpen,i=e.onToggle,s=e.classes,c=e.aria,l=e.badge,u=e.badgeTone,m=e.titleClass,p=e.children,y=!!l,w=s[v[u]||v.success],x=Object(f.a)(s.section,(n={},o()(n,s.sectionApplied,y),o()(n,w,y),n)),I=Object(f.a)(s.region,o()({},s.regionOpen,r)),j=Object(f.a)(s.chevron,o()({},s.chevronOpen,r)) 160return d.a.createElement("div",{className:x},d.a.createElement("button",g()({type:"button",id:t+"_toggle",className:s.header,onClick:i,"aria-expanded":r?"true":"false","aria-controls":t+"_region"},c),d.a.createElement(h.a,{classes:{root:j},src:b.a,size:18,"aria-hidden":"true"}),d.a.createElement("span",{className:m||s.toggleLabel},a),y?d.a.createElement("span",{className:s.badge},l):null),d.a.createElement("div",{id:t+"_region",className:I},d.a.createElement("div",{className:s.regionContent},p)))}),w=t("VkAN"),x=t.n(w),I=t("VX74"),j=t("9872"),C=t("ySXH"),k=Object(I.gql)(a||(a=x()(["\n query GetPriceAdjustmentsStatus($cartId: String!) {\n cart(cart_id: $cartId) {\n id\n customer_note\
160n # Identity for the signup events fired from this block: a guest has\n # none of this on the user context, but the cart carries it once\n # the checkout has an e-mail and a shipping address.\n email\n shipping_addresses {\n # street is the cache key for ShippingCartAddress (peregrine's\n # policies key it by street alone). Without it the normalizer\n # throws \"Missing field 'street' while computing key fields\" the\n # moment the cart actually has an address â which is what\n # signing in does, when the guest cart merges into the\n # customer's one.\n street\n telephone\n }\n applied_coupons {\n code\n }\n # The two consent flags the newsletter section renders. Server state\n # rather than a prop, so both channels survive a reload and the SMS\n # one â which nothing fed before â is no longer guessed.\n newsletter_subscribe\n sms_subscribe\n prices {\n discounts {\
160n label\n amount {\n currency\n value\n }\n }\n }\n }\n }\n"]))),O=function usePriceAdjustmentsStatus(){var e=Object(j.b)(),n=l()(e,1)[0].cartId,t=Object(I.useQuery)(k,{skip:!n,variables:{cartId:n},fetchPolicy:"cache-and-network",nextFetchPolicy:"cache-first",errorPolicy:"all"}),a=t.data,r=t.loading,o=t.error,i=Object(u.useMemo)(function(){var e=Object(C.a)(a,"cart.applied_coupons",null) 161return Array.isArray(e)?e.filter(Boolean):[]},[a]),s=Object(u.useMemo)(function(){if(!i.length)return null 162var e=Object(C.a)(a,"cart.prices.discounts",null) 163if(!Array.isArray(e)||1!==e.length)return null 164var n=Object(C.a)(e,"0.amount",null) 165return n&&"number"==typeof n.value?n:null},[a,i]),c=(Object(C.a)(a,"cart.customer_note","")||"").trim(),d=Object(C.a)(a,"cart.email","")||"",m=Object(C.a)(a,"cart.shipping_addresses.0.telephone","")||"",p=Object(C.a)(a,"cart.newsletter_subscribe",null),g=Object(C.a)(a,"cart.sms_subscribe",null) 166return{appliedCoupons:i,couponDiscount:s,orderNote:c,cartEmail:d,cartPhone:m,newsletterSubscribed:p,smsSubscribed:g,loading:r,error:o}},_=t("LboF"),E=t.n(_),M=t("IeEq"),T=t.n(M),N={injectType:"singletonStyleTag",insert:"head",singleton:!0},A=(E()(T.a,N),T.a.locals||{}),S=t("X5qW"),P=t("+vrd"),q=t("xPyZ"),L=t.n(q),Q={injectType:"singletonStyleTag",insert:"head",singleton:!0},R=(E()(L.a,Q),L.a.locals||{}),V=t("17x9"),B=t("wHH0"),F=function AppliedChip(e){var n=e.label,t=e.value,a=e.onRemove,r=e.disabled,o=e.removeAriaLabel 167return d.a.createElement("div",{className:R.chip},d.a.createElement("span",{className:R.main},d.a.createElement("span",{className:R.label},n),t?d.a.createElement("span",{className:R.value},t):null),a?d.a.createElement("button",{type:"button",className:R.removeButton,onClick:a,disabled:!!r,"aria-label":o},d.a.createElement(h.a,{classes:{root:R.removeIcon},src:B.a,size:16})):null)} 168F.propTypes={label:V.node.isRequired,value:V.node,onRemove:V.func,disabled:V.bool,removeAriaLabel:V.string} 169var $,U,H,D,G,z=d.a.memo(F),X=t("iStd"),J=t("Lo79"),K=t.n(J),Z={injectType:"singletonStyleTag",insert:"head",singleton:!0},W=(E()(K.a,Z),K.a.locals||{}),Y=t("o0o1"),ee=t.n(Y),ne=t("yXPU"),te=t.n(ne),ae=t("W9vc"),re=t("J3e4"),oe=t("NPhT"),ie=Object(I.gql)($||($=x()(["\n mutation ApplyCouponToCart($cartId: String!, $coupon: String!) {\n applyCouponToCart(input: { cart_id: $cartId, coupon_code: $coupon }) {\n cart {\n id\n applied_coupons {\n code\n }\n ...PriceSummaryFragment\n }\n }\n }\n ","\n"])),ae.a),se=Object(I.gql)(U||(U=x()(["\n mutation RemoveCouponFromCart($cartId: String!) {\n removeCouponFromCart(input: { cart_id: $cartId }) {\n cart {\n id\n applied_coupons {\n code\n }\n ...PriceSummaryFragment\n }\n }\n }\n ","\n"])),ae.a),ce=function useCoupon(e){var n=(e||{}).setIsCartUpdating,t=Object(j.b)(),a=l()(t,1)[0].cartId,r=Object(u.useState)(""),o=l()(r,2),i=o[0],s=o[1],c=Object(re.a)(),d=l()(c,2)[1].addToast,p=Object(m.a)().formatMessage,g=O(),b=g.appliedCoupons,h=g.couponDiscount,f=Object(I.useMutation)(ie),v=l()(f,2),y=v[0],w=v[1],x=w.loading,C=w.error,k=Object(I.useMutation)(se),_=l()(k,2),E=_[0],M=_[1],T=M.loading,N=M.error,A=Object(u.useCallback)(function(e){e&&e.target&&s(e.target.value)},[]),S=Object(u.useCallback)(te()(ee.a.mark(function _callee(){return ee.a.wrap(function _callee$(e){for(;;)switch(e.prev=e.next){case 0:if(a&&i){e.next=2 170break}return e.abrupt("return") 171case 2:return n&&n(!0),e.prev=3,e.next=6,y({variables:{cartId:a,coupon:i}}) 172case 6:d({type:"success",message:p({id:"coupon.couponApplied",defaultMessage:"Coupon applied"}),dismissable:!0,timeout:3e3}),Object(oe.a)({coupon:i,result:"applied"},"APPLY_COUPON"),e.next=14 173break 174case 10:e.prev=10,e.t0=e.catch(3),Object(oe.a)({coupon:i,result:"rejected"},"APPLY_COUPON"),d({type:"error",message:p({id:"coupon.couponApplyError",defaultMessage:"Invalid coupon code"}
174),dismissable:!0,timeout:5e3}) 175case 14:return e.prev=14,n&&n(!1),e.finish(14) 176case 17:case"end":return e.stop()}},_callee,null,[[3,10,14,17]])})),[y,a,i,n,d,p]),P=Object(u.useCallback)(te()(ee.a.mark(function _callee2(){var e 177return ee.a.wrap(function _callee2$(t){for(;;)switch(t.prev=t.next){case 0:if(a){t.next=2 178break}return t.abrupt("return") 179case 2:return n&&n(!0),e=b.length?b[0].code:i,t.prev=4,t.next=7,E({variables:{cartId:a}}) 180case 7:Object(oe.a)({coupon:e},"REMOVE_COUPON"),s(""),d({type:"info",message:p({id:"coupon.couponRemoved",defaultMessage:"Coupon removed"}),dismissable:!0,timeout:3e3}),t.next=14 181break 182case 12:t.prev=12,t.t0=t.catch(4) 183case 14:return t.prev=14,n&&n(!1),t.finish(14) 184case 17:case"end":return t.stop()}},_callee2,null,[[4,12,14,17]])})),[E,a,b,i,n,d,p]),q=x||T,L=Object(u.useMemo)(function(){return C||N},[C,N]) 185return{value:i,onChange:A,onApply:S,onRemove:P,loading:q,error:L,appliedCoupons:b,couponDiscount:h}},le=d.a.memo(function Coupon(e){var n=ce({setIsCartUpdating:e&&e.setIsCartUpdating}),t=n.value,a=n.onChange,r=n.onApply,o=n.onRemove,i=n.loading,s=n.error,c=n.appliedCoupons,l=n.couponDiscount,u=Object(m.a)().formatMessage,p=e&&!1!==e.showLabel 186return!(!c||!c.length)?d.a.createElement("div",{className:W.root},d.a.createElement("div",{className:R.wrapper},c.map(function(e){return d.a.createElement(z,{key:e.code,label:e.code,value:l?d.a.createElement(P.a,{value:-Math.abs(l.value),currencyCode:l.currency}):null,onRemove:o,disabled:i,removeAriaLabel:u({id:"couponCode.removeButton",defaultMessage:"Remove"})})})),s&&d.a.createElement("div",{role:"alert",className:X.a.errorText},s.message||String(s))):d.a.createElement("div",{className:W.root},p&&d.a.createElement("label",{htmlFor:"coupon_input",className:X.a.labelBase},u({id:"cartPage.couponCode",defaultMessage:"Coupon Code"})),d.a.createElement("input",{id:"coupon_input",type:"text",value:t||"",onChange:a,placeholder:u({id:"couponCode.enterCode",defaultMessage:"Enter code"}),disabled:i,"aria-label":u({id:"cartPage.couponCode",defaultMessage:"Coupon Code"}),className:X.a.inputBase}),s&&d.a.createElement("div",{role:"alert",className:X.a.errorText},s.message||String(s)),d.a.createElement("div",{className:X.a.actionsRow},d.a.createElement(S.a,{type:"button",onClick:r,disabled:i||!t},u(i?{id:"couponCode.applying",defaultMessage:"Applying..."}:{id:"couponCode.apply",defaultMessage:"Apply"}))))}),ue=t("mL65"),de=t.n(ue),me={injectType:"singletonStyleTag",insert:"head",singleton:!0},pe=(E()(de.a,me),de.a.locals||{}),ge=t("FITH"),be=t("y1Xp"),he=t("/MKj"),fe=t("Kpgh"),ve=t("FvCY"),ye=function useGiftPoints(e){var n=e||{},t=n.setIsCartUpdating,a=n.setIsGiftpointsVisible,r=Object(re.a)(),o=l()(r,2)[1].addToast,i=Object(m.a)().formatMessage,s=Object(ge.b)(),c=l()(s,1)[0].isSignedIn,d=Object(be.a)(ve.c,e&&e.operations),p=d.applyCreditMutation,g=d.cancelCreditMutation,b=d.getCartCredit,h=Object(I.useMutation)(p,{refetchQueries:["GetCartBalanceUse","getPriceSummary"],awaitRefetchQueries:!0}),f=l()(h,2),v=f[0],y=f[1],w=y.loading,x=y.error,j=y.called,k=Object(I.useMutation)(g,{refetchQueries:["GetCartBalanceUse","getPriceSummary"],awaitRefetchQueries:!0}),O=l()(k,2),_=O[0],E=O[1],M=E.loading,T=E.error,N=E.called,A=Object(I.useQuery)(b,{fetchPolicy:"cache-and-network",nextFetchPolicy:"cache-first",skip:!c}).data,S=Object(u.useState)(!1),P=l()(S,2),q=P[0],L=P[1],Q=Object(u.useMemo)(function(){var e=Object(C.a)(A,"getCartBalanceUse.creditAmount",0) 187return Math.round(e)},[A]),R=Object(u.useMemo)(function(){var e=Object(C.a)(A,"getCartBalanceUse.creditAmountUsed",0) 188return Math.round(e)},[A]),V=Object(u.useState)(R),B=l()(V,2),F=B[0],$=B[1],U=Object(u.useState)(0),H=l()(U,2),D=H[0],G=H[1],z=Object(he.c)(),X=Object(he.d)(function(e){return Object(C.a)(e,"giftpointsDiscount.totalPrice",0)}) 189Object(u.useEffect)(function(){null!=R&&(L(!0),z(fe.a.setValue({giftpointsDiscountValue:R})),$(R),G(0),R>0&&a&&a(!0),L(!1))},[R,z]),Object(u.useEffect)(function(){(j||N||q)&&t&&t(w||M||q)},[t,j,N,w,M,q]) 190var J=Object(u.useCallback)(function(e){try{if(!e)return"" 191var n=String(e).replace(/\D/g,"") 192if(!n)return"" 193var t=Math.round(parseFloat(n)) 194if(isNaN(t)||t<0)return 0 195var a=Q-(F||0),r=Math.min(a,X||0) 196return t>r?r:t}catch(e){return 0}},[Q,X,F]),K=Object(u.useMemo)(function(){return(Q||0)-(F||0)},[Q,F]),Z=Object(u.useCallback)(function(e){if(e&&e.target){var n=J(e.target.value) 197G(n)}},[J]),W=Object(u.useCallback)(te()(ee.a.mark(function _callee(){var e,n,t 198return ee.a.wrap(function _callee$(a){for(;;)switch(a.prev=a.next){case 0:if(D&&!w){a.next=2 199break}return a.abrupt("return") 200case 2:if(e=Math.round(parseFloat(D)),!(isNaN(e)||e<=0)){a.next=5 201break}return a.abrupt("return") 202case 5:return a.prev=5,L(!0),n=F?Math.round(parseFloat(F+e)):e,a.next=10,v({variables:{creditAmount:n}}) 203case 10:(t=a.sent)&&t.data&&(z(fe.a.setValue({giftpointsDiscountValue:n})),$(n),G(0),o({type:"success",message:i({id:"giftpoints.pointsApplied",defaultMessage:"Gift points applied"}),dismissable:!0,timeout:3e3}),Object(oe.a)({amount:e},"APPLY_GIFT_POINTS")),a.next=17 204break 205case 14:a.prev=14,a.t0=a.catch(5) 206case 17:return a.prev=17,L(!1),a.finish(17) 207case 20:case"end":return a.stop()}},_callee,null,[[5,14,17,20]])})),[D,w,v,z,F,o,i]),Y=Object(u.useCallback)(te()(ee.a.mark(function _callee2(){var e 208return ee.a.wrap(function _callee2$(n){for(;;)switch(n.prev=n.next){case 0:if(null!=F&&0!==F){n.next=2 209break}return n.abrupt("return") 210case 2:return n.prev=2,L(!0),n.next=6,_({variables:{creditAmount:parseFloat(F)}})
211case 6:e=n.sent,Object(C.a)(e,"data.cancelCreditFromCart",!1)&&(z(fe.a.setValue({giftpointsDiscountValue:0})),Object(oe.a)({amount:parseFloat(F)},"REMOVE_GIFT_POINTS"),$(0),G(0),o({type:"info",message:i({id:"giftpoints.pointsCanceled",defaultMessage:"Gift points removed"}),dismissable:!0,timeout:3e3})),n.next=14 212break 213case 11:n.prev=11,n.t0=n.catch(2) 214case 14:return n.prev=14,L(!1),n.finish(14) 215case 17:case"end":return n.stop()}},_callee2,null,[[2,11,14,17]])})),[F,_,z,o,i]) 216return{value:D,onChange:Z,onApply:W,onCancel:Y,loading:w||M||q,error:x||T,balance:K,appliedAmount:F||0}},we=d.a.memo(function GiftPoints(e){var n=ye({setIsCartUpdating:Object(C.a)(e,"setIsCartUpdating"),setIsGiftpointsVisible:Object(C.a)(e,"setIsGiftpointsVisible")}),t=n.value,a=n.onChange,r=n.onApply,o=n.onCancel,i=n.loading,s=n.error,c=n.balance,l=n.appliedAmount,p=Object(m.a)().formatMessage,g=Object(C.a)(e,"showLabel",!0),b=Object(C.a)(e,"onAppliedAmountChange") 217Object(u.useEffect)(function(){"function"==typeof b&&b(Number(l)||0)},[l,b]) 218var h=Object(u.useMemo)(function(){if(!s)return null 219var e=Object(C.a)(s,"message",""),n=Object(C.a)(s,"graphQLErrors",[]) 220if(n.length>0){var t=Object(C.a)(n,"0.message","") 221if(t)return t}return e||p({id:"giftpoints.errorGeneric",defaultMessage:"Failed to apply gift points. Please try again."})},[s,p]) 222return d.a.createElement("div",{className:pe.root},g&&d.a.createElement("div",{className:X.a.labelBase},p({id:"giftpointsPage.balanceLabel",defaultMessage:"Gift points available: "}),c),l>0&&d.a.createElement("div",{className:R.wrapper},d.a.createElement(z,{label:p({id:"giftpoints.appliedCoupon",defaultMessage:"Credits"}),value:l,onRemove:o,disabled:i,removeAriaLabel:p({id:"giftpoints.removeCredits",defaultMessage:"Remove credits"})})),d.a.createElement("div",{className:pe.inputWrapper},d.a.createElement("input",{type:"number",value:t||"",onChange:a,placeholder:p({id:"giftpoints.inputPlaceholder",defaultMessage:"Enter gift points amount"}),inputMode:"numeric",pattern:"[0-9]*",disabled:i,className:X.a.inputBase}),h&&d.a.createElement("div",{role:"alert",className:X.a.errorText},h),d.a.createElement("div",{className:pe.actionsRow},l>0&&d.a.createElement(S.a,{type:"button",onClick:o,disabled:i},p({id:"giftpoints.cancel",defaultMessage:"Cancel"})),d.a.createElement(S.a,{type:"button",onClick:r,disabled:i},p(i?{id:"giftpoints.applying",defaultMessage:"Applying..."}:{id:"giftpoints.apply",defaultMessage:"Apply"})))))}),xe=t("DmjF"),Ie=Object(I.gql)(H||(H=x()(["\n mutation newsletterSubscribe($cartId: String!, $value: Boolean!) {\n newsletterSubscribe(cartId: $cartId, value: $value) {\n id\n newsletter_subscribe\n }\n }\n"]))),je=Object(I.gql)(D||(D=x()(["\n mutation smsSubscribe($cartId: String!, $value: Boolean!) {\n smsSubscribe(cartId: $cartId, value: $value) {\n id\n sms_subscribe\n }\n }\n"]))),Ce={newsletter:{in:"NEWSLETTER_OPT_IN",out:"NEWSLETTER_OPT_OUT"},sms:{in:"SMS_OPT_IN",out:"SMS_OPT_OUT"}},ke={newsletter:{in:{id:"newsletter.subscribed",defaultMessage:"Subscribed to newsletter"},out:{id:"newsletter.unsubscribed",defaultMessage:"Unsubscribed from newsletter"}},sms:{in:{id:"newsletter.smsSubscribed",defaultMessage:"Subscribed to SMS"},out:{id:"newsletter.smsUnsubscribed",defaultMessage:"Unsubscribed from SMS"}}},Oe=function useCartMarketingConsents(e){var n=e||{},t=n.setIsCartUpdating,a=n.initialChecked,r=n.signupSource,o=Object(j.b)(),i=l()(o,1)[0].cartId,s=Object(ge.b)(),c=l()(s,1)[0].currentUser,d=Object(re.a)(),p=l()(d,2)[1].addToast,g=Object(m.a)().formatMessage,b=r||"cart",h=O(),f=h.cartEmail,v=h.cartPhone,y=h.newsletterSubscribed,w=h.smsSubscribed,x=Object(C.a)(c,"email","")||f,k=v,_=void 0===a||!!a,E=Object(u.useState)(_),M=l()(E,2),T=M[0],N=M[1],A=Object(u.useState)(_),S=l()(A,2),P=S[0],q=S[1],L=Object(u.useRef)({newsletter:!1,sms:!1}) 223Object(u.useEffect)(function(){L.current.newsletter||"boolean"==typeof y&&N(y)},[y]),Object(u.useEffect)(function(){L.current.sms||"boolean"==typeof w&&q(w)},[w]) 224var Q=Object(u.useRef)({newsletter:{in:!1,out:!1},sms:{in:!1,out:!1}}),R=Object(I.useMutation)(Ie),V=l()(R,2),B=V[0],F=V[1],$=F.loading,U=F.error,H=Object(I.useMutation)(je),D=l()(H,2),G=D[0],z=D[1],X=z.loading,J=z.error,K=Object(u.useCallback)(function(e,n,t){var a=n?"in":"out" 225if(!Q.current[e][a]){Q.current[e][a]=!0 226var r=Ce[e][a] 227Object(oe.a)(t,r)}},[]),Z=Object(u.useCallback)(function(){var e=te()(ee.a.mark(function _callee(e,n,a){var r 228return ee.a.wrap(function _callee$(o){for(;;)switch(o.prev=o.next){case 0:if(i){o.next=2 229break}return o.abrupt("return") 230case 2:return t&&t(!0),r="sms"===e?G:B,o.prev=4,o.next=7,r({variables:{cartId:i,value:n}}) 231case 7:K(e,n,{email:x,phone:k,signup_source:b}),p({type:n?"success":"warning",message:g(ke[e][n?"in":"out"]),dism
231issable:!0,timeout:3e3}),o.next=14 232break 233case 11:o.prev=11,o.t0=o.catch(4),a&&a() 234case 14:return o.prev=14,t&&t(!1),o.finish(14) 235case 17:case"end":return o.stop()}},_callee,null,[[4,11,14,17]])})) 236return function(n,t,a){return e.apply(this,arguments)}}(),[i,B,G,t,p,g,K,x,k,b]),W=function readNext(e,n){return"boolean"==typeof e?e:e&&e.target?!!e.target.checked:!n},Y=Object(u.useCallback)(function(){var e=te()(ee.a.mark(function _callee2(e){var n,t 237return ee.a.wrap(function _callee2$(a){for(;;)switch(a.prev=a.next){case 0:return t=W(e,n=T),L.current.newsletter=!0,N(t),a.next=6,Z("newsletter",t,function(){N(n)}) 238case 6:case"end":return a.stop()}},_callee2)})) 239return function(n){return e.apply(this,arguments)}}(),[T,Z]),ne=Object(u.useCallback)(function(){var e=te()(ee.a.mark(function _callee3(e){var n,t 240return ee.a.wrap(function _callee3$(a){for(;;)switch(a.prev=a.next){case 0:return t=W(e,n=P),L.current.sms=!0,q(t),a.next=6,Z("sms",t,function(){q(n)}) 241case 6:case"end":return a.stop()}},_callee3)})) 242return function(n){return e.apply(this,arguments)}}(),[P,Z]) 243return{checked:T,smsChecked:P,onToggle:Y,onToggleSms:ne,loading:!!$,smsLoading:!!X,error:U,smsError:J}},_e=d.a.memo(function CartMarketingConsents(e){var n=Oe({setIsCartUpdating:e&&e.setIsCartUpdating,initialChecked:e&&e.initialChecked,signupSource:e&&e.signupSource}),t=n.checked,a=n.smsChecked,r=n.onToggle,o=n.onToggleSms,i=n.loading,s=n.smsLoading,c=n.error,l=n.smsError 244return d.a.createElement(xe.a,{email:{checked:t,onChange:r,disabled:i},sms:{checked:a,onChange:o,disabled:s},error:c||l})}),Ee=t("XvNS"),Me=t.n(Ee),Te={injectType:"singletonStyleTag",insert:"head",singleton:!0},Ne=(E()(Me.a,Te),Me.a.locals||{}),Ae=Object(I.gql)(G||(G=x()(["\n mutation orderComment($cartId: String!, $comment: String!) {\n orderComment(cartId: $cartId, comment: $comment) {\n id\n customer_note\n }\n }\n"]))),Se=function useOrderNote(e){var n=e||{},t=n.setIsCartUpdating,a=n.initialValue,r=Object(j.b)(),o=l()(r,1)[0].cartId,i=Object(u.useState)(a||""),s=l()(i,2),c=s[0],d=s[1],p=Object(u.useState)(!1),g=l()(p,2),b=g[0],h=g[1],f=Object(re.a)(),v=l()(f,2)[1].addToast,y=Object(m.a)().formatMessage,w=O().orderNote,x=Object(I.useMutation)(Ae),k=l()(x,2),_=k[0],E=k[1],M=E.loading,T=E.error,N=(c||"").trim(),A=Object(u.useCallback)(function(e){e&&e.target&&(h(!0),d(e.target.value))},[]),S=!M&&!!N&&N!==w,P=!(M||!N&&!w),q=Object(u.useMemo)(function(){return!b||N?"":y({id:"orderNote.emptyError",defaultMessage:"Write a comment before saving."})},[b,N,y]),L=Object(u.useCallback)(te()(ee.a.mark(function _callee(){var e,n,a 245return ee.a.wrap(function _callee$(r){for(;;)switch(r.prev=r.next){case 0:if(e=c,d(""),h(!1),o){r.next=5 246break}return r.abrupt("return") 247case 5:return t&&t(!0),r.prev=6,r.next=9,_({variables:{cartId:o,comment:" "},update:function update(e,n){var t=Object(C.a)(n,"data.orderComment",null) 248if(t&&!(t.customer_note||"").trim()){var a=e.identify(t) 249a&&e.modify({id:a,fields:{customer_note:function customer_note(){return""}}})}}}) 250case 9:if(n=r.sent,!(a=(Object(C.a)(n,"data.orderComment.customer_note","")||"").trim())){r.next=15 251break}return d(a),v({type:"error",message:y({id:"orderNote.clearFailed",defaultMessage:"The comment could not be removed. Please try again."}),dismissable:!0,timeout:5e3}),r.abrupt("return") 252case 15:v({type:"info",message:y({id:"orderNote.commentCleared",defaultMessage:"Comment cleared"}),dismissable:!0,timeout:3e3}),r.next=21 253break 254case 18:r.prev=18,r.t0=r.catch(6),d(e) 255case 21:return r.prev=21,t&&t(!1),r.finish(21) 256case 24:case"end":return r.stop()}},_callee,null,[[6,18,21,24]])})),[_,o,c,t,v,y]),Q=Object(u.useCallback)(te()(ee.a.mark(function _callee2(){var e 257return ee.a.wrap(function _callee2$(n){for(;;)switch(n.prev=n.next){case 0:if(o&&S){n.next=2 258break}return n.abrupt("return") 259case 2:return d(N),t&&t(!0),n.prev=4,n.next=7,_({variables:{cartId:o,comment:N}}) 260case 7:e=n.sent,v({type:e&&e.data?"success":"info",message:y({id:"orderNote.commentAdded",defaultMessage:"Comment added"}),dismissable:!0,timeout:3e3}),n.next=13 261break 262case 11:n.prev=11,n.t0=n.catch(4) 263case 13:return n.prev=13,t&&t(!1),n.finish(13) 264case 16:case"end":return n.stop()}},_callee2,null,[[4,11,13,16]])})),[_,o,S,N,t,v,y])
265return{value:c,onChange:A,onClear:L,onSubmit:Q,canSubmit:S,canClear:P,validationMessage:q,loading:M,error:T}},Pe=d.a.memo(function OrderNote(e){var n=Se({setIsCartUpdating:e&&e.setIsCartUpdating,initialValue:e&&e.initialValue}),t=n.value,a=n.onChange,r=n.onClear,o=n.onSubmit,i=n.canSubmit,s=n.canClear,c=n.validationMessage,l=n.error,u=e&&e.maxLength,p=e&&!1!==e.showLabel,g=Object(m.a)().formatMessage,b=Object(f.b)(X.a.inputBase,X.a.textareaBase,Ne.textarea) 266return d.a.createElement("div",{className:Ne.root},p&&d.a.createElement("label",{htmlFor:"order_note_input",className:X.a.labelBase},g({id:"comment.commentOrder",defaultMessage:"Comment order"})),d.a.createElement("textarea",{id:"order_note_input",value:t||"",onChange:a,maxLength:u||1e3,placeholder:g({id:"orderNote.placeholder",defaultMessage:"Write a comment for your order"}),className:b,"aria-invalid":c?"true":"false","aria-describedby":c?"order_note_error":void 0}),d.a.createElement("div",{className:Ne.counter},t&&t.length||0,"/",u||1e3),c&&d.a.createElement("div",{id:"order_note_error",role:"alert",className:X.a.errorText},c),l&&d.a.createElement("div",{role:"alert",className:X.a.errorText},l.message||String(l)),d.a.createElement("div",{className:X.a.actionsRow},d.a.createElement(S.a,{type:"button",priority:"low",onClick:r,disabled:!s},g({id:"orderNote.clear",defaultMessage:"Clear"})),d.a.createElement(S.a,{type:"button",onClick:o,disabled:!i},g({id:"comment.sendComment",defaultMessage:"Save"}))))}) 267n.a=d.a.memo(function PriceAdjustments(e){var n=e.sections,t=void 0===n?{coupon:!0,giftPoints:!0,newsletter:!0,orderNote:!0}:n,a=e.labels,r=void 0===a?{coupon:!0,giftPoints:!0,orderNote:!0}:a,i=e.isSignedIn,c=e.signupSource,p=Object(m.a)().formatMessage,g=Object(u.useState)({coupon:!1,giftPoints:!1,newsletter:!1,orderNote:!1}),b=l()(g,2),h=b[0],f=b[1],v=Object(u.useCallback)(function(e){return function(){f(function(n){return s()({},n,o()({},e,!n[e]))})}},[]),w=O(),x=w.appliedCoupons,I=w.orderNote,j=Object(u.useState)(0),C=l()(j,2),k=C[0],_=C[1],E=x&&x.length?x[0].code:"",M={coupon:!!E,giftPoints:k>0,orderNote:!!I},T=Object(u.useRef)(M) 268Object(u.useEffect)(function(){var e=T.current,n=Object.keys(M).filter(function(n){return M[n]&&!e[n]}) 269T.current=M,n.length&&f(function(e){var t=s()({},e),a=!1 270return n.forEach(function(e){t[e]&&(t[e]=!1,a=!0)}),a?t:e})},[M.coupon,M.giftPoints,M.orderNote]) 271var N=E||null,S=k>0?p({id:"priceAdjustments.giftPointsBadge",defaultMessage:"{amount} applied"},{amount:k}):null,P=I?p({id:"priceAdjustments.savedBadge",defaultMessage:"Saved"}):null,q="string"==typeof e.initialOrderNote&&e.initialOrderNote?e.initialOrderNote:I 272return d.a.createElement("div",{className:A.root},t.coupon&&d.a.createElement(y,{id:"coupon",title:p({id:"priceAdjustments.couponCode",defaultMessage:"Enter Coupon Code"}),isOpen:h.coupon,onToggle:v("coupon"),badge:N,badgeTone:"success",classes:A},h.coupon&&d.a.createElement(le,{setIsCartUpdating:e&&e.setIsCartUpdating,showLabel:!1!==r.coupon})),t.giftPoints&&i&&d.a.createElement(y,{id:"giftpoints",title:p({id:"priceAdjustments.giftpoints",defaultMessage:"Use gift points"}),isOpen:h.giftPoints,onToggle:v("giftPoints"),badge:S,badgeTone:"success",classes:A},d.a.createElement(we,{setIsCartUpdating:e&&e.setIsCartUpdating,showLabel:!1!==r.giftPoints,onAppliedAmountChange:_})),t.newsletter&&d.a.createElement(y,{id:"newsletter",title:p({id:"cartPage.newsletter",defaultMessage:"Newsletter and SMS"}),isOpen:h.newsletter,onToggle:v("newsletter"),titleClass:A.toggleLabelPlain,classes:A},d.a.createElement(_e,{setIsCartUpdating:e&&e.setIsCartUpdating,initialChecked:e&&e.initialNewsletterChecked,signupSource:c})),t.orderNote&&d.a.createElement(y,{id:"order_note",title:p({id:"comment.commentOrder",defaultMessage:"Comment order"}),isOpen:h.orderNote,onToggle:v("orderNote"),badge:P,badgeTone:"info",classes:A},h.orderNote&&d.a.createElement(Pe,{setIsCartUpdating:e&&e.setIsCartUpdating,initialValue:q,showLabel:!1!==r.orderNote})))})},gDcD:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".insuranceToggle-root-1C8 {\n display: inline-flex;
272\n align-items: center;\n gap: var(--space-xs);\n}\n\n.insuranceToggle-button-5Fw {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n padding: var(--space-xs) var(--space-sm);\n background: none;\n border: 1px solid rgb(var(--venia-global-color-border));\n border-radius: var(--global-border-radius-xs);\n cursor: pointer;\n color: inherit;\n font: inherit;\n}\n\n/* The same status tokens the global `.badge-green` uses (see\n src/styles/global/components/badge.css), so the applied state answers the\n badge at the top of the card. */\n.insuranceToggle-buttonApplied-2YH {\n border-color: var(--color-status-success);\n background: var(--color-status-success-bg);\n color: var(--color-status-success);\n}\n\n/* Grey on green reads as an accident, so the price joins the state. */\n.insuranceToggle-buttonApplied-2YH .insuranceToggle-price-kxV {\n color: inherit;\n}\n\n.insuranceToggle-button-5Fw:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.insuranceToggle-icon-3S- {\n display: flex;\n}\n\n/* venia's Icon paints its glyph from `--stroke`, which nothing on the checkout\n sets â so the shield came out in the default text colour while the label\n beside it was green. `currentColor` makes both follow the button's own state,\n which matters twice as much now that a tick sits inside the shield: two\n glyphs in two different colours would read as a mistake. */\n.insuranceToggle-icon-3S- svg,\n.insuranceToggle-shieldCheck-38c svg {\n stroke: currentColor;\n}\n\n/* feather has no shield-with-check, so the tick is drawn inside the shield. */\n.insuranceToggle-shieldMark-3ua {\n position: relative;\n display: inline-flex;\n flex: none;\n}\n\n/* 45% and not 50%: the shield's enclosed area sits above the glyph's geometric\n centre, so a centred tick would ride on the pointed bottom edge. */\n.insuranceToggle-shieldCheck-38c {\n position: absolute;\n left: 50%;\n top: 45%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n\n.insuranceToggle-label-2nN {\n white-space: nowrap;\n}\n\n.insuranceToggle-price-kxV {\n color: rgb(var(--venia-global-color-text-alt));\n white-space: nowrap;\n}\n\n/* Price paints its own black over the button state; the digits must follow\n the button â grey when off, green when applied. */\n.insuranceToggle-price-kxV * {\n font-size: var(--te-text-body-md);\n line-height: inherit;\n min-height: 0;\n color: inherit;\n}\n\n.insuranceToggle-info-tsZ {\n display: inline-flex;\n align-items: center;\n padding: var(--space-xs);\n background: none;\n border: none;\n cursor: pointer;\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n.insuranceToggle-visuallyHidden-2Gz {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n@media (max-width: 640px) {\n /* Takes a full row inside .actions, so the label has room to wrap instead\n of pushing the price out of the card. */\n .insuranceToggle-root-1C8 {\n display: flex;\n width: 100%;\n }\n\n /* .buttonApplied composes .button, so both states get this. */\n .insuranceToggle-button-5Fw {\n flex: 1;\n min-height: 2.75rem;\n padding: var(--space-xs) var(--space-sm);\n }\n\n .insuranceToggle-label-2nN {\n white-space: normal;\n text-align: left;\n }\n\n /* The button holds icon + label + price; only the price goes to the far\n edge, the icon stays next to the text it belongs to. */\n .insuranceToggle-price-kxV {\n margin-left: auto;\n padding-left: var(--space-sm);\n }\n}\n\n/* The bare toggle keeps its inline row; only the panel state grows. */\n.insuranceToggle-row-3zQ {\n display: contents;\n}\n\n/* Applied cover with a quantity to choose (or a surplus to resolve): the\n toggle and the +/- grow one card, in the same language as the\n PriceAdjustments sections â tinted success surface, 12px radius, inset\n outline that never changes the box. */\n.insuranceToggle-panel-12x {\n width: 100%;\n display: grid;\n gap: var(--space-xs);\n padding: var(--space-sm) var(--space-md);\n border-radius: 12px;\n background: var(--color-status-success-bg);\n box-shadow: inset 0 0 0 1px var(--color-status-success);\n}\n\n.insuranceToggle-panelHeader-2v2 {\n display: flex;
272\n align-items: center;\n gap: var(--space-xs);\n}\n\n/* Inside the tinted panel the toggle is a row, not a boxed button â the panel\n itself already carries the applied state. Still a button: tapping it opts\n out, exactly like the boxed state does. */\n.insuranceToggle-buttonInPanel-2D4 {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n flex: 1;\n min-width: 0;\n padding: var(--space-xs) 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--color-status-success);\n font: inherit;\n text-align: left;\n}\n\n.insuranceToggle-buttonInPanel-2D4:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.insuranceToggle-buttonInPanel-2D4 .insuranceToggle-price-kxV {\n color: inherit;\n margin-left: auto;\n padding-left: var(--space-sm);\n}\n\n.insuranceToggle-buttonInPanel-2D4 .insuranceToggle-label-2nN {\n white-space: normal;\n}\n\n/* Label left, control right â one readable row instead of a stepper floating\n on its own under the actions. */\n.insuranceToggle-quantityRow-2Aj {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n.insuranceToggle-quantityLabel-2Xo {\n font-size: var(--te-text-body-md);\n color: var(--te-brand-color-black);\n}\n\n.insuranceToggle-quantityControl-1MY {\n display: inline-flex;\n align-items: center;\n gap: var(--space-xs);\n}\n\n/* \"of 2\": the cap, said out loud next to the stepper. */\n.insuranceToggle-quantityMax-15b {\n font-size: var(--te-text-body-md);\n color: rgb(var(--venia-global-color-text-alt));\n white-space: nowrap;\n}\n\n/* Told, not corrected: the surplus hint when the line holds fewer units\n than the covers already bought. The fix sits next to the sentence that\n states the problem, so the customer never has to find the stepper. */\n.insuranceToggle-coverHintRow-18A {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-sm);\n flex-wrap: wrap;\n}\n\n.insuranceToggle-coverHint-1f_ {\n margin: 0;\n font-size: var(--te-text-body-xs);\n color: var(--color-status-error);\n}\n\n.insuranceToggle-coverHintAction-2dY {\n flex: 0 0 auto;\n padding: var(--space-xs) var(--space-sm);\n background: none;\n border: 1px solid var(--color-status-error);\n border-radius: var(--global-border-radius-xs);\n cursor: pointer;\n color: var(--color-status-error);\n font: inherit;\n font-size: var(--te-text-body-xs);\n white-space: nowrap;\n}\n\n.insuranceToggle-coverHintAction-2dY:disabled {\n cursor: default;\n opacity: 0.5;\n}\n",""]),n.locals={root:"insuranceToggle-root-1C8",button:"insuranceToggle-button-5Fw",buttonApplied:"insuranceToggle-buttonApplied-2YH insuranceToggle-button-5Fw",price:"insuranceToggle-price-kxV",icon:"insuranceToggle-icon-3S-",shieldCheck:"insuranceToggle-shieldCheck-38c",shieldMark:"insuranceToggle-shieldMark-3ua",label:"insuranceToggle-label-2nN",info:"insuranceToggle-info-tsZ",visuallyHidden:"insuranceToggle-visuallyHidden-2Gz",row:"insuranceToggle-row-3zQ",panel:"insuranceToggle-panel-12x",panelHeader:"insuranceToggle-panelHeader-2v2",buttonInPanel:"insuranceToggle-buttonInPanel-2D4",quantityRow:"insuranceToggle-quantityRow-2Aj",quantityLabel:"insuranceToggle-quantityLabel-2Xo",quantityControl:"insuranceToggle-quantityControl-1MY",quantityMax:"insuranceToggle-quantityMax-15b",coverHintRow:"insuranceToggle-coverHintRow-18A",coverHint:"insuranceToggle-coverHint-1f_",coverHintAction:"insuranceToggle-coverHintAction-2dY"}},mL65:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".giftPoints-module-root-2KR {\n display: grid;\n grid-row-gap: 8px;\n}\n.giftPoints-module-balance-1Pg {\n font-weight: 600;\n}\n\n.giftPoints-module-actionsRow-QNa {\n display: flex;\n justify-content: center;\n gap: 8px;\n padding: 0.5rem 0;\n}\n",""]),n.locals={root:"giftPoints-module-root-2KR",balance:"giftPoints-module-balance-1Pg",actionsRow:"giftPoints-module-actionsRow-QNa"}},qbVN:function(e,n,t){"use strict" 273t.d(n,"a",function(){return a}) 274var a=function planCoverQuantityChange(e,n,t){if(!n||!n.coverItemId)return{action:"none"} 275var a=Number(e) 276if(!Number.isFinite(a))return{action:"none"} 277if(a<=0)return{action:"optOut"} 278var r=Math.max(Number(t)||0,1),o=Math.min(Math.floor(a),r) 279return o===Number(n.coverQuantity)?{action:"none"}:{action:"update",quantity:o}}}
279,qfVd:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,"/* Container for text and buttons */\n.insurance-textAndButton-3_9 {\n display: flex;\n flex-wrap: wrap;\n column-gap: 0.5rem;\n align-items: center;\n}\n\n/* The CMS copy inside the shared Modal. The box around it is ModalUI's; this\n file used to carry a whole copy of one â position, centring, shadow, close\n button â which is the sort of thing that only ever drifts. What is left is\n what the block itself needs: the editor writes lists, and the reset does not\n give them markers back. */\n.insurance-infoContent-1me {\n line-height: 1.4;\n}\n\n.insurance-infoContent-1me ul,\n.insurance-infoContent-1me ol {\n padding-left: 1.5rem;\n margin: 1rem 0;\n}\n\n.insurance-infoContent-1me li {\n margin-bottom: 0.5rem;\n}\n\n.insurance-infoContent-1me ul li {\n list-style-type: disc;\n}\n\n.insurance-infoContent-1me ol li {\n list-style-type: decimal;\n}\n\n/* Tooltip styles */\n.insurance-tooltip-1pj {\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 6px;\n display: flex;\n justify-content: center;
279\n align-items: center;\n border: 1px solid var(--te-brand-color-text);\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.insurance-tooltip-1pj:hover {\n background: rgba(0, 0, 0, 0.05);\n}\n\n/* The +/- for the applied cover, under the checkbox. */\n.insurance-coverQuantity-1mC {\n margin-top: 0.5rem;\n max-width: 12rem;\n}\n\n/* Told, not corrected: the surplus hint when the line holds fewer units\n than the covers already bought. */\n.insurance-coverHint-6gL {\n margin-top: 0.375rem;\n font-size: 0.8125rem;\n color: var(--venia-global-color-error, #b30015);\n}\n",""]),n.locals={textAndButton:"insurance-textAndButton-3_9",infoContent:"insurance-infoContent-1me",tooltip:"insurance-tooltip-1pj",coverQuantity:"insurance-coverQuantity-1mC",coverHint:"insurance-coverHint-6gL"}},xPyZ:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,"/* A cart holds one coupon and one credits chip, so the list needs no scroller\n of its own â `overflow-y: auto` here also computed `overflow-x: auto`, which\n once turned notches sticking out of each chip into a stray horizontal\n scrollbar. */\n.appliedChip-module-wrapper-1xD {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n max-width: 100%;\n min-width: 0;\n padding: 0;\n gap: var(--spacing-4) var(--spacing-2);\n}\n\n/* A white ticket on the section's tint. The notches are cut with a mask, so\n they show whatever the chip sits on â there is no colour to keep in step\n with the row, and nothing sticks out of the box. */\n.appliedChip-module-chip-JF2 {\n display: inline-flex;\n align-items: stretch;\n min-height: 2.75rem;\n background-color: var(--te-brand-color-white);\n color: var(--te-brand-color-black);\n border-radius: 6px;\n /* A coupon code is user data of unknown length: the chip may grow to the\n column width but never past it, and the code truncates instead of\n pushing the amount and the remove stub out of the ticket. */\n min-width: 0;\n max-width: 100%;\n -webkit-mask: radial-gradient(circle at 0 50%, transparent 7px, #000 7.5px)\n left / 51% 100% no-repeat,\n radial-gradient(circle at 100% 50%, transparent 7px, #000 7.5px) right /\n 51% 100% no-repeat;\n mask: radial-gradient(circle at 0 50%, transparent 7px, #000 7.5px) left /\n 51% 100% no-repeat,\n radial-gradient(circle at 100% 50%, transparent 7px, #000 7.5px) right /\n 51% 100% no-repeat;\n}\n\n/* Clear of the left notch; of the right one too when there is no stub. */\n.appliedChip-module-main-kH0 {\n display: flex;\n align-items: center;\n gap: var(--spacing-3);\n min-width: 0;\n padding: 0 var(--spacing-4) 0 1.125rem;\n}\n\n.appliedChip-module-main-kH0:last-child {\n padding-right: 1.125rem;\n}\n\n.appliedChip-module-label-3Xj {\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-weight: 500;\n}\n\n/* The section's own status colour: green on the coupon and credits rows. */\n.appliedChip-module-value-2tg {\n flex: none;\n white-space: nowrap;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n color: var(--status-fg, var(--color-status-success));\n}\n\n/* `Price` brings its own colour, size and weight - on its root `div` and on\n the `span`s inside it; on the ticket the amount is set by the line it sits\n on. Element-qualified, so it outranks Price's single classes whichever\n stylesheet loads last. */\n.appliedChip-module-value-2tg div,\n.appliedChip-module-value-2tg span {\n color: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n}\n\n/* The stub: behind the perforation, the ticket's full height. */\n.appliedChip-module-removeButton-xH2 {\n flex: none;\n display: grid;\n place-items: center;\n width: 2.75rem;\n padding: 0 0.25rem 0 0;\n border: 0;\n border-left: 1.5px dashed var(--te-brand-color-border);\n background: none;\n color: var(--te-brand-color-black);\n cursor: pointer;\n}\n\n.appliedChip-module-removeButton-xH2:hover:not(:disabled) {\n color: var(--status-fg, var(--color-status-success));\n}\n\n/* Inside the box: the mask would clip a ring drawn outside it. */\n.appliedChip-module-removeButton-xH2:focus-visible {\n outline: 2px solid var(--te-brand-color-primary);\n outline-offset: -5px;\n}\n\n.appliedChip-module-removeButton-xH2:disabled {\n cursor: n
279ot-allowed;\n opacity: 0.5;\n}\n\n.appliedChip-module-removeIcon-2Zz {\n display: flex;\n}\n",""]),n.locals={wrapper:"appliedChip-module-wrapper-1xD",chip:"appliedChip-module-chip-JF2",main:"appliedChip-module-main-kH0",label:"appliedChip-module-label-3Xj",value:"appliedChip-module-value-2tg",removeButton:"appliedChip-module-removeButton-xH2",removeIcon:"appliedChip-module-removeIcon-2Zz"}}}])
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.