efficient-storefront-blocks 0.68.0 → 0.74.0

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 (149) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +5 -5
  3. package/dist/chunks/EditorPreviewCheckout-YQ3F5MSG.js +4 -0
  4. package/dist/chunks/{SiteEditorProvider-A7YYACG3.js → SiteEditorProvider-Z33JB5BA.js} +1 -1
  5. package/dist/chunks/chunk-5OFEWRWI.js +1 -0
  6. package/dist/chunks/{chunk-FL3KMJAT.js → chunk-BZDVZUF4.js} +1 -1
  7. package/dist/chunks/{chunk-EPJ5SM3A.js → chunk-QJDTP7K6.js} +1 -1
  8. package/dist/chunks/chunk-UGXNUQRA.js +246 -0
  9. package/dist/chunks/chunk-UJW4B64R.js +1 -0
  10. package/dist/chunks/{fitment-data-RXCNCZLU.js → fitment-data-DHKRLKNI.js} +1 -1
  11. package/dist/contract.js +10 -2
  12. package/dist/editor/components/CategorySource.js +1 -1
  13. package/dist/editor/components/HeaderSettingsPanel.d.ts +4 -7
  14. package/dist/editor/components/HeaderSettingsPanel.js +1 -1
  15. package/dist/editor/components/PreviewHeader.d.ts +0 -1
  16. package/dist/editor/components/PreviewHeader.js +1 -11
  17. package/dist/editor/lib/document/blocks/commerce/AlloyWheelsListing/fields.js +1 -1
  18. package/dist/editor/lib/document/blocks/commerce/GalleryB/fields.js +1 -1
  19. package/dist/editor/lib/document/blocks/commerce/ProductGrid/fields.js +1 -1
  20. package/dist/editor/lib/document/blocks/service/ContactCards/fields.d.ts +2 -0
  21. package/dist/editor/lib/document/blocks/service/ContactCards/fields.js +1 -0
  22. package/dist/editor/lib/document/blocks/service/ContactRouting/fields.js +1 -1
  23. package/dist/editor/lib/document/blocks/service/FooterDivider/fields.js +1 -1
  24. package/dist/editor/lib/document/blocks/service/FooterMenu/fields.js +1 -1
  25. package/dist/editor/lib/document/blocks/service/FooterMessaging/fields.d.ts +2 -0
  26. package/dist/editor/lib/document/blocks/service/FooterMessaging/fields.js +1 -0
  27. package/dist/editor/lib/document/blocks/service/FooterPayment/fields.d.ts +2 -0
  28. package/dist/editor/lib/document/blocks/service/FooterPayment/fields.js +1 -0
  29. package/dist/editor/lib/document/blocks/service/MessagingCards/fields.d.ts +2 -0
  30. package/dist/editor/lib/document/blocks/service/MessagingCards/fields.js +1 -0
  31. package/dist/editor/lib/document/blocks/service/OpeningHours/fields.d.ts +2 -0
  32. package/dist/editor/lib/document/blocks/service/OpeningHours/fields.js +1 -0
  33. package/dist/editor/lib/document/blocks/service/Reviews/fields.js +1 -1
  34. package/dist/editor/lib/document/blocks/service/index.d.ts +1 -1
  35. package/dist/editor/lib/document/blocks/service/index.js +1 -1
  36. package/dist/editor/lib/document/config.d.ts +2 -0
  37. package/dist/editor/lib/document/config.js +1 -1
  38. package/dist/editor/lib/efficient-block-sources.js +1 -1
  39. package/dist/editor/lib/header-settings-source.d.ts +2 -1
  40. package/dist/editor/lib/header-settings-source.js +1 -1
  41. package/dist/editor/lib/storefront-editor-words.d.ts +25 -7
  42. package/dist/editor/lib/storefront-editor-words.js +1 -1
  43. package/dist/editor.css +1 -1
  44. package/dist/index.d.ts +3 -3
  45. package/dist/index.js +193 -318
  46. package/dist/links.d.ts +0 -2
  47. package/dist/links.js +1 -1
  48. package/dist/render/app/globals.css +41 -13
  49. package/dist/render/built-with.json +1 -1
  50. package/dist/render/components/ChatLauncher.js +1 -1
  51. package/dist/render/components/ContactCards.d.ts +13 -0
  52. package/dist/render/components/ContactCards.js +1 -0
  53. package/dist/render/components/CopyText.d.ts +4 -0
  54. package/dist/render/components/CopyText.js +1 -0
  55. package/dist/render/components/Events.d.ts +3 -0
  56. package/dist/render/components/Events.js +1 -1
  57. package/dist/render/components/FooterMessaging.d.ts +5 -0
  58. package/dist/render/components/FooterMessaging.js +1 -0
  59. package/dist/render/components/FooterPayment.d.ts +11 -0
  60. package/dist/render/components/FooterPayment.js +1 -0
  61. package/dist/render/components/GalleryItem.js +1 -1
  62. package/dist/render/components/GalleryShowcase.js +1 -1
  63. package/dist/render/components/Header.d.ts +2 -1
  64. package/dist/render/components/Header.js +1 -1
  65. package/dist/render/components/HeaderCallButton.d.ts +9 -0
  66. package/dist/render/components/HeaderCallButton.js +1 -0
  67. package/dist/render/components/MessagingCards.d.ts +9 -0
  68. package/dist/render/components/MessagingCards.js +1 -0
  69. package/dist/render/components/OpeningHours.d.ts +12 -0
  70. package/dist/render/components/OpeningHours.js +1 -0
  71. package/dist/render/components/QrCode.d.ts +5 -0
  72. package/dist/render/components/QrCode.js +1 -0
  73. package/dist/render/components/Reviews.d.ts +14 -4
  74. package/dist/render/components/Reviews.js +1 -1
  75. package/dist/render/components/checkout/CheckoutPageClient.d.ts +2 -25
  76. package/dist/render/components/checkout/CheckoutPageClient.js +1 -3
  77. package/dist/render/components/checkout/checkout-parts.d.ts +5 -0
  78. package/dist/render/components/checkout/checkout-parts.js +1 -0
  79. package/dist/render/components/checkout/checkout-state.d.ts +169 -0
  80. package/dist/render/components/checkout/checkout-state.js +3 -0
  81. package/dist/render/components/pdp-dynamic/DynamicGalleryGrid.d.ts +6 -0
  82. package/dist/render/components/pdp-dynamic/DynamicGalleryGrid.js +1 -1
  83. package/dist/render/components/pdp-dynamic/RecordPhotoGallery.d.ts +3 -2
  84. package/dist/render/components/pdp-dynamic/RecordPhotoGallery.js +1 -1
  85. package/dist/render/lib/api/index.d.ts +1 -0
  86. package/dist/render/lib/api/types.d.ts +3 -0
  87. package/dist/render/lib/document/blocks/commerce/GalleryB/render.js +1 -1
  88. package/dist/render/lib/document/blocks/service/ContactCards/meta.d.ts +7 -0
  89. package/dist/render/lib/document/blocks/service/ContactCards/meta.js +1 -0
  90. package/dist/render/lib/document/blocks/service/ContactCards/render.d.ts +4 -0
  91. package/dist/render/lib/document/blocks/service/ContactCards/render.js +1 -0
  92. package/dist/render/lib/document/blocks/service/Events/render.js +1 -1
  93. package/dist/render/lib/document/blocks/service/Footer/meta.js +1 -1
  94. package/dist/render/lib/document/blocks/service/FooterGroup/meta.js +1 -1
  95. package/dist/render/lib/document/blocks/service/FooterMessaging/meta.d.ts +2 -0
  96. package/dist/render/lib/document/blocks/service/FooterMessaging/meta.js +1 -0
  97. package/dist/render/lib/document/blocks/service/FooterMessaging/render.d.ts +2 -0
  98. package/dist/render/lib/document/blocks/service/FooterMessaging/render.js +1 -0
  99. package/dist/render/lib/document/blocks/service/FooterPayment/meta.d.ts +3 -0
  100. package/dist/render/lib/document/blocks/service/FooterPayment/meta.js +1 -0
  101. package/dist/render/lib/document/blocks/service/FooterPayment/render.d.ts +2 -0
  102. package/dist/render/lib/document/blocks/service/FooterPayment/render.js +1 -0
  103. package/dist/render/lib/document/blocks/service/MessagingCards/meta.d.ts +2 -0
  104. package/dist/render/lib/document/blocks/service/MessagingCards/meta.js +1 -0
  105. package/dist/render/lib/document/blocks/service/MessagingCards/render.d.ts +4 -0
  106. package/dist/render/lib/document/blocks/service/MessagingCards/render.js +1 -0
  107. package/dist/render/lib/document/blocks/service/OpeningHours/meta.d.ts +11 -0
  108. package/dist/render/lib/document/blocks/service/OpeningHours/meta.js +1 -0
  109. package/dist/render/lib/document/blocks/service/OpeningHours/render.d.ts +4 -0
  110. package/dist/render/lib/document/blocks/service/OpeningHours/render.js +1 -0
  111. package/dist/render/lib/document/blocks/service/Reviews/meta.d.ts +6 -0
  112. package/dist/render/lib/document/blocks/service/Reviews/meta.js +1 -1
  113. package/dist/render/lib/document/blocks/service/Reviews/render.js +1 -1
  114. package/dist/render/lib/document/blocks/service/metas.d.ts +5 -0
  115. package/dist/render/lib/document/blocks/service/metas.js +1 -1
  116. package/dist/render/lib/document/blocks/service/renders.d.ts +5 -0
  117. package/dist/render/lib/document/blocks/service/renders.js +1 -1
  118. package/dist/render/lib/document/blocks/text-part-shapes.json +147 -6
  119. package/dist/render/lib/document/card-templates.d.ts +2 -0
  120. package/dist/render/lib/document/card-templates.js +1 -0
  121. package/dist/render/lib/document/footer-page-blocks.d.ts +1 -0
  122. package/dist/render/lib/document/footer-page-blocks.js +1 -1
  123. package/dist/render/lib/document/lazy-draws.js +1 -1
  124. package/dist/render/lib/document/render-config.d.ts +2 -0
  125. package/dist/render/lib/document/render-config.js +1 -1
  126. package/dist/render/lib/document/section-to-box-rows-reviews.d.ts +1 -0
  127. package/dist/render/lib/document/section-to-box-rows-reviews.js +1 -0
  128. package/dist/render/lib/links/link-rules.d.ts +1 -1
  129. package/dist/render/lib/links/link-rules.js +1 -1
  130. package/dist/render/lib/qr.d.ts +5 -0
  131. package/dist/render/lib/qr.js +1 -0
  132. package/dist/render/lib/sections/messaging.d.ts +45 -0
  133. package/dist/render/lib/sections/messaging.js +1 -0
  134. package/dist/render/lib/sections/opening-hours.d.ts +53 -0
  135. package/dist/render/lib/sections/opening-hours.js +1 -0
  136. package/dist/render/lib/sections/reviews.d.ts +1 -0
  137. package/dist/render/lib/sections/reviews.js +1 -0
  138. package/dist/render/lib/wheels/catalog-default-layout.js +1 -1
  139. package/dist/render/lib/wheels/collections.js +1 -1
  140. package/dist/words.d.ts +51 -12
  141. package/dist/words.js +4 -4
  142. package/package.json +4 -4
  143. package/dist/chunks/EditorPreviewCheckout-HFP2TRRR.js +0 -4
  144. package/dist/chunks/chunk-CFYEYTU6.js +0 -254
  145. package/dist/chunks/chunk-YACB7UXA.js +0 -1
  146. package/dist/chunks/chunk-YTQS5GY6.js +0 -1
  147. package/dist/render/components/useStorefrontReviews.d.ts +0 -2
  148. package/dist/render/components/useStorefrontReviews.js +0 -1
  149. /package/dist/chunks/{chunk-CFYEYTU6.js.LEGAL.txt → chunk-UGXNUQRA.js.LEGAL.txt} +0 -0
@@ -0,0 +1,3 @@
1
+ "use client";import{jsx as w}from"react/jsx-runtime";import{createContext as ht,useContext as gt,useEffect as u,useMemo as Oe,useRef as Re,useState as e}from"react";import{isOrderable as _e,useCart as kt}from"../CartContext.js";import{useCurrency as wt}from"../CurrencyContext.js";import{getClickIds as Ct}from"../../lib/click-ids.js";import{adConsentForOrder as St}from"../../lib/consent/choice.js";import{trackBeginCheckout as bt,trackPurchase as At}from"../../lib/google-tag.js";import{trackMetaPurchase as Pt}from"../../lib/meta-pixel.js";import{ApiError as vt,api as N,products as p}from"../../lib/api/index.js";import{uuid as xt}from"../../lib/uuid.js";import{orderLinesForSets as Nt}from"../../lib/commerce.js";import{canPersist as Kt,safeSessionStorage as g}from"efficient-web-builder/format/lib/safe-storage";import{AFTERPAY_CONTEXT_KEY as Et,AFTERPAY_RETURN as It,GOCARDLESS_CONTEXT_KEY as oe,KLARNA_CONTEXT_KEY as re,ZIP_CONTEXT_KEY as Ot,ZIP_RETURN as Rt,runWalletReturn as Te}from"../../lib/checkout/wallet-return.js";import{matchSubdivision as _t}from"../../lib/checkout/match-subdivision.js";import{couponCodeForOrder as Tt,couponRefusedByOrder as Mt}from"../../lib/cart/coupon-preview.js";function Me(r){const f=r.indexOf(`
2
+ `);return f===-1?[r,""]:[r.slice(0,f),r.slice(f+1)]}function Le(r,{canParkContext:f}={canParkContext:!0}){const l=r.paymentMethods,a=[];return l.includes("card")&&a.push({key:"card",title:"Card",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA · MC · AMEX"})}),l.includes("paypal")&&r.paypalClientId&&a.push({key:"paypal",title:"PayPal",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAYPAL · CARDS"})}),l.includes("afterpay")&&a.push({key:"afterpay",title:"Afterpay",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"4 × INTEREST-FREE"})}),l.includes("square")&&r.squareApplicationId&&r.squareLocationId&&a.push({key:"square",title:"Card (Square)",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"VISA · MC · AMEX"})}),l.includes("gocardless")&&f&&a.push({key:"gocardless",title:"Bank Direct Debit",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY BY BANK"})}),l.includes("zip")&&a.push({key:"zip",title:"Zip",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY IN 4"})}),l.includes("klarna")&&f&&a.push({key:"klarna",title:"Klarna",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-accent",children:"PAY LATER"})}),a.push({key:"bank",title:"Bank transfer",body:null,price:w("span",{className:"font-mono text-[12px] uppercase tracking-[0.2em] text-fg-dim",children:"Invoiced"})}),a}function Lt({site:r,logo:f,preview:l=!1}){const{items:a,totals:C,coupon:b,refuseCoupon:Ue,deliveryOptions:se,shippingMethodId:U,setShippingMethodId:ze,setQuoteDestination:K,identify:ce,clearCapturedCart:E}=kt(),Ye=se.find(t=>t.id===U)?.pickupLocation??null,{country:Be,countries:I,activeCountry:ae,formatMoney:qe}=wt(),[y,ie]=e(()=>Le(r)[0].key),[le,Fe]=e(!0);u(()=>{Fe(Kt(g))},[]);const[de,ue]=e(!1),[O,pe]=e(""),[A,me]=e(""),[z,fe]=e(""),[Y,B]=e(""),[q,F]=e(""),[D,J]=e(""),[X,Z]=e(""),[H,G]=e(""),[i,W]=e(()=>Be||I[0]?.code||""),[P,j]=e(""),[R,ye]=e([]),[he,Q]=e(null),[_,T]=e(null),ge=Oe(()=>I.find(t=>t.code===i)??ae,[I,i,ae]),De=ge?.postalLabel||"Postal Code",Je=R[0]?.divisionType||"State / Province";u(()=>{if(!i){ye([]),Q(i);return}Q(null);let t=!1;return p.listCountrySubdivisions(i).then(n=>{t||(ye(n),Q(i),j(""))}),()=>{t=!0}},[i]),u(()=>{K(i?{country:i,subdivision:P}:null)},[i,P,K]),u(()=>()=>K(null),[K]);const[V,ke]=e(null),[Xe,we]=e([]),[Ce,ee]=e("new"),[Se,be]=e(!1),[Ae,Ze]=e("Home"),[He,Pe]=e(null),[m]=e(()=>xt()),[Ge,S]=e(null),[We,v]=e(null),[je,Qe]=e(null),[Ve,et]=e(!1),[tt,nt]=e(!1),[ot,te]=e(null),[rt,M]=e(!1),[st,k]=e(null),[ct,at]=e(!1),[it,ve]=e(!1),[lt,dt]=e(!1),[ut,xe]=e(!1),Ne=Re(!1);u(()=>{l||Ne.current||!a.some(_e)||(Ne.current=!0,bt({lines:a,currency:C.currency,value:C.subtotal-C.discount,coupon:b?.valid?b.code:void 0}))},[a,C,b,l]),u(()=>{ce(O,A.trim()||void 0)},[O,A,ce]);const Ke=Re(null),[L,pt]=e(null);u(()=>{const t=Ke.current;if(!L||!t)return;const n=()=>t.style.setProperty("--sf-checkout-header-h",`${L.offsetHeight}px`);n();const o=new ResizeObserver(n);return o.observe(L),()=>o.disconnect()},[L]),u(()=>{const t=o=>({setConfirming:o,land:S,markPaid:()=>M(!0),note:k,fail:v,clearCart:E}),n={search:window.location.search,storage:g,scrubQuery:()=>window.history.replaceState(null,"",window.location.pathname)};Te(It,{...n,capture:p.captureAfterpayPayment,page:t(at)}),Te(Rt,{...n,capture:p.captureZipPayment,page:t(dt)})},[]),u(()=>{const n=new URLSearchParams(window.location.search).get("gocardless");if(n!=="confirm"&&n!=="cancel")return;const o=g.getItem(oe);if(g.removeItem(oe),window.history.replaceState(null,"",window.location.pathname),!o)return;let c;try{c=JSON.parse(o)}catch{return}if(E(),n==="cancel"){k("The direct debit was not set up — our team will follow up on payment."),S(c.confirmation);return}ve(!0),p.completeGocardlessPayment({idempotencyKey:c.idempotencyKey}).then(s=>{s.status==="paid"?M(!0):s.status==="declined"?k("The direct debit was declined — our team will follow up on payment."):k("Your direct debit is set up — the payment is collecting and will clear in a few days.")}).catch(()=>{k("We could not confirm the direct debit — our team will follow up on payment.")}).finally(()=>{S(c.confirmation),ve(!1)})},[]),u(()=>{const t=new URLSearchParams(window.location.search),n=t.get("klarna");if(n!=="confirm"&&n!=="cancel")return;const o=g.getItem(re);g.removeItem(re);const c=t.get("authorization_token");if(window.history.replaceState(null,"",window.location.pathname),!o)return;let s;try{s=JSON.parse(o)}catch{return}if(E(),n==="cancel"||!c){k("The Klarna payment was not completed — our team will follow up on payment."),S(s.confirmation);return}xe(!0),p.captureKlarnaPayment({idempotencyKey:s.idempotencyKey,authorizationToken:c}).then(d=>{d.status==="paid"?M(!0):d.status==="declined"?k("Klarna declined the payment — our team will follow up on payment."):k("Your Klarna payment is being reviewed — we'll confirm the outcome shortly.")}).catch(()=>{k("We could not confirm the Klarna payment — our team will follow up on payment.")}).finally(()=>{S(s.confirmation),xe(!1)})},[]);function Ee(t){const[n,o]=Me(t.address);B(n),F(o),J(t.city),Z(t.zip_code),t.country&&W(t.country),t.phone&&G(t.phone),T({country:t.country||null,state:t.state??""})}u(()=>{if(_){if((_.country||i)!==i){T(null);return}he===i&&(j(_t(i,_.state,R)),T(null))}},[_,i,he,R]),u(()=>{let t=!1;return(async()=>{try{const[n,o,c]=await Promise.all([N.me(),N.myProfile().catch(()=>null),N.myAddresses().catch(()=>[])]);if(t)return;ke(n);const s=c.filter(x=>x.is_active);we(s),pe(n.email);const d=(o?.contact_name??"").split(/\s+/);me(n.first_name||d[0]||""),fe(n.last_name||d.slice(1).join(" "));const h=n.phone||o?.phone;h&&G(h);const ne=s.find(x=>x.id===n.default_delivery_location)??s[0];if(ne)ee(ne.id),Ee(ne);else if(o){const[x,yt]=Me(o.address??"");B(x),F(yt),J(o.city??""),Z(o.zip_code??""),o.country&&W(o.country),T({country:o.country||null,state:o.state??""})}}catch{}})(),()=>{t=!0}},[]);function mt(){N.logout(),ke(null),we([]),ee("new"),be(!1)}const $=Oe(()=>Le(r,{canParkContext:le}),[r,le]);u(()=>{$.some(t=>t.key===y)||ie($[0].key)},[$,y]);const Ie=q.trim()?`${Y}
3
+ ${q.trim()}`:Y;async function ft(){if(l||de||a.length===0||C.repricing)return;const t=a.filter(_e).flatMap(n=>Nt(n.components,n.qty));if(t.length===0){v("Pick a size on each wheel's product page before checking out.");return}ue(!0),v(null);try{const n=V?p.createOrderAuthed:p.createOrder,o=St(),c=await n({customer:{email:O,name:`${A} ${z}`.trim(),phone:H.trim()||void 0,address:Ie,city:D,state:P||void 0,zipCode:X,country:i},items:t,currency:C.currency,idempotencyKey:m,shippingMethodId:U??void 0,couponCode:Tt(b),...o==="denied"?{}:Ct(),...o?{adConsent:o}:{}});if(At({confirmation:c,lines:a,adsSendTo:r.googleAdsId&&r.googleAdsConversionLabel?`${r.googleAdsId}/${r.googleAdsConversionLabel}`:null}),Pt({confirmation:c,lines:a}),E(),V&&Se&&Ce==="new")try{await N.createAddress({label:Ae.trim()||"Home",contact_name:`${A} ${z}`.trim(),phone:H.trim(),address:Ie,city:D,zip_code:X,state:P,country:i}),Pe("Address saved to your account.")}catch{Pe("We couldn't save the address to your account — you can add it under Account → Addresses.")}if(y==="card"&&r.paymentMethods.includes("card")){const s=await p.createPaymentIntent({idempotencyKey:m});te(c),Qe(s)}else if(y==="paypal"&&r.paymentMethods.includes("paypal"))te(c),et(!0);else if(y==="afterpay"&&r.paymentMethods.includes("afterpay")){const s=window.location.origin,d=await p.createAfterpayCheckout({idempotencyKey:m,confirmUrl:`${s}/checkout?afterpay=confirm`,cancelUrl:`${s}/checkout?afterpay=cancel`}),h={idempotencyKey:m,confirmation:c};g.setItem(Et,JSON.stringify(h)),window.location.assign(d.redirectCheckoutUrl);return}else if(y==="square"&&r.paymentMethods.includes("square"))te(c),nt(!0);else if(y==="gocardless"&&r.paymentMethods.includes("gocardless")){const s=window.location.origin,d=await p.createGocardlessBillingRequest({idempotencyKey:m,confirmUrl:`${s}/checkout?gocardless=confirm`,cancelUrl:`${s}/checkout?gocardless=cancel`}),h={idempotencyKey:m,confirmation:c};g.setItem(oe,JSON.stringify(h)),window.location.assign(d.authorisationUrl);return}else if(y==="zip"&&r.paymentMethods.includes("zip")){const s=window.location.origin,d=await p.createZipCheckout({idempotencyKey:m,redirectUrl:`${s}/checkout?zip=return`}),h={idempotencyKey:m,confirmation:c};g.setItem(Ot,JSON.stringify(h)),window.location.assign(d.redirectUrl);return}else if(y==="klarna"&&r.paymentMethods.includes("klarna")){const s=window.location.origin,d=await p.createKlarnaCheckout({idempotencyKey:m,confirmUrl:`${s}/checkout?klarna=confirm`,cancelUrl:`${s}/checkout?klarna=cancel`}),h={idempotencyKey:m,confirmation:c};g.setItem(re,JSON.stringify(h)),window.location.assign(d.redirectUrl);return}else S(c)}catch(n){const o=Mt(n);o?(Ue(o),v(`${o} Your order has not been placed. Place it again to continue without the code.`)):v(n instanceof vt?n.message:"Could not place the order. Please try again."),ue(!1)}}return{site:r,logo:f,items:a,totals:C,coupon:b,deliveryOptions:se,shippingMethodId:U,setShippingMethodId:ze,pickupLocation:Ye,servedCountries:I,formatMoney:qe,payChoice:y,setPayChoice:ie,placing:de,email:O,setEmail:pe,firstName:A,setFirstName:me,lastName:z,setLastName:fe,address1:Y,setAddress1:B,address2:q,setAddress2:F,city:D,setCity:J,postcode:X,setPostcode:Z,phone:H,setPhone:G,country:i,setCountry:W,subdivision:P,setSubdivision:j,subdivisions:R,destination:ge,postcodeLabel:De,subdivisionLabel:Je,me:V,savedAddresses:Xe,selectedAddressId:Ce,setSelectedAddressId:ee,saveAddress:Se,setSaveAddress:be,saveLabel:Ae,setSaveLabel:Ze,addressSaveNote:He,idemKey:m,confirmation:Ge,setConfirmation:S,orderError:We,payment:je,paypalStep:Ve,squareStep:tt,pendingConf:ot,paid:rt,setPaid:M,payNote:st,afterpayConfirming:ct,gocardlessConfirming:it,zipConfirming:lt,klarnaConfirming:ut,checkoutRootRef:Ke,setCheckoutHeaderEl:pt,fillFromAddress:Ee,checkoutSignOut:mt,payOptions:$,placeOrder:ft}}const $e=ht(null);function Qt({children:r,...f}){const l=Lt(f);return w($e.Provider,{value:l,children:r})}function Vt(){const r=gt($e);if(!r)throw new Error("useCheckout must be used inside CheckoutStateProvider");return r}export{Qt as CheckoutStateProvider,Le as buildPayOptions,Vt as useCheckout};
@@ -1,3 +1,4 @@
1
+ import type { SourceRow } from "efficient-web-builder/format/lib/content/block-sources";
1
2
  export declare const supportedKinds: readonly ("alloy-wheel" | "tyre")[];
2
3
  export interface DynamicGalleryGridProps {
3
4
  num?: string;
@@ -18,3 +19,8 @@ export interface DynamicGalleryGridProps {
18
19
  padBottom?: number;
19
20
  }
20
21
  export default function DynamicGalleryGrid(props: DynamicGalleryGridProps): import("react").JSX.Element;
22
+ export declare function SourcedGalleryGrid(props: DynamicGalleryGridProps & {
23
+ rows: readonly SourceRow[];
24
+ limit?: number;
25
+ layout?: string;
26
+ }): import("react").JSX.Element;
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as _}from"react/jsx-runtime";import L from"efficient-web-builder/render/components/Btn";import M,{GALLERY_GRID_ATTR as B,GalleryLinksContext as C}from"../GalleryItem.js";import{SharedPartKinds as H}from"efficient-web-builder/render/components/PublishedPartStylesContext";import{renderHeadline as j}from"efficient-web-builder/render/components/goldPhrases";import D from"efficient-web-builder/render/components/SectionHeader";import F from"./KindGate.js";import K from"./RecordPhotoGallery.js";import{headIsEmpty as U,ownPadding as Z}from"../../lib/sections/own-padding.js";import{PLP_KINDS as $}from"../../lib/catalog/plp-item.js";import{useCurrentProduct as z}from"../../lib/document/current-product.js";import{SAMPLE_PICTURE_COUNT as V,SAMPLE_RECORD as W,recordPictures as X,useCurrentRecord as Y,useDrawsOtherRecord as q}from"../../lib/document/current-record.js";import{mediaGroupVehicle as J}from"../../lib/content/source-values.js";import{useSampleProduct as Q}from"./useSampleProduct.js";import{say as R}from"efficient-web-builder/format/lib/editor-words";const ee=$,E=["photos","lifestyle","accessories","others"];function re(e,o){if(!e)return[];if(o==="all")return E.flatMap(n=>e[n]??[]);const a=E.includes(o)?o:null;return a?e[a]??[]:[]}const S="relative z-[2] bg-bg py-[120px] max-[800px]:py-[70px]",A="relative z-[2] bg-bg pt-0 pb-[120px] max-[800px]:pt-0 max-[800px]:pb-[70px]",O="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] max-[800px]:px-[min(20px,var(--sf-site-gutter,40px))]";function te(e){return q(!!e.editing)?t(ie,{...e}):t(F,{kinds:ee,type:"GalleryB",editing:e.editing,children:t(ae,{...e})})}function ie(e){const{editing:o=!1}=e,a=Y(),n=a?X(a,{firstField:!0}).map(s=>({images:[s.url],eyebrow:s.alt&&s.alt!==a.title?s.alt:void 0,...s.video?{video:s.video}:{}})):o?Array.from({length:V},()=>({images:[""]})):[];return t(T,{...e,tiles:n,owner:{name:(a??W).title},photosOnly:!0,emptyHint:R("This record’s pictures appear here on its page. A record with no pictures draws nothing.")})}function ae({omitHead:e=!1,num:o,title:a,linkText:n,linkHref:s,galleryHref:u="/gallery",submitHref:y="/contact",zone:v="all",photoDisplay:h="covers",previewHover:b,display:N,displayPhone:d,styleOwner:c,editing:m=!1,padTop:w,padBottom:p}){const g=z(),G=Q(m&&!g),l=g?.product??G,f=re(l?.mediaGroups,v).map(r=>({images:(r.items??[]).filter(i=>i.kind==="image").map(i=>i.url),vehicle:J(r),finish:r.finish})).filter(r=>r.images.length>0),x=(h==="auto"?f.length>=4?"covers":"all":h)==="all"?f.flatMap(r=>r.images.map(i=>({images:[i],vehicle:r.vehicle,finish:r.finish}))):f;return t(T,{omitHead:e,num:o,title:a,linkText:n,linkHref:s,galleryHref:u,submitHref:y,previewHover:b,display:N,displayPhone:d,styleOwner:c,editing:m,padTop:w,padBottom:p,tiles:l?x.map(r=>({images:r.images,eyebrow:r.vehicle||void 0,meta:r.finish})):[],owner:{name:l?.name??"",href:l?.href,process:l?.eyebrow},emptyHint:R("This product’s photos appear here on a product page. Add media groups in the product’s Media tab.")})}function T({omitHead:e=!1,num:o,title:a,linkText:n,linkHref:s,galleryHref:u="/gallery",submitHref:y="/contact",previewHover:v,display:h,displayPhone:b,styleOwner:N,editing:d=!1,tiles:c,owner:m,emptyHint:w,photosOnly:p=!1,padTop:g,padBottom:G}){const l=n?{text:n,href:s||"#"}:void 0,f=a?j(a,!1):void 0,P=e?null:t(D,{num:o,title:f,link:l}),x=!d&&U(o,a,l?.text)?null:P,r=Z(g,G);return c.length===0?d?t("section",{className:e?A:S,style:r,children:_("div",{className:O,children:[x,t("p",{className:"mt-8 border-t border-line py-6 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg-dim",children:w})]})}):null:t("section",{className:e?A:S,style:r,children:_("div",{className:O,children:[x,p?t(K,{pictures:c.map(i=>({url:i.images[0]??"",alt:i.eyebrow,video:i.video})),name:m.name,editing:d}):t(C.Provider,{value:{galleryHref:u,submitHref:y,previewHover:v,display:h,displayPhone:b,styleOwner:N,photosOnly:p},children:t(H,{children:t("div",{[B]:"",className:"grid grid-cols-4 gap-2 max-[1500px]:grid-cols-3 max-[800px]:grid-cols-1 max-[800px]:gap-1",children:c.map((i,k)=>t(M,{image:i.images[0],photos:i.images.slice(1).map(I=>({src:I})),href:m.href,process:m.process,eyebrow:i.eyebrow,name:m.name,meta:i.meta,editing:d},`${i.eyebrow}-${k}`))})})}),!p&&t("div",{className:"mt-12 flex flex-col items-center gap-3",children:t(L,{href:u,variant:"ghost",children:"See Gallery"})})]})})}export{te as default,ee as supportedKinds};
1
+ "use client";import{jsx as t,jsxs as E}from"react/jsx-runtime";import I from"efficient-web-builder/render/components/Btn";import B,{GALLERY_GRID_ATTR as C,GalleryLinksContext as j}from"../GalleryItem.js";import{SharedPartKinds as D}from"efficient-web-builder/render/components/PublishedPartStylesContext";import{renderHeadline as F}from"efficient-web-builder/render/components/goldPhrases";import K from"efficient-web-builder/render/components/SectionHeader";import U from"./KindGate.js";import Z from"./RecordPhotoGallery.js";import{headIsEmpty as $,ownPadding as z}from"../../lib/sections/own-padding.js";import{PLP_KINDS as V}from"../../lib/catalog/plp-item.js";import{useCurrentProduct as W}from"../../lib/document/current-product.js";import{SAMPLE_PICTURE_COUNT as S,SAMPLE_RECORD as X,recordPictures as Y,useCurrentRecord as q,useDrawsOtherRecord as J}from"../../lib/document/current-record.js";import{mediaGroupVehicle as Q}from"../../lib/content/source-values.js";import{useSampleProduct as ee}from"./useSampleProduct.js";import{say as _}from"efficient-web-builder/format/lib/editor-words";import{resolveGalleryLayout as re}from"efficient-web-builder/format/lib/content/gallery-layout";const te=V,O=["photos","lifestyle","accessories","others"];function ie(e,o){if(!e)return[];if(o==="all")return O.flatMap(s=>e[s]??[]);const r=O.includes(o)?o:null;return r?e[r]??[]:[]}const T="relative z-[2] bg-bg py-[120px] max-[800px]:py-[70px]",L="relative z-[2] bg-bg pt-0 pb-[120px] max-[800px]:pt-0 max-[800px]:pb-[70px]",M="mx-auto max-w-[var(--sf-site-width,1600px)] px-[var(--sf-site-gutter,40px)] max-[800px]:px-[min(20px,var(--sf-site-gutter,40px))]";function oe(e){return J(!!e.editing)?t(ae,{...e}):t(U,{kinds:te,type:"GalleryB",editing:e.editing,children:t(se,{...e})})}function ae(e){const{editing:o=!1}=e,r=q(),s=r?Y(r,{firstField:!0}).map(a=>({images:[a.url],eyebrow:a.alt&&a.alt!==r.title?a.alt:void 0,...a.video?{video:a.video}:{}})):o?Array.from({length:S},()=>({images:[""]})):[];return t(R,{...e,tiles:s,owner:{name:(r??X).title},photosOnly:!0,emptyHint:_("This record’s pictures appear here on its page. A record with no pictures draws nothing.")})}function Ne(e){const{rows:o,limit:r,layout:s,editing:a=!1,title:u}=e,c=typeof r=="number"&&r>0?Math.floor(r):void 0,h=o.filter(n=>typeof n.cover=="string"&&n.cover).map(n=>({images:[n.cover],...n.video?{video:n.video}:{}})),d=a&&h.length===0?Array.from({length:c??S},()=>({images:[""]})):h;return t(R,{...e,tiles:c?d.slice(0,c):d,owner:{name:(u??"").replace(/==/g,"").trim()},photosOnly:!0,tilesAcross:re(s)?.across===3?3:4,emptyHint:_("The website’s pictures appear here, in the order they are put in. A website with no pictures draws nothing.")})}function se({omitHead:e=!1,num:o,title:r,linkText:s,linkHref:a,galleryHref:u="/gallery",submitHref:c="/contact",zone:h="all",photoDisplay:d="covers",previewHover:n,display:w,displayPhone:g,styleOwner:x,editing:p=!1,padTop:G,padBottom:v}){const b=W(),N=ee(p&&!b),f=b?.product??N,y=ie(f?.mediaGroups,h).map(i=>({images:(i.items??[]).filter(m=>m.kind==="image").map(m=>m.url),vehicle:Q(i),finish:i.finish})).filter(i=>i.images.length>0),P=(d==="auto"?y.length>=4?"covers":"all":d)==="all"?y.flatMap(i=>i.images.map(m=>({images:[m],vehicle:i.vehicle,finish:i.finish}))):y;return t(R,{omitHead:e,num:o,title:r,linkText:s,linkHref:a,galleryHref:u,submitHref:c,previewHover:n,display:w,displayPhone:g,styleOwner:x,editing:p,padTop:G,padBottom:v,tiles:f?P.map(i=>({images:i.images,eyebrow:i.vehicle||void 0,meta:i.finish})):[],owner:{name:f?.name??"",href:f?.href,process:f?.eyebrow},emptyHint:_("This product’s photos appear here on a product page. Add media groups in the product’s Media tab.")})}function R({omitHead:e=!1,num:o,title:r,linkText:s,linkHref:a,galleryHref:u="/gallery",submitHref:c="/contact",previewHover:h,display:d,displayPhone:n,styleOwner:w,editing:g=!1,tiles:x,owner:p,emptyHint:G,photosOnly:v=!1,tilesAcross:b,padTop:N,padBottom:f}){const y=s?{text:s,href:a||"#"}:void 0,A=r?F(r,!1):void 0,P=e?null:t(K,{num:o,title:A,link:y}),i=!g&&$(o,r,y?.text)?null:P,m=z(N,f);return x.length===0?g?t("section",{className:e?L:T,style:m,children:E("div",{className:M,children:[i,t("p",{className:"mt-8 border-t border-line py-6 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg-dim",children:G})]})}):null:t("section",{className:e?L:T,style:m,children:E("div",{className:M,children:[i,v?t(Z,{pictures:x.map(l=>({url:l.images[0]??"",alt:l.eyebrow,video:l.video})),name:p.name,editing:g,...b?{fit:"tiles",across:b}:{}}):t(j.Provider,{value:{galleryHref:u,submitHref:c,previewHover:h,display:d,displayPhone:n,styleOwner:w,photosOnly:v},children:t(D,{children:t("div",{[C]:"",className:"grid grid-cols-4 gap-2 max-[1500px]:grid-cols-3 max-[800px]:grid-cols-1 max-[800px]:gap-1",children:x.map((l,k)=>t(B,{image:l.images[0],photos:l.images.slice(1).map(H=>({src:H})),href:p.href,process:p.process,eyebrow:l.eyebrow,name:p.name,meta:l.meta,editing:g},`${l.eyebrow}-${k}`))})})}),!v&&t("div",{className:"mt-12 flex flex-col items-center gap-3",children:t(I,{href:u,variant:"ghost",children:"See Gallery"})})]})})}export{Ne as SourcedGalleryGrid,oe as default,te as supportedKinds};
@@ -4,9 +4,10 @@ export interface GalleryPicture {
4
4
  video?: string;
5
5
  }
6
6
  export declare function pictureLabel(picture: GalleryPicture, name: string): string;
7
- export default function RecordPhotoGallery({ pictures, name, editing, fit, }: {
7
+ export default function RecordPhotoGallery({ pictures, name, editing, fit, across, }: {
8
8
  pictures: readonly GalleryPicture[];
9
- fit?: "section" | "column";
9
+ fit?: "section" | "column" | "tiles";
10
+ across?: 3 | 4;
10
11
  name: string;
11
12
  editing?: boolean;
12
13
  }): import("react").JSX.Element | null;
@@ -1 +1 @@
1
- "use client";import{jsx as t,Fragment as b,jsxs as c}from"react/jsx-runtime";import{useCallback as C,useRef as I,useState as N}from"react";import{sizedImage as M}from"efficient-web-builder/format/lib/sized-image";import P from"efficient-web-builder/render/components/Placeholder";import S,{LightboxClose as A}from"../Lightbox.js";import{GALLERY_GRID_ATTR as B}from"../GalleryItem.js";const O="(max-width: 1600px) 100vw, 1600px",U="(max-width: 1100px) 100vw, 50vw",z="(max-width: 800px) 30vw, 200px",R="100vw";function h(r,o){return r.video?o?`Play video of ${o}`:"Play video":o?`Open photo of ${o}`:"Open photo"}function T({small:r=!1}){return t("span",{"aria-hidden":!0,"data-play-badge":"",className:"pointer-events-none absolute inset-0 flex items-center justify-center",children:t("span",{className:`flex items-center justify-center rounded-full bg-bg/75 text-fg ${r?"h-8 w-8 text-[length:12px]":"h-16 w-16 text-[length:22px]"}`,children:"▶"})})}const D="relative block w-full overflow-hidden bg-surface-2",G="block h-[min(78vh,820px)] w-full object-cover max-[800px]:h-[min(70vh,560px)]",H="block aspect-[4/5] max-h-[80vh] w-full object-cover",F="grid grid-cols-4 gap-2",Z="relative block aspect-square w-full overflow-hidden bg-surface-2",W="block h-full w-full object-cover",X="grid grid-cols-6 gap-2 max-[800px]:grid-cols-4",q="cursor-pointer text-left focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",_="absolute top-1/2 z-[2] flex h-14 w-14 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,22px)] text-fg-dim transition-colors hover:border-accent hover:text-accent max-[700px]:h-11 max-[700px]:w-11";function Y({pictures:r,name:o,editing:p=!1,fit:$="section"}){const[j,m]=N(!1),[i,u]=N(0),d=I(null),E=C(e=>{e?d.current=e:(d.current?.pause(),d.current=null)},[]),l=r.length,v=$==="column";if(l===0)return null;const g=()=>u(e=>(e-1+l)%l),w=()=>u(e=>(e+1)%l),L=e=>{u(e),m(!0)},n=r[Math.min(i,l-1)],f=(e,a,s,x)=>e.url?t("span",{className:`${s} relative`,children:t(P,{label:e.alt||o||"photo",src:e.url,alt:e.alt||o,sizes:a,objectFit:"cover",showBackground:!1})}):t("span",{"aria-hidden":!0,className:`${s} bg-surface-2`}),y=(e,a,s)=>{const x=c(b,{children:[s?v?f(e,U,H,1200):f(e,O,G,1600):f(e,z,W,400),e.video&&t(T,{small:!s})]}),k=s?D:Z;return p?t("div",{className:k,children:x}):t("button",{type:"button","aria-label":h(e,o),onClick:()=>L(a),className:`${k} ${q}`,children:x})};return c(b,{children:[c("div",{[B]:"","data-record-gallery":"",className:"flex flex-col gap-2",children:[y(r[0],0,!0),l>1&&t("ul",{className:v?F:X,children:r.slice(1).map((e,a)=>t("li",{children:y(e,a+1,!1)},`${e.url}-${a+1}`))})]}),!p&&t(S,{open:j,onClose:()=>m(!1),label:h(n,o),onPrev:l>1?g:void 0,onNext:l>1?w:void 0,className:"flex items-center justify-center p-6 backdrop-blur-[8px] max-[700px]:p-3",style:{background:"color-mix(in oklab, var(--bg) 86%, transparent)"},children:c("div",{onClick:e=>e.stopPropagation(),className:"relative flex h-full w-full items-center justify-center",children:[t(A,{className:"absolute right-0 top-0 z-[3] flex h-12 w-12 cursor-pointer items-center justify-center border border-line font-mono text-[length:var(--size-label,18px)] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:{background:"color-mix(in oklab, var(--bg) 70%, transparent)"},children:"✕"}),n.video?t("video",{ref:E,controls:!0,playsInline:!0,preload:"metadata",poster:n.url,src:n.video,"aria-label":h(n,o),className:"block max-h-[calc(100vh-120px)] max-w-full bg-bg"},`video-${i}`):t("img",{...M(n.url,{fallbackWidth:1600}),sizes:R,alt:`${n.alt||o||"Photo"} — ${i+1} of ${l}`,className:"block max-h-[calc(100vh-120px)] max-w-full object-contain"},`photo-${i}`),l>1&&c(b,{children:[t("button",{type:"button","aria-label":"Previous photo",onClick:g,className:`${_} left-0`,children:"◁"}),t("button",{type:"button","aria-label":"Next photo",onClick:w,className:`${_} right-0`,children:"▷"}),c("span",{"data-gallery-counter":"",className:"absolute bottom-0 left-1/2 -translate-x-1/2 border border-fg-dim/30 bg-overlay-scrim/50 px-4 py-1.5 font-mono text-[length:var(--size-label,14px)] uppercase tracking-[0.22em] text-fg-dim backdrop-blur-[4px]",children:[i+1," / ",l]})]})]})})]})}export{Y as default,h as pictureLabel};
1
+ "use client";import{jsx as t,Fragment as p,jsxs as c}from"react/jsx-runtime";import{useCallback as M,useRef as O,useState as E}from"react";import{sizedImage as P}from"efficient-web-builder/format/lib/sized-image";import A from"efficient-web-builder/render/components/Placeholder";import T,{LightboxClose as U}from"../Lightbox.js";import{GALLERY_GRID_ATTR as $}from"../GalleryItem.js";const z="(max-width: 1600px) 100vw, 1600px",R="(max-width: 1100px) 100vw, 50vw",D="(max-width: 800px) 30vw, 200px",G="100vw";function m(r,l){return r.video?l?`Play video of ${l}`:"Play video":l?`Open photo of ${l}`:"Open photo"}function H({small:r=!1}){return t("span",{"aria-hidden":!0,"data-play-badge":"",className:"pointer-events-none absolute inset-0 flex items-center justify-center",children:t("span",{className:`flex items-center justify-center rounded-full bg-bg/75 text-fg ${r?"h-8 w-8 text-[length:12px]":"h-16 w-16 text-[length:22px]"}`,children:"▶"})})}const Z="relative block w-full overflow-hidden bg-surface-2",F="block h-[min(78vh,820px)] w-full object-cover max-[800px]:h-[min(70vh,560px)]",W="block aspect-[4/5] max-h-[80vh] w-full object-cover",X="grid grid-cols-4 gap-2",q="relative block aspect-square w-full overflow-hidden bg-surface-2",L="block h-full w-full object-cover",Y="grid grid-cols-6 gap-2 max-[800px]:grid-cols-4",J={3:"grid grid-cols-3 gap-2 max-[800px]:grid-cols-2",4:"grid grid-cols-4 gap-2 max-[800px]:grid-cols-2"},K="relative block aspect-[4/5] w-full overflow-hidden bg-surface-2",Q="(max-width: 800px) 50vw, 25vw",V="cursor-pointer text-left focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2",I="absolute top-1/2 z-[2] flex h-14 w-14 -translate-y-1/2 cursor-pointer items-center justify-center border border-fg-dim/40 bg-overlay-scrim/40 font-mono text-[length:var(--size-label,22px)] text-fg-dim transition-colors hover:border-accent hover:text-accent max-[700px]:h-11 max-[700px]:w-11";function ee({pictures:r,name:l,editing:g=!1,fit:v="section",across:j=4}){const[S,w]=E(!1),[i,f]=E(0),x=O(null),B=M(e=>{e?x.current=e:(x.current?.pause(),x.current=null)},[]),o=r.length,y=v==="column";if(o===0)return null;const k=()=>f(e=>(e-1+o)%o),N=()=>f(e=>(e+1)%o),C=e=>{f(e),w(!0)},n=r[Math.min(i,o-1)],d=(e,a,s,h)=>e.url?t("span",{className:`${s} relative`,children:t(A,{label:e.alt||l||"photo",src:e.url,alt:e.alt||l,sizes:a,objectFit:"cover",showBackground:!1})}):t("span",{"aria-hidden":!0,className:`${s} bg-surface-2`}),u=v==="tiles",b=(e,a,s)=>{const h=c(p,{children:[u?d(e,Q,L,800):s?y?d(e,R,W,1200):d(e,z,F,1600):d(e,D,L,400),e.video&&t(H,{small:!s&&!u})]}),_=u?K:s?Z:q;return g?t("div",{className:_,children:h}):t("button",{type:"button","aria-label":m(e,l),onClick:()=>C(a),className:`${_} ${V}`,children:h})};return c(p,{children:[u?t("ul",{[$]:"","data-record-gallery":"tiles",className:J[j===3?3:4],children:r.map((e,a)=>t("li",{children:b(e,a,!1)},`${e.url}-${a}`))}):c("div",{[$]:"","data-record-gallery":"",className:"flex flex-col gap-2",children:[b(r[0],0,!0),o>1&&t("ul",{className:y?X:Y,children:r.slice(1).map((e,a)=>t("li",{children:b(e,a+1,!1)},`${e.url}-${a+1}`))})]}),!g&&t(T,{open:S,onClose:()=>w(!1),label:m(n,l),onPrev:o>1?k:void 0,onNext:o>1?N:void 0,className:"flex items-center justify-center p-6 backdrop-blur-[8px] max-[700px]:p-3",style:{background:"color-mix(in oklab, var(--bg) 86%, transparent)"},children:c("div",{onClick:e=>e.stopPropagation(),className:"relative flex h-full w-full items-center justify-center",children:[t(U,{className:"absolute right-0 top-0 z-[3] flex h-12 w-12 cursor-pointer items-center justify-center border border-line font-mono text-[length:var(--size-label,18px)] text-fg-dim transition-colors hover:border-accent hover:text-fg",style:{background:"color-mix(in oklab, var(--bg) 70%, transparent)"},children:"✕"}),n.video?t("video",{ref:B,controls:!0,playsInline:!0,preload:"metadata",poster:n.url,src:n.video,"aria-label":m(n,l),className:"block max-h-[calc(100vh-120px)] max-w-full bg-bg"},`video-${i}`):t("img",{...P(n.url,{fallbackWidth:1600}),sizes:G,alt:`${n.alt||l||"Photo"} — ${i+1} of ${o}`,className:"block max-h-[calc(100vh-120px)] max-w-full object-contain"},`photo-${i}`),o>1&&c(p,{children:[t("button",{type:"button","aria-label":"Previous photo",onClick:k,className:`${I} left-0`,children:"◁"}),t("button",{type:"button","aria-label":"Next photo",onClick:N,className:`${I} right-0`,children:"▷"}),c("span",{"data-gallery-counter":"",className:"absolute bottom-0 left-1/2 -translate-x-1/2 border border-fg-dim/30 bg-overlay-scrim/50 px-4 py-1.5 font-mono text-[length:var(--size-label,14px)] uppercase tracking-[0.22em] text-fg-dim backdrop-blur-[4px]",children:[i+1," / ",o]})]})]})})]})}export{ee as default,m as pictureLabel};
@@ -544,6 +544,7 @@ export interface AdminHeaderSettings {
544
544
  menu_row: "top" | "bottom" | "inline";
545
545
  account_enabled?: boolean;
546
546
  cart_enabled?: boolean;
547
+ call_button?: boolean;
547
548
  util_style?: "icon" | "text";
548
549
  nav_text_case?: "uppercase" | "capitalised";
549
550
  country_selector_enabled: boolean;
@@ -1637,6 +1637,9 @@ export interface components {
1637
1637
  height: "compact" | "standard";
1638
1638
  heightPx: number | null;
1639
1639
  sticky: "none" | "always" | "on_scroll_up";
1640
+ callButton?: boolean;
1641
+ callPhone?: string;
1642
+ callHref?: string;
1640
1643
  borderThickness: number;
1641
1644
  colorSchemeDefault: "light" | "dark";
1642
1645
  colorSchemeInverse: "light" | "dark";
@@ -1 +1 @@
1
- import{jsx as a}from"react/jsx-runtime";import o from"../../../../../components/pdp-dynamic/DynamicGalleryGrid.js";import y from"../../../../../components/GalleryGrid.js";import{hidableText as l}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as f}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as t}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{GalleryBMeta as r,GALLERY_B_PH as n}from"./meta.js";const x={...r,render:e=>{const d=f(e.headPlacement)==="own-box",i=m=>d?void 0:m;return e.dynamic?a(o,{num:i(t(e.num,n.num,e.editor)),title:i(t(e.title,n.title,e.editor)),linkText:i(t(e.linkText,n.link,e.editor)),linkHref:i(l(e.linkHref)||"/contact"),omitHead:d,galleryHref:l(e.galleryHref)||"/gallery",zone:e.mediaZone||"all",photoDisplay:e.photoDisplay||"covers",previewHover:e.previewHover,display:e.display,displayPhone:e.displayPhone,styleOwner:e.id,editing:e.editor?.isEditing,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0}):a(y,{num:i(t(e.num,n.num,e.editor)),title:i(t(e.title,n.title,e.editor)),omitHead:d,linkText:i(t(e.linkText,n.link,e.editor)),linkHref:i(l(e.linkHref)||"/contact"),galleryHref:l(e.galleryHref)||"/gallery",previewHover:e.previewHover,display:e.display,displayPhone:e.displayPhone,styleOwner:e.id,layout:e.layout,columns:e.columns,columnsMobile:e.columnsMobile,gap:e.gap,items:e.items,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0,editing:e.editor?.isEditing})}};export{x as GalleryBRender};
1
+ import{jsx as m}from"react/jsx-runtime";import y,{SourcedGalleryGrid as f}from"../../../../../components/pdp-dynamic/DynamicGalleryGrid.js";import{declaredBlockSource as r,sourcedRows as c}from"efficient-web-builder/format/lib/content/block-sources";import H from"../../../../../components/GalleryGrid.js";import{hidableText as d}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as k}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as i}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{GalleryBMeta as T,GALLERY_B_PH as n}from"./meta.js";const P={...T,render:e=>{const l=k(e.headPlacement)==="own-box",t=a=>l?void 0:a;if(r(e)!==""){const a=!!e.editor?.isEditing,{rows:o,sample:u}=c(e,a);return m(f,{num:t(i(e.num,n.num,e.editor)),title:t(i(e.title,n.title,e.editor)),linkText:t(i(e.linkText,n.link,e.editor)),linkHref:t(d(e.linkHref)||"/contact"),omitHead:l,rows:u?[]:o,limit:e.limit,layout:e.layout,editing:a,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0})}return e.dynamic?m(y,{num:t(i(e.num,n.num,e.editor)),title:t(i(e.title,n.title,e.editor)),linkText:t(i(e.linkText,n.link,e.editor)),linkHref:t(d(e.linkHref)||"/contact"),omitHead:l,galleryHref:d(e.galleryHref)||"/gallery",zone:e.mediaZone||"all",photoDisplay:e.photoDisplay||"covers",previewHover:e.previewHover,display:e.display,displayPhone:e.displayPhone,styleOwner:e.id,editing:e.editor?.isEditing,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0}):m(H,{num:t(i(e.num,n.num,e.editor)),title:t(i(e.title,n.title,e.editor)),omitHead:l,linkText:t(i(e.linkText,n.link,e.editor)),linkHref:t(d(e.linkHref)||"/contact"),galleryHref:d(e.galleryHref)||"/gallery",previewHover:e.previewHover,display:e.display,displayPhone:e.displayPhone,styleOwner:e.id,layout:e.layout,columns:e.columns,columnsMobile:e.columnsMobile,gap:e.gap,items:e.items,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0,editing:e.editor?.isEditing})}};export{P as GalleryBRender};
@@ -0,0 +1,7 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const CONTACT_KIND_OPTIONS: {
3
+ label: string;
4
+ value: "phone" | "whatsapp" | "telegram" | "line" | "wechat" | "email" | "kakaotalk";
5
+ }[];
6
+ export declare const CONTACT_KIND_FALLBACK = "phone";
7
+ export declare const ContactCardsMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ import{CONTACT_KIND_NAMES as o,CONTACT_KINDS as C}from"../../../../sections/messaging.js";const e=C.map(t=>({label:o[t],value:t})),c="phone",n={label:"Contact cards",widthRows:"two",defaultProps:{title:"Who to ask",description:"",contained:!0,contacts:[]}};export{c as CONTACT_KIND_FALLBACK,e as CONTACT_KIND_OPTIONS,n as ContactCardsMeta};
@@ -0,0 +1,4 @@
1
+ import { type ContactEntry } from "../../../../sections/messaging.js";
2
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
3
+ export declare const contactCardsSample: () => ContactEntry[];
4
+ export declare const ContactCardsRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as a}from"react/jsx-runtime";import r from"../../../../../components/ContactCards.js";import{contactViews as n}from"../../../../sections/messaging.js";import{readHidable as c}from"efficient-easel/screen/lib/document/hidable";import{ContactCardsMeta as d}from"./meta.js";const s=()=>[{name:"Jessie",kind:"phone",value:"0400 000 000"},{name:"Saki",kind:"line",value:"yourvenue"}],o=t=>{const{text:e,hidden:i}=c(t);return i||!e?void 0:e},x={...d,render:t=>{let e=n(t.contacts);return!e.length&&t.editor?.isEditing&&(e=n(s())),a(r,{title:o(t.title),description:o(t.description),contacts:e,contained:t.contained!==!1})}};export{x as ContactCardsRender,s as contactCardsSample};
@@ -1 +1 @@
1
- import{jsx as y}from"react/jsx-runtime";import h,{readFacets as k}from"../../../../../components/Events.js";import{BLOCK_SOURCE_ROWS_PROP as b,declaredBlockSource as x,sourcedRows as g}from"efficient-web-builder/format/lib/content/block-sources";import{hidableText as v}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as A}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as s}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{say as a}from"efficient-web-builder/format/lib/editor-words";import{EventsMeta as E,EVENTS_PH as u}from"./meta.js";const S=()=>[{key:"sample-1",title:a("First card"),excerpt:a("A line about it appears here.")},{key:"sample-2",title:a("Second card"),excerpt:a("A line about it appears here.")},{key:"sample-3",title:a("Third card"),excerpt:a("A line about it appears here.")},{key:"sample-4",title:a("Fourth card"),excerpt:a("A line about it appears here.")}],f=(e,i,n)=>({slug:e.key||`card-${i}`,title:e.title??"",excerpt:e.excerpt??"",cover:e.cover??"",meta:e.meta||void 0,dateLabel:e.dateLabel||void 0,href:e.href||"#",...n?{facets:n}:{}});function B(e){const i=e[b],n=new Map,d=[];if(!Array.isArray(i))return{byKey:n,byIndex:d};for(const l of i){if(!l||typeof l!="object"||Array.isArray(l))continue;const t=l;if(!Object.values(t).some(c=>typeof c=="string"&&c))continue;const o=k(t.facets);d.push(o),o&&typeof t.key=="string"&&t.key&&n.set(t.key,o)}return{byKey:n,byIndex:d}}const _={...E,render:e=>{const i=A(e.headPlacement)==="own-box",n=r=>i?void 0:r,d=s(e.linkText,u.link,e.editor),t=x(e)!==""?g(e,!!e.editor?.isEditing,S()):null,o=t&&!t.sample?B(e):null,c=t?t.sample?[]:t.rows.map((r,m)=>f(r,m,r.key?o?.byKey.get(r.key):o?.byIndex[m])):e.posts;return y(h,{num:n(s(e.num,u.num,e.editor)),title:n(s(e.title,u.title,e.editor)),link:n(d?{text:d,href:v(e.linkHref)||"/journal"}:void 0),omitHead:i,posts:c,sample:t?.sample?t.rows.map((r,m)=>f(r,m)):void 0,columns:e.columns,limit:e.limit,showAll:e.showAll,layout:e.layout,featuredWidth:e.featuredWidth,listCover:e.listCover,featuredDarken:e.featuredDarken,cardImage:e.cardImage,gap:e.gap,nameFilter:e.nameFilter===!0,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0,editing:e.editor?.isEditing})}};export{_ as EventsRender};
1
+ import{jsx as y}from"react/jsx-runtime";import h,{readFacets as k,readTags as g}from"../../../../../components/Events.js";import{BLOCK_SOURCE_ROWS_PROP as b,declaredBlockSource as x,sourcedRows as A}from"efficient-web-builder/format/lib/content/block-sources";import{hidableText as E}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as S}from"efficient-web-builder/format/lib/sections/section-head-placement";import{phHide as m}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{say as n}from"efficient-web-builder/format/lib/editor-words";import{EventsMeta as T,EVENTS_PH as u}from"./meta.js";const v=()=>[{key:"sample-1",title:n("First card"),excerpt:n("A line about it appears here.")},{key:"sample-2",title:n("Second card"),excerpt:n("A line about it appears here.")},{key:"sample-3",title:n("Third card"),excerpt:n("A line about it appears here.")},{key:"sample-4",title:n("Fourth card"),excerpt:n("A line about it appears here.")}],f=(e,i,a)=>({slug:e.key||`card-${i}`,title:e.title??"",excerpt:e.excerpt??"",cover:e.cover??"",meta:e.meta||void 0,dateLabel:e.dateLabel||void 0,href:e.href||"#",...a?.facets?{facets:a.facets}:{},...a?.tags?{tags:a.tags}:{}});function B(e){const i=e[b],a=new Map,o=[];if(!Array.isArray(i))return{byKey:a,byIndex:o};for(const d of i){if(!d||typeof d!="object"||Array.isArray(d))continue;const t=d;if(!Object.values(t).some(l=>typeof l=="string"&&l))continue;const s={facets:k(t.facets),tags:g(t.tags)};o.push(s),typeof t.key=="string"&&t.key&&a.set(t.key,s)}return{byKey:a,byIndex:o}}const I={...T,render:e=>{const i=S(e.headPlacement)==="own-box",a=r=>i?void 0:r,o=m(e.linkText,u.link,e.editor),t=x(e)!==""?A(e,!!e.editor?.isEditing,v()):null,s=t&&!t.sample?B(e):null,l=t?t.sample?[]:t.rows.map((r,c)=>f(r,c,r.key?s?.byKey.get(r.key):s?.byIndex[c])):e.posts;return y(h,{num:a(m(e.num,u.num,e.editor)),title:a(m(e.title,u.title,e.editor)),link:a(o?{text:o,href:E(e.linkHref)||"/journal"}:void 0),omitHead:i,posts:l,sample:t?.sample?t.rows.map((r,c)=>f(r,c)):void 0,columns:e.columns,limit:e.limit,showAll:e.showAll,layout:e.layout,featuredWidth:e.featuredWidth,listCover:e.listCover,featuredDarken:e.featuredDarken,cardImage:e.cardImage,gap:e.gap,nameFilter:e.nameFilter===!0,padTop:typeof e.padTop=="number"?e.padTop:void 0,padBottom:typeof e.padBottom=="number"?e.padBottom:void 0,editing:e.editor?.isEditing})}};export{I as EventsRender};
@@ -1 +1 @@
1
- import{FOOTER_COLUMNS_DEFAULT as o,LOGO_FILL_DEFAULT as t,LOGO_ROW_FILL_DEFAULT as e}from"efficient-web-builder/format/lib/content/footer";const l={blocks:{type:"slot",allow:["FooterLogo","FooterMenu","FooterDivider","FooterGroup","FooterText","FooterEmailSignup","FooterSocial"]}},r={label:"Footer",fields:l,defaultProps:{columns:o,logoFill:t,logoRowFill:e}};export{r as FooterMeta,l as FooterSlots};
1
+ import{FOOTER_COLUMNS_DEFAULT as o,LOGO_FILL_DEFAULT as t,LOGO_ROW_FILL_DEFAULT as e}from"efficient-web-builder/format/lib/content/footer";const F={blocks:{type:"slot",allow:["FooterLogo","FooterMenu","FooterDivider","FooterGroup","FooterText","FooterEmailSignup","FooterSocial","FooterPayment"]}},r={label:"Footer",fields:F,defaultProps:{columns:o,logoFill:t,logoRowFill:e}};export{r as FooterMeta,F as FooterSlots};
@@ -1 +1 @@
1
- const o={blocks:{type:"slot",allow:["FooterText","FooterEmailSignup","FooterMenu","FooterDivider","FooterSocial"]}},t={label:"Footer Box",fields:o,defaultProps:{direction:"vertical",align:"start"}};export{t as FooterGroupMeta,o as FooterGroupSlots};
1
+ const o={blocks:{type:"slot",allow:["FooterText","FooterEmailSignup","FooterMenu","FooterDivider","FooterSocial","FooterPayment"]}},t={label:"Footer Box",fields:o,defaultProps:{direction:"vertical",align:"start"}};export{t as FooterGroupMeta,o as FooterGroupSlots};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FooterMessagingMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ import{MESSAGING_SOURCE as e}from"../../../../sections/messaging.js";const s={label:"Messaging Strip",defaultProps:{heading:"Message us",dataSource:e}};export{s as FooterMessagingMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FooterMessagingRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as i}from"react/jsx-runtime";import s from"../../../../../components/FooterMessaging.js";import{messagingChannels as t}from"../../../../sections/messaging.js";import{sourcedRows as m}from"efficient-web-builder/format/lib/content/block-sources";import{readHidable as a}from"efficient-easel/screen/lib/document/hidable";import{messagingSample as d}from"../MessagingCards/render.js";import{FooterMessagingMeta as g}from"./meta.js";const M={...g,render:e=>{const{rows:o}=m(e,!!e.editor?.isEditing,d()),{text:r,hidden:n}=a(e.heading);return i(s,{heading:n?void 0:r||void 0,channels:t(o)})}};export{M as FooterMessagingRender};
@@ -0,0 +1,3 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FOOTER_PAYMENT_LEAD: "We accept";
3
+ export declare const FooterPaymentMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ import{FOOTER_PAYMENT_PH as t}from"efficient-web-builder/format/lib/content/footer";const e=t.lead,a={label:"Payment Logos",defaultProps:{lead:e,methods:[],size:"sm",align:"start"}};export{e as FOOTER_PAYMENT_LEAD,a as FooterPaymentMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const FooterPaymentRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{Fragment as g,jsx as t}from"react/jsx-runtime";import d from"../../../../../components/FooterPayment.js";import{declaredBlockSource as f,sourcedRows as y}from"efficient-web-builder/format/lib/content/block-sources";import{say as l}from"efficient-web-builder/format/lib/editor-words";import{FooterPaymentMeta as h}from"./meta.js";const p=()=>[{label:l("Cash"),kind:"cash"},{label:l("Card"),kind:"card"}],x={...h,render:r=>{const{lead:a,methods:o,size:n,align:i,editor:m}=r;if(f(r)!==""){const e=y(r,!!m?.isEditing,p()).rows;return e.length?t(d,{lead:a,methods:e.map(s=>({name:s.label,kind:s.kind})),size:n,align:i}):t(g,{})}const c=Array.isArray(o)?o:[];return t(d,{lead:a,methods:c.map(e=>({name:e.label})),size:n,align:i,editing:m?.isEditing})}};export{x as FooterPaymentRender};
@@ -0,0 +1,2 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const MessagingCardsMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ import{MESSAGING_SOURCE as e}from"../../../../sections/messaging.js";const t={label:"Messaging cards",widthRows:"two",defaultProps:{title:"Message us",description:"",contained:!0,dataSource:e}};export{t as MessagingCardsMeta};
@@ -0,0 +1,4 @@
1
+ import { type SourceRow } from "efficient-web-builder/format/lib/content/block-sources";
2
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
3
+ export declare const messagingSample: () => SourceRow[];
4
+ export declare const MessagingCardsRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as a}from"react/jsx-runtime";import s from"../../../../../components/MessagingCards.js";import{messagingChannels as o}from"../../../../sections/messaging.js";import{sourcedRows as i}from"efficient-web-builder/format/lib/content/block-sources";import{readHidable as m}from"efficient-easel/screen/lib/document/hidable";import{MessagingCardsMeta as h}from"./meta.js";const p=()=>[{app:"wechat",name:"WeChat",handle:"yourvenue",href:"",qr:"https://u.wechat.com/yourvenue"},{app:"telegram",name:"Telegram",handle:"@yourvenue",href:"https://t.me/yourvenue",qr:"https://t.me/yourvenue"},{app:"whatsapp",name:"WhatsApp",handle:"0400 000 000",href:"https://wa.me/61400000000",qr:"https://wa.me/61400000000"},{app:"line",name:"LINE",handle:"yourvenue",href:"https://line.me/ti/p/~yourvenue",qr:"https://line.me/ti/p/~yourvenue"}],n=e=>{const{text:t,hidden:r}=m(e);return r||!t?void 0:t},v={...h,render:e=>{const{rows:t}=i(e,!!e.editor?.isEditing,p());return a(s,{title:n(e.title),description:n(e.description),channels:o(t),contained:e.contained!==!1})}};export{v as MessagingCardsRender,p as messagingSample};
@@ -0,0 +1,11 @@
1
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
2
+ export declare const OPENING_HOURS_SOURCE = "location-opening";
3
+ export declare const OPENING_HOURS_SHOWS: readonly [{
4
+ readonly label: "Open now badge";
5
+ readonly value: "badge";
6
+ }, {
7
+ readonly label: "The week";
8
+ readonly value: "week";
9
+ }];
10
+ export declare const OPENING_HOURS_SHOW_FALLBACK = "week";
11
+ export declare const OpeningHoursMeta: Omit<BlockRender, "render">;
@@ -0,0 +1 @@
1
+ const e="location-opening",t=[{label:"Open now badge",value:"badge"},{label:"The week",value:"week"}],o="week",n={label:"Opening hours",widthRows:"two",defaultProps:{show:o,title:"Opening hours",contained:!0,dataSource:e}};export{t as OPENING_HOURS_SHOWS,o as OPENING_HOURS_SHOW_FALLBACK,e as OPENING_HOURS_SOURCE,n as OpeningHoursMeta};
@@ -0,0 +1,4 @@
1
+ import { type SourceRow } from "efficient-web-builder/format/lib/content/block-sources";
2
+ import type { BlockRender } from "efficient-web-builder/format/lib/document/blocks/block-types";
3
+ export declare const openingHoursSample: () => SourceRow[];
4
+ export declare const OpeningHoursRender: BlockRender;
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import t from"../../../../../components/OpeningHours.js";import{OPENING_SAMPLE_MOMENT as i,OPENING_SAMPLE_WEEK as d,readOpeningRow as s}from"../../../../sections/opening-hours.js";import{sourcedRows as a}from"efficient-web-builder/format/lib/content/block-sources";import{readHidable as m}from"efficient-easel/screen/lib/document/hidable";import{OpeningHoursMeta as u}from"./meta.js";const w=()=>[{week:d,zone:"Australia/Sydney",hours:""}],f=e=>{const{text:o,hidden:n}=m(e);return n||!o?void 0:o},h={...u,render:e=>{const{rows:o,sample:n}=a(e,!!e.editor?.isEditing,w());return r(t,{show:e.show==="badge"?"badge":"week",title:f(e.title),row:s(o),contained:e.contained!==!1,now:n?i:void 0})}};export{h as OpeningHoursRender,w as openingHoursSample};
@@ -3,4 +3,10 @@ export declare const REVIEWS_PH: {
3
3
  eyebrow: string;
4
4
  title: string;
5
5
  };
6
+ export declare const ReviewsSlots: {
7
+ template: {
8
+ type: "slot";
9
+ allow: string[];
10
+ };
11
+ };
6
12
  export declare const ReviewsMeta: Omit<BlockRender, "render">;
@@ -1 +1 @@
1
- const e={eyebrow:"Reviews",title:"From our *customers.*"},o={label:"Reviews",defaultProps:{eyebrow:"",title:"",columns:3,limit:6,designCode:""}};export{e as REVIEWS_PH,o as ReviewsMeta};
1
+ import{cardTemplateSlot as e}from"efficient-web-builder/format/lib/content/card-template";import{PRODUCT_REVIEWS_SOURCE as t}from"../../../../sections/reviews.js";const i={eyebrow:"Reviews",title:"From our *customers.*"},o={template:e()},l={label:"Reviews",fields:o,defaultProps:{eyebrow:"",title:"",columns:3,limit:6,dataSource:t,items:[]}};export{i as REVIEWS_PH,l as ReviewsMeta,o as ReviewsSlots};
@@ -1 +1 @@
1
- import{jsx as m}from"react/jsx-runtime";import r from"../../../../../components/Reviews.js";import{hidableText as a}from"efficient-easel/screen/lib/document/hidable";import{parseSectionHeadPlacement as l}from"efficient-web-builder/format/lib/sections/section-head-placement";import{parseSectionEyebrowLook as w}from"efficient-web-builder/format/lib/sections/section-eyebrow-look";import{phHide as t}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{ReviewsMeta as c,REVIEWS_PH as n}from"./meta.js";const g={...c,render:e=>{const i=l(e.headPlacement)==="own-box",o=d=>i?void 0:d;return m(r,{look:w(e.eyebrowLook,"Reviews"),eyebrow:o(t(e.eyebrow,n.eyebrow,e.editor)),title:o(t(e.title,n.title,e.editor)),omitHead:i,columns:e.columns,limit:e.limit,designCode:a(e.designCode)||void 0,editing:e.editor?.isEditing})}};export{g as ReviewsRender};
1
+ import{jsx as s}from"react/jsx-runtime";import f from"../../../../../components/Reviews.js";import{CardTemplateRows as y}from"efficient-web-builder/render/components/CardRowContext";import{cardRow as h}from"efficient-web-builder/format/lib/content/card-template";import{declaredBlockSource as p,sourcedRows as b}from"efficient-web-builder/format/lib/content/block-sources";import{parseSectionHeadPlacement as R}from"efficient-web-builder/format/lib/sections/section-head-placement";import{parseSectionEyebrowLook as g}from"efficient-web-builder/format/lib/sections/section-eyebrow-look";import{phHide as c}from"efficient-web-builder/render/lib/document/blocks/scaffold";import{say as i}from"efficient-web-builder/format/lib/editor-words";import{ReviewsMeta as k,REVIEWS_PH as d}from"./meta.js";const w=()=>[{key:"sample-review-1",name:i("Sample reviewer"),rating:"5",title:i("Sample review title"),quote:i("Approved customer reviews appear here automatically — this card is only a preview of the section's shape.")},{key:"sample-review-2",name:i("Sample reviewer"),rating:"4",title:"",quote:i("Reviews are collected by the Review Form section and wait for your approval before they show.")},{key:"sample-review-3",name:i("Sample reviewer"),rating:"5",title:i("Another sample"),quote:i("Set a product design code on this section to show one product's reviews; leave it blank for the whole store.")}],S=(e,o)=>{const a=Number.parseFloat(e.rating??"");return{key:e.key||`review-${o}`,quote:e.quote??"",title:e.title??"",name:e.name??"",meta:e.dateLabel||e.role||"",...Number.isFinite(a)?{rating:a}:{}}},q=e=>(Array.isArray(e)?e:[]).map(h).filter(o=>(o.quote??"").trim()),I={...k,render:e=>{const o=R(e.headPlacement)==="own-box",a=t=>o?void 0:t,m=!!e.editor?.isEditing;let r,l=!1;if(p(e)!==""){const t=b(e,m,w()),u=typeof e.limit=="number"&&e.limit>0?e.limit:6;r=t.sample?t.rows:t.rows.slice(0,u),l=t.sample}else r=q(e.items),!r.length&&m&&(r=w(),l=!0);const v=r.map(S),n=t=>s(f,{look:g(e.eyebrowLook,"Reviews"),eyebrow:a(c(e.eyebrow,d.eyebrow,e.editor)),title:a(c(e.title,d.title,e.editor)),omitHead:o,columns:e.columns,rows:v,sample:l,editing:m,cards:t});return s(y,{ownerId:String(e.id??""),ownerType:"Reviews",Template:e.template,rows:r,fallback:n(),children:t=>n(t)})}};export{I as ReviewsRender};
@@ -11,10 +11,15 @@ export declare const SERVICE_METAS: {
11
11
  FooterLogo: Omit<BlockRender, "render">;
12
12
  FooterMenu: Omit<BlockRender, "render">;
13
13
  FooterSocial: Omit<BlockRender, "render">;
14
+ FooterPayment: Omit<BlockRender, "render">;
14
15
  FooterText: Omit<BlockRender, "render">;
15
16
  Form: Omit<BlockRender, "render">;
16
17
  LegalLineBlock: Omit<BlockRender, "render">;
18
+ OpeningHours: Omit<BlockRender, "render">;
17
19
  RateTable: Omit<BlockRender, "render">;
20
+ MessagingCards: Omit<BlockRender, "render">;
21
+ FooterMessaging: Omit<BlockRender, "render">;
22
+ ContactCards: Omit<BlockRender, "render">;
18
23
  RatingBlock: Omit<BlockRender, "render">;
19
24
  ReviewForm: Omit<BlockRender, "render">;
20
25
  Reviews: Omit<BlockRender, "render">;
@@ -1 +1 @@
1
- import{SITE_FOOTER_TYPE as o,SITE_HEADER_TYPE as t}from"efficient-web-builder/format/lib/document/section-groups";import{AppointmentBookingMeta as r}from"./AppointmentBooking/meta.js";import{BookingBoxMeta as e}from"./BookingBox/meta.js";import{ContactRoutingMeta as i}from"./ContactRouting/meta.js";import{EventsMeta as m}from"./Events/meta.js";import{FooterDividerMeta as a}from"./FooterDivider/meta.js";import{FooterEmailSignupMeta as p}from"./FooterEmailSignup/meta.js";import{FooterGroupMeta as M}from"./FooterGroup/meta.js";import{FooterLogoMeta as f}from"./FooterLogo/meta.js";import{FooterMenuMeta as n}from"./FooterMenu/meta.js";import{FooterMeta as F}from"./Footer/meta.js";import{FooterSocialMeta as u}from"./FooterSocial/meta.js";import{FooterTextMeta as S}from"./FooterText/meta.js";import{FormMeta as g}from"./Form/meta.js";import{LegalLineBlockMeta as l}from"./LegalLineBlock/meta.js";import{RateTableMeta as B}from"./RateTable/meta.js";import{RatingBlockMeta as b}from"./RatingBlock/meta.js";import{ReviewFormMeta as E}from"./ReviewForm/meta.js";import{ReviewsMeta as c}from"./Reviews/meta.js";import{SiteFooterMeta as R}from"./SiteFooter/meta.js";import{SiteHeaderMeta as s}from"./SiteHeader/meta.js";import{SubmitBoxMeta as T}from"./SubmitBox/meta.js";import{SubmitBuildMeta as k}from"./SubmitBuild/meta.js";import{SubscribeBlogsMeta as v}from"./SubscribeBlogs/meta.js";import{SubscribeMeta as x}from"./Subscribe/meta.js";const X={AppointmentBooking:r,BookingBox:e,ContactRouting:i,Events:m,Footer:F,FooterDivider:a,FooterEmailSignup:p,FooterGroup:M,FooterLogo:f,FooterMenu:n,FooterSocial:u,FooterText:S,Form:g,LegalLineBlock:l,RateTable:B,RatingBlock:b,ReviewForm:E,Reviews:c,[o]:R,[t]:s,SubmitBox:T,SubmitBuild:k,Subscribe:x,SubscribeBlogs:v};export{X as SERVICE_METAS};
1
+ import{SITE_FOOTER_TYPE as o,SITE_HEADER_TYPE as t}from"efficient-web-builder/format/lib/document/section-groups";import{AppointmentBookingMeta as r}from"./AppointmentBooking/meta.js";import{BookingBoxMeta as e}from"./BookingBox/meta.js";import{ContactRoutingMeta as i}from"./ContactRouting/meta.js";import{EventsMeta as m}from"./Events/meta.js";import{FooterDividerMeta as a}from"./FooterDivider/meta.js";import{FooterEmailSignupMeta as p}from"./FooterEmailSignup/meta.js";import{FooterGroupMeta as M}from"./FooterGroup/meta.js";import{FooterLogoMeta as n}from"./FooterLogo/meta.js";import{FooterMenuMeta as f}from"./FooterMenu/meta.js";import{FooterMeta as g}from"./Footer/meta.js";import{FooterSocialMeta as F}from"./FooterSocial/meta.js";import{FooterPaymentMeta as s}from"./FooterPayment/meta.js";import{FooterTextMeta as u}from"./FooterText/meta.js";import{FormMeta as S}from"./Form/meta.js";import{LegalLineBlockMeta as l}from"./LegalLineBlock/meta.js";import{OpeningHoursMeta as B}from"./OpeningHours/meta.js";import{RateTableMeta as c}from"./RateTable/meta.js";import{MessagingCardsMeta as b}from"./MessagingCards/meta.js";import{FooterMessagingMeta as E}from"./FooterMessaging/meta.js";import{ContactCardsMeta as R}from"./ContactCards/meta.js";import{RatingBlockMeta as T}from"./RatingBlock/meta.js";import{ReviewFormMeta as d}from"./ReviewForm/meta.js";import{ReviewsMeta as C}from"./Reviews/meta.js";import{SiteFooterMeta as k}from"./SiteFooter/meta.js";import{SiteHeaderMeta as v}from"./SiteHeader/meta.js";import{SubmitBoxMeta as x}from"./SubmitBox/meta.js";import{SubmitBuildMeta as L}from"./SubmitBuild/meta.js";import{SubscribeBlogsMeta as _}from"./SubscribeBlogs/meta.js";import{SubscribeMeta as w}from"./Subscribe/meta.js";const po={AppointmentBooking:r,BookingBox:e,ContactRouting:i,Events:m,Footer:g,FooterDivider:a,FooterEmailSignup:p,FooterGroup:M,FooterLogo:n,FooterMenu:f,FooterSocial:F,FooterPayment:s,FooterText:u,Form:S,LegalLineBlock:l,OpeningHours:B,RateTable:c,MessagingCards:b,FooterMessaging:E,ContactCards:R,RatingBlock:T,ReviewForm:d,Reviews:C,[o]:k,[t]:v,SubmitBox:x,SubmitBuild:L,Subscribe:w,SubscribeBlogs:_};export{po as SERVICE_METAS};
@@ -11,10 +11,15 @@ export declare const SERVICE_RENDERS: {
11
11
  FooterLogo: BlockRender;
12
12
  FooterMenu: BlockRender;
13
13
  FooterSocial: BlockRender;
14
+ FooterPayment: BlockRender;
14
15
  FooterText: BlockRender;
15
16
  Form: BlockRender;
16
17
  LegalLineBlock: BlockRender;
18
+ OpeningHours: BlockRender;
17
19
  RateTable: BlockRender;
20
+ MessagingCards: BlockRender;
21
+ FooterMessaging: BlockRender;
22
+ ContactCards: BlockRender;
18
23
  RatingBlock: BlockRender;
19
24
  ReviewForm: BlockRender;
20
25
  Reviews: BlockRender;
@@ -1 +1 @@
1
- import{SITE_FOOTER_TYPE as o,SITE_HEADER_TYPE as r}from"efficient-web-builder/format/lib/document/section-groups";import{AppointmentBookingRender as e}from"./AppointmentBooking/render.js";import{BookingBoxRender as t}from"./BookingBox/render.js";import{ContactRoutingRender as i}from"./ContactRouting/render.js";import{EventsRender as m}from"./Events/render.js";import{FooterRender as n}from"./Footer/render.js";import{FooterDividerRender as R}from"./FooterDivider/render.js";import{FooterEmailSignupRender as p}from"./FooterEmailSignup/render.js";import{FooterGroupRender as d}from"./FooterGroup/render.js";import{FooterLogoRender as f}from"./FooterLogo/render.js";import{FooterMenuRender as F}from"./FooterMenu/render.js";import{FooterSocialRender as u}from"./FooterSocial/render.js";import{FooterTextRender as S}from"./FooterText/render.js";import{FormRender as g}from"./Form/render.js";import{LegalLineBlockRender as l}from"./LegalLineBlock/render.js";import{RateTableRender as B}from"./RateTable/render.js";import{RatingBlockRender as a}from"./RatingBlock/render.js";import{ReviewFormRender as E}from"./ReviewForm/render.js";import{ReviewsRender as b}from"./Reviews/render.js";import{SiteFooterRender as c}from"./SiteFooter/render.js";import{SiteHeaderRender as s}from"./SiteHeader/render.js";import{SubmitBoxRender as T}from"./SubmitBox/render.js";import{SubmitBuildRender as k}from"./SubmitBuild/render.js";import{SubscribeRender as v}from"./Subscribe/render.js";import{SubscribeBlogsRender as x}from"./SubscribeBlogs/render.js";const X={AppointmentBooking:e,BookingBox:t,ContactRouting:i,Events:m,Footer:n,FooterDivider:R,FooterEmailSignup:p,FooterGroup:d,FooterLogo:f,FooterMenu:F,FooterSocial:u,FooterText:S,Form:g,LegalLineBlock:l,RateTable:B,RatingBlock:a,ReviewForm:E,Reviews:b,[o]:c,[r]:s,SubmitBox:T,SubmitBuild:k,Subscribe:v,SubscribeBlogs:x};export{X as SERVICE_RENDERS};
1
+ import{SITE_FOOTER_TYPE as o,SITE_HEADER_TYPE as r}from"efficient-web-builder/format/lib/document/section-groups";import{AppointmentBookingRender as e}from"./AppointmentBooking/render.js";import{BookingBoxRender as t}from"./BookingBox/render.js";import{ContactRoutingRender as i}from"./ContactRouting/render.js";import{EventsRender as m}from"./Events/render.js";import{FooterRender as n}from"./Footer/render.js";import{FooterDividerRender as R}from"./FooterDivider/render.js";import{FooterEmailSignupRender as p}from"./FooterEmailSignup/render.js";import{FooterGroupRender as d}from"./FooterGroup/render.js";import{FooterLogoRender as f}from"./FooterLogo/render.js";import{FooterMenuRender as a}from"./FooterMenu/render.js";import{FooterSocialRender as g}from"./FooterSocial/render.js";import{FooterPaymentRender as F}from"./FooterPayment/render.js";import{FooterTextRender as s}from"./FooterText/render.js";import{FormRender as u}from"./Form/render.js";import{LegalLineBlockRender as S}from"./LegalLineBlock/render.js";import{OpeningHoursRender as l}from"./OpeningHours/render.js";import{RateTableRender as B}from"./RateTable/render.js";import{MessagingCardsRender as c}from"./MessagingCards/render.js";import{FooterMessagingRender as E}from"./FooterMessaging/render.js";import{ContactCardsRender as b}from"./ContactCards/render.js";import{RatingBlockRender as C}from"./RatingBlock/render.js";import{ReviewFormRender as T}from"./ReviewForm/render.js";import{ReviewsRender as k}from"./Reviews/render.js";import{SiteFooterRender as v}from"./SiteFooter/render.js";import{SiteHeaderRender as x}from"./SiteHeader/render.js";import{SubmitBoxRender as L}from"./SubmitBox/render.js";import{SubmitBuildRender as M}from"./SubmitBuild/render.js";import{SubscribeRender as _}from"./Subscribe/render.js";import{SubscribeBlogsRender as w}from"./SubscribeBlogs/render.js";const Ro={AppointmentBooking:e,BookingBox:t,ContactRouting:i,Events:m,Footer:n,FooterDivider:R,FooterEmailSignup:p,FooterGroup:d,FooterLogo:f,FooterMenu:a,FooterSocial:g,FooterPayment:F,FooterText:s,Form:u,LegalLineBlock:S,OpeningHours:l,RateTable:B,MessagingCards:c,FooterMessaging:E,ContactCards:b,RatingBlock:C,ReviewForm:T,Reviews:k,[o]:v,[r]:x,SubmitBox:L,SubmitBuild:M,Subscribe:_,SubscribeBlogs:w};export{Ro as SERVICE_RENDERS};
@@ -1233,6 +1233,29 @@
1233
1233
  }
1234
1234
  }
1235
1235
  },
1236
+ "FooterPayment": {
1237
+ "lead": {
1238
+ "type": "custom",
1239
+ "__text": {
1240
+ "control": "text",
1241
+ "label": "Lead",
1242
+ "placeholder": "We accept"
1243
+ }
1244
+ },
1245
+ "methods": {
1246
+ "type": "array",
1247
+ "label": "Payment methods",
1248
+ "arrayFields": {
1249
+ "label": {
1250
+ "type": "custom",
1251
+ "__text": {
1252
+ "control": "copyText",
1253
+ "label": "Name"
1254
+ }
1255
+ }
1256
+ }
1257
+ }
1258
+ },
1236
1259
  "FooterText": {
1237
1260
  "text": {
1238
1261
  "type": "custom",
@@ -1283,6 +1306,16 @@
1283
1306
  }
1284
1307
  }
1285
1308
  },
1309
+ "OpeningHours": {
1310
+ "title": {
1311
+ "type": "custom",
1312
+ "__text": {
1313
+ "control": "textarea",
1314
+ "label": "Heading",
1315
+ "placeholder": "Opening hours"
1316
+ }
1317
+ }
1318
+ },
1286
1319
  "RateTable": {
1287
1320
  "title": {
1288
1321
  "type": "custom",
@@ -1301,6 +1334,74 @@
1301
1334
  }
1302
1335
  }
1303
1336
  },
1337
+ "MessagingCards": {
1338
+ "title": {
1339
+ "type": "custom",
1340
+ "__text": {
1341
+ "control": "textarea",
1342
+ "label": "Heading",
1343
+ "placeholder": "Message us"
1344
+ }
1345
+ },
1346
+ "description": {
1347
+ "type": "custom",
1348
+ "__text": {
1349
+ "control": "textarea",
1350
+ "label": "Body",
1351
+ "placeholder": ""
1352
+ }
1353
+ }
1354
+ },
1355
+ "FooterMessaging": {
1356
+ "heading": {
1357
+ "type": "custom",
1358
+ "__text": {
1359
+ "control": "text",
1360
+ "label": "Heading",
1361
+ "placeholder": "Message us"
1362
+ }
1363
+ }
1364
+ },
1365
+ "ContactCards": {
1366
+ "title": {
1367
+ "type": "custom",
1368
+ "__text": {
1369
+ "control": "textarea",
1370
+ "label": "Heading",
1371
+ "placeholder": "Who to ask"
1372
+ }
1373
+ },
1374
+ "description": {
1375
+ "type": "custom",
1376
+ "__text": {
1377
+ "control": "textarea",
1378
+ "label": "Body",
1379
+ "placeholder": ""
1380
+ }
1381
+ },
1382
+ "contacts": {
1383
+ "type": "array",
1384
+ "label": "Contacts",
1385
+ "arrayFields": {
1386
+ "name": {
1387
+ "type": "custom",
1388
+ "__text": {
1389
+ "control": "copyText",
1390
+ "label": "Name",
1391
+ "placeholder": "Who to ask for"
1392
+ }
1393
+ },
1394
+ "value": {
1395
+ "type": "custom",
1396
+ "__text": {
1397
+ "control": "copyText",
1398
+ "label": "Number or ID",
1399
+ "placeholder": "A number, @name or an ID"
1400
+ }
1401
+ }
1402
+ }
1403
+ }
1404
+ },
1304
1405
  "ReviewForm": {
1305
1406
  "eyebrow": {
1306
1407
  "type": "custom",
@@ -1344,12 +1445,52 @@
1344
1445
  "placeholder": "From our *customers.*"
1345
1446
  }
1346
1447
  },
1347
- "designCode": {
1348
- "type": "custom",
1349
- "__text": {
1350
- "control": "plainText",
1351
- "label": "Design code",
1352
- "placeholder": "e.g. D00123 · blank = the whole store"
1448
+ "items": {
1449
+ "type": "array",
1450
+ "label": "Typed reviews",
1451
+ "arrayFields": {
1452
+ "quote": {
1453
+ "type": "custom",
1454
+ "__text": {
1455
+ "control": "plainTextarea",
1456
+ "label": "Quote"
1457
+ }
1458
+ },
1459
+ "title": {
1460
+ "type": "custom",
1461
+ "__text": {
1462
+ "control": "plainText",
1463
+ "label": "Title"
1464
+ }
1465
+ },
1466
+ "name": {
1467
+ "type": "custom",
1468
+ "__text": {
1469
+ "control": "plainText",
1470
+ "label": "Name"
1471
+ }
1472
+ },
1473
+ "role": {
1474
+ "type": "custom",
1475
+ "__text": {
1476
+ "control": "plainText",
1477
+ "label": "Role · location"
1478
+ }
1479
+ }
1480
+ }
1481
+ },
1482
+ "dataSourceOptions": {
1483
+ "type": "object",
1484
+ "label": "Product",
1485
+ "objectFields": {
1486
+ "designCode": {
1487
+ "type": "custom",
1488
+ "__text": {
1489
+ "control": "plainText",
1490
+ "label": "Design code",
1491
+ "placeholder": "e.g. D00123 · blank = the whole store"
1492
+ }
1493
+ }
1353
1494
  }
1354
1495
  }
1355
1496
  },
@@ -0,0 +1,2 @@
1
+ import { type CardTemplateSpec } from "efficient-web-builder/format/lib/content/card-template";
2
+ export declare const STOREFRONT_CARD_TEMPLATES: readonly CardTemplateSpec[];
@@ -0,0 +1 @@
1
+ import{registerCardTemplates as e}from"efficient-web-builder/format/lib/content/card-template";const l=[{block:"Reviews",fields:[{key:"quote",label:"Quote"},{key:"title",label:"Title"},{key:"name",label:"Name"},{key:"role",label:"Role · location"},{key:"rating",label:"Rating"},{key:"dateLabel",label:"Date"}]}];e(l);export{l as STOREFRONT_CARD_TEMPLATES};
@@ -2,6 +2,7 @@ export declare const PAGE_BLOCKS_FROM_FOOTER: {
2
2
  readonly MenuBlock: "FooterMenu";
3
3
  readonly EmailFormBlock: "FooterEmailSignup";
4
4
  readonly SocialLogosBlock: "FooterSocial";
5
+ readonly PaymentLogosBlock: "FooterPayment";
5
6
  };
6
7
  export declare const PAGE_MENU_DIRECTION_DEFAULT = "column";
7
8
  export declare function addPageBlocksFromFooter(components: Record<string, object>): void;