efficient-web-builder 16.0.0 → 16.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 16.0.2 - 2026-10-16
4
+
5
+ **On a phone, a hero with a set height grows to fit its words** (card [ADD] INOVIT And Hartes Metal US Websites, GG 2026-10-15). hartesmetal.com/dealers: the heading "Become a Hartes Metal dealer" is five lines on a phone, and the hero's set phone height (60vh) was a fixed height, so the bottom-aligned words overflowed upward and the heading ran under the logo (181px above the top of the page at 390x844, 267px at 375x667).
6
+
7
+ ### Fixed
8
+
9
+ - **HeroSingle, below 720px, with a set height:** the set phone height is a minimum, the section is a column, and the words layer is in the flow and fills it. The hero is the set height or its words, whichever is taller; words that already fit sit where they did. 720px and up is unchanged (the desktop height is still a height, and the phone minimum is cleared there). Measured in Chrome on the live page with these rules: 390x844, hero 506px to 839px, heading top -181px to +152px; 375x667, 400px to 819px, -267px to +152px; 1440x900 unchanged.
10
+ - A hero with no set height keeps its built-in output (`h-screen min-h-[680px]`), byte for byte.
11
+ - Guard: `scripts/test-hero-grows-on-phone.tsx`.
12
+
13
+ ## 16.0.1 - 2026-10-15
14
+
15
+ **A page opens even when its header and footer cannot be loaded** (card [DESIGN] Edit The Header And Footer On The Page; found by the storefront-blocks isolation guard while pinning 16.0.0). A patch.
16
+
17
+ ### Fixed
18
+
19
+ - In 16.0.0 a site page loaded the site-footer document beside it, and a failed load of that document (a 404, an outage, a failed fetch) failed the whole open: no page of the site could be edited while it lasted. Now the page opens as it is stored, without its header and footer, and `pinnedChrome.state().loadFailed` says so. Nothing of the header and footer is claimed, saved or published until a later open loads them. A failed load of the page itself still fails, as before.
20
+
21
+ - **The canvas says so** (GG 2026-10-15: a page that silently shows no header or footer would look broken): the shell's warning Banner floats over the top of the canvas, where the header would be, "The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again." It may be closed; the next failure shows it again, and a good open takes it away. It floats beside the frame, so the frame keeps its box and the screen's overlays stay where they measure. Words through `say()` and the catalogue.
22
+
23
+ ### Added for hosts
24
+
25
+ - `PinnedChromeState.loadFailed`.
26
+ - `components/PinnedChromeLoadNotice` (`PinnedChromeLoadNotice`, `OpenDocumentChromeLoadNotice`), mounted by the website's canvas (`lib/puck/overrides` `SiteCanvas`).
27
+
28
+ ### Guards
29
+
30
+ - `test-pinned-chrome-adapter` §9: the site-footer load failing as not-found, unavailable and a plain error each opens the page unspliced, reports it, claims, saves and publishes nothing of the chrome, and clears on the next good open; a failed page load still rejects. The three failed on 16.0.0.
31
+ - New `test-pinned-chrome-load-notice` (5): the warning Banner and its words on a failed load; nothing without one or without a report; it follows the report; the words in the catalogue and the notice an `<aside>` floating beside the frame; closed, it shows again on the next failure. Failed before the component existed.
32
+
3
33
  ## 16.0.0 - 2026-10-15
4
34
 
5
35
  **The header and footer are edited in place, on every page** (card [DESIGN] Edit The Header And Footer On The Page, plan 2026-10-15 PR 3; design approved by Lewis 2026-10-15: https://claude.ai/artifact/53ddJmXavpdDspYJrqVf6q). A major: the footer focus and its exports are removed, and the efficient-easel peer range narrows to `^8.3.0`.
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as N}from"react/jsx-runtime";import{useRef as S}from"react";import E from"./HeroPoster.js";import{resolveMedia as s}from"../lib/media.js";import{hasSectionHeight as j,resolveSectionHeight as c}from"../lib/content/section-height.js";import{DEFAULT_OVERLAY_COLOR as z,DEFAULT_OVERLAY_POSITION as L,overlayGradient as O}from"../lib/sections/hero-overlay.js";import{ON_MEDIA_INK_STYLE as A}from"../lib/content/ink.js";function H({overlay:h=100,overlayColor:f=z,overlayPosition:d=L,mediaType:p="image",mediaSrc:r,poster:t,objectPosition:v,tintColor:u="#000000",tintOpacity:i=0,heightDesktop:a,heightMobile:n,boxes:m,editing:x=!1}){const l=j(a,n),g=l?"h-[var(--sf-hero-h-m)] min-[720px]:h-[var(--sf-hero-h-d)]":"h-screen min-h-[680px]",_=l?{"--sf-hero-h-d":c(a),"--sf-hero-h-m":c(n)}:void 0,o=p==="video",b=o?s(r):void 0,w=o?s(t):s(r)??s(t),y=S(null);return N("section",{ref:y,className:`relative mx-[var(--sf-hero-bleed-m,calc(50%_-_50vw))] w-[var(--sf-hero-bleed-w,100vw)] ${g} max-w-[var(--sf-hero-cap,none)] overflow-hidden`,style:_,children:[e("div",{className:"absolute inset-0 z-[1]",children:e(E,{videoSrc:b,posterSrc:w,showVideo:o,objectPosition:v})}),i>0&&e("div",{className:"pointer-events-none absolute inset-0 z-[2]",style:{background:u,opacity:Math.min(Math.max(i,0),100)/100}}),e("div",{className:"pointer-events-none absolute inset-0 z-[2]",style:{background:O(f,d),opacity:Math.min(Math.max(h,0),100)/100}}),m&&e("div",{className:["sf-hero-group-layer absolute inset-0 z-[3] mx-auto","max-w-[min(var(--sf-page-cap,var(--sf-site-width,1600px)),var(--sf-site-width,1600px))]","px-[var(--sf-site-gutter,40px)] pt-[140px] pb-14",x?"sf-hero-group-layer-edit":""].filter(Boolean).join(" "),style:A,children:e(m,{className:"sf-hero-group-zone",minEmptyHeight:160})})]})}export{H as default};
1
+ "use client";import{jsx as e,jsxs as S}from"react/jsx-runtime";import{useRef as E}from"react";import j from"./HeroPoster.js";import{resolveMedia as o}from"../lib/media.js";import{hasSectionHeight as z,resolveSectionHeight as c}from"../lib/content/section-height.js";import{DEFAULT_OVERLAY_COLOR as L,DEFAULT_OVERLAY_POSITION as O,overlayGradient as A}from"../lib/sections/hero-overlay.js";import{ON_MEDIA_INK_STYLE as H}from"../lib/content/ink.js";function M({overlay:h=100,overlayColor:f=L,overlayPosition:p=O,mediaType:d="image",mediaSrc:t,poster:i,objectPosition:x,tintColor:v="#000000",tintOpacity:a=0,heightDesktop:n,heightMobile:m,boxes:l,editing:u=!1}){const s=z(n,m),g=s?"min-h-[var(--sf-hero-h-m)] max-[720px]:flex max-[720px]:flex-col min-[720px]:min-h-0 min-[720px]:h-[var(--sf-hero-h-d)]":"h-screen min-h-[680px]",w=s?"max-[720px]:relative max-[720px]:flex-auto":"",_=s?{"--sf-hero-h-d":c(n),"--sf-hero-h-m":c(m)}:void 0,r=d==="video",b=r?o(t):void 0,y=r?o(i):o(t)??o(i),N=E(null);return S("section",{ref:N,className:`relative mx-[var(--sf-hero-bleed-m,calc(50%_-_50vw))] w-[var(--sf-hero-bleed-w,100vw)] ${g} max-w-[var(--sf-hero-cap,none)] overflow-hidden`,style:_,children:[e("div",{className:"absolute inset-0 z-[1]",children:e(j,{videoSrc:b,posterSrc:y,showVideo:r,objectPosition:x})}),a>0&&e("div",{className:"pointer-events-none absolute inset-0 z-[2]",style:{background:v,opacity:Math.min(Math.max(a,0),100)/100}}),e("div",{className:"pointer-events-none absolute inset-0 z-[2]",style:{background:A(f,p),opacity:Math.min(Math.max(h,0),100)/100}}),l&&e("div",{className:["sf-hero-group-layer absolute inset-0 z-[3] mx-auto",w,"max-w-[min(var(--sf-page-cap,var(--sf-site-width,1600px)),var(--sf-site-width,1600px))]","px-[var(--sf-site-gutter,40px)] pt-[140px] pb-14",u?"sf-hero-group-layer-edit":""].filter(Boolean).join(" "),style:H,children:e(l,{className:"sf-hero-group-zone",minEmptyHeight:160})})]})}export{M as default};
@@ -0,0 +1,6 @@
1
+ import type { PinnedChromeReport } from "../lib/editor-document-adapter.js";
2
+ export declare const PINNED_CHROME_LOAD_NOTICE = "The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.";
3
+ export declare function PinnedChromeLoadNotice({ report }: {
4
+ report: PinnedChromeReport | undefined;
5
+ }): import("react").JSX.Element | null;
6
+ export declare function OpenDocumentChromeLoadNotice(): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as n}from"react/jsx-runtime";import{useEffect as i,useState as r,useSyncExternalStore as d}from"react";import{Banner as c}from"efficient-shell/ui";import{useStorefrontDocument as l}from"./StorefrontDocumentContext.js";import{say as f}from"../lib/editor-words.js";const T="The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.",m=()=>()=>{},a=()=>!1;function h({report:e}){const o=d(e?e.subscribe:m,e?()=>e.state().loadFailed:a,e?()=>e.state().loadFailed:a),[s,t]=r(!1);return i(()=>{o||t(!1)},[o]),!o||s?null:n("aside",{className:"sf-canvas-notice",children:n(c,{tone:"warning",onDismiss:()=>t(!0),children:f("The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.")})})}function x(){const{adapter:e}=l();return n(h,{report:e?.pinnedChrome})}export{x as OpenDocumentChromeLoadNotice,T as PINNED_CHROME_LOAD_NOTICE,h as PinnedChromeLoadNotice};
@@ -4260,3 +4260,16 @@ ul.sf-image-status {
4260
4260
  .sf-focal-row {
4261
4261
  margin-top: var(--es-rhythm-between);
4262
4262
  }
4263
+
4264
+ /* The notice for a page whose header and footer could not load
4265
+ (components/PinnedChromeLoadNotice, 16.0.1), floating over the top of the
4266
+ canvas — the preview host is `position: relative` — so the frame keeps its
4267
+ box. An <aside>, not a <div>: the screen sizes every direct `div` child of
4268
+ the host to fill it. Layout only; the notice is the shell's Banner. */
4269
+ .sf-canvas-notice {
4270
+ position: absolute;
4271
+ top: 8px;
4272
+ left: 8px;
4273
+ right: 8px;
4274
+ z-index: 1;
4275
+ }
@@ -13,6 +13,7 @@ export type PinnedChromeState = {
13
13
  conflict: SaveConflict | null;
14
14
  saveFailed: boolean;
15
15
  unpublished: boolean;
16
+ loadFailed: boolean;
16
17
  };
17
18
  export interface PinnedChromeReport {
18
19
  state(): PinnedChromeState;
@@ -1 +1 @@
1
- "use client";import{SITE_FOOTER_SLUG as y}from"./content/footer.js";import{offeredSetsOf as L}from"./editor-blocks.js";import{isBackendError as g}from"./editor-backend-error.js";import{isEfficientBackend as A}from"./editor-session.js";import{noteLoaded as O,notePublished as T,noteSaved as k,pageLiveState as R}from"./page-live-state.js";import{spliceChrome as x,splitChrome as b}from"./pinned-chrome-doc.js";import{setActivePinnedChrome as J}from"./pinned-chrome-lock.js";import{backendOf as j}from"./website-session.js";function B(s,o){const i=o?{siteId:o}:void 0;return{resolve:t=>s.load({slug:t,...i}).then(e=>(e&&O(e.id,e.live),e)),saveLayout:(t,e,l,m)=>s.save(t,{layout:e},{version:l,clientId:m??""}).then(u=>(k(t,u.live),u)),rereadVersion:s.version?t=>s.version(t):void 0,publish:s.publish?(t,e)=>s.publish(t,e?{version:e}:void 0).then(l=>(T(t,l.live),l)):void 0,listPages:()=>s.list(i),createPage:s.create?t=>s.create({...t,...i}):void 0,deletePage:s.remove?(t,e)=>s.remove(t,e):void 0}}function I(s,o,i,t){let e=null;const l=new Set;let m=!1,u={docId:null,lockHolder:null,conflict:null,saveFailed:!1,unpublished:!1};const S=new Set,P=()=>{if(!e)return!1;const n=R(e.id);return n==="changed"||n==="never"||n===void 0&&m},f=n=>{u={...u,...n,docId:e?.id??null,unpublished:P()};for(const r of S)r()},w=n=>n&&typeof n=="object"&&!Array.isArray(n)?n:{},h=n=>!!e&&l.has(n),C={state:()=>u,subscribe:n=>(S.add(n),()=>{S.delete(n)})};return{resolve:async n=>{if(J(n===y?null:C),n===y)return i.resolve(n);const[r,c]=await Promise.all([i.resolve(n),s.load({slug:y,...o})]);if(c){O(c.id,c.live);const a=w(c.layout);e={id:c.id,layout:a,version:c.version,savedJson:""}}else e=null;if(m=!1,!r||!e)return f({conflict:null,saveFailed:!1}),r;const d=x(w(r.layout),e.layout);return e.savedJson=JSON.stringify(b(d,e.layout).chrome),l.add(r.id),f({conflict:null,saveFailed:!1}),{...r,layout:d}},saveLayout:async(n,r,c,d)=>{if(!e||!h(n))return i.saveLayout(n,r,c,d);const a=e,v=b(r,a.layout),F=await i.saveLayout(n,v.page,c,d),H=JSON.stringify(v.chrome);if(!v.chrome||H===a.savedJson||u.lockHolder)return F;try{const p=await s.save(a.id,{layout:v.chrome},{version:a.version,clientId:d??""});k(a.id,p.live),a.layout=v.chrome,a.version=p.version,a.savedJson=H,m=!0,f({conflict:null,saveFailed:!1})}catch(p){g(p,"changed-elsewhere")?f({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):g(p,"lock-taken")?f({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):f({saveFailed:!0})}return F},publish:i.publish?async(n,r)=>{const c=await i.publish(n,r),d=e;if(d&&h(n)&&s.publish&&P()&&!u.lockHolder){const a=await s.publish(d.id,d.version?{version:d.version}:void 0);T(d.id,a.live),a.version!==null&&(d.version=a.version),m=!1,f({})}return c}:void 0,lock:t?{claim:async(n,r,c)=>{const d=await t.claim(n,r,c),a=e;if(a&&h(n))try{await t.claim(a.id,r,!1),u.lockHolder&&f({lockHolder:null})}catch(v){g(v,"lock-taken")&&f({lockHolder:v.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}return d},release:async(n,r)=>{await t.release(n,r);const c=e;c&&h(n)&&!u.lockHolder&&await t.release(c.id,r).catch(()=>{})}}:void 0,pinnedChrome:C}}function z(s,o=j(),i=L(),t={}){const e=A(o),l=s?{siteId:s}:void 0,m=e?!!s:!0,u=o.site.update,S=e&&i.commerce&&i.service,P=!!t.editsPinnedInPlace&&S,f=B(o.pages,s),w=P?I(o.pages,l,f,o.lock):null;return{capabilities:{canPublish:!!o.pages.publish,hasSiteSettings:e,hasSiteTheme:!!o.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!o.pages.create,canDeletePagesInline:!!o.pages.remove,hasEditLock:!!o.lock,hasEditGuard:!0,hasPinnedChrome:S,editsPinnedInPlace:P,explainsSiteSettings:!1,hasSiteRecord:m,canEditSiteRecord:m&&!!u,hasPreviewLink:e||!!o.preview,hasCatalog:e&&i.commerce,hasForms:e&&i.service,hasBlog:!!o.blog&&i.service,offersCommerce:i.commerce,offersService:i.service},...f,...N(f.resolve),lock:o.lock,...w,site:m?()=>o.site.get(l):void 0,updateSite:m&&u?h=>u(h,l):void 0,previewHref:o.preview?h=>o.preview.href(h):void 0}}function K(s,o=j(),i=L()){const t=A(o),e=o.templates,l=e?e.pages(s):{list:()=>Promise.reject(new Error(E)),load:()=>Promise.reject(new Error(E)),save:()=>Promise.reject(new Error(E))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!l.create,canDeletePagesInline:!!l.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:t&&i.commerce&&i.service,editsPinnedInPlace:!1,explainsSiteSettings:t,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:t&&i.commerce,hasForms:t&&i.service,hasBlog:!!o.blog&&i.service,offersCommerce:i.commerce,offersService:i.service},...B(l,void 0),...N(B(l,void 0).resolve),publish:void 0,templateName:e?()=>e.get(s).then(m=>m.name):void 0}}function N(s){return{resolve:o=>(J(null),s(o))}}const E="This editor's backend has no website templates.";export{z as makeSitePageAdapter,K as makeTemplatePageAdapter};
1
+ "use client";import{SITE_FOOTER_SLUG as y}from"./content/footer.js";import{offeredSetsOf as L}from"./editor-blocks.js";import{isBackendError as g}from"./editor-backend-error.js";import{isEfficientBackend as A}from"./editor-session.js";import{noteLoaded as O,notePublished as T,noteSaved as k,pageLiveState as R}from"./page-live-state.js";import{spliceChrome as x,splitChrome as b}from"./pinned-chrome-doc.js";import{setActivePinnedChrome as J}from"./pinned-chrome-lock.js";import{backendOf as j}from"./website-session.js";function B(s,o){const i=o?{siteId:o}:void 0;return{resolve:t=>s.load({slug:t,...i}).then(e=>(e&&O(e.id,e.live),e)),saveLayout:(t,e,l,f)=>s.save(t,{layout:e},{version:l,clientId:f??""}).then(u=>(k(t,u.live),u)),rereadVersion:s.version?t=>s.version(t):void 0,publish:s.publish?(t,e)=>s.publish(t,e?{version:e}:void 0).then(l=>(T(t,l.live),l)):void 0,listPages:()=>s.list(i),createPage:s.create?t=>s.create({...t,...i}):void 0,deletePage:s.remove?(t,e)=>s.remove(t,e):void 0}}function I(s,o,i,t){let e=null;const l=new Set;let f=!1,u={docId:null,lockHolder:null,conflict:null,saveFailed:!1,unpublished:!1,loadFailed:!1};const S=new Set,P=()=>{if(!e)return!1;const n=R(e.id);return n==="changed"||n==="never"||n===void 0&&f},m=n=>{u={...u,...n,docId:e?.id??null,unpublished:P()};for(const c of S)c()},w=n=>n&&typeof n=="object"&&!Array.isArray(n)?n:{},v=n=>!!e&&l.has(n),F={state:()=>u,subscribe:n=>(S.add(n),()=>{S.delete(n)})};return{resolve:async n=>{if(J(n===y?null:F),n===y)return i.resolve(n);let c=!1;const[d,r]=await Promise.all([i.resolve(n),s.load({slug:y,...o}).catch(()=>(c=!0,null))]);if(r){O(r.id,r.live);const h=w(r.layout);e={id:r.id,layout:h,version:r.version,savedJson:""}}else e=null;if(f=!1,!d||!e)return m({conflict:null,saveFailed:!1,loadFailed:c}),d;const a=x(w(d.layout),e.layout);return e.savedJson=JSON.stringify(b(a,e.layout).chrome),l.add(d.id),m({conflict:null,saveFailed:!1,loadFailed:!1}),{...d,layout:a}},saveLayout:async(n,c,d,r)=>{if(!e||!v(n))return i.saveLayout(n,c,d,r);const a=e,h=b(c,a.layout),C=await i.saveLayout(n,h.page,d,r),H=JSON.stringify(h.chrome);if(!h.chrome||H===a.savedJson||u.lockHolder)return C;try{const p=await s.save(a.id,{layout:h.chrome},{version:a.version,clientId:r??""});k(a.id,p.live),a.layout=h.chrome,a.version=p.version,a.savedJson=H,f=!0,m({conflict:null,saveFailed:!1})}catch(p){g(p,"changed-elsewhere")?m({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):g(p,"lock-taken")?m({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):m({saveFailed:!0})}return C},publish:i.publish?async(n,c)=>{const d=await i.publish(n,c),r=e;if(r&&v(n)&&s.publish&&P()&&!u.lockHolder){const a=await s.publish(r.id,r.version?{version:r.version}:void 0);T(r.id,a.live),a.version!==null&&(r.version=a.version),f=!1,m({})}return d}:void 0,lock:t?{claim:async(n,c,d)=>{const r=await t.claim(n,c,d),a=e;if(a&&v(n))try{await t.claim(a.id,c,!1),u.lockHolder&&m({lockHolder:null})}catch(h){g(h,"lock-taken")&&m({lockHolder:h.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}return r},release:async(n,c)=>{await t.release(n,c);const d=e;d&&v(n)&&!u.lockHolder&&await t.release(d.id,c).catch(()=>{})}}:void 0,pinnedChrome:F}}function z(s,o=j(),i=L(),t={}){const e=A(o),l=s?{siteId:s}:void 0,f=e?!!s:!0,u=o.site.update,S=e&&i.commerce&&i.service,P=!!t.editsPinnedInPlace&&S,m=B(o.pages,s),w=P?I(o.pages,l,m,o.lock):null;return{capabilities:{canPublish:!!o.pages.publish,hasSiteSettings:e,hasSiteTheme:!!o.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!o.pages.create,canDeletePagesInline:!!o.pages.remove,hasEditLock:!!o.lock,hasEditGuard:!0,hasPinnedChrome:S,editsPinnedInPlace:P,explainsSiteSettings:!1,hasSiteRecord:f,canEditSiteRecord:f&&!!u,hasPreviewLink:e||!!o.preview,hasCatalog:e&&i.commerce,hasForms:e&&i.service,hasBlog:!!o.blog&&i.service,offersCommerce:i.commerce,offersService:i.service},...m,...N(m.resolve),lock:o.lock,...w,site:f?()=>o.site.get(l):void 0,updateSite:f&&u?v=>u(v,l):void 0,previewHref:o.preview?v=>o.preview.href(v):void 0}}function K(s,o=j(),i=L()){const t=A(o),e=o.templates,l=e?e.pages(s):{list:()=>Promise.reject(new Error(E)),load:()=>Promise.reject(new Error(E)),save:()=>Promise.reject(new Error(E))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!l.create,canDeletePagesInline:!!l.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:t&&i.commerce&&i.service,editsPinnedInPlace:!1,explainsSiteSettings:t,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:t&&i.commerce,hasForms:t&&i.service,hasBlog:!!o.blog&&i.service,offersCommerce:i.commerce,offersService:i.service},...B(l,void 0),...N(B(l,void 0).resolve),publish:void 0,templateName:e?()=>e.get(s).then(f=>f.name):void 0}}function N(s){return{resolve:o=>(J(null),s(o))}}const E="This editor's backend has no website templates.";export{z as makeSitePageAdapter,K as makeTemplatePageAdapter};
@@ -1029,6 +1029,7 @@ export declare const WEB_BUILDER_WORDS: {
1029
1029
  readonly "The floating chat bubble shows in the corner of every page.": "The floating chat bubble shows in the corner of every page.";
1030
1030
  readonly "The footer cannot take another one of these": "The footer cannot take another one of these";
1031
1031
  readonly "The footer holds at most 6 sections": "The footer holds at most 6 sections";
1032
+ readonly "The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.": "The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.";
1032
1033
  readonly "The header cannot take another one of these": "The header cannot take another one of these";
1033
1034
  readonly "The header holds at most 3 sections": "The header holds at most 3 sections";
1034
1035
  readonly "The only setting that changes a heading's capitals.": "The only setting that changes a heading's capitals.";
@@ -5,7 +5,7 @@ const e={"$ efficient …":"$ efficient …","0 min":"0 min","0 min read":"0 min
5
5
  *Highlight line*`,"Section heading *here.*":"Section heading *here.*","Section headline\n*Highlight line*":`Section headline
6
6
  *Highlight line*`,"Section headline *here.*\n*Highlight line*":`Section headline *here.*
7
7
  *Highlight line*`,"Section number":"Section number","Section settings":"Section settings",Sections:"Sections","Section’s own":"Section’s own","Secure encrypted checkout":"Secure encrypted checkout","Seen from\n*the counter.*":`Seen from
8
- *the counter.*`,"Select a word, then press the highlighter.":"Select a word, then press the highlighter.","Selector guide (pills + results)":"Selector guide (pills + results)","Selector pills":"Selector pills",Semibold:"Semibold",Separator:"Separator","Series title":"Series title",Serif:"Serif","Set this card's corners first.":"Set this card's corners first.","Shadow color":"Shadow color",Shape:"Shape",Shared:"Shared","Shop & galleries":"Shop & galleries","Short description of this figure.":"Short description of this figure.","Short detail line":"Short detail line","Short supporting line":"Short supporting line","Show arrows":"Show arrows","Show cover image":"Show cover image","Show hints":"Show hints","Show on a card":"Show on a card","Show slide picker":"Show slide picker","Show texture":"Show texture","Show the chat bubble":"Show the chat bubble","Show the chat bubble on the whole site":"Show the chat bubble on the whole site","Show ticker":"Show ticker","Show {label} on the slide":"Show {label} on the slide","Shown beside the heading":"Shown beside the heading","Side space":"Side space","Side-by-side image and text in two columns.":"Side-by-side image and text in two columns.",Sideways:"Sideways","Signup Form":"Signup Form",Simple:"Simple","Site settings":"Site settings","Site style":"Site style","Site styles":"Site styles","Six across":"Six across","Six stagger":"Six stagger",Size:"Size",Sizes:"Sizes","Slash /":"Slash /","Slide name":"Slide name","Slide picker":"Slide picker","Slide picker placement":"Slide picker placement","Slide picker shape":"Slide picker shape",Small:"Small","Social Logos":"Social Logos","Social link settings belong to a website.":"Social link settings belong to a website.","Social links":"Social links",Soft:"Soft",Solid:"Solid","Space above and below":"Space above and below","Space between":"Space between",Spacer:"Spacer","Spec Strip":"Spec Strip","Spec Table":"Spec Table","Spec label":"Spec label","Spec tiles":"Spec tiles","Spec value":"Spec value","Spine (single rail)":"Spine (single rail)","Split (editorial aside)":"Split (editorial aside)",Square:"Square",Stacked:"Stacked",Standard:"Standard",Start:"Start",Stat:"Stat","Stat & note":"Stat & note","Stat label":"Stat label","Stat name":"Stat name","Stat value":"Stat value",State:"State","State / Province":"State / Province",Statement:"Statement",Stats:"Stats","Stats & social proof":"Stats & social proof","Stats with Text":"Stats with Text","Status chip":"Status chip","Step *one*":"Step *one*","Step *three*":"Step *three*","Step *two*":"Step *two*","Stick under header":"Stick under header","Still time per slide":"Still time per slide","Storefront → Blog":"Storefront → Blog","Storefront ▸ Sites ▸ Settings":"Storefront ▸ Sites ▸ Settings","Story Timeline":"Story Timeline","Street address":"Street address",Stretch:"Stretch","Strip fill":"Strip fill","Strip items":"Strip items","Stripes · bold":"Stripes · bold","Stripes · fine":"Stripes · fine","Stripes · medium":"Stripes · medium",Style:"Style","Sub-title":"Sub-title","Sub-total lines":"Sub-total lines",Subtitle:"Subtitle","Subtitle font size":"Subtitle font size",Subtotal:"Subtotal","Success heading":"Success heading","Success message":"Success message",Superscript:"Superscript",Surfaces:"Surfaces","Switch now":"Switch now","Switch to Box footer":"Switch to Box footer","Synced from the blog post.":"Synced from the blog post.","Synced from the product.":"Synced from the product.","Synced from the site menu.":"Synced from the site menu.","Syncing from {place}…":"Syncing from {place}…",Tab:"Tab","Tab label":"Tab label","Tab name":"Tab name","Tabbed Gallery":"Tabbed Gallery",Tabs:"Tabs","Tall (3:4)":"Tall (3:4)","Tall first":"Tall first","Tall middle":"Tall middle","Team four":"Team four","Team one":"Team one","Team three":"Team three","Team two":"Team two",Telegram:"Telegram","Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.","Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.","Templates keep their look. Press Done.":"Templates keep their look. Press Done.",Terminal:"Terminal","Terminal (CLI session)":"Terminal (CLI session)","Terminal lines":"Terminal lines",Testimonials:"Testimonials",Text:"Text","Text & content":"Text & content","Text & media":"Text & media","Text color":"Text color","Text column":"Text column","Text height":"Text height","Text position":"Text position","Text size":"Text size","Text style":"Text style",Texts:"Texts",Texture:"Texture","Texture color":"Texture color","Texture opacity":"Texture opacity","Thanks — we'll email you to confirm.":"Thanks — we'll email you to confirm.","The built-in spacing.":"The built-in spacing.","The chat bubble is hidden across the whole site.":"The chat bubble is hidden across the whole site.","The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.":"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.","The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.":"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.","The floating chat bubble shows in the corner of every page.":"The floating chat bubble shows in the corner of every page.","The footer cannot take another one of these":"The footer cannot take another one of these","The footer holds at most 6 sections":"The footer holds at most 6 sections","The header cannot take another one of these":"The header cannot take another one of these","The header holds at most 3 sections":"The header holds at most 3 sections","The only setting that changes a heading's capitals.":"The only setting that changes a heading's capitals.","The room left at the left and right edge of every page.":"The room left at the left and right edge of every page.","The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.":"The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.","The section it belonged to has been changed or removed.":"The section it belonged to has been changed or removed.","The size a text takes when you set it to follow this style. Sections keep their own sizes.":"The size a text takes when you set it to follow this style. Sections keep their own sizes.","The standard width every page on this site renders at.":"The standard width every page on this site renders at.","The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.":"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.",Theme:"Theme","Theme {n}":"Theme {n}","Theme {n} background":"Theme {n} background","Theme {n} main color":"Theme {n} main color","Theme {n} text color":"Theme {n} text color","Third item":"Third item","This cannot be undone.":"This cannot be undone.","This card is not in a section that can share corners.":"This card is not in a section that can share corners.","This color is hard to read on this theme's page. The buttons below are the same hue, darkened.":"This color is hard to read on this theme's page. The buttons below are the same hue, darkened.","This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.":"This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.","This color reads clearly on your pages.":"This color reads clearly on your pages.","This face":"This face","This footer uses the old layout":"This footer uses the old layout","This is the only card in the section.":"This is the only card in the section.","This part is no longer here.":"This part is no longer here.","This part's settings did not open.":"This part's settings did not open.","This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.":"This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.","This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.","This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.","This text follows the site style.":"This text follows the site style.","This ticker’s hero is no longer on the page.":"This ticker’s hero is no longer on the page.","Three across":"Three across","Three ladder":"Three ladder","Three stagger":"Three stagger",Ticker:"Ticker","Ticker items":"Ticker items",Tight:"Tight",TikTok:"TikTok","Timeline entries":"Timeline entries","Timezone chip":"Timezone chip","Tint color":"Tint color","Tint opacity":"Tint opacity",Title:"Title",Tone:"Tone",Top:"Top","Top border":"Top border","Top center":"Top center","Top left":"Top left","Top right":"Top right","Top row":"Top row","Top space":"Top space",Total:"Total","Total amount":"Total amount","Total label":"Total label","Total line":"Total line","Trailing note":"Trailing note","Triangle ▼":"Triangle ▼","Trusted by *teams worldwide*":"Trusted by *teams worldwide*","Two across":"Two across","Two image galleries with tabs and filters.":"Two image galleries with tabs and filters.","Two tall":"Two tall",Type:"Type","Typed here":"Typed here","Tyre Fitment Form":"Tyre Fitment Form","Tyre Sizes":"Tyre Sizes","URL pill":"URL pill","URL: /{slug}":"URL: /{slug}",Undo:"Undo",Ungrouped:"Ungrouped",Unit:"Unit","Unit labels":"Unit labels",Up:"Up","Up and down":"Up and down",Upcoming:"Upcoming","Upload a background image":"Upload a background image","Upload a background video":"Upload a background video","Upload a poster still":"Upload a poster still","Uppercase heading":"Uppercase heading","Use {colour}":"Use {colour}",Value:"Value","Value suffix":"Value suffix","Vertical breathing room between sections.":"Vertical breathing room between sections.",Video:"Video","Video poster":"Video poster","View all":"View all","View all questions":"View all questions","View series →":"View series →",Volume:"Volume","Ways to pay":"Ways to pay",WeChat:"WeChat",Weight:"Weight","What people *say.*":"What people *say.*",WhatsApp:"WhatsApp","Whether this page sits on the site's content column, or runs edge to edge.":"Whether this page sits on the site's content column, or runs edge to edge.","Whole number Theme Color":"Whole number Theme Color","Wide (2:1)":"Wide (2:1)","Wide promo strip with background image.":"Wide promo strip with background image.",Width:"Width","With us":"With us",Wording:"Wording",Wrap:"Wrap","Write the answer here.":"Write the answer here.","Write the opening paragraph here.\n\n- Start a line with a dash for a bullet.\n- Add as many as you like.":`Write the opening paragraph here.
8
+ *the counter.*`,"Select a word, then press the highlighter.":"Select a word, then press the highlighter.","Selector guide (pills + results)":"Selector guide (pills + results)","Selector pills":"Selector pills",Semibold:"Semibold",Separator:"Separator","Series title":"Series title",Serif:"Serif","Set this card's corners first.":"Set this card's corners first.","Shadow color":"Shadow color",Shape:"Shape",Shared:"Shared","Shop & galleries":"Shop & galleries","Short description of this figure.":"Short description of this figure.","Short detail line":"Short detail line","Short supporting line":"Short supporting line","Show arrows":"Show arrows","Show cover image":"Show cover image","Show hints":"Show hints","Show on a card":"Show on a card","Show slide picker":"Show slide picker","Show texture":"Show texture","Show the chat bubble":"Show the chat bubble","Show the chat bubble on the whole site":"Show the chat bubble on the whole site","Show ticker":"Show ticker","Show {label} on the slide":"Show {label} on the slide","Shown beside the heading":"Shown beside the heading","Side space":"Side space","Side-by-side image and text in two columns.":"Side-by-side image and text in two columns.",Sideways:"Sideways","Signup Form":"Signup Form",Simple:"Simple","Site settings":"Site settings","Site style":"Site style","Site styles":"Site styles","Six across":"Six across","Six stagger":"Six stagger",Size:"Size",Sizes:"Sizes","Slash /":"Slash /","Slide name":"Slide name","Slide picker":"Slide picker","Slide picker placement":"Slide picker placement","Slide picker shape":"Slide picker shape",Small:"Small","Social Logos":"Social Logos","Social link settings belong to a website.":"Social link settings belong to a website.","Social links":"Social links",Soft:"Soft",Solid:"Solid","Space above and below":"Space above and below","Space between":"Space between",Spacer:"Spacer","Spec Strip":"Spec Strip","Spec Table":"Spec Table","Spec label":"Spec label","Spec tiles":"Spec tiles","Spec value":"Spec value","Spine (single rail)":"Spine (single rail)","Split (editorial aside)":"Split (editorial aside)",Square:"Square",Stacked:"Stacked",Standard:"Standard",Start:"Start",Stat:"Stat","Stat & note":"Stat & note","Stat label":"Stat label","Stat name":"Stat name","Stat value":"Stat value",State:"State","State / Province":"State / Province",Statement:"Statement",Stats:"Stats","Stats & social proof":"Stats & social proof","Stats with Text":"Stats with Text","Status chip":"Status chip","Step *one*":"Step *one*","Step *three*":"Step *three*","Step *two*":"Step *two*","Stick under header":"Stick under header","Still time per slide":"Still time per slide","Storefront → Blog":"Storefront → Blog","Storefront ▸ Sites ▸ Settings":"Storefront ▸ Sites ▸ Settings","Story Timeline":"Story Timeline","Street address":"Street address",Stretch:"Stretch","Strip fill":"Strip fill","Strip items":"Strip items","Stripes · bold":"Stripes · bold","Stripes · fine":"Stripes · fine","Stripes · medium":"Stripes · medium",Style:"Style","Sub-title":"Sub-title","Sub-total lines":"Sub-total lines",Subtitle:"Subtitle","Subtitle font size":"Subtitle font size",Subtotal:"Subtotal","Success heading":"Success heading","Success message":"Success message",Superscript:"Superscript",Surfaces:"Surfaces","Switch now":"Switch now","Switch to Box footer":"Switch to Box footer","Synced from the blog post.":"Synced from the blog post.","Synced from the product.":"Synced from the product.","Synced from the site menu.":"Synced from the site menu.","Syncing from {place}…":"Syncing from {place}…",Tab:"Tab","Tab label":"Tab label","Tab name":"Tab name","Tabbed Gallery":"Tabbed Gallery",Tabs:"Tabs","Tall (3:4)":"Tall (3:4)","Tall first":"Tall first","Tall middle":"Tall middle","Team four":"Team four","Team one":"Team one","Team three":"Team three","Team two":"Team two",Telegram:"Telegram","Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.","Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.","Templates keep their look. Press Done.":"Templates keep their look. Press Done.",Terminal:"Terminal","Terminal (CLI session)":"Terminal (CLI session)","Terminal lines":"Terminal lines",Testimonials:"Testimonials",Text:"Text","Text & content":"Text & content","Text & media":"Text & media","Text color":"Text color","Text column":"Text column","Text height":"Text height","Text position":"Text position","Text size":"Text size","Text style":"Text style",Texts:"Texts",Texture:"Texture","Texture color":"Texture color","Texture opacity":"Texture opacity","Thanks — we'll email you to confirm.":"Thanks — we'll email you to confirm.","The built-in spacing.":"The built-in spacing.","The chat bubble is hidden across the whole site.":"The chat bubble is hidden across the whole site.","The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.":"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.","The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.":"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.","The floating chat bubble shows in the corner of every page.":"The floating chat bubble shows in the corner of every page.","The footer cannot take another one of these":"The footer cannot take another one of these","The footer holds at most 6 sections":"The footer holds at most 6 sections","The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.":"The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.","The header cannot take another one of these":"The header cannot take another one of these","The header holds at most 3 sections":"The header holds at most 3 sections","The only setting that changes a heading's capitals.":"The only setting that changes a heading's capitals.","The room left at the left and right edge of every page.":"The room left at the left and right edge of every page.","The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.":"The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.","The section it belonged to has been changed or removed.":"The section it belonged to has been changed or removed.","The size a text takes when you set it to follow this style. Sections keep their own sizes.":"The size a text takes when you set it to follow this style. Sections keep their own sizes.","The standard width every page on this site renders at.":"The standard width every page on this site renders at.","The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.":"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.",Theme:"Theme","Theme {n}":"Theme {n}","Theme {n} background":"Theme {n} background","Theme {n} main color":"Theme {n} main color","Theme {n} text color":"Theme {n} text color","Third item":"Third item","This cannot be undone.":"This cannot be undone.","This card is not in a section that can share corners.":"This card is not in a section that can share corners.","This color is hard to read on this theme's page. The buttons below are the same hue, darkened.":"This color is hard to read on this theme's page. The buttons below are the same hue, darkened.","This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.":"This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.","This color reads clearly on your pages.":"This color reads clearly on your pages.","This face":"This face","This footer uses the old layout":"This footer uses the old layout","This is the only card in the section.":"This is the only card in the section.","This part is no longer here.":"This part is no longer here.","This part's settings did not open.":"This part's settings did not open.","This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.":"This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.","This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.","This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.","This text follows the site style.":"This text follows the site style.","This ticker’s hero is no longer on the page.":"This ticker’s hero is no longer on the page.","Three across":"Three across","Three ladder":"Three ladder","Three stagger":"Three stagger",Ticker:"Ticker","Ticker items":"Ticker items",Tight:"Tight",TikTok:"TikTok","Timeline entries":"Timeline entries","Timezone chip":"Timezone chip","Tint color":"Tint color","Tint opacity":"Tint opacity",Title:"Title",Tone:"Tone",Top:"Top","Top border":"Top border","Top center":"Top center","Top left":"Top left","Top right":"Top right","Top row":"Top row","Top space":"Top space",Total:"Total","Total amount":"Total amount","Total label":"Total label","Total line":"Total line","Trailing note":"Trailing note","Triangle ▼":"Triangle ▼","Trusted by *teams worldwide*":"Trusted by *teams worldwide*","Two across":"Two across","Two image galleries with tabs and filters.":"Two image galleries with tabs and filters.","Two tall":"Two tall",Type:"Type","Typed here":"Typed here","Tyre Fitment Form":"Tyre Fitment Form","Tyre Sizes":"Tyre Sizes","URL pill":"URL pill","URL: /{slug}":"URL: /{slug}",Undo:"Undo",Ungrouped:"Ungrouped",Unit:"Unit","Unit labels":"Unit labels",Up:"Up","Up and down":"Up and down",Upcoming:"Upcoming","Upload a background image":"Upload a background image","Upload a background video":"Upload a background video","Upload a poster still":"Upload a poster still","Uppercase heading":"Uppercase heading","Use {colour}":"Use {colour}",Value:"Value","Value suffix":"Value suffix","Vertical breathing room between sections.":"Vertical breathing room between sections.",Video:"Video","Video poster":"Video poster","View all":"View all","View all questions":"View all questions","View series →":"View series →",Volume:"Volume","Ways to pay":"Ways to pay",WeChat:"WeChat",Weight:"Weight","What people *say.*":"What people *say.*",WhatsApp:"WhatsApp","Whether this page sits on the site's content column, or runs edge to edge.":"Whether this page sits on the site's content column, or runs edge to edge.","Whole number Theme Color":"Whole number Theme Color","Wide (2:1)":"Wide (2:1)","Wide promo strip with background image.":"Wide promo strip with background image.",Width:"Width","With us":"With us",Wording:"Wording",Wrap:"Wrap","Write the answer here.":"Write the answer here.","Write the opening paragraph here.\n\n- Start a line with a dash for a bullet.\n- Add as many as you like.":`Write the opening paragraph here.
9
9
 
10
10
  - Start a line with a dash for a bullet.
11
11
  - Add as many as you like.`,X:"X","X-Large":"X-Large",Year:"Year","Year →":"Year →",Years:"Years",YouTube:"YouTube","Your *first* section.":"Your *first* section.","Your *second* section.":"Your *second* section.","Your fifth question goes here?":"Your fifth question goes here?","Your first question goes here?":"Your first question goes here?","Your fourth question goes here?":"Your fourth question goes here?","Your locations as a city gallery plus address and map cards.":"Your locations as a city gallery plus address and map cards.","Your review":"Your review","Your second question goes here?":"Your second question goes here?","Your third question goes here?":"Your third question goes here?",Zigzag:"Zigzag",accent:"accent","all theme colors":"all theme colors",body:"body","body text":"body text",button:"button",card:"card",city:"city",draft:"draft","e.g. About":"e.g. About","e.g. Americas":"e.g. Americas","e.g. about":"e.g. about","e.g. {example}":"e.g. {example}","each block's own spacing":"each block's own spacing",entries:"entries",group:"group",heading:"heading",headingLarge:"headingLarge",headingMedium:"headingMedium",headingSmall:"headingSmall","images only":"images only",item:"item",label:"label",manifesto:"manifesto","not set":"not set","not shown live":"not shown live",px:"px","the Text style in Site styles":"the Text style in Site styles","the admin":"the admin","the built-in corners":"the built-in corners","the page":"the page","the section":"the section","the theme's image stage":"the theme's image stage","the theme's section background":"the theme's section background","this container's own spacing":"this container's own spacing","videos only":"videos only","{face} is loaded without an italic, so it cannot be set in italic. Slanting it would deform the letters rather than style them.":"{face} is loaded without an italic, so it cannot be set in italic. Slanting it would deform the letters rather than style them.","{grade} on the button":"{grade} on the button","{kind} · every row":"{kind} · every row","{label} hex code":"{label} hex code","{label} {n}":"{label} {n}","{label} — row {n}":"{label} — row {n}","{letter} · Step":"{letter} · Step","{name} (unavailable)":"{name} (unavailable)","{name} is on this section":"{name} is on this section","{name} — renamed in the Console: {place}.":"{name} — renamed in the Console: {place}.","{n} changed":"{n} changed","{n} cities":"{n} cities","{n} city":"{n} city","{n} of {total} layouts":"{n} of {total} layouts","{n} selected":"{n} selected","{value} from {from}":"{value} from {from}","{value} on desktop":"{value} on desktop","{what} settings belong to a website.":"{what} settings belong to a website.","— Articles in total":"— Articles in total","— Label":"— Label","— Name, Year":"— Name, Year"};export{e as WEB_BUILDER_WORDS};
@@ -1 +1 @@
1
- "use client";import{Fragment as g,jsx as p}from"react/jsx-runtime";import{useMemo as S,useRef as d}from"react";import{EaselCanvas as I,useEaselApi as P}from"efficient-easel/easel";import C from"../../components/PreviewThemeFrame.js";import{usePreviewParts as y}from"../../components/PreviewPartsContext.js";import{partElement as T,partTypingTarget as w,setCanvasTypingPart as v}from"./canvas-typing.js";import{partOpenOn as F,PART_ATTR as c}from"./text-parts.js";import{useSectionOps as h}from"./use-section-ops.js";import{useBlockMetadata as A}from"../editor-block-metadata.js";import{useEditorCanvasStyles as D}from"../editor-canvas-styles.js";function E({children:n,componentId:o}){const{selectedPartId:s}=y();return F(s,o)?p(g,{}):p(g,{children:n})}function W(n){const{mirrorHostStyles:o}=D(),s=A(),l=d(null),a=O(l),{onDocument:i}=n;return p(I,{...n,onDocument:t=>{l.current=t,i?.(t)},typing:a,metadata:n.metadata??s,height:"fill",mirrorStyles:o,frameWrapper:C,overlay:E})}function O(n){const o=P(),s=h(),l=y(),a=d({ops:s,parts:l});return a.current={ops:s,parts:l},S(()=>{const i={getItemById:t=>o.getState().getItemById(t),getSelectorForId:t=>o.getState().getSelectorForId(t),get components(){return o.getState().config.components},replace:(t,e,r)=>a.current.ops.replaceComponent(t,e,r)},m=(t,e)=>{const r=w(t,i);if(!r)return null;let u=e;const f=()=>(u=T(u,u?.ownerDocument??n.current,t),u);return f()?{element:f,value:r.value,rules:r.rules,multiline:r.multiline,write:r.write,toolbar:{offered:r.offered}}:null};return{at:t=>{const e=t.closest(`[${c}]`),r=e?.getAttribute(c);return e&&r?m(r,e):null},atSelection:()=>{const t=a.current.parts.selectedPartId;return t?m(t,null):null},onChange:t=>{if(!t.typing){v(null);return}const e=t.element.closest(`[${c}]`)?.getAttribute(c)??null;v(e),e&&a.current.parts.selectedPartId!==e&&a.current.parts.select(e)}}},[o,n])}export{W as SiteCanvas};
1
+ "use client";import{Fragment as f,jsx as u,jsxs as S}from"react/jsx-runtime";import{useMemo as I,useRef as g}from"react";import{EaselCanvas as C,useEaselApi as P}from"efficient-easel/easel";import h from"../../components/PreviewThemeFrame.js";import{OpenDocumentChromeLoadNotice as T}from"../../components/PinnedChromeLoadNotice.js";import{usePreviewParts as y}from"../../components/PreviewPartsContext.js";import{partElement as w,partTypingTarget as A,setCanvasTypingPart as v}from"./canvas-typing.js";import{partOpenOn as F,PART_ATTR as m}from"./text-parts.js";import{useSectionOps as x}from"./use-section-ops.js";import{useBlockMetadata as D}from"../editor-block-metadata.js";import{useEditorCanvasStyles as O}from"../editor-canvas-styles.js";function j({children:n,componentId:o}){const{selectedPartId:a}=y();return F(a,o)?u(f,{}):u(f,{children:n})}function q(n){const{mirrorHostStyles:o}=O(),a=D(),l=g(null),s=E(l),{onDocument:p}=n,c=t=>{l.current=t,p?.(t)};return S(f,{children:[u(T,{}),u(C,{...n,onDocument:c,typing:s,metadata:n.metadata??a,height:"fill",mirrorStyles:o,frameWrapper:h,overlay:j})]})}function E(n){const o=P(),a=x(),l=y(),s=g({ops:a,parts:l});return s.current={ops:a,parts:l},I(()=>{const p={getItemById:t=>o.getState().getItemById(t),getSelectorForId:t=>o.getState().getSelectorForId(t),get components(){return o.getState().config.components},replace:(t,e,r)=>s.current.ops.replaceComponent(t,e,r)},c=(t,e)=>{const r=A(t,p);if(!r)return null;let i=e;const d=()=>(i=w(i,i?.ownerDocument??n.current,t),i);return d()?{element:d,value:r.value,rules:r.rules,multiline:r.multiline,write:r.write,toolbar:{offered:r.offered}}:null};return{at:t=>{const e=t.closest(`[${m}]`),r=e?.getAttribute(m);return e&&r?c(r,e):null},atSelection:()=>{const t=s.current.parts.selectedPartId;return t?c(t,null):null},onChange:t=>{if(!t.typing){v(null);return}const e=t.element.closest(`[${m}]`)?.getAttribute(m)??null;v(e),e&&s.current.parts.selectedPartId!==e&&s.current.parts.select(e)}}},[o,n])}export{q as SiteCanvas};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-web-builder",
3
- "version": "16.0.0",
3
+ "version": "16.0.2",
4
4
  "description": "The EFFICIENT website builder: the website editor, the general sections and the renderer that draws them, compiled. Hostable by any EFFICIENT product; nothing here imports a host.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Efficient Pty Ltd",