efficient-web-builder 15.1.0 → 16.0.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## 16.0.0 - 2026-10-15
4
+
5
+ **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`.
6
+
7
+ ### Changed for merchants
8
+
9
+ - **A site page opens with its header and footer in it.** The site-footer document's header group, and its footer group or old Footer, stand at the top and the bottom of every page's Layers and canvas, edited where they are. One Undo covers the page and them. A save writes the page, and the site-footer document only when the header or footer changed (15.1.0's adapter, now on).
10
+ - **The bands say they are on every page**: a tab "Header · on every page" / "Footer · on every page" (with "· old style" on a site's old header and old Footer), the Layers badge "Every page", and once per editing session the notice "Changed on every page" with Undo (efficient-easel 8.2.0 draws them; this layer hands the words, through `say()` and the words catalogue). The page's own sections fold under one row.
11
+ - **No more footer focus.** Clicking the footer no longer opens the site-footer page; a direct link to `site-footer` opens Home.
12
+ - **While somebody else holds the site-footer document**, the header and footer are locked (`blockRules.isLockedBlock`) and never written; the page stays editable.
13
+ - **"Switch to Box footer"** is the shell's info Banner at the top of the old Footer's panel.
14
+ - **A site with no footer** gets the Box footer, written into the site-footer document by the page's first save.
15
+ - A website TEMPLATE is unchanged: it keeps its own per-page header and footer, and gets none of the words above.
16
+
17
+ ### Changed for hosts
18
+
19
+ - **BREAKING: `efficient-easel` peer and dev `^8.3.0`** (`ScreenPinnedNodes.groupTab`, `groupBadge`, `changeNotice`, `groupAccepts`).
20
+ - **BREAKING: removed** `components/PreviewFocusContext` (`PreviewFocusProvider`, `usePreviewFocus`), `components/useFooterFocus` and `lib/puck/footer-return`. A host's site-footer render that drew the origin page above the footer (storefront-blocks `config.tsx`) drops it.
21
+ - `PreviewFooterProvider` is mounted without `editFooter`; the context member stays optional and is never set.
22
+ - `panels.chromePage` is still a session member, and is no longer drawn (the site-footer page is never opened). It goes in a later major.
23
+ - The website hands the screen none of the focus seams (`pinnedSource`, `holdCanvasOn`, `editPinnedSource`).
24
+ - New modules: `lib/pinned-chrome-lock` (`pinnedChromeHeldElsewhere`, `pinnedChromeInPlace`), `lib/puck/every-page`, `lib/puck/pinned-in-place-seed`; `lib/puck/locked-blocks` gains `websiteIsLockedBlock`.
25
+
26
+ ### Added
27
+
28
+ - **The header and footer have limits, enforced** (`GROUP_SECTION_RULES` and `groupAccepts(groupType, sectionType, countNow)`, `lib/puck/section-groups`, handed as `ScreenPinnedNodes.groupAccepts` on in-place pages; efficient-easel 8.3.0 asks it for every add, drop and paste into a group): GG's ruling 2026-10-15: the header takes up to 3 of Box (`Flex`) and the announcement bar (`Ticker`); the footer up to 6 of Box, Editorial Text (`Prose`), Logos and Divider (its menus, email form, social links and legal line are blocks inside a Box). Every other section is refused.
29
+ - **Duplicate keeps the limits**: the website's `blockRules.duplicateBlocked` (`websiteDuplicateBlocked`, lib/puck/every-page) refuses a copy of a section in a full header or footer, or of a kind the group does not take ("The footer holds at most 6 sections"). The screen asks `groupAccepts` for an add, a drop and a paste; a Duplicate comes through this rule.
30
+ - **"Switch to Box footer"** has the title "This footer uses the old layout", the same shape as the Box header switch.
31
+
32
+ ### Guards
33
+
34
+ - New `test-pinned-in-place`: a site page edits in place, a template and an embedder's page do not; the working data holds the groups first and last and a footer edit saves to the site-footer document; a `site-footer` link opens Home; the pinned nodes lock while the document is held elsewhere; the seed keeps the site's own footer, drops a dead per-page Footer and seeds the Box footer.
35
+ - New `test-footer-focus-gone`: the three files are gone, nothing imports or names them, nothing navigates to `SITE_FOOTER_SLUG`, no focus seam is handed.
36
+ - New `test-every-page-words`: the tab, badge and notice words, all in the catalogue, and handed — with `groupAccepts` — on an in-place page only.
37
+ - New `test-group-section-rules`: the header's and the footer's limits, every other section type refused one by one, and the lists exactly GG's ruling.
38
+ - `test-editor-add-panel` §6: the editor's container edges are 240 (easel 8.2.0's Layers badge) and 284.
39
+ - `test-publish-main-action`: easel peer `^8.3.0`.
40
+
3
41
  ## 15.1.0 - 2026-10-15
4
42
 
5
43
  **The site-footer document beside every page, behind a switch that is off** (card [DESIGN] Edit The Header And Footer On The Page, plan 2026-10-15 PR 2; design approved by Lewis 2026-10-15: https://claude.ai/artifact/53ddJmXavpdDspYJrqVf6q). A minor: nothing a merchant sees changes. The screen turns it on in the next release (PR 3).
@@ -1 +1 @@
1
- "use client";import{jsx as n,jsxs as d,Fragment as v}from"react/jsx-runtime";import{useState as ue}from"react";import{useEasel as he}from"efficient-easel/easel";import{InspectorHead as Se,InspectorIconButton as B}from"efficient-easel/chrome";import{DuplicateIcon as we,TrashIcon as be}from"efficient-easel/icons";import{panelFieldsOf as ge}from"../lib/puck/panel-fields.js";import{TICKER_PART_LABEL as z}from"./PreviewTickerContext.js";import ke from"./SectionIcon.js";import{PanelHideButton as K}from"./SidePanelHead.js";import{useEditorSession as ve}from"../lib/editor-session-context.js";import{say as i}from"../lib/editor-words.js";import Pe,{HintsToggle as ye,SHOW_HINTS_DEFAULT as Ee}from"./WebsiteSettingsPanel.js";import Ie from"./ChatSettingsPanel.js";import Le from"./SocialLinksPanel.js";import Ne from"./TickerSettingsPanel.js";import Oe,{PartSourceNote as Te,partStyleName as He}from"./PartSettingsPanel.js";import _e from"./DuplicateToPageMenu.js";import{useStorefrontDocument as Ce}from"./StorefrontDocumentContext.js";import{usePreviewHeader as Re}from"./PreviewHeaderContext.js";import{usePartStyle as Ae}from"./PreviewPartStyleContext.js";import{useSectionOps as De}from"../lib/puck/use-section-ops.js";import{SELECTION_MODE as Fe}from"../lib/editor-screen.js";import{usePreviewParts as xe}from"./PreviewPartsContext.js";import{entryPartsOf as Be,SectionTextEntries as ze}from"./SectionTextEntries.js";import{SectionTextSuppressProvider as Ke}from"../lib/puck/section-text-suppress.js";import{HEADER_TYPE as Me,ROOT_ZONE as M}from"../lib/puck/content-tree.js";import{duplicateBlocked as We}from"../lib/hero-group-placement.js";import{FOOTER_TYPE as P}from"../lib/puck/footer-blocks.js";import je from"./SwitchToBoxFooter.js";import{SiteFields as W}from"./SiteFields.js";import{SITE_FOOTER_SLUG as Ue}from"../lib/content/footer.js";import{SettingsSwitch as Ye}from"efficient-easel/panel";import{foldTopTier as Ge}from"../lib/puck/field-groups.js";import{FoldHeadingScope as Ze}from"../lib/puck/panel-heading-scope.js";import{partRowField as $e}from"../lib/puck/part-row-field.js";import{decodePartKey as qe,partRowHeadLabel as Je}from"../lib/puck/part-rows.js";import{encodePartId as j,partHeadLabel as Qe,partLabel as Ve,sectionTextParts as Xe}from"../lib/puck/text-parts.js";import{partSourceOf as et,sourceSlugOf as tt}from"../lib/puck/source-bound-parts.js";const Zt=Fe,$t={kind:"header"},qt={kind:"website"},Jt={kind:"chat"},Qt={kind:"social"},g="Part";function U(e){return i("Part of {name}",{name:i(e)})}function nt(e,o,r){const c=e.describeNode(o);return{name:r,kindLabel:c?U(c.label):i(g)}}function ot(e){switch(e){case"Header":return{title:i("Header settings belong to a website."),own:i("Each website created from this template sets its own header afterwards.")};case"Appearance":return{title:i("Appearance settings belong to a website."),own:i("Each website created from this template sets its own appearance afterwards.")};case"Live chat":return{title:i("Live chat settings belong to a website."),own:i("Each website created from this template sets its own live chat afterwards.")};case"Social link":return{title:i("Social link settings belong to a website."),own:i("Each website created from this template sets its own social link afterwards.")};default:return{title:i("{what} settings belong to a website.",{what:e}),own:i("Each website created from this template sets its own {what} afterwards.",{what:e.toLowerCase()})}}}function Y({what:e}){const o=ot(e);return d("div",{className:"sf-note",children:[n("p",{children:n("strong",{children:o.title})}),d("p",{children:[i("A template is a blueprint — it has no website of its own, so there is nothing here to change.")," ",o.own]})]})}const it={header:{name:"Header",kindLabel:"Site settings",icon:"header",render:(e,o)=>{const r=o.hostPanels?.header;return r?n(r,{placeholderMode:o.capabilities.placeholderFrames,tokenRef:o.tokenRef,siteId:o.siteId,websiteName:o.websiteName,onOpenWebsiteSettings:o.onOpenWebsiteSettings,onAuthExpired:()=>o.notifyParent("storefront-editor:auth-expired")}):null}},website:{name:"Appearance",kindLabel:"Site settings",icon:"website",render:(e,o)=>n(Pe,{themeFromDocument:!o.capabilities.hasSiteTheme,tokenRef:o.tokenRef,siteId:o.siteId,onNotify:o.onNotify})},chat:{name:"Live chat",kindLabel:"Site settings",icon:"chat",render:()=>n(Ie,{})},social:{name:"Social links",kindLabel:"Site settings",icon:"social",render:()=>n(Le,{unavailable:n(Y,{what:"Social link"})})},ticker:{name:z,kindLabel:g,icon:"ticker",head:(e,o)=>e.kind==="ticker"?nt(o,e.heroId,i(z)):null,render:e=>n(Ne,{heroId:e.kind==="ticker"?e.heroId:""})},part:{name:g,kindLabel:g,icon:"Text",head:(e,o)=>{if(e.kind!=="part")return null;const r=o.describeNode(e.nodeId);if(!r)return null;const{key:c,row:h}=qe(e.propKey),w=h?$e(r.fields[c],h):r.fields[c],u=Je(i(Qe(Ve(w??{},c))),h),p=o.styleNameOfPart(e.nodeId,e.propKey);return{name:p!==null?i(p):u,kindLabel:U(r.label)}},render:(e,o)=>e.kind==="part"?n(Oe,{nodeId:e.nodeId,propKey:e.propKey,onBack:()=>o.onSelectNode(e.nodeId),onEditStyle:o.onOpenSiteStyles}):null}},rt=new Set(["header","website","chat"]);function st(e,o){if(e==="puck")return null;const r=it[e];return rt.has(e)&&!o.hasSiteSettings?{...r,kindLabel:"Not part of a template",render:()=>n(Y,{what:r.name})}:r}function at({mode:e,onOpenWebsiteSettings:o,onOpenSiteStyles:r,onSelectNode:c,hideNodeActions:h=!1,onNotify:w,onHidePanel:u}){const{capabilities:p,tokenRef:y,notifyParent:G,currentSlug:E,siteId:I,runAuthed:Z,readOnly:$}=Ce(),{websiteName:q,fonts:J}=Re(),{partStyle:L}=Ae(),b=De({readOnly:$}),{select:Q}=xe(),{selectedItem:t,getItemById:N,getSelectorForId:V,config:m,appState:X}=he(l=>l),ee=ge(m,t?{type:t.type,props:t.props}:null),O=t?Xe(ee??m.components[t.type]?.fields,t.props):[],te=l=>m.components[l]?.label??l,s=t?V(t.props.id):void 0,a=st(e.kind,p),T=ve(),H=T.chrome?.panels?.chromePage,_={capabilities:p,tokenRef:y,hostPanels:T.chrome?.panels,describeNode:l=>{const f=N(l);if(!f)return null;const S=m.components[f.type];return{type:f.type,label:S?.label??f.type,fields:S?.fields??{}}},styleNameOfPart:(l,f)=>{const S=N(l);if(!S)return null;const me=j(l,f),fe=L?.partId===me?L:null;return He(S.props,f,fe,J)},siteId:I,websiteName:q??null,notifyParent:G,onNotify:w,onOpenWebsiteSettings:o,onOpenSiteStyles:r,onSelectNode:c},C=a?.head?.(e,_)??null,ne=C?.name??(a?i(a.name):t?i(te(t.type)):i("Page settings")),oe=C?.kindLabel??(a?i(a.kindLabel):t?s&&s.zone!==M?i("Block"):i("Section"):i("Page")),ie=a?a.icon:t?t.type:"page",R=a?null:t?m.components[t.type]?.fields??null:m.root?.fields??null,re=R?Ge(R):2,A=e.kind==="puck"&&t?et(t.type):null,se=!!t&&!!s&&s.zone===M&&t.type!==P&&t.type!==Me,k=We(X?.data,t),ae=()=>{k||s&&b.duplicateComponent(s.zone,s.index)},le=()=>{s&&(b.removeComponent(s.zone,s.index),b.select(null))},ce=t?m.components[t.type]?.defaultProps?.previewHover:void 0,D=e.kind==="puck"&&!!t&&!!s&&ce!==void 0,F=D&&t.props.previewHover===!0,pe=()=>{!t||!s||b.replaceComponent(s.zone,s.index,{...t,props:{...t.props,previewHover:!F}})},[x,de]=ue(Ee);return d("div",{className:`es-sidepanel es-sidepanel--right sf-panel sf-panel--right${x||!(!a&&!!t)?"":" sf-hints-folded"}`,children:[n(Se,{icon:n(ke,{type:ie,size:15}),name:ne,kind:oe,actions:!h&&e.kind==="puck"&&t&&t.type!==P?d(v,{children:[n(B,{label:i("Duplicate section"),title:k??void 0,disabled:k!==null,onClick:ae,children:n(we,{size:15})}),se&&p.hasSiteSettings&&n(_e,{node:t,currentSlug:E,siteId:I??void 0,tokenRef:y,runAuthed:Z,onNotify:w}),n(B,{label:i("Remove section"),danger:!0,onClick:le,children:n(be,{size:15})}),u?n(K,{side:"right",onHide:u,divider:!0}):null]}):u?n(K,{side:"right",onHide:u}):void 0}),D&&d("div",{className:"sf-preview-pin",children:[d("div",{className:"sf-preview-pin-text",children:[n("span",{className:"sf-preview-pin-label",children:i("Preview hover state")}),n("span",{className:"sf-preview-pin-hint",children:i("not shown live")})]}),n(Ye,{checked:F,onChange:pe,ariaLabel:i("Preview hover state")})]}),n(Ze,{tier:re,children:n("div",{className:"sf-insp-body sf-scroll",children:a?a.render(e,_):t?d(v,{children:[n(Ke,{children:n(W,{entries:n(ze,{parts:O,heading:!1,onOpen:l=>Q(j(t.props.id,l))}),entryCount:Be(O).length})}),t.type===P&&p.hasSiteSettings&&n(je,{}),A&&n(Te,{source:A,slug:tt(t?.props)}),n(ye,{shown:x,onChange:de})]}):d(v,{children:[n(W,{}),E===Ue&&p.hasSiteSettings&&H&&n(H,{})]})})})]})}export{Jt as CHAT_MODE,$t as HEADER_MODE,Zt as PUCK_MODE,Qt as SOCIAL_MODE,qt as WEBSITE_MODE,at as default,st as resolvePanel};
1
+ "use client";import{jsx as n,jsxs as f,Fragment as v}from"react/jsx-runtime";import{useState as fe}from"react";import{useEasel as ue}from"efficient-easel/easel";import{InspectorHead as he,InspectorIconButton as R}from"efficient-easel/chrome";import{DuplicateIcon as Se,TrashIcon as we}from"efficient-easel/icons";import{panelFieldsOf as be}from"../lib/puck/panel-fields.js";import{TICKER_PART_LABEL as F}from"./PreviewTickerContext.js";import ge from"./SectionIcon.js";import{PanelHideButton as x}from"./SidePanelHead.js";import{useEditorSession as ke}from"../lib/editor-session-context.js";import{say as i}from"../lib/editor-words.js";import ve,{HintsToggle as Pe,SHOW_HINTS_DEFAULT as ye}from"./WebsiteSettingsPanel.js";import Ee from"./ChatSettingsPanel.js";import Ie from"./SocialLinksPanel.js";import Ne from"./TickerSettingsPanel.js";import Le,{PartSourceNote as Oe,partStyleName as Te}from"./PartSettingsPanel.js";import He from"./DuplicateToPageMenu.js";import{useStorefrontDocument as _e}from"./StorefrontDocumentContext.js";import{usePreviewHeader as De}from"./PreviewHeaderContext.js";import{usePartStyle as Ae}from"./PreviewPartStyleContext.js";import{useSectionOps as Ce}from"../lib/puck/use-section-ops.js";import{SELECTION_MODE as Re}from"../lib/editor-screen.js";import{usePreviewParts as Fe}from"./PreviewPartsContext.js";import{entryPartsOf as xe,SectionTextEntries as Be}from"./SectionTextEntries.js";import{SectionTextSuppressProvider as ze}from"../lib/puck/section-text-suppress.js";import{HEADER_TYPE as Ke,ROOT_ZONE as B}from"../lib/puck/content-tree.js";import{websiteDuplicateBlocked as Me}from"../lib/puck/every-page.js";import{FOOTER_TYPE as P}from"../lib/puck/footer-blocks.js";import We from"./SwitchToBoxFooter.js";import{SiteFields as z}from"./SiteFields.js";import{SettingsSwitch as je}from"efficient-easel/panel";import{foldTopTier as Ue}from"../lib/puck/field-groups.js";import{FoldHeadingScope as Ye}from"../lib/puck/panel-heading-scope.js";import{partRowField as Ze}from"../lib/puck/part-row-field.js";import{decodePartKey as $e,partRowHeadLabel as qe}from"../lib/puck/part-rows.js";import{encodePartId as K,partHeadLabel as Ge,partLabel as Je,sectionTextParts as Qe}from"../lib/puck/text-parts.js";import{partSourceOf as Ve,sourceSlugOf as Xe}from"../lib/puck/source-bound-parts.js";const Ut=Re,Yt={kind:"header"},Zt={kind:"website"},$t={kind:"chat"},qt={kind:"social"},g="Part";function M(e){return i("Part of {name}",{name:i(e)})}function et(e,o,r){const c=e.describeNode(o);return{name:r,kindLabel:c?M(c.label):i(g)}}function tt(e){switch(e){case"Header":return{title:i("Header settings belong to a website."),own:i("Each website created from this template sets its own header afterwards.")};case"Appearance":return{title:i("Appearance settings belong to a website."),own:i("Each website created from this template sets its own appearance afterwards.")};case"Live chat":return{title:i("Live chat settings belong to a website."),own:i("Each website created from this template sets its own live chat afterwards.")};case"Social link":return{title:i("Social link settings belong to a website."),own:i("Each website created from this template sets its own social link afterwards.")};default:return{title:i("{what} settings belong to a website.",{what:e}),own:i("Each website created from this template sets its own {what} afterwards.",{what:e.toLowerCase()})}}}function W({what:e}){const o=tt(e);return f("div",{className:"sf-note",children:[n("p",{children:n("strong",{children:o.title})}),f("p",{children:[i("A template is a blueprint — it has no website of its own, so there is nothing here to change.")," ",o.own]})]})}const nt={header:{name:"Header",kindLabel:"Site settings",icon:"header",render:(e,o)=>{const r=o.hostPanels?.header;return r?n(r,{placeholderMode:o.capabilities.placeholderFrames,tokenRef:o.tokenRef,siteId:o.siteId,websiteName:o.websiteName,onOpenWebsiteSettings:o.onOpenWebsiteSettings,onAuthExpired:()=>o.notifyParent("storefront-editor:auth-expired")}):null}},website:{name:"Appearance",kindLabel:"Site settings",icon:"website",render:(e,o)=>n(ve,{themeFromDocument:!o.capabilities.hasSiteTheme,tokenRef:o.tokenRef,siteId:o.siteId,onNotify:o.onNotify})},chat:{name:"Live chat",kindLabel:"Site settings",icon:"chat",render:()=>n(Ee,{})},social:{name:"Social links",kindLabel:"Site settings",icon:"social",render:()=>n(Ie,{unavailable:n(W,{what:"Social link"})})},ticker:{name:F,kindLabel:g,icon:"ticker",head:(e,o)=>e.kind==="ticker"?et(o,e.heroId,i(F)):null,render:e=>n(Ne,{heroId:e.kind==="ticker"?e.heroId:""})},part:{name:g,kindLabel:g,icon:"Text",head:(e,o)=>{if(e.kind!=="part")return null;const r=o.describeNode(e.nodeId);if(!r)return null;const{key:c,row:h}=$e(e.propKey),w=h?Ze(r.fields[c],h):r.fields[c],u=qe(i(Ge(Je(w??{},c))),h),p=o.styleNameOfPart(e.nodeId,e.propKey);return{name:p!==null?i(p):u,kindLabel:M(r.label)}},render:(e,o)=>e.kind==="part"?n(Le,{nodeId:e.nodeId,propKey:e.propKey,onBack:()=>o.onSelectNode(e.nodeId),onEditStyle:o.onOpenSiteStyles}):null}},ot=new Set(["header","website","chat"]);function it(e,o){if(e==="puck")return null;const r=nt[e];return ot.has(e)&&!o.hasSiteSettings?{...r,kindLabel:"Not part of a template",render:()=>n(W,{what:r.name})}:r}function rt({mode:e,onOpenWebsiteSettings:o,onOpenSiteStyles:r,onSelectNode:c,hideNodeActions:h=!1,onNotify:w,onHidePanel:u}){const{capabilities:p,tokenRef:y,notifyParent:j,currentSlug:U,siteId:E,runAuthed:Y,readOnly:Z}=_e(),{websiteName:$,fonts:q}=De(),{partStyle:I}=Ae(),b=Ce({readOnly:Z}),{select:G}=Fe(),{selectedItem:t,getItemById:N,getSelectorForId:J,config:d,appState:Q}=ue(l=>l),V=be(d,t?{type:t.type,props:t.props}:null),L=t?Qe(V??d.components[t.type]?.fields,t.props):[],X=l=>d.components[l]?.label??l,s=t?J(t.props.id):void 0,a=it(e.kind,p),ee=ke(),O={capabilities:p,tokenRef:y,hostPanels:ee.chrome?.panels,describeNode:l=>{const m=N(l);if(!m)return null;const S=d.components[m.type];return{type:m.type,label:S?.label??m.type,fields:S?.fields??{}}},styleNameOfPart:(l,m)=>{const S=N(l);if(!S)return null;const de=K(l,m),me=I?.partId===de?I:null;return Te(S.props,m,me,q)},siteId:E,websiteName:$??null,notifyParent:j,onNotify:w,onOpenWebsiteSettings:o,onOpenSiteStyles:r,onSelectNode:c},T=a?.head?.(e,O)??null,te=T?.name??(a?i(a.name):t?i(X(t.type)):i("Page settings")),ne=T?.kindLabel??(a?i(a.kindLabel):t?s&&s.zone!==B?i("Block"):i("Section"):i("Page")),oe=a?a.icon:t?t.type:"page",H=a?null:t?d.components[t.type]?.fields??null:d.root?.fields??null,ie=H?Ue(H):2,_=e.kind==="puck"&&t?Ve(t.type):null,re=!!t&&!!s&&s.zone===B&&t.type!==P&&t.type!==Ke,k=Me(Q?.data,t),se=()=>{k||s&&b.duplicateComponent(s.zone,s.index)},ae=()=>{s&&(b.removeComponent(s.zone,s.index),b.select(null))},le=t?d.components[t.type]?.defaultProps?.previewHover:void 0,D=e.kind==="puck"&&!!t&&!!s&&le!==void 0,A=D&&t.props.previewHover===!0,ce=()=>{!t||!s||b.replaceComponent(s.zone,s.index,{...t,props:{...t.props,previewHover:!A}})},[C,pe]=fe(ye);return f("div",{className:`es-sidepanel es-sidepanel--right sf-panel sf-panel--right${C||!(!a&&!!t)?"":" sf-hints-folded"}`,children:[n(he,{icon:n(ge,{type:oe,size:15}),name:te,kind:ne,actions:!h&&e.kind==="puck"&&t&&t.type!==P?f(v,{children:[n(R,{label:i("Duplicate section"),title:k??void 0,disabled:k!==null,onClick:se,children:n(Se,{size:15})}),re&&p.hasSiteSettings&&n(He,{node:t,currentSlug:U,siteId:E??void 0,tokenRef:y,runAuthed:Y,onNotify:w}),n(R,{label:i("Remove section"),danger:!0,onClick:ae,children:n(we,{size:15})}),u?n(x,{side:"right",onHide:u,divider:!0}):null]}):u?n(x,{side:"right",onHide:u}):void 0}),D&&f("div",{className:"sf-preview-pin",children:[f("div",{className:"sf-preview-pin-text",children:[n("span",{className:"sf-preview-pin-label",children:i("Preview hover state")}),n("span",{className:"sf-preview-pin-hint",children:i("not shown live")})]}),n(je,{checked:A,onChange:ce,ariaLabel:i("Preview hover state")})]}),n(Ye,{tier:ie,children:n("div",{className:"sf-insp-body sf-scroll",children:a?a.render(e,O):t?f(v,{children:[t.type===P&&p.hasSiteSettings&&n(We,{}),n(ze,{children:n(z,{entries:n(Be,{parts:L,heading:!1,onOpen:l=>G(K(t.props.id,l))}),entryCount:xe(L).length})}),_&&n(Oe,{source:_,slug:Xe(t?.props)}),n(Pe,{shown:C,onChange:pe})]}):n(v,{children:n(z,{})})})})]})}export{$t as CHAT_MODE,Yt as HEADER_MODE,Ut as PUCK_MODE,qt as SOCIAL_MODE,Zt as WEBSITE_MODE,rt as default,it as resolvePanel};
@@ -1 +1 @@
1
- "use client";import{jsx as s,jsxs as pt}from"react/jsx-runtime";import{useCallback as n,useEffect as p,useMemo as D,useRef as m,useState as r}from"react";import"efficient-easel/easel.css";import"efficient-easel/shell.css";import"efficient-easel/rail.css";import"efficient-easel/panel.css";import"efficient-easel/fields.css";import"efficient-easel/pick.css";import"efficient-easel/copy.css";import"efficient-easel/gold.css";import"efficient-easel/text-styles.css";import"efficient-easel/menu.css";import"efficient-easel/chrome.css";import"efficient-easel/tree.css";import"efficient-easel/drag.css";import"efficient-easel/screen.css";import"./storefront-editor.css";import{buildConfig as ft}from"../lib/puck/build-config.js";import{ChromeWrap as St}from"../lib/editor-chrome.js";import{sessionRegistry as gt}from"../lib/editor-session.js";import{backendOf as A,blocksOf as _t}from"../lib/website-session.js";import{useEditorSession as wt}from"../lib/editor-session-context.js";import{withSiteBlockGapFields as yt}from"../lib/puck/site-gap-fields.js";import{withTemplateMediaPlaceholders as Tt}from"../lib/puck/templateFields.js";import{setEditorPage as fe}from"../lib/puck/editor-page-context.js";import{resolveSiteName as Ct}from"../lib/content/site-name.js";import{normalizeSiteGutter as Et,normalizeSiteWidth as Pt}from"../lib/content/page-width.js";import{normalizeSiteBlockGap as vt}from"../lib/content/container-gap.js";import xt,{DocumentScreen as bt}from"./EditorScreenMount.js";import{useStorefrontDocument as It}from"./StorefrontDocumentContext.js";import{PreviewHeaderProvider as Ht}from"./PreviewHeaderContext.js";import{PreviewFooterProvider as Mt}from"./PreviewFooterContext.js";import{PreviewChatProvider as Rt,DEFAULT_CHAT_PREVIEW as Ft}from"./PreviewChatContext.js";import{PreviewSocialProvider as Gt}from"./PreviewSocialContext.js";import{useSocialSettings as zt}from"./useSocialSettings.js";import{PreviewSurfaceProvider as kt}from"./PreviewSurfaceContext.js";import{PreviewFocusProvider as Dt}from"./PreviewFocusContext.js";import{SITE_FOOTER_SLUG as At}from"../lib/content/footer.js";import{markFooterReturn as Wt}from"../lib/puck/footer-return.js";import{WEBSITE_ADDRESSING as Nt}from"../lib/website-document-addressing.js";import{PreviewTickerProvider as Ot}from"./PreviewTickerContext.js";import{PreviewPartsProvider as Bt}from"./PreviewPartsContext.js";import{PreviewLocationPartProvider as Kt}from"./PreviewLocationPartContext.js";import{PreviewPartStyleProvider as Lt}from"./PreviewPartStyleContext.js";import{SiteMapsProvider as Yt,readSiteMapsKey as Ut,writeSiteMapsKey as Se,readSiteMapId as jt,writeSiteMapId as Vt}from"../lib/maps-config.js";import{CORNER_STYLE_TO_PX as Xt,DEFAULT_HEADING_COMPRESSION as Zt,DEFAULT_HEADING_TYPOGRAPHY as qt,DEFAULT_SWITCH_SHOWN as W,DEFAULT_SIZES as Jt,DEFAULT_THEME_MODE as E,normalizeCornerRadius as Qt,normalizeCornerStyle as $t,normalizeCardShadow as er,normalizeCardGap as tr,normalizeHoverEffect as rr,normalizeShadowColor as or,IDENTITY_CARD_GAP as ge,IDENTITY_CARD_SHADOW as nr,IDENTITY_HOVER_EFFECT as ar,headingTypographyFromRow as _e,normalizeHeadingCompression as N,normalizeSizes as we,THEME_MODE_KEY as ye,THEME_STORAGE_KEY as ir,THEME_SWITCH_HIDE as Te,THEME_SWITCH_KEY as O}from"../lib/theme.js";import{DEFAULT_FONTS as cr,normalizeFonts as B}from"../lib/fonts.js";import{WEBSITE_SCREEN as sr}from"./WebsiteScreenParts.js";import{routeWebsiteHostMessage as dr}from"../lib/website-host-inbound.js";import{resolveTextStyles as lr,textStylesToOld as ur}from"../lib/site-text-styles.js";const hr=()=>{if(typeof window>"u")return E;try{const c=window.localStorage.getItem(ye);return c==="light"||c==="dark"||c==="auto"?c:E}catch{return E}},Ce=c=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ye,c)}catch{}},mr=()=>{if(typeof window>"u")return W;try{return window.localStorage.getItem(O)!==Te}catch{return W}},pr=()=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(ir)}catch{}},Ee=c=>{if(!(typeof window>"u"))try{c?window.localStorage.removeItem(O):window.localStorage.setItem(O,Te)}catch{}};function fr(){const{adapter:c,capabilities:d,templateId:K,ready:S,token:h,siteId:i,currentSlug:g,currentKind:L,data:Y,getLiveData:U,footerOriginSlug:_,navigate:y}=It();p(()=>(fe(g,L),()=>fe(null,null)),[g,L]);const P=d.placeholderFrames,[Pe,j]=r(null),[ve,V]=r("");p(()=>{const e=c.templateName;if(!S||!K||!e){V("");return}let o=!1;return e().then(l=>!o&&V(l??"")).catch(()=>{}),()=>{o=!0}},[S,h,K,c]);const[xe,v]=r(E),[be,x]=r(W),[Ie,X]=r({selected:0,themes:[]}),[He,b]=r(cr),[Me,I]=r(Jt),[Re,Z]=r(null),[Fe,H]=r(Zt),[Ge,q]=r(null),[ze,J]=r(null),[ke,Q]=r(ge),[De,$]=r(null),[Ae,ee]=r(null),[We,te]=r(null),[M,re]=r(null),u=wt(),oe=D(()=>ft(gt(u),_t(u)),[u]),Ne=D(()=>yt(Tt(oe,P),M),[oe,P,M]),[Oe,R]=r(qt),[Be,ne]=r(null),[Ke,ae]=r(null),ie=m(null),a=m(!1);p(()=>{v(hr()),x(mr())},[]);const Le=n(e=>{a.current=!0,pr(),Ce(e),v(e)},[]),Ye=n(e=>{a.current=!0,Ee(e),x(e)},[]),Ue=n(e=>{a.current=!0,X(e)},[]),je=n(e=>{a.current=!0,b(e)},[]),Ve=n(e=>{a.current=!0,I(e)},[]),Xe=n(e=>{a.current=!0,Z(e)},[]),Ze=n(e=>{a.current=!0,H(e)},[]),qe=n(e=>{a.current=!0,q(e)},[]),Je=n(e=>{a.current=!0,J(e)},[]),Qe=n(e=>{a.current=!0,Q(e)},[]),$e=n(e=>{a.current=!0,$(e)},[]),et=n(e=>{a.current=!0,R(e)},[]),[tt,ce]=r(null),rt=n(e=>{a.current=!0,ce(e)},[]),ot=n(e=>{a.current=!0,ee(e)},[]),nt=n(e=>{a.current=!0,te(e)},[]),at=n(e=>{a.current=!0,re(e)},[]),it=n(e=>{a.current=!0,ne(e)},[]),ct=n(e=>{a.current=!0,ae(e)},[]);p(()=>{const e=A(u).theme;if(!h||!d.hasSiteTheme||!e)return;const o=i??"";ie.current!==o&&(ie.current=o,a.current=!1);let l=!1;return e.get(i?{siteId:i}:void 0).then(t=>{if(!(l||a.current)){if(Ce(t.default_mode),Ee(t.show_theme_switch),v(t.default_mode),x(t.show_theme_switch),X({selected:t.selected_preset,themes:t.theme_presets}),b(B({heading:t.heading_font,body:t.body_font,accent:t.accent_font,label:t.label_font})),I(we({headingLarge:t.heading_size_large_px,headingMedium:t.heading_size_medium_px,headingSmall:t.heading_size_small_px,body:t.body_size_px,label:t.label_size_px})),Z(t.corner_radius_px===void 0?Xt[$t(t.corner_style)]:Qt(t.corner_radius_px)),H(N(t.heading_compression)),q(t.card_shadow==null?nr:er(t.card_shadow)),Q(t.card_gap==null?ge:tr(t.card_gap)),$(t.hover_effect==null?ar:rr(t.hover_effect)),J(or(t.shadow_color)),ee(Pt(t.site_width)),te(Et(t.site_gutter)),re(vt(t.block_gap)),R(_e(t)),ce(t.text_styles??null),Array.isArray(t.text_styles)){const w={fonts:B({heading:t.heading_font,body:t.body_font,accent:t.accent_font,label:t.label_font}),sizes:we({headingLarge:t.heading_size_large_px,headingMedium:t.heading_size_medium_px,headingSmall:t.heading_size_small_px,body:t.body_size_px,label:t.label_size_px}),compression:N(t.heading_compression),typography:_e(t)},f=ur(lr(t.text_styles,w),w);b(B(f.fonts)),I(f.sizes),H(N(f.compression)),R(f.typography)}ne(t.hero_background_follows_width===!0),ae(t.photography_grayscale===!0)}}).catch(()=>{}),()=>{l=!0}},[h,i,d.hasSiteTheme,u]);const st=zt({token:h,siteId:i,enabled:d.hasSiteSettings}),[dt,se]=r(Ft),de=m(null),F=m(!1),G=m(null),T=m({}),lt=n(e=>{F.current=!0,se(o=>({...o,...e})),!(!d.hasSiteSettings||!h)&&(T.current={...T.current,...e},G.current&&clearTimeout(G.current),G.current=setTimeout(()=>{const o=T.current;T.current={},A(u).chat?.update(o,i?{siteId:i}:void 0).catch(()=>{})},500))},[d.hasSiteSettings,h,i,u]);p(()=>{if(!h||!d.hasSiteSettings)return;const e=i??"";de.current!==e&&(de.current=e,F.current=!1);let o=!1;const l=A(u).chat;if(l)return l.get(i?{siteId:i}:void 0).then(t=>{o||F.current||se({enabled:t.enabled,title:t.title,subtitle:t.subtitle,greeting:t.greeting})}).catch(()=>{}),()=>{o=!0}},[h,i,d.hasSiteSettings,u]);const[C,z]=r(""),le=m(null),k=m(!1);p(()=>z(Ut()),[]);const ue=n(e=>{const o=e.trim();if(o===C)return;k.current=!0,Se(o),z(o);const l=c.updateSite;!d.canEditSiteRecord||!S||!l||l({mapsApiKey:o}).catch(()=>{})},[C,d.canEditSiteRecord,S,c]),[he,me]=r("");p(()=>me(jt()),[]),p(()=>{const e=c.site;if(!S||!d.hasSiteRecord||!e){j(null);return}const o=i??"";le.current!==o&&(le.current=o,k.current=!1);let l=!1;return e().then(t=>{if(l||(j(Ct(t.name)),k.current))return;const w=t.mapsApiKey??"";Se(w),z(w);const f=t.mapsMapId??"";Vt(f),me(f)}).catch(()=>{}),()=>{l=!0}},[S,h,d.hasSiteRecord,i,c]);const ut=D(()=>({apiKey:C,setApiKey:ue,mapId:he}),[C,ue,he]),pe=m(null),ht=n(()=>{pe.current=U()??Y??null,Wt(g),y({kind:"page",slug:At,siteId:i??void 0,originSlug:g})},[U,Y,g,y,i]),mt=n(()=>{_&&y({kind:"page",slug:_,siteId:i??void 0})},[_,y,i]);return s(bt,{config:Ne,parts:sr,wrap:(e,o)=>s(Ht,{websiteName:Pe,templateChrome:P,templateName:ve||null,themeMode:xe,onThemeModeChange:Le,themeSwitchShown:be,onThemeSwitchShownChange:Ye,theme:Ie,onThemeChange:Ue,fonts:He,onFontsChange:je,cornerRadiusPx:Re,onCornerRadiusPxChange:Xe,cardShadow:Ge,onCardShadowChange:qe,shadowColor:ze,onShadowColorChange:Je,cardGap:ke,onCardGapChange:Qe,hoverEffect:De,onHoverEffectChange:$e,headingCompression:Fe,onHeadingCompressionChange:Ze,headingTypography:Oe,onHeadingTypographyChange:et,textStyles:tt,onTextStylesChange:rt,sizes:Me,onSizesChange:Ve,siteWidth:Ae,onSiteWidthChange:ot,siteGutter:We,onSiteGutterChange:nt,blockGap:M,onBlockGapChange:at,heroBackgroundFollowsWidth:Be,onHeroBackgroundFollowsWidthChange:it,photographyGrayscale:Ke,onPhotographyGrayscaleChange:ct,themeFromDocument:!d.hasSiteTheme,children:s(Dt,{originData:_?pe.current:null,originSlug:_,exitFocus:mt,children:s(Mt,{editFooter:ht,children:s(St,{wrap:u.chrome?.wrap,surface:"page",children:s(Ot,{children:s(Bt,{children:s(Kt,{children:s(Lt,{children:pt(Yt,{value:ut,children:[s(Rt,{chat:dt,onChatChange:lt,children:s(Gt,{value:st,children:s(kt,{children:e})})}),o]})})})})})})})})})})}function Sr({target:c}){return s(xt,{target:c,addressing:Nt,onHostMessage:dr,children:s(fr,{})})}export{Sr as default};
1
+ "use client";import{jsx as l,jsxs as ct}from"react/jsx-runtime";import{useCallback as a,useEffect as m,useMemo as R,useRef as p,useState as r}from"react";import"efficient-easel/easel.css";import"efficient-easel/shell.css";import"efficient-easel/rail.css";import"efficient-easel/panel.css";import"efficient-easel/fields.css";import"efficient-easel/pick.css";import"efficient-easel/copy.css";import"efficient-easel/gold.css";import"efficient-easel/text-styles.css";import"efficient-easel/menu.css";import"efficient-easel/chrome.css";import"efficient-easel/tree.css";import"efficient-easel/drag.css";import"efficient-easel/screen.css";import"./storefront-editor.css";import{buildConfig as st}from"../lib/puck/build-config.js";import{ChromeWrap as dt}from"../lib/editor-chrome.js";import{sessionRegistry as lt}from"../lib/editor-session.js";import{backendOf as A,blocksOf as ht}from"../lib/website-session.js";import{useEditorSession as ut}from"../lib/editor-session-context.js";import{withSiteBlockGapFields as mt}from"../lib/puck/site-gap-fields.js";import{withTemplateMediaPlaceholders as pt}from"../lib/puck/templateFields.js";import{setEditorPage as le}from"../lib/puck/editor-page-context.js";import{resolveSiteName as St}from"../lib/content/site-name.js";import{normalizeSiteGutter as ft,normalizeSiteWidth as gt}from"../lib/content/page-width.js";import{normalizeSiteBlockGap as _t}from"../lib/content/container-gap.js";import wt,{DocumentScreen as yt}from"./EditorScreenMount.js";import{useStorefrontDocument as Ct}from"./StorefrontDocumentContext.js";import{PreviewHeaderProvider as Tt}from"./PreviewHeaderContext.js";import{PreviewFooterProvider as Et}from"./PreviewFooterContext.js";import{PreviewChatProvider as Pt,DEFAULT_CHAT_PREVIEW as vt}from"./PreviewChatContext.js";import{PreviewSocialProvider as bt}from"./PreviewSocialContext.js";import{useSocialSettings as xt}from"./useSocialSettings.js";import{PreviewSurfaceProvider as Ht}from"./PreviewSurfaceContext.js";import{WEBSITE_ADDRESSING as Mt}from"../lib/website-document-addressing.js";import{PreviewTickerProvider as It}from"./PreviewTickerContext.js";import{PreviewPartsProvider as zt}from"./PreviewPartsContext.js";import{PreviewLocationPartProvider as Gt}from"./PreviewLocationPartContext.js";import{PreviewPartStyleProvider as Rt}from"./PreviewPartStyleContext.js";import{SiteMapsProvider as At,readSiteMapsKey as Ft,writeSiteMapsKey as he,readSiteMapId as kt,writeSiteMapId as Dt}from"../lib/maps-config.js";import{CORNER_STYLE_TO_PX as Wt,DEFAULT_HEADING_COMPRESSION as Nt,DEFAULT_HEADING_TYPOGRAPHY as Ot,DEFAULT_SWITCH_SHOWN as F,DEFAULT_SIZES as Bt,DEFAULT_THEME_MODE as y,normalizeCornerRadius as Kt,normalizeCornerStyle as Lt,normalizeCardShadow as Yt,normalizeCardGap as Ut,normalizeHoverEffect as jt,normalizeShadowColor as Vt,IDENTITY_CARD_GAP as ue,IDENTITY_CARD_SHADOW as Xt,IDENTITY_HOVER_EFFECT as Zt,headingTypographyFromRow as me,normalizeHeadingCompression as k,normalizeSizes as pe,THEME_MODE_KEY as Se,THEME_STORAGE_KEY as qt,THEME_SWITCH_HIDE as fe,THEME_SWITCH_KEY as D}from"../lib/theme.js";import{DEFAULT_FONTS as Jt,normalizeFonts as W}from"../lib/fonts.js";import{WEBSITE_SCREEN as Qt}from"./WebsiteScreenParts.js";import{routeWebsiteHostMessage as $t}from"../lib/website-host-inbound.js";import{resolveTextStyles as er,textStylesToOld as tr}from"../lib/site-text-styles.js";const rr=()=>{if(typeof window>"u")return y;try{const i=window.localStorage.getItem(Se);return i==="light"||i==="dark"||i==="auto"?i:y}catch{return y}},ge=i=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Se,i)}catch{}},or=()=>{if(typeof window>"u")return F;try{return window.localStorage.getItem(D)!==fe}catch{return F}},nr=()=>{if(!(typeof window>"u"))try{window.localStorage.removeItem(qt)}catch{}},_e=i=>{if(!(typeof window>"u"))try{i?window.localStorage.removeItem(D):window.localStorage.setItem(D,fe)}catch{}};function ar(){const{adapter:i,capabilities:s,templateId:N,ready:f,token:u,siteId:c,currentSlug:O,currentKind:B}=Ct();m(()=>(le(O,B),()=>le(null,null)),[O,B]);const C=s.placeholderFrames,[we,K]=r(null),[ye,L]=r("");m(()=>{const e=i.templateName;if(!f||!N||!e){L("");return}let o=!1;return e().then(d=>!o&&L(d??"")).catch(()=>{}),()=>{o=!0}},[f,u,N,i]);const[Ce,T]=r(y),[Te,E]=r(F),[Ee,Y]=r({selected:0,themes:[]}),[Pe,P]=r(Jt),[ve,v]=r(Bt),[be,U]=r(null),[xe,b]=r(Nt),[He,j]=r(null),[Me,V]=r(null),[Ie,X]=r(ue),[ze,Z]=r(null),[Ge,q]=r(null),[Re,J]=r(null),[x,Q]=r(null),h=ut(),$=R(()=>st(lt(h),ht(h)),[h]),Ae=R(()=>mt(pt($,C),x),[$,C,x]),[Fe,H]=r(Ot),[ke,ee]=r(null),[De,te]=r(null),re=p(null),n=p(!1);m(()=>{T(rr()),E(or())},[]);const We=a(e=>{n.current=!0,nr(),ge(e),T(e)},[]),Ne=a(e=>{n.current=!0,_e(e),E(e)},[]),Oe=a(e=>{n.current=!0,Y(e)},[]),Be=a(e=>{n.current=!0,P(e)},[]),Ke=a(e=>{n.current=!0,v(e)},[]),Le=a(e=>{n.current=!0,U(e)},[]),Ye=a(e=>{n.current=!0,b(e)},[]),Ue=a(e=>{n.current=!0,j(e)},[]),je=a(e=>{n.current=!0,V(e)},[]),Ve=a(e=>{n.current=!0,X(e)},[]),Xe=a(e=>{n.current=!0,Z(e)},[]),Ze=a(e=>{n.current=!0,H(e)},[]),[qe,oe]=r(null),Je=a(e=>{n.current=!0,oe(e)},[]),Qe=a(e=>{n.current=!0,q(e)},[]),$e=a(e=>{n.current=!0,J(e)},[]),et=a(e=>{n.current=!0,Q(e)},[]),tt=a(e=>{n.current=!0,ee(e)},[]),rt=a(e=>{n.current=!0,te(e)},[]);m(()=>{const e=A(h).theme;if(!u||!s.hasSiteTheme||!e)return;const o=c??"";re.current!==o&&(re.current=o,n.current=!1);let d=!1;return e.get(c?{siteId:c}:void 0).then(t=>{if(!(d||n.current)){if(ge(t.default_mode),_e(t.show_theme_switch),T(t.default_mode),E(t.show_theme_switch),Y({selected:t.selected_preset,themes:t.theme_presets}),P(W({heading:t.heading_font,body:t.body_font,accent:t.accent_font,label:t.label_font})),v(pe({headingLarge:t.heading_size_large_px,headingMedium:t.heading_size_medium_px,headingSmall:t.heading_size_small_px,body:t.body_size_px,label:t.label_size_px})),U(t.corner_radius_px===void 0?Wt[Lt(t.corner_style)]:Kt(t.corner_radius_px)),b(k(t.heading_compression)),j(t.card_shadow==null?Xt:Yt(t.card_shadow)),X(t.card_gap==null?ue:Ut(t.card_gap)),Z(t.hover_effect==null?Zt:jt(t.hover_effect)),V(Vt(t.shadow_color)),q(gt(t.site_width)),J(ft(t.site_gutter)),Q(_t(t.block_gap)),H(me(t)),oe(t.text_styles??null),Array.isArray(t.text_styles)){const g={fonts:W({heading:t.heading_font,body:t.body_font,accent:t.accent_font,label:t.label_font}),sizes:pe({headingLarge:t.heading_size_large_px,headingMedium:t.heading_size_medium_px,headingSmall:t.heading_size_small_px,body:t.body_size_px,label:t.label_size_px}),compression:k(t.heading_compression),typography:me(t)},S=tr(er(t.text_styles,g),g);P(W(S.fonts)),v(S.sizes),b(k(S.compression)),H(S.typography)}ee(t.hero_background_follows_width===!0),te(t.photography_grayscale===!0)}}).catch(()=>{}),()=>{d=!0}},[u,c,s.hasSiteTheme,h]);const ot=xt({token:u,siteId:c,enabled:s.hasSiteSettings}),[nt,ne]=r(vt),ae=p(null),M=p(!1),I=p(null),_=p({}),at=a(e=>{M.current=!0,ne(o=>({...o,...e})),!(!s.hasSiteSettings||!u)&&(_.current={..._.current,...e},I.current&&clearTimeout(I.current),I.current=setTimeout(()=>{const o=_.current;_.current={},A(h).chat?.update(o,c?{siteId:c}:void 0).catch(()=>{})},500))},[s.hasSiteSettings,u,c,h]);m(()=>{if(!u||!s.hasSiteSettings)return;const e=c??"";ae.current!==e&&(ae.current=e,M.current=!1);let o=!1;const d=A(h).chat;if(d)return d.get(c?{siteId:c}:void 0).then(t=>{o||M.current||ne({enabled:t.enabled,title:t.title,subtitle:t.subtitle,greeting:t.greeting})}).catch(()=>{}),()=>{o=!0}},[u,c,s.hasSiteSettings,h]);const[w,z]=r(""),ie=p(null),G=p(!1);m(()=>z(Ft()),[]);const ce=a(e=>{const o=e.trim();if(o===w)return;G.current=!0,he(o),z(o);const d=i.updateSite;!s.canEditSiteRecord||!f||!d||d({mapsApiKey:o}).catch(()=>{})},[w,s.canEditSiteRecord,f,i]),[se,de]=r("");m(()=>de(kt()),[]),m(()=>{const e=i.site;if(!f||!s.hasSiteRecord||!e){K(null);return}const o=c??"";ie.current!==o&&(ie.current=o,G.current=!1);let d=!1;return e().then(t=>{if(d||(K(St(t.name)),G.current))return;const g=t.mapsApiKey??"";he(g),z(g);const S=t.mapsMapId??"";Dt(S),de(S)}).catch(()=>{}),()=>{d=!0}},[f,u,s.hasSiteRecord,c,i]);const it=R(()=>({apiKey:w,setApiKey:ce,mapId:se}),[w,ce,se]);return l(yt,{config:Ae,parts:Qt,wrap:(e,o)=>l(Tt,{websiteName:we,templateChrome:C,templateName:ye||null,themeMode:Ce,onThemeModeChange:We,themeSwitchShown:Te,onThemeSwitchShownChange:Ne,theme:Ee,onThemeChange:Oe,fonts:Pe,onFontsChange:Be,cornerRadiusPx:be,onCornerRadiusPxChange:Le,cardShadow:He,onCardShadowChange:Ue,shadowColor:Me,onShadowColorChange:je,cardGap:Ie,onCardGapChange:Ve,hoverEffect:ze,onHoverEffectChange:Xe,headingCompression:xe,onHeadingCompressionChange:Ye,headingTypography:Fe,onHeadingTypographyChange:Ze,textStyles:qe,onTextStylesChange:Je,sizes:ve,onSizesChange:Ke,siteWidth:Ge,onSiteWidthChange:Qe,siteGutter:Re,onSiteGutterChange:$e,blockGap:x,onBlockGapChange:et,heroBackgroundFollowsWidth:ke,onHeroBackgroundFollowsWidthChange:tt,photographyGrayscale:De,onPhotographyGrayscaleChange:rt,themeFromDocument:!s.hasSiteTheme,children:l(Et,{children:l(dt,{wrap:h.chrome?.wrap,surface:"page",children:l(It,{children:l(zt,{children:l(Gt,{children:l(Rt,{children:ct(At,{value:it,children:[l(Pt,{chat:nt,onChatChange:at,children:l(bt,{value:ot,children:l(Ht,{children:e})})}),o]})})})})})})})})})}function ir({target:i}){return l(wt,{target:i,addressing:Mt,onHostMessage:$t,children:l(ar,{})})}export{ir as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import{useState as x}from"react";import{createNode as k,newId as y}from"efficient-easel/data";import{useEasel as g}from"efficient-easel/easel";import{Button as i}from"efficient-shell/ui";import{useStorefrontDocument as S}from"./StorefrontDocumentContext.js";import{boxFooterFromFooter as E}from"../lib/puck/box-footer.js";import{FOOTER_TYPE as F}from"../lib/puck/footer-blocks.js";import{SITE_FOOTER_TYPE as c,withSectionGroup as T}from"../lib/puck/section-groups.js";import{say as r}from"../lib/editor-words.js";function b(){const{appState:m,dispatch:l,config:f}=g(o=>o),{readOnly:p}=S(),[d,s]=x(!1),n=m.data.content;if(p||n.some(o=>o.type===c))return null;const u=n.find(o=>o.type===F)??null,h=(o,t)=>k(f,o,t),w=()=>{const o=E(u,h,y(c));l({type:"setData",data:t=>({...t,content:[...T(t.content,o)]}),recordHistory:!0}),s(!1)};return a("div",{className:"sf-box-footer-switch",children:[e("p",{className:"sf-box-footer-switch-text",children:r("Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.")}),d?a("div",{className:"sf-box-footer-switch-row",children:[e(i,{variant:"primary",size:"sm",onClick:w,children:r("Switch now")}),e(i,{variant:"secondary",size:"sm",onClick:()=>s(!1),children:r("Cancel")})]}):e(i,{variant:"secondary",size:"sm",onClick:()=>s(!0),children:r("Switch to Box footer")})]})}export{b as default};
1
+ "use client";import{jsx as r,Fragment as g,jsxs as y}from"react/jsx-runtime";import{useState as k}from"react";import{createNode as w,newId as x}from"efficient-easel/data";import{useEasel as F}from"efficient-easel/easel";import{Banner as S,Button as s}from"efficient-shell/ui";import{useStorefrontDocument as T}from"./StorefrontDocumentContext.js";import{boxFooterFromFooter as B}from"../lib/puck/box-footer.js";import{FOOTER_TYPE as E}from"../lib/puck/footer-blocks.js";import{SITE_FOOTER_TYPE as a,withSectionGroup as _}from"../lib/puck/section-groups.js";import{say as t}from"../lib/editor-words.js";function O(){const{appState:c,dispatch:m,config:l}=F(o=>o),{readOnly:f}=T(),[u,n]=k(!1),i=c.data.content;if(f||i.some(o=>o.type===a))return null;const p=i.find(o=>o.type===E)??null,d=(o,e)=>w(l,o,e),h=()=>{const o=B(p,d,x(a));m({type:"setData",data:e=>({...e,content:[..._(e.content,o)]}),recordHistory:!0}),n(!1)};return r(S,{tone:"info",title:t("This footer uses the old layout"),action:u?y(g,{children:[r(s,{variant:"primary",size:"sm",onClick:h,children:t("Switch now")}),r(s,{variant:"secondary",size:"sm",onClick:()=>n(!1),children:t("Cancel")})]}):r(s,{variant:"secondary",size:"sm",onClick:()=>n(!0),children:t("Switch to Box footer")}),children:t("Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.")})}export{O as default};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as I}from"react/jsx-runtime";import{useCallback as k,useEffect as E,useState as G}from"react";import{Button as j,Tooltip as K}from"efficient-shell/ui";import{SettingsSwitch as z}from"efficient-easel/panel";import{PagesIcon as U,StylesIcon as Z}from"efficient-easel/rail";import{TreeRow as q}from"efficient-easel/tree";import{useEaselStrings as X}from"efficient-easel/strings";import{LocationsTreeContext as J}from"./LocationsTreeContext.js";import Q from"./PagesPanel.js";import{usePreviewChat as $}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as ee}from"./preview-devices.js";import{PreviewDeviceContext as te}from"./PreviewDeviceContext.js";import{usePreviewHeader as oe}from"./PreviewHeaderContext.js";import{usePreviewSocial as re}from"./PreviewSocialContext.js";import{usePreviewSurface as ie}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as se,usePreviewTicker as ne}from"./PreviewTickerContext.js";import ae,{CHAT_MODE as ce,HEADER_MODE as A,SOCIAL_MODE as le,WEBSITE_MODE as B}from"./SectionEditor.js";import g from"./SectionIcon.js";import de from"./SectionThumbnail.js";import{useStorefrontDocument as C}from"./StorefrontDocumentContext.js";import pe from"./StylesPanel.js";import me from"./TemplateGlyph.js";import{useFooterFocus as fe}from"./useFooterFocus.js";import{LOCATIONS_TYPE as ue,useLocationsTree as Se}from"./useLocationsTree.js";import{usePinnedChromeSeed as Te}from"./usePinnedChromeSeed.js";import{usePreviewHref as Ee}from"./usePreviewHref.js";import{WebsitePreviewButton as we}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as he,SITE_STYLES_TEXT_TAB as be,useWebsiteName as Pe}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as ve}from"./useWebsiteMainAction.js";import{useEditorSession as ke}from"../lib/editor-session-context.js";import{useOpenPageName as Ie}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as ge,duplicateBlocked as Ce,heroGroupNestDepth as Le}from"../lib/hero-group-placement.js";import{stripMarkup as _e}from"../lib/markup.js";import{categoryShortLabel as Oe,PINNED_SECTION_TYPE as ye}from"../lib/puck/add-palette.js";import{canAddTo as Ae}from"../lib/puck/add-target.js";import{blockIsOffered as Be}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Re,setBookingPreview as Ne}from"../lib/puck/booking-preview.js";import{footerBlockRowName as De}from"../lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as He,HEADER_TYPE as R}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as We,readLeftView as xe,resolveLeftView as Ve,writeLeftView as Me}from"../lib/puck/left-view.js";import{isLockedBlock as Ye}from"../lib/puck/locked-blocks.js";import{scrollPreviewToSection as Fe,scrollPreviewToTop as N}from"../lib/puck/preview-dom.js";import{SiteCanvas as Ge}from"../lib/puck/overrides.js";import{labelAtLevel as je}from"../lib/puck/section-catalog.js";import{editorWords as Ke,say as s}from"../lib/editor-words.js";import{SECTION_DESCRIPTIONS as ze}from"../lib/puck/section-descriptions.js";import{isSectionGroupType as Ue,sectionGroupZone as Ze,SITE_FOOTER_TYPE as qe,SITE_HEADER_TYPE as Xe}from"../lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Je,SAVE_AS_TEMPLATE_EVENT as Qe}from"../lib/save-as-template-action.js";import{newSectionNode as $e}from"../lib/sections/new-section-node.js";import{useHostProducts as et}from"../lib/use-host-products.js";import{backendOf as tt}from"../lib/website-session.js";function D({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:i}=ne(),n=X().tree,a=e,d=a.kind==="ticker"?a.heroId:null,c=k(l=>{if(!l)return;t({kind:"ticker",heroId:l}),Fe(l)},[t]);return E(()=>{o(d)},[d,o]),E(()=>{i(c)},[i,c]),{partRows:(l,{rowClick:p})=>{const S=String(l.props.id);return l.type==="Hero"&&r(q,{icon:r(g,{type:"ticker",size:13}),name:s(se),onSelect:()=>c(S),selected:d===S,rowProps:{onClick:p(()=>c(S))},words:n})}}}function ot(e){const{adapter:t,capabilities:o,currentSlug:i,siteId:n,docId:a,hasUnsavedEdits:d,bridgeCapabilities:c,notifyParent:l,token:p}=C(),{hasPreviewLink:S}=o,w=tt(ke()).preview?.draftLink,h=ve(e.data),m=Je({hasTrustedConsole:!!p,canCreatePlatformTemplate:c.canCreatePlatformTemplate,capabilities:o,siteId:n,hasUnsavedEdits:d}),b=k(()=>{!n||!i||l(Qe,{siteId:n,slug:i})},[l,n,i]),P=Ee({pageSlug:i,siteId:n,token:p}),T=t.previewHref?.(i)??P;return{barLead:()=>m.visible&&r(K,{side:"bottom",content:m.enabled?s("Save this website as a platform template"):s(m.disabledReason),children:r("span",{className:"sf-tip-disabled",tabIndex:m.enabled?void 0:0,children:r(j,{variant:"secondary",disabled:!m.enabled,onClick:b,rightIcon:r(me,{}),children:s("Save as Template")})})}),barTrail:()=>S&&i&&r(we,{liveHref:T,pageId:a??null,draftLink:w}),mainAction:h}}function rt(){return I("svg",{width:"17",height:"17",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round",children:[r("path",{d:"M12 3a9 9 0 0 0 0 18 2.3 2.3 0 0 0 2.3-2.3c0-.55-.22-1.05-.57-1.42-.34-.37-.56-.87-.56-1.43A2.35 2.35 0 0 1 15.6 13.5H18a3 3 0 0 0 3-3c0-4.14-4-7.5-9-7.5z"}),r("circle",{cx:"7.7",cy:"11.3",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"12",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"16",cy:"11",r:"1.05",fill:"currentColor",stroke:"none"})]})}function it(e,t){const{capabilities:o,templateId:i,siteId:n,tokenRef:a,navigate:d}=C(),{hasSiteTheme:c,explainsSiteSettings:l}=o,p=f=>t.setView(f),[S,w]=G(he[0].id),{surface:h,setSurface:m}=ie(),b=()=>{if(c){p("styles"),t.reveal(),N();return}e.show(B),e.reveal(),N()},P={id:"pages",label:s("Pages"),icon:r(U,{}),panel:({onHide:f})=>r(Q,{activeSurface:h,onPreviewSurface:m,onNavigate:u=>{m(null),d(i?{kind:"template",id:i,pageSlug:u}:{kind:"page",slug:u,siteId:n??void 0})},onClose:f})},T=[];return!c&&l&&T.push({id:"appearance",label:s("Appearance"),icon:r(rt,{}),active:e.kind==="website",onSelect:b}),c&&T.push({id:"styles",label:s("Site styles"),icon:r(Z,{}),panel:({onHide:f,notify:u})=>r(pe,{tokenRef:a,siteId:n??void 0,onClose:f,onNotify:u,tab:S,onTabChange:w})}),{railLead:[P],railTrail:T,resolveLeftView:(f,u)=>Ve(f,c,u),openSettings:b,openStyles:()=>{w(be),p("styles")}}}function st(e,t,o,i){const{kind:n,open:a}=e,{selected:d,zoneOf:c}=t,l=fe(t,o);E(()=>{Ne(d?.type==="BookingBox"&&d.props.region==="confirm"?Re(c(String(d.props.id))):null)},[d?.props.id]);const p=Se(e,t),{capabilities:{hasSiteSettings:S}}=C(),{setSelected:w,setSelectHandler:h}=oe(),{chat:m,setChat:b,setSelected:P,setSelectHandler:T}=$(),f=n==="header";E(()=>{w(f)},[f,w]),E(()=>{h(()=>a(A))},[h,a]);const u=k(()=>a(ce),[a]),_=n==="chat";E(()=>{P(_)},[_,P]),E(()=>{T(u)},[T,u]);const{setOpenHandler:O}=re(),y=k(()=>a(le),[a]);E(()=>{O(y)},[O,y]);const x=D(e),V=ot(t),M=it(e,i),Y=o.device;return{...l,...x,...V,...M,hasOwnRows:v=>v.type===ue,ownRows:p.renderLocationTree,sectionPressed:p.sectionPressed,wrap:v=>r(J.Provider,{value:!0,children:r(te.Provider,{value:Y,children:v})}),addPanelRow:v=>S?I("div",{className:"sf-addside-sitewide",children:[r("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:r(g,{type:"chat",size:16})}),I("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{v(),u()},children:[s("Live chat"),r("span",{className:"sf-addside-sitewide-desc",children:s("A chat bubble on every page")})]}),r(z,{checked:m.enabled,onChange:F=>b({enabled:F}),ariaLabel:s("Show the chat bubble on the whole site")})]}):void 0}}let H=null,L=new WeakMap;function nt(e){const t=Ke();if(!e||!t)return e;H!==t&&(H=t,L=new WeakMap);let o=L.get(e);return o||(o={...e,choices:e.choices?e.choices.map(i=>({...i,label:s(i.label)})):null,spec:e.spec?{...e.spec,addLabel:s(e.spec.addLabel)}:null},L.set(e,o)),o}const at={isLockedBlock:Ye,duplicateBlocked:Ce,nestDepth:(e,t,o)=>t===ge?Le(e,o):0,newSectionNode:$e,canAddTo:(e,t)=>nt(Ae(e,t)),blockIsOffered:Be},ct=new Proxy(ze,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?s(o):o}}),lt={labelAtLevel:(e,t,o)=>s(je(e,t,o)),descriptions:ct,categoryLabel:e=>{const t=Oe(e);return t===void 0?void 0:s(t)},firstSection:ye,blockRowName:De,plainText:_e,Icon:g,Thumbnail:de,useProducts:et},dt={desktop:2e3,tablet:800,mobile:390},W="desktop",pt={options:ee,initial:W,fluid:W,widths:dt},mt={read:xe,write:e=>Me(e),forSelection:(e,t)=>We(e,t)},ft={first:R,last:He,firstGroup:Xe,lastGroup:qe,isSectionGroup:Ue,sectionGroupZone:Ze,panelOf:e=>e===R?A:null};function ut(e){return{...D(e),openSettings:()=>e.show(B)}}const fo={useOwnerName:Pe,useDocumentLabel:Ie,useBridges:st,useStandaloneBridges:ut,useDocumentPass:Te,blockRules:at,blockLook:lt,devices:pt,leftView:mt,pinned:ft,Canvas:Ge,Inspector:ae};export{fo as WEBSITE_SCREEN};
1
+ "use client";import{jsx as r,jsxs as I}from"react/jsx-runtime";import{useCallback as k,useEffect as E,useState as j}from"react";import{Button as F,Tooltip as K}from"efficient-shell/ui";import{SettingsSwitch as z}from"efficient-easel/panel";import{PagesIcon as U,StylesIcon as Z}from"efficient-easel/rail";import{TreeRow as q}from"efficient-easel/tree";import{useEaselStrings as X}from"efficient-easel/strings";import{LocationsTreeContext as J}from"./LocationsTreeContext.js";import Q from"./PagesPanel.js";import{usePreviewChat as $}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as ee}from"./preview-devices.js";import{PreviewDeviceContext as te}from"./PreviewDeviceContext.js";import{usePreviewHeader as oe}from"./PreviewHeaderContext.js";import{usePreviewSocial as re}from"./PreviewSocialContext.js";import{usePreviewSurface as ie}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as ne,usePreviewTicker as se}from"./PreviewTickerContext.js";import ae,{CHAT_MODE as ce,HEADER_MODE as A,SOCIAL_MODE as le,WEBSITE_MODE as B}from"./SectionEditor.js";import C from"./SectionIcon.js";import de from"./SectionThumbnail.js";import{useStorefrontDocument as L}from"./StorefrontDocumentContext.js";import pe from"./StylesPanel.js";import me from"./TemplateGlyph.js";import{LOCATIONS_TYPE as fe,useLocationsTree as ue}from"./useLocationsTree.js";import{usePinnedChromeSeed as Se}from"./usePinnedChromeSeed.js";import{usePreviewHref as Te}from"./usePreviewHref.js";import{WebsitePreviewButton as Ee}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as we,SITE_STYLES_TEXT_TAB as be,useWebsiteName as he}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as Pe}from"./useWebsiteMainAction.js";import{useEditorSession as ve}from"../lib/editor-session-context.js";import{useOpenPageName as ge}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as ke,heroGroupNestDepth as Ie}from"../lib/hero-group-placement.js";import{stripMarkup as Ce}from"../lib/markup.js";import{categoryShortLabel as Le,PINNED_SECTION_TYPE as _e}from"../lib/puck/add-palette.js";import{canAddTo as Oe}from"../lib/puck/add-target.js";import{blockIsOffered as ye}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Ae,setBookingPreview as Be}from"../lib/puck/booking-preview.js";import{footerBlockRowName as Ne}from"../lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Re,HEADER_TYPE as N}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as De,readLeftView as He,resolveLeftView as We,writeLeftView as xe}from"../lib/puck/left-view.js";import{websiteIsLockedBlock as Ve}from"../lib/puck/locked-blocks.js";import{everyPageBadge as Me,everyPageNotice as Ge,pinnedGroupTab as Ye,websiteDuplicateBlocked as je}from"../lib/puck/every-page.js";import{pinnedChromeInPlace as g}from"../lib/pinned-chrome-lock.js";import{scrollPreviewToSection as Fe,scrollPreviewToTop as R}from"../lib/puck/preview-dom.js";import{SiteCanvas as Ke}from"../lib/puck/overrides.js";import{labelAtLevel as ze}from"../lib/puck/section-catalog.js";import{editorWords as Ue,say as n}from"../lib/editor-words.js";import{SECTION_DESCRIPTIONS as Ze}from"../lib/puck/section-descriptions.js";import{groupAccepts as qe,isSectionGroupType as Xe,sectionGroupZone as Je,SITE_FOOTER_TYPE as Qe,SITE_HEADER_TYPE as $e}from"../lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as et,SAVE_AS_TEMPLATE_EVENT as tt}from"../lib/save-as-template-action.js";import{newSectionNode as ot}from"../lib/sections/new-section-node.js";import{useHostProducts as rt}from"../lib/use-host-products.js";import{backendOf as it}from"../lib/website-session.js";function D({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:i}=se(),a=X().tree,c=e,d=c.kind==="ticker"?c.heroId:null,l=k(s=>{if(!s)return;t({kind:"ticker",heroId:s}),Fe(s)},[t]);return E(()=>{o(d)},[d,o]),E(()=>{i(l)},[i,l]),{partRows:(s,{rowClick:m})=>{const f=String(s.props.id);return s.type==="Hero"&&r(q,{icon:r(C,{type:"ticker",size:13}),name:n(ne),onSelect:()=>l(f),selected:d===f,rowProps:{onClick:m(()=>l(f))},words:a})}}}function nt(e){const{adapter:t,capabilities:o,currentSlug:i,siteId:a,docId:c,hasUnsavedEdits:d,bridgeCapabilities:l,notifyParent:s,token:m}=L(),{hasPreviewLink:f}=o,w=it(ve()).preview?.draftLink,P=Pe(e.data),u=et({hasTrustedConsole:!!m,canCreatePlatformTemplate:l.canCreatePlatformTemplate,capabilities:o,siteId:a,hasUnsavedEdits:d}),b=k(()=>{!a||!i||s(tt,{siteId:a,slug:i})},[s,a,i]),h=Te({pageSlug:i,siteId:a,token:m}),T=t.previewHref?.(i)??h;return{barLead:()=>u.visible&&r(K,{side:"bottom",content:u.enabled?n("Save this website as a platform template"):n(u.disabledReason),children:r("span",{className:"sf-tip-disabled",tabIndex:u.enabled?void 0:0,children:r(F,{variant:"secondary",disabled:!u.enabled,onClick:b,rightIcon:r(me,{}),children:n("Save as Template")})})}),barTrail:()=>f&&i&&r(Ee,{liveHref:T,pageId:c??null,draftLink:w}),mainAction:P}}function st(){return I("svg",{width:"17",height:"17",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round",children:[r("path",{d:"M12 3a9 9 0 0 0 0 18 2.3 2.3 0 0 0 2.3-2.3c0-.55-.22-1.05-.57-1.42-.34-.37-.56-.87-.56-1.43A2.35 2.35 0 0 1 15.6 13.5H18a3 3 0 0 0 3-3c0-4.14-4-7.5-9-7.5z"}),r("circle",{cx:"7.7",cy:"11.3",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"12",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"16",cy:"11",r:"1.05",fill:"currentColor",stroke:"none"})]})}function at(e,t){const{capabilities:o,templateId:i,siteId:a,tokenRef:c,navigate:d}=L(),{hasSiteTheme:l,explainsSiteSettings:s}=o,m=p=>t.setView(p),[f,w]=j(we[0].id),{surface:P,setSurface:u}=ie(),b=()=>{if(l){m("styles"),t.reveal(),R();return}e.show(B),e.reveal(),R()},h={id:"pages",label:n("Pages"),icon:r(U,{}),panel:({onHide:p})=>r(Q,{activeSurface:P,onPreviewSurface:u,onNavigate:S=>{u(null),d(i?{kind:"template",id:i,pageSlug:S}:{kind:"page",slug:S,siteId:a??void 0})},onClose:p})},T=[];return!l&&s&&T.push({id:"appearance",label:n("Appearance"),icon:r(st,{}),active:e.kind==="website",onSelect:b}),l&&T.push({id:"styles",label:n("Site styles"),icon:r(Z,{}),panel:({onHide:p,notify:S})=>r(pe,{tokenRef:c,siteId:a??void 0,onClose:p,onNotify:S,tab:f,onTabChange:w})}),{railLead:[h],railTrail:T,resolveLeftView:(p,S)=>We(p,l,S),openSettings:b,openStyles:()=>{w(be),m("styles")}}}function ct(e,t,o,i){const{kind:a,open:c}=e,{selected:d,zoneOf:l}=t;E(()=>{Be(d?.type==="BookingBox"&&d.props.region==="confirm"?Ae(l(String(d.props.id))):null)},[d?.props.id]);const s=ue(e,t),{capabilities:{hasSiteSettings:m}}=L(),{setSelected:f,setSelectHandler:w}=oe(),{chat:P,setChat:u,setSelected:b,setSelectHandler:h}=$(),T=a==="header";E(()=>{f(T)},[T,f]),E(()=>{w(()=>c(A))},[w,c]);const p=k(()=>c(ce),[c]),S=a==="chat";E(()=>{b(S)},[S,b]),E(()=>{h(p)},[h,p]);const{setOpenHandler:O}=re(),y=k(()=>c(le),[c]);E(()=>{O(y)},[O,y]);const x=D(e),V=nt(t),M=at(e,i),G=o.device;return{...x,...V,...M,hasOwnRows:v=>v.type===fe,ownRows:s.renderLocationTree,sectionPressed:s.sectionPressed,wrap:v=>r(J.Provider,{value:!0,children:r(te.Provider,{value:G,children:v})}),addPanelRow:v=>m?I("div",{className:"sf-addside-sitewide",children:[r("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:r(C,{type:"chat",size:16})}),I("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{v(),p()},children:[n("Live chat"),r("span",{className:"sf-addside-sitewide-desc",children:n("A chat bubble on every page")})]}),r(z,{checked:P.enabled,onChange:Y=>u({enabled:Y}),ariaLabel:n("Show the chat bubble on the whole site")})]}):void 0}}let H=null,_=new WeakMap;function lt(e){const t=Ue();if(!e||!t)return e;H!==t&&(H=t,_=new WeakMap);let o=_.get(e);return o||(o={...e,choices:e.choices?e.choices.map(i=>({...i,label:n(i.label)})):null,spec:e.spec?{...e.spec,addLabel:n(e.spec.addLabel)}:null},_.set(e,o)),o}const dt={isLockedBlock:Ve,duplicateBlocked:je,nestDepth:(e,t,o)=>t===ke?Ie(e,o):0,newSectionNode:ot,canAddTo:(e,t)=>lt(Oe(e,t)),blockIsOffered:ye},pt=new Proxy(Ze,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?n(o):o}}),mt={labelAtLevel:(e,t,o)=>n(ze(e,t,o)),descriptions:pt,categoryLabel:e=>{const t=Le(e);return t===void 0?void 0:n(t)},firstSection:_e,blockRowName:Ne,plainText:Ce,Icon:C,Thumbnail:de,useProducts:rt},ft={desktop:2e3,tablet:800,mobile:390},W="desktop",ut={options:ee,initial:W,fluid:W,widths:ft},St={read:He,write:e=>xe(e),forSelection:(e,t)=>De(e,t)},Tt={first:N,last:Re,firstGroup:$e,lastGroup:Qe,isSectionGroup:Xe,sectionGroupZone:Je,panelOf:e=>e===N?A:null,get groupTab(){return g()?Ye:void 0},get groupBadge(){return g()?Me():void 0},get changeNotice(){return g()?Ge():void 0},get band(){return g()?Et:void 0},get groupAccepts(){return g()?qe:void 0}},Et={foldable:!0};function wt(e){return{...D(e),openSettings:()=>e.show(B)}}const wo={useOwnerName:he,useDocumentLabel:ge,useBridges:ct,useStandaloneBridges:wt,useDocumentPass:Se,blockRules:dt,blockLook:mt,devices:ut,leftView:St,pinned:Tt,Canvas:Ke,Inspector:ae};export{wo as WEBSITE_SCREEN};
@@ -318,30 +318,6 @@
318
318
  color: var(--sf-muted);
319
319
  }
320
320
 
321
- /* "Switch to Box footer" (blueprint step H.4) — a short note and its button
322
- under the old footer's settings. A confirmation replaces the button in place
323
- rather than opening a dialog: it is one decision, made where it is offered. */
324
- .sf-box-footer-switch {
325
- display: flex;
326
- flex-direction: column;
327
- align-items: flex-start;
328
- gap: 10px;
329
- margin: 18px 0 6px;
330
- padding: 12px;
331
- border: 1px solid var(--sf-divider);
332
- border-radius: var(--radius-xl);
333
- }
334
- .sf-box-footer-switch-text {
335
- margin: 0;
336
- font-size: var(--text-xs);
337
- line-height: 1.45;
338
- color: var(--sf-muted);
339
- }
340
- .sf-box-footer-switch-row {
341
- display: flex;
342
- gap: 8px;
343
- }
344
-
345
321
  /* Section-cover wireframe tokens — the bespoke palette the SectionThumbnail
346
322
  * covers draw with (see components/SectionThumbnail.tsx). Defined once here so no
347
323
  * colour literal lives in the .tsx (doc/no-hardcoding.md R3); the admin mirror
@@ -1 +1 @@
1
- "use client";import{useEffect as x,useRef as w}from"react";import{createNode as z,newId as Y}from"efficient-easel/data";import{useEaselApi as v}from"efficient-easel/easel";import{useStorefrontDocument as A}from"./StorefrontDocumentContext.js";import{SITE_FOOTER_SLUG as H}from"../lib/content/footer.js";import{boxFooterFromFooter as B}from"../lib/puck/box-footer.js";import{ROOT_ZONE as m,missingPinnedTypes as G,pinnedDuplicateIds as R}from"../lib/puck/content-tree.js";import{FOOTER_TYPE as r,HEADER_TYPE as h,buildDefaultFooterBlocks as _,buildDefaultHeaderNode as b}from"../lib/puck/footer-blocks.js";import{canSeedPinnedChrome as L}from"../lib/puck/pinned-seed-gate.js";import{siteFooterDocChrome as U,SITE_FOOTER_TYPE as S}from"../lib/puck/section-groups.js";function $(t,y){const{capabilities:I,currentSlug:N,docId:a,data:E,saveStatus:g}=A(),{hasSiteSettings:D,hasPinnedChrome:F}=I,T=N===H,O=v().getState,P=w(null);x(()=>{if(!L({docId:a,saveStatus:g,seededDocId:P.current})||(P.current=a,!F))return;const d=O().appState.data,n=d.content,f=E?.content??[],c=(e,s)=>e.some(o=>o?.type===s);if(!D){const e=new Set(R(n)),s=e.size?n.filter(i=>!e.has(i.props.id)):n;e.size&&t.setDocument({...d,content:s});const o=G(s,f);if(o.includes(r)){const i=s.length,u=t.insertSection(r,i);t.replaceComponent(m,i,{type:r,props:{id:u,blocks:_()}})}o.includes(h)&&t.insertNode(m,0,b());return}if(T){const e=U(n);if(e!==n&&t.setDocument({...d,content:[...e]}),!e.find(o=>o.type===r)&&!c(f,r)&&!c(e,S)&&!c(f,S)){const o=(u,C)=>z(y,u,C),i={type:r,props:{blocks:_()}};t.insertNode(m,e.length,B(i,o,Y(S)))}return}const l=n.filter(e=>e.type!==r),k=new Set(R(l)),p=k.size?l.filter(e=>!k.has(e.props.id)):l;p.length!==n.length&&t.setDocument({...d,content:p}),!c(p,h)&&!c(f,h)&&t.insertNode(m,0,b())},[a,g,E,O,t,D,F,T])}export{$ as usePinnedChromeSeed};
1
+ "use client";import{useEffect as G,useRef as L}from"react";import{createNode as x,newId as z}from"efficient-easel/data";import{useEaselApi as U}from"efficient-easel/easel";import{useStorefrontDocument as Z}from"./StorefrontDocumentContext.js";import{SITE_FOOTER_SLUG as H}from"../lib/content/footer.js";import{boxFooterFromFooter as B}from"../lib/puck/box-footer.js";import{ROOT_ZONE as l,missingPinnedTypes as j,pinnedDuplicateIds as P}from"../lib/puck/content-tree.js";import{FOOTER_TYPE as c,HEADER_TYPE as p,buildDefaultFooterBlocks as D,buildDefaultHeaderNode as E}from"../lib/puck/footer-blocks.js";import{canSeedPinnedChrome as q}from"../lib/puck/pinned-seed-gate.js";import{siteFooterDocChrome as J,SITE_FOOTER_TYPE as f}from"../lib/puck/section-groups.js";import{inPlaceSeedPlan as K}from"../lib/puck/pinned-in-place-seed.js";function se(t,F){const{adapter:k,capabilities:T,currentSlug:O,docId:u,data:y,saveStatus:I}=Z(),{hasSiteSettings:N,hasPinnedChrome:b}=T,C=!!T.editsPinnedInPlace&&O!==H,R=O===H,_=U().getState,v=L(null);G(()=>{if(!q({docId:u,saveStatus:I,seededDocId:v.current})||(v.current=u,!b))return;const m=_().appState.data,o=m.content,a=y?.content??[],d=(e,n)=>e.some(r=>r?.type===n);if(!N){const e=new Set(P(o)),n=e.size?o.filter(s=>!e.has(s.props.id)):o;e.size&&t.setDocument({...m,content:n});const r=j(n,a);if(r.includes(c)){const s=n.length,i=t.insertSection(c,s);t.replaceComponent(l,s,{type:c,props:{id:i,blocks:D()}})}r.includes(p)&&t.insertNode(l,0,E());return}if(R){const e=J(o);if(e!==o&&t.setDocument({...m,content:[...e]}),!e.find(r=>r.type===c)&&!d(a,c)&&!d(e,f)&&!d(a,f)){const r=(i,g)=>x(F,i,g),s={type:c,props:{blocks:D()}};t.insertNode(l,e.length,B(s,r,z(f)))}return}if(C){const e=!!k?.pinnedChrome?.state().docId,n=K(o,{hasChromeDoc:e}),r=new Set([...n.remove,...P(o.filter(i=>!n.remove.includes(String(i.props.id))))]),s=r.size?o.filter(i=>!r.has(String(i.props.id))):o;if(s.length!==o.length&&t.setDocument({...m,content:s}),n.seedFooter&&!d(a,c)&&!d(a,f)){const i=(Y,A)=>x(F,Y,A),g={type:c,props:{blocks:D()}};t.insertNode(l,s.length,B(g,i,z(f)))}if(n.seedHeader&&!d(a,p)){const i=s[0]?.type==="SiteHeader"?1:0;t.insertNode(l,i,E())}return}const h=o.filter(e=>e.type!==c),w=new Set(P(h)),S=w.size?h.filter(e=>!w.has(e.props.id)):h;S.length!==o.length&&t.setDocument({...m,content:S}),!d(S,p)&&!d(a,p)&&t.insertNode(l,0,E())},[u,I,y,_,t,N,b,R,C,k])}export{se as usePinnedChromeSeed};
@@ -1 +1 @@
1
- "use client";import{SITE_FOOTER_SLUG as C}from"./content/footer.js";import{offeredSetsOf as F}from"./editor-blocks.js";import{isBackendError as y}from"./editor-backend-error.js";import{isEfficientBackend as H}from"./editor-session.js";import{noteLoaded as L,notePublished as A,noteSaved as O,pageLiveState as J}from"./page-live-state.js";import{spliceChrome as j,splitChrome as T}from"./pinned-chrome-doc.js";import{backendOf as k}from"./website-session.js";function b(t,i){const o=i?{siteId:i}:void 0;return{resolve:s=>t.load({slug:s,...o}).then(e=>(e&&L(e.id,e.live),e)),saveLayout:(s,e,c,m)=>t.save(s,{layout:e},{version:c,clientId:m??""}).then(u=>(O(s,u.live),u)),rereadVersion:t.version?s=>t.version(s):void 0,publish:t.publish?(s,e)=>t.publish(s,e?{version:e}:void 0).then(c=>(A(s,c.live),c)):void 0,listPages:()=>t.list(o),createPage:t.create?s=>t.create({...s,...o}):void 0,deletePage:t.remove?(s,e)=>t.remove(s,e):void 0}}function N(t,i,o,s){let e=null;const c=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=J(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&&c.has(n);return{resolve:async n=>{if(n===C)return o.resolve(n);const[r,l]=await Promise.all([o.resolve(n),t.load({slug:C,...i})]);if(l){L(l.id,l.live);const a=w(l.layout);e={id:l.id,layout:a,version:l.version,savedJson:""}}else e=null;if(m=!1,!r||!e)return f({conflict:null,saveFailed:!1}),r;const d=j(w(r.layout),e.layout);return e.savedJson=JSON.stringify(T(d,e.layout).chrome),c.add(r.id),f({conflict:null,saveFailed:!1}),{...r,layout:d}},saveLayout:async(n,r,l,d)=>{if(!e||!h(n))return o.saveLayout(n,r,l,d);const a=e,v=T(r,a.layout),B=await o.saveLayout(n,v.page,l,d),E=JSON.stringify(v.chrome);if(!v.chrome||E===a.savedJson||u.lockHolder)return B;try{const p=await t.save(a.id,{layout:v.chrome},{version:a.version,clientId:d??""});O(a.id,p.live),a.layout=v.chrome,a.version=p.version,a.savedJson=E,m=!0,f({conflict:null,saveFailed:!1})}catch(p){y(p,"changed-elsewhere")?f({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):y(p,"lock-taken")?f({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):f({saveFailed:!0})}return B},publish:o.publish?async(n,r)=>{const l=await o.publish(n,r),d=e;if(d&&h(n)&&t.publish&&P()&&!u.lockHolder){const a=await t.publish(d.id,d.version?{version:d.version}:void 0);A(d.id,a.live),a.version!==null&&(d.version=a.version),m=!1,f({})}return l}:void 0,lock:s?{claim:async(n,r,l)=>{const d=await s.claim(n,r,l),a=e;if(a&&h(n))try{await s.claim(a.id,r,!1),u.lockHolder&&f({lockHolder:null})}catch(v){y(v,"lock-taken")&&f({lockHolder:v.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}return d},release:async(n,r)=>{await s.release(n,r);const l=e;l&&h(n)&&!u.lockHolder&&await s.release(l.id,r).catch(()=>{})}}:void 0,pinnedChrome:{state:()=>u,subscribe:n=>(S.add(n),()=>{S.delete(n)})}}}function U(t,i=k(),o=F(),s={}){const e=H(i),c=t?{siteId:t}:void 0,m=e?!!t:!0,u=i.site.update,S=e&&o.commerce&&o.service,P=!!s.editsPinnedInPlace&&S,f=b(i.pages,t),w=P?N(i.pages,c,f,i.lock):null;return{capabilities:{canPublish:!!i.pages.publish,hasSiteSettings:e,hasSiteTheme:!!i.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!i.pages.create,canDeletePagesInline:!!i.pages.remove,hasEditLock:!!i.lock,hasEditGuard:!0,hasPinnedChrome:S,editsPinnedInPlace:P,explainsSiteSettings:!1,hasSiteRecord:m,canEditSiteRecord:m&&!!u,hasPreviewLink:e||!!i.preview,hasCatalog:e&&o.commerce,hasForms:e&&o.service,hasBlog:!!i.blog&&o.service,offersCommerce:o.commerce,offersService:o.service},...f,lock:i.lock,...w,site:m?()=>i.site.get(c):void 0,updateSite:m&&u?h=>u(h,c):void 0,previewHref:i.preview?h=>i.preview.href(h):void 0}}function V(t,i=k(),o=F()){const s=H(i),e=i.templates,c=e?e.pages(t):{list:()=>Promise.reject(new Error(g)),load:()=>Promise.reject(new Error(g)),save:()=>Promise.reject(new Error(g))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!c.create,canDeletePagesInline:!!c.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:s&&o.commerce&&o.service,editsPinnedInPlace:!1,explainsSiteSettings:s,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:s&&o.commerce,hasForms:s&&o.service,hasBlog:!!i.blog&&o.service,offersCommerce:o.commerce,offersService:o.service},...b(c,void 0),publish:void 0,templateName:e?()=>e.get(t).then(m=>m.name):void 0}}const g="This editor's backend has no website templates.";export{U as makeSitePageAdapter,V 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,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};
@@ -242,6 +242,7 @@ export declare const WEB_BUILDER_WORDS: {
242
242
  readonly "Category bar": "Category bar";
243
243
  readonly "Cell width": "Cell width";
244
244
  readonly Center: "Center";
245
+ readonly "Changed on every page": "Changed on every page";
245
246
  readonly "Changes apply to all selected.": "Changes apply to all selected.";
246
247
  readonly "Changes not live yet": "Changes not live yet";
247
248
  readonly Chart: "Chart";
@@ -403,6 +404,7 @@ export declare const WEB_BUILDER_WORDS: {
403
404
  readonly Equal: "Equal";
404
405
  readonly Essay: "Essay";
405
406
  readonly Even: "Even";
407
+ readonly "Every page": "Every page";
406
408
  readonly "Every {part} in this section follows it. The face and the size change; the letter case is the section\u2019s own and stays as it is.": "Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.";
407
409
  readonly "Everything else on this block comes from the linked post. Unlink it to edit by hand.": "Everything else on this block comes from the linked post. Unlink it to edit by hand.";
408
410
  readonly "Everything is live": "Everything is live";
@@ -454,6 +456,8 @@ export declare const WEB_BUILDER_WORDS: {
454
456
  readonly "Follows {name} \u2014 change": "Follows {name} — change";
455
457
  readonly Font: "Font";
456
458
  readonly "Footer Box": "Footer Box";
459
+ readonly "Footer \u00B7 on every page": "Footer · on every page";
460
+ readonly "Footer \u00B7 on every page \u00B7 old style": "Footer · on every page · old style";
457
461
  readonly Footnote: "Footnote";
458
462
  readonly Form: "Form";
459
463
  readonly "Form eyebrow": "Form eyebrow";
@@ -500,6 +504,8 @@ export declare const WEB_BUILDER_WORDS: {
500
504
  readonly Header: "Header";
501
505
  readonly "Header badge": "Header badge";
502
506
  readonly "Header settings belong to a website.": "Header settings belong to a website.";
507
+ readonly "Header \u00B7 on every page": "Header · on every page";
508
+ readonly "Header \u00B7 on every page \u00B7 old style": "Header · on every page · old style";
503
509
  readonly Heading: "Heading";
504
510
  readonly "Heading 1": "Heading 1";
505
511
  readonly "Heading 2": "Heading 2";
@@ -1021,6 +1027,10 @@ export declare const WEB_BUILDER_WORDS: {
1021
1027
  readonly "The current product's compatible tyres \u2014 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.";
1022
1028
  readonly "The current product's related items in a tidy row \u2014 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.";
1023
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
+ readonly "The footer cannot take another one of these": "The footer cannot take another one of these";
1031
+ readonly "The footer holds at most 6 sections": "The footer holds at most 6 sections";
1032
+ readonly "The header cannot take another one of these": "The header cannot take another one of these";
1033
+ readonly "The header holds at most 3 sections": "The header holds at most 3 sections";
1024
1034
  readonly "The only setting that changes a heading's capitals.": "The only setting that changes a heading's capitals.";
1025
1035
  readonly "The room left at the left and right edge of every page.": "The room left at the left and right edge of every page.";
1026
1036
  readonly "The section is full width, so this card follows Site styles \u25B8 Basics \u25B8 Corners.": "The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.";
@@ -1040,6 +1050,7 @@ export declare const WEB_BUILDER_WORDS: {
1040
1050
  readonly "This color is hard to read on your page background. Pick one further from it \u2014 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.";
1041
1051
  readonly "This color reads clearly on your pages.": "This color reads clearly on your pages.";
1042
1052
  readonly "This face": "This face";
1053
+ readonly "This footer uses the old layout": "This footer uses the old layout";
1043
1054
  readonly "This is the only card in the section.": "This is the only card in the section.";
1044
1055
  readonly "This part is no longer here.": "This part is no longer here.";
1045
1056
  readonly "This part's settings did not open.": "This part's settings did not open.";
@@ -1,11 +1,11 @@
1
1
  const e={"$ efficient …":"$ efficient …","0 min":"0 min","0 min read":"0 min read","01 / Section":"01 / Section","100s":"100s","1st rendering":"1st rendering","2nd rendering":"2nd rendering","30-day returns":"30-day returns","3rd rendering":"3rd rendering","4th rendering":"4th rendering","5th rendering":"5th rendering","A 'Show us yours.' headline with a photo-submission form.":"A 'Show us yours.' headline with a photo-submission form.","A big headline beside a stack of call-to-action buttons.":"A big headline beside a stack of call-to-action buttons.","A bold brand statement beside a full-height image, with a stat strip.":"A bold brand statement beside a full-height image, with a stat strip.","A call-to-action button.":"A call-to-action button.","A card's opening picture — a card pinned to a finish keeps its own.":"A card's opening picture — a card pinned to a finish keeps its own.","A centered 'ready to order?' headline with the checkout button.":"A centered 'ready to order?' headline with the checkout button.","A chat bubble on every page":"A chat bubble on every page","A corner would need a diagonal ramp, which this overlay does not draw.":"A corner would need a diagonal ramp, which this overlay does not draw.","A detail line":"A detail line","A display order-summary panel — items, totals and a note.":"A display order-summary panel — items, totals and a note.","A document header — headline, metadata and standfirst.":"A document header — headline, metadata and standfirst.","A featured article — big cover image beside a headline and dek.":"A featured article — big cover image beside a headline and dek.","A fitment table — per-size bolt patterns, offsets and load ratings, filterable by diameter.":"A fitment table — per-size bolt patterns, offsets and load ratings, filterable by diameter.","A frequently-asked-questions accordion with a header.":"A frequently-asked-questions accordion with a header.","A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.":"A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.","A heading over a grid of free-text title-and-blurb cards.":"A heading over a grid of free-text title-and-blurb cards.","A heading over columns of image, title, blurb and specs.":"A heading over columns of image, title, blurb and specs.","A headline beside a stylized product-UI mockup card — spec sheet, fitment, portal, kanban and more.":"A headline beside a stylized product-UI mockup card — spec sheet, fitment, portal, kanban and more.","A horizontal year track of milestones — company history or roadmap.":"A horizontal year track of milestones — company history or roadmap.","A journal issue header with a lead statement and contents.":"A journal issue header with a lead statement and contents.","A line or two of supporting copy.":"A line or two of supporting copy.","A long-form article spread with a pull-quote and cover image.":"A long-form article spread with a pull-quote and cover image.","A marquee cannot run diagonally, so the corners are not answers.":"A marquee cannot run diagonally, so the corners are not answers.","A milestone still to come.":"A milestone still to come.","A newsletter signup beside a list of recent issues.":"A newsletter signup beside a list of recent issues.","A newsletter signup beside your latest blog posts, pulled live.":"A newsletter signup beside your latest blog posts, pulled live.","A numbered section title with optional link.":"A numbered section title with optional link.","A paragraph of body copy.":"A paragraph of body copy.","A payment-methods trust strip with reassurance lines.":"A payment-methods trust strip with reassurance lines.","A picture worth\n*a thousand rows.*":`A picture worth
2
- *a thousand rows.*`,"A plain editorial text section — eyebrow, heading and body copy.":"A plain editorial text section — eyebrow, heading and body copy.","A product hero — image beside price, bullets and a buy button.":"A product hero — image beside price, bullets and a buy button.","A row of partner or brand logos.":"A row of partner or brand logos.","A scrolling marquee of short phrases, full width.":"A scrolling marquee of short phrases, full width.","A second customer quote — what they loved, in a sentence or two.":"A second customer quote — what they loved, in a sentence or two.","A section heading over a grid of column cards.":"A section heading over a grid of column cards.","A sentence or two of supporting copy.":"A sentence or two of supporting copy.","A short customer quote goes here — replace it with a real testimonial from your customers.":"A short customer quote goes here — replace it with a real testimonial from your customers.","A short customer quote goes here.":"A short customer quote goes here.","A short description of this recurring column.":"A short description of this recurring column.","A short lead paragraph introducing this section — a sentence or two about its theme.":"A short lead paragraph introducing this section — a sentence or two about its theme.","A short line about this card.":"A short line about this card.","A short line about this milestone.":"A short line about this milestone.","A short name so a link can jump straight to this section, like yoursite.com/page#about.":"A short name so a link can jump straight to this section, like yoursite.com/page#about.","A short pull quote.":"A short pull quote.","A short reassurance note under the total.":"A short reassurance note under the total.","A short summary of the article goes here.":"A short summary of the article goes here.","A short summary of the featured article — one or two sentences that draw the reader in.":"A short summary of the featured article — one or two sentences that draw the reader in.","A short summary of the post — one or two sentences.":"A short summary of the post — one or two sentences.","A single heading line.":"A single heading line.","A slim trail showing where the reader is (Home / Journal…).":"A slim trail showing where the reader is (Home / Journal…).","A spec sheet — labeled rows of product specifications.":"A spec sheet — labeled rows of product specifications.","A standalone image, at the width you set.":"A standalone image, at the width you set.","A sticky row of category tabs with counts and links.":"A sticky row of category tabs with counts and links.","A sticky tab bar to switch between documents.":"A sticky tab bar to switch between documents.","A template is a blueprint — it has no website of its own, so there is nothing here to change.":"A template is a blueprint — it has no website of its own, so there is nothing here to change.","A theme-color chip and heading over a grid of short feature labels.":"A theme-color chip and heading over a grid of short feature labels.","A thin horizontal rule between sections.":"A thin horizontal rule between sections.","A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.":"A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.","A third short quote to round out the row.":"A third short quote to round out the row.","A three-up meta strip for the foot of a document.":"A three-up meta strip for the foot of a document.","A titled chart — bars, line or donut — drawn from your own labeled data points.":"A titled chart — bars, line or donut — drawn from your own labeled data points.","A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.":"A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.","A world map of your locations with a legend — designed here, sold worldwide.":"A world map of your locations with a legend — designed here, sold worldwide.","A write-a-review form — submissions wait for your approval before they show.":"A write-a-review form — submissions wait for your approval before they show.","About & brand story":"About & brand story",Accent:"Accent","Accent button":"Accent button","Accent footnote":"Accent footnote","Active tab":"Active tab","Add a *headline* for this post.":"Add a *headline* for this post.","Add a *headline* for this story.":"Add a *headline* for this story.","Add a page":"Add a page","Add a sentence or two introducing this document.":"Add a sentence or two introducing this document.","Add a sentence or two of supporting copy.":"Add a sentence or two of supporting copy.","Add a short heading.":"Add a short heading.","Add a short statement here — a sentence or two is plenty.":"Add a short statement here — a sentence or two is plenty.","Add an office in the inspector":"Add an office in the inspector","Add another question":"Add another question","Add city":"Add city","Add group":"Add group","Add new theme":"Add new theme","Add page":"Add page","Add slide":"Add slide","Add this section's copy here.":"Add this section's copy here.","Add this section's copy here. A blank line starts a new paragraph.":"Add this section's copy here. A blank line starts a new paragraph.","Add your answer here — a sentence or two is plenty.":"Add your answer here — a sentence or two is plenty.","Add your answer here.":"Add your answer here.","Add your answer here. Keep it clear and concise so it stays easy to scan.":"Add your answer here. Keep it clear and concise so it stays easy to scan.","Add your first question":"Add your first question","Add your numbers.":"Add your numbers.",Address:"Address",After:"After",Alignment:"Alignment",All:"All","Alt text":"Alt text","Alternating (zig-zag)":"Alternating (zig-zag)",Amount:"Amount","An editorial aside beside a rail-marked timeline of dated entries.":"An editorial aside beside a rail-marked timeline of dated entries.","An editorial heading and paragraph over a row of theme-color-accented stat cards.":"An editorial heading and paragraph over a row of theme-color-accented stat cards.","An editorial text panel with a stat strip and founders' note.":"An editorial text panel with a stat strip and founders' note.","An empty section. Add whatever you want inside.":"An empty section. Add whatever you want inside.",Anchor:"Anchor","Anchor name":"Anchor name",Animation:"Animation","Another group already uses this heading — pick a different one.":"Another group already uses this heading — pick a different one.",Answer:"Answer","Any color":"Any color",App:"App","App chips":"App chips","App name":"App name",Appearance:"Appearance","Appearance settings belong to a website.":"Appearance settings belong to a website.","Applied to {n} card":"Applied to {n} card","Applied to {n} cards":"Applied to {n} cards","Apply to all cards":"Apply to all cards","Approved customer reviews in a star-rated card grid, pulled live.":"Approved customer reviews in a star-rated card grid, pulled live.",Arrows:"Arrows","Arrows placement":"Arrows placement","Arrows shape":"Arrows shape",Article:"Article","Article *headline* goes here.":"Article *headline* goes here.","Article Text":"Article Text","Article headline":"Article headline","Article title":"Article title","As designed":"As designed","As shot":"As shot","As typed":"As typed","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","Auto = the accent phrase takes the heading's own weight.":"Auto = the accent phrase takes the heading's own weight.","Auto = this style states no size, and text following it keeps the size its section drew.":"Auto = this style states no size, and text following it keeps the size its section drew.","Auto contrast":"Auto contrast","Auto-advance slides":"Auto-advance slides","Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.":"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.","Auto-slide":"Auto-slide","Avg rating":"Avg rating",Background:"Background","Background image":"Background image","Background images":"Background images","Background video":"Background video",Badge:"Badge",Banner:"Banner","Banner headline":"Banner headline",Bar:"Bar",Bare:"Bare",Bars:"Bars","Bars (comparison / funnel)":"Bars (comparison / funnel)","Bars heading":"Bars heading",Basics:"Basics",Before:"Before","Begin reading":"Begin reading","Below picture":"Below picture","Big first":"Big first","Big left":"Big left","Big right":"Big right","Big stat":"Big stat","Bigger left":"Bigger left","Bigger right":"Bigger right","Black and white":"Black and white","Black and white logos":"Black and white logos",Block:"Block","Block gap":"Block gap","Block spacing":"Block spacing","Block widths":"Block widths","Blog & journal":"Blog & journal","Blog post":"Blog post","Blog post source":"Blog post source",Body:"Body",Bold:"Bold","Bold is the weight above — one value, two ways to set it.":"Bold is the weight above — one value, two ways to set it.","Bold word":"Bold word","Booking Form":"Booking Form",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","Brand Strip":"Brand Strip","Brand Text":"Brand Text","Brand name":"Brand name",Breadcrumb:"Breadcrumb",Brick:"Brick","Browser mock":"Browser mock","Browser storefront (hero + tiles)":"Browser storefront (hero + tiles)","Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.":"Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.","Bundle Products":"Bundle Products",Button:"Button","Button Right Text":"Button Right Text","Button color":"Button color","Button label":"Button label","Button link":"Button link","Button text color":"Button text color",Buttons:"Buttons","Buy button":"Buy button","By the *numbers*":"By the *numbers*","By the numbers":"By the numbers","Call-to-Action Heading":"Call-to-Action Heading",Cancel:"Cancel",Capitals:"Capitals","Caps the biggest heading on the site. Auto = each section's own.":"Caps the biggest heading on the site. Auto = each section's own.",Caption:"Caption",Card:"Card","Card body":"Card body","Card button":"Card button","Card header strip":"Card header strip","Card height":"Card height","Card image":"Card image","Card layout":"Card layout","Card link":"Card link","Card number":"Card number","Card outline":"Card outline","Card shadow":"Card shadow","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changes apply to all selected.":"Changes apply to all selected.","Changes not live yet":"Changes not live yet",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","Choose a background image first — there’s nothing to focus yet.":"Choose a background image first — there’s nothing to focus yet.","Choose a page":"Choose a page","Choose a post":"Choose a post","Choose a product":"Choose a product","Choose a section":"Choose a section","Cities in this group":"Cities in this group",City:"City","City strip":"City strip","Claims bars":"Claims bars","Claims panel (rows + defect bars)":"Claims panel (rows + defect bars)",Clear:"Clear","Clear change":"Clear change","Clear change: {label}":"Clear change: {label}","Clear colors":"Clear colors","Clear formatting":"Clear formatting","Clear override":"Clear override","Clear override: {label}":"Clear override: {label}","Clear this site’s colors?":"Clear this site’s colors?","Clear {what}":"Clear {what}","Clear {what}: {label}":"Clear {what}: {label}",Collections:"Collections",Color:"Color","Column *title.*":"Column *title.*","Column 1 cards":"Column 1 cards","Column 1 title":"Column 1 title","Column 2 cards":"Column 2 cards","Column 2 title":"Column 2 title","Column 3 cards":"Column 3 cards","Column 3 title":"Column 3 title","Column 4 cards":"Column 4 cards","Column 4 title":"Column 4 title","Column {n}":"Column {n}",Columns:"Columns","Columns on phone":"Columns on phone",Compressed:"Compressed","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content position":"Content position","Content width":"Content width",Contents:"Contents","Contents heading":"Contents heading","Contents label":"Contents label",Coordinates:"Coordinates","Coordinates from OpenStreetMap":"Coordinates from OpenStreetMap","Copy above image":"Copy above image","Copy over image":"Copy over image","Copying…":"Copying…",Corners:"Corners","Couldn’t add the page — please retry.":"Couldn’t add the page — please retry.","Couldn’t delete the page — please retry.":"Couldn’t delete the page — please retry.","Couldn’t duplicate the section — please retry":"Couldn’t duplicate the section — please retry","Couldn’t load pages":"Couldn’t load pages","Couldn’t open the media picker — please try again.":"Couldn’t open the media picker — please try again.","Couldn’t open this section.":"Couldn’t open this section.","Couldn’t reach {place}.":"Couldn’t reach {place}.",Count:"Count",Countdown:"Countdown",Country:"Country","Country Switch":"Country Switch",Cover:"Cover","Cover image":"Cover image","Cross ✕":"Cross ✕",Crumbs:"Crumbs","Current page":"Current page","Custom HTML":"Custom HTML","Custom URL":"Custom URL","Customer Photo Grid":"Customer Photo Grid","Customer name":"Customer name","Customer photos in a card grid with a click-to-open lightbox.":"Customer photos in a card grid with a click-to-open lightbox.","Customer quotes in a grid — the quote, a name and a role.":"Customer quotes in a grid — the quote, a name and a role.",Dark:"Dark","Dark band":"Dark band",Darken:"Darken","Darken style":"Darken style","Data points":"Data points",Date:"Date","Deck / standfirst":"Deck / standfirst",Default:"Default","Defect rate by product":"Defect rate by product",Dek:"Dek","Delete city":"Delete city","Delete group ({n} cities)":"Delete group ({n} cities)","Delete group ({n} city)":"Delete group ({n} city)","Delete {label} group ({n} cities)":"Delete {label} group ({n} cities)","Delete {label} group ({n} city)":"Delete {label} group ({n} city)","Delete {name}":"Delete {name}","Delete “{name}”":"Delete “{name}”","Deleted “{name}”":"Deleted “{name}”",Delivery:"Delivery","Delivery Options":"Delivery Options","Delivery tiers as cards — name, window and price, one highlighted.":"Delivery tiers as cards — name, window and price, one highlighted.","Describe this section in a sentence or two.":"Describe this section in a sentence or two.","Describe this step in a sentence or two.":"Describe this step in a sentence or two.","Describe what happened, in a sentence or two.":"Describe what happened, in a sentence or two.",Design:"Design",Detail:"Detail","Detail line":"Detail line",Direction:"Direction","Directions link":"Directions link","Dismiss link":"Dismiss link",Display:"Display",Divider:"Divider","Document Detail Cards":"Document Detail Cards","Document Header":"Document Header","Document Tabs":"Document Tabs","Document Text":"Document Text","Document body":"Document body","Document masthead":"Document masthead","Document tabs":"Document tabs",Done:"Done","Done {name}":"Done {name}","Donut (split of a whole)":"Donut (split of a whole)","Dot ●":"Dot ●",Dots:"Dots",Down:"Down","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each website created from this template sets its own appearance afterwards.":"Each website created from this template sets its own appearance afterwards.","Each website created from this template sets its own header afterwards.":"Each website created from this template sets its own header afterwards.","Each website created from this template sets its own live chat afterwards.":"Each website created from this template sets its own live chat afterwards.","Each website created from this template sets its own social link afterwards.":"Each website created from this template sets its own social link afterwards.","Each website created from this template sets its own {what} afterwards.":"Each website created from this template sets its own {what} afterwards.","Easy to read":"Easy to read",Edit:"Edit","Edit {name}":"Edit {name}","Edit “{name}” in {place}":"Edit “{name}” in {place}","Editing {name} changes it everywhere.":"Editing {name} changes it everywhere.","Editor only — not shown live":"Editor only — not shown live",Editorial:"Editorial","Editorial Text":"Editorial Text",Email:"Email","Email Form":"Email Form","Email signup":"Email signup",Empty:"Empty",End:"End",Ends:"Ends","Enter coordinates manually":"Enter coordinates manually",Entrance:"Entrance",Entries:"Entries","Entries count":"Entries count",Equal:"Equal",Essay:"Essay",Even:"Even","Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.":"Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.","Everything else on this block comes from the linked post. Unlink it to edit by hand.":"Everything else on this block comes from the linked post. Unlink it to edit by hand.","Everything is live":"Everything is live",Excerpt:"Excerpt",Eyebrow:"Eyebrow","Eyebrow style":"Eyebrow style",Facebook:"Facebook",Fade:"Fade",Feature:"Feature","Feature Banner":"Feature Banner","Feature Rows":"Feature Rows","Feature label":"Feature label","Feature label five":"Feature label five","Feature label four":"Feature label four","Feature label one":"Feature label one","Feature label six":"Feature label six","Feature label three":"Feature label three","Feature label two":"Feature label two","Feature story":"Feature story",Featured:"Featured","Featured *image*":"Featured *image*","Featured cover":"Featured cover",Features:"Features",Feedback:"Feedback","Field label":"Field label","Field notes":"Field notes",Fill:"Fill",Filled:"Filled","Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.":"Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.","Find coordinates":"Find coordinates","Finding…":"Finding…","Fine print":"Fine print","Finish swatches":"Finish swatches","Finish · Size · ×1":"Finish · Size · ×1","First item":"First item","First section":"First section","Fit content":"Fit content","Fitment Form":"Fitment Form","Fitment Table":"Fitment Table",Fixed:"Fixed","Fixed size — the site’s Text setting doesn’t resize this.":"Fixed size — the site’s Text setting doesn’t resize this.","Follow the page":"Follow the page","Follow the slideshow":"Follow the slideshow","Follows Desktop":"Follows Desktop","Follows no style — change":"Follows no style — change","Follows the section's Corners until you set a number here.":"Follows the section's Corners until you set a number here.","Follows the site":"Follows the site","Follows the style":"Follows the style","Follows {name} — change":"Follows {name} — change",Font:"Font","Footer Box":"Footer Box",Footnote:"Footnote",Form:"Form","Form eyebrow":"Form eyebrow","Form heading":"Form heading","Form intro":"Form intro","Formatting — click a row first":"Formatting — click a row first","Formatting — row {n}":"Formatting — row {n}",Founders:"Founders","Founders heading":"Founders heading","Founders statement":"Founders statement","Four across":"Four across","Four stagger":"Four stagger",Frequency:"Frequency","Frequently *asked.*":"Frequently *asked.*","From the bottom":"From the bottom",Full:"Full","Full width":"Full width","Full-bleed intro image the next section scrolls over.":"Full-bleed intro image the next section scrolls over.","Full-screen image or video with a headline.":"Full-screen image or video with a headline.","Full-screen opener with rotating slides.":"Full-screen opener with rotating slides.",Gap:"Gap","Gap only":"Gap only","Give the new template page a name. It starts blank — add sections once it opens.":"Give the new template page a name. It starts blank — add sections once it opens.","Gives the other card this card's Corners.":"Gives the other card this card's Corners.","Gives the other {n} cards this card's Corners.":"Gives the other {n} cards this card's Corners.",Good:"Good","Greeting message":"Greeting message",Grid:"Grid",Group:"Group","Group heading":"Group heading","Group name":"Group name",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HQ:"HQ",HTML:"HTML",Hairline:"Hairline","Hairline borders":"Hairline borders","Hand-picked products in a tidy grid.":"Hand-picked products in a tidy grid.","Hard to read":"Hard to read",Header:"Header","Header badge":"Header badge","Header settings belong to a website.":"Header settings belong to a website.",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading font size":"Heading font size",Headings:"Headings",Headquarters:"Headquarters",Height:"Height",Hero:"Hero","Hero & intros":"Hero & intros","Hero Slide":"Hero Slide","Hero Slideshow":"Hero Slideshow","Hero button":"Hero button","Hero image":"Hero image","Hero line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide {label} on the slide":"Hide {label} on the slide",Highlight:"Highlight","Highlight key numbers — years, designs.":"Highlight key numbers — years, designs.","Highlight line":"Highlight line",Hint:"Hint","Hold video":"Hold video",Home:"Home","Hours, minutes and seconds to a set date and time, then one line.":"Hours, minutes and seconds to a set date and time, then one line.","Hover effect":"Hover effect",Icon:"Icon","Icon after text":"Icon after text","Icon before text":"Icon before text","Icon position":"Icon position","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image background":"Image background","Image caption":"Image caption","Image column":"Image column","Image date":"Image date","Image fit":"Image fit","Image focus":"Image focus","Image label":"Image label","Image left":"Image left","Image meta":"Image meta","Image right":"Image right","Image side":"Image side","Image stage":"Image stage","Image tint":"Image tint","Image width":"Image width","In its own box":"In its own box","In progress (accent)":"In progress (accent)","In the product":"In the product","In this issue":"In this issue","In this section":"In this section","In your own time zone. Every visitor counts down to the same moment.":"In your own time zone. Every visitor counts down to the same moment.",Instagram:"Instagram",Integrations:"Integrations","Integrations Grid":"Integrations Grid",Interview:"Interview",Intro:"Intro","Introduce your company in a paragraph or two.":"Introduce your company in a paragraph or two.","Issue Header":"Issue Header","Issue lines":"Issue lines","Issue meta lines":"Issue meta lines",Italic:"Italic","Italic is not saved yet — the theme row has no column for it (card 66162.b).":"Italic is not saved yet — the theme row has no column for it (card 66162.b).",Item:"Item","Item alignment":"Item alignment",Items:"Items","Items from":"Items from","Its own":"Its own","Its size follows Site styles ▸ {follows} — {px}px right now.":"Its size follows Site styles ▸ {follows} — {px}px right now.","Its size follows Site styles ▸ {follows}.":"Its size follows Site styles ▸ {follows}.","Job card label":"Job card label",Join:"Join","Jumps to a section on that page.":"Jumps to a section on that page.",Justify:"Justify","Kanban board (job columns)":"Kanban board (job columns)","Kanban columns":"Kanban columns","Keep this section's own built-in size":"Keep this section's own built-in size","Key *features.*":"Key *features.*","Key Features":"Key Features",LINE:"LINE",LIVE:"LIVE",Label:"Label","Label color":"Label color",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Largest size":"Largest size","Latest Posts":"Latest Posts","Latest journal posts in a three-card row.":"Latest journal posts in a three-card row.",Latitude:"Latitude",Layout:"Layout","Layout & structure":"Layout & structure","Layout, structure & embeds":"Layout, structure & embeds",Lead:"Lead","Lead Text":"Lead Text","Learn more":"Learn more","Leave a blank line between paragraphs to start a new one.":"Leave a blank line between paragraphs to start a new one.","Leave a field blank to use the built-in wording.":"Leave a field blank to use the built-in wording.",Left:"Left","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line & text gap":"Line & text gap","Line (trend)":"Line (trend)","Line gap {line} · text gap {letter}em.":"Line gap {line} · text gap {letter}em.",Link:"Link","Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.":"Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.","Linked to “{name}”":"Linked to “{name}”",LinkedIn:"LinkedIn",Links:"Links","Links to":"Links to",List:"List","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading…":"Loading…","Location name":"Location name",Locations:"Locations","Locations Map":"Locations Map",Logo:"Logo","Logo alt text":"Logo alt text","Logo color":"Logo color","Logo description":"Logo description","Logo five":"Logo five","Logo four":"Logo four","Logo height":"Logo height","Logo image":"Logo image","Logo one":"Logo one","Logo three":"Logo three","Logo two":"Logo two",Logos:"Logos","Long read":"Long read","Long-form document body with an 'On this page' contents list.":"Long-form document body with an 'On this page' contents list.",Longitude:"Longitude",Look:"Look",Main:"Main","Main Pages":"Main Pages","Main color":"Main color","Main heading":"Main heading","Main heading\n*Highlight line*":`Main heading
2
+ *a thousand rows.*`,"A plain editorial text section — eyebrow, heading and body copy.":"A plain editorial text section — eyebrow, heading and body copy.","A product hero — image beside price, bullets and a buy button.":"A product hero — image beside price, bullets and a buy button.","A row of partner or brand logos.":"A row of partner or brand logos.","A scrolling marquee of short phrases, full width.":"A scrolling marquee of short phrases, full width.","A second customer quote — what they loved, in a sentence or two.":"A second customer quote — what they loved, in a sentence or two.","A section heading over a grid of column cards.":"A section heading over a grid of column cards.","A sentence or two of supporting copy.":"A sentence or two of supporting copy.","A short customer quote goes here — replace it with a real testimonial from your customers.":"A short customer quote goes here — replace it with a real testimonial from your customers.","A short customer quote goes here.":"A short customer quote goes here.","A short description of this recurring column.":"A short description of this recurring column.","A short lead paragraph introducing this section — a sentence or two about its theme.":"A short lead paragraph introducing this section — a sentence or two about its theme.","A short line about this card.":"A short line about this card.","A short line about this milestone.":"A short line about this milestone.","A short name so a link can jump straight to this section, like yoursite.com/page#about.":"A short name so a link can jump straight to this section, like yoursite.com/page#about.","A short pull quote.":"A short pull quote.","A short reassurance note under the total.":"A short reassurance note under the total.","A short summary of the article goes here.":"A short summary of the article goes here.","A short summary of the featured article — one or two sentences that draw the reader in.":"A short summary of the featured article — one or two sentences that draw the reader in.","A short summary of the post — one or two sentences.":"A short summary of the post — one or two sentences.","A single heading line.":"A single heading line.","A slim trail showing where the reader is (Home / Journal…).":"A slim trail showing where the reader is (Home / Journal…).","A spec sheet — labeled rows of product specifications.":"A spec sheet — labeled rows of product specifications.","A standalone image, at the width you set.":"A standalone image, at the width you set.","A sticky row of category tabs with counts and links.":"A sticky row of category tabs with counts and links.","A sticky tab bar to switch between documents.":"A sticky tab bar to switch between documents.","A template is a blueprint — it has no website of its own, so there is nothing here to change.":"A template is a blueprint — it has no website of its own, so there is nothing here to change.","A theme-color chip and heading over a grid of short feature labels.":"A theme-color chip and heading over a grid of short feature labels.","A thin horizontal rule between sections.":"A thin horizontal rule between sections.","A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.":"A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.","A third short quote to round out the row.":"A third short quote to round out the row.","A three-up meta strip for the foot of a document.":"A three-up meta strip for the foot of a document.","A titled chart — bars, line or donut — drawn from your own labeled data points.":"A titled chart — bars, line or donut — drawn from your own labeled data points.","A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.":"A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.","A world map of your locations with a legend — designed here, sold worldwide.":"A world map of your locations with a legend — designed here, sold worldwide.","A write-a-review form — submissions wait for your approval before they show.":"A write-a-review form — submissions wait for your approval before they show.","About & brand story":"About & brand story",Accent:"Accent","Accent button":"Accent button","Accent footnote":"Accent footnote","Active tab":"Active tab","Add a *headline* for this post.":"Add a *headline* for this post.","Add a *headline* for this story.":"Add a *headline* for this story.","Add a page":"Add a page","Add a sentence or two introducing this document.":"Add a sentence or two introducing this document.","Add a sentence or two of supporting copy.":"Add a sentence or two of supporting copy.","Add a short heading.":"Add a short heading.","Add a short statement here — a sentence or two is plenty.":"Add a short statement here — a sentence or two is plenty.","Add an office in the inspector":"Add an office in the inspector","Add another question":"Add another question","Add city":"Add city","Add group":"Add group","Add new theme":"Add new theme","Add page":"Add page","Add slide":"Add slide","Add this section's copy here.":"Add this section's copy here.","Add this section's copy here. A blank line starts a new paragraph.":"Add this section's copy here. A blank line starts a new paragraph.","Add your answer here — a sentence or two is plenty.":"Add your answer here — a sentence or two is plenty.","Add your answer here.":"Add your answer here.","Add your answer here. Keep it clear and concise so it stays easy to scan.":"Add your answer here. Keep it clear and concise so it stays easy to scan.","Add your first question":"Add your first question","Add your numbers.":"Add your numbers.",Address:"Address",After:"After",Alignment:"Alignment",All:"All","Alt text":"Alt text","Alternating (zig-zag)":"Alternating (zig-zag)",Amount:"Amount","An editorial aside beside a rail-marked timeline of dated entries.":"An editorial aside beside a rail-marked timeline of dated entries.","An editorial heading and paragraph over a row of theme-color-accented stat cards.":"An editorial heading and paragraph over a row of theme-color-accented stat cards.","An editorial text panel with a stat strip and founders' note.":"An editorial text panel with a stat strip and founders' note.","An empty section. Add whatever you want inside.":"An empty section. Add whatever you want inside.",Anchor:"Anchor","Anchor name":"Anchor name",Animation:"Animation","Another group already uses this heading — pick a different one.":"Another group already uses this heading — pick a different one.",Answer:"Answer","Any color":"Any color",App:"App","App chips":"App chips","App name":"App name",Appearance:"Appearance","Appearance settings belong to a website.":"Appearance settings belong to a website.","Applied to {n} card":"Applied to {n} card","Applied to {n} cards":"Applied to {n} cards","Apply to all cards":"Apply to all cards","Approved customer reviews in a star-rated card grid, pulled live.":"Approved customer reviews in a star-rated card grid, pulled live.",Arrows:"Arrows","Arrows placement":"Arrows placement","Arrows shape":"Arrows shape",Article:"Article","Article *headline* goes here.":"Article *headline* goes here.","Article Text":"Article Text","Article headline":"Article headline","Article title":"Article title","As designed":"As designed","As shot":"As shot","As typed":"As typed","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","Auto = the accent phrase takes the heading's own weight.":"Auto = the accent phrase takes the heading's own weight.","Auto = this style states no size, and text following it keeps the size its section drew.":"Auto = this style states no size, and text following it keeps the size its section drew.","Auto contrast":"Auto contrast","Auto-advance slides":"Auto-advance slides","Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.":"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.","Auto-slide":"Auto-slide","Avg rating":"Avg rating",Background:"Background","Background image":"Background image","Background images":"Background images","Background video":"Background video",Badge:"Badge",Banner:"Banner","Banner headline":"Banner headline",Bar:"Bar",Bare:"Bare",Bars:"Bars","Bars (comparison / funnel)":"Bars (comparison / funnel)","Bars heading":"Bars heading",Basics:"Basics",Before:"Before","Begin reading":"Begin reading","Below picture":"Below picture","Big first":"Big first","Big left":"Big left","Big right":"Big right","Big stat":"Big stat","Bigger left":"Bigger left","Bigger right":"Bigger right","Black and white":"Black and white","Black and white logos":"Black and white logos",Block:"Block","Block gap":"Block gap","Block spacing":"Block spacing","Block widths":"Block widths","Blog & journal":"Blog & journal","Blog post":"Blog post","Blog post source":"Blog post source",Body:"Body",Bold:"Bold","Bold is the weight above — one value, two ways to set it.":"Bold is the weight above — one value, two ways to set it.","Bold word":"Bold word","Booking Form":"Booking Form",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","Brand Strip":"Brand Strip","Brand Text":"Brand Text","Brand name":"Brand name",Breadcrumb:"Breadcrumb",Brick:"Brick","Browser mock":"Browser mock","Browser storefront (hero + tiles)":"Browser storefront (hero + tiles)","Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.":"Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.","Bundle Products":"Bundle Products",Button:"Button","Button Right Text":"Button Right Text","Button color":"Button color","Button label":"Button label","Button link":"Button link","Button text color":"Button text color",Buttons:"Buttons","Buy button":"Buy button","By the *numbers*":"By the *numbers*","By the numbers":"By the numbers","Call-to-Action Heading":"Call-to-Action Heading",Cancel:"Cancel",Capitals:"Capitals","Caps the biggest heading on the site. Auto = each section's own.":"Caps the biggest heading on the site. Auto = each section's own.",Caption:"Caption",Card:"Card","Card body":"Card body","Card button":"Card button","Card header strip":"Card header strip","Card height":"Card height","Card image":"Card image","Card layout":"Card layout","Card link":"Card link","Card number":"Card number","Card outline":"Card outline","Card shadow":"Card shadow","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changed on every page":"Changed on every page","Changes apply to all selected.":"Changes apply to all selected.","Changes not live yet":"Changes not live yet",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","Choose a background image first — there’s nothing to focus yet.":"Choose a background image first — there’s nothing to focus yet.","Choose a page":"Choose a page","Choose a post":"Choose a post","Choose a product":"Choose a product","Choose a section":"Choose a section","Cities in this group":"Cities in this group",City:"City","City strip":"City strip","Claims bars":"Claims bars","Claims panel (rows + defect bars)":"Claims panel (rows + defect bars)",Clear:"Clear","Clear change":"Clear change","Clear change: {label}":"Clear change: {label}","Clear colors":"Clear colors","Clear formatting":"Clear formatting","Clear override":"Clear override","Clear override: {label}":"Clear override: {label}","Clear this site’s colors?":"Clear this site’s colors?","Clear {what}":"Clear {what}","Clear {what}: {label}":"Clear {what}: {label}",Collections:"Collections",Color:"Color","Column *title.*":"Column *title.*","Column 1 cards":"Column 1 cards","Column 1 title":"Column 1 title","Column 2 cards":"Column 2 cards","Column 2 title":"Column 2 title","Column 3 cards":"Column 3 cards","Column 3 title":"Column 3 title","Column 4 cards":"Column 4 cards","Column 4 title":"Column 4 title","Column {n}":"Column {n}",Columns:"Columns","Columns on phone":"Columns on phone",Compressed:"Compressed","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content position":"Content position","Content width":"Content width",Contents:"Contents","Contents heading":"Contents heading","Contents label":"Contents label",Coordinates:"Coordinates","Coordinates from OpenStreetMap":"Coordinates from OpenStreetMap","Copy above image":"Copy above image","Copy over image":"Copy over image","Copying…":"Copying…",Corners:"Corners","Couldn’t add the page — please retry.":"Couldn’t add the page — please retry.","Couldn’t delete the page — please retry.":"Couldn’t delete the page — please retry.","Couldn’t duplicate the section — please retry":"Couldn’t duplicate the section — please retry","Couldn’t load pages":"Couldn’t load pages","Couldn’t open the media picker — please try again.":"Couldn’t open the media picker — please try again.","Couldn’t open this section.":"Couldn’t open this section.","Couldn’t reach {place}.":"Couldn’t reach {place}.",Count:"Count",Countdown:"Countdown",Country:"Country","Country Switch":"Country Switch",Cover:"Cover","Cover image":"Cover image","Cross ✕":"Cross ✕",Crumbs:"Crumbs","Current page":"Current page","Custom HTML":"Custom HTML","Custom URL":"Custom URL","Customer Photo Grid":"Customer Photo Grid","Customer name":"Customer name","Customer photos in a card grid with a click-to-open lightbox.":"Customer photos in a card grid with a click-to-open lightbox.","Customer quotes in a grid — the quote, a name and a role.":"Customer quotes in a grid — the quote, a name and a role.",Dark:"Dark","Dark band":"Dark band",Darken:"Darken","Darken style":"Darken style","Data points":"Data points",Date:"Date","Deck / standfirst":"Deck / standfirst",Default:"Default","Defect rate by product":"Defect rate by product",Dek:"Dek","Delete city":"Delete city","Delete group ({n} cities)":"Delete group ({n} cities)","Delete group ({n} city)":"Delete group ({n} city)","Delete {label} group ({n} cities)":"Delete {label} group ({n} cities)","Delete {label} group ({n} city)":"Delete {label} group ({n} city)","Delete {name}":"Delete {name}","Delete “{name}”":"Delete “{name}”","Deleted “{name}”":"Deleted “{name}”",Delivery:"Delivery","Delivery Options":"Delivery Options","Delivery tiers as cards — name, window and price, one highlighted.":"Delivery tiers as cards — name, window and price, one highlighted.","Describe this section in a sentence or two.":"Describe this section in a sentence or two.","Describe this step in a sentence or two.":"Describe this step in a sentence or two.","Describe what happened, in a sentence or two.":"Describe what happened, in a sentence or two.",Design:"Design",Detail:"Detail","Detail line":"Detail line",Direction:"Direction","Directions link":"Directions link","Dismiss link":"Dismiss link",Display:"Display",Divider:"Divider","Document Detail Cards":"Document Detail Cards","Document Header":"Document Header","Document Tabs":"Document Tabs","Document Text":"Document Text","Document body":"Document body","Document masthead":"Document masthead","Document tabs":"Document tabs",Done:"Done","Done {name}":"Done {name}","Donut (split of a whole)":"Donut (split of a whole)","Dot ●":"Dot ●",Dots:"Dots",Down:"Down","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each website created from this template sets its own appearance afterwards.":"Each website created from this template sets its own appearance afterwards.","Each website created from this template sets its own header afterwards.":"Each website created from this template sets its own header afterwards.","Each website created from this template sets its own live chat afterwards.":"Each website created from this template sets its own live chat afterwards.","Each website created from this template sets its own social link afterwards.":"Each website created from this template sets its own social link afterwards.","Each website created from this template sets its own {what} afterwards.":"Each website created from this template sets its own {what} afterwards.","Easy to read":"Easy to read",Edit:"Edit","Edit {name}":"Edit {name}","Edit “{name}” in {place}":"Edit “{name}” in {place}","Editing {name} changes it everywhere.":"Editing {name} changes it everywhere.","Editor only — not shown live":"Editor only — not shown live",Editorial:"Editorial","Editorial Text":"Editorial Text",Email:"Email","Email Form":"Email Form","Email signup":"Email signup",Empty:"Empty",End:"End",Ends:"Ends","Enter coordinates manually":"Enter coordinates manually",Entrance:"Entrance",Entries:"Entries","Entries count":"Entries count",Equal:"Equal",Essay:"Essay",Even:"Even","Every page":"Every page","Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.":"Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.","Everything else on this block comes from the linked post. Unlink it to edit by hand.":"Everything else on this block comes from the linked post. Unlink it to edit by hand.","Everything is live":"Everything is live",Excerpt:"Excerpt",Eyebrow:"Eyebrow","Eyebrow style":"Eyebrow style",Facebook:"Facebook",Fade:"Fade",Feature:"Feature","Feature Banner":"Feature Banner","Feature Rows":"Feature Rows","Feature label":"Feature label","Feature label five":"Feature label five","Feature label four":"Feature label four","Feature label one":"Feature label one","Feature label six":"Feature label six","Feature label three":"Feature label three","Feature label two":"Feature label two","Feature story":"Feature story",Featured:"Featured","Featured *image*":"Featured *image*","Featured cover":"Featured cover",Features:"Features",Feedback:"Feedback","Field label":"Field label","Field notes":"Field notes",Fill:"Fill",Filled:"Filled","Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.":"Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.","Find coordinates":"Find coordinates","Finding…":"Finding…","Fine print":"Fine print","Finish swatches":"Finish swatches","Finish · Size · ×1":"Finish · Size · ×1","First item":"First item","First section":"First section","Fit content":"Fit content","Fitment Form":"Fitment Form","Fitment Table":"Fitment Table",Fixed:"Fixed","Fixed size — the site’s Text setting doesn’t resize this.":"Fixed size — the site’s Text setting doesn’t resize this.","Follow the page":"Follow the page","Follow the slideshow":"Follow the slideshow","Follows Desktop":"Follows Desktop","Follows no style — change":"Follows no style — change","Follows the section's Corners until you set a number here.":"Follows the section's Corners until you set a number here.","Follows the site":"Follows the site","Follows the style":"Follows the style","Follows {name} — change":"Follows {name} — change",Font:"Font","Footer Box":"Footer Box","Footer · on every page":"Footer · on every page","Footer · on every page · old style":"Footer · on every page · old style",Footnote:"Footnote",Form:"Form","Form eyebrow":"Form eyebrow","Form heading":"Form heading","Form intro":"Form intro","Formatting — click a row first":"Formatting — click a row first","Formatting — row {n}":"Formatting — row {n}",Founders:"Founders","Founders heading":"Founders heading","Founders statement":"Founders statement","Four across":"Four across","Four stagger":"Four stagger",Frequency:"Frequency","Frequently *asked.*":"Frequently *asked.*","From the bottom":"From the bottom",Full:"Full","Full width":"Full width","Full-bleed intro image the next section scrolls over.":"Full-bleed intro image the next section scrolls over.","Full-screen image or video with a headline.":"Full-screen image or video with a headline.","Full-screen opener with rotating slides.":"Full-screen opener with rotating slides.",Gap:"Gap","Gap only":"Gap only","Give the new template page a name. It starts blank — add sections once it opens.":"Give the new template page a name. It starts blank — add sections once it opens.","Gives the other card this card's Corners.":"Gives the other card this card's Corners.","Gives the other {n} cards this card's Corners.":"Gives the other {n} cards this card's Corners.",Good:"Good","Greeting message":"Greeting message",Grid:"Grid",Group:"Group","Group heading":"Group heading","Group name":"Group name",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HQ:"HQ",HTML:"HTML",Hairline:"Hairline","Hairline borders":"Hairline borders","Hand-picked products in a tidy grid.":"Hand-picked products in a tidy grid.","Hard to read":"Hard to read",Header:"Header","Header badge":"Header badge","Header settings belong to a website.":"Header settings belong to a website.","Header · on every page":"Header · on every page","Header · on every page · old style":"Header · on every page · old style",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading font size":"Heading font size",Headings:"Headings",Headquarters:"Headquarters",Height:"Height",Hero:"Hero","Hero & intros":"Hero & intros","Hero Slide":"Hero Slide","Hero Slideshow":"Hero Slideshow","Hero button":"Hero button","Hero image":"Hero image","Hero line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide {label} on the slide":"Hide {label} on the slide",Highlight:"Highlight","Highlight key numbers — years, designs.":"Highlight key numbers — years, designs.","Highlight line":"Highlight line",Hint:"Hint","Hold video":"Hold video",Home:"Home","Hours, minutes and seconds to a set date and time, then one line.":"Hours, minutes and seconds to a set date and time, then one line.","Hover effect":"Hover effect",Icon:"Icon","Icon after text":"Icon after text","Icon before text":"Icon before text","Icon position":"Icon position","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image background":"Image background","Image caption":"Image caption","Image column":"Image column","Image date":"Image date","Image fit":"Image fit","Image focus":"Image focus","Image label":"Image label","Image left":"Image left","Image meta":"Image meta","Image right":"Image right","Image side":"Image side","Image stage":"Image stage","Image tint":"Image tint","Image width":"Image width","In its own box":"In its own box","In progress (accent)":"In progress (accent)","In the product":"In the product","In this issue":"In this issue","In this section":"In this section","In your own time zone. Every visitor counts down to the same moment.":"In your own time zone. Every visitor counts down to the same moment.",Instagram:"Instagram",Integrations:"Integrations","Integrations Grid":"Integrations Grid",Interview:"Interview",Intro:"Intro","Introduce your company in a paragraph or two.":"Introduce your company in a paragraph or two.","Issue Header":"Issue Header","Issue lines":"Issue lines","Issue meta lines":"Issue meta lines",Italic:"Italic","Italic is not saved yet — the theme row has no column for it (card 66162.b).":"Italic is not saved yet — the theme row has no column for it (card 66162.b).",Item:"Item","Item alignment":"Item alignment",Items:"Items","Items from":"Items from","Its own":"Its own","Its size follows Site styles ▸ {follows} — {px}px right now.":"Its size follows Site styles ▸ {follows} — {px}px right now.","Its size follows Site styles ▸ {follows}.":"Its size follows Site styles ▸ {follows}.","Job card label":"Job card label",Join:"Join","Jumps to a section on that page.":"Jumps to a section on that page.",Justify:"Justify","Kanban board (job columns)":"Kanban board (job columns)","Kanban columns":"Kanban columns","Keep this section's own built-in size":"Keep this section's own built-in size","Key *features.*":"Key *features.*","Key Features":"Key Features",LINE:"LINE",LIVE:"LIVE",Label:"Label","Label color":"Label color",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Largest size":"Largest size","Latest Posts":"Latest Posts","Latest journal posts in a three-card row.":"Latest journal posts in a three-card row.",Latitude:"Latitude",Layout:"Layout","Layout & structure":"Layout & structure","Layout, structure & embeds":"Layout, structure & embeds",Lead:"Lead","Lead Text":"Lead Text","Learn more":"Learn more","Leave a blank line between paragraphs to start a new one.":"Leave a blank line between paragraphs to start a new one.","Leave a field blank to use the built-in wording.":"Leave a field blank to use the built-in wording.",Left:"Left","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line & text gap":"Line & text gap","Line (trend)":"Line (trend)","Line gap {line} · text gap {letter}em.":"Line gap {line} · text gap {letter}em.",Link:"Link","Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.":"Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.","Linked to “{name}”":"Linked to “{name}”",LinkedIn:"LinkedIn",Links:"Links","Links to":"Links to",List:"List","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading…":"Loading…","Location name":"Location name",Locations:"Locations","Locations Map":"Locations Map",Logo:"Logo","Logo alt text":"Logo alt text","Logo color":"Logo color","Logo description":"Logo description","Logo five":"Logo five","Logo four":"Logo four","Logo height":"Logo height","Logo image":"Logo image","Logo one":"Logo one","Logo three":"Logo three","Logo two":"Logo two",Logos:"Logos","Long read":"Long read","Long-form document body with an 'On this page' contents list.":"Long-form document body with an 'On this page' contents list.",Longitude:"Longitude",Look:"Look",Main:"Main","Main Pages":"Main Pages","Main color":"Main color","Main heading":"Main heading","Main heading\n*Highlight line*":`Main heading
3
3
  *Highlight line*`,Map:"Map","Map & Theme":"Map & Theme","Map theme":"Map theme","Match / done (green)":"Match / done (green)",Media:"Media",Medium:"Medium",Menu:"Menu",Message:"Message","Meta line":"Meta line",Metadata:"Metadata","Metadata rows":"Metadata rows",Middle:"Middle","Middle meta":"Middle meta",Milestone:"Milestone","Milestone Timeline":"Milestone Timeline","Milestone title.":"Milestone title.",Milestones:"Milestones",Mixed:"Mixed","Mixed styles":"Mixed styles","Mockup Card":"Mockup Card","Mockup card":"Mockup card","Mockup position":"Mockup position",Mono:"Mono","Month DD, YYYY":"Month DD, YYYY",Motion:"Motion","Multi-column container for blocks.":"Multi-column container for blocks.",Muted:"Muted",Name:"Name","Name / alt":"Name / alt",Natural:"Natural","Navigation & wayfinding":"Navigation & wayfinding","Never published":"Never published","New page":"New page","Next slide":"Next slide","No fill":"No fill","No locations yet.":"No locations yet.","No match (gray ✕)":"No match (gray ✕)","No other pages":"No other pages","No pages match your search":"No pages match your search","No pages yet. Add one with + above.":"No pages yet. Add one with + above.","No section anchors yet":"No section anchors yet","No style":"No style","No wrap":"No wrap","No. 1":"No. 1",None:"None","None (manual)":"None (manual)",Normal:"Normal","Not changed":"Not changed","Not chosen":"Not chosen","Not saved. Reload the page.":"Not saved. Reload the page.","Not saved. Try again.":"Not saved. Try again.","Not set":"Not set","Not shown on the page":"Not shown on the page",Note:"Note","Note label":"Note label","Note value":"Note value",Nothing:"Nothing",Nudge:"Nudge",Number:"Number","Number style":"Number style",Numbers:"Numbers","N°01, N°02":"N°01, N°02",Office:"Office",Offices:"Offices","Offset tall":"Offset tall","On a phone":"On a phone","On picture":"On picture","On this page":"On this page","One row":"One row","One then four":"One then four","Only the size follows a site style. This section sets its own font, weight and letter case.":"Only the size follows a site style. This section sets its own font, weight and letter case.",Open:"Open","Open first answer":"Open first answer","Open the {name} in a new tab":"Open the {name} in a new tab","Open your saved draft in a new tab. Visitors don't see it.":"Open your saved draft in a new tab. Visitors don't see it.","Opening hours":"Opening hours","Opening the picker…":"Opening the picker…",Option:"Option","Order Table":"Order Table","Order summary":"Order summary",Outline:"Outline",Outlined:"Outlined",Overlay:"Overlay","Overlay - CartDrawer":"Overlay - CartDrawer","Overlay button":"Overlay button","Overlay button link":"Overlay button link","Overlay color":"Overlay color","Overlay position":"Overlay position",Padding:"Padding","Padding bottom":"Padding bottom","Padding left":"Padding left","Padding right":"Padding right","Padding top":"Padding top",Page:"Page","Page button":"Page button","Page name":"Page name","Page settings":"Page settings",Pages:"Pages","Panel heading":"Panel heading","Panels & cards":"Panels & cards","Panels and cards":"Panels and cards","Part of {name}":"Part of {name}","Paste a link to each profile. A platform left empty shows nothing on the site.":"Paste a link to each profile. A platform left empty shows nothing on the site.","Payment Methods":"Payment Methods","Payment methods":"Payment methods",Phone:"Phone","Photo Submission Form":"Photo Submission Form","Photo behind the words":"Photo behind the words",Photography:"Photography","Photos in a row":"Photos in a row","Pick a color to see how it reads.":"Pick a color to see how it reads.","Pick a post from {place} to auto-fill this section, or keep “None (manual)” to author it yourself below.":"Pick a post from {place} to auto-fill this section, or keep “None (manual)” to author it yourself below.","Pick who to reach, then a form that routes the message.":"Pick who to reach, then a form that routes the message.",Pinterest:"Pinterest",Placement:"Placement",Plain:"Plain","Play video":"Play video","Playback speed":"Playback speed","Plays well with\n*your favourite apps.*":`Plays well with
4
4
  *your favourite apps.*`,"Pop up - SubscribePopup":"Pop up - SubscribePopup","Portal card (stock + button + orders)":"Portal card (stock + button + orders)",Position:"Position",Positions:"Positions","Post Card":"Post Card",Prefix:"Prefix",Preview:"Preview","Preview hover state":"Preview hover state","Preview the live site (opens in a new tab)":"Preview the live site (opens in a new tab)","Preview the live site in a new tab":"Preview the live site in a new tab","Preview your saved draft in a new tab":"Preview your saved draft in a new tab","Previous slide":"Previous slide",Price:"Price","Primary (Theme Color)":"Primary (Theme Color)",Product:"Product","Product Grid":"Product Grid","Product Hero":"Product Hero","Product badge":"Product badge","Product collections in a tidy grid.":"Product collections in a tidy grid.","Product name":"Product name","Product page":"Product page","Product record":"Product record","Product record (spec tiles)":"Product record (spec tiles)","Product tiles":"Product tiles","Promotions & sign-ups":"Promotions & sign-ups",Publish:"Publish",Published:"Published","Pull quote":"Pull quote","Put this page on your site":"Put this page on your site","Put your changes on your site":"Put your changes on your site","Q&A":"Q&A",Question:"Question",Questions:"Questions",Quiet:"Quiet",Quote:"Quote",Quotes:"Quotes",Rating:"Rating","Read out in place of the picture, and shown if it can’t load.":"Read out in place of the picture, and shown if it can’t load.","Read the story":"Read the story","Read time":"Read time","Reads in":"Reads in","Ready-to-Order Banner":"Ready-to-Order Banner","Reassurance lines":"Reassurance lines","Record type":"Record type","Recurring Columns":"Recurring Columns","Reel label":"Reel label","Refresh now":"Refresh now","Region · country":"Region · country",Regular:"Regular","Related Products":"Related Products","Remove section":"Remove section","Repeating full-width rows — eyebrow, title and copy beside a numbered close-up image, alternating sides each row.":"Repeating full-width rows — eyebrow, title and copy beside a numbered close-up image, alternating sides each row.","Reset color":"Reset color","Reset {name} to the preset":"Reset {name} to the preset",Rest:"Rest","Result / order rows":"Result / order rows","Review Form":"Review Form",Reviews:"Reviews",Right:"Right","Right Top Text":"Right Top Text","Right links":"Right links","Right of the copy":"Right of the copy",Rigs:"Rigs","Rigs fitted":"Rigs fitted",Rise:"Rise",Role:"Role","Role · Location":"Role · Location","Role · location":"Role · location","Rotate on hover":"Rotate on hover","Rounds the picture. Left alone it stays square.":"Rounds the picture. Left alone it stays square.","Rounds the picture. The card's own corner is in Site styles.":"Rounds the picture. The card's own corner is in Site styles.",Sans:"Sans","Save as Template":"Save as Template","Save this website as a platform template":"Save this website as a platform template","Save your page changes first":"Save your page changes first",Scale:"Scale",Screen:"Screen","Scroll direction":"Scroll direction","Scroll duration":"Scroll duration","Scroll-Over Text":"Scroll-Over Text","Scroll-over":"Scroll-over","Scrolling Bar":"Scrolling Bar",Search:"Search","Search all pages":"Search all pages","Search all pages…":"Search all pages…",Season:"Season","Second item":"Second item","Second section":"Second section","Second surface":"Second surface",Section:"Section","Section *heading.*":"Section *heading.*","Section *title*":"Section *title*","Section Header":"Section Header","Section above":"Section above","Section band":"Section band","Section below":"Section below","Section header":"Section header","Section heading":"Section heading","Section heading\n*Highlight line*":`Section heading
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 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 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 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,7 +1,7 @@
1
1
  import { type HeroGroupPlacement } from "./hero-group-placement.js";
2
2
  export declare const HERO_ARROWS_PLACEMENTS: readonly ["top-left", "top-center", "top-right", "left", "center", "right", "bottom-left", "bottom-center", "bottom-right"];
3
3
  export type HeroArrowsPlacement = HeroGroupPlacement;
4
- export declare const HERO_ARROWS_PLACEMENT_LABELS: Readonly<Record<"left" | "center" | "top-left" | "top-center" | "top-right" | "right" | "bottom-left" | "bottom-center" | "bottom-right", string>>;
4
+ export declare const HERO_ARROWS_PLACEMENT_LABELS: Readonly<Record<"center" | "left" | "top-left" | "top-center" | "top-right" | "right" | "bottom-left" | "bottom-center" | "bottom-right", string>>;
5
5
  export declare const HERO_ARROWS_PLACEMENT_DEFAULT: HeroArrowsPlacement;
6
6
  export declare const HERO_ARROW_SHAPES: readonly ["outline", "solid", "square", "bare"];
7
7
  export type HeroArrowShape = (typeof HERO_ARROW_SHAPES)[number];
@@ -0,0 +1,4 @@
1
+ import type { PinnedChromeReport } from "./editor-document-adapter.js";
2
+ export declare function setActivePinnedChrome(report: PinnedChromeReport | null): void;
3
+ export declare function pinnedChromeHeldElsewhere(): boolean;
4
+ export declare function pinnedChromeInPlace(): boolean;
@@ -0,0 +1 @@
1
+ let e=null;function t(n){e=n}function o(){return!!(e&&e.state().lockHolder)}function r(){return e!==null}export{o as pinnedChromeHeldElsewhere,r as pinnedChromeInPlace,t as setActivePinnedChrome};
@@ -1,2 +1,2 @@
1
- export declare const generalBlocks: Record<"Text" | "Divider" | "Flex" | "LogoBlock" | "Hero" | "HeroSingle" | "IntroBleed" | "SpecStrip" | "ProcessSteps" | "OrderSummary" | "PaymentBadges" | "Manifesto" | "Timeline" | "TimelineTrack" | "Footprint" | "Prose" | "ParagraphsA" | "Split" | "Cards" | "KeyFeatures" | "Stats" | "StatsParagraph" | "Chart" | "Mockup" | "Testimonials" | "Logos" | "Banner" | "TitleWithButtons" | "Ticker" | "Countdown" | "Masthead" | "FeaturedCover" | "LongRead" | "Series" | "Breadcrumb" | "CategoryBar" | "DocTabs" | "DocMasthead" | "DocBody" | "DocMetaCards" | "FAQ" | "ContactLocations" | "SectionHeader" | "Spacer" | "CustomHTML" | "Grid" | "Heading" | "Eyebrow" | "ImageBlock" | "ButtonBlock" | "PostCard" | "HeroSlide" | "HeroGroup" | "Integrations", import("efficient-easel/blocks").ComponentConfig<any, any, Omit<import("efficient-easel/blocks").ComponentData<any, string, Record<string, import("efficient-easel/blocks").DefaultComponentProps>>, "type">>>;
2
- export declare const assembleGeneralBlocks: () => Record<"Text" | "Divider" | "Flex" | "LogoBlock" | "Hero" | "HeroSingle" | "IntroBleed" | "SpecStrip" | "ProcessSteps" | "OrderSummary" | "PaymentBadges" | "Manifesto" | "Timeline" | "TimelineTrack" | "Footprint" | "Prose" | "ParagraphsA" | "Split" | "Cards" | "KeyFeatures" | "Stats" | "StatsParagraph" | "Chart" | "Mockup" | "Testimonials" | "Logos" | "Banner" | "TitleWithButtons" | "Ticker" | "Countdown" | "Masthead" | "FeaturedCover" | "LongRead" | "Series" | "Breadcrumb" | "CategoryBar" | "DocTabs" | "DocMasthead" | "DocBody" | "DocMetaCards" | "FAQ" | "ContactLocations" | "SectionHeader" | "Spacer" | "CustomHTML" | "Grid" | "Heading" | "Eyebrow" | "ImageBlock" | "ButtonBlock" | "PostCard" | "HeroSlide" | "HeroGroup" | "Integrations", import("efficient-easel/blocks").ComponentConfig<any, any, Omit<import("efficient-easel/blocks").ComponentData<any, string, Record<string, import("efficient-easel/blocks").DefaultComponentProps>>, "type">>>;
1
+ export declare const generalBlocks: Record<"Flex" | "Ticker" | "Prose" | "Logos" | "Divider" | "LogoBlock" | "Text" | "Hero" | "HeroSingle" | "IntroBleed" | "SpecStrip" | "ProcessSteps" | "OrderSummary" | "PaymentBadges" | "Manifesto" | "Timeline" | "TimelineTrack" | "Footprint" | "ParagraphsA" | "Split" | "Cards" | "KeyFeatures" | "Stats" | "StatsParagraph" | "Chart" | "Mockup" | "Testimonials" | "Banner" | "TitleWithButtons" | "Countdown" | "Masthead" | "FeaturedCover" | "LongRead" | "Series" | "Breadcrumb" | "CategoryBar" | "DocTabs" | "DocMasthead" | "DocBody" | "DocMetaCards" | "FAQ" | "ContactLocations" | "SectionHeader" | "Spacer" | "CustomHTML" | "Grid" | "Heading" | "Eyebrow" | "ImageBlock" | "ButtonBlock" | "PostCard" | "HeroSlide" | "HeroGroup" | "Integrations", import("efficient-easel/blocks").ComponentConfig<any, any, Omit<import("efficient-easel/blocks").ComponentData<any, string, Record<string, import("efficient-easel/blocks").DefaultComponentProps>>, "type">>>;
2
+ export declare const assembleGeneralBlocks: () => Record<"Flex" | "Ticker" | "Prose" | "Logos" | "Divider" | "LogoBlock" | "Text" | "Hero" | "HeroSingle" | "IntroBleed" | "SpecStrip" | "ProcessSteps" | "OrderSummary" | "PaymentBadges" | "Manifesto" | "Timeline" | "TimelineTrack" | "Footprint" | "ParagraphsA" | "Split" | "Cards" | "KeyFeatures" | "Stats" | "StatsParagraph" | "Chart" | "Mockup" | "Testimonials" | "Banner" | "TitleWithButtons" | "Countdown" | "Masthead" | "FeaturedCover" | "LongRead" | "Series" | "Breadcrumb" | "CategoryBar" | "DocTabs" | "DocMasthead" | "DocBody" | "DocMetaCards" | "FAQ" | "ContactLocations" | "SectionHeader" | "Spacer" | "CustomHTML" | "Grid" | "Heading" | "Eyebrow" | "ImageBlock" | "ButtonBlock" | "PostCard" | "HeroSlide" | "HeroGroup" | "Integrations", import("efficient-easel/blocks").ComponentConfig<any, any, Omit<import("efficient-easel/blocks").ComponentData<any, string, Record<string, import("efficient-easel/blocks").DefaultComponentProps>>, "type">>>;
@@ -0,0 +1,7 @@
1
+ export declare function pinnedGroupTab(node: {
2
+ type?: string;
3
+ }): string | null;
4
+ export declare const everyPageBadge: () => string;
5
+ export declare const everyPageNotice: () => string;
6
+ export declare function websiteDuplicateBlocked(data: unknown, item: unknown): string | null;
7
+ export declare const EVERY_PAGE_PHRASES: readonly string[];
@@ -0,0 +1 @@
1
+ import{say as e}from"../editor-words.js";import{FOOTER_TYPE as p,HEADER_TYPE as h}from"./footer-blocks.js";import{duplicateBlocked as c}from"../hero-group-placement.js";import{groupDuplicateRefusal as d,SITE_FOOTER_TYPE as l,SITE_HEADER_TYPE as s}from"./section-groups.js";function i(o){switch(o?.type){case s:return e("Header · on every page");case l:return e("Footer · on every page");case h:return e("Header · on every page · old style");case p:return e("Footer · on every page · old style");default:return null}}const E=()=>e("Every page"),T=()=>e("Changed on every page");function v(o,r){const n=c(o,r);if(n)return n;const t=d(o,r);if(!t)return null;const a=t.group===s;return t.why==="type"?a?e("The header cannot take another one of these"):e("The footer cannot take another one of these"):a?e("The header holds at most 3 sections"):e("The footer holds at most 6 sections")}const m=["Header · on every page","Footer · on every page","Header · on every page · old style","Footer · on every page · old style","Every page","Changed on every page","The header cannot take another one of these","The footer cannot take another one of these","The header holds at most 3 sections","The footer holds at most 6 sections"];export{m as EVERY_PAGE_PHRASES,E as everyPageBadge,T as everyPageNotice,i as pinnedGroupTab,v as websiteDuplicateBlocked};
@@ -1,2 +1,3 @@
1
1
  export declare const LOCKED_BLOCK_TYPES: ReadonlySet<string>;
2
2
  export declare function isLockedBlock(type: string | undefined): boolean;
3
+ export declare const websiteIsLockedBlock: (type: string | undefined) => boolean;
@@ -1 +1 @@
1
- const t=new Set(["BookingBox","SubmitBox"]);function n(o){return typeof o=="string"&&t.has(o)}export{t as LOCKED_BLOCK_TYPES,n as isLockedBlock};
1
+ import{lockedWhileHeld as e}from"../pinned-chrome-doc.js";import{pinnedChromeHeldElsewhere as t}from"../pinned-chrome-lock.js";const r=new Set(["BookingBox","SubmitBox"]);function i(o){return typeof o=="string"&&r.has(o)}const s=e(i,t);export{r as LOCKED_BLOCK_TYPES,i as isLockedBlock,s as websiteIsLockedBlock};
@@ -0,0 +1,15 @@
1
+ type Node = {
2
+ type?: string;
3
+ props?: {
4
+ id?: unknown;
5
+ };
6
+ };
7
+ export type InPlaceSeedPlan = {
8
+ remove: string[];
9
+ seedHeader: boolean;
10
+ seedFooter: boolean;
11
+ };
12
+ export declare function inPlaceSeedPlan(live: readonly Node[], opts: {
13
+ hasChromeDoc: boolean;
14
+ }): InPlaceSeedPlan;
15
+ export {};
@@ -0,0 +1 @@
1
+ import{FOOTER_TYPE as n,HEADER_TYPE as m}from"./footer-blocks.js";import{SITE_FOOTER_TYPE as a}from"./section-groups.js";function d(o,p){const t=o.some(e=>e?.type===a),r=o[o.length-1],s=!t&&r?.type===n?r:null;return{remove:o.filter(e=>e?.type===n&&e!==s).map(e=>String(e.props?.id??"")).filter(Boolean),seedHeader:!o.some(e=>e?.type===m),seedFooter:p.hasChromeDoc&&!t&&!s}}export{d as inPlaceSeedPlan};
@@ -18,4 +18,13 @@ export declare function buildSectionGroup(type: SectionGroupType, id: string, se
18
18
  };
19
19
  export declare function siteFooterDocChrome<T extends Node>(content: readonly T[]): readonly T[];
20
20
  export declare function withSectionGroup<T extends Node>(content: readonly T[], group: T): readonly T[];
21
+ export declare const GROUP_SECTION_RULES: Readonly<Record<SectionGroupType, {
22
+ max: number;
23
+ takes: readonly string[];
24
+ }>>;
25
+ export declare function groupAccepts(groupType: string, sectionType: string, countNow: number): boolean;
26
+ export declare function groupDuplicateRefusal(data: unknown, item: unknown): {
27
+ group: SectionGroupType;
28
+ why: "full" | "type";
29
+ } | null;
21
30
  export {};
@@ -1 +1 @@
1
- const n="SiteHeader",s="SiteFooter",i="sections",S=[n,s],E=e=>e===n||e===s,f=e=>`${e}:${i}`;function T(e,t,r=[]){return{type:e,props:{id:t,[i]:r}}}const c=new Set(["Footer",n,s]);function a(e){const t=new Set;let r=!1;const p=e.filter(u=>{const o=u?.type??"";return o==="Header"?(r=!0,!1):c.has(o)?t.has(o)?(r=!0,!1):(t.add(o),!0):!0});return r?p:e}function x(e,t){return e.some(r=>r?.type===t.type)?e:t.type===n?[t,...e]:[...e,t]}export{i as SECTION_GROUP_SLOT,S as SECTION_GROUP_TYPES,s as SITE_FOOTER_TYPE,n as SITE_HEADER_TYPE,T as buildSectionGroup,E as isSectionGroupType,f as sectionGroupZone,a as siteFooterDocChrome,x as withSectionGroup};
1
+ const s="SiteHeader",i="SiteFooter",c="sections",d=[s,i],f=e=>e===s||e===i,S=e=>`${e}:${c}`;function E(e,t,r=[]){return{type:e,props:{id:t,[c]:r}}}const y=new Set(["Footer",s,i]);function T(e){const t=new Set;let r=!1;const n=e.filter(u=>{const o=u?.type??"";return o==="Header"?(r=!0,!1):y.has(o)?t.has(o)?(r=!0,!1):(t.add(o),!0):!0});return r?n:e}function _(e,t){return e.some(r=>r?.type===t.type)?e:t.type===s?[t,...e]:[...e,t]}const a={[s]:{max:3,takes:["Flex","Ticker"]},[i]:{max:6,takes:["Flex","Prose","Logos","Divider"]}};function O(e,t,r){if(!f(e))return!0;const n=a[e];return r<n.max&&n.takes.includes(t)}function h(e,t){const r=t,n=r?.props?.id;if(n==null)return null;const u=e?.content;if(!Array.isArray(u))return null;for(const o of u){if(!f(o?.type))continue;const p=o.props?.[c];if(!Array.isArray(p)||!p.some(x=>x?.props?.id===n))continue;const l=a[o.type];return l.takes.includes(r?.type??"")?p.length>=l.max?{group:o.type,why:"full"}:null:{group:o.type,why:"type"}}return null}export{a as GROUP_SECTION_RULES,c as SECTION_GROUP_SLOT,d as SECTION_GROUP_TYPES,i as SITE_FOOTER_TYPE,s as SITE_HEADER_TYPE,E as buildSectionGroup,O as groupAccepts,h as groupDuplicateRefusal,f as isSectionGroupType,S as sectionGroupZone,T as siteFooterDocChrome,_ as withSectionGroup};
@@ -1,7 +1,7 @@
1
1
  import { type HeroGroupPlacement } from "./hero-group-placement.js";
2
2
  export declare const REEL_PLACEMENTS: readonly ["top-left", "top-center", "top-right", "left", "center", "right", "bottom-left", "bottom-center", "bottom-right"];
3
3
  export type ReelPlacement = HeroGroupPlacement;
4
- export declare const REEL_PLACEMENT_LABELS: Readonly<Record<"left" | "center" | "top-left" | "top-center" | "top-right" | "right" | "bottom-left" | "bottom-center" | "bottom-right", string>>;
4
+ export declare const REEL_PLACEMENT_LABELS: Readonly<Record<"center" | "left" | "top-left" | "top-center" | "top-right" | "right" | "bottom-left" | "bottom-center" | "bottom-right", string>>;
5
5
  export declare const REEL_PLACEMENT_DEFAULT: ReelPlacement;
6
6
  export declare const REEL_SHAPES: readonly ["cards", "dots", "numbers", "bar", "tabs"];
7
7
  export type ReelShape = (typeof REEL_SHAPES)[number];
@@ -1 +1 @@
1
- import{SITE_FOOTER_SLUG as i}from"./content/footer.js";import{makeSitePageAdapter as p,makeTemplatePageAdapter as d}from"./editor-document-adapter.js";import{clearFooterReturn as m,readFooterReturn as n}from"./puck/footer-return.js";import{HOME_PAGE_SLUG as t}from"./puck/home-page.js";import{migrateRenamedProps as l}from"./puck/renamed-props.js";import{offeredSets as a}from"./editor-blocks.js";const E={homeSlug:t,entryMayBounce:e=>e.kind==="template"||e.kind==="page"&&e.slug===i,entryBounce:(e,r)=>{if(e.kind==="page"&&e.slug===i){const o=n();return{kind:"page",slug:o&&o!==i?o:t,siteId:e.siteId}}return e.kind!=="template"||new URLSearchParams(r).get("editTemplate")==="1"?null:{kind:"page",slug:t}},onSwitch:e=>{if(e.kind==="page"){const r=n();e.slug!==i&&e.slug!==r&&m()}else m()},tellsHost:e=>e.kind==="page"&&e.slug!==i,adapterFor:(e,r,o)=>e.kind==="template"?d(e.id,r,a(o)):p(e.siteId,r,a(o)),migrateRenamedProps:l};export{E as WEBSITE_ADDRESSING};
1
+ import{SITE_FOOTER_SLUG as r}from"./content/footer.js";import{makeSitePageAdapter as p,makeTemplatePageAdapter as d}from"./editor-document-adapter.js";import{HOME_PAGE_SLUG as n}from"./puck/home-page.js";import{migrateRenamedProps as o}from"./puck/renamed-props.js";import{offeredSets as m}from"./editor-blocks.js";const f={homeSlug:n,entryMayBounce:e=>e.kind==="template"||e.kind==="page"&&e.slug===r,entryBounce:(e,i)=>e.kind==="page"&&e.slug===r?{kind:"page",slug:n,siteId:e.siteId}:e.kind!=="template"||new URLSearchParams(i).get("editTemplate")==="1"?null:{kind:"page",slug:n},onSwitch:()=>{},tellsHost:e=>e.kind==="page"&&e.slug!==r,adapterFor:(e,i,t)=>e.kind==="template"?d(e.id,i,m(t)):p(e.siteId,i,m(t),{editsPinnedInPlace:!0}),migrateRenamedProps:o};export{f as WEBSITE_ADDRESSING};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-web-builder",
3
- "version": "15.1.0",
3
+ "version": "16.0.0",
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",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@tabler/icons-react": "^3.46.0",
43
- "efficient-easel": "^8.0.0",
43
+ "efficient-easel": "^8.3.0",
44
44
  "efficient-shell": "^7.38.0",
45
45
  "isomorphic-dompurify": "^3.18.0",
46
46
  "next": ">=16",
@@ -59,7 +59,7 @@
59
59
  "@types/node": "^20",
60
60
  "@types/react": "^19",
61
61
  "@types/react-dom": "^19",
62
- "efficient-easel": "^8.0.0",
62
+ "efficient-easel": "^8.3.0",
63
63
  "efficient-shell": "^7.38.0",
64
64
  "esbuild": "^0.28.0",
65
65
  "happy-dom": "^20.14.5",
@@ -1,15 +0,0 @@
1
- import { type ReactNode } from "react";
2
- import type { Data } from "efficient-easel/blocks";
3
- type PreviewFocusCtx = {
4
- originData: Data | null;
5
- originSlug: string | null;
6
- exitFocus: () => void;
7
- };
8
- export declare function PreviewFocusProvider({ children, originData, originSlug, exitFocus, }: {
9
- children: ReactNode;
10
- originData: Data | null;
11
- originSlug: string | null;
12
- exitFocus: () => void;
13
- }): import("react").JSX.Element;
14
- export declare const usePreviewFocus: () => PreviewFocusCtx;
15
- export {};
@@ -1 +0,0 @@
1
- "use client";import{jsx as u}from"react/jsx-runtime";import{createContext as c,useContext as i,useMemo as l}from"react";const t=c({originData:null,originSlug:null,exitFocus:()=>{}});function m({children:n,originData:e,originSlug:o,exitFocus:r}){const s=l(()=>({originData:e,originSlug:o,exitFocus:r}),[e,o,r]);return u(t.Provider,{value:s,children:n})}const P=()=>i(t);export{m as PreviewFocusProvider,P as usePreviewFocus};
@@ -1,2 +0,0 @@
1
- import type { ScreenBridges, ScreenCanvas, ScreenTree } from "../lib/editor-screen.js";
2
- export declare function useFooterFocus(tree: ScreenTree, canvas: ScreenCanvas): Pick<ScreenBridges, "pinnedSource" | "holdCanvasOn" | "editPinnedSource">;
@@ -1 +0,0 @@
1
- "use client";import{useEffect as o,useRef as T}from"react";import{usePreviewFooter as v}from"./PreviewFooterContext.js";import{useStorefrontDocument as O}from"./StorefrontDocumentContext.js";import{SITE_FOOTER_SLUG as p}from"../lib/content/footer.js";import{FOOTER_TYPE as P}from"../lib/puck/footer-blocks.js";import{clearFooterReturn as R,readFooterReturn as E}from"../lib/puck/footer-return.js";import{pinPreviewToBottom as I,pinPreviewToSection as n}from"../lib/puck/preview-dom.js";function C(i,f){const{currentSlug:d,siteId:m,navigate:l,footerOriginSlug:c}=O(),{selected:u}=i,S=i.data?.content??[],F=f.refreshes,r=d===p,{editFooter:s}=v(),e=T(null);o(()=>{const t=u?.props.id;r&&typeof t=="string"&&(e.current?.(),e.current=n(t))},[u?.props.id,r]);const a=t=>{e.current?.(),e.current=n(t)};return o(()=>{if(!r||!c)return;const t=S.find(g=>g.type===P)?.props?.id;if(t)return e.current?.(),e.current=n(String(t)),()=>{e.current?.(),e.current=null}},[r,c,F]),o(()=>{if(!(r||!E()))return I(()=>R())},[]),{pinnedSource:r,holdCanvasOn:r?a:void 0,editPinnedSource:()=>s?s():l({kind:"page",slug:p,siteId:m??void 0})}}export{C as useFooterFocus};
@@ -1,3 +0,0 @@
1
- export declare function markFooterReturn(originSlug: string): void;
2
- export declare function readFooterReturn(): string | null;
3
- export declare function clearFooterReturn(): void;
@@ -1 +0,0 @@
1
- const e="sf-editor-footer-return";function n(t){if(!(typeof window>"u"))try{window.sessionStorage.setItem(e,t)}catch{}}function r(){if(typeof window>"u")return null;try{return window.sessionStorage.getItem(e)}catch{return null}}function o(){if(!(typeof window>"u"))try{window.sessionStorage.removeItem(e)}catch{}}export{o as clearFooterReturn,n as markFooterReturn,r as readFooterReturn};