@dropins/storefront-checkout 0.1.0-alpha31 → 0.1.0-alpha33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/api.js +2 -1
  2. package/api.js.map +1 -0
  3. package/chunks/BillToShippingAddress2.js +2 -0
  4. package/chunks/BillToShippingAddress2.js.map +1 -0
  5. package/chunks/BillingForm.js +2 -0
  6. package/chunks/BillingForm.js.map +1 -0
  7. package/chunks/CartSummary.js +2 -0
  8. package/chunks/CartSummary.js.map +1 -0
  9. package/chunks/ErrorBanner.js +2 -0
  10. package/chunks/ErrorBanner.js.map +1 -0
  11. package/chunks/LoginForm.js +2 -0
  12. package/chunks/LoginForm.js.map +1 -0
  13. package/chunks/OrderSummary.js +2 -0
  14. package/chunks/OrderSummary.js.map +1 -0
  15. package/chunks/PaymentMethods.js +2 -0
  16. package/chunks/PaymentMethods.js.map +1 -0
  17. package/chunks/PlaceOrder.js +2 -0
  18. package/chunks/PlaceOrder.js.map +1 -0
  19. package/chunks/SelectedShippingMethodSignal.js +2 -0
  20. package/chunks/SelectedShippingMethodSignal.js.map +1 -0
  21. package/chunks/ShippingForm.js +2 -0
  22. package/chunks/ShippingForm.js.map +1 -0
  23. package/chunks/ShippingMethods.js +2 -0
  24. package/chunks/ShippingMethods.js.map +1 -0
  25. package/chunks/ToggleButton.js +2 -0
  26. package/chunks/ToggleButton.js.map +1 -0
  27. package/chunks/cart-item.js +2 -0
  28. package/chunks/cart-item.js.map +1 -0
  29. package/chunks/constants.js +2 -0
  30. package/chunks/constants.js.map +1 -0
  31. package/chunks/constants2.js +2 -0
  32. package/chunks/constants2.js.map +1 -0
  33. package/chunks/constants3.js +2 -0
  34. package/chunks/constants3.js.map +1 -0
  35. package/chunks/getCart.graphql.js +274 -0
  36. package/chunks/getCart.graphql.js.map +1 -0
  37. package/chunks/getMultilineValues.js +44 -0
  38. package/chunks/getMultilineValues.js.map +1 -0
  39. package/chunks/getStoreConfig.js +59 -0
  40. package/chunks/getStoreConfig.js.map +1 -0
  41. package/chunks/initialize.js +2 -0
  42. package/chunks/initialize.js.map +1 -0
  43. package/chunks/placeOrder2.js +112 -0
  44. package/chunks/placeOrder2.js.map +1 -0
  45. package/chunks/setBillingAddress.js +16 -0
  46. package/chunks/setBillingAddress.js.map +1 -0
  47. package/chunks/setGuestEmailOnCart.js +20 -0
  48. package/chunks/setGuestEmailOnCart.js.map +1 -0
  49. package/chunks/setPaymentMethod.js +16 -0
  50. package/chunks/setPaymentMethod.js.map +1 -0
  51. package/chunks/setShippingAddress.js +16 -0
  52. package/chunks/setShippingAddress.js.map +1 -0
  53. package/chunks/setShippingMethods.js +19 -0
  54. package/chunks/setShippingMethods.js.map +1 -0
  55. package/chunks/transform-shipping-methods.js +2 -0
  56. package/chunks/transform-shipping-methods.js.map +1 -0
  57. package/containers/BillToShippingAddress.js +2 -1
  58. package/containers/BillToShippingAddress.js.map +1 -0
  59. package/containers/BillingForm.js +2 -1
  60. package/containers/BillingForm.js.map +1 -0
  61. package/containers/CartSummary.js +2 -1
  62. package/containers/CartSummary.js.map +1 -0
  63. package/containers/Checkout.js +2 -1
  64. package/containers/Checkout.js.map +1 -0
  65. package/containers/ErrorBanner.js +2 -1
  66. package/containers/ErrorBanner.js.map +1 -0
  67. package/containers/LoginForm.js +2 -1
  68. package/containers/LoginForm.js.map +1 -0
  69. package/containers/OrderSummary.js +2 -1
  70. package/containers/OrderSummary.js.map +1 -0
  71. package/containers/PaymentMethods.js +2 -1
  72. package/containers/PaymentMethods.js.map +1 -0
  73. package/containers/PlaceOrder.js +2 -1
  74. package/containers/PlaceOrder.js.map +1 -0
  75. package/containers/ShippingForm.js +2 -1
  76. package/containers/ShippingForm.js.map +1 -0
  77. package/containers/ShippingMethods.js +2 -1
  78. package/containers/ShippingMethods.js.map +1 -0
  79. package/package.json +1 -1
  80. package/render.js +4 -1
  81. package/render.js.map +1 -0
  82. package/1176.js +0 -1
  83. package/1184.js +0 -1
  84. package/1268.js +0 -1
  85. package/1424.js +0 -1
  86. package/1458.js +0 -1
  87. package/1568.js +0 -1
  88. package/1600.js +0 -1
  89. package/1604.js +0 -1
  90. package/1680.js +0 -1
  91. package/184.js +0 -1
  92. package/196.js +0 -1
  93. package/2328.js +0 -1
  94. package/2388.js +0 -1
  95. package/2543.js +0 -1
  96. package/2892.js +0 -1
  97. package/2920.js +0 -1
  98. package/2956.js +0 -1
  99. package/3100.js +0 -1
  100. package/3180.js +0 -1
  101. package/3316.js +0 -1
  102. package/3484.js +0 -1
  103. package/3728.js +0 -1
  104. package/3764.js +0 -1
  105. package/3832.js +0 -1
  106. package/3836.js +0 -1
  107. package/3916.js +0 -1
  108. package/3996.js +0 -1
  109. package/4004.js +0 -1
  110. package/4424.js +0 -1
  111. package/4708.js +0 -1
  112. package/488.js +0 -1
  113. package/4928.js +0 -1
  114. package/4948.js +0 -1
  115. package/5008.js +0 -1
  116. package/5068.js +0 -1
  117. package/5476.js +0 -1
  118. package/5488.js +0 -1
  119. package/6140.js +0 -1
  120. package/6484.js +0 -1
  121. package/664.js +0 -1
  122. package/6768.js +0 -1
  123. package/6820.js +0 -1
  124. package/7524.js +0 -1
  125. package/7568.js +0 -1
  126. package/8100.js +0 -1
  127. package/8220.js +0 -1
  128. package/8256.js +0 -1
  129. package/8412.js +0 -1
  130. package/844.js +0 -1
  131. package/8668.js +0 -1
  132. package/8824.js +0 -1
  133. package/8868.js +0 -1
  134. package/8966.js +0 -1
  135. package/9176.js +0 -1
  136. package/9772.js +0 -1
  137. package/984.js +0 -1
  138. package/9940.js +0 -1
  139. package/9948.js +0 -1
  140. package/runtime.js +0 -1
@@ -0,0 +1,2 @@
1
+ import{events as fe}from"@dropins/tools/event-bus.js";import{B as z,i as re,V as $,u as he,D as ge,m as Fe,l as pe,E as ve}from"./getStoreConfig.js";import{b as K,a as g,A as N,e as Ie,D as q,g as Ee,M as Q,c as ee}from"./getMultilineValues.js";import{r as L}from"./transform-shipping-methods.js";import{useState as U,useEffect as x,useCallback as P,useRef as ke,useMemo as Ae}from"@dropins/tools/preact-hooks.js";import{classes as B,getFormErrors as Ce,VComponent as w}from"@dropins/tools/lib.js";import{Text as ne,useText as be}from"@dropins/tools/i18n.js";import{Field as Z,Input as oe,Picker as Se,Skeleton as we,SkeletonRow as C,ProgressSpinner as Me}from"@dropins/tools/components.js";/* empty css */import{jsx as a,Fragment as V,jsxs as O}from"@dropins/tools/preact-jsx-runtime.js";import{forwardRef as Re,useRef as $e,useImperativeHandle as Le,useState as j,useEffect as X}from"@dropins/tools/preact-compat.js";const Y={firstname:"given-name",lastname:"family-name",company:"organization",country:"country",region:"address-level1",city:"address-level2",postcode:"postal-code",telephone:"tel",street:"address-line1",email:"email",middlename:"additional-name",prefix:"honorific-prefix",suffix:"honorific-suffix"};function ae(e){return Object.keys(e).length===0&&e.constructor===Object}const ye=e=>e.map(t=>{var n;const r=((n=t==null?void 0:t.id)==null?void 0:n.toString())||t.code;return{text:t.name,value:r}}),De=e=>e?e.map(t=>({text:t.label,value:t.value})):[];function Ne({address:e,addressType:t,availableCountries:r,availableRegions:n,config:s,dismissError:c,errors:o,fields:d,onBlur:m,onChange:i,onInvalid:F,onSelection:I,setAddress:p}){const E=()=>{p(u=>({...u,[g.Region]:"",[g.RegionId]:""})),c(g.Region)},R=u=>{p(f=>({...f,[g.RegionId]:u}))};return d.map(u=>{var v;let f,k=u.frontendInput,A,y=u.isDisabled,D=u.isRequired,M=[],l;if(k===z.Multiline?(l=K(u.code,e),f=K(u.code,o)):(l=e[u.code],f=o[u.code]||""),u.code===g.Country&&(M=De(r),t===N.SHIPPING?(L.value.country=l,A=h=>{const b=h.target,{value:S}=b;S&&W({country_code:S}),I(h),E()}):A=I),u.code===g.RegionId&&t===N.SHIPPING&&(L.value.selectedRegionId=l),u.code===g.Region){if(t===L.value.addressType&&(y=L.value.pending),D=s.countriesWithRequiredRegion.includes(e==null?void 0:e.country_id),M=ye(n),!D&&!s.displayStateIfOptional&&(k=z.Undefined),k=M.length>0?z.Select:z.Text,k===z.Select)t===N.SHIPPING?(L.value.selectedRegion=l,A=h=>{const S=h.target.value;W({country_code:L.value.country,region_id:S}),I(h),R(S)}):A=h=>{I(h);const S=h.target.value;R(S)};else if(k===z.Text&&t===N.SHIPPING){L.value.selectedRegion=l;const h=i;i=b=>{const S=b.target,{value:H}=S;L.value.country&&W({country_code:L.value.country,region_name:H}),h(b)}}l=M.length>0?((v=M.find(h=>h.value===l))==null?void 0:v.value)||"":l}return u.code===g.PostCode&&(D=!s.countriesWithOptionalZipCode.includes(e==null?void 0:e.country_id)),{...u,error:f,frontendInput:k,handleSelect:A,isDisabled:y,isRequired:D,onBlur:m,onChange:i,onInvalid:F,options:M,value:l}})}let te;function W(e){var c;const t=re.value.data,r=!!t,n=(c=t==null?void 0:t.shippingAddresses)==null?void 0:c[0],s=n==null?void 0:n.availableShippingMethods;r&&!s&&(clearTimeout(te),te=setTimeout(()=>{Ie({cartId:t.id,criteria:e})},q))}const G=({addressType:e,code:t,index:r})=>r?`${e}-${t}-${r}`:`${e}-${t}`,T=e=>`checkout-address-form__${e}`,_e=({addressType:e,element:t})=>{const{code:r,value:n,defaultValue:s}=t;return a("input",{className:T(r),id:G({addressType:e,code:r}),name:r,type:"hidden",value:n||s},r)},xe=({addressType:e,element:t})=>{const{code:r,error:n,isDisabled:s,label:c,onBlur:o,onChange:d,onInvalid:m,validateRules:i,value:F}=t,I=se(i);return a(Z,{disabled:s,error:n,children:a(oe,{"aria-label":c,autocomplete:Y[r]||"off",className:T(r),floatingLabel:`${c} ${t.isRequired?"*":""}`,id:G({addressType:e,code:r}),onBlur:o,onChange:d,onInvalid:m,placeholder:c,required:t.isRequired||!1,type:"text",name:r,value:F??void 0,...I})})},ze=({addressType:e,element:t})=>{const{code:r,error:n,isDisabled:s,isRequired:c,label:o,multilineCount:d,onBlur:m,onChange:i,onInvalid:F,validateRules:I,value:p}=t,E=d??0,R=se(I);return a(V,{children:Array.from(Array(E).keys()).map(u=>a(Z,{disabled:s,error:(n==null?void 0:n[u])||"",className:"dropin-field--multiline",children:a(oe,{id:G({addressType:e,code:r,index:u}),className:T(r),floatingLabel:`${o} ${u!=0?u:""} ${c&&u===0?"*":""}`,autocomplete:u===0?Y[r]:"off","aria-label":o,placeholder:`${o} ${u!=0?u:""}`,type:"text",required:c&&u===0,onChange:i,onBlur:m,onInvalid:F,name:`${r}-${u}`,value:(p==null?void 0:p[u])||void 0,...R})},`${r}-${u}`))})},Pe=({addressType:e,element:t})=>{const{code:r,error:n,handleSelect:s,isDisabled:c,isRequired:o,label:d,onBlur:m,onInvalid:i,options:F,value:I}=t,p=s?{handleSelect:s}:{};return a(Z,{disabled:c,error:n,children:a(Se,{id:G({addressType:e,code:r}),className:T(r),name:r,floatingLabel:`${d} ${o?"*":""}`,required:o,placeholder:d,"aria-label":d,options:F,value:I,autocomplete:Y[r]||"off",onBlur:m,onInvalid:i,...p},r)})},Oe=({addressType:e,element:t})=>{switch(t.frontendInput){case"BOOLEAN":case"DATE":case"DATETIME":case"FILE":case"GALLERY":case"IMAGE":case"MEDIA_IMAGE":case"MULTISELECT":case"PRICE":case"TEXTAREA":case"UNDEFINED":case"WEIGHT":return null;case"HIDDEN":return _e({addressType:e,element:t});case"TEXT":return xe({addressType:e,element:t});case"MULTILINE":return ze({addressType:e,element:t});case"SELECT":return Pe({addressType:e,element:t});default:return null}},se=e=>e?e.reduce((t,r)=>{switch(r.name){case $.DateRangeMax:return{...t,max:r.value};case $.DateRangeMin:return{...t,min:r.value};case $.FileExtensions:return{...t,accept:r.value};case $.InputValidation:return{...t,pattern:Ve(r.value)};case $.MaxFileSize:case $.MaxImageHeight:case $.MaxImageWidth:return t;case $.MaxTextLength:return{...t,maxLength:r.value};case $.MinTextLength:return{...t,minLength:r.value};default:throw new Error(`Unknown rule: ${r.name}`)}},{}):{},_={alpha:/^[a-zA-Z]+$/,alphanumeric:/^[a-zA-Z0-9]+$/,"alphanumeric-w-space":/^[a-zA-Z0-9 ]+$/,"alphanum-with-spaces":/^[a-zA-Z0-9 ]+$/,email:/^([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i,numeric:/^[0-9]+$/,url:/^((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www\.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w\-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[.!/\\\w]*))?)$/},Ve=e=>{switch(e){case"alpha":return _.alpha.source;case"alphanumeric":return _.alphanumeric.source;case"alphanumeric-w-space":return _["alphanumeric-w-space"].source;case"alphanum-with-spaces":return _["alphanum-with-spaces"].source;case"url":return _.url.source;case"numeric":return _.numeric.source;case"email":return _.email.source;default:throw new Error(`Unknown validation type: ${e}`)}},Be=e=>O(we,{...e,children:[a(C,{variant:"heading",size:"medium"}),a(C,{variant:"empty",size:"medium"}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large",fullWidth:!0}),a(C,{size:"large",fullWidth:!0,lines:3}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large"}),a(C,{size:"large"})]}),Ue=({addressType:e,className:t,fields:r,formRef:n,headingId:s,name:c,...o})=>O("div",{...o,className:B(["checkout-fields-form",t]),children:[a(ue,{level:2,children:a(ne,{id:s}),className:"checkout-fields-form__title"}),a("form",{name:c,ref:n,className:B(["checkout-fields-form__form",t]),noValidate:!0,children:r.sort((d,m)=>!d.sortOrder||!m.sortOrder?d.code<m.code?-1:1:d.sortOrder-m.sortOrder).map(d=>Oe({element:d,addressType:e}))})]}),Ge=e=>{const t=new FormData(e),r=Object.fromEntries(t);return Object.entries(r).reduce((s,[c])=>{const o=e.elements[c];return o!=null&&o.validationMessage?{...s,[c]:o.validationMessage}:{...s}},{})};function Te(e){const[t,r]=j({});return X(()=>{e&&r(n=>({...n,country_id:e}))},[e]),{defaultValues:t}}function He({country:e,addressType:t}){const[r,n]=j([]);return X(()=>{if(!e){n([]);return}Ee(e,t).then(s=>{n(s||[])}).catch(s=>{console.error(s)})},[n,e,t]),{availableRegions:r}}function We({autoFill:e,addressType:t,loadAutoFill:r}){const[n,s]=j(!1),c=pe.value.data,o=!!c,d=re.value.data,m=!!d;X(()=>{var u;if(!e||!m||n)return;let i,F=!1;i=tt({addressType:t,cart:d}),!i&&o&&(i=et({addressType:t,customer:c}),F=!0);const I=f=>f?f.split(ee).length>1:!1;if(!i)return;s(!0);const p={[g.City]:i.city,[g.Company]:i.company||"",[g.Country]:i.country.value,[g.FirstName]:i.firstName,[g.LastName]:i.lastName,[g.PostCode]:i.postCode||"",[g.Telephone]:i.telephone||"",[g.Vat]:i.vatId||""},E=i.region;if(E){const f=(u=E==null?void 0:E.id)==null?void 0:u.toString();f?(p[g.Region]=f,p[g.RegionId]=f):p[g.Region]=E.code}i!=null&&i.street&&i.street.length>0&&i.street.forEach((f,k)=>{p[`${g.Street}${Q}${k}`]=f}),((i==null?void 0:i.customAttributes)||[]).forEach(f=>{I(f.code)?f.value.split(ee).forEach((A,y)=>{p[`${f.code}${Q}${y}`]=A}):p[f.code]=f.value}),r({values:p,triggerAutoSave:F})},[t,e,d,c,n,m,o,r])}const Et=Re(({addressType:e,autoFill:t=!0,children:r,headingId:n,name:s,preselectedFields:c,saveAddressHandler:o,...d},m)=>{const{fields:i}=he(),{countries:F}=ge(),I=F===void 0,p=i===void 0,{config:E}=Fe(),R=E===void 0,{defaultValues:u}=Te(E==null?void 0:E.defaultCountry),f=Qe({fields:i,preselectedFields:c}),k=$e(null),{address:A,errors:y,loadAutoFill:D,onBlur:M,dismissError:l,onChange:v,onInvalid:h,onSelection:b,setAddress:S}=Je({formRef:k,type:e,defaultValues:u,preselection:f,saveAddressHandler:o}),{availableRegions:H}=He({country:A.country_id,addressType:e});if(Le(m,()=>({triggerSaveAddress:de=>{if(!k.current)return;const me=Ge(k.current);if(ae(me))return o({signal:de,address:A})}})),We({addressType:e,autoFill:t,loadAutoFill:D}),p||I||R)return a(Be,{"data-testid":`${e}-skeleton`});const le=Ne({address:A,addressType:e,availableCountries:F,availableRegions:H,config:E,dismissError:l,errors:y,fields:i,onBlur:M,onChange:v,onInvalid:h,onSelection:b,setAddress:S}),J={[N.SHIPPING]:"shipping",[N.BILLING]:"billing"};return a(Ue,{...d,name:s,addressType:e,className:`checkout-${J[e]}-form`,"data-testid":`${J[e]}-form`,fields:le,formRef:k,headingId:n})});function qe(e){const{backupService:t}=ve(),[r,n]=U(null);x(()=>{const o=t.restore(e);o&&n(o)},[e,t]),x(()=>{const o=fe.on("checkout/order",()=>{t.remove(e)});return()=>{o==null||o.off()}},[e,t]);const s=P(o=>setTimeout(()=>{t.backup(e,o)},q),[e,t]),c=P(()=>{t.remove(e)},[e,t]);return{addressBackup:r,backup:s,removeBackup:c}}const Ze={badInput:"aria-label",patternMismatch:"aria-label",rangeOverflow:"max",rangeUnderflow:"min",tooLong:"maxlength",tooShort:"minlength",typeMismatch:"aria-label",valueMissing:"aria-label"},je=["badInput","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","typeMismatch","valueMissing"],Xe=e=>{const[t,r]=U({}),n=P(c=>{const{name:o,validity:d,validationMessage:m}=c;let i=d.valid?"":m;je.forEach(F=>{if(!d[F])return;const I=e[F];if(!I)return;const p=Ze[F];i=I.replace("{field}",c.getAttribute(p)||"")}),r(F=>({...F,[o]:i}))},[e]);return{errors:t,dismissError:c=>{t[c]&&r(o=>{const{[c]:d,...m}=o;return m})},validateFormElement:n}},Ye=e=>{const t=e.current;if(!t)return!1;const r=Ce(t);return ae(r)},Je=({formRef:e,type:t,defaultValues:r={},preselection:n={},saveAddressHandler:s})=>{const c=be({badInput:"Checkout.AddressForm.Validity.badInput",patternMismatch:"Checkout.AddressForm.Validity.patternMismatch",rangeUnderflow:"Checkout.AddressForm.Validity.rangeUnderflow",tooLong:"Checkout.AddressForm.Validity.tooLong",tooShort:"Checkout.AddressForm.Validity.tooShort",typeMismatch:"Checkout.AddressForm.Validity.typeMismatch",valueMissing:"Checkout.AddressForm.Validity.valueMissing"}),o=ke(!1),[d,m]=U({}),{addressBackup:i,backup:F,removeBackup:I}=qe(t),{errors:p,validateFormElement:E,dismissError:R}=Xe(c),u=P(l=>{o.current=!1,s(l).then(()=>{I()}).catch(v=>{o.current=!0,console.error("Saving address form failed:",v)})},[I,s]),f=(l,v)=>{m(h=>({...h,[l]:v})),o.current=!0},k=({values:l,triggerAutoSave:v=!1})=>{m(h=>({...h,...l})),v&&(o.current=!0)},A=l=>{const v=l.target,{name:h,value:b}=v;f(h,b),E(v)},y=l=>{const v=l.target;E(v)},D=l=>{const v=l.target,{name:h,value:b}=v;f(h,b),E(v)},M=l=>{l.target.checkValidity()};return x(()=>{m(l=>({...r,...n,...i,...l}))},[r,n,i]),x(()=>{if(!o.current)return;const l=F(d);return()=>{clearTimeout(l)}},[d,F]),x(()=>{if(!o.current||!Ye(e))return;const l=new AbortController,v=l.signal,h=setTimeout(()=>{u({signal:v,address:d})},q);return()=>{clearTimeout(h),l.abort()}},[d,e,u]),{address:d,errors:p,loadAutoFill:k,dismissError:R,onChange:A,onSelection:D,onBlur:M,onInvalid:y,setAddress:m}},Ke={countryCode:g.Country,region:g.Region,postCode:g.PostCode};function Qe({fields:e,preselectedFields:t}){return Ae(()=>!(!!e&&e.length>0)||!!!t?{}:Object.keys(t).reduce((s,c)=>{const o=Ke[c];return!o||!e.some(m=>m.code===o)?s:{...s,[o]:t[c]}},{}),[e,t])}const et=({addressType:e,customer:t})=>e===N.BILLING?t.defaultBillingAddress:t.defaultShippingAddress,tt=({addressType:e,cart:t})=>{if(e===N.BILLING)return t.billingAddress;const r=t.shippingAddresses;if(!(!r||r.length===0))return r[0]},rt=()=>{const e=()=>window.innerWidth>=1920?"xxlarge":window.innerWidth>=1366?"xlarge":window.innerWidth>=1024?"large":window.innerWidth>=768?"medium":"small",[t,r]=U(e());return x(()=>{let n;const s=()=>{n&&clearTimeout(n),n=setTimeout(()=>r(e()),50)};return window.addEventListener("resize",s),()=>{window.removeEventListener("resize",s),n&&clearTimeout(n)}},[]),t},ie=({children:e,className:t})=>rt()==="small"?a(V,{children:e}):a("div",{className:t,children:e}),nt=({sections:e})=>a(ie,{className:"checkout__aside",children:O(V,{children:[a(w,{node:e.orderSummary}),a(w,{node:e.cartSummary})]})}),ot=({billingAddress:e,billToShippingAddress:t,login:r,paymentMethods:n,placeOrder:s,shippingAddress:c,shippingMethods:o})=>O(V,{children:[a(w,{node:r}),c&&a(w,{node:c}),t&&a(w,{node:t}),o&&a(w,{node:o}),a(w,{node:n}),a(w,{node:e}),a(w,{node:s})]}),at=({outOfStock:e,sections:t})=>a(ie,{className:"checkout__main",children:O(V,{children:[a(ue,{level:1,className:"checkout-title",children:a(ne,{id:"Checkout.title"})}),e&&a(w,{className:"checkout-outOfStock",node:e}),t&&a(ot,{...t})]})}),ce=({banner:e,children:t,className:r,isLoading:n=!1,...s})=>O("div",{"data-testid":"checkout",className:B(["checkout",r]),...s,children:[n&&a(it,{}),e&&a(w,{className:"checkout__banner",node:e}),a("div",{className:"checkout__content",children:t})]});ce.Main=at;ce.Aside=nt;const ue=({className:e,children:t,level:r=2})=>{const n=r>=1&&r<=6?`h${r}`:"h2";return a(n,{className:e,children:t})},st=()=>{const e=P(()=>{document.body.style.overflow="hidden"},[]),t=P(()=>{document.body.style.overflow=""},[]);return{lockScroll:e,unlockScroll:t}},it=({className:e})=>{const{lockScroll:t,unlockScroll:r}=st();return x(()=>(t(),r),[t,r]),a("div",{"data-testid":"checkout-overlay-loader",className:B(["checkout-overlay-loader",e]),children:a(Me,{})})};export{Et as A,ce as C,ue as H,_ as p,rt as u};
2
+ //# sourceMappingURL=ToggleButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButton.js","sources":["../../src/utils/autocompleteFieldCodes/autocompleteFieldCodes.ts","../../src/utils/isEmpty/isEmpty.ts","../../src/utils/processFormFields/processFormFields.ts","../../src/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.ts","../../src/components/FieldsForm/fieldFactory.tsx","../../src/components/FieldsForm/validation.ts","../../src/components/FieldsForm/FieldsFormSkeleton.tsx","../../src/components/FieldsForm/FieldsForm.tsx","../../node_modules/@adobe/elsie/src/lib/form-values.ts","../../src/components/AddressForm/AddressForm.tsx","../../src/components/AddressForm/useAddressBackup.ts","../../src/hooks/useValidity/useValidity.ts","../../src/components/AddressForm/useAddressForm.ts","../../src/components/AddressForm/usePreselectedFields.ts","../../src/components/AddressForm/utils.ts","../../src/hooks/useBreakpoint/useBreakpoint.ts","../../src/components/Checkout/Checkout.tsx","../../src/components/Heading/Heading.tsx","../../src/hooks/useLockScroll/useLockScroll.ts","../../src/components/OverlayLoader/OverlayLoader.tsx"],"sourcesContent":["export interface fieldCodes {\n firstname: string;\n lastname: string;\n company: string;\n country: string;\n region: string;\n city: string;\n postcode: string;\n telephone: string;\n street: string;\n email: string;\n middlename: string;\n prefix: string;\n suffix: string;\n}\n\n// HTML attribute: autocomplete\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n// https://www.w3.org/TR/WCAG21/#input-purposes\nconst autocompleteFieldCodes: fieldCodes = {\n firstname: 'given-name',\n lastname: 'family-name',\n company: 'organization',\n country: 'country',\n region: 'address-level1',\n city: 'address-level2',\n postcode: 'postal-code',\n telephone: 'tel',\n street: 'address-line1',\n email: 'email',\n middlename: 'additional-name',\n prefix: 'honorific-prefix',\n suffix: 'honorific-suffix',\n};\n\nexport default autocompleteFieldCodes;\n","export function isEmpty(obj: Record<string, any>): boolean {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}","import { AttributeFrontendInputEnum } from '@/checkout/__generated__/types';\nimport {\n AddressFormElement,\n AddressFormErrors,\n AddressFormField,\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n Country,\n Region,\n StoreConfig,\n} from '@/checkout/data/models';\nimport { regionsSignal } from '@/checkout/signals';\n\nimport {\n getMultilineValues,\n refetchEstimatedShippingMethods,\n} from '@/checkout/utils';\nimport { PickerOption } from '@adobe/elsie/components';\nimport { StateUpdater, Dispatch } from 'preact/hooks';\n\nexport type FormFieldsProcessorProps = {\n address: AddressFormValues;\n addressType: AddressFormType;\n availableCountries: Country[] | undefined;\n availableRegions: Region[];\n config: StoreConfig;\n dismissError: (code: string) => void;\n errors: AddressFormErrors;\n fields: AddressFormField[];\n onBlur: (event: Event) => void;\n onChange: (event: Event) => void;\n onInvalid: (event: Event) => void;\n onSelection: (event: Event) => void;\n setAddress: Dispatch<StateUpdater<AddressFormValues>>;\n};\n\nconst transformRegionOptions = (regions: Region[]): PickerOption[] => {\n return regions.map((region) => {\n const value = region?.id?.toString() || region.code;\n return { text: region.name, value };\n });\n};\n\nconst transformCountryOptions = (\n countries: Country[] | undefined\n): PickerOption[] => {\n if (!countries) return [];\n\n return countries.map((country) => ({\n text: country.label,\n value: country.value,\n }));\n};\n\nexport function processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n}: FormFieldsProcessorProps): AddressFormElement[] {\n const resetRegion = () => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.Region]: '',\n [AddressFormFieldCode.RegionId]: '',\n }));\n\n dismissError(AddressFormFieldCode.Region);\n };\n\n const syncRegionId = (regionId: string) => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.RegionId]: regionId,\n }));\n };\n\n return fields.map((field) => {\n let error: string | string[];\n let frontendInput = field.frontendInput;\n let handleSelect;\n let isDisabled = field.isDisabled;\n let isRequired = field.isRequired;\n let options: PickerOption[] = [];\n let value: string | string[];\n\n if (frontendInput === AttributeFrontendInputEnum.Multiline) {\n value = getMultilineValues(field.code, address);\n error = getMultilineValues(field.code, errors);\n } else {\n value = address[field.code];\n error = errors[field.code] || '';\n }\n\n if (field.code === AddressFormFieldCode.Country) {\n options = transformCountryOptions(availableCountries);\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.country = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (value) {\n refetchEstimatedShippingMethods({\n country_code: value,\n });\n }\n\n onSelection(event);\n resetRegion();\n };\n } else {\n handleSelect = onSelection;\n }\n }\n\n if (field.code === AddressFormFieldCode.RegionId) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegionId = value as string;\n }\n }\n\n if (field.code === AddressFormFieldCode.Region) {\n if (addressType === regionsSignal.value.addressType) {\n isDisabled = regionsSignal.value.pending;\n }\n\n isRequired = config!.countriesWithRequiredRegion.includes(\n address?.country_id\n );\n options = transformRegionOptions(availableRegions);\n\n if (!isRequired && !config!.displayStateIfOptional) {\n frontendInput = AttributeFrontendInputEnum.Undefined;\n }\n\n frontendInput =\n options.length > 0\n ? AttributeFrontendInputEnum.Select\n : AttributeFrontendInputEnum.Text;\n\n if (frontendInput === AttributeFrontendInputEnum.Select) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedRegion = target.value;\n\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_id: selectedRegion,\n });\n\n onSelection(event);\n syncRegionId(selectedRegion);\n };\n } else {\n handleSelect = (event: Event) => {\n onSelection(event);\n const target = event.target as HTMLSelectElement;\n const selectedRegion = target.value;\n syncRegionId(selectedRegion);\n };\n }\n } else if (frontendInput === AttributeFrontendInputEnum.Text) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n const defaultOnChange = onChange;\n\n onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (regionsSignal.value.country) {\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_name: value as string,\n });\n }\n\n defaultOnChange(event);\n };\n }\n }\n\n value =\n options.length > 0\n ? options.find((regionOption) => regionOption!.value === value)\n ?.value || ''\n : value;\n }\n\n if (field.code === AddressFormFieldCode.PostCode) {\n isRequired = !config!.countriesWithOptionalZipCode.includes(\n address?.country_id as string\n );\n }\n\n return {\n ...field,\n error,\n frontendInput,\n handleSelect,\n isDisabled,\n isRequired,\n onBlur,\n onChange,\n onInvalid,\n options,\n value,\n };\n });\n}\n\nexport type ProcessedFormFields = ReturnType<typeof processFormFields>;\n","import { cartSignal } from '@/checkout/signals';\nimport { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { ShippingEstimationCriteria, estimateShippingMethods } from '@/checkout/api';\n\nlet estimateShipppingTimer: ReturnType<typeof setTimeout>;\nexport function refetchEstimatedShippingMethods(\n criteria: ShippingEstimationCriteria\n) {\n const cartData = cartSignal.value.data;\n const hasCartData = !!cartData;\n const firstAddress = cartData?.shippingAddresses?.[0];\n const availableShippingMethods = firstAddress?.availableShippingMethods;\n\n if (hasCartData && !availableShippingMethods) {\n clearTimeout(estimateShipppingTimer);\n\n estimateShipppingTimer = setTimeout(() => {\n estimateShippingMethods({ cartId: cartData.id, criteria });\n }, DEBOUNCE_TIME);\n }\n}\n","import { validityProps } from '@/checkout/components/FieldsForm';\nimport { AddressFormElement, AddressFormType } from '@/checkout/data/models';\nimport autocompleteFieldCodes, {\n fieldCodes,\n} from '@/checkout/utils/autocompleteFieldCodes/autocompleteFieldCodes';\nimport { Field, Input, Picker } from '@adobe/elsie/components';\n\ntype FieldFactoryProps = {\n addressType: AddressFormType;\n element: AddressFormElement;\n};\n\nconst generateId = ({\n addressType,\n code,\n index,\n}: {\n addressType: AddressFormType;\n code: string;\n index?: number;\n}) => {\n return index ? `${addressType}-${code}-${index}` : `${addressType}-${code}`;\n};\n\nconst generateClassName = (code: string) => {\n return `checkout-address-form__${code}`;\n};\n\nconst hiddenField = ({ addressType, element }: FieldFactoryProps) => {\n const { code, value, defaultValue } = element;\n\n return (\n <input\n className={generateClassName(code)}\n id={generateId({ addressType, code })}\n key={code}\n name={code}\n type=\"hidden\"\n value={value || defaultValue}\n />\n );\n};\n\nconst textField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n label,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const validity = validityProps(validateRules);\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Input\n aria-label={label}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n className={generateClassName(code)}\n floatingLabel={`${label} ${element.isRequired ? '*' : ''}`}\n id={generateId({ addressType, code })}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n placeholder={label!}\n required={element.isRequired || false}\n type=\"text\"\n // @ts-ignore\n name={code}\n // @ts-ignore\n value={value ?? undefined}\n {...validity}\n />\n </Field>\n );\n};\n\nconst multilineField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n isRequired,\n label,\n multilineCount,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const numOfFields = multilineCount ?? 0;\n const validity = validityProps(validateRules);\n\n return (\n <>\n {Array.from(Array(numOfFields).keys()).map((i) => (\n <Field\n disabled={isDisabled}\n error={(error as string[])?.[i] || ''}\n key={`${code}-${i}`}\n className=\"dropin-field--multiline\"\n >\n <Input\n id={generateId({ addressType, code, index: i })}\n className={generateClassName(code)}\n floatingLabel={`${label} ${i != 0 ? i : ''} ${\n isRequired && i === 0 ? '*' : ''\n }`}\n autocomplete={\n i === 0 ? autocompleteFieldCodes[code as keyof fieldCodes] : 'off'\n }\n aria-label={label!}\n placeholder={`${label} ${i != 0 ? i : ''}`}\n type=\"text\"\n required={isRequired && i === 0}\n onChange={onChange}\n onBlur={onBlur}\n onInvalid={onInvalid}\n // @ts-ignore\n name={`${code}-${i}`}\n // @ts-ignore\n value={(value as string[])?.[i] || undefined}\n {...validity}\n />\n </Field>\n ))}\n </>\n );\n};\n\nconst selectField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n handleSelect,\n isDisabled,\n isRequired,\n label,\n onBlur,\n onInvalid,\n options,\n value,\n } = element;\n\n const handleSelectAttribute = handleSelect ? { handleSelect } : {};\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Picker\n id={generateId({ addressType, code })}\n className={generateClassName(code)}\n key={code}\n name={code}\n floatingLabel={`${label} ${isRequired ? '*' : ''}`}\n required={isRequired}\n placeholder={label!}\n aria-label={label!}\n options={options}\n value={value as string}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n onBlur={onBlur}\n onInvalid={onInvalid}\n {...handleSelectAttribute}\n />\n </Field>\n );\n};\n\nexport const createField = ({ addressType, element }: FieldFactoryProps) => {\n switch (element.frontendInput) {\n case 'BOOLEAN':\n case 'DATE':\n case 'DATETIME':\n case 'FILE':\n case 'GALLERY':\n case 'IMAGE':\n case 'MEDIA_IMAGE':\n case 'MULTISELECT':\n case 'PRICE':\n case 'TEXTAREA':\n case 'UNDEFINED':\n case 'WEIGHT':\n return null;\n case 'HIDDEN':\n return hiddenField({ addressType, element });\n case 'TEXT':\n return textField({ addressType, element });\n case 'MULTILINE':\n return multilineField({ addressType, element });\n case 'SELECT':\n return selectField({ addressType, element });\n default:\n return null;\n }\n};\n","import { AddressFormField } from '@/checkout/data/models/address-form-fields';\nimport { ValidationRuleEnum } from '@/checkout/__generated__/types';\n\nexport type ValidityProps = {\n accept?: string;\n max?: string | number;\n maxLength?: number;\n min?: string | number;\n minLength?: number;\n pattern?: string;\n required?: boolean;\n};\n\nexport type InputValidation =\n | 'alphanumeric'\n | 'alphanumeric-w-space'\n | 'alphanum-with-spaces'\n | 'alpha'\n | 'url'\n | 'numeric'\n | 'email';\n\nexport const validityProps = (\n rules: AddressFormField['validateRules']\n): ValidityProps => {\n if (!rules) return {};\n\n return rules.reduce((props, rule) => {\n switch (rule.name) {\n case ValidationRuleEnum.DateRangeMax:\n return { ...props, max: rule.value };\n case ValidationRuleEnum.DateRangeMin:\n return { ...props, min: rule.value };\n case ValidationRuleEnum.FileExtensions:\n return { ...props, accept: rule.value };\n case ValidationRuleEnum.InputValidation:\n return {\n ...props,\n pattern: patternFor(rule.value as InputValidation),\n };\n case ValidationRuleEnum.MaxFileSize:\n case ValidationRuleEnum.MaxImageHeight:\n case ValidationRuleEnum.MaxImageWidth:\n return props;\n case ValidationRuleEnum.MaxTextLength:\n return { ...props, maxLength: rule.value };\n case ValidationRuleEnum.MinTextLength:\n return { ...props, minLength: rule.value };\n default:\n throw new Error(`Unknown rule: ${rule.name}`);\n }\n }, {});\n};\n\nexport type Patterns = {\n [key in InputValidation]: RegExp;\n};\n\n// TODO allow to override patterns\nexport const patterns: Patterns = {\n alpha: /^[a-zA-Z]+$/,\n alphanumeric: /^[a-zA-Z0-9]+$/,\n 'alphanumeric-w-space': /^[a-zA-Z0-9 ]+$/,\n 'alphanum-with-spaces': /^[a-zA-Z0-9 ]+$/,\n email:\n /^([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i,\n numeric: /^[0-9]+$/,\n url: /^((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w\\-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[.!/\\\\\\w]*))?)$/,\n};\n\nconst patternFor = (type: InputValidation): string => {\n switch (type) {\n case 'alpha':\n return patterns.alpha.source;\n case 'alphanumeric':\n return patterns.alphanumeric.source;\n case 'alphanumeric-w-space':\n return patterns['alphanumeric-w-space'].source;\n case 'alphanum-with-spaces':\n return patterns['alphanum-with-spaces'].source;\n case 'url':\n return patterns.url.source;\n case 'numeric':\n return patterns.numeric.source;\n case 'email':\n return patterns.email.source;\n default:\n throw new Error(`Unknown validation type: ${type}`);\n }\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const FieldsFormSkeleton: FunctionComponent = (props) => {\n return (\n <Skeleton {...props}>\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n </Skeleton>\n );\n};\n","import { Heading } from '@/checkout/components';\nimport { createField } from '@/checkout/components/FieldsForm';\nimport '@/checkout/components/FieldsForm/FieldsForm.css';\nimport {\n AddressFormElement,\n AddressFormType,\n} from '@/checkout/data/models/address-form-fields';\nimport { Text } from '@adobe/elsie/i18n';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, Ref } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface FieldsFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n fields: AddressFormElement[];\n formRef: Ref<HTMLFormElement>;\n headingId: string;\n name: string;\n}\n\nexport const FieldsForm: FunctionComponent<FieldsFormProps> = ({\n addressType,\n className,\n fields,\n formRef,\n headingId,\n name,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['checkout-fields-form', className])}>\n <Heading\n level={2}\n children={<Text id={headingId} />}\n className=\"checkout-fields-form__title\"\n />\n\n <form\n name={name}\n ref={formRef}\n className={classes(['checkout-fields-form__form', className])}\n noValidate\n >\n {fields\n .sort((a, b) => {\n if (!a.sortOrder || !b.sortOrder) return a.code < b.code ? -1 : 1;\n return a.sortOrder - b.sortOrder;\n })\n .map((element) => createField({ element, addressType }))}\n </form>\n </div>\n );\n};\n","export const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","import { getRegions } from '@/checkout/api';\nimport { FieldsFormSkeleton } from '@/checkout/components';\nimport {\n LoadAutoFillProps,\n DefaultValues,\n getCartAddress,\n getCustomerAddress,\n MULTILINE_CUSTOM_ATTR_SPLIT,\n MULTILINE_SUFFIX,\n SaveAddressCommand,\n useAddressForm,\n usePreselectedFields,\n} from '@/checkout/components/AddressForm';\nimport '@/checkout/components/AddressForm/AddressForm.css';\nimport { FieldsForm as Component } from '@/checkout/components/FieldsForm/FieldsForm';\nimport { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n useAddressFormFields,\n useCountries,\n useStore,\n} from '@/checkout/context';\nimport {\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n CustomerAddress,\n Region,\n} from '@/checkout/data/models';\nimport {\n BillingAddress,\n ShippingAddress,\n} from '@/checkout/data/models/address';\nimport { cartSignal, customerSignal } from '@/checkout/signals';\nimport { isEmpty, processFormFields } from '@/checkout/utils';\nimport { getFormErrors } from '@adobe/elsie/lib/form-values';\nimport {\n forwardRef,\n HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'preact/compat';\n\nfunction useDefaultValues(defaultCountry: string | undefined) {\n const [defaultValues, setDefaultValues] = useState<DefaultValues>({});\n\n useEffect(() => {\n if (!defaultCountry) return;\n setDefaultValues((defaultValues) => ({\n ...defaultValues,\n country_id: defaultCountry,\n }));\n }, [defaultCountry]);\n\n return { defaultValues };\n}\n\nfunction useRegions({\n country,\n addressType,\n}: {\n country: string | undefined;\n addressType: AddressFormType;\n}) {\n const [availableRegions, setAvailableRegions] = useState<Region[]>([]);\n\n useEffect(() => {\n if (!country) {\n setAvailableRegions([]);\n return;\n }\n\n getRegions(country, addressType)\n .then((data) => {\n setAvailableRegions(data || []);\n })\n .catch((error) => {\n console.error(error);\n });\n }, [setAvailableRegions, country, addressType]);\n\n return { availableRegions };\n}\n\nfunction useFormFill({\n autoFill,\n addressType,\n loadAutoFill,\n}: {\n autoFill: boolean;\n addressType: AddressFormType;\n loadAutoFill: (props: LoadAutoFillProps) => void;\n}) {\n const [hasAutoFilledForm, setHasAutofilledForm] = useState(false);\n const customer = customerSignal.value.data;\n const hasCustomer = !!customer;\n const cart = cartSignal.value.data;\n const hasCart = !!cart;\n\n useEffect(() => {\n if (!autoFill || !hasCart || hasAutoFilledForm) return;\n\n let autoFillAddress:\n | ShippingAddress\n | BillingAddress\n | CustomerAddress\n | undefined;\n\n let triggerAutoSave = false;\n\n autoFillAddress = getCartAddress({ addressType, cart });\n\n if (!autoFillAddress && hasCustomer) {\n autoFillAddress = getCustomerAddress({ addressType, customer });\n triggerAutoSave = true;\n }\n\n const isMultiline = (value: string) => {\n if (!value) return false;\n const parts = value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n return parts.length > 1;\n };\n\n if (!autoFillAddress) return;\n\n setHasAutofilledForm(true);\n\n const addressFormValues: AddressFormValues = {\n [AddressFormFieldCode.City]: autoFillAddress.city,\n [AddressFormFieldCode.Company]: autoFillAddress.company || '',\n [AddressFormFieldCode.Country]: autoFillAddress.country.value,\n [AddressFormFieldCode.FirstName]: autoFillAddress.firstName,\n [AddressFormFieldCode.LastName]: autoFillAddress.lastName,\n [AddressFormFieldCode.PostCode]: autoFillAddress.postCode || '',\n [AddressFormFieldCode.Telephone]: autoFillAddress.telephone || '',\n [AddressFormFieldCode.Vat]: autoFillAddress.vatId || '',\n };\n\n const region = autoFillAddress.region;\n\n if (region) {\n const regionId = region?.id?.toString();\n\n if (regionId) {\n addressFormValues[AddressFormFieldCode.Region] = regionId;\n addressFormValues[AddressFormFieldCode.RegionId] = regionId;\n } else {\n addressFormValues[AddressFormFieldCode.Region] = region.code;\n }\n }\n\n if (autoFillAddress?.street && autoFillAddress.street.length > 0) {\n autoFillAddress.street.forEach((street, index) => {\n addressFormValues[\n `${AddressFormFieldCode.Street}${MULTILINE_SUFFIX}${index}`\n ] = street!;\n });\n }\n\n const customAttributes = autoFillAddress?.customAttributes || [];\n\n customAttributes.forEach((attribute) => {\n if (!isMultiline(attribute.code)) {\n addressFormValues[attribute.code] = attribute.value;\n } else {\n const values = attribute.value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n values.forEach((value, index) => {\n addressFormValues[`${attribute.code}${MULTILINE_SUFFIX}${index}`] =\n value;\n });\n }\n });\n\n loadAutoFill({ values: addressFormValues, triggerAutoSave });\n }, [\n addressType,\n autoFill,\n cart,\n customer,\n hasAutoFilledForm,\n hasCart,\n hasCustomer,\n loadAutoFill,\n ]);\n}\n\nexport interface AddressFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n autoFill?: boolean;\n headingId: string;\n name: string;\n preselectedFields?: PreselectedAddressFields;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n}\n\nexport type AddressFormHandle = {\n triggerSaveAddress: (\n signal: AbortSignal\n ) => Promise<typeof cartSignal.value.data> | undefined;\n};\n\nexport const AddressForm = forwardRef<AddressFormHandle, AddressFormProps>(\n (\n {\n addressType,\n autoFill = true,\n children,\n headingId,\n name,\n preselectedFields,\n saveAddressHandler,\n ...props\n },\n ref\n ) => {\n const { fields } = useAddressFormFields();\n const { countries: availableCountries } = useCountries();\n const isLoadingCountries = availableCountries === undefined;\n const isLoadingFormFields = fields === undefined;\n const { config } = useStore();\n const isLoadingStoreConfig = config === undefined;\n const { defaultValues } = useDefaultValues(config?.defaultCountry);\n\n const preselection = usePreselectedFields({\n fields,\n preselectedFields,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const {\n address,\n errors,\n loadAutoFill,\n onBlur,\n dismissError,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n } = useAddressForm({\n formRef,\n type: addressType,\n defaultValues,\n preselection,\n saveAddressHandler,\n });\n\n const { availableRegions } = useRegions({\n country: address.country_id,\n addressType,\n });\n\n useImperativeHandle(ref, () => ({\n triggerSaveAddress: (signal: AbortSignal) => {\n if (!formRef.current) return;\n const errors = getFormErrors(formRef.current);\n if (!isEmpty(errors)) return;\n return saveAddressHandler({ signal, address });\n },\n }));\n\n useFormFill({\n addressType,\n autoFill,\n loadAutoFill,\n });\n\n const isLoading =\n isLoadingFormFields || isLoadingCountries || isLoadingStoreConfig;\n\n if (isLoading) {\n return <FieldsFormSkeleton data-testid={`${addressType}-skeleton`} />;\n }\n\n const transformedFields = processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n });\n\n const typeMapping = {\n [AddressFormType.SHIPPING]: 'shipping',\n [AddressFormType.BILLING]: 'billing',\n };\n\n return (\n <Component\n {...props}\n name={name}\n addressType={addressType}\n className={`checkout-${typeMapping[addressType]}-form`}\n data-testid={`${typeMapping[addressType]}-form`}\n fields={transformedFields}\n formRef={formRef}\n headingId={headingId}\n />\n );\n }\n);\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { useServices } from '@/checkout/context';\nimport { events } from '@adobe/event-bus';\nimport { DEBOUNCE_TIME } from './constants';\nimport {\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\n\nexport function useAddressBackup(addressType: AddressFormType) {\n const { backupService } = useServices();\n const [addressBackup, setAddressBackup] = useState<AddressFormValues | null>(\n null\n );\n\n // restore address from local storage\n useEffect(() => {\n const backup = backupService.restore<AddressFormValues>(addressType);\n if (!backup) return;\n setAddressBackup(backup);\n }, [addressType, backupService]);\n\n // remove backup when the order is placed\n useEffect(() => {\n const onOrder = events.on('checkout/order', () => {\n backupService.remove(addressType);\n });\n\n return () => {\n onOrder?.off();\n };\n }, [addressType, backupService]);\n\n const backup = useCallback(\n (address: AddressFormValues) => {\n return setTimeout(() => {\n // we do not want to update the state to avoid re-rendering\n backupService.backup<AddressFormValues>(addressType, address);\n }, DEBOUNCE_TIME);\n },\n [addressType, backupService]\n );\n\n const removeBackup = useCallback(() => {\n backupService.remove(addressType);\n }, [addressType, backupService]);\n\n return { addressBackup, backup, removeBackup };\n}\n","import { useCallback, useState } from 'preact/hooks';\n\nexport type Translations = {\n badInput: string;\n patternMismatch: string;\n rangeOverflow: string;\n rangeUnderflow: string;\n tooLong: string;\n tooShort: string;\n typeMismatch: string;\n valueMissing: string;\n};\n\ntype FormElement = HTMLInputElement | HTMLSelectElement;\n\ntype Constraint =\n | 'badInput'\n | 'patternMismatch'\n | 'rangeOverflow'\n | 'rangeUnderflow'\n | 'tooLong'\n | 'tooShort'\n | 'typeMismatch'\n | 'valueMissing';\n\ntype Attribute = 'aria-label' | 'maxlength' | 'minlength' | 'min' | 'max';\n\nconst attributesMapping: Record<Constraint, Attribute> = {\n badInput: 'aria-label',\n patternMismatch: 'aria-label',\n rangeOverflow: 'max',\n rangeUnderflow: 'min',\n tooLong: 'maxlength',\n tooShort: 'minlength',\n typeMismatch: 'aria-label',\n valueMissing: 'aria-label',\n};\n\nconst constraints: Constraint[] = [\n 'badInput',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\nexport const useValidity = (translations: Translations) => {\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const validateFormElement = useCallback(\n (formElement: FormElement) => {\n const { name, validity, validationMessage } = formElement;\n\n let error = validity.valid ? '' : validationMessage;\n\n constraints.forEach((constraint) => {\n if (!validity[constraint]) return;\n const translation = translations[constraint];\n if (!translation) return;\n const attribute = attributesMapping[constraint];\n error = translation.replace(\n '{field}',\n formElement.getAttribute(attribute) || ''\n );\n });\n\n setErrors((prevErrors) => ({ ...prevErrors, [name]: error }));\n },\n [translations]\n );\n\n const dismissError = (code: string) => {\n if (!errors[code]) return;\n\n setErrors((prevErrors) => {\n // eslint-disable-next-line\n const { [code]: _, ...rest } = prevErrors;\n return rest;\n });\n };\n\n return {\n errors,\n dismissError,\n validateFormElement,\n };\n};\n","import { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { useAddressBackup } from '@/checkout/components/AddressForm/useAddressBackup';\nimport {\n AddressFormErrors,\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models';\nimport {\n Translations as ValidityTranslations,\n useValidity,\n} from '@/checkout/hooks/useValidity';\nimport { cartSignal } from '@/checkout/signals';\nimport { isEmpty } from '@/checkout/utils';\nimport { useText } from '@adobe/elsie/i18n';\nimport { getFormErrors } from '@adobe/elsie/lib';\nimport { RefObject } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nexport type DefaultValues = {\n country_id?: string;\n};\n\nexport type AddressFormState = {\n address: AddressFormValues;\n errors: AddressFormErrors;\n};\n\nexport type SaveAddressCommand = {\n signal?: AbortSignal;\n address: AddressFormValues;\n};\n\nexport type LoadAutoFillProps = {\n values: AddressFormValues;\n triggerAutoSave: boolean;\n};\n\nexport type UseAddressFormProps = {\n formRef: RefObject<HTMLFormElement>;\n type: AddressFormType;\n defaultValues?: DefaultValues;\n preselection?: AddressFormValues;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n};\n\nconst isFormValid = (formRef: RefObject<HTMLFormElement>): boolean => {\n const form = formRef.current;\n if (!form) return false;\n const errors = getFormErrors(form);\n return isEmpty(errors);\n};\n\nexport const useAddressForm = ({\n formRef,\n type,\n defaultValues = {},\n preselection = {},\n saveAddressHandler,\n}: UseAddressFormProps) => {\n const translations = useText({\n badInput: 'Checkout.AddressForm.Validity.badInput',\n patternMismatch: 'Checkout.AddressForm.Validity.patternMismatch',\n rangeUnderflow: 'Checkout.AddressForm.Validity.rangeUnderflow',\n tooLong: 'Checkout.AddressForm.Validity.tooLong',\n tooShort: 'Checkout.AddressForm.Validity.tooShort',\n typeMismatch: 'Checkout.AddressForm.Validity.typeMismatch',\n valueMissing: 'Checkout.AddressForm.Validity.valueMissing',\n }) as ValidityTranslations;\n\n const hasUnsavedChanges = useRef(false);\n const [address, setAddress] = useState<AddressFormValues>({});\n\n const { addressBackup, backup, removeBackup } = useAddressBackup(type);\n\n const { errors, validateFormElement, dismissError } =\n useValidity(translations);\n\n const saveAddressForm = useCallback(\n (command: SaveAddressCommand) => {\n hasUnsavedChanges.current = false;\n saveAddressHandler(command)\n .then(() => {\n removeBackup();\n })\n .catch((error) => {\n hasUnsavedChanges.current = true;\n console.error('Saving address form failed:', error);\n });\n },\n [removeBackup, saveAddressHandler]\n );\n\n const updateField = (code: string, value: string) => {\n setAddress((prevAddress) => ({ ...prevAddress, [code]: value }));\n hasUnsavedChanges.current = true;\n };\n\n const loadAutoFill = ({\n values,\n triggerAutoSave = false,\n }: LoadAutoFillProps) => {\n setAddress((prevAddress) => ({ ...prevAddress, ...values }));\n if (!triggerAutoSave) return;\n hasUnsavedChanges.current = true;\n };\n\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n\n updateField(name, value);\n\n validateFormElement(target);\n };\n\n const onInvalid = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n validateFormElement(target);\n };\n\n const onSelection = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const { name, value } = target;\n updateField(name, value);\n validateFormElement(target);\n };\n\n const onBlur = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n target.checkValidity();\n };\n\n // load default, preselected and backup address\n useEffect(() => {\n setAddress((prevAddress) => {\n return {\n ...defaultValues,\n ...preselection,\n ...addressBackup,\n ...prevAddress,\n };\n });\n }, [defaultValues, preselection, addressBackup]);\n\n // backup address\n useEffect(() => {\n if (!hasUnsavedChanges.current) return;\n const timerId = backup(address);\n return () => {\n clearTimeout(timerId);\n };\n }, [address, backup]);\n\n // sync address with the backend\n useEffect(() => {\n if (!hasUnsavedChanges.current || !isFormValid(formRef)) return;\n\n const controller = new AbortController();\n const signal = controller.signal;\n\n const timer = setTimeout(() => {\n saveAddressForm({ signal, address });\n }, DEBOUNCE_TIME);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [address, formRef, saveAddressForm]);\n\n return {\n address,\n errors,\n loadAutoFill,\n dismissError,\n onChange,\n onSelection,\n onBlur,\n onInvalid,\n setAddress,\n };\n};\n","import { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n AddressFormField,\n AddressFormFieldCode,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\nimport { useMemo } from 'preact/hooks';\n\ntype PreselectedFieldKey = keyof PreselectedAddressFields;\n\nconst FIELD_CODE_MAPPING: {\n [key in PreselectedFieldKey]: AddressFormFieldCode;\n} = {\n countryCode: AddressFormFieldCode.Country,\n region: AddressFormFieldCode.Region,\n postCode: AddressFormFieldCode.PostCode,\n};\n\nexport type UsePreselectedFieldsProps = {\n fields?: AddressFormField[];\n preselectedFields?: PreselectedAddressFields;\n};\n\nexport function usePreselectedFields({\n fields,\n preselectedFields,\n}: UsePreselectedFieldsProps): AddressFormValues {\n return useMemo(() => {\n const hasFields = !!fields && fields.length > 0;\n const hasPreselectedFields = !!preselectedFields;\n\n if (!hasFields || !hasPreselectedFields) return {};\n\n return Object.keys(preselectedFields).reduce((acc, code) => {\n const formCode = FIELD_CODE_MAPPING[code as PreselectedFieldKey];\n if (!formCode) return acc;\n\n const formField = fields.some((field) => field.code === formCode);\n if (!formField) return acc;\n\n return {\n ...acc,\n [formCode]: preselectedFields[code as PreselectedFieldKey],\n };\n }, {});\n }, [fields, preselectedFields]);\n}\n","import { AddressFormType } from '@/checkout/data/models';\nimport { Cart } from '@/checkout/data/models/cart';\nimport { Customer } from '@/checkout/data/models/customer';\n\nexport const getCustomerAddress = ({\n addressType,\n customer,\n}: {\n addressType: AddressFormType;\n customer: Customer;\n}) => {\n return addressType === AddressFormType.BILLING\n ? customer.defaultBillingAddress\n : customer.defaultShippingAddress;\n};\n\nexport const getCartAddress = ({\n addressType,\n cart,\n}: {\n addressType: AddressFormType;\n cart: Cart;\n}) => {\n if (addressType === AddressFormType.BILLING) {\n return cart.billingAddress;\n }\n\n const shippingAddresses = cart.shippingAddresses;\n if (!shippingAddresses || shippingAddresses.length === 0) return;\n return shippingAddresses[0];\n};\n","import { useEffect, useState } from 'preact/hooks';\n\nexport const useBreakpoint = () => {\n const getBreakpoint = () => {\n if (window.innerWidth >= 1920) return 'xxlarge';\n if (window.innerWidth >= 1366) return 'xlarge';\n if (window.innerWidth >= 1024) return 'large';\n if (window.innerWidth >= 768) return 'medium';\n\n return 'small';\n };\n\n const [breakpoint, setBreakpoint] = useState<\n ReturnType<typeof getBreakpoint>\n >(getBreakpoint());\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => setBreakpoint(getBreakpoint()), 50);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, []);\n\n return breakpoint;\n};\n","import { Heading, OverlayLoader } from '@/checkout/components';\nimport { useBreakpoint } from '@/checkout/hooks/useBreakpoint';\nimport { Text } from '@adobe/elsie/i18n';\nimport { VComponent, classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nimport '@/checkout/components/Checkout/Checkout.css';\n\nconst ConditionalWrapper: FunctionComponent<{\n children?: VNode;\n className: string;\n}> = ({ children, className }) => {\n const breakpoint = useBreakpoint();\n if (breakpoint === 'small') return <>{children}</>;\n return <div className={className}>{children}</div>;\n};\n\nexport type AsideSections = {\n cartSummary: VNode;\n orderSummary: VNode;\n};\n\nconst Aside: FunctionComponent<{ sections: AsideSections }> = ({\n sections,\n}) => {\n return (\n <ConditionalWrapper className=\"checkout__aside\">\n <>\n <VComponent node={sections.orderSummary} />\n <VComponent node={sections.cartSummary} />\n </>\n </ConditionalWrapper>\n );\n};\n\nexport type MainSections = {\n billingAddress: VNode;\n billToShippingAddress?: VNode;\n login: VNode;\n paymentMethods: VNode;\n placeOrder: VNode;\n shippingAddress?: VNode;\n shippingMethods?: VNode;\n};\n\nconst MainContent: FunctionComponent<MainSections> = ({\n billingAddress,\n billToShippingAddress,\n login,\n paymentMethods,\n placeOrder,\n shippingAddress,\n shippingMethods,\n}) => {\n return (\n <>\n <VComponent node={login} />\n {shippingAddress && <VComponent node={shippingAddress} />}\n {billToShippingAddress && <VComponent node={billToShippingAddress} />}\n {shippingMethods && <VComponent node={shippingMethods} />}\n <VComponent node={paymentMethods} />\n <VComponent node={billingAddress} />\n <VComponent node={placeOrder} />\n </>\n );\n};\n\nconst Main: FunctionComponent<{\n outOfStock?: VNode;\n sections?: MainSections;\n}> = ({ outOfStock, sections }) => {\n return (\n <ConditionalWrapper className=\"checkout__main\">\n <>\n <Heading level={1} className=\"checkout-title\">\n <Text id=\"Checkout.title\" />\n </Heading>\n\n {outOfStock && (\n <VComponent className=\"checkout-outOfStock\" node={outOfStock} />\n )}\n\n {sections && <MainContent {...sections} />}\n </>\n </ConditionalWrapper>\n );\n};\n\nexport interface CheckoutProps extends HTMLAttributes<HTMLDivElement> {\n banner?: VNode;\n isLoading?: boolean;\n}\n\ninterface CheckoutComponent extends FunctionComponent<CheckoutProps> {\n Main: typeof Main;\n Aside: typeof Aside;\n}\n\nexport const Checkout: CheckoutComponent = ({\n banner,\n children,\n className,\n isLoading = false,\n ...restProps\n}) => {\n return (\n <div\n data-testid=\"checkout\"\n className={classes(['checkout', className])}\n {...restProps}\n >\n {isLoading && <OverlayLoader />}\n {banner && <VComponent className=\"checkout__banner\" node={banner} />}\n <div className=\"checkout__content\">{children}</div>\n </div>\n );\n};\n\nCheckout.Main = Main;\nCheckout.Aside = Aside;\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, JSX } from 'preact/compat';\nimport '@/checkout/components/Heading/Heading.css';\n\nexport interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, 'level'> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport const Heading: FunctionComponent<HeadingProps> = ({\n className,\n children,\n level = 2,\n}) => {\n const Heading =\n level >= 1 && level <= 6\n ? (`h${level}` as keyof JSX.IntrinsicElements)\n : 'h2';\n\n return (\n <Heading className={className}>\n {children}\n </Heading>\n );\n};\n","import { useCallback } from 'preact/hooks';\n\nexport const useScrollLock = () => {\n const lockScroll = useCallback(() => {\n document.body.style.overflow = 'hidden';\n }, []);\n\n const unlockScroll = useCallback(() => {\n document.body.style.overflow = '';\n }, []);\n\n return {\n lockScroll,\n unlockScroll,\n };\n};\n","import '@/checkout/components/OverlayLoader/OverlayLoader.css';\nimport { useScrollLock } from '@/checkout/hooks/useLockScroll';\nimport { ProgressSpinner } from '@adobe/elsie/components';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport const OverlayLoader: FunctionComponent<{ className?: string }> = ({\n className,\n}) => {\n const { lockScroll, unlockScroll } = useScrollLock();\n\n useEffect(() => {\n lockScroll();\n return unlockScroll;\n }, [lockScroll, unlockScroll]);\n\n return (\n <div\n data-testid=\"checkout-overlay-loader\"\n className={classes(['checkout-overlay-loader', className])}\n >\n <ProgressSpinner />\n </div>\n );\n};\n"],"names":["autocompleteFieldCodes","firstname","lastname","company","country","region","city","postcode","telephone","street","email","middlename","prefix","suffix","isEmpty","obj","Object","keys","length","constructor","transformRegionOptions","regions","map","value","id","toString","code","text","name","transformCountryOptions","countries","label","processFormFields","address","addressType","availableCountries","availableRegions","config","dismissError","errors","fields","onBlur","onChange","onInvalid","onSelection","setAddress","resetRegion","AddressFormFieldCode","Region","RegionId","syncRegionId","regionId","field","error","frontendInput","handleSelect","isDisabled","isRequired","options","AttributeFrontendInputEnum","Multiline","getMultilineValues","Country","AddressFormType","SHIPPING","regionsSignal","event","target","refetchEstimatedShippingMethods","country_code","selectedRegionId","pending","countriesWithRequiredRegion","includes","country_id","displayStateIfOptional","Undefined","Select","Text","selectedRegion","region_id","defaultOnChange","region_name","find","regionOption","PostCode","countriesWithOptionalZipCode","estimateShipppingTimer","criteria","cartData","cartSignal","data","hasCartData","firstAddress","shippingAddresses","availableShippingMethods","clearTimeout","setTimeout","estimateShippingMethods","cartId","DEBOUNCE_TIME","generateId","index","generateClassName","hiddenField","element","defaultValue","_jsx","className","type","textField","validateRules","validity","validityProps","Field","disabled","children","Input","autocomplete","floatingLabel","placeholder","required","undefined","multilineField","multilineCount","numOfFields","_Fragment","Array","from","i","selectField","handleSelectAttribute","Picker","createField","rules","reduce","props","rule","ValidationRuleEnum","DateRangeMax","max","DateRangeMin","min","FileExtensions","accept","InputValidation","pattern","patternFor","MaxFileSize","MaxImageHeight","MaxImageWidth","MaxTextLength","maxLength","MinTextLength","minLength","Error","patterns","alpha","alphanumeric","numeric","url","source","FieldsFormSkeleton","_jsxs","Skeleton","SkeletonRow","variant","size","fullWidth","lines","FieldsForm","formRef","headingId","classes","Heading","level","ref","noValidate","sort","a","b","sortOrder","getFormErrors","form","formData","result","key","useDefaultValues","defaultCountry","defaultValues","setDefaultValues","useState","useEffect","useRegions","setAvailableRegions","getRegions","then","catch","console","useFormFill","autoFill","loadAutoFill","hasAutoFilledForm","setHasAutofilledForm","customer","customerSignal","hasCustomer","cart","hasCart","autoFillAddress","triggerAutoSave","getCartAddress","getCustomerAddress","isMultiline","split","MULTILINE_CUSTOM_ATTR_SPLIT","addressFormValues","City","Company","FirstName","firstName","LastName","lastName","postCode","Telephone","Vat","vatId","forEach","Street","MULTILINE_SUFFIX","customAttributes","attribute","values","AddressForm","forwardRef","preselectedFields","saveAddressHandler","useAddressFormFields","useCountries","isLoadingCountries","isLoadingFormFields","useStore","isLoadingStoreConfig","preselection","usePreselectedFields","useRef","useAddressForm","useImperativeHandle","triggerSaveAddress","signal","current","transformedFields","typeMapping","BILLING","Component","useAddressBackup","backupService","useServices","addressBackup","setAddressBackup","backup","restore","onOrder","events","on","remove","off","useCallback","removeBackup","attributesMapping","badInput","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","typeMismatch","valueMissing","constraints","useValidity","translations","setErrors","validateFormElement","formElement","validationMessage","valid","constraint","translation","replace","getAttribute","prevErrors","_","rest","isFormValid","useText","hasUnsavedChanges","saveAddressForm","command","updateField","prevAddress","checkValidity","timerId","controller","AbortController","timer","abort","FIELD_CODE_MAPPING","countryCode","useMemo","acc","formCode","some","defaultBillingAddress","defaultShippingAddress","billingAddress","useBreakpoint","getBreakpoint","window","innerWidth","breakpoint","setBreakpoint","timeoutId","handleResize","addEventListener","removeEventListener","ConditionalWrapper","Aside","sections","VComponent","node","orderSummary","cartSummary","MainContent","billToShippingAddress","login","paymentMethods","placeOrder","shippingAddress","shippingMethods","Main","outOfStock","Checkout","banner","isLoading","restProps","OverlayLoader","useScrollLock","lockScroll","body","style","overflow","unlockScroll","ProgressSpinner"],"mappings":"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","x_google_ignoreList":[8]}
@@ -0,0 +1,2 @@
1
+ var o=(r=>(r.InStock="IN_STOCK",r.OutOfStock="OUT_OF_STOCK",r))(o||{}),u=(r=>(r.Simple="SimpleProduct",r.Configurable="ConfigurableProduct",r.Downloadable="DownloadableProduct",r.GiftCard="GiftCardProduct",r.Virtual="VirtualProduct",r.Bundle="BundleProduct",r))(u||{});export{u as I,o as S};
2
+ //# sourceMappingURL=cart-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cart-item.js","sources":["../../src/data/models/cart-item.ts"],"sourcesContent":["export enum StockStatus {\n InStock = 'IN_STOCK',\n OutOfStock = 'OUT_OF_STOCK',\n}\n\ntype Image = {\n src: string;\n alt?: string;\n};\n\ntype Price = {\n value: number;\n currency: string;\n};\n\nexport enum ItemKind {\n Simple = 'SimpleProduct',\n Configurable = 'ConfigurableProduct',\n Downloadable = 'DownloadableProduct',\n GiftCard = 'GiftCardProduct',\n Virtual = 'VirtualProduct',\n Bundle = 'BundleProduct',\n}\n\ntype BaseItem = {\n url?: string | null;\n discount?: Price;\n discounted: boolean;\n image?: Image;\n kind: ItemKind;\n name: string;\n price: Price;\n priceInclTax: Price;\n quantity: number;\n regularPrice: Price;\n sku: string;\n total: Price;\n totalInclTax: Price;\n onlyXLeftInStock?: number | null;\n uid: string;\n stockStatus: StockStatus;\n};\n\ntype Customizable = {\n customizableOptions: Record<string, string>;\n};\n\ntype SimpleItem = Customizable;\ntype ConfigurableItem = Customizable & {\n configurableOptions: Record<string, string>;\n};\ntype DownloadableItem = Customizable & {\n links: String[];\n};\ntype GiftCardItem = Customizable & {\n senderName: string;\n senderEmail: string;\n recipientName: string;\n recipientEmail: string;\n};\ntype VirtualItem = Customizable;\ntype BundleItem = BaseItem;\n\nexport type Item = BaseItem &\n (\n | SimpleItem\n | ConfigurableItem\n | DownloadableItem\n | GiftCardItem\n | VirtualItem\n | BundleItem\n );\n"],"names":["StockStatus","InStock","OutOfStock","ItemKind","Simple","Configurable","Downloadable","GiftCard","Virtual","Bundle"],"mappings":"AAAYA,IAAAA,GAAAA,IACVC,EAAAA,QAAU,WACVC,EAAAA,WAAa,eAFHF,IAAAA,GAAAA,CAAAA,CAAAA,EAeAG,GAAAA,IACVC,EAAAA,OAAS,gBACTC,EAAAA,aAAe,sBACfC,EAAAA,aAAe,sBACfC,EAAAA,SAAW,kBACXC,EAAAA,QAAU,iBACVC,EAAAA,OAAS,gBANCN,IAAAA,GAAAA,CAAAA,CAAAA"}
@@ -0,0 +1,2 @@
1
+ const s="shipping_address";export{s as S};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../src/containers/ShippingForm/constants.ts"],"sourcesContent":["export const SHIPPING_FORM_NAME = 'shipping_address';\n"],"names":["SHIPPING_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAqB"}
@@ -0,0 +1,2 @@
1
+ const o="login-form";export{o as L};
2
+ //# sourceMappingURL=constants2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants2.js","sources":["../../src/containers/LoginForm/constants.ts"],"sourcesContent":["export const LOGIN_FORM_NAME= 'login-form';\n"],"names":["LOGIN_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAiB"}
@@ -0,0 +1,2 @@
1
+ const s="billing_address";export{s as B};
2
+ //# sourceMappingURL=constants3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants3.js","sources":["../../src/containers/BillingForm/constants.ts"],"sourcesContent":["export const BILLING_FORM_NAME = 'billing_address';\n"],"names":["BILLING_FORM_NAME"],"mappings":"AAAO,MAAMA,EAAoB"}
@@ -0,0 +1,274 @@
1
+ import{t as d,g as p}from"./transform-shipping-methods.js";import{P as m}from"./getStoreConfig.js";import{S as u,I as n}from"./cart-item.js";const f=e=>{if(e)return{code:e.code,title:e.title}},b=e=>{if(e)return e.filter(t=>!!t).map(t=>{const{code:r,title:a}=t;return{code:r,title:a}})},v=e=>e?!!e.code&&!!e.label:!1,y=e=>{if(!v(e))return;const{code:t,label:r,region_id:a}=e;return a?{code:t,name:r,id:a}:{code:t,name:r}},g=e=>{const{code:t,label:r}=e;return{value:t,label:r}},C=e=>e?"code"in e&&"value"in e:!1,h=e=>e.filter(C).map(t=>{const{code:r,value:a}=t;return{code:r,value:a}}),s=e=>{const t=e.street.filter(Boolean);return{firstName:e.firstname,lastName:e.lastname,company:e.company||void 0,city:e.city,street:t,postCode:e.postcode||void 0,vatId:e.vat_id||void 0,telephone:e.telephone||void 0,region:y(e.region),country:g(e.country),customAttributes:h(e.custom_attributes)}},I=e=>{if(e)return s(e)},S=e=>e.filter(t=>!!t).map(t=>{const{available_shipping_methods:r,selected_shipping_method:a,...o}=t;return{...s(o),availableShippingMethods:d(r),selectedShippingMethod:p(a)}}),x=e=>e?e.filter(Boolean).map(t=>{const{code:r}=t;return{code:r}}):[],E=e=>({coupons:x(e.applied_coupons),availablePaymentMethods:b(e.available_payment_methods),billingAddress:I(e.billing_address),email:e.email??void 0,id:e.id,virtual:e.is_virtual,items:G(e.itemsV2),prices:e.prices,selectedPaymentMethod:f(e.selected_payment_method),shippingAddresses:S(e.shipping_addresses),totalQty:e.total_quantity});function A(e){switch(e){case"SimpleCartItem":return n.Simple;case"ConfigurableCartItem":return n.Configurable;case"DownloadableCartItem":return n.Downloadable;case"GiftCardCartItem":return n.GiftCard;case"VirtualCartItem":return n.Virtual;case"BundleCartItem":return n.Bundle;default:throw new Error(`Unknown item kind: ${e}`)}}function k(e){if(e.__typename!=="ConfigurableCartItem")return;const t={};for(const r of e.configurable_options)t[r.option_label]=r.value_label;return t}function w(e){if(!("customizable_options"in e))return;const t={};for(const r of e.customizable_options)t[r.label]=r.values.map(a=>a.label||a.value).join(", ");return t}function M(e){var i,l;const r=e.__typename==="ConfigurableCartItem"?(i=e.configured_variant)==null?void 0:i.thumbnail:(l=e.product)==null?void 0:l.thumbnail;if(!r||!r.url)return;const a={src:r.url},o=String(r.label||e.product.name);return o!==""&&(a.alt=o),a}function D(e){var t,r;return{kind:A(e.__typename),name:e.product.name,quantity:e.quantity,sku:e.product.sku,uid:e.uid,url:(t=e.product)==null?void 0:t.url_key,image:M(e),price:{value:e.prices.price.value,currency:e.prices.price.currency},priceInclTax:{value:e.prices.price_including_tax.value,currency:e.prices.price_including_tax.currency},total:{value:e.prices.row_total.value,currency:e.prices.row_total.currency},totalInclTax:{value:e.prices.row_total_including_tax.value,currency:e.prices.row_total_including_tax.currency},discount:{value:e.prices.total_item_discount.value,currency:e.prices.total_item_discount.currency},regularPrice:{value:e.product.price_range.maximum_price.regular_price.value,currency:e.product.price_range.maximum_price.regular_price.currency},discounted:e.product.price_range.maximum_price.regular_price.value*e.quantity!==e.prices.row_total.value,stockStatus:e.product.stock_status===m.OutOfStock?u.OutOfStock:u.InStock,configurableOptions:k(e),customizableOptions:w(e),links:e.__typename==="DownloadableCartItem"?(r=e.links)==null?void 0:r.map(a=>a==null?void 0:a.title):void 0,onlyXLeftInStock:e.product.only_x_left_in_stock,senderName:e.__typename==="GiftCardCartItem"?e.sender_name:void 0,senderEmail:e.__typename==="GiftCardCartItem"?e.sender_email:void 0,recipientEmail:e.__typename==="GiftCardCartItem"?e.recipient_email:void 0,recipientName:e.__typename==="GiftCardCartItem"?e.recipient_name:void 0,message:e.__typename==="GiftCardCartItem"?e.message:void 0}}function z(e){return e.filter(Boolean).map(t=>D(t))}function G(e){return e?z(e.items):[]}const c=`
2
+ fragment CartData on Cart {
3
+ is_virtual
4
+ email
5
+ billing_address {
6
+ city
7
+ country {
8
+ code
9
+ label
10
+ }
11
+ firstname
12
+ lastname
13
+ company
14
+ postcode
15
+ vat_id
16
+ region {
17
+ region_id
18
+ code
19
+ label
20
+ }
21
+ street
22
+ telephone
23
+ custom_attributes {
24
+ ... on AttributeValue {
25
+ code
26
+ value
27
+ }
28
+ }
29
+ }
30
+ shipping_addresses {
31
+ firstname
32
+ lastname
33
+ company
34
+ street
35
+ city
36
+ postcode
37
+ vat_id
38
+ region {
39
+ region_id
40
+ code
41
+ label
42
+ }
43
+ country {
44
+ code
45
+ label
46
+ }
47
+ telephone
48
+ custom_attributes {
49
+ ... on AttributeValue {
50
+ code
51
+ value
52
+ }
53
+ }
54
+ available_shipping_methods {
55
+ amount {
56
+ currency
57
+ value
58
+ }
59
+ available
60
+ carrier_code
61
+ carrier_title
62
+ error_message
63
+ method_code
64
+ method_title
65
+ price_excl_tax {
66
+ value
67
+ currency
68
+ }
69
+ price_incl_tax {
70
+ value
71
+ currency
72
+ }
73
+ }
74
+ selected_shipping_method {
75
+ amount {
76
+ value
77
+ currency
78
+ }
79
+ carrier_code
80
+ carrier_title
81
+ method_code
82
+ method_title
83
+ }
84
+ }
85
+ available_payment_methods {
86
+ code
87
+ title
88
+ }
89
+ selected_payment_method {
90
+ code
91
+ title
92
+ }
93
+ applied_coupons {
94
+ code
95
+ }
96
+ prices {
97
+ grand_total {
98
+ value
99
+ currency
100
+ }
101
+ subtotal_excluding_tax {
102
+ value
103
+ currency
104
+ }
105
+ subtotal_including_tax {
106
+ value
107
+ currency
108
+ }
109
+ applied_taxes {
110
+ label
111
+ amount {
112
+ currency
113
+ value
114
+ }
115
+ }
116
+ }
117
+ }
118
+ `,_=`
119
+ fragment CartSummaryItems on Cart {
120
+ total_quantity
121
+ itemsV2(sort: { field: CREATED_AT, order: DESC }) {
122
+ total_count
123
+ items {
124
+ __typename
125
+ uid
126
+ product {
127
+ __typename
128
+ uid
129
+ name
130
+ sku
131
+ url_key
132
+ thumbnail {
133
+ url
134
+ label
135
+ }
136
+ small_image {
137
+ url
138
+ }
139
+ price_range {
140
+ maximum_price {
141
+ regular_price {
142
+ currency
143
+ value
144
+ }
145
+ }
146
+ }
147
+ stock_status
148
+ only_x_left_in_stock
149
+ }
150
+ prices {
151
+ fixed_product_taxes {
152
+ amount {
153
+ currency
154
+ value
155
+ }
156
+ label
157
+ }
158
+ price {
159
+ currency
160
+ value
161
+ }
162
+ price_including_tax {
163
+ currency
164
+ value
165
+ }
166
+ row_total {
167
+ value
168
+ currency
169
+ }
170
+ row_total_including_tax {
171
+ value
172
+ currency
173
+ }
174
+ total_item_discount {
175
+ value
176
+ currency
177
+ }
178
+ }
179
+ quantity
180
+ errors {
181
+ code
182
+ message
183
+ }
184
+ ... on SimpleCartItem {
185
+ customizable_options {
186
+ label
187
+ values {
188
+ label
189
+ value
190
+ }
191
+ }
192
+ }
193
+ ... on VirtualCartItem {
194
+ customizable_options {
195
+ label
196
+ values {
197
+ label
198
+ value
199
+ }
200
+ }
201
+ }
202
+ ... on ConfigurableCartItem {
203
+ customizable_options {
204
+ label
205
+ values {
206
+ label
207
+ value
208
+ }
209
+ }
210
+ configurable_options {
211
+ id
212
+ configurable_product_option_uid
213
+ option_label
214
+ configurable_product_option_value_uid
215
+ value_label
216
+ value_id
217
+ }
218
+ configured_variant {
219
+ thumbnail {
220
+ label
221
+ url
222
+ }
223
+ }
224
+ }
225
+ ... on GiftCardCartItem {
226
+ sender_name
227
+ sender_email
228
+ recipient_name
229
+ recipient_email
230
+ customizable_options {
231
+ label
232
+ values {
233
+ label
234
+ value
235
+ }
236
+ }
237
+ }
238
+ ... on DownloadableCartItem {
239
+ links {
240
+ title
241
+ }
242
+ customizable_options {
243
+ label
244
+ values {
245
+ label
246
+ value
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ `,R=`
254
+ query getCart($cartId: String!) {
255
+ cart(cart_id: $cartId) {
256
+ id
257
+ ...CartData
258
+ ...CartSummaryItems
259
+ }
260
+ }
261
+ ${c}
262
+ ${_}
263
+ `,V=`
264
+ query getCustomerCart {
265
+ cart: customerCart {
266
+ id
267
+ ...CartData
268
+ ...CartSummaryItems
269
+ }
270
+ }
271
+ ${c}
272
+ ${_}
273
+ `;export{c as C,_ as a,V as b,R as g,E as t};
274
+ //# sourceMappingURL=getCart.graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCart.graphql.js","sources":["../../src/data/transforms/transform-payment-methods.ts","../../src/data/transforms/transform-address.ts","../../src/data/transforms/transform-cart.ts","../../src/data/transforms/transform-cart-item.ts","../../src/api/getCart/graphql/getCart.graphql.ts"],"sourcesContent":["import { GetCartQuery } from '@/checkout/__generated__/types';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\n\ntype SelectedPaymentMethod = NonNullable<\n GetCartQuery['cart']\n>['selected_payment_method'];\n\ntype AvailablePaymentMethods = NonNullable<\n GetCartQuery['cart']\n>['available_payment_methods'];\n\ntype AvailablePaymentMethod = NonNullable<AvailablePaymentMethods>[number];\n\ntype NonNullabePaymentMethod = NonNullable<AvailablePaymentMethod>;\n\nconst transformSelectedPaymentMethod = (\n data: SelectedPaymentMethod\n): PaymentMethod | undefined => {\n if (!data) return;\n return { code: data.code, title: data.title };\n};\n\nconst transformAvailablePaymentMethods = (\n data: AvailablePaymentMethods\n): PaymentMethod[] | undefined => {\n if (!data) return;\n\n return data\n .filter((method) => !!method)\n .map((method) => {\n const { code, title } = method as NonNullabePaymentMethod;\n return { code, title };\n });\n};\n\nexport { transformAvailablePaymentMethods, transformSelectedPaymentMethod };\n","import { GetCartQuery } from '@/checkout/__generated__/types';\nimport {\n Address as AddressModel,\n ShippingAddress as ShippingAddressModel,\n BillingAddress as BillingAddressModel,\n} from '@/checkout/data/models/address';\nimport {\n Region as RegionModel,\n Country as CountryModel,\n CustomAttribute as CustomAttributeModel,\n} from '@/checkout/data/models';\nimport {\n transformSelectedShippingMethod,\n transformShippingMethods,\n} from '@/checkout/data/transforms/transform-shipping-methods';\n\ntype ShippingAddresses = NonNullable<\n GetCartQuery['cart']\n>['shipping_addresses'];\ntype ShippingAddress = ShippingAddresses[0];\ntype NonNullableShippingAddress = NonNullable<ShippingAddress>;\n\ntype AddressRegion = NonNullableShippingAddress['region'];\ntype NonNullableAddressRegion = NonNullable<AddressRegion>;\ntype ValidatedAddressRegion = {\n code: NonNullable<NonNullableAddressRegion['code']>;\n label: NonNullable<NonNullableAddressRegion['label']>;\n region_id: NonNullableAddressRegion['region_id'];\n};\n\ntype AddressCountry = NonNullableShippingAddress['country'];\ntype NonNullableAddressCountry = NonNullable<AddressCountry>;\ntype ValidatedAddressCountry = {\n code: NonNullable<NonNullableAddressCountry['code']>;\n label: NonNullable<NonNullableAddressCountry['label']>;\n};\n\ntype BillingAddress = NonNullable<GetCartQuery['cart']>['billing_address'];\ntype NonNullableBillingAddress = NonNullable<BillingAddress>;\n\ntype CustomAttributes =\n | NonNullableShippingAddress['custom_attributes']\n | NonNullableBillingAddress['custom_attributes'];\n\nconst isValidAddressRegion = (region: AddressRegion): boolean => {\n if (!region) return false;\n return !!region.code && !!region.label;\n};\n\nconst transformAddressRegion = (\n data: AddressRegion\n): RegionModel | undefined => {\n if (!isValidAddressRegion(data)) return;\n const { code, label, region_id } = data as ValidatedAddressRegion;\n if (!region_id) return { code, name: label };\n return { code, name: label, id: region_id };\n};\n\nconst transformAddressCountry = (data: AddressCountry): CountryModel => {\n const { code, label } = data as ValidatedAddressCountry;\n return { value: code, label };\n};\n\nconst isValidCustomAttribute = (attribute: any): boolean => {\n if (!attribute) return false;\n return 'code' in attribute && 'value' in attribute;\n};\n\nexport const transformCustomAttributes = (\n data: CustomAttributes\n): CustomAttributeModel[] => {\n return data.filter(isValidCustomAttribute).map((attribute) => {\n const { code, value } = attribute as { code: string; value: string };\n return { code, value };\n });\n};\n\nconst buildBaseAddress = (\n data: NonNullableShippingAddress | NonNullableBillingAddress\n): AddressModel => {\n const street = data.street.filter(Boolean) as string[];\n\n return {\n firstName: data.firstname,\n lastName: data.lastname,\n company: data.company || undefined,\n city: data.city,\n street,\n postCode: data.postcode || undefined,\n vatId: data.vat_id || undefined,\n telephone: data.telephone || undefined,\n region: transformAddressRegion(data.region),\n country: transformAddressCountry(data.country),\n customAttributes: transformCustomAttributes(data.custom_attributes),\n };\n};\n\nconst transformBillingAddress = (\n data: BillingAddress\n): BillingAddressModel | undefined => {\n if (!data) return;\n return buildBaseAddress(data);\n};\n\nconst transformShippingAddresses = (\n data: ShippingAddresses\n): ShippingAddressModel[] | undefined => {\n return data\n .filter((address) => !!address)\n .map((address) => {\n const {\n available_shipping_methods,\n selected_shipping_method,\n ...baseData\n } = address as NonNullableShippingAddress;\n\n return {\n ...buildBaseAddress(baseData),\n availableShippingMethods: transformShippingMethods(\n available_shipping_methods\n ),\n selectedShippingMethod: transformSelectedShippingMethod(\n selected_shipping_method\n ),\n };\n });\n};\n\nexport {\n ShippingAddress,\n BillingAddress,\n transformBillingAddress,\n transformShippingAddresses,\n};\n","import { GetCartQuery } from '@/checkout/__generated__/types';\nimport { Cart as CartModel } from '@/checkout/data/models';\nimport { transformCartItemsV2 } from '@/checkout/data/transforms';\nimport {\n transformAvailablePaymentMethods,\n transformSelectedPaymentMethod,\n} from '@/checkout/data/transforms/transform-payment-methods';\n\nimport {\n transformShippingAddresses,\n transformBillingAddress,\n} from '@/checkout/data/transforms/transform-address';\n\ntype Cart = NonNullable<GetCartQuery['cart']>;\ntype NonNullableCoupons = NonNullable<Cart['applied_coupons']>;\ntype NonNullableCoupon = NonNullable<NonNullableCoupons[number]>;\n\nexport const transformCoupons = (coupons: Cart['applied_coupons']) => {\n if (!coupons) return [];\n\n return coupons.filter(Boolean).map((coupon) => {\n const { code } = coupon as NonNullableCoupon;\n return { code };\n });\n};\n\nconst transformCart = (cart: Cart): CartModel => {\n return {\n coupons: transformCoupons(cart.applied_coupons),\n availablePaymentMethods: transformAvailablePaymentMethods(\n cart.available_payment_methods\n ),\n billingAddress: transformBillingAddress(cart.billing_address),\n email: cart.email ?? undefined,\n id: cart.id,\n virtual: cart.is_virtual,\n items: transformCartItemsV2(cart.itemsV2),\n prices: cart.prices,\n selectedPaymentMethod: transformSelectedPaymentMethod(\n cart.selected_payment_method\n ),\n shippingAddresses: transformShippingAddresses(cart.shipping_addresses),\n totalQty: cart.total_quantity,\n };\n};\n\nexport { Cart, transformCart };\n","import {\n GetCartQuery,\n ProductStockStatus,\n} from '@/checkout/__generated__/types';\nimport { Item, ItemKind, StockStatus } from '@/checkout/data/models';\n\ntype CartItemsV2 = NonNullable<GetCartQuery['cart']>['itemsV2'];\ntype NonNullableCartItemsV2 = NonNullable<CartItemsV2>;\ntype CartItems = NonNullableCartItemsV2['items'];\ntype NonNullableCartItems = NonNullable<NonNullableCartItemsV2['items']>;\ntype NonNullableCartItem = NonNullable<NonNullableCartItems[number]>;\n\nfunction transformType(typename: string): ItemKind {\n switch (typename) {\n case 'SimpleCartItem':\n return ItemKind.Simple;\n case 'ConfigurableCartItem':\n return ItemKind.Configurable;\n case 'DownloadableCartItem':\n return ItemKind.Downloadable;\n case 'GiftCardCartItem':\n return ItemKind.GiftCard;\n case 'VirtualCartItem':\n return ItemKind.Virtual;\n case 'BundleCartItem':\n return ItemKind.Bundle;\n default:\n throw new Error(`Unknown item kind: ${typename}`);\n }\n}\n\nfunction transformConfigurableOptions(item: NonNullableCartItem) {\n if (item.__typename !== 'ConfigurableCartItem') return;\n\n const configurableOptions: Record<string, string> = {};\n\n for (const option of item.configurable_options) {\n configurableOptions[option!.option_label] = option!.value_label;\n }\n\n return configurableOptions;\n}\n\nfunction transformCustomizableOptions(item: NonNullableCartItem) {\n if (!('customizable_options' in item)) return;\n\n const customizableOptions: Record<string, string> = {};\n\n for (const option of item.customizable_options) {\n customizableOptions[option!.label] = option!.values\n // some customizable option types don't have a label (empty string), so we use the value instead\n .map((optionValue) => optionValue!.label || optionValue!.value)\n .join(', ');\n }\n\n return customizableOptions;\n}\n\nfunction transformImage(item: NonNullableCartItem) {\n const isConfigurable = item.__typename === 'ConfigurableCartItem';\n\n const thumbnail = isConfigurable\n ? item.configured_variant?.thumbnail\n : item.product?.thumbnail;\n\n if (!thumbnail || !thumbnail.url) return;\n\n const image: Item['image'] = { src: thumbnail.url };\n const alt = String(thumbnail.label || item.product.name);\n if (alt !== '') image.alt = alt;\n return image;\n}\n\nfunction transformCartItem(item: NonNullableCartItem) {\n return {\n kind: transformType(item.__typename),\n name: item.product.name!,\n quantity: item.quantity,\n sku: item.product.sku!,\n uid: item.uid,\n url: item.product?.url_key,\n image: transformImage(item),\n price: {\n value: item.prices!.price.value!,\n currency: item.prices!.price.currency!,\n },\n priceInclTax: {\n value: item.prices!.price_including_tax.value!,\n currency: item.prices!.price_including_tax.currency!,\n },\n total: {\n value: item.prices!.row_total.value!,\n currency: item.prices!.row_total.currency!,\n },\n totalInclTax: {\n value: item.prices!.row_total_including_tax.value!,\n currency: item.prices!.row_total_including_tax.currency!,\n },\n discount: {\n value: item.prices!.total_item_discount!.value!,\n currency: item.prices!.total_item_discount!.currency!,\n },\n regularPrice: {\n value: item.product.price_range.maximum_price!.regular_price.value!,\n currency: item.product.price_range.maximum_price!.regular_price.currency!,\n },\n discounted:\n item.product.price_range.maximum_price!.regular_price.value! *\n item.quantity !==\n item.prices!.row_total.value,\n stockStatus:\n item.product.stock_status === ProductStockStatus.OutOfStock\n ? StockStatus.OutOfStock\n : StockStatus.InStock,\n configurableOptions: transformConfigurableOptions(item),\n customizableOptions: transformCustomizableOptions(item),\n links:\n item.__typename === 'DownloadableCartItem'\n ? item.links?.map((option) => option?.title!)\n : undefined,\n onlyXLeftInStock: item.product.only_x_left_in_stock,\n senderName:\n item.__typename === 'GiftCardCartItem' ? item.sender_name : undefined,\n senderEmail:\n item.__typename === 'GiftCardCartItem' ? item.sender_email! : undefined,\n recipientEmail:\n item.__typename === 'GiftCardCartItem'\n ? item.recipient_email!\n : undefined,\n recipientName:\n item.__typename === 'GiftCardCartItem' ? item.recipient_name : undefined,\n message: item.__typename === 'GiftCardCartItem' ? item.message : undefined,\n };\n}\n\nexport function transformCartItems(items: CartItems): Item[] {\n return items\n .filter(Boolean)\n .map((item) => transformCartItem(item as NonNullableCartItem));\n}\n\nexport function transformCartItemsV2(itemsV2: CartItemsV2): Item[] {\n if (!itemsV2) return [];\n\n return transformCartItems(itemsV2.items);\n}\n","export const CART_DATA_FRAGMENT = /* GraphQL */ `\n fragment CartData on Cart {\n is_virtual\n email\n billing_address {\n city\n country {\n code\n label\n }\n firstname\n lastname\n company\n postcode\n vat_id\n region {\n region_id\n code\n label\n }\n street\n telephone\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n }\n shipping_addresses {\n firstname\n lastname\n company\n street\n city\n postcode\n vat_id\n region {\n region_id\n code\n label\n }\n country {\n code\n label\n }\n telephone\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n available_shipping_methods {\n amount {\n currency\n value\n }\n available\n carrier_code\n carrier_title\n error_message\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n selected_shipping_method {\n amount {\n value\n currency\n }\n carrier_code\n carrier_title\n method_code\n method_title\n }\n }\n available_payment_methods {\n code\n title\n }\n selected_payment_method {\n code\n title\n }\n applied_coupons {\n code\n }\n prices {\n grand_total {\n value\n currency\n }\n subtotal_excluding_tax {\n value\n currency\n }\n subtotal_including_tax {\n value\n currency\n }\n applied_taxes {\n label\n amount {\n currency\n value\n }\n }\n }\n }\n`;\n\nexport const CART_SUMMARY_FRAGMENT = /* GraphQL */ `\n fragment CartSummaryItems on Cart {\n total_quantity\n itemsV2(sort: { field: CREATED_AT, order: DESC }) {\n total_count\n items {\n __typename\n uid\n product {\n __typename\n uid\n name\n sku\n url_key\n thumbnail {\n url\n label\n }\n small_image {\n url\n }\n price_range {\n maximum_price {\n regular_price {\n currency\n value\n }\n }\n }\n stock_status\n only_x_left_in_stock\n }\n prices {\n fixed_product_taxes {\n amount {\n currency\n value\n }\n label\n }\n price {\n currency\n value\n }\n price_including_tax {\n currency\n value\n }\n row_total {\n value\n currency\n }\n row_total_including_tax {\n value\n currency\n }\n total_item_discount {\n value\n currency\n }\n }\n quantity\n errors {\n code\n message\n }\n ... on SimpleCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on VirtualCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on ConfigurableCartItem {\n customizable_options {\n label\n values {\n label\n value\n }\n }\n configurable_options {\n id\n configurable_product_option_uid\n option_label\n configurable_product_option_value_uid\n value_label\n value_id\n }\n configured_variant {\n thumbnail {\n label\n url\n }\n }\n }\n ... on GiftCardCartItem {\n sender_name\n sender_email\n recipient_name\n recipient_email\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n ... on DownloadableCartItem {\n links {\n title\n }\n customizable_options {\n label\n values {\n label\n value\n }\n }\n }\n }\n }\n }\n`;\n\nexport const getCartQuery = /* GraphQL */ `\n query getCart($cartId: String!) {\n cart(cart_id: $cartId) {\n id\n ...CartData\n ...CartSummaryItems\n }\n }\n ${CART_DATA_FRAGMENT}\n ${CART_SUMMARY_FRAGMENT}\n`;\n\nexport const getCustomerCartQuery = /* GraphQL */ `\n query getCustomerCart {\n cart: customerCart {\n id\n ...CartData\n ...CartSummaryItems\n }\n }\n ${CART_DATA_FRAGMENT}\n ${CART_SUMMARY_FRAGMENT}\n`;\n"],"names":["transformSelectedPaymentMethod","data","code","title","transformAvailablePaymentMethods","filter","method","map","isValidAddressRegion","region","label","transformAddressRegion","region_id","name","id","transformAddressCountry","value","isValidCustomAttribute","attribute","transformCustomAttributes","buildBaseAddress","street","Boolean","firstName","firstname","lastName","lastname","company","undefined","city","postCode","postcode","vatId","vat_id","telephone","country","customAttributes","custom_attributes","transformBillingAddress","transformShippingAddresses","address","available_shipping_methods","selected_shipping_method","baseData","availableShippingMethods","transformShippingMethods","selectedShippingMethod","transformSelectedShippingMethod","transformCoupons","coupons","coupon","transformCart","cart","applied_coupons","availablePaymentMethods","available_payment_methods","billingAddress","billing_address","email","virtual","is_virtual","items","transformCartItemsV2","itemsV2","prices","selectedPaymentMethod","selected_payment_method","shippingAddresses","shipping_addresses","totalQty","total_quantity","transformType","typename","ItemKind","Simple","Configurable","Downloadable","GiftCard","Virtual","Bundle","Error","transformConfigurableOptions","item","__typename","configurableOptions","option","configurable_options","option_label","value_label","transformCustomizableOptions","customizableOptions","customizable_options","values","optionValue","join","transformImage","thumbnail","configured_variant","product","url","image","src","alt","String","transformCartItem","kind","quantity","sku","uid","url_key","price","currency","priceInclTax","price_including_tax","total","row_total","totalInclTax","row_total_including_tax","discount","total_item_discount","regularPrice","price_range","maximum_price","regular_price","discounted","stockStatus","stock_status","ProductStockStatus","OutOfStock","StockStatus","InStock","links","onlyXLeftInStock","only_x_left_in_stock","senderName","sender_name","senderEmail","sender_email","recipientEmail","recipient_email","recipientName","recipient_name","message","transformCartItems","CART_DATA_FRAGMENT","CART_SUMMARY_FRAGMENT","getCartQuery","getCustomerCartQuery"],"mappings":"6IAeA,MAAMA,EACJC,GAC8B,CAC9B,GAAKA,EACE,MAAA,CAAEC,KAAMD,EAAKC,KAAMC,MAAOF,EAAKE,KAAAA,CACxC,EAEMC,EACJH,GACgC,CAChC,GAAKA,EAEEA,OAAAA,EACJI,OAAmBC,GAAA,CAAC,CAACA,CAAM,EAC3BC,IAAgBD,GAAA,CACT,KAAA,CAAEJ,KAAAA,EAAMC,MAAAA,CAAUG,EAAAA,EACjB,MAAA,CAAEJ,KAAAA,EAAMC,MAAAA,CAAAA,CAAM,CACtB,CACL,ECWMK,EAAwBC,GACvBA,EACE,CAAC,CAACA,EAAOP,MAAQ,CAAC,CAACO,EAAOC,MADb,GAIhBC,EACJV,GAC4B,CACxB,GAAA,CAACO,EAAqBP,CAAI,EAAG,OAC3B,KAAA,CAAEC,KAAAA,EAAMQ,MAAAA,EAAOE,UAAAA,CAAcX,EAAAA,EACnC,OAAKW,EACE,CAAEV,KAAAA,EAAMW,KAAMH,EAAOI,GAAIF,CAAAA,EADT,CAAEV,KAAAA,EAAMW,KAAMH,CAAAA,CAEvC,EAEMK,EAA2Bd,GAAuC,CAChE,KAAA,CAAEC,KAAAA,EAAMQ,MAAAA,CAAUT,EAAAA,EACjB,MAAA,CAAEe,MAAOd,EAAMQ,MAAAA,CAAAA,CACxB,EAEMO,EAA0BC,GACzBA,EACE,SAAUA,GAAa,UAAWA,EADlB,GAIZC,EACXlB,GAEOA,EAAKI,OAAOY,CAAsB,EAAEV,IAAmBW,GAAA,CACtD,KAAA,CAAEhB,KAAAA,EAAMc,MAAAA,CAAUE,EAAAA,EACjB,MAAA,CAAEhB,KAAAA,EAAMc,MAAAA,CAAAA,CAAM,CACtB,EAGGI,EACJnB,GACiB,CACjB,MAAMoB,EAASpB,EAAKoB,OAAOhB,OAAOiB,OAAO,EAElC,MAAA,CACLC,UAAWtB,EAAKuB,UAChBC,SAAUxB,EAAKyB,SACfC,QAAS1B,EAAK0B,SAAWC,OACzBC,KAAM5B,EAAK4B,KACXR,OAAAA,EACAS,SAAU7B,EAAK8B,UAAYH,OAC3BI,MAAO/B,EAAKgC,QAAUL,OACtBM,UAAWjC,EAAKiC,WAAaN,OAC7BnB,OAAQE,EAAuBV,EAAKQ,MAAM,EAC1C0B,QAASpB,EAAwBd,EAAKkC,OAAO,EAC7CC,iBAAkBjB,EAA0BlB,EAAKoC,iBAAiB,CAAA,CAEtE,EAEMC,EACJrC,GACoC,CACpC,GAAKA,EACL,OAAOmB,EAAiBnB,CAAI,CAC9B,EAEMsC,EACJtC,GAEOA,EACJI,OAAoBmC,GAAA,CAAC,CAACA,CAAO,EAC7BjC,IAAiBiC,GAAA,CACV,KAAA,CACJC,2BAAAA,EACAC,yBAAAA,EACA,GAAGC,CACDH,EAAAA,EAEG,MAAA,CACL,GAAGpB,EAAiBuB,CAAQ,EAC5BC,yBAA0BC,EACxBJ,CACF,EACAK,uBAAwBC,EACtBL,CACF,CAAA,CACF,CACD,EC5GQM,EAAoBC,GAC1BA,EAEEA,EAAQ5C,OAAOiB,OAAO,EAAEf,IAAgB2C,GAAA,CACvC,KAAA,CAAEhD,KAAAA,CAASgD,EAAAA,EACV,MAAA,CAAEhD,KAAAA,CAAAA,CAAK,CACf,EALoB,GAQjBiD,EAAiBC,IACd,CACLH,QAASD,EAAiBI,EAAKC,eAAe,EAC9CC,wBAAyBlD,EACvBgD,EAAKG,yBACP,EACAC,eAAgBlB,EAAwBc,EAAKK,eAAe,EAC5DC,MAAON,EAAKM,OAAS9B,OACrBd,GAAIsC,EAAKtC,GACT6C,QAASP,EAAKQ,WACdC,MAAOC,EAAqBV,EAAKW,OAAO,EACxCC,OAAQZ,EAAKY,OACbC,sBAAuBjE,EACrBoD,EAAKc,uBACP,EACAC,kBAAmB5B,EAA2Ba,EAAKgB,kBAAkB,EACrEC,SAAUjB,EAAKkB,cAAAA,GC9BnB,SAASC,EAAcC,EAA4B,CACjD,OAAQA,EAAQ,CACd,IAAK,iBACH,OAAOC,EAASC,OAClB,IAAK,uBACH,OAAOD,EAASE,aAClB,IAAK,uBACH,OAAOF,EAASG,aAClB,IAAK,mBACH,OAAOH,EAASI,SAClB,IAAK,kBACH,OAAOJ,EAASK,QAClB,IAAK,iBACH,OAAOL,EAASM,OAClB,QACE,MAAM,IAAIC,MAAM,sBAAsBR,CAAQ,EAAE,CACpD,CACF,CAEA,SAASS,EAA6BC,EAA2B,CAC/D,GAAIA,EAAKC,aAAe,uBAAwB,OAEhD,MAAMC,EAA8C,CAAA,EAEzCC,UAAAA,KAAUH,EAAKI,qBACJD,EAAAA,EAAQE,YAAY,EAAIF,EAAQG,YAG/CJ,OAAAA,CACT,CAEA,SAASK,EAA6BP,EAA2B,CAC/D,GAAI,EAAE,yBAA0BA,GAAO,OAEvC,MAAMQ,EAA8C,CAAA,EAEzCL,UAAAA,KAAUH,EAAKS,qBACxBD,EAAoBL,EAAQ3E,KAAK,EAAI2E,EAAQO,OAE1CrF,IAAqBsF,GAAAA,EAAanF,OAASmF,EAAa7E,KAAK,EAC7D8E,KAAK,IAAI,EAGPJ,OAAAA,CACT,CAEA,SAASK,EAAeb,EAA2B,SAGjD,MAAMc,EAFiBd,EAAKC,aAAe,wBAGvCD,EAAAA,EAAKe,qBAALf,YAAAA,EAAyBc,WACzBd,EAAAA,EAAKgB,UAALhB,YAAAA,EAAcc,UAEd,GAAA,CAACA,GAAa,CAACA,EAAUG,IAAK,OAElC,MAAMC,EAAuB,CAAEC,IAAKL,EAAUG,GAAAA,EACxCG,EAAMC,OAAOP,EAAUtF,OAASwE,EAAKgB,QAAQrF,IAAI,EACvD,OAAIyF,IAAQ,KAAIF,EAAME,IAAMA,GACrBF,CACT,CAEA,SAASI,EAAkBtB,EAA2B,SAC7C,MAAA,CACLuB,KAAMlC,EAAcW,EAAKC,UAAU,EACnCtE,KAAMqE,EAAKgB,QAAQrF,KACnB6F,SAAUxB,EAAKwB,SACfC,IAAKzB,EAAKgB,QAAQS,IAClBC,IAAK1B,EAAK0B,IACVT,KAAKjB,EAAAA,EAAKgB,UAALhB,YAAAA,EAAc2B,QACnBT,MAAOL,EAAeb,CAAI,EAC1B4B,MAAO,CACL9F,MAAOkE,EAAKlB,OAAQ8C,MAAM9F,MAC1B+F,SAAU7B,EAAKlB,OAAQ8C,MAAMC,QAC/B,EACAC,aAAc,CACZhG,MAAOkE,EAAKlB,OAAQiD,oBAAoBjG,MACxC+F,SAAU7B,EAAKlB,OAAQiD,oBAAoBF,QAC7C,EACAG,MAAO,CACLlG,MAAOkE,EAAKlB,OAAQmD,UAAUnG,MAC9B+F,SAAU7B,EAAKlB,OAAQmD,UAAUJ,QACnC,EACAK,aAAc,CACZpG,MAAOkE,EAAKlB,OAAQqD,wBAAwBrG,MAC5C+F,SAAU7B,EAAKlB,OAAQqD,wBAAwBN,QACjD,EACAO,SAAU,CACRtG,MAAOkE,EAAKlB,OAAQuD,oBAAqBvG,MACzC+F,SAAU7B,EAAKlB,OAAQuD,oBAAqBR,QAC9C,EACAS,aAAc,CACZxG,MAAOkE,EAAKgB,QAAQuB,YAAYC,cAAeC,cAAc3G,MAC7D+F,SAAU7B,EAAKgB,QAAQuB,YAAYC,cAAeC,cAAcZ,QAClE,EACAa,WACE1C,EAAKgB,QAAQuB,YAAYC,cAAeC,cAAc3G,MACpDkE,EAAKwB,WACPxB,EAAKlB,OAAQmD,UAAUnG,MACzB6G,YACE3C,EAAKgB,QAAQ4B,eAAiBC,EAAmBC,WAC7CC,EAAYD,WACZC,EAAYC,QAClB9C,oBAAqBH,EAA6BC,CAAI,EACtDQ,oBAAqBD,EAA6BP,CAAI,EACtDiD,MACEjD,EAAKC,aAAe,wBAChBD,EAAAA,EAAKiD,QAALjD,YAAAA,EAAY3E,IAAK8E,GAAWA,GAAAA,YAAAA,EAAQlF,OACpCyB,OACNwG,iBAAkBlD,EAAKgB,QAAQmC,qBAC/BC,WACEpD,EAAKC,aAAe,mBAAqBD,EAAKqD,YAAc3G,OAC9D4G,YACEtD,EAAKC,aAAe,mBAAqBD,EAAKuD,aAAgB7G,OAChE8G,eACExD,EAAKC,aAAe,mBAChBD,EAAKyD,gBACL/G,OACNgH,cACE1D,EAAKC,aAAe,mBAAqBD,EAAK2D,eAAiBjH,OACjEkH,QAAS5D,EAAKC,aAAe,mBAAqBD,EAAK4D,QAAUlH,MAAAA,CAErE,CAEO,SAASmH,EAAmBlF,EAA0B,CACpDA,OAAAA,EACJxD,OAAOiB,OAAO,EACdf,IAAciG,GAAAA,EAAkBtB,EAA4B,CACjE,CAEO,SAASpB,EAAqBC,EAA8B,CACjE,OAAKA,EAEEgF,EAAmBhF,EAAQF,KAAK,EAFlB,EAGvB,CCjJamF,MAAAA,EAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuHnCC,EAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyItCC,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQtCF,CAAkB;AAAA,IAClBC,CAAqB;AAAA,EAGZE,EAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ9CH,CAAkB;AAAA,IAClBC,CAAqB;"}