1/*! @version 1.1.8 */ 2(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{"+hmG":function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".marketingConsents-module-root-2Fn {\n display: grid;\n grid-row-gap: var(--space-sm);\n}\n\n.marketingConsents-module-channel-2Cn {\n display: grid;\n grid-row-gap: 0.125rem;\n}\n\n/* Mirrors the disclosure header of the surrounding sections: label left,\n control right. */\n.marketingConsents-module-row-37P {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n min-height: 2.75rem;\n}\n\n.marketingConsents-module-channelLabel-3Pq {\n flex: 1 1 auto;\n min-width: 0;\n font-size: var(--font-step-0);\n color: var(--te-brand-color-black);\n}\n\n/* How often, said next to the switch rather than after the fact. */\n.marketingConsents-module-frequency-3CZ {\n margin: 0;\n font-size: var(--te-text-body-xs);\n color: rgb(var(--venia-global-color-text-alt));\n}\n\n.marketingConsents-module-note-bWa {\n margin: 0;\n font-size: var(--te-text-body-xs);\n color: rgb(var(--venia-global-color-text-alt));\n}\n",""]),n.locals={root:"marketingConsents-module-root-2Fn",channel:"marketingConsents-module-channel-2Cn",row:"marketingConsents-module-row-37P",channelLabel:"marketingConsents-module-channelLabel-3Pq",frequency:"marketingConsents-module-frequency-3CZ",note:"marketingConsents-module-note-bWa"}},"2wwM":function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,"/*\n * One of the four borrow-home slots: a chosen frame, or an invitation to\n * choose one.\n *\n * This file used to be the venia customer-address card with the address parts\n * commented out â `.confirmDeleteContainer`, `.defaultBadge`, `.editButton`,\n * `@keyframes flash` and a dozen more, none of them referenced by any JSX.\n * They are gone. So is the `composes: ⦠from Gallery/item.css`, which coupled\n * a borrow slot to the catalog grid's sizing for no reason either file knew\n * about.\n */\n\n.borrowCard-root-yR4 {\n position: relative;\n display: flex;\n justify-content: center;
2\n align-items: center;\n gap: 0.75rem;\n align-content: start;\n padding: 1rem;\n min-width: 0;\n border: 1px solid var(--te-brand-color-border);\n border-radius: var(--global-border-radius-md, 1rem);\n background-color: var(--global-color-background);\n}\n\n/* An empty slot is an outline, not an object. Dashed and tinted, so four of\n them do not read as four products. */\n.borrowCard-rootEmpty-262 {\n border-style: dashed;\n background-color: var(--te-brand-color-lightest-blue);\n}\n\n/* ---------- the frame ---------- */\n\n.borrowCard-link-3R7 {\n display: grid;\n width: 100%;\n gap: 0.75rem;\n color: inherit;\n text-decoration: none;\n}\n\n/*\n * Venia's Image box. Only `root` and `image` are handed over â `container` is\n * left alone so its `position: relative` survives, because the real <img> is\n * `position: absolute` and would otherwise be positioned against the card and\n * lie across the remove button.\n */\n.borrowCard-imageRoot-2Yq {\n width: 100%;\n overflow: hidden;\n border-radius: var(--global-border-radius-sm, 0.75rem);\n}\n\n/*\n * Worn by both the real <img> and the placeholder. The placeholder is in flow\n * and resolves its height from the width/height attributes, so it is what sets\n * the box; the real one is absolute, and `height: 100%` makes it fill that same\n * box instead of falling back to its own ratio. The media host serves\n * originals untouched, so `contain` is what keeps them undistorted.\n */\n.borrowCard-image-Pkl {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.borrowCard-body-3gn {\n display: grid;\n gap: 0.125rem;\n min-width: 0;\n text-align: center;\n}\n\n.borrowCard-manufacturer-2Ja {\n font-size: var(--te-text-body-sm);\n font-weight: 600;\n color: var(--te-brand-color-primary);\n}\n\n.borrowCard-name-yeB {\n font-size: var(--te-text-body-sm);\n color: var(--te-brand-color-black);\n overflow-wrap: anywhere;\n}\n\n/* ---------- remove ---------- */\n\n/*\n * A real button. The old control was a `<span onClick>` whose visible text was\n * pushed off-screen with `text-indent: -9999px` and redrawn as two rotated\n * pseudo-elements â no accessible name, no keyboard, an 11px hit target.\n *\n * `z-index` is not decoration here. The real <img> venia renders is\n * `position: absolute` and comes later in the DOM, so with both at `z-index:\n * auto` the image paints over this button and the slot cannot be emptied. The\n * sheet this replaced carried a `z-index: 2` for that reason; dropping it was\n * how the control went missing.\n *\n * The tinted disc is for the same reason the stacking is: it sits over a\n * product photo, and a bare glyph on a pale frame shot is not reliably visible.\n */\n.borrowCard-removeButton-1vT {\n position: absolute;\n z-index: 1;\n top: 0.5rem;\n right: 0.5rem;\n display: flex;\n place-items: center;\n justify-content: center;
2\n align-items: center;\n width: 2.25rem;\n height: 2.25rem;\n padding: 0;\n border: none;\n border-radius: 50%;\n background-color: rgb(var(--global-color-background-rgb) / 0.85);\n color: var(--te-brand-color-text);\n cursor: pointer;\n transition: background-color 150ms linear, color 150ms linear;\n}\n\n.borrowCard-removeButton-1vT:hover {\n background-color: var(--color-status-error-bg);\n color: var(--color-status-error);\n}\n\n/* ---------- the empty slot ---------- */\n\n.borrowCard-addLink-3a2 {\n display: grid;\n gap: 0.5rem;\n place-items: center;\n padding: 1.5rem 1rem;\n color: var(--te-brand-color-primary);\n text-decoration: none;\n transition: opacity 150ms linear;\n}\n\n.borrowCard-addLink-3a2:hover {\n opacity: 0.75;\n}\n\n.borrowCard-addLabel-8cE {\n font-size: var(--te-text-body-sm);\n}\n\n/* The same slot on a store view with no try-on category to link to: still\n drawn, so the customer can see how many are free, but inert. */\n.borrowCard-addPlaceholder-3NX {\n display: grid;\n gap: 0.5rem;\n place-items: center;\n padding: 1.5rem 1rem;\n color: var(--te-brand-color-light-text);\n}\n\n@media (min-width: 641px) {\n .borrowCard-root-yR4 {\n padding: 1.25rem;\n }\n}\n",""]),n.locals={root:"borrowCard-root-yR4",rootEmpty:"borrowCard-rootEmpty-262 borrowCard-root-yR4",link:"borrowCard-link-3R7",imageRoot:"borrowCard-imageRoot-2Yq",image:"borrowCard-image-Pkl",body:"borrowCard-body-3gn",manufacturer:"borrowCard-manufacturer-2Ja",name:"borrowCard-name-yeB",removeButton:"borrowCard-removeButton-1vT",addLink:"borrowCard-addLink-3a2",addLabel:"borrowCard-addLabel-8cE",addPlaceholder:"borrowCard-addPlaceholder-3NX"}},CiBx:function(e,n,t){"use strict" 3var r=t("q1tI"),a=t.n(r),o=t("17x9"),i=t("8UhI"),s=t("DmjF"),l=function useConsentField(e,n){var t=Object(i.m)({field:e,initialValue:!!n}),a=t.fieldState,o=t.fieldApi,s=Object(r.useCallback)(function(e){o.setValue(!!e),o.setTouched(!0)},[o]) 4return{checked:!!a.value,onChange:s}},d=function EmailOnly(e){var n=l(e.emailFieldName,e.initialEmail) 5return a.a.createElement(s.a,{email:n,error:e.error})},c=function EmailAndSms(e){var n=l(e.emailFieldName,e.initialEmail),t=l(e.smsFieldName,e.initialSms) 6return a.a.createElement(s.a,{email:n,sms:t,error:e.error})},m=function MarketingConsentFields(e){var n=e.emailFieldName,t=void 0===n?"subscribe":n,r=e.smsFieldName,o=void 0===r?"smsSubscribe":r,i=e.showSms,s=void 0!==i&&i,l=e.initialEmail,m=void 0!==l&&l,u=e.initialSms,g=void 0!==u&&u,b=e.error 7return s?a.a.createElement(c,{emailFieldName:t,smsFieldName:o,initialEmail:m,initialSms:g,error:b}):a.a.createElement(d,{emailFieldName:t,initialEmail:m,error:b})} 8m.propTypes={emailFieldName:o.string,smsFieldName:o.string,showSms:o.bool,initialEmail:o.bool,initialSms:o.bool,error:o.object},n.a=m},CqmL:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,"/*\n * The borrow-home page shell.\n *\n * Same vocabulary as the account pages â `prescriptionsPage.css` is the one\n * this follows most closely â but this route is registered at the top level in\n * `local-intercept.js`, not inside the account shell, so `.root` owns its own\n * page padding and centring rather than inheriting them.\n *\n * Mobile-first: the base rules are the phone, and every breakpoint is\n * `min-width`. The sheet it replaced was the other way round, which is why it\n * needed three `max-width` blocks to walk a 73%/25% desktop layout back to\n * something usable.\n *\n * This sheet's `classes` object is never handed to a shared child component,\n * and its class names are deliberately disjoint from borrowForm.css's â a CSS\n * module exports every local class it mentions, so an overlapping name would\n * win a merge somewhere neither file can see.\n */\n\n.borrowHomeCart-root-301 {\n display: grid;\n gap: 1.5rem;\n max-width: 1100px;\n margin: 0 auto;\n padding: 1.5rem var(--container-padding) 3rem;\n min-width: 0;\n font-family: var(--font-primary);\n color: var(--te-brand-color-black);\n}\n\n/* ---------- header ---------- */\n\n.borrowHomeCart-header-17z {\n display: grid;\n gap: 0.75rem;\n padding-bottom: 1rem;\n border-bottom: 1px solid var(--te-brand-color-border);\n}\n\n.borrowHomeCart-headerText-1kg {\n display: grid;\n gap: 0.25rem;\n min-width: 0;\n}\n\n.borrowHomeCart-title-DU8 {\n margin: 0;\n font-family: var(--font-secondary);\n font-size: var(--te-text-mobile-heading-xl);\n font-weight: 400;\n line-height: 1.1;\n color: var(--te-brand-color-black);\n}\n\n.borrowHomeCart-headerMeta-2-f {\n margin: 0;\n font-size: var(--te-text-body-sm);\n color: var(--te-brand-color-text);\n}\n\n/* How many of the four slots are taken. Its own element rather than a
8number\n concatenated onto the end of a sentence, which is what it used to be â with\n no separator, in every language. */\n.borrowHomeCart-progress-cOz {\n display: flex;\n align-items: center;\n justify-self: start;\n}\n\n.borrowHomeCart-progressCount-Muz {\n padding: 0.25rem 0.75rem;\n border-radius: 999px;\n background-color: var(--te-brand-color-lightest-blue);\n font-size: var(--te-text-body-xs);\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--te-brand-color-text);\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n\n/* ---------- layout ---------- */\n\n.borrowHomeCart-layout-3Jw {\n display: grid;\n gap: 1.5rem;\n min-width: 0;\n}\n\n.borrowHomeCart-section-1gS {\n display: grid;\n gap: 1rem;\n min-width: 0;\n /* Grid items refuse to shrink below their content; the card grid inside\n is the widest thing on the page. */\n align-content: start;\n}\n\n.borrowHomeCart-legend-SEk {\n margin: 0;\n font-size: var(--te-text-body-xs);\n font-weight: 400;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--te-brand-color-text);\n}\n\n.borrowHomeCart-cardGrid-SKJ {\n display: grid;\n gap: 1rem;\n grid-template-columns: 1fr;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n/* ---------- empty ---------- */\n\n.borrowHomeCart-emptyState-3CN {\n display: grid;\n gap: 0.75rem;\n justify-items: start;\n padding: 1.5rem;\n border: 1px dashed var(--te-brand-color-border);\n border-radius: var(--global-border-radius-sm, 0.75rem);\n color: var(--te-brand-color-text);\n}\n\n.borrowHomeCart-emptyText-2GJ {\n margin: 0;\n color: var(--te-brand-color-text);\n}\n\n/* ---------- buttons ---------- */\n\n/* The one button on the page shell: \"add a frame\", offered from the empty\n state. The form draws its own submit. */\n.borrowHomeCart-primaryButton-bEW {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.375rem;\n padding: 0.625rem 1.25rem;\n border-radius: 999px;\n background-color: var(--te-brand-color-primary);\n color: #fff;\n font-family: var(--font-primary);\n font-size: var(--te-text-body-sm);\n text-decoration: none;\n transition: opacity 150ms linear;\n}\n\n.borrowHomeCart-primaryButton-bEW:hover {\n opacity: 0.85;\n}\n\n@media (min-width: 641px) {\n .borrowHomeCart-root-301 {\n gap: 1.75rem;\n padding: 2rem 1.5rem 3.5rem;\n }\n\n .borrowHomeCart-header-17z {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 1rem;\n padding-bottom: 1.25rem;\n }\n\n .borrowHomeCart-progress-cOz {\n margin-left: auto;\n }\n\n .borrowHomeCart-cardGrid-SKJ {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n@media (min-width: 1025px) {\n .borrowHomeCart-title-DU8 {\n font-size: var(--te-text-heading-lg);\n }\n\n /* The frames and the form side by side, the form given a real minimum so\n its two-column field grid still fits. */\n .borrowHomeCart-layout-3Jw {\n grid-template-columns: minmax(0, 1fr) minmax(20rem, 26rem);\n align-items: start;\n gap: 2rem;\n }\n}\n",""]),n.locals={root:"borrowHomeCart-root-301",header:"borrowHomeCart-header-17z",headerText:"borrowHomeCart-headerText-1kg",title:"borrowHomeCart-title-DU8",headerMeta:"borrowHomeCart-headerMeta-2-f",progress:"borrowHomeCart-progress-cOz",progressCount:"borrowHomeCart-progressCount-Muz",layout:"borrowHomeCart-layout-3Jw",section:"borrowHomeCart-section-1gS",legend:"borrowHomeCart-legend-SEk",cardGrid:"borrowHomeCart-cardGrid-SKJ",emptyState:"borrowHomeCart-emptyState-3CN",emptyText:"borrowHomeCart-emptyText-2GJ",primaryButton:"borrowHomeCart-primaryButton-bEW"}},DmjF:function(e,n,t){"use strict" 9var r=t("q1tI"),a=t.n(r),o=t("17x9"),i=t("dDsW"),s=t("kriW"),l=t("iStd"),d=t("X+bB"),c=t("LboF"),m=t.n(c),u=t("+hmG"),g=t.n(u),b={injectType:"singletonStyleTag",insert:"head",singleton:!0},p=(m()(g.a,b),g.a.locals||{}),h=function MarketingConsents(e){var n,t=e.combined,r=e.email,o=e.sms,c=e.error,m=Object(i.a)().formatMessage,u=function renderChannel(e,n,t,r){return a.a.createElement("div",{className:p.channel,key:e},a.a.createElement("div",{className:p.row},a.a.createElement("span",{className:p.channelLabel},t),a.a.createElement(d.a,{checked:!!n.checked,onChange:n.onChange,disabled:!!n.disabled,ariaLabel:t})),a.a.createElement("p",{className:p.frequency},r))}
10return n=t?u("combined",t,m({id:"newsletter.combinedLabel",defaultMessage:"News and offers"}),a.a.createElement(s.a,{id:"newsletter.combinedFrequency",defaultMessage:"E-mail about once a week, SMS 2â4 times a year"})):[u("email",r,m({id:"newsletter.emailLabel",defaultMessage:"E-mail newsletter"}),a.a.createElement(s.a,{id:"newsletter.emailFrequency",defaultMessage:"About once a week"})),o?u("sms",o,m({id:"newsletter.smsLabel",defaultMessage:"SMS"}),a.a.createElement(s.a,{id:"newsletter.smsFrequency",defaultMessage:"2â4 times a year"})):null],a.a.createElement("div",{className:p.root},n,a.a.createElement("p",{className:p.note},a.a.createElement(s.a,{id:"newsletter.unsubscribeAnytime",defaultMessage:"You can unsubscribe at any time."})),c?a.a.createElement("div",{role:"alert",className:l.a.errorText},a.a.createElement(s.a,{id:"newsletter.saveError",defaultMessage:"We could not save that just now. Please try again."})):null)},f=Object(o.shape)({checked:o.bool,onChange:o.func,disabled:o.bool}) 11h.propTypes={combined:f,email:f,sms:f,error:o.object} 12n.a=a.a.memo(h)},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; 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"}},HTR8:function(e,n,t){"use strict" 13var r=t("J4zp"),a=t.n(r) 14n.a=function(e){if(null==e||!Array.isArray(e))throw new Error("Expected `callbacks` to be array.") 15return function(n,t){for(var r=null,o=0;o<e.length;o++){var i=e[o] 16if(null==i||!Array.isArray(i)&&"function"!=typeof i)throw new Error("Expected `callbacks["+o+"]` to be array or function.") 17if(Array.isArray(i)){var s=a()(i,2),l=s[0],d=s[1] 18if("function"!=typeof l)throw new Error("Expected `callbacks["+o+"][0]` to be function.") 19r=l(n,t,d)}else r=i(n,t) 20if(r)break}return r}}}
20,Wg7o:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,"/*\n * The borrow-home form: who the parcel goes to, and where.\n *\n * The card, the fieldsets and the pill submit are `EyeglassForm`'s vocabulary\n * (`eyeglassForm.css`) and the uppercase legends are the subscription\n * dialog's, so the page reads as part of the same account.\n *\n * Class names here are deliberately disjoint from borrowHomeCart.css's â the\n * page has a `.legend` and this file has a `.legendForm`, on purpose. A CSS\n * module exports every local class it names, and the two objects meet wherever\n * one component passes `classes` to another.\n *\n * Nothing in here is passed to `Field`, `TextInput`, `Postcode`, `Country`,\n * `Checkbox` or `Modal` as a `classes` prop, for the same reason: the inputs\n * are reached through descendant selectors on their wrapper instead. The sheet\n * this replaced defined `.root_open_modal` â which is exactly the class\n * `ModalUI` uses for its own shell â and it only ever did nothing because no\n * one had passed `classes` to the terms modal yet.\n */\n\n.borrowForm-root-q7t {\n display: grid;\n gap: 1.25rem;\n padding: 1.25rem;\n min-width: 0;\n border: 1px solid var(--te-brand-color-border);\n border-radius: var(--global-border-radius-md, 1rem);\n background-color: var(--global-color-background);\n}\n\n/* Held while the signed-in customer's saved address is on its way. The form\n is mounted once, with its final values â see `useBorrowPrefill` â so this\n is what stands in its place rather than an empty form that fills in. */\n.borrowForm-formPlaceholder-3tN {\n min-height: 28rem;\n border: 1px dashed var(--te-brand-color-border);\n border-radius: var(--global-border-radius-sm, 0.75rem);\n background-color: var(--te-brand-color-lightest-blue);\n}\n\n/* ---------- fieldsets ---------- */\n\n.borrowForm-fieldset-2V2 {\n display: grid;\n gap: 0.75rem;\n margin: 0;\n padding: 0;\n border: none;\n min-width: 0;\n}\n\n.borrowForm-legendForm-1i_ {\n padding: 0;\n font-size: var(--te-text-body-xs);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--te-brand-color-text);\n}\n\n.borrowForm-fields-3SF {\n display: grid;\n gap: 0.75rem;\n grid-template-columns: 1fr;\n min-width: 0;\n}\n\n.borrowForm-field-1vD {\n min-width: 0;\n}\n\n.borrowForm-fieldFull-10s {\n grid-column: 1 / -1;\n}\n\n/* Venia's inputs and selects come with square corners; everything else on\n these pages is rounded. Reached through the wrapper so no class of ours\n ends up inside the shared components' own `classes` objects. */\n.borrowForm-field-1vD input,\n.borrowForm-field-1vD select,\n.borrowForm-fieldFull-10s input,\n.borrowForm-fieldFull-10s select {\n border-radius: var(--global-border-radius-sm, 0.75rem);\n}\n\n/* The shared consents block brings its own grid and its own captions; all\n this owes it is a rule off the fields above. */\n.borrowForm-consents-3mb {\n padding-top: 0.25rem;\n border-top: 1px solid var(--te-brand-color-border);\n}\n\n/* ---------- terms ---------- */\n\n.borrowForm-terms-2B3 {\n font-size: var(--te-text-body-xs);\n line-height: 1.5;\n color: var(--te-brand-color-text);\n}\n\n/* A button, not a `<span onClick>`: it opens a dialog, and a customer using a\n keyboard has to be able to reach it. */\n.borrowForm-termsLink-1CQ {\n padding: 0;\n border: none;\n background: none;\n font: inherit;\n color: var(--te-brand-color-primary);\n text-decoration: underline;\n cursor: pointer;\n}\n\n.borrowForm-termsLink-1CQ:hover {\n color: var(--te-brand-color-black);\n}\n\n/* ---------- submit ---------- */\n\n.borrowForm-actions-3kL {\n display: grid;\n gap: 0.75rem;\n}\n\n/* Venia's Button carries its own colours on a single class, so one class plus\n the element outranks them without reaching for `!important`. */\n.borrowForm-submitButton-T3E button {\n min-width: auto;\n min-height: auto;\n padding: 0.75rem 1.5rem;\n border: 1px solid var(--te-brand-color-primary);\n border-radius: 999px;\n background-color: var(--te-brand-color-primary);\n color: #fff;\n font-family: var(--font-primary);\n font-size: var(--te-text-body-sm);\n transition: opacity 150ms linear;\n}\n\n.borrowForm-submitButton-T3E button:hover:not(:disabled) {\n opacity: 0.85;\n}\n\n.borrowForm-submitButton-T3E button:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n/* What \"we are placing your order\" looks like now. It used to be a fixed,\n full-viewport 40%-black overlay at z-index 98, rendered from inside the\n form and shown *before* the mutation was even sent â so a failed order\n flashed a page-covering \"your order is being processed\" and then took it\n back. An inline row next to a disabled button says the same thing and\n cannot outlive its own state. */\n.borrowForm-status-AUH {\n display: flex;
20\n align-items: center;\n gap: 0.5rem;\n font-size: var(--te-text-body-sm);\n color: var(--te-brand-color-text);\n}\n\n@media (min-width: 641px) {\n .borrowForm-root-q7t {\n padding: 1.5rem;\n }\n\n .borrowForm-fields-3SF {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .borrowForm-actions-3kL {\n justify-items: end;\n }\n}\n",""]),n.locals={root:"borrowForm-root-q7t",formPlaceholder:"borrowForm-formPlaceholder-3tN",fieldset:"borrowForm-fieldset-2V2",legendForm:"borrowForm-legendForm-1i_",fields:"borrowForm-fields-3SF",field:"borrowForm-field-1vD",fieldFull:"borrowForm-fieldFull-10s borrowForm-field-1vD",consents:"borrowForm-consents-3mb",terms:"borrowForm-terms-2B3",termsLink:"borrowForm-termsLink-1CQ",actions:"borrowForm-actions-3kL",submitButton:"borrowForm-submitButton-T3E",status:"borrowForm-status-AUH"}},"X+bB":function(e,n,t){"use strict" 21var r=t("J4zp"),a=t.n(r),o=t("q1tI"),i=t.n(o),s=t("17x9"),l=t("y1Xp"),d=t("LboF"),c=t.n(d),m=t("hV6r"),u=t.n(m),g={injectType:"singletonStyleTag",insert:"head",singleton:!0},b=(c()(u.a,g),u.a.locals||{}),p=function ToggleButton(e){var n=e.checked,t=e.defaultChecked,r=e.onChange,s=e.disabled,d=e.ariaLabel,c=Object(l.a)(b,e.classes),m=void 0!==n,u=Object(o.useState)(function(){return!!t}),g=a()(u,2),p=g[0],h=g[1],f=m?!!n:p 22Object(o.useRef)(n) 23Object(o.useEffect)(function(){m||h(!!t)},[m,t]) 24var w=Object(o.useCallback)(function(){if(!s){var e=!f 25m||h(e),"function"==typeof r&&r(e)}},[s,f,m,r]),v="".concat(c.toggle," ").concat(f?c.toggle__checked:""," ").concat(s?c.toggle__disabled:"") 26return i.a.createElement("label",{className:v},i.a.createElement("input",{type:"checkbox",className:c.toggle_input,checked:f,disabled:s,onChange:w,"aria-label":d||"Toggle Button"}),i.a.createElement("span",{className:c.toggle_container}),i.a.createElement("span",{className:c.toggle_circle}))} 27p.propTypes={disabled:s.bool,checked:s.bool,defaultChecked:s.bool,onChange:s.func,ariaLabel:s.string,classes:Object(s.shape)({toggle:s.string,toggle__checked:s.string,toggle__disabled:s.string,toggle_container:s.string,toggle_circle:s.string,toggle_input:s.string})} 28n.a=i.a.memo(p)},dsxs:function(e,n,t){"use strict" 29var r=t("lSNA"),a=t.n(r),o=t("J4zp"),i=t.n(o),s=t("q1tI"),l=t.n(s),d=t("i8i4"),c=t.n(d),m=t("/MKj"),u=t("OlZo"),g=t("17x9"),b=t("y1Xp"),p=t("wHH0"),h=t("iqKj"),f=t("LboF"),w=t.n(f),v=t("GN5e"),y=t.n(v),k={injectType:"singletonStyleTag",insert:"head",singleton:!0},x=(w()(y.a,k),y.a.locals||{}),E=t("dgmk"),C=t("TsSr"),_="modal",j=Object(s.createContext)(!1),N=function Modal(e){var n=e.showModal,t=e.title,r=e.onClose,o=e.children,d=e.className,g=Object(b.a)(x,e.classes),f=function useIsInsideModal(){return Object(s.useContext)(j)}(),w=Object(u.b)(),v=i()(w,2)[1].toggleDrawer,y=Object(m.d)(function(e){return e&&e.app?e.app.drawer:null}),k=Object(s.useRef)(r) 30k.current=r 31var N=Object(s.useCallback)(function(){k.current&&k.current(!1)},[]) 32Object(s.useEffect)(function(){if(n&&!f)return v(_),function(){v(null)}},[n,f,v]) 33var F=Object(s.useRef)(!1) 34if(Object(s.useEffect)(function(){n&&!f?y!==_?F.current&&(F.current=!1,N()):F.current=!0:F.current=!1},[n,f,y,N]),!n)return null 35var S=Object(h.a)(g.root_open_modal,a()({},g.root_nested,f),d) 36return c.a.createPortal(l.a.createElement(C.a,null,l.a.createElement(j.Provider,{value:!0},f?l.a.createElement("div",{"aria-hidden":"true",className:g.backdrop,onClick:N}):null,l.a.createElement("aside",{className:S},l.a.createElement("header",{className:g.modalHeader},t&&l.a.createElement("h1",{className:g.modalTitle},t),l.a.createElement("div",{className:g.closeModal,onClick:N},l.a.createElement(E.a,{src:p.a}))),l.a.createElement("div",{className:g.modalСontent},o)))),document.body)} 37N.propTypes={showModal:g.bool,title:g.node,onClose:g.func,children:g.node,className:g.string,classes:Object(g.shape)({root_open_modal:g.string,root_nested:g.string,backdrop:g.string,modalHeader:g.string,modalTitle:g.string,closeModal:g.string,modalСontent:g.string})} 38n.a=N},hV6r:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".toggleButton-toggle-3g7 {\n touch-action: pan-x;\n display: inline-block;\n position: relative;\n cursor: pointer;\n background-color: transparent;\n border: 0;\n padding: 0;\n -webkit-touch-callout: none;\n -webkit-user-select: none;
38\n -ms-user-select: none;\n user-select: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -webkit-tap-highlight-color: transparent;\n}\n\n.toggleButton-toggle_input-38d {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.toggleButton-toggle_container-LhJ {\n /* A span now, so it needs the box the div had for free. */\n display: block;\n width: 36px;\n height: 22px;\n padding: 0;\n border-radius: 30px;\n background-color: var(--global-color-background);\n border: 1px solid var(--te-brand-color-border);\n transition: all 0.2s ease;\n}\n\n.toggleButton-toggle_circle-1sQ {\n display: block;\n transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1) 0ms;\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background-color: var(--te-brand-color-border);\n box-sizing: border-box;\n transition: all 0.25s ease;\n}\n\n/* The input is visually hidden but focusable, so the focus ring has to be\n drawn on the track it controls. */\n.toggleButton-toggle_input-38d:focus-visible + .toggleButton-toggle_container-LhJ {\n outline: 2px solid var(--te-brand-color-primary);\n outline-offset: 2px;\n}\n\n.toggleButton-toggle__checked-vzf .toggleButton-toggle_check-2GI {\n opacity: 1;\n}\n.toggleButton-toggle__checked-vzf .toggleButton-toggle_uncheck-29d {\n opacity: 0;\n}\n.toggleButton-toggle__checked-vzf .toggleButton-toggle_circle-1sQ {\n left: 16px;\n background-color: var(--te-brand-color-primary);\n}\n\n.toggleButton-toggle__disabled-2ib {\n cursor: not-allowed;\n opacity: 0.5;\n -webkit-transition: opacity 0.25s;\n transition: opacity 0.25s;\n}\n",""]),n.locals={toggle:"toggleButton-toggle-3g7",toggle_input:"toggleButton-toggle_input-38d",toggle_container:"toggleButton-toggle_container-LhJ",toggle_circle:"toggleButton-toggle_circle-1sQ",toggle__checked:"toggleButton-toggle__checked-vzf",toggle_check:"toggleButton-toggle_check-2GI",toggle_uncheck:"toggleButton-toggle_uncheck-29d",toggle__disabled:"toggleButton-toggle__disabled-2ib"}},iStd:function(e,n,t){"use strict" 39var r=t("LboF"),a=t.n(r),o=t("u6rJ"),i=t.n(o),s={injectType:"singletonStyleTag",insert:"head",singleton:!0} 40a()(i.a,s) 41n.a=i.a.locals||{}},ov5Y:function(e,n,t){"use strict" 42t.r(n),t.d(n,"default",function(){return Ve}) 43var r=t("J4zp"),a=t.n(r),o=t("q1tI"),i=t.n(o),s=t("17x9"),l=t("dDsW"),d=t("kriW"),c=t("55Ip"),m=t("y1Xp"),u=t("lcLu"),g=t("J3e4"),b=t("Bo5L"),p=t("9y6S"),h=t("pVnL"),f=t.n(h),w=t("Rzx/"),v=t("wHH0"),y=t("t+/2"),k=t("8ofS"),x=t("LboF"),E=t.n(x),C=t("2wwM"),_=t.n(C),j={injectType:"singletonStyleTag",insert:"head",singleton:!0},N=(E()(_.a,j),_.a.locals||{}),F="https://extraoptical.no/".replace(/\/$/,"")+"/pub/media/catalog/product/placeholder/default/placeholder_main.png",S=function firstEnabledImage(e){var n=(e&&Array.isArray(e.media_gallery_entries)?e.media_gallery_entries:[]).filter(function(e){return e&&!0!==e.disabled}) 44return n.length?n[0]:null},O=function BorrowCard(e){var n=e.product,t=e.onDelete,r=Object(m.a)(N,e.classes),a=Object(l.a)().formatMessage,s=null==n,u=Object(o.useMemo)(function(){return Object(b.a)()},[]),g=Object(o.useMemo)(function(){if(s)return{manufacturerLabel:"",imageEntry:null} 45var e=n.manufacturer?n.manufacturer:"" 46return{manufacturerLabel:e?Object(k.a)(e):"",imageEntry:S(n.currentVariant)}},[s,n]),p=g.manufacturerLabel,h=g.imageEntry 47if(s){var x=i.a.createElement(i.a.Fragment,null,i.a.createElement(w.a,{size:20,"aria-hidden":!0}),i.a.createElement("span",{className:r.addLabel},i.a.createElement(d.a,{id:"borrowHome.emptySlot",defaultMessage:"Add a frame"}))) 48return i.a.createElement("li",{className:r.rootEmpty},u?i.a.createElement(c.b,{to:u,className:r.addLink},x):i.a.createElement("div",{className:r.addPlaceholder},x))}var E=n.url_key?n.url_key:"",C=n.variantId?n.variantId:"",_=n.name?n.name:"",j={classes:{root:r.imageRoot,image:r.image},height:113,width:270} 49return i.a.createElement("li",{className:r.root},"function"==typeof t?i.a.createElement("button",{type:"button",className:r.removeButton,onClick:t,"aria-label":a({id:"borrowHome.removeProduct",defaultMessage:"Remove {name}"},{name:_})},i.a.createElement(v.a,{size:20,"aria-hidden":!0})):null,i.a.createElement(c.b,{to:"/".concat(E,"#variant=").concat(C),className:r.link},h&&h.file?i.a.createElement(y.a,f()({},j,{resource:h.file,alt:h.label||_||"image-product"})):i.a.createElement(y.a,f()({},j,{src:F,alt:_||"placeholder"})),i.a.createElement("span",{className:r.body},p?i.a.createElement("span",{className:r.manufacturer},p):null,_?i.a.createElement("span",{className:r.name},_):null)))},M=O 50O.propTypes={classes:Object(s.shape)({root:s.string,rootEmpty:s.string,link:s.string,image:s.string,imageRoot:s.string,body:s.string,manufacturer:s.string,name:s.string,removeButton:s.string,addLink:s.string,addLabel:s.string,addPlaceholder:s.string}),onDelete:s.func,product:Object(s.shape)({manufacturer:s.string,name:s.string,parent_sku:s.string,url_key:s.string})}
51var B=t("8UhI"),H=t("X5qW"),T=t("fZ0X"),z=t("z8z7"),L=t("XfiJ"),P=t("ZLnw"),A=t("CiBx"),D=t("dsxs"),I=t("Wg7o"),J=t.n(I),R={injectType:"singletonStyleTag",insert:"head",singleton:!0},q=(E()(J.a,R),J.a.locals||{}),$=t("VX74"),V=t("/MKj"),G=t("tMj8"),W=t.n(G),K=t("EnWu"),X=t("Jvo4"),U=t("Aj30"),Y={no:"NO",se:"SE",dk:"DK",es:"ES"},Q=function fallbackCountryCode(){var e=Object(X.a)() 52return Y[e]||"NO"},Z=function asText(e){return null==e?"":String(e)},ee=function flattenStreet(e){return Array.isArray(e)?e.filter(Boolean).map(function(e){return String(e).trim()}).filter(Boolean).join(", "):Z(e).trim()},ne=function selectableCountry(e,n){var t=Z(e).trim().toUpperCase() 53return t&&function isSelectableCountry(e){return-1!==U.a.indexOf(e)}(t)?t:n},te=function buildBorrowInitialValues(e,n,t){var r=e||{},a=n||{} 54return{email:Z(r.email).trim(),firstname:Z(a.firstname||r.firstname).trim(),lastname:Z(a.lastname||r.lastname).trim(),street:ee(a.street),city:Z(a.city).trim(),postcode:Z(a.postcode).trim(),country:ne(a.country_code,t),telephone:Z(a.telephone).trim(),newsletter_subscribe:!!r.is_subscribed}},re=["newsletter_subscribe","email","firstname","lastname","street","city","postcode","country","telephone"],ae=function useBorrowPrefill(){var e=Object(V.d)(function(e){return e.user.isSignedIn}),n=Object(V.d)(function(e){return e.user.currentUser}),t=Object($.useQuery)(W.a,{skip:!e,fetchPolicy:"cache-first",errorPolicy:"all"}),r=t.data,a=t.loading,i=Object(o.useMemo)(function(){if(!e)return te(null,null,Q()) 55var t=r?r.customer:null,a=Object(K.c)(t,n),o=Object(K.f)(a),i=Object.assign({},a,{is_subscribed:!(!n||!n.is_subscribed)}) 56return te(i,o,Q())},[e,r,n]),s=!e||!a||!!r,l=Object(o.useMemo)(function(){return function borrowPrefillFingerprint(e){var n=e||{} 57return re.map(function(e){return Z(n[e])}).join("\0")}(i)},[i]) 58return{initialValues:i,isPrefillReady:s,prefillKey:l}},oe=t("HTR8"),ie=t("LGPB"),se=t("dE+D"),le=/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/,de=/^[A-Za-z0-9][A-Za-z0-9 -]*$/,ce={id:"borrowHome.validation.email",defaultMessage:"Enter a valid email address."},me={id:"borrowHome.validation.phone",defaultMessage:"Enter a valid phone number."},ue={id:"borrowHome.validation.postcode",defaultMessage:"Enter a valid postal code."},ge=function isEmailShape(e){var n="string"==typeof e?e.trim():"" 59if(n)return le.test(n)?void 0:ce},be=function isPhoneShape(e){var n="string"==typeof e?e.trim():"" 60if(n&&!(Object(se.a)(n)||n.replace(/\D/g,"").length>=8))return me},pe=function isPostcodeShape(e){var n="string"==typeof e?e.trim():"" 61if(n)return de.test(n)?void 0:ue},he=Object(oe.a)([ie.d,[ie.a,2]]),fe=Object(oe.a)([ie.d,[ie.a,3]]),we=Object(oe.a)([ie.d,[ie.a,2]]),ve=ie.d,ye=Object(oe.a)([ie.d,ge]),ke=Object(oe.a)([ie.d,be]),xe=Object(oe.a)([ie.d,[ie.b,10],pe]),Ee=function BorrowForm(e){var n=e.onSubmit,t=e.completedOrder,r=e.isSubmitting,s=e.isDisabled,c=Object(m.a)(q,e.classes),u=Object(l.a)().formatMessage,g=Object(o.useState)(!1),b=a()(g,2),p=b[0],h=b[1],f=ae(),w=f.initialValues,v=f.isPrefillReady,y=f.prefillKey,k=Object(o.useCallback)(function(){return h(!0)},[]),x=Object(o.useCallback)(function(){return h(!1)},[]),E=Object(o.useCallback)(function(e){"function"==typeof n&&n(e)},[n]),C={email:u({id:"global.email",defaultMessage:"E-MAIL"}),firstName:u({id:"global.firstName",defaultMessage:"First Name"}),lastName:u({id:"global.lastName",defaultMessage:"Last Name"}),street:u({id:"global.streetAddress",defaultMessage:"Street Address"}),city:u({id:"global.city",defaultMessage:"City"}),telephone:u({id:"global.phoneNumber",defaultMessage:"Phone Number"})} 62return v?i.a.createElement(B.f,{key:y,className:c.root,initialValues:w,onSubmit:E},i.a.createElement("fieldset",{className:c.fieldset},i.a.createElement("legend",{className:c.legendForm},i.a.createElement(d.a,{id:"borrowHome.yourDetails",defaultMessage:"Your details"})),i.a.createElement("div",{className:c.fields},i.a.createElement("div",{className:c.fieldFull},i.a.createElement(z.a,{id:"email",label:C.email},i.a.createElement(P.a,{field:"email",validate:ye}))),i.a.createElement("div",{className:c.field},i.a.createElement(z.a,{id:"firstname",label:C.firstName},i.a.createElement(P.a,{field:"firstname",validate:he}))),i.a.createElement("div",{className:c.field},i.a.createElement(z.a,{id:"lastname",label:C.lastName},i.a.createElement(P.a,{field:"lastname",validate:he}))),i.a.createElement("div",{className:c.fieldFull},i.a.createElement(z.a,{id:"telephone",label:C.telephone},i.a.createElement(P.a,{field:"telephone",validate:ke}))))),i.a.createElement("fieldset",{className:c.fieldset},i.a.createElement("legend",{className:c.legendForm},i.a.createElement(d.a,{id:"borrowHome.deliveryAddress",defaultMessage:"Delivery address"})),i.a.createElement("div",{className:c.fields},i.a.createElement("div",{className:c.fieldFull},i.a.createElement(z.a,{id:"street",label:C.street},i.a.createElement(P.a,{field:"street",validate:fe}))),i.a.createElement("div",{className:c.field},i.a.createElement(L.a,{validate:xe})),i.a.createElement("div",{className:c.field},i.a.createElement(z.a,{id:"city",label:C.city},i.a.createElement(P.a,{field:"city",validate:we}))),i.a.createElement("div",{className:c.fieldFull},i.a.createElement(T.a,{field:"country",validate:ve,isFilterBy:!0})))),i.a.createElement("div",{className:c.consents},i.a.createElement(A.a,{emailFieldName:"newsletter_subscribe",initialEmail:w.newsletter_subscribe})),i.a.createElement("p",{className:c.terms},i.a.createElement(d.a,{id:"borrowHome.pressing",defaultMessage:'By pressing "complete home loan", you accept ours'})," ",i.a.createElement("button",{type:"button",className:c.termsLink,onClick:k},i.a.createElement(d.a,{id:"borrowHome.conditions",defaultMessage:"conditions for home loans"}))),i.a.createElement("div",{className:c.actions},r?i.a.createElement("p",{className:c.status},i.a.createElement(d.a,{id:"borrowHome.orderStatus",defaultMessage:"Your home loan order is being processed, please wait!"})):null,i.a.createElement("div",{className:c.submitButton},i.a.createElement(H.a,{priority:"high",type:"submit",disabled:!!r||!!t||!!s},i.a.createElement("span",null,i.a.createElement(d.a,{id:"borrowHome.complete",defaultMessage:"Complete home loan"}))))),i.a.createElement(D.a,{showModal:p,onClose:x,title:i.a.createElement(d.a,{id:"borrowHome.HomeTerms",defaultMessage:"Home loan terms"})},i.a.createElement(d.a,{id:"borrowHome.modalContent",defaultMessage:"Home loan terms",values:{strong:function strong(e){return i.a.createElement("strong",null,e)}}}))):i.a.createElement("div",{className:c.formPlaceholder})},Ce=Ee 63Ee.propTypes={classes:Object(s.shape)({root:s.string,formPlaceholder:s.string,fieldset:s.string,legendForm:s.string,fields:s.string,field:s.string,fieldFull:s.string,consents:s.string,terms:s.string,termsLink:s.string,actions:s.string,
63submitButton:s.string,status:s.string}),completedOrder:s.bool,isDisabled:s.bool,isSubmitting:s.bool,onSubmit:s.func} 64var _e,je=t("CqmL"),Ne=t.n(je),Fe={injectType:"singletonStyleTag",insert:"head",singleton:!0},Se=(E()(Ne.a,Fe),Ne.a.locals||{}),Oe=t("o0o1"),Me=t.n(Oe),Be=t("yXPU"),He=t.n(Be),Te=t("Ty5D"),ze=t("+sVj"),Le=t("VkAN"),Pe=t.n(Le),Ae={createBorrowHomeOrderMutation:Object($.gql)(_e||(_e=Pe()(["\n mutation CreateBorrowHomeOrder(\n $newsletter_subscribe: Boolean\n $email: String\n $firstname: String\n $lastname: String\n $street: String\n $postcode: String\n $city: String\n $country_id: String\n $telephone: String\n $cartItems: [ConfigurableProductCartItemInput]!\n ) {\n createBorrowHomeOrder(\n input: {\n newsletter_subscribe: $newsletter_subscribe\n address: {\n email: $email\n firstname: $firstname\n lastname: $lastname\n street: $street\n postcode: $postcode\n city: $city\n country_id: $country_id\n telephone: $telephone\n }\n cart_items: $cartItems\n }\n ) {\n order {\n order_number\n }\n }\n }\n"])))},De=t("85ui"),Ie=[],Je=function isValidCollectionItem(e){return!!e&&(!!e.parent_sku&&(!!e.currentVariant&&!!e.currentVariant.sku))},Re=function toAddressInput(e){var n=e||{},t=n.telephone?String(n.telephone).trim():"" 65return{email:n.email,firstname:n.firstname,lastname:n.lastname,street:n.street,city:n.city,postcode:n.postcode,country_id:n.country_id||n.country,telephone:Object(se.a)(t)||t}},qe=function getEntryKey(e,n){return e?Object(p.c)(e):"empty-".concat(n)},$e=function BorrowHomeCart(e){var n=function useBorrowHomeCart(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object(o.useState)(!1),t=a()(n,2),r=t[0],s=t[1],l=Object(m.a)(Ae,e.operations).createBorrowHomeOrderMutation,c=Object(g.a)(),u=a()(c,2)[1].addToast,b=Object(Te.g)(),p=Object(V.c)(),h=Object(V.d)(function(e){var n=e.borrowHome 66return n&&n.collections?n.collections:Ie}),f=Object($.useMutation)(l),w=a()(f,2),v=w[0],y=w[1],k=y.error?y.error:null,x=!!y.loading,E=Object(o.useRef)(!1),C=Object(o.useCallback)(function(e){p(De.a.removeBorrowHome(e))},[p]),_=Object(o.useMemo)(function(){return(Array.isArray(h)?h:[]).filter(function(e){return null!==e})},[h]),j=Object(o.useCallback)(function(){var e=He()(Me.a.mark(function _callee(e){var n,t,r,a,o 67return Me.a.wrap(function _callee$(l){for(;;)switch(l.prev=l.next){case 0:if(!E.current){l.next=2 68break}return l.abrupt("return") 69case 2:if(n=Array.isArray(h)?h:[],(t=n.filter(Je)).length){l.next=7 70break}return u({type:"warning",message:i.a.createElement(d.a,{id:"borrowHome.emptyProducts",defaultMessage:"Your cart for home loans is empty."}
70),dismissable:!0,timeout:1e4}),l.abrupt("return") 71case 7:return r=t.map(function(e){return{parent_sku:e.parent_sku,data:{quantity:1,sku:e.currentVariant.sku}}}),a=Re(e),o=Object.assign({},a,{newsletter_subscribe:!(!e||!e.newsletter_subscribe),cartItems:r}),E.current=!0,l.prev=11,l.next=14,v({variables:o}) 72case 14:s(!0),p(De.a.resetState()),b.push("/success"),l.next=23 73break 74case 19:l.prev=19,l.t0=l.catch(11),E.current=!1,u({type:"error",message:l.t0&&l.t0.message?l.t0.message:"Order failed.",dismissable:!0,timeout:1e4}) 75case 23:case"end":return l.stop()}},_callee,null,[[11,19]])})) 76return function(n){return e.apply(this,arguments)}}(),[h,u,v,p,b]) 77return{errorMessage:Object(o.useMemo)(function(){return Object(ze.a)([k])},[k]),isSubmitting:x,handleDeleteProduct:C,handleSubmit:j,collections:h,occCount:_,completedOrder:r}}(),t=n.errorMessage,r=n.handleDeleteProduct,s=n.handleSubmit,h=n.collections,f=n.occCount,w=n.completedOrder,v=n.isSubmitting,y=Object(g.a)(),k=a()(y,2)[1].addToast,x=Object(l.a)().formatMessage,E=Object(m.a)(Se,e.classes) 78Object(o.useEffect)(function(){t&&k({type:"warning",message:t,dismissable:!0,timeout:1e4})},[t,k]) 79var C=x({id:"borrowHome.title",defaultMessage:"Borrow Home"}),_=Object(o.useMemo)(function(){return Object(b.a)()},[]),j=Object(o.useMemo)(function(){return(Array.isArray(h)?h:[]).map(function(e,n){return i.a.createElement(M,{product:e,key:qe(e,n),onDelete:function onDelete(){return r(Object(p.c)(e))}})})},[r,h]),N=Array.isArray(h)?h.length:0,F=f?f.length:0,S=F>0 80return i.a.createElement("div",{className:E.root},i.a.createElement(u.b,null,C),i.a.createElement("header",{className:E.header},i.a.createElement("div",{className:E.headerText},i.a.createElement("h1",{className:E.title},C),i.a.createElement("p",{className:E.headerMeta},i.a.createElement(d.a,{id:"borrowHome.subtitle",defaultMessage:"Borrow up to four frames home, free of charge."}))),i.a.createElement("div",{className:E.progress},i.a.createElement("span",{className:E.progressCount},i.a.createElement(d.a,{id:"borrowHome.slotsUsed",defaultMessage:"{used} of {total} chosen",values:{used:F,total:N}})))),i.a.createElement("div",{className:E.layout},i.a.createElement("section",{className:E.section},i.a.createElement("h2",{className:E.legend},i.a.createElement(d.a,{id:"borrowHome.titleContent",defaultMessage:"Your products"})),S?i.a.createElement("ul",{className:E.cardGrid},j):i.a.createElement("div",{className:E.emptyState},i.a.createElement("p",{className:E.emptyText},i.a.createElement(d.a,{id:"borrowHome.emptyProducts",defaultMessage:"Your cart for home loans is empty."})),_?i.a.createElement(c.b,{to:_,className:E.primaryButton},i.a.createElement(d.a,{id:"borrowHome.emptySlot",defaultMessage:"Add a frame"})):null)),i.a.createElement(Ce,{onSubmit:s,completedOrder:w,isSubmitting:v,isDisabled:!S})))},Ve=$e 81$e.propTypes={classes:Object(s.shape)({root:s.string,header:s.string,headerText:s.string,title:s.string,headerMeta:s.string,progress:s.string,progressCount:s.string,layout:s.string,section:s.string,legend:s.string,cardGrid:s.string,emptyState:s.string,emptyText:s.string,primaryButton:s.string})}},tMj8:function(e,n){var t={kind:"Document",definitions:[{kind:"OperationDefinition",operation:"query",name:{kind:"Name",value:"GetCustomerDetails"},variableDefinitions:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"customer"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"id"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"email"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"firstname"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"lastname"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"default_billing"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"default_shipping"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"addresses"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"id"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"firstname"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"lastname"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"street"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"city"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"postcode"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"country_code"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"telephone"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"default_billing"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"default_shipping"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"region"},arguments:[],directives:[],selectionSet:{kind:"SelectionSet",selections:[{kind:"Field",name:{kind:"Name",value:"region"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"region_code"},arguments:[],directives:[]},{kind:"Field",name:{kind:"Name",value:"region_id"},arguments:[],directives:[]}]}}]}}]}}]}}],loc:{start:0,end:520}} 82t.loc.source={body:"query GetCustomerDetails {\n customer {\n id\n email\n firstname\n lastname\n default_billing\n default_shipping\n addresses {\n id\n firstname\n lastname\n street\n city\n postcode\n country_code\n telephone\n default_billing\n default_shipping\n region {\n region\n region_code\n region_id\n }\n }\n }\n}\n",name:"GraphQL request",locationOffset:{line:1,column:1}} 83function collectFragmentReferences(e,n){if("FragmentSpread"===e.kind)n.add(e.name.value)
84else if("VariableDefinition"===e.kind){var t=e.type 85"NamedType"===t.kind&&n.add(t.name.value)}e.selectionSet&&e.selectionSet.selections.forEach(function(e){collectFragmentReferences(e,n)}),e.variableDefinitions&&e.variableDefinitions.forEach(function(e){collectFragmentReferences(e,n)}),e.definitions&&e.definitions.forEach(function(e){collectFragmentReferences(e,n)})}var r={} 86function findOperation(e,n){for(var t=0;t<e.definitions.length;t++){var r=e.definitions[t] 87if(r.name&&r.name.value==n)return r}}!function extractReferences(){t.definitions.forEach(function(e){if(e.name){var n=new Set 88collectFragmentReferences(e,n),r[e.name.value]=n}})}(),e.exports=t,e.exports.GetCustomerDetails=function oneQuery(e,n){var t={kind:e.kind,definitions:[findOperation(e,n)]} 89e.hasOwnProperty("loc")&&(t.loc=e.loc) 90var a=r[n]||new Set,o=new Set,i=new Set 91for(a.forEach(function(e){i.add(e)});i.size>0;){var s=i 92i=new Set,s.forEach(function(e){o.has(e)||(o.add(e),(r[e]||new Set).forEach(function(e){i.add(e)}))})}return o.forEach(function(n){var r=findOperation(e,n) 93r&&t.definitions.push(r)}),t}(t,"GetCustomerDetails")},u6rJ:function(e,n,t){(n=e.exports=t("JPst")(!1)).push([e.i,".formControls-module-labelBase-3gI {\n align-items: center;\n display: flex;\n font-size: 0.8rem;\n font-weight: 400;\n line-height: 1rem;\n padding: 0.5rem 0.125rem;\n min-height: 1.8rem;\n color: rgb(var(--venia-global-color-text));\n}\n\n.formControls-module-inputBase-3Ky {\n background: #fff;\n border: 1px solid var(--te-brand-color-border);\n border-radius: var(--global-border-radius-sm);\n color: var(--te-brand-color-text);\n display: inline-flex;\n flex: 0 0 100%;\n font-size: 1rem;\n height: 2.5rem;\n margin: 0;\n max-width: 100%;\n padding: calc(0.375rem - 1px) 1rem;\n width: 100%;\n -webkit-appearance: none;\n}\n\n.formControls-module-inputBase-3Ky:focus {\n outline: none;\n border-color: var(--te-brand-color-border-active);\n}\n\n.formControls-module-textareaBase-DAz {\n min-height: 5rem;\n height: auto;\n resize: vertical;\n}\n\n.formControls-module-actionsRow-1M_ {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n.formControls-module-errorText-lLP {\n color: #ee463c;\n}\n\n/* @media (min-width: 768px) {\n .actionsRow {\n justify-content: flex-start;\n }\n} */\n",""]),n.locals={labelBase:"formControls-module-labelBase-3gI",inputBase:"formControls-module-inputBase-3Ky",textareaBase:"formControls-module-textareaBase-DAz",actionsRow:"formControls-module-actionsRow-1M_",errorText:"formControls-module-errorText-lLP"}}}])
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.