efficient-web-builder 14.0.0 → 15.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,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 15.0.0 - 2026-10-15
4
+
5
+ **Publish is the website's main action, and Preview opens the saved draft** (card [DESIGN] A Clearer Save In Both Editors, build plan W1; final design by Lewis, 2026-10-15: https://claude.ai/artifact/NVN9yTSG8rYRh8w5Mv8Tpp). The website editor and the email designer are one editor (Lewis, 2026-10-15): the bar, the save icon and the save menu are efficient-easel 8.0.0's, the same in both. This layer only hands data: no save word, icon or menu of its own. A major: the efficient-easel peer range narrows to `^8.0.0` and the efficient-shell one to `^7.38.0` (harness `12-cicd.md`: a narrowed peer range is a major).
6
+
7
+ ### Changed for merchants
8
+
9
+ - **The main button says Publish** (easel's split button, with the save menu on its ▾). Its tooltip says "Put your changes on your site", or "Put this page on your site" for a page never published. The menu's status row ends with "Changes not live yet", "Everything is live" or "Never published". No number anywhere.
10
+ - **While everything is live it is a quiet ✓ Published** that cannot be pressed (tooltip "Everything is live"); the ▾ still opens. An edit makes it Publish again.
11
+ - **Preview opens your saved draft** in a new tab (tooltip "Open your saved draft in a new tab. Visitors don't see it."), where the backend can make a draft link. The link is made in the click and lasts 15 minutes. A page with no address of its own (a footer, a pop-up, a dynamic page) or a site with no address opens the live page, as before.
12
+ - Until the backend says how a page stands (efficient-backend `live_state`), the button reads Publish, never Published, with no status suffix: today's behaviour. After a publish in this session it is Published until the next edit.
13
+
14
+ ### Changed for hosts
15
+
16
+ - **BREAKING: `efficient-easel` peer and dev `^8.0.0`, `efficient-shell` peer and dev `^7.38.0`.** The bar that draws `ScreenBridges.mainAction` is easel 8.0.0's, and easel 8 needs shell 7.38.0. Raise both before taking this release.
17
+ - **`PageDocument.live`** (new, optional): `"live" | "changed" | "never"` (type `PageLiveState`). The answers of `WebsitePages.save` and `publish` may carry it too. Without it the editor takes a successful publish as live and a save of a live page as changed; otherwise it stays unknown.
18
+ - **`WebsitePreview.draftLink(pageId)`** (new, optional): resolves to `{ url }`, a short-lived address of the page's saved draft, or `{ url: null }` for a page with no address. Asked only when Preview is pressed. Without it Preview is the live link, unchanged.
19
+ - The publish success message is still the host's (`storefront-editor:published`); the admin host's words are its own change.
20
+ - New modules: `lib/page-live-state` (the live state by page id and `mainActionFor`), `components/useWebsiteMainAction`, `components/WebsitePreviewButton`. `lib/editor-screen` re-exports easel's `ScreenMainAction`.
21
+
22
+ ### Guards
23
+
24
+ - New `test-publish-main-action` (54 checks): the main action's words for live, changed, never and unknown; quiet only when live; a load, a save and a publish move the state, and unknown stays unknown; Publish calls the document's save-then-publish with the canvas's data and then reads Published; an unsaved edit reads Publish again; a document that cannot publish hands nothing; Preview opens the tab in the click and then points it at the minted link, falls back to the live page on null or a failure, opens again with noopener when the tab is blocked, mints nothing on load, and stays today's link without `draftLink`; no button word ends in "…"; the easel range.
25
+ - `test-shell-peer-range`: `^7.38.0`.
26
+
27
+ ## 14.0.1 - 2026-10-15
28
+
29
+ **The shell's fields in the settings panel look as the shell draws them** (card [MERGE] Settings Tabs Into Design And Animation, director GG; harness UI-24). A patch: one CSS rule is narrowed and two roll-backs go.
30
+
31
+ ### Changed for merchants
32
+
33
+ - **Button ▸ Button**: the text box is the same size as its link line (12px type, 8px inset). It was 14px with an 11px inset, with a notch where the two halves meet.
34
+ - **The Link window's address box** (Custom URL) on every link row, the Button's window and FAQ ▸ Link included, and **Custom HTML ▸ HTML**: the shell's own size and inset, not the old 8px 11px box.
35
+ - A number box with a unit or arrows (the shell's `InputNumber`) no longer puts the number on top of "px" or its arrows.
36
+ - Nothing else moves: over all 54 general panels at 320px, 340 boxes, only these boxes changed.
37
+
38
+ ### Changed for hosts
39
+
40
+ - `components/storefront-editor.css`: the old `.sf-insp-body input` / `textarea` rule (with its placeholder, textarea and `:focus` parts) skips any element with `rosh-focus-ring`, the class every efficient-shell field carries. Same specificity (`:where()`), so `aria-invalid` and `.sf-copybox` still win. A plain `<input>` or `<textarea>` keeps the old look.
41
+ - The `all: revert-layer` roll-backs under `.sf-slider`, `.sf-colour` and `.sf-corners` are gone, and the Corners row's `CornersInput` no longer carries the `sf-corners` class.
42
+
43
+ ### Guards
44
+
45
+ - New `test-shell-fields-keep-their-look`: mounts the shell's `TextLinkField` (with its Link window open), the builder's `StorefrontLinkPicker`, `Textarea`, `Input`, `InputNumber`, `HexInput` and `CornersInput` in `.sf-insp-body`, and fails if any old selector matches one of their boxes (at rest, on focus or by placeholder). A plain field must still match, so the check cannot pass on a rule that went.
46
+ - `test-one-colour-control` §7 and `test-corners-and-grid-from-the-shell` §1 / §2 read the skip and the marker instead of the roll-backs.
47
+
3
48
  ## 14.0.0 - 2026-10-15
4
49
 
5
50
  **The Button panel Lewis approved: one Button box, the button's own Width, Style, and ONE Icon row** (Lewis 2026-10-15, "the Button panel is OK now", Button panel v4c; card [MOVE] Every Panel Part Into The Shell). A major: the efficient-shell peer range narrows to `^7.36.0`.
@@ -0,0 +1,15 @@
1
+ import type { WebsitePreview } from "../lib/web-backend.js";
2
+ type DraftLink = NonNullable<WebsitePreview["draftLink"]>;
3
+ type Opener = Pick<Window, "open">;
4
+ export declare function openDraftPreview({ pageId, liveHref, draftLink, win, }: {
5
+ pageId: string;
6
+ liveHref: string;
7
+ draftLink: DraftLink;
8
+ win?: Opener;
9
+ }): Promise<void>;
10
+ export declare function WebsitePreviewButton({ liveHref, pageId, draftLink, }: {
11
+ liveHref: string;
12
+ pageId: string | null;
13
+ draftLink?: DraftLink;
14
+ }): import("react").JSX.Element;
15
+ export {};
@@ -0,0 +1 @@
1
+ "use client";import{jsx as t,jsxs as f}from"react/jsx-runtime";import{ExternalIcon as c}from"efficient-easel/icons";import{Button as b,Tooltip as p,buttonClasses as d}from"efficient-shell/ui";import{say as e}from"../lib/editor-words.js";function u({pageId:o,liveHref:n,draftLink:i,win:s=window}){const r=s.open("","_blank");if(r)try{r.opener=null}catch{}const l=a=>{r&&!r.closed?r.location.href=a:s.open(a,"_blank","noopener,noreferrer")};return i(o).then(a=>l(a.url??n),()=>l(n))}function x({liveHref:o,pageId:n,draftLink:i}){return i&&n?t(p,{content:e("Open your saved draft in a new tab. Visitors don't see it."),children:t(b,{variant:"secondary",onClick:()=>{u({pageId:n,liveHref:o,draftLink:i})},rightIcon:t(c,{size:15}),"aria-label":e("Preview your saved draft in a new tab"),children:e("Preview")})}):t(p,{content:e("Preview the live site (opens in a new tab)"),children:f("a",{className:d({variant:"secondary"}),href:o,target:"_blank",rel:"noopener noreferrer","aria-label":e("Preview the live site in a new tab"),children:[e("Preview"),t(c,{size:15})]})})}export{x as WebsitePreviewButton,u as openDraftPreview};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useCallback as I,useEffect as S,useState as j}from"react";import{ExternalIcon as z}from"efficient-easel/icons";import{Button as K,Tooltip as A,buttonClasses as U}from"efficient-shell/ui";import{SettingsSwitch as Z}from"efficient-easel/panel";import{PagesIcon as q,StylesIcon as X}from"efficient-easel/rail";import{TreeRow as J}from"efficient-easel/tree";import{useEaselStrings as Q}from"efficient-easel/strings";import{LocationsTreeContext as $}from"./LocationsTreeContext.js";import ee from"./PagesPanel.js";import{usePreviewChat as te}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as oe}from"./preview-devices.js";import{PreviewDeviceContext as re}from"./PreviewDeviceContext.js";import{usePreviewHeader as ie}from"./PreviewHeaderContext.js";import{usePreviewSocial as se}from"./PreviewSocialContext.js";import{usePreviewSurface as ne}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as ae,usePreviewTicker as ce}from"./PreviewTickerContext.js";import le,{CHAT_MODE as de,HEADER_MODE as B,SOCIAL_MODE as pe,WEBSITE_MODE as N}from"./SectionEditor.js";import C from"./SectionIcon.js";import me from"./SectionThumbnail.js";import{useStorefrontDocument as g}from"./StorefrontDocumentContext.js";import fe from"./StylesPanel.js";import ue from"./TemplateGlyph.js";import{useFooterFocus as Se}from"./useFooterFocus.js";import{LOCATIONS_TYPE as Te,useLocationsTree as Ee}from"./useLocationsTree.js";import{usePinnedChromeSeed as he}from"./usePinnedChromeSeed.js";import{usePreviewHref as we}from"./usePreviewHref.js";import{SITE_STYLES_TABS as be,SITE_STYLES_TEXT_TAB as Pe,useWebsiteName as ve}from"./WebsiteSettingsPanel.js";import{useOpenPageName as ke}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as Ie,duplicateBlocked as Ce,heroGroupNestDepth as ge}from"../lib/hero-group-placement.js";import{stripMarkup as _e}from"../lib/markup.js";import{categoryShortLabel as Le,PINNED_SECTION_TYPE as Oe}from"../lib/puck/add-palette.js";import{canAddTo as ye}from"../lib/puck/add-target.js";import{blockIsOffered as Ae}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Be,setBookingPreview as Ne}from"../lib/puck/booking-preview.js";import{footerBlockRowName as Re}from"../lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as De,HEADER_TYPE as R}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as He,readLeftView as We,resolveLeftView as xe,writeLeftView as Ve}from"../lib/puck/left-view.js";import{isLockedBlock as Me}from"../lib/puck/locked-blocks.js";import{scrollPreviewToSection as Ye,scrollPreviewToTop as D}from"../lib/puck/preview-dom.js";import{SiteCanvas as Fe}from"../lib/puck/overrides.js";import{labelAtLevel as Ge}from"../lib/puck/section-catalog.js";import{editorWords as je,say as i}from"../lib/editor-words.js";import{SECTION_DESCRIPTIONS as ze}from"../lib/puck/section-descriptions.js";import{isSectionGroupType as Ke,sectionGroupZone as Ue,SITE_FOOTER_TYPE as Ze,SITE_HEADER_TYPE as qe}from"../lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Xe,SAVE_AS_TEMPLATE_EVENT as Je}from"../lib/save-as-template-action.js";import{newSectionNode as Qe}from"../lib/sections/new-section-node.js";import{useHostProducts as $e}from"../lib/use-host-products.js";function H({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:s}=ce(),f=Q().tree,c=e,l=c.kind==="ticker"?c.heroId:null,n=I(d=>{if(!d)return;t({kind:"ticker",heroId:d}),Ye(d)},[t]);return S(()=>{o(l)},[l,o]),S(()=>{s(n)},[s,n]),{partRows:(d,{rowClick:a})=>{const u=String(d.props.id);return d.type==="Hero"&&r(J,{icon:r(C,{type:"ticker",size:13}),name:i(ae),onSelect:()=>n(u),selected:l===u,rowProps:{onClick:a(()=>n(u))},words:f})}}}function et(){const{adapter:e,capabilities:t,currentSlug:o,siteId:s,hasUnsavedEdits:f,bridgeCapabilities:c,notifyParent:l,token:n}=g(),{hasPreviewLink:d}=t,a=Xe({hasTrustedConsole:!!n,canCreatePlatformTemplate:c.canCreatePlatformTemplate,capabilities:t,siteId:s,hasUnsavedEdits:f}),u=I(()=>{!s||!o||l(Je,{siteId:s,slug:o})},[l,s,o]),T=we({pageSlug:o,siteId:s,token:n}),E=e.previewHref?.(o)??T;return{barLead:()=>a.visible&&r(A,{side:"bottom",content:a.enabled?i("Save this website as a platform template"):i(a.disabledReason),children:r("span",{className:"sf-tip-disabled",tabIndex:a.enabled?void 0:0,children:r(K,{variant:"secondary",disabled:!a.enabled,onClick:u,rightIcon:r(ue,{}),children:i("Save as Template")})})}),barTrail:()=>d&&o&&r(A,{content:i("Preview the live site (opens in a new tab)"),children:k("a",{className:U({variant:"secondary"}),href:E,target:"_blank",rel:"noopener noreferrer","aria-label":i("Preview the live site in a new tab"),children:[i("Preview"),r(z,{size:15})]})})}}function tt(){return k("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 ot(e,t){const{capabilities:o,templateId:s,siteId:f,tokenRef:c,navigate:l}=g(),{hasSiteTheme:n,explainsSiteSettings:d}=o,a=p=>t.setView(p),[u,T]=j(be[0].id),{surface:E,setSurface:b}=ne(),P=()=>{if(n){a("styles"),t.reveal(),D();return}e.show(N),e.reveal(),D()},v={id:"pages",label:i("Pages"),icon:r(q,{}),panel:({onHide:p})=>r(ee,{activeSurface:E,onPreviewSurface:b,onNavigate:m=>{b(null),l(s?{kind:"template",id:s,pageSlug:m}:{kind:"page",slug:m,siteId:f??void 0})},onClose:p})},h=[];return!n&&d&&h.push({id:"appearance",label:i("Appearance"),icon:r(tt,{}),active:e.kind==="website",onSelect:P}),n&&h.push({id:"styles",label:i("Site styles"),icon:r(X,{}),panel:({onHide:p,notify:m})=>r(fe,{tokenRef:c,siteId:f??void 0,onClose:p,onNotify:m,tab:u,onTabChange:T})}),{railLead:[v],railTrail:h,resolveLeftView:(p,m)=>xe(p,n,m),openSettings:P,openStyles:()=>{T(Pe),a("styles")}}}function rt(e,t,o,s){const{kind:f,open:c}=e,{selected:l,zoneOf:n}=t,d=Se(t,o);S(()=>{Ne(l?.type==="BookingBox"&&l.props.region==="confirm"?Be(n(String(l.props.id))):null)},[l?.props.id]);const a=Ee(e,t),{capabilities:{hasSiteSettings:u}}=g(),{setSelected:T,setSelectHandler:E}=ie(),{chat:b,setChat:P,setSelected:v,setSelectHandler:h}=te(),p=f==="header";S(()=>{T(p)},[p,T]),S(()=>{E(()=>c(B))},[E,c]);const m=I(()=>c(de),[c]),L=f==="chat";S(()=>{v(L)},[L,v]),S(()=>{h(m)},[h,m]);const{setOpenHandler:O}=se(),y=I(()=>c(pe),[c]);S(()=>{O(y)},[O,y]);const V=H(e),M=et(),Y=ot(e,s),F=o.device;return{...d,...V,...M,...Y,hasOwnRows:w=>w.type===Te,ownRows:a.renderLocationTree,sectionPressed:a.sectionPressed,wrap:w=>r($.Provider,{value:!0,children:r(re.Provider,{value:F,children:w})}),addPanelRow:w=>u?k("div",{className:"sf-addside-sitewide",children:[r("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:r(C,{type:"chat",size:16})}),k("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{w(),m()},children:[i("Live chat"),r("span",{className:"sf-addside-sitewide-desc",children:i("A chat bubble on every page")})]}),r(Z,{checked:b.enabled,onChange:G=>P({enabled:G}),ariaLabel:i("Show the chat bubble on the whole site")})]}):void 0}}let W=null,_=new WeakMap;function it(e){const t=je();if(!e||!t)return e;W!==t&&(W=t,_=new WeakMap);let o=_.get(e);return o||(o={...e,choices:e.choices?e.choices.map(s=>({...s,label:i(s.label)})):null,spec:e.spec?{...e.spec,addLabel:i(e.spec.addLabel)}:null},_.set(e,o)),o}const st={isLockedBlock:Me,duplicateBlocked:Ce,nestDepth:(e,t,o)=>t===Ie?ge(e,o):0,newSectionNode:Qe,canAddTo:(e,t)=>it(ye(e,t)),blockIsOffered:Ae},nt=new Proxy(ze,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?i(o):o}}),at={labelAtLevel:(e,t,o)=>i(Ge(e,t,o)),descriptions:nt,categoryLabel:e=>{const t=Le(e);return t===void 0?void 0:i(t)},firstSection:Oe,blockRowName:Re,plainText:_e,Icon:C,Thumbnail:me,useProducts:$e},ct={desktop:2e3,tablet:800,mobile:390},x="desktop",lt={options:oe,initial:x,fluid:x,widths:ct},dt={read:We,write:e=>Ve(e),forSelection:(e,t)=>He(e,t)},pt={first:R,last:De,firstGroup:qe,lastGroup:Ze,isSectionGroup:Ke,sectionGroupZone:Ue,panelOf:e=>e===R?B:null};function mt(e){return{...H(e),openSettings:()=>e.show(N)}}const ao={useOwnerName:ve,useDocumentLabel:ke,useBridges:rt,useStandaloneBridges:mt,useDocumentPass:he,blockRules:st,blockLook:at,devices:lt,leftView:dt,pinned:pt,Canvas:Fe,Inspector:le};export{ao 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 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};
@@ -944,11 +944,31 @@
944
944
  }
945
945
  }
946
946
 
947
- /* Floating-styled form controls for Puck's native fields */
948
- .sf-insp-body input[type="text"],
949
- .sf-insp-body input[type="number"],
950
- .sf-insp-body input:not([type]),
951
- .sf-insp-body textarea {
947
+ /* Floating-styled form controls for Puck's native fields — and ONLY those.
948
+
949
+ ⚠️ A FIELD THE SHELL DRAWS IS SKIPPED: `:not(:where(.rosh-focus-ring))` on
950
+ every selector of this rule, its placeholder, its textarea and its focus
951
+ (harness UI-24: a shell field looks as the shell draws it). This sheet is
952
+ unlayered, so without the skip it beats every shell utility whatever the
953
+ specificity: the Button's text box (`TextLinkField`) came out 14px with an
954
+ 11px inset over a 12px / 8px link line, the Link window's address box and
955
+ Custom HTML's box (`Textarea`) wore this padding, and an `InputNumber` put
956
+ "px" on top of its number.
957
+
958
+ WHY THAT CLASS. efficient-shell has no attribute that says "a kit field".
959
+ `rosh-focus-ring` is the nearest documented thing: it is in `INPUT_BASE`
960
+ and `inputClasses` (efficient-shell src/forms/styles.ts, strings the shell
961
+ pins as contract), so every kit text field carries it, and the shell's
962
+ ui.css calls it "the marker", the class "where a selector can stop
963
+ matching". It is also on the kit's buttons and checkboxes, which this rule
964
+ never selected. `:where()` adds no specificity, so this rule weighs what it
965
+ weighed before and the `aria-invalid` and `.sf-copybox` overrides below
966
+ still win over it. `scripts/test-shell-fields-keep-their-look.tsx` mounts
967
+ the shell's fields and fails if any selector here matches one. */
968
+ .sf-insp-body input[type="text"]:not(:where(.rosh-focus-ring)),
969
+ .sf-insp-body input[type="number"]:not(:where(.rosh-focus-ring)),
970
+ .sf-insp-body input:not([type]):not(:where(.rosh-focus-ring)),
971
+ .sf-insp-body textarea:not(:where(.rosh-focus-ring)) {
952
972
  width: 100%;
953
973
  border: 1px solid var(--sf-input-border);
954
974
  background: var(--sf-field-bg);
@@ -958,19 +978,19 @@
958
978
  color: var(--sf-field-text);
959
979
  font-family: var(--sf-font);
960
980
  }
961
- .sf-insp-body input::placeholder,
962
- .sf-insp-body textarea::placeholder {
981
+ .sf-insp-body input:not(:where(.rosh-focus-ring))::placeholder,
982
+ .sf-insp-body textarea:not(:where(.rosh-focus-ring))::placeholder {
963
983
  color: var(--sf-field-placeholder);
964
984
  opacity: 1; /* Firefox dims placeholders by default; keep our grey exact */
965
985
  }
966
- .sf-insp-body textarea {
986
+ .sf-insp-body textarea:not(:where(.rosh-focus-ring)) {
967
987
  min-height: 74px;
968
988
  line-height: 1.45;
969
989
  resize: vertical;
970
990
  }
971
- .sf-insp-body input[type="text"]:focus,
972
- .sf-insp-body input:not([type]):focus,
973
- .sf-insp-body textarea:focus {
991
+ .sf-insp-body input[type="text"]:not(:where(.rosh-focus-ring)):focus,
992
+ .sf-insp-body input:not([type]):not(:where(.rosh-focus-ring)):focus,
993
+ .sf-insp-body textarea:not(:where(.rosh-focus-ring)):focus {
974
994
  outline: none;
975
995
  border-color: var(--sf-accent);
976
996
  box-shadow: 0 0 0 3px var(--sf-accent-ring);
@@ -2251,29 +2271,12 @@
2251
2271
  white-space: nowrap;
2252
2272
  }
2253
2273
 
2254
- /* ⚠️ THE SHELL'S FIELDS MUST NOT WEAR THE INSPECTOR'S OLD INPUT RULE.
2255
- `.sf-insp-body input[type="text"]` (0,2,1, below the shell in no layer) is
2256
- `width: 100%`, `padding: 8px 11px`, `font-size: 13px` — the box Puck's native
2257
- fields were given — and an unlayered rule beats every shell utility whatever
2258
- its specificity. Inside the shell's own controls it is rolled back to the
2259
- shell's layer, so the hex box and the slider's number look as the shell
2260
- draws them everywhere else. */
2261
- .sf-editor .sf-insp-body :is(.sf-slider, .sf-colour) input[type="text"],
2262
- .sf-editor .sf-insp-body :is(.sf-slider, .sf-colour) input[type="text"]:focus,
2263
- .sf-editor .sf-insp-body :is(.sf-slider, .sf-colour) input::placeholder {
2264
- all: revert-layer;
2265
- }
2266
- /* The same roll-back for the Corners row's radius box (`.sf-corners`, the
2267
- shell's CornersInput, plan W2): without it the old rule's padding put the
2268
- number on top of "px". */
2269
- .sf-editor .sf-insp-body .sf-corners input[type="text"],
2270
- .sf-editor .sf-insp-body .sf-corners input[type="text"]:focus,
2271
- .sf-editor .sf-insp-body .sf-corners input::placeholder {
2272
- all: revert-layer;
2273
- }
2274
2274
  /* The colour a row FOLLOWS, shown in its box in grey (option E): the grey is
2275
- what says the setting has no colour of its own. After the roll-back above,
2276
- and more specific than it, so the roll-back does not take the grey away. */
2275
+ what says the setting has no colour of its own. The hex box is the shell's
2276
+ `HexInput`, which the inspector's old input rule skips (the
2277
+ `:not(:where(.rosh-focus-ring))` near the top of this file), so it needs no
2278
+ roll-back of its own any more, and neither does the slider's number box or
2279
+ the Corners row's radius box. */
2277
2280
  .sf-editor .sf-colour input.sf-colour-hex.is-inherited,
2278
2281
  .sf-editor .sf-insp-body .sf-colour input[type="text"].sf-colour-hex.is-inherited {
2279
2282
  color: var(--sf-muted);
@@ -3209,7 +3212,8 @@
3209
3212
  }
3210
3213
  /* The text list's × and "+ Add item" (card 22118) are efficient-easel's since
3211
3214
  2026-10-06 and ring themselves (fields.css). Its row input keeps the shared
3212
- `.sf-insp-body input[type="text"]:focus` cue every text input draws. */
3215
+ `.sf-insp-body input[type="text"]:focus` cue every plain (not the shell's)
3216
+ text input draws. */
3213
3217
 
3214
3218
  /* Segmented */
3215
3219
  .sf-seg2 {
@@ -0,0 +1,2 @@
1
+ import type { ScreenMainAction } from "../lib/editor-screen.js";
2
+ export declare function useWebsiteMainAction(data: unknown): ScreenMainAction | undefined;
@@ -0,0 +1 @@
1
+ "use client";import{useCallback as m,useEffect as d,useRef as u,useState as b}from"react";import{useStorefrontDocument as p}from"./StorefrontDocumentContext.js";import{effectiveLive as v,mainActionFor as P,usePageLiveState as h}from"../lib/page-live-state.js";function E(t){const{docId:i,capabilities:o,hasUnsavedEdits:c,onPublish:n}=p(),f=v(h(i??null),c),[a,r]=b(!1),s=u(t);s.current=t;const e=u(!0);d(()=>(e.current=!0,()=>{e.current=!1}),[]);const l=m(()=>{r(!0),n(s.current).finally(()=>{e.current&&r(!1)})},[n]);if(o.canPublish)return P({live:f,onPress:l,busy:a})}export{E as useWebsiteMainAction};
@@ -1 +1 @@
1
- "use client";import{offeredSetsOf as c}from"./editor-blocks.js";import{isEfficientBackend as m}from"./editor-session.js";import{backendOf as u}from"./website-session.js";function h(t,i){const s=i?{siteId:i}:void 0;return{resolve:e=>t.load({slug:e,...s}),saveLayout:(e,o,r,a)=>t.save(e,{layout:o},{version:r,clientId:a??""}),rereadVersion:t.version?e=>t.version(e):void 0,publish:t.publish?(e,o)=>t.publish(e,o?{version:o}:void 0):void 0,listPages:()=>t.list(s),createPage:t.create?e=>t.create({...e,...s}):void 0,deletePage:t.remove?(e,o)=>t.remove(e,o):void 0}}function f(t,i=u(),s=c()){const e=m(i),o=t?{siteId:t}:void 0,r=e?!!t:!0,a=i.site.update;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:e&&s.commerce&&s.service,explainsSiteSettings:!1,hasSiteRecord:r,canEditSiteRecord:r&&!!a,hasPreviewLink:e||!!i.preview,hasCatalog:e&&s.commerce,hasForms:e&&s.service,hasBlog:!!i.blog&&s.service,offersCommerce:s.commerce,offersService:s.service},...h(i.pages,t),lock:i.lock,site:r?()=>i.site.get(o):void 0,updateSite:r&&a?n=>a(n,o):void 0,previewHref:i.preview?n=>i.preview.href(n):void 0}}function g(t,i=u(),s=c()){const e=m(i),o=i.templates,r=o?o.pages(t):{list:()=>Promise.reject(new Error(l)),load:()=>Promise.reject(new Error(l)),save:()=>Promise.reject(new Error(l))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!r.create,canDeletePagesInline:!!r.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:e&&s.commerce&&s.service,explainsSiteSettings:e,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:e&&s.commerce,hasForms:e&&s.service,hasBlog:!!i.blog&&s.service,offersCommerce:s.commerce,offersService:s.service},...h(r,void 0),publish:void 0,templateName:o?()=>o.get(t).then(a=>a.name):void 0}}const l="This editor's backend has no website templates.";export{f as makeSitePageAdapter,g as makeTemplatePageAdapter};
1
+ "use client";import{offeredSetsOf as m}from"./editor-blocks.js";import{isEfficientBackend as c}from"./editor-session.js";import{noteLoaded as p,notePublished as d,noteSaved as v}from"./page-live-state.js";import{backendOf as u}from"./website-session.js";function h(i,t){const r=t?{siteId:t}:void 0;return{resolve:e=>i.load({slug:e,...r}).then(n=>(n&&p(n.id,n.live),n)),saveLayout:(e,n,o,s)=>i.save(e,{layout:n},{version:o,clientId:s??""}).then(a=>(v(e,a.live),a)),rereadVersion:i.version?e=>i.version(e):void 0,publish:i.publish?(e,n)=>i.publish(e,n?{version:n}:void 0).then(o=>(d(e,o.live),o)):void 0,listPages:()=>i.list(r),createPage:i.create?e=>i.create({...e,...r}):void 0,deletePage:i.remove?(e,n)=>i.remove(e,n):void 0}}function E(i,t=u(),r=m()){const e=c(t),n=i?{siteId:i}:void 0,o=e?!!i:!0,s=t.site.update;return{capabilities:{canPublish:!!t.pages.publish,hasSiteSettings:e,hasSiteTheme:!!t.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!t.pages.create,canDeletePagesInline:!!t.pages.remove,hasEditLock:!!t.lock,hasEditGuard:!0,hasPinnedChrome:e&&r.commerce&&r.service,explainsSiteSettings:!1,hasSiteRecord:o,canEditSiteRecord:o&&!!s,hasPreviewLink:e||!!t.preview,hasCatalog:e&&r.commerce,hasForms:e&&r.service,hasBlog:!!t.blog&&r.service,offersCommerce:r.commerce,offersService:r.service},...h(t.pages,i),lock:t.lock,site:o?()=>t.site.get(n):void 0,updateSite:o&&s?a=>s(a,n):void 0,previewHref:t.preview?a=>t.preview.href(a):void 0}}function B(i,t=u(),r=m()){const e=c(t),n=t.templates,o=n?n.pages(i):{list:()=>Promise.reject(new Error(l)),load:()=>Promise.reject(new Error(l)),save:()=>Promise.reject(new Error(l))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!o.create,canDeletePagesInline:!!o.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:e&&r.commerce&&r.service,explainsSiteSettings:e,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:e&&r.commerce,hasForms:e&&r.service,hasBlog:!!t.blog&&r.service,offersCommerce:r.commerce,offersService:r.service},...h(o,void 0),publish:void 0,templateName:n?()=>n.get(i).then(s=>s.name):void 0}}const l="This editor's backend has no website templates.";export{E as makeSitePageAdapter,B as makeTemplatePageAdapter};
@@ -1,2 +1,2 @@
1
1
  export { ScreenPartsProvider as EditorScreenProvider, sameInspectorMode, SELECTION_MODE, useScreenParts as useEditorScreen, useScreenBlockLook, useScreenBlockRules, useScreenBridges, useScreenCanvasFrame, useScreenDevices, useScreenDocumentPass, useScreenInspectorPanel, useScreenLeftView, useScreenOwnerName, useScreenPinned, useStandaloneScreenBridges } from "efficient-easel/screen/lib/screen-parts";
2
- export type { ScreenParts as EditorScreenParts, NodeDefaults, ScreenBlockLook, ScreenBlockRules, ScreenBridges, ScreenCanvas, ScreenDevices, ScreenDocumentOps, ScreenInspector, ScreenInspectorMode, ScreenInspectorPanelProps, ScreenLeftPanel, ScreenLeftView, ScreenLeftViewFrame, ScreenLeftViewRules, ScreenNewNode, ScreenNode, ScreenNodeLevel, ScreenNodeMaker, ScreenPartMode, ScreenPinnedNodes, ScreenRailItem, ScreenTree, ScreenTreeFolds, ScreenTreeRows } from "efficient-easel/screen/lib/screen-parts";
2
+ export type { ScreenParts as EditorScreenParts, NodeDefaults, ScreenBlockLook, ScreenBlockRules, ScreenBridges, ScreenCanvas, ScreenDevices, ScreenDocumentOps, ScreenInspector, ScreenInspectorMode, ScreenInspectorPanelProps, ScreenLeftPanel, ScreenLeftView, ScreenLeftViewFrame, ScreenLeftViewRules, ScreenMainAction, ScreenNewNode, ScreenNode, ScreenNodeLevel, ScreenNodeMaker, ScreenPartMode, ScreenPinnedNodes, ScreenRailItem, ScreenTree, ScreenTreeFolds, ScreenTreeRows } from "efficient-easel/screen/lib/screen-parts";
@@ -243,6 +243,7 @@ export declare const WEB_BUILDER_WORDS: {
243
243
  readonly "Cell width": "Cell width";
244
244
  readonly Center: "Center";
245
245
  readonly "Changes apply to all selected.": "Changes apply to all selected.";
246
+ readonly "Changes not live yet": "Changes not live yet";
246
247
  readonly Chart: "Chart";
247
248
  readonly "Chart style": "Chart style";
248
249
  readonly "Chat with us": "Chat with us";
@@ -404,6 +405,7 @@ export declare const WEB_BUILDER_WORDS: {
404
405
  readonly Even: "Even";
405
406
  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.";
406
407
  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
+ readonly "Everything is live": "Everything is live";
407
409
  readonly Excerpt: "Excerpt";
408
410
  readonly Eyebrow: "Eyebrow";
409
411
  readonly "Eyebrow style": "Eyebrow style";
@@ -678,6 +680,7 @@ export declare const WEB_BUILDER_WORDS: {
678
680
  readonly "Name / alt": "Name / alt";
679
681
  readonly Natural: "Natural";
680
682
  readonly "Navigation & wayfinding": "Navigation & wayfinding";
683
+ readonly "Never published": "Never published";
681
684
  readonly "New page": "New page";
682
685
  readonly "Next slide": "Next slide";
683
686
  readonly "No fill": "No fill";
@@ -720,6 +723,7 @@ export declare const WEB_BUILDER_WORDS: {
720
723
  readonly Open: "Open";
721
724
  readonly "Open first answer": "Open first answer";
722
725
  readonly "Open the {name} in a new tab": "Open the {name} in a new tab";
726
+ readonly "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.";
723
727
  readonly "Opening hours": "Opening hours";
724
728
  readonly "Opening the picker\u2026": "Opening the picker…";
725
729
  readonly Option: "Option";
@@ -774,6 +778,7 @@ export declare const WEB_BUILDER_WORDS: {
774
778
  readonly "Preview hover state": "Preview hover state";
775
779
  readonly "Preview the live site (opens in a new tab)": "Preview the live site (opens in a new tab)";
776
780
  readonly "Preview the live site in a new tab": "Preview the live site in a new tab";
781
+ readonly "Preview your saved draft in a new tab": "Preview your saved draft in a new tab";
777
782
  readonly "Previous slide": "Previous slide";
778
783
  readonly Price: "Price";
779
784
  readonly "Primary (Theme Color)": "Primary (Theme Color)";
@@ -788,8 +793,11 @@ export declare const WEB_BUILDER_WORDS: {
788
793
  readonly "Product record (spec tiles)": "Product record (spec tiles)";
789
794
  readonly "Product tiles": "Product tiles";
790
795
  readonly "Promotions & sign-ups": "Promotions & sign-ups";
796
+ readonly Publish: "Publish";
791
797
  readonly Published: "Published";
792
798
  readonly "Pull quote": "Pull quote";
799
+ readonly "Put this page on your site": "Put this page on your site";
800
+ readonly "Put your changes on your site": "Put your changes on your site";
793
801
  readonly "Q&A": "Q&A";
794
802
  readonly Question: "Question";
795
803
  readonly Questions: "Questions";
@@ -1,7 +1,7 @@
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.",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.",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
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","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","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
- *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","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",Published:"Published","Pull quote":"Pull quote","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
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
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
+ *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
@@ -0,0 +1,14 @@
1
+ import type { ScreenMainAction } from "./editor-screen.js";
2
+ import type { PageLiveState } from "./web-backend.js";
3
+ export type { PageLiveState };
4
+ export declare function noteLoaded(id: string, live: PageLiveState | undefined): void;
5
+ export declare function noteSaved(id: string, live: PageLiveState | undefined): void;
6
+ export declare function notePublished(id: string, live: PageLiveState | undefined): void;
7
+ export declare function pageLiveState(id: string): PageLiveState | undefined;
8
+ export declare function usePageLiveState(id: string | null): PageLiveState | undefined;
9
+ export declare function effectiveLive(live: PageLiveState | undefined, hasUnsavedEdits: boolean): PageLiveState | undefined;
10
+ export declare function mainActionFor({ live, onPress, busy, }: {
11
+ live: PageLiveState | undefined;
12
+ onPress: () => void;
13
+ busy?: boolean;
14
+ }): ScreenMainAction;
@@ -0,0 +1 @@
1
+ import{useSyncExternalStore as a}from"react";import{say as n}from"./editor-words.js";const r=new Map,s=new Set;function i(e,t){if(!(r.has(e)&&r.get(e)===t)){r.set(e,t);for(const o of s)o()}}function g(e,t){i(e,t)}function p(e,t){const o=r.get(e);i(e,t??(o==="live"?"changed":o))}function h(e,t){i(e,t??"live")}function v(e){return r.get(e)}function c(e){return s.add(e),()=>{s.delete(e)}}function d(e){const t=()=>e?r.get(e):void 0;return a(c,t,t)}function b(e,t){return e==="live"&&t?"changed":e}function x({live:e,onPress:t,busy:o=!1}){const u=e==="live"?n("Everything is live"):e==="changed"?n("Changes not live yet"):e==="never"?n("Never published"):null;return{label:n("Publish"),tooltip:e==="never"?n("Put this page on your site"):n("Put your changes on your site"),status:u,quiet:e==="live"?{label:n("Published"),reason:n("Everything is live")}:null,onPress:t,busy:o}}export{b as effectiveLive,x as mainActionFor,g as noteLoaded,h as notePublished,p as noteSaved,v as pageLiveState,d as usePageLiveState};
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as L,Fragment as R}from"react/jsx-runtime";import{cloneElement as ae,useId as tt,useRef as Z,useState as se}from"react";import{useEasel as F,useSelectedFields as nt}from"efficient-easel/easel";import{say as l,editorEaselWords as S}from"../editor-words.js";import{readHidable as ce,hidableText as ue}from"./hidable.js";import{FOLD_FIELD_MARKER as U,LINK_FIELD_MARKER as de,MEDIA_FIELD_MARKER as pe,SCAFFOLD_FIELD_MARKER as fe,TEXT_FIELD_MARKER as y,foldMetaOf as X,textFieldIdentifier as ot}from"./field-markers.js";import rt from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as it,CORNER_RADIUS_MAX as me,CORNER_RADIUS_MIN as v}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as lt,IMAGE_CORNERS_LABEL as at}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as st}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as ct,GALLERY_LAYOUTS as w,GALLERY_LAYOUT_KEYS as he}from"../content/gallery-layout.js";import{anchorSiblingsOf as ut,HERO_GROUP_PLACEMENTS as dt,HERO_GROUP_PLACEMENT_DEFAULT as pt,normalisePlacement as ft,placementPoints as ge}from"../hero-group-placement.js";import mt from"../../components/KeepHint.js";import{AdjustIcon as ht,AlignLeftIcon as gt,AlignSeparateIcon as bt,AnimationIcon as be,BackgroundIcon as xt,BlockSectionIcon as St,CartIcon as Ct,ColumnWidthsIcon as xe,ColumnsIcon as It,CornerIcon as _t,DirectionDownIcon as yt,DirectionLeftIcon as Et,DirectionRightIcon as Tt,DirectionUpIcon as Rt,DollarIcon as Ot,FinishIcon as Nt,GapIcon as Se,GridIcon as At,GroundIcon as Lt,HashIcon as Ce,HeightIcon as Ft,ImageIcon as vt,ListIcon as wt,LocationIcon as Q,PaddingBottomIcon as Ie,PaddingLeftIcon as _e,PaddingRightIcon as ye,PaddingTopIcon as Ee,PageIcon as Te,PhoneIcon as Pt,PlacementIcon as kt,ProductSizeIcon as Dt,RotateIcon as Bt,SquareIcon as Ht,TypeIcon as Gt,WidthIcon as Mt,WrapIcon as Wt}from"efficient-easel/icons";import{FieldGlyph as Re}from"../../components/FieldGlyph.js";import{resolvePageBackground as Kt}from"../content/page-background.js";import{CORNER_SIDES as Oe,CORNER_SIDE_POINTS as Ut,hasOwnSectionCorners as Xt,normalizeCornerSides as Ne}from"../content/section-corners.js";import{SECTION_MOTION_NONE as $t,SECTION_MOTION_OPTIONS as zt}from"../content/section-animation.js";import{enclosingSectionProps as Ae}from"./enclosing-section.js";import{SettingsDefaultReset as C,SettingsField as h,SettingsGroupHead as Vt,SettingsGroupSub as jt,SettingsSegmented as Yt,SettingsSwitch as qt}from"efficient-easel/panel";import{FieldSelect as Jt,ListField as Zt}from"efficient-easel/fields";import{AlignmentGrid as Qt,Checkbox as en,CornersInput as tn,DateTimePicker as nn,FOCAL_DEFAULT as Le,Slider as on,Tooltip as $}from"efficient-shell/ui";import{ColourControl as Fe}from"./ColourControl.js";import ve from"./MarkupToolbar.js";import{deviceField as O}from"./device-fields.js";import{NO_CONTROL_FIELD as rn,NoControlMark as ln,noControlField as we}from"./panel-no-control-mark.js";import{OWN_BOX_FIELD as an}from"./own-box.js";import{phoneKey as z,resolvePhoneValue as ee}from"./phone-override.js";import{SuppressibleText as sn}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as cn,CARD_OUTLINE_OPTIONS as un,DEFAULT_CARD_INDEX_FORMAT as dn,DEFAULT_CARD_OUTLINE as pn}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as fn,DEFAULT_COVER_INDEX as mn}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as hn}from"./text-control-kinds.js";import gn from"../../components/ImageFocusRow.js";import bn from"../../components/MediaUploadField.js";import xn from"../../components/MultiSelectField.js";import Sn from"../../components/SectionThemePicker.js";import Cn from"../../components/SearchSelectField.js";import In from"../../components/StorefrontLinkField.js";import Pe from"../../components/UiIcon.js";import{SECTION_PADDING as _}from"../content/section-padding.js";import{hasPhoneHeight as _n,resolveSectionMinHeight as yn}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as En,SECTION_MIN_HEIGHT_GROUP_LABEL as G,SECTION_SCREEN_PCT as Tn}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as Rn,containerDirectionPoints as On,resolveContainerDirection as ke}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Nn,BOX_BLOCK_SPACING_LABEL as An,BOX_BLOCK_SPACING_POINTS as De,BOX_JUSTIFY_POINTS as Be,BOX_PHONE_ROW_LABEL as Ln,BOX_PHONE_ROW_MAX as Fn,BOX_PHONE_ROW_MIN as He,BOX_SHARE_LABEL as Ge,BOX_SHARE_POINTS as te,BOX_WRAP_LABEL as vn,BOX_WRAP_POINTS as Me}from"../content/box-layout.js";import{usePreviewHeader as V}from"../../components/PreviewHeaderContext.js";import{CONTAINER_GAP as ne,CONTAINER_GAP_BUILT_IN as wn,GAP_FIELD_CONTAINER as Pn,hasOwnContainerGap as kn,resolveContainerGap as Dn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as Bn,CARD_IMAGE_BG_OFF as Hn,CARD_IMAGE_BG_SWATCH_NAMES as Gn,CARD_IMAGE_BG_SWATCHES as Mn,isCardImageBackgroundInheriting as Wn,cardImageBackgroundChoice as Kn,THEME_CARD_IMAGE_BG as Un}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as Xn,SECTION_BG_SWATCHES as $n,SECTION_BG_SWATCH_NAMES as zn,THEME_SECTION_BG as Vn,isSectionBackgroundInheriting as jn}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as Yn}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as qn,TYPE_SIZE_INHERIT as Jn,isTypeSizeInheriting as Zn}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as Qn,WIDTH_CHOICE_LABEL as eo,WIDTH_INHERIT as to,resolveWidth as no,sectionRunsFullWidth as We}from"../content/section-width.js";import{useFoldHeadingLevel as Ke}from"./panel-heading-scope.js";import{withStyleKind as oo}from"efficient-easel/style-clipboard";function M(e){for(const[t,n]of Object.entries(e))n&&typeof n=="object"&&!X(n)&&oo(n,`section:${t}`);return e}function Qr({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function Ue(){return null}function ro(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(Ue,{},e)}function io(e){return e.type===Ue}function P(e){return io(e)?void 0:e}function k(e,t){return l("{value} from {from}",{value:e,from:t})}function lo(){const{appState:e}=F(i=>i),t=e.data.root?.props??{},{mode:n,pageWidth:o}=no(t,"full");return n==="page"?k(`${o}px`,l("the page")):n==="contained"?k(l("Contained"),l("the page")):k(l("Full"),l("the page"))}function ao(){const{blockGap:e}=V();return e===null?l("this container's own spacing"):k(`${e}px`,l("Site styles"))}function so({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:ao(),onReset:t})}function co({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:lo(),onReset:t})}function D({value:e,onChange:t,label:n,placeholder:o,hint:i,multiline:a,hideable:c=!0,markup:s=!0}){const{text:u,hidden:p}=ce(e),m=Z(null),d=Z(null),f=T=>t(c?{text:T,hidden:p}:T),g=()=>t({text:u,hidden:!p}),b=c&&p,E=tt(),x=i?ho(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(mt,{children:l(i)}):void 0,K=p?l("Show {label} on the slide",{label:l(n)}):l("Hide {label} on the slide",{label:l(n)});return r(h,{label:l(n),icon:r(Gt,{}),htmlFor:E,className:b?"is-hidden":void 0,hint:x,action:c?r($,{content:K,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":p,"aria-label":K,onClick:g,children:p?r(Pe,{name:"eye-off",size:14}):r(Pe,{name:"eye",size:14})})}):void 0,children:L("div",{className:"sf-copybox",children:[s&&r(ve,{target:a?d:m,value:u,onChange:f}),a?r("textarea",{id:E,ref:d,value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)}):r("input",{id:E,ref:m,type:"text",value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)})]})})}function ei(e,t){return{...e,[fe]:t}}function ti(e){const t=e[y];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[y]:{...t,offPage:!0}}}function ni(e){return!e||typeof e!="object"?!1:e[y]?.offPage===!0}function oi(e){const t=e[y];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[y]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as pl,SCALAR_TEXT_CONTROLS as fl}from"./text-control-kinds.js";function ri(e,t){if(!e[y])throw new Error("inOwnBox: the field holds no authored text");const{[rn]:o,...i}=e;return{...i,[an]:!0,render:t}}const uo=new Set(hn),B=(e,t)=>{const n={...t,[y]:e};if(!uo.has(e.control))return n;const o=t.render;return{...we(n,"authored-copy"),render:i=>r(sn,{name:i.name,children:o(i)})}},ii="Everything else on this block comes from the linked post. Unlink it to edit by hand.",po="Select a word, then press the highlighter.",fo="A short name so a link can jump straight to this section, like yoursite.com/page#about.",mo=new Set([po]),ho=e=>mo.has(e);function li(e,t,n){return B({control:"text",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n})})}function ai(e,t,n){return B({control:"textarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0})})}function go(e,t,n){return B({control:"plainText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1,markup:!1})})}function si(e,t,n){return B({control:"copyText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1})})}function ci(e){return{type:"custom",[de]:{label:e},render:({value:t,onChange:n})=>r(In,{value:ue(t),onChange:n,label:e})}}function ui(e,t,n){return B({control:"plainTextarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0,hideable:!1})})}const di={Design:ht,Animation:be};function pi(e,t){return e.includes("Design")?t!=="Design":null}function bo({label:e}){return r(Vt,{title:l(e),level:Ke(1)})}function xo({level:e,label:t}){return e===1?r(bo,{label:t}):r(Io,{label:t})}function Xe(e,t){return{type:"custom",[U]:{label:e,level:t},render:()=>r(xo,{level:t,label:e})}}function I(e){return Xe(e,2)}function fi(e){return{type:"custom",render:()=>r(So,{text:e})}}function So({text:e}){return r("p",{className:"sf-note",children:l(e)})}function mi(e){return Xe(e,1)}function hi(e){return X(e)!==null&&e?.tabs!==void 0}const $e=new Map;function gi(e,t){const n=`${e}\0${t?t.join(""):""}`,o=$e.get(n)??{type:"custom",tabs:t,[U]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(R,{})};return $e.set(n,o),o}function bi(e){return X(e)!==null&&e?.designGroup!==void 0}const ze=new Map;function xi(e){const t=ze.get(e)??{type:"custom",[U]:{label:e,level:1},designGroup:e,marker:!0,...e==="Content"?{}:{fold:e},render:()=>r(R,{})};return ze.set(e,t),t}function Co(e){const t=e;return t?.marker===!0&&typeof t.fold=="string"?t.fold:null}function Si(e,t){return Co(e)===t?e:{...e,marker:!0,fold:t,render:()=>r(R,{})}}function Ci(e){const t=e;if(t.marker===!0&&t.fold===void 0)return e;const{fold:n,...o}=e;return{...o,marker:!0,render:()=>r(R,{})}}function Io({label:e}){return r(jt,{title:l(e),level:Ke(2)})}function Ve({swatches:e,current:t,onPick:n,names:o}){const i=e.find(s=>s.toLowerCase()===t.toLowerCase()),a=i?o?.[i]:void 0,c=a?l(a):t;return L("div",{className:"sf-swatches",children:[e.map(s=>{const u=o?.[s]?l(o[s]):s;return r($,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===s.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===s.toLowerCase()?"is-active":""}`,style:{background:s},onClick:()=>n(s),"aria-label":u})},s)}),r("span",{className:"sf-swatch-hex",children:c})]})}function Ii(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=jn(n,t);return r(h,{label:l(e),icon:r(xt,{}),changed:!i,action:r(C,{words:S()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>o(Xn)}),children:Ve({swatches:$n,current:i?Vn:n??t??"",onPick:o,names:zn})})}}}function _o(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=n,a=Wn(i,t);return r(h,{label:l(e),icon:r(Lt,{}),changed:!a,action:r(C,{words:S()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>o(Bn)}),children:Ve({swatches:Mn,current:a?Un:Kn(i,t),onPick:o,names:Gn})})}}}function _i(e=n=>n,t){return M({_gSectionTheme:I(Yn),sectionAccent:{type:"custom",render:({value:n,onChange:o})=>r(Sn,{value:e(n),onChange:o,followLabel:t})}})}function W({min:e,max:t,step:n,value:o,onChange:i,suffix:a="",readout:c=!0,notch:s,ariaLabel:u,disabled:p=!1}){const m=s!==void 0&&Number.isFinite(s)&&s>=e&&s<=t;return r("div",{className:m?"sf-slider has-notch":"sf-slider",style:m?{"--sf-notch":(s-e)/(t-e)}:void 0,children:r(on,{min:e,max:t,step:n,value:o,suffix:a||void 0,showInput:c,label:u===void 0?void 0:l(u),disabled:p,size:"sm",className:"sf-slider-track",onChange:d=>{d!==null&&d!==o&&i(d)}})})}function H(e,t,n,o,i,a,c="",s){return{type:"custom",render:u=>r(h,{label:l(e),icon:P(t),action:s?s("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:W({min:n,max:o,step:i,value:typeof u.value=="number"?u.value:a,suffix:c,ariaLabel:e,onChange:u.onChange})})}}function je(e,t){const{min:n,max:o,step:i=1,unsetLabel:a,hint:c,restTrack:s,unsetMark:u,icon:p}=t;return{type:"custom",render:({value:m,onChange:d})=>{const f=typeof m=="number"?m:null,g=f===null;return r(h,{label:l(e),icon:p?P(p):void 0,value:g?u||a===void 0?void 0:l(a):`${f}px`,changed:!g,action:u?ae(u,{changed:!g,onReset:()=>d(null)}):r(C,{words:S()?.panel,label:l(e),changed:!g,onReset:()=>d(null)}),hint:typeof c=="string"?l(c):c,children:s?s({min:n,max:o,step:i,px:f,label:e,onChange:d}):W({min:n,max:o,step:i,value:f??n,readout:!1,ariaLabel:e,onChange:d})})}}}function yi(e){const t=H("Gap",r(Se,{}),ne.min,ne.max,ne.step,wn[e],"px",(n,o)=>r(so,{inherited:!kn(e,n),onReset:()=>o(void 0),label:"Gap"}));return{type:"custom",[Pn]:e,render:n=>t.render({...n,value:Dn(e,n.value,n.field?.siteGap),storedValue:n.value,onChange:o=>n.onChange(o)})}}const j="Corners";function oe(e){return{type:"custom",render:({value:t,onChange:n})=>{const o=typeof t=="number"&&Number.isFinite(t)?t:null,i=o!==null;return r(h,{label:l(j),icon:r(_t,{}),changed:i,action:ae(e.mark,{changed:i,onReset:()=>n(null)}),hint:e.hint,children:r(Eo,{tier:e,px:o,onRadius:n})})}}}function yo(e){let t=null;try{t=nt()}catch{t=null}return[t?.values?.[e],n=>t?.onChange(e,n)]}function Eo({tier:e,px:t,onRadius:n}){const o=e.useFollowed(),i=e.useClosedReason?e.useClosedReason():null,[a,c]=yo(e.sidesKey),s=Ne(a)??[...Oe];return r(tn,{className:"sf-corners",label:l(j),value:s,corners:Ut,onChange:u=>{const p=Ne(u)??[];c(p.length===Oe.length?null:p)},radius:t,onRadiusChange:n,radiusMin:v,radiusMax:me,radiusStep:e.step??1,radiusPlaceholder:String(o),disabled:i!==null,disabledReason:i??void 0})}function Ye(){return we({type:"custom",render:()=>r(ln,{})},"always")}function To({label:e,changed:t=!1,onReset:n=()=>{}}){const{cornerRadiusPx:o}=V(),i=typeof o=="number"?`${o}px`:l("not set");return r(C,{words:S()?.panel,label:l(e),changed:t,detail:o==null?l("the built-in corners"):k(i,l("Site styles")),onReset:n})}function Ro(){const{cornerRadiusPx:e}=V();return typeof e=="number"?e:v}function Oo(){return oe({sidesKey:"sectionCornerSides",useFollowed:Ro,useClosedReason:()=>Je()?l(qe):null,mark:r(To,{label:j}),hint:r(No,{})})}const qe="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function Je(){return We(Y())}function No(){return r(R,{children:Je()?qe:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function Ei(){return M({_gShape:I("Shape"),sectionCorners:Oo(),sectionCornerSides:Ye()})}function Ti(){return{_gMotion:I("Motion"),sectionAnimation:le("Entrance",r(be,{}),[...zt],$t)}}function re(){let e=null;try{const{appState:t,selectedItem:n}=F(i=>i),o=n?.props?.id?String(n.props.id):void 0;e=o?Ae(t?.data,o):null}catch{e=null}return e!==null&&We(e)}function Ze(e){const{cornerRadiusPx:t}=V(),n=re(),o=typeof t=="number"?t:e;let i=null;try{const{appState:c,selectedItem:s}=F(p=>p),u=s?.props?.id?String(s.props.id):void 0;i=u?Ae(c?.data,u):null}catch{i=null}if(n||!i)return o;const a=i.sectionCorners;return Xt(a)?a:o}function Ao({label:e,changed:t=!1,onReset:n=()=>{}}){const o=re(),i=Ze(v),a=o?"Site":"Section";return r(C,{words:S()?.panel,label:l(e),changed:t,detail:k(`${i}px`,o?l("Site styles"):l("the section")),onReset:n})}function Lo(){return r(R,{children:re()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function Fo(){return oe({sidesKey:"cardCornerSides",useFollowed:()=>Ze(v),mark:r(Ao,{label:j}),hint:r(Lo,{})})}function vo(){return{type:"custom",render:()=>r(rt,{})}}function Ri(){return{_gShape:I("Shape"),cardCorners:Fo(),cardCornerSides:Ye(),cardCornersApplyAll:vo()}}function Oi(){return N("Justify",r(bt,{}),Be,Be[0].value)}function Ni(){return N("Item alignment",r(gt,{}),Nn,"stretch")}function Ai(){return N(vn,r(Wt,{}),Me,Me[0].value)}function Li(){return{type:"custom",render:({value:e,onChange:t})=>{const n=te.find(o=>o.value===e)??te[0];return r(h,{label:l(Ge),icon:r(xe,{}),value:l(n.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(Ge),children:te.map(o=>r($,{content:l(o.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":n.value===o.value,"aria-label":l(o.label),onClick:()=>t(o.value),children:r("span",{className:"sf-gallery-pic",children:wo(o.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},o.value))})})}}}function wo(e){if(!e)return[3,4];const t=e.reduce((n,o)=>n+o,0);return e.map(n=>Math.round(n/t*12))}function Fi(){return N(An,r(Se,{}),De,De[0].value)}function vi(){return H(Ln,r(Pt,{}),He,Fn,1,He)}function wi(e){const t=le(Rn,ro("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),On(e),ke(e,void 0));return{type:"custom",render:n=>t.render({...n,value:ke(e,n.value),onChange:o=>n.onChange(o)})}}function Pi(e,t,n,o,i,a){return{type:"custom",render:({value:c,onChange:s})=>r(h,{label:l(e),icon:r(Re,{noun:a}),action:r(C,{words:S()?.panel,label:l(e),changed:!Zn(c),detail:l("the Text style in Site styles"),onReset:()=>s(Jn),defaultAction:{onPress:()=>s(qn),title:l("Keep this section's own built-in size"),icon:r(St,{})}}),children:W({min:t,max:n,step:o,value:typeof c=="number"?c:i,suffix:"px",ariaLabel:e,onChange:s})})}}function ki(){return{_gCellWidth:I("Cell width"),gridSpan:N("Positions",r(xe,{}),[{label:"Auto",value:""},...Array.from({length:st},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function Y(){let e=null;try{e=F(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Po({min:e,max:t,step:n,px:o,label:i,onChange:a,desktopKey:c,fallback:s}){const u=Y()[c],p=ee(void 0,u,s);return r(R,{children:W({min:e,max:t,step:n,value:ee(o,u,s),readout:!1,ariaLabel:i,notch:p,onChange:a})})}function ko({label:e,desktopKey:t,fallback:n,changed:o=!1,onReset:i=()=>{}}){const a=Y()[t],c=ee(void 0,a,n);return r(C,{words:S()?.panel,label:l(e),changed:o,detail:l("{value} on desktop",{value:`${c}px`}),onReset:i})}function Do(e){return je(e.label,{icon:e.icon,min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(ko,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Po,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const Bo={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"},Ho={Top:Ee,Bottom:Ie,Left:_e,Right:ye},Go=e=>{const t=Ho[e];return r(t,{})};function Di(e={}){const t=e.keys?.top??"sectionPaddingTop",n=e.keys?.bottom??"sectionPaddingBottom",o=e.group!==!1,i=x=>Bo[x],a=x=>H(i("Top"),r(Ee,{}),_.min,_.max,_.step,x,"px"),c=(x,K,T,J=_)=>O("mobile",Do({label:i(x),icon:Go(x),desktopKey:K,min:J.min,max:J.max,step:J.step,fallback:T})),s=e.top??_.min,u=e.bottom??_.min,p="sectionPaddingLeft",m="sectionPaddingRight",d=e.sideBounds??_,f=e.side??d.min,g=e.sidePhone??f,b=e.phone===!0,E=x=>b?O("desktop",x):x;return M({...o?{_gSpacing:I("Padding")}:{},[t]:E(a(s)),...b?{[z(t)]:c("Top",t,s)}:{},...e.only==="top"?{}:{[n]:E(H(i("Bottom"),r(Ie,{}),_.min,_.max,_.step,u,"px")),...b?{[z(n)]:c("Bottom",n,u)}:{}},...e.sides?{[p]:E(H(i("Left"),r(_e,{}),d.min,d.max,d.step,f,"px")),...b?{[z(p)]:c("Left",p,g,d)}:{},[m]:E(H(i("Right"),r(ye,{}),d.min,d.max,d.step,f,"px")),...b?{[z(m)]:c("Right",m,g,d)}:{}}:{}})}const Mo={contained:"Contained",page:"Page",full:"Full"},q="Width";function Bi(e,t=Qn,n=!0){const o=t.map(i=>({label:eo[i]??Mo[i],value:i}));return M({...n?{_gWidth:I(q)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(q),icon:r(Mt,{}),action:n?r(co,{inherited:a?.inherited??!1,onReset:()=>i(to),label:q}):void 0,children:ie({options:o,value:a?.currentValue||e,onChange:i,ariaLabel:q})})}})}function Hi(){const e=o=>({type:"custom",render:({value:i,onChange:a})=>r(h,{label:G,icon:P(r(Ft,{})),action:o?o(a):void 0,children:ie({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:G})})}),t=()=>({type:"custom",render:({value:o,onChange:i,field:a})=>{const c=a?.unit==="%"?"%":"px",s=c==="%"?Tn:En;return r("div",{className:"sf-field",children:W({min:s.min,max:s.max,step:s.step,value:typeof o=="number"?o:s.fallback,suffix:c,ariaLabel:G,onChange:i})})}}),n=()=>le("Unit",r(Ce,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return M({_gHeight:I(G),sectionHeightMode:O("desktop",e()),sectionHeightValue:O("desktop",t()),sectionHeightUnit:O("desktop",n()),sectionHeightModePhone:O("mobile",e(o=>r(Wo,{onClear:()=>o(void 0)}))),sectionHeightValuePhone:O("mobile",t()),sectionHeightUnitPhone:O("mobile",n())})}function Wo({onClear:e}){const t=Y(),n=_n(t),o=yn(t),i=l("{value} on desktop",{value:o.mode==="auto"?l("Auto"):`${o.value}${o.unit}`});return r(C,{words:S()?.panel,label:l(G),changed:n,detail:i,onReset:e})}function Gi(){return{_gAnchor:I("Anchor"),anchor:go("Anchor name","e.g. about",fo)}}function Mi(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=`${a??c??e}-datetime`,u=Date.parse(typeof o=="string"?o:"");return r(h,{label:l(e),icon:t,htmlFor:s,hint:n===void 0?void 0:l(n),children:r(nn,{id:s,value:Number.isFinite(u)?new Date(u):null,onChange:p=>i(p?p.toISOString():"")})})}}}function A(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=typeof o=="boolean"?o:t,u=`${a??c??e}-label`;return r(h,{label:l(e),labelId:u,icon:n,action:r(qt,{checked:s,onChange:i,ariaLabelledBy:u})})}}}function Wi(){return{type:"custom",render:({value:e,onChange:t,id:n,name:o})=>{const i=`${String(n??o??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Te,{}),htmlFor:i,action:r(Fe,{id:i,label:"Background",value:Kt(e),onChange:t})})}}}function Ki(e,t){return{type:"custom",render:({value:n,onChange:o,id:i})=>{const a=typeof n=="boolean"?n:t,c=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:c,className:"sf-checkbox",action:r(en,{id:c,checked:a,onChange:o})})}}}function Ui(e,t){return{type:"custom",render:({value:n,onChange:o})=>r(h,{label:l(e),action:Fe({value:n||t,onChange:o,label:e})})}}const Ko=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function Qe({label:e,value:t,onChange:n,points:o=Ko}){const i=o.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(Qt,{label:l(e),value:t,points:i,onChange:n})}function Xi(e,t=Le,n="mediaImage"){return{type:"custom",render:({value:o,onChange:i})=>r("div",{className:"sf-focal-row",children:r(Uo,{label:e,value:o||t,onChange:i,imageProp:n})})}}function Uo({label:e,value:t,onChange:n,imageProp:o}){const{selectedItem:i}=F(c=>c),a=i?.props?.[o];return r(gn,{label:e,value:t,onChange:n,image:typeof a=="string"?a:void 0})}const Xo=ge([]);function $i(e,{stacking:t,fallback:n=pt}){return{type:"custom",render:({value:o,onChange:i})=>{const a=dt.includes(o)?o:n;return t?r($o,{label:e,value:a,onChange:i}):et({label:e,value:a,onChange:i,points:Xo})}}}function $o({label:e,value:t,onChange:n}){const{appState:o,selectedItem:i}=F(s=>s),a=i?.props?.id?String(i.props.id):void 0,c=a?ut(o?.data,a):[];return et({label:e,value:t,onChange:n,points:ge(c,a)})}function et({label:e,value:t,onChange:n,points:o}){const i=o.find(a=>a.disabled);return r(h,{label:l(e),icon:r(kt,{}),hint:i?.title?l(i.title):void 0,children:Qe({label:e,value:ft(t),onChange:n,points:o})})}const zi={top:r(Rt,{}),right:r(Tt,{}),bottom:r(yt,{}),left:r(Et,{})};function Vi(e,t,n,o,i,a){const c=m=>t.find(d=>d.value===m),s=m=>({value:m,label:"",disabled:!0,title:o}),u=m=>{const d=t.find(g=>g.cell===m);if(!d)return s(`missing-${m}`);const f=a?.[m];return f?{value:d.value,label:d.label,icon:f}:{value:d.value,label:d.label}},p=[s("corner-top-left"),u("top"),s("corner-top-right"),u("left"),s("centre"),u("right"),s("corner-bottom-left"),u("bottom"),s("corner-bottom-right")];return{type:"custom",render:({value:m,onChange:d})=>{const f=t.some(g=>g.value===m)?m:n;return r(h,{label:l(e),icon:i,value:c(f)?.label?l(c(f).label):"",children:Qe({label:e,value:f,onChange:d,points:p})})}}}const zo="\0note";function N(e,t,n,o,i){return{type:"custom",options:n,fallback:o,...i?{note:i}:{},render:({value:a,onChange:c,field:s})=>{const u=s.options??n,p=s.fallback??o,m=u.some(d=>d.value===a)?a:p;return r(h,{label:l(e),icon:P(t),children:r(Jt,{value:m,ariaLabel:l(e),onChange:c,options:[...i?[{label:l(i),value:zo,disabled:!0}]:[],...u.map(d=>({label:l(d.label),value:d.value}))]})})}}}function ji(e,t,n){return{type:"custom",options:t,render:({value:o,onChange:i,field:a})=>r(xn,{label:e,options:(a.options??t).map(c=>({...c,label:l(c.label)})),value:Array.isArray(o)?o:[],onChange:i,...n?{emptyLabel:l(n)}:{}})}}function Yi(e,t,n,o){return{type:"custom",options:t,fallback:n,render:({value:i,onChange:a,field:c})=>r(Cn,{label:e,options:(c.options??t).map(s=>({...s,label:l(s.label)})),fallback:c.fallback??n,value:i,onChange:a,placeholder:o===void 0?void 0:l(o)})}}function qi(e,t={}){return{type:"custom",render:({value:n,onChange:o})=>{const i={value:n,onChange:o,...t};return r(e,{...i})}}}function ie({options:e,value:t,onChange:n,ariaLabel:o,disabled:i=!1}){return r(Yt,{options:e.map(a=>a.picture?{id:a.value,label:a.picture,title:l(a.title??a.label)}:{id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)}),value:t,onChange:n,ariaLabel:l(o),disabled:i})}const Ji=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function le(e,t,n,o){const i=n.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:c,field:s})=>r(h,{label:l(e),icon:P(t),children:ie({options:i,value:i.some(u=>u.value===a)?a:a||s?.currentValue||o,onChange:c,ariaLabel:e})})}}function Zi(e,t,n){return{type:"custom",[pe]:!0,render:({value:o,onChange:i})=>r(bn,{value:o||"",onChange:i,label:e,accept:t,placeholder:n})}}const Qi={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function el({value:e,onChange:t,label:n}){const o=e||{},i=!!o.pending,a=i?"var(--fg-dim, #888)":o.ok?"#1d9e75":"#d85a30",c=(s,u)=>t({...o,[s]:u===""?void 0:Number(u)});return L(h,{label:l(n),icon:r(Q,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...o,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),o.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(o.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...o,manual:!o.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:o.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),o.manual&&L("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof o.lat=="number"?o.lat:"",onChange:s=>c("lat",s.target.value)})}),r(h,{label:l("Longitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof o.lng=="number"?o.lng:"",onChange:s=>c("lng",s.target.value)})})]})]})}function Vo(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function jo(e,t,n){const o=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?o:o.map((i,a)=>a===t?{text:n}:i)}function tl(e,t){return e===null?null:t>e?e:null}function Yo(e,t,n){if(n===null||n>=t.length)return null;for(let o=0;o<n;o+=1)if(e[o]!==t[o])return null;return e[n]!==t[n]&&t.includes(e[n])||e[n]!==t[n]&&t.length!==e.length?null:n}const nl={label:"Ticker items",icon:r(wt,{})};function ol(e,t,n,o){return{type:"custom",[y]:{control:"textList",label:e,placeholder:n,itemKey:"text",rendering:o},render:({value:i,onChange:a})=>r(qo,{label:e,icon:P(t),items:Array.isArray(i)?i:[],placeholder:n,onChange:a,markup:o==="markup"})}}function qo({label:e,icon:t,items:n,placeholder:o,onChange:i,markup:a=!1}){const c=Z(null),[s,u]=se(null),p=d=>d.map(f=>({text:f?.text??""})),m=d=>{const f=Yo(n,d,s);f===null&&(c.current=null),u(f),i(p(d))};return r(Zt,{label:l(e),icon:t,noun:l("item"),items:n,onChange:m,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(ve,{target:c,value:Vo(n,s),onChange:d=>i(jo(n,s??-1,d)),disabled:s===null,label:s===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:s+1})}):void 0,renderRow:(d,f,g)=>r("input",{type:"text",className:a&&s===f?"sf-list-marking":void 0,value:d?.text??"",placeholder:l(o),"aria-label":l("{label} {n}",{label:l(e),n:f+1}),onChange:b=>g({text:b.target.value}),onFocus:b=>{c.current=b.currentTarget,u(f)}})})}function rl(e,t){const n=`${e.label} — row ${t+1}`;return B({control:"plainText",label:n,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function il(e){return{_gCards:I("Cards"),coverIndex:N("Cover image",r(vt,{}),fn,String(mn),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:_o("Image background",Hn),cardImage:Jo(),spinOnHover:A("Rotate on hover",e?.spinDefault??!0,r(Bt,{}))}}function ll(){return{outline:N("Card outline",r(Ht,{}),un,pn),indexBadge:N("Card number",r(Ce,{}),cn,dn),showBadge:A("Product badge",!0,r(Re,{noun:"tag"}))}}function al(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:I("Show on a card"),showCardPrice:A("Price",!0,r(Ot,{})),showCardFinishes:A("Finish swatches",!0,r(Nt,{})),showCardSizes:A("Sizes",t,r(Dt,{})),showCardBuy:A("Buy button",t,r(Ct,{})),showCardPage:A("Page button",t,r(Te,{}))}}function Jo(){return je("Card image",{min:v,max:me,step:it,hint:"Rounds the picture. The card's own corner is in Site styles."})}function sl(){return oe({sidesKey:"cornerSides",step:lt,useFollowed:()=>v,mark:r(Zo,{label:at}),hint:l("Rounds the picture. Left alone it stays square.")})}function Zo({label:e,changed:t=!1,onReset:n=()=>{}}){return r(C,{words:S()?.panel,label:l(e),changed:t,onReset:n})}function cl(){return{type:"custom",render:({value:e,onChange:t})=>r(Qo,{value:typeof e=="string"?e:"",onChange:t})}}function Qo({value:e,onChange:t}){const[n,o]=se(null),i=he.filter(c=>n===null||w[c].across===n),a=e&&e in w?w[e]:null;return L(R,{children:[r(h,{label:l("Photos in a row"),icon:r(It,{}),children:L("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":n===null,onClick:()=>o(null),children:l("All")}),ct.map(c=>r("button",{type:"button","aria-pressed":n===c,onClick:()=>o(c),children:c},c))]})}),r(h,{label:l("Layout"),icon:r(At,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:he.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(c=>r($,{content:l(w[c].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===c,"aria-label":l(w[c].label),onClick:()=>t(e===c?"":c),children:r("span",{className:"sf-gallery-pic",children:w[c].desktop.map(([s,u],p)=>r("i",{style:{gridColumn:`span ${s}`,gridRow:`span ${u}`}},p))})})},c))})})]})}export{fo as ANCHOR_HINT,ii as BOUND_TO_POST_NOTE,di as BUCKET_ICONS,Qi as CUSTOM_FIELD_MEDIA,el as CoordsField,zi as EDGE_ARROWS,Le as FOCAL_DEFAULT,Ko as FOCAL_POINTS,U as FOLD_FIELD_MARKER,Qe as FocalPicker,Io as GroupLabel,po as HIGHLIGHT_HINT,D as HidableTextField,de as LINK_FIELD_MARKER,Qr as Label,pe as MEDIA_FIELD_MARKER,Ji as MEDIA_TYPE_OPTIONS,So as PanelNoteLine,et as PlacementGridView,fe as SCAFFOLD_FIELD_MARKER,fl as SCALAR_TEXT_CONTROLS,qe as SECTION_BLEEDS_HINT,bo as SectionHeading,ie as Segmented,so as SiteGapDefaultReset,W as Slider,Ve as Swatches,pl as TEXT_CONTROL_KINDS,y as TEXT_FIELD_MARKER,nl as TICKER_ITEMS_ROW,qo as TextListField,co as WidthDefaultReset,Yo as aimAfterListChange,Gi as anchorFields,k as backTo,Ii as backgroundField,Ni as boxAlignField,Fi as boxBlockSpacingField,Oi as boxJustifyField,vi as boxPhoneRowField,Li as boxShareField,Ai as boxWrapField,gi as bucketHeader,Fo as cardCornersField,_o as cardImageBackgroundField,Jo as cardImageField,il as cardMediaFields,Ri as cardShapeFields,al as cardShowFields,ll as cardStyleFields,ki as cellWidthFields,Ki as checkbox,Ui as colorInput,si as copyText,Ye as cornerSidesField,oe as cornersRowField,Mi as dateTime,xi as designGroupHeader,wi as directionField,Vi as edgePad,pi as entriesHiddenForTab,Xi as focalPicker,tl as focusAfterRemove,Si as foldMarker,X as foldMetaOf,Co as foldTitleOf,cl as galleryLayoutField,yi as gapField,I as group,Hi as heightFields,ue as hidableText,ho as hintIsWhileTyping,P as iconOf,sl as imageCornersField,ri as inOwnBox,hi as isBucketHeader,bi as isDesignGroupHeader,io as isNoGlyph,ci as linkField,ji as multiSelect,ro as noGlyph,Wi as pageBackgroundField,fi as panelNote,Do as phoneOverrideField,$i as placementField,go as plainText,ui as plainTextarea,je as pxField,Ci as quietMarker,ce as readHidable,Vo as rowText,Yi as searchSelect,mi as section,Ti as sectionAnimationFields,Oo as sectionCornersField,Ei as sectionShapeFields,_i as sectionThemeFields,le as segmented,N as select,jo as setRowText,Pi as sizeField,H as slider,qi as sourceField,Di as spacingFields,li as text,ot as textFieldIdentifier,ni as textFieldOffPage,ol as textList,rl as textListRowField,ai as textarea,A as toggle,Zi as upload,lo as usePageWidthDetail,ao as useSiteGapDetail,Bi as widthField,oi as withIdentifier,ti as withOffPage,ei as withScaffold};
1
+ "use client";import{jsx as r,jsxs as L,Fragment as R}from"react/jsx-runtime";import{cloneElement as ae,useId as tt,useRef as Z,useState as se}from"react";import{useEasel as F,useSelectedFields as nt}from"efficient-easel/easel";import{say as l,editorEaselWords as S}from"../editor-words.js";import{readHidable as ce,hidableText as ue}from"./hidable.js";import{FOLD_FIELD_MARKER as U,LINK_FIELD_MARKER as de,MEDIA_FIELD_MARKER as pe,SCAFFOLD_FIELD_MARKER as fe,TEXT_FIELD_MARKER as y,foldMetaOf as X,textFieldIdentifier as ot}from"./field-markers.js";import rt from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as it,CORNER_RADIUS_MAX as me,CORNER_RADIUS_MIN as v}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as lt,IMAGE_CORNERS_LABEL as at}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as st}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as ct,GALLERY_LAYOUTS as w,GALLERY_LAYOUT_KEYS as he}from"../content/gallery-layout.js";import{anchorSiblingsOf as ut,HERO_GROUP_PLACEMENTS as dt,HERO_GROUP_PLACEMENT_DEFAULT as pt,normalisePlacement as ft,placementPoints as ge}from"../hero-group-placement.js";import mt from"../../components/KeepHint.js";import{AdjustIcon as ht,AlignLeftIcon as gt,AlignSeparateIcon as bt,AnimationIcon as be,BackgroundIcon as xt,BlockSectionIcon as St,CartIcon as Ct,ColumnWidthsIcon as xe,ColumnsIcon as It,CornerIcon as _t,DirectionDownIcon as yt,DirectionLeftIcon as Et,DirectionRightIcon as Tt,DirectionUpIcon as Rt,DollarIcon as Ot,FinishIcon as Nt,GapIcon as Se,GridIcon as At,GroundIcon as Lt,HashIcon as Ce,HeightIcon as Ft,ImageIcon as vt,ListIcon as wt,LocationIcon as Q,PaddingBottomIcon as Ie,PaddingLeftIcon as _e,PaddingRightIcon as ye,PaddingTopIcon as Ee,PageIcon as Te,PhoneIcon as Pt,PlacementIcon as kt,ProductSizeIcon as Dt,RotateIcon as Bt,SquareIcon as Ht,TypeIcon as Gt,WidthIcon as Mt,WrapIcon as Wt}from"efficient-easel/icons";import{FieldGlyph as Re}from"../../components/FieldGlyph.js";import{resolvePageBackground as Kt}from"../content/page-background.js";import{CORNER_SIDES as Oe,CORNER_SIDE_POINTS as Ut,hasOwnSectionCorners as Xt,normalizeCornerSides as Ne}from"../content/section-corners.js";import{SECTION_MOTION_NONE as $t,SECTION_MOTION_OPTIONS as zt}from"../content/section-animation.js";import{enclosingSectionProps as Ae}from"./enclosing-section.js";import{SettingsDefaultReset as C,SettingsField as h,SettingsGroupHead as Vt,SettingsGroupSub as jt,SettingsSegmented as Yt,SettingsSwitch as qt}from"efficient-easel/panel";import{FieldSelect as Jt,ListField as Zt}from"efficient-easel/fields";import{AlignmentGrid as Qt,Checkbox as en,CornersInput as tn,DateTimePicker as nn,FOCAL_DEFAULT as Le,Slider as on,Tooltip as $}from"efficient-shell/ui";import{ColourControl as Fe}from"./ColourControl.js";import ve from"./MarkupToolbar.js";import{deviceField as O}from"./device-fields.js";import{NO_CONTROL_FIELD as rn,NoControlMark as ln,noControlField as we}from"./panel-no-control-mark.js";import{OWN_BOX_FIELD as an}from"./own-box.js";import{phoneKey as z,resolvePhoneValue as ee}from"./phone-override.js";import{SuppressibleText as sn}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as cn,CARD_OUTLINE_OPTIONS as un,DEFAULT_CARD_INDEX_FORMAT as dn,DEFAULT_CARD_OUTLINE as pn}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as fn,DEFAULT_COVER_INDEX as mn}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as hn}from"./text-control-kinds.js";import gn from"../../components/ImageFocusRow.js";import bn from"../../components/MediaUploadField.js";import xn from"../../components/MultiSelectField.js";import Sn from"../../components/SectionThemePicker.js";import Cn from"../../components/SearchSelectField.js";import In from"../../components/StorefrontLinkField.js";import Pe from"../../components/UiIcon.js";import{SECTION_PADDING as _}from"../content/section-padding.js";import{hasPhoneHeight as _n,resolveSectionMinHeight as yn}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as En,SECTION_MIN_HEIGHT_GROUP_LABEL as G,SECTION_SCREEN_PCT as Tn}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as Rn,containerDirectionPoints as On,resolveContainerDirection as ke}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Nn,BOX_BLOCK_SPACING_LABEL as An,BOX_BLOCK_SPACING_POINTS as De,BOX_JUSTIFY_POINTS as Be,BOX_PHONE_ROW_LABEL as Ln,BOX_PHONE_ROW_MAX as Fn,BOX_PHONE_ROW_MIN as He,BOX_SHARE_LABEL as Ge,BOX_SHARE_POINTS as te,BOX_WRAP_LABEL as vn,BOX_WRAP_POINTS as Me}from"../content/box-layout.js";import{usePreviewHeader as V}from"../../components/PreviewHeaderContext.js";import{CONTAINER_GAP as ne,CONTAINER_GAP_BUILT_IN as wn,GAP_FIELD_CONTAINER as Pn,hasOwnContainerGap as kn,resolveContainerGap as Dn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as Bn,CARD_IMAGE_BG_OFF as Hn,CARD_IMAGE_BG_SWATCH_NAMES as Gn,CARD_IMAGE_BG_SWATCHES as Mn,isCardImageBackgroundInheriting as Wn,cardImageBackgroundChoice as Kn,THEME_CARD_IMAGE_BG as Un}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as Xn,SECTION_BG_SWATCHES as $n,SECTION_BG_SWATCH_NAMES as zn,THEME_SECTION_BG as Vn,isSectionBackgroundInheriting as jn}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as Yn}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as qn,TYPE_SIZE_INHERIT as Jn,isTypeSizeInheriting as Zn}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as Qn,WIDTH_CHOICE_LABEL as eo,WIDTH_INHERIT as to,resolveWidth as no,sectionRunsFullWidth as We}from"../content/section-width.js";import{useFoldHeadingLevel as Ke}from"./panel-heading-scope.js";import{withStyleKind as oo}from"efficient-easel/style-clipboard";function M(e){for(const[t,n]of Object.entries(e))n&&typeof n=="object"&&!X(n)&&oo(n,`section:${t}`);return e}function Qr({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function Ue(){return null}function ro(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(Ue,{},e)}function io(e){return e.type===Ue}function P(e){return io(e)?void 0:e}function k(e,t){return l("{value} from {from}",{value:e,from:t})}function lo(){const{appState:e}=F(i=>i),t=e.data.root?.props??{},{mode:n,pageWidth:o}=no(t,"full");return n==="page"?k(`${o}px`,l("the page")):n==="contained"?k(l("Contained"),l("the page")):k(l("Full"),l("the page"))}function ao(){const{blockGap:e}=V();return e===null?l("this container's own spacing"):k(`${e}px`,l("Site styles"))}function so({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:ao(),onReset:t})}function co({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:lo(),onReset:t})}function D({value:e,onChange:t,label:n,placeholder:o,hint:i,multiline:a,hideable:c=!0,markup:s=!0}){const{text:u,hidden:p}=ce(e),m=Z(null),d=Z(null),f=T=>t(c?{text:T,hidden:p}:T),g=()=>t({text:u,hidden:!p}),b=c&&p,E=tt(),x=i?ho(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(mt,{children:l(i)}):void 0,K=p?l("Show {label} on the slide",{label:l(n)}):l("Hide {label} on the slide",{label:l(n)});return r(h,{label:l(n),icon:r(Gt,{}),htmlFor:E,className:b?"is-hidden":void 0,hint:x,action:c?r($,{content:K,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":p,"aria-label":K,onClick:g,children:p?r(Pe,{name:"eye-off",size:14}):r(Pe,{name:"eye",size:14})})}):void 0,children:L("div",{className:"sf-copybox",children:[s&&r(ve,{target:a?d:m,value:u,onChange:f}),a?r("textarea",{id:E,ref:d,value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)}):r("input",{id:E,ref:m,type:"text",value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)})]})})}function ei(e,t){return{...e,[fe]:t}}function ti(e){const t=e[y];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[y]:{...t,offPage:!0}}}function ni(e){return!e||typeof e!="object"?!1:e[y]?.offPage===!0}function oi(e){const t=e[y];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[y]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as pl,SCALAR_TEXT_CONTROLS as fl}from"./text-control-kinds.js";function ri(e,t){if(!e[y])throw new Error("inOwnBox: the field holds no authored text");const{[rn]:o,...i}=e;return{...i,[an]:!0,render:t}}const uo=new Set(hn),B=(e,t)=>{const n={...t,[y]:e};if(!uo.has(e.control))return n;const o=t.render;return{...we(n,"authored-copy"),render:i=>r(sn,{name:i.name,children:o(i)})}},ii="Everything else on this block comes from the linked post. Unlink it to edit by hand.",po="Select a word, then press the highlighter.",fo="A short name so a link can jump straight to this section, like yoursite.com/page#about.",mo=new Set([po]),ho=e=>mo.has(e);function li(e,t,n){return B({control:"text",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n})})}function ai(e,t,n){return B({control:"textarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0})})}function go(e,t,n){return B({control:"plainText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1,markup:!1})})}function si(e,t,n){return B({control:"copyText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1})})}function ci(e){return{type:"custom",[de]:{label:e},render:({value:t,onChange:n})=>r(In,{value:ue(t),onChange:n,label:e})}}function ui(e,t,n){return B({control:"plainTextarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0,hideable:!1})})}const di={Design:ht,Animation:be};function pi(e,t){return e.includes("Design")?t!=="Design":null}function bo({label:e}){return r(Vt,{title:l(e),level:Ke(1)})}function xo({level:e,label:t}){return e===1?r(bo,{label:t}):r(Io,{label:t})}function Xe(e,t){return{type:"custom",[U]:{label:e,level:t},render:()=>r(xo,{level:t,label:e})}}function I(e){return Xe(e,2)}function fi(e){return{type:"custom",render:()=>r(So,{text:e})}}function So({text:e}){return r("p",{className:"sf-note",children:l(e)})}function mi(e){return Xe(e,1)}function hi(e){return X(e)!==null&&e?.tabs!==void 0}const $e=new Map;function gi(e,t){const n=`${e}\0${t?t.join(""):""}`,o=$e.get(n)??{type:"custom",tabs:t,[U]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(R,{})};return $e.set(n,o),o}function bi(e){return X(e)!==null&&e?.designGroup!==void 0}const ze=new Map;function xi(e){const t=ze.get(e)??{type:"custom",[U]:{label:e,level:1},designGroup:e,marker:!0,...e==="Content"?{}:{fold:e},render:()=>r(R,{})};return ze.set(e,t),t}function Co(e){const t=e;return t?.marker===!0&&typeof t.fold=="string"?t.fold:null}function Si(e,t){return Co(e)===t?e:{...e,marker:!0,fold:t,render:()=>r(R,{})}}function Ci(e){const t=e;if(t.marker===!0&&t.fold===void 0)return e;const{fold:n,...o}=e;return{...o,marker:!0,render:()=>r(R,{})}}function Io({label:e}){return r(jt,{title:l(e),level:Ke(2)})}function Ve({swatches:e,current:t,onPick:n,names:o}){const i=e.find(s=>s.toLowerCase()===t.toLowerCase()),a=i?o?.[i]:void 0,c=a?l(a):t;return L("div",{className:"sf-swatches",children:[e.map(s=>{const u=o?.[s]?l(o[s]):s;return r($,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===s.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===s.toLowerCase()?"is-active":""}`,style:{background:s},onClick:()=>n(s),"aria-label":u})},s)}),r("span",{className:"sf-swatch-hex",children:c})]})}function Ii(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=jn(n,t);return r(h,{label:l(e),icon:r(xt,{}),changed:!i,action:r(C,{words:S()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>o(Xn)}),children:Ve({swatches:$n,current:i?Vn:n??t??"",onPick:o,names:zn})})}}}function _o(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=n,a=Wn(i,t);return r(h,{label:l(e),icon:r(Lt,{}),changed:!a,action:r(C,{words:S()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>o(Bn)}),children:Ve({swatches:Mn,current:a?Un:Kn(i,t),onPick:o,names:Gn})})}}}function _i(e=n=>n,t){return M({_gSectionTheme:I(Yn),sectionAccent:{type:"custom",render:({value:n,onChange:o})=>r(Sn,{value:e(n),onChange:o,followLabel:t})}})}function W({min:e,max:t,step:n,value:o,onChange:i,suffix:a="",readout:c=!0,notch:s,ariaLabel:u,disabled:p=!1}){const m=s!==void 0&&Number.isFinite(s)&&s>=e&&s<=t;return r("div",{className:m?"sf-slider has-notch":"sf-slider",style:m?{"--sf-notch":(s-e)/(t-e)}:void 0,children:r(on,{min:e,max:t,step:n,value:o,suffix:a||void 0,showInput:c,label:u===void 0?void 0:l(u),disabled:p,size:"sm",className:"sf-slider-track",onChange:d=>{d!==null&&d!==o&&i(d)}})})}function H(e,t,n,o,i,a,c="",s){return{type:"custom",render:u=>r(h,{label:l(e),icon:P(t),action:s?s("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:W({min:n,max:o,step:i,value:typeof u.value=="number"?u.value:a,suffix:c,ariaLabel:e,onChange:u.onChange})})}}function je(e,t){const{min:n,max:o,step:i=1,unsetLabel:a,hint:c,restTrack:s,unsetMark:u,icon:p}=t;return{type:"custom",render:({value:m,onChange:d})=>{const f=typeof m=="number"?m:null,g=f===null;return r(h,{label:l(e),icon:p?P(p):void 0,value:g?u||a===void 0?void 0:l(a):`${f}px`,changed:!g,action:u?ae(u,{changed:!g,onReset:()=>d(null)}):r(C,{words:S()?.panel,label:l(e),changed:!g,onReset:()=>d(null)}),hint:typeof c=="string"?l(c):c,children:s?s({min:n,max:o,step:i,px:f,label:e,onChange:d}):W({min:n,max:o,step:i,value:f??n,readout:!1,ariaLabel:e,onChange:d})})}}}function yi(e){const t=H("Gap",r(Se,{}),ne.min,ne.max,ne.step,wn[e],"px",(n,o)=>r(so,{inherited:!kn(e,n),onReset:()=>o(void 0),label:"Gap"}));return{type:"custom",[Pn]:e,render:n=>t.render({...n,value:Dn(e,n.value,n.field?.siteGap),storedValue:n.value,onChange:o=>n.onChange(o)})}}const j="Corners";function oe(e){return{type:"custom",render:({value:t,onChange:n})=>{const o=typeof t=="number"&&Number.isFinite(t)?t:null,i=o!==null;return r(h,{label:l(j),icon:r(_t,{}),changed:i,action:ae(e.mark,{changed:i,onReset:()=>n(null)}),hint:e.hint,children:r(Eo,{tier:e,px:o,onRadius:n})})}}}function yo(e){let t=null;try{t=nt()}catch{t=null}return[t?.values?.[e],n=>t?.onChange(e,n)]}function Eo({tier:e,px:t,onRadius:n}){const o=e.useFollowed(),i=e.useClosedReason?e.useClosedReason():null,[a,c]=yo(e.sidesKey),s=Ne(a)??[...Oe];return r(tn,{label:l(j),value:s,corners:Ut,onChange:u=>{const p=Ne(u)??[];c(p.length===Oe.length?null:p)},radius:t,onRadiusChange:n,radiusMin:v,radiusMax:me,radiusStep:e.step??1,radiusPlaceholder:String(o),disabled:i!==null,disabledReason:i??void 0})}function Ye(){return we({type:"custom",render:()=>r(ln,{})},"always")}function To({label:e,changed:t=!1,onReset:n=()=>{}}){const{cornerRadiusPx:o}=V(),i=typeof o=="number"?`${o}px`:l("not set");return r(C,{words:S()?.panel,label:l(e),changed:t,detail:o==null?l("the built-in corners"):k(i,l("Site styles")),onReset:n})}function Ro(){const{cornerRadiusPx:e}=V();return typeof e=="number"?e:v}function Oo(){return oe({sidesKey:"sectionCornerSides",useFollowed:Ro,useClosedReason:()=>Je()?l(qe):null,mark:r(To,{label:j}),hint:r(No,{})})}const qe="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function Je(){return We(Y())}function No(){return r(R,{children:Je()?qe:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function Ei(){return M({_gShape:I("Shape"),sectionCorners:Oo(),sectionCornerSides:Ye()})}function Ti(){return{_gMotion:I("Motion"),sectionAnimation:le("Entrance",r(be,{}),[...zt],$t)}}function re(){let e=null;try{const{appState:t,selectedItem:n}=F(i=>i),o=n?.props?.id?String(n.props.id):void 0;e=o?Ae(t?.data,o):null}catch{e=null}return e!==null&&We(e)}function Ze(e){const{cornerRadiusPx:t}=V(),n=re(),o=typeof t=="number"?t:e;let i=null;try{const{appState:c,selectedItem:s}=F(p=>p),u=s?.props?.id?String(s.props.id):void 0;i=u?Ae(c?.data,u):null}catch{i=null}if(n||!i)return o;const a=i.sectionCorners;return Xt(a)?a:o}function Ao({label:e,changed:t=!1,onReset:n=()=>{}}){const o=re(),i=Ze(v),a=o?"Site":"Section";return r(C,{words:S()?.panel,label:l(e),changed:t,detail:k(`${i}px`,o?l("Site styles"):l("the section")),onReset:n})}function Lo(){return r(R,{children:re()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function Fo(){return oe({sidesKey:"cardCornerSides",useFollowed:()=>Ze(v),mark:r(Ao,{label:j}),hint:r(Lo,{})})}function vo(){return{type:"custom",render:()=>r(rt,{})}}function Ri(){return{_gShape:I("Shape"),cardCorners:Fo(),cardCornerSides:Ye(),cardCornersApplyAll:vo()}}function Oi(){return N("Justify",r(bt,{}),Be,Be[0].value)}function Ni(){return N("Item alignment",r(gt,{}),Nn,"stretch")}function Ai(){return N(vn,r(Wt,{}),Me,Me[0].value)}function Li(){return{type:"custom",render:({value:e,onChange:t})=>{const n=te.find(o=>o.value===e)??te[0];return r(h,{label:l(Ge),icon:r(xe,{}),value:l(n.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(Ge),children:te.map(o=>r($,{content:l(o.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":n.value===o.value,"aria-label":l(o.label),onClick:()=>t(o.value),children:r("span",{className:"sf-gallery-pic",children:wo(o.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},o.value))})})}}}function wo(e){if(!e)return[3,4];const t=e.reduce((n,o)=>n+o,0);return e.map(n=>Math.round(n/t*12))}function Fi(){return N(An,r(Se,{}),De,De[0].value)}function vi(){return H(Ln,r(Pt,{}),He,Fn,1,He)}function wi(e){const t=le(Rn,ro("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),On(e),ke(e,void 0));return{type:"custom",render:n=>t.render({...n,value:ke(e,n.value),onChange:o=>n.onChange(o)})}}function Pi(e,t,n,o,i,a){return{type:"custom",render:({value:c,onChange:s})=>r(h,{label:l(e),icon:r(Re,{noun:a}),action:r(C,{words:S()?.panel,label:l(e),changed:!Zn(c),detail:l("the Text style in Site styles"),onReset:()=>s(Jn),defaultAction:{onPress:()=>s(qn),title:l("Keep this section's own built-in size"),icon:r(St,{})}}),children:W({min:t,max:n,step:o,value:typeof c=="number"?c:i,suffix:"px",ariaLabel:e,onChange:s})})}}function ki(){return{_gCellWidth:I("Cell width"),gridSpan:N("Positions",r(xe,{}),[{label:"Auto",value:""},...Array.from({length:st},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function Y(){let e=null;try{e=F(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Po({min:e,max:t,step:n,px:o,label:i,onChange:a,desktopKey:c,fallback:s}){const u=Y()[c],p=ee(void 0,u,s);return r(R,{children:W({min:e,max:t,step:n,value:ee(o,u,s),readout:!1,ariaLabel:i,notch:p,onChange:a})})}function ko({label:e,desktopKey:t,fallback:n,changed:o=!1,onReset:i=()=>{}}){const a=Y()[t],c=ee(void 0,a,n);return r(C,{words:S()?.panel,label:l(e),changed:o,detail:l("{value} on desktop",{value:`${c}px`}),onReset:i})}function Do(e){return je(e.label,{icon:e.icon,min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(ko,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Po,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const Bo={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"},Ho={Top:Ee,Bottom:Ie,Left:_e,Right:ye},Go=e=>{const t=Ho[e];return r(t,{})};function Di(e={}){const t=e.keys?.top??"sectionPaddingTop",n=e.keys?.bottom??"sectionPaddingBottom",o=e.group!==!1,i=x=>Bo[x],a=x=>H(i("Top"),r(Ee,{}),_.min,_.max,_.step,x,"px"),c=(x,K,T,J=_)=>O("mobile",Do({label:i(x),icon:Go(x),desktopKey:K,min:J.min,max:J.max,step:J.step,fallback:T})),s=e.top??_.min,u=e.bottom??_.min,p="sectionPaddingLeft",m="sectionPaddingRight",d=e.sideBounds??_,f=e.side??d.min,g=e.sidePhone??f,b=e.phone===!0,E=x=>b?O("desktop",x):x;return M({...o?{_gSpacing:I("Padding")}:{},[t]:E(a(s)),...b?{[z(t)]:c("Top",t,s)}:{},...e.only==="top"?{}:{[n]:E(H(i("Bottom"),r(Ie,{}),_.min,_.max,_.step,u,"px")),...b?{[z(n)]:c("Bottom",n,u)}:{}},...e.sides?{[p]:E(H(i("Left"),r(_e,{}),d.min,d.max,d.step,f,"px")),...b?{[z(p)]:c("Left",p,g,d)}:{},[m]:E(H(i("Right"),r(ye,{}),d.min,d.max,d.step,f,"px")),...b?{[z(m)]:c("Right",m,g,d)}:{}}:{}})}const Mo={contained:"Contained",page:"Page",full:"Full"},q="Width";function Bi(e,t=Qn,n=!0){const o=t.map(i=>({label:eo[i]??Mo[i],value:i}));return M({...n?{_gWidth:I(q)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(q),icon:r(Mt,{}),action:n?r(co,{inherited:a?.inherited??!1,onReset:()=>i(to),label:q}):void 0,children:ie({options:o,value:a?.currentValue||e,onChange:i,ariaLabel:q})})}})}function Hi(){const e=o=>({type:"custom",render:({value:i,onChange:a})=>r(h,{label:G,icon:P(r(Ft,{})),action:o?o(a):void 0,children:ie({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:G})})}),t=()=>({type:"custom",render:({value:o,onChange:i,field:a})=>{const c=a?.unit==="%"?"%":"px",s=c==="%"?Tn:En;return r("div",{className:"sf-field",children:W({min:s.min,max:s.max,step:s.step,value:typeof o=="number"?o:s.fallback,suffix:c,ariaLabel:G,onChange:i})})}}),n=()=>le("Unit",r(Ce,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return M({_gHeight:I(G),sectionHeightMode:O("desktop",e()),sectionHeightValue:O("desktop",t()),sectionHeightUnit:O("desktop",n()),sectionHeightModePhone:O("mobile",e(o=>r(Wo,{onClear:()=>o(void 0)}))),sectionHeightValuePhone:O("mobile",t()),sectionHeightUnitPhone:O("mobile",n())})}function Wo({onClear:e}){const t=Y(),n=_n(t),o=yn(t),i=l("{value} on desktop",{value:o.mode==="auto"?l("Auto"):`${o.value}${o.unit}`});return r(C,{words:S()?.panel,label:l(G),changed:n,detail:i,onReset:e})}function Gi(){return{_gAnchor:I("Anchor"),anchor:go("Anchor name","e.g. about",fo)}}function Mi(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=`${a??c??e}-datetime`,u=Date.parse(typeof o=="string"?o:"");return r(h,{label:l(e),icon:t,htmlFor:s,hint:n===void 0?void 0:l(n),children:r(nn,{id:s,value:Number.isFinite(u)?new Date(u):null,onChange:p=>i(p?p.toISOString():"")})})}}}function A(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=typeof o=="boolean"?o:t,u=`${a??c??e}-label`;return r(h,{label:l(e),labelId:u,icon:n,action:r(qt,{checked:s,onChange:i,ariaLabelledBy:u})})}}}function Wi(){return{type:"custom",render:({value:e,onChange:t,id:n,name:o})=>{const i=`${String(n??o??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Te,{}),htmlFor:i,action:r(Fe,{id:i,label:"Background",value:Kt(e),onChange:t})})}}}function Ki(e,t){return{type:"custom",render:({value:n,onChange:o,id:i})=>{const a=typeof n=="boolean"?n:t,c=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:c,className:"sf-checkbox",action:r(en,{id:c,checked:a,onChange:o})})}}}function Ui(e,t){return{type:"custom",render:({value:n,onChange:o})=>r(h,{label:l(e),action:Fe({value:n||t,onChange:o,label:e})})}}const Ko=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function Qe({label:e,value:t,onChange:n,points:o=Ko}){const i=o.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(Qt,{label:l(e),value:t,points:i,onChange:n})}function Xi(e,t=Le,n="mediaImage"){return{type:"custom",render:({value:o,onChange:i})=>r("div",{className:"sf-focal-row",children:r(Uo,{label:e,value:o||t,onChange:i,imageProp:n})})}}function Uo({label:e,value:t,onChange:n,imageProp:o}){const{selectedItem:i}=F(c=>c),a=i?.props?.[o];return r(gn,{label:e,value:t,onChange:n,image:typeof a=="string"?a:void 0})}const Xo=ge([]);function $i(e,{stacking:t,fallback:n=pt}){return{type:"custom",render:({value:o,onChange:i})=>{const a=dt.includes(o)?o:n;return t?r($o,{label:e,value:a,onChange:i}):et({label:e,value:a,onChange:i,points:Xo})}}}function $o({label:e,value:t,onChange:n}){const{appState:o,selectedItem:i}=F(s=>s),a=i?.props?.id?String(i.props.id):void 0,c=a?ut(o?.data,a):[];return et({label:e,value:t,onChange:n,points:ge(c,a)})}function et({label:e,value:t,onChange:n,points:o}){const i=o.find(a=>a.disabled);return r(h,{label:l(e),icon:r(kt,{}),hint:i?.title?l(i.title):void 0,children:Qe({label:e,value:ft(t),onChange:n,points:o})})}const zi={top:r(Rt,{}),right:r(Tt,{}),bottom:r(yt,{}),left:r(Et,{})};function Vi(e,t,n,o,i,a){const c=m=>t.find(d=>d.value===m),s=m=>({value:m,label:"",disabled:!0,title:o}),u=m=>{const d=t.find(g=>g.cell===m);if(!d)return s(`missing-${m}`);const f=a?.[m];return f?{value:d.value,label:d.label,icon:f}:{value:d.value,label:d.label}},p=[s("corner-top-left"),u("top"),s("corner-top-right"),u("left"),s("centre"),u("right"),s("corner-bottom-left"),u("bottom"),s("corner-bottom-right")];return{type:"custom",render:({value:m,onChange:d})=>{const f=t.some(g=>g.value===m)?m:n;return r(h,{label:l(e),icon:i,value:c(f)?.label?l(c(f).label):"",children:Qe({label:e,value:f,onChange:d,points:p})})}}}const zo="\0note";function N(e,t,n,o,i){return{type:"custom",options:n,fallback:o,...i?{note:i}:{},render:({value:a,onChange:c,field:s})=>{const u=s.options??n,p=s.fallback??o,m=u.some(d=>d.value===a)?a:p;return r(h,{label:l(e),icon:P(t),children:r(Jt,{value:m,ariaLabel:l(e),onChange:c,options:[...i?[{label:l(i),value:zo,disabled:!0}]:[],...u.map(d=>({label:l(d.label),value:d.value}))]})})}}}function ji(e,t,n){return{type:"custom",options:t,render:({value:o,onChange:i,field:a})=>r(xn,{label:e,options:(a.options??t).map(c=>({...c,label:l(c.label)})),value:Array.isArray(o)?o:[],onChange:i,...n?{emptyLabel:l(n)}:{}})}}function Yi(e,t,n,o){return{type:"custom",options:t,fallback:n,render:({value:i,onChange:a,field:c})=>r(Cn,{label:e,options:(c.options??t).map(s=>({...s,label:l(s.label)})),fallback:c.fallback??n,value:i,onChange:a,placeholder:o===void 0?void 0:l(o)})}}function qi(e,t={}){return{type:"custom",render:({value:n,onChange:o})=>{const i={value:n,onChange:o,...t};return r(e,{...i})}}}function ie({options:e,value:t,onChange:n,ariaLabel:o,disabled:i=!1}){return r(Yt,{options:e.map(a=>a.picture?{id:a.value,label:a.picture,title:l(a.title??a.label)}:{id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)}),value:t,onChange:n,ariaLabel:l(o),disabled:i})}const Ji=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function le(e,t,n,o){const i=n.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:c,field:s})=>r(h,{label:l(e),icon:P(t),children:ie({options:i,value:i.some(u=>u.value===a)?a:a||s?.currentValue||o,onChange:c,ariaLabel:e})})}}function Zi(e,t,n){return{type:"custom",[pe]:!0,render:({value:o,onChange:i})=>r(bn,{value:o||"",onChange:i,label:e,accept:t,placeholder:n})}}const Qi={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function el({value:e,onChange:t,label:n}){const o=e||{},i=!!o.pending,a=i?"var(--fg-dim, #888)":o.ok?"#1d9e75":"#d85a30",c=(s,u)=>t({...o,[s]:u===""?void 0:Number(u)});return L(h,{label:l(n),icon:r(Q,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...o,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),o.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(o.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...o,manual:!o.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:o.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),o.manual&&L("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof o.lat=="number"?o.lat:"",onChange:s=>c("lat",s.target.value)})}),r(h,{label:l("Longitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof o.lng=="number"?o.lng:"",onChange:s=>c("lng",s.target.value)})})]})]})}function Vo(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function jo(e,t,n){const o=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?o:o.map((i,a)=>a===t?{text:n}:i)}function tl(e,t){return e===null?null:t>e?e:null}function Yo(e,t,n){if(n===null||n>=t.length)return null;for(let o=0;o<n;o+=1)if(e[o]!==t[o])return null;return e[n]!==t[n]&&t.includes(e[n])||e[n]!==t[n]&&t.length!==e.length?null:n}const nl={label:"Ticker items",icon:r(wt,{})};function ol(e,t,n,o){return{type:"custom",[y]:{control:"textList",label:e,placeholder:n,itemKey:"text",rendering:o},render:({value:i,onChange:a})=>r(qo,{label:e,icon:P(t),items:Array.isArray(i)?i:[],placeholder:n,onChange:a,markup:o==="markup"})}}function qo({label:e,icon:t,items:n,placeholder:o,onChange:i,markup:a=!1}){const c=Z(null),[s,u]=se(null),p=d=>d.map(f=>({text:f?.text??""})),m=d=>{const f=Yo(n,d,s);f===null&&(c.current=null),u(f),i(p(d))};return r(Zt,{label:l(e),icon:t,noun:l("item"),items:n,onChange:m,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(ve,{target:c,value:Vo(n,s),onChange:d=>i(jo(n,s??-1,d)),disabled:s===null,label:s===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:s+1})}):void 0,renderRow:(d,f,g)=>r("input",{type:"text",className:a&&s===f?"sf-list-marking":void 0,value:d?.text??"",placeholder:l(o),"aria-label":l("{label} {n}",{label:l(e),n:f+1}),onChange:b=>g({text:b.target.value}),onFocus:b=>{c.current=b.currentTarget,u(f)}})})}function rl(e,t){const n=`${e.label} — row ${t+1}`;return B({control:"plainText",label:n,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function il(e){return{_gCards:I("Cards"),coverIndex:N("Cover image",r(vt,{}),fn,String(mn),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:_o("Image background",Hn),cardImage:Jo(),spinOnHover:A("Rotate on hover",e?.spinDefault??!0,r(Bt,{}))}}function ll(){return{outline:N("Card outline",r(Ht,{}),un,pn),indexBadge:N("Card number",r(Ce,{}),cn,dn),showBadge:A("Product badge",!0,r(Re,{noun:"tag"}))}}function al(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:I("Show on a card"),showCardPrice:A("Price",!0,r(Ot,{})),showCardFinishes:A("Finish swatches",!0,r(Nt,{})),showCardSizes:A("Sizes",t,r(Dt,{})),showCardBuy:A("Buy button",t,r(Ct,{})),showCardPage:A("Page button",t,r(Te,{}))}}function Jo(){return je("Card image",{min:v,max:me,step:it,hint:"Rounds the picture. The card's own corner is in Site styles."})}function sl(){return oe({sidesKey:"cornerSides",step:lt,useFollowed:()=>v,mark:r(Zo,{label:at}),hint:l("Rounds the picture. Left alone it stays square.")})}function Zo({label:e,changed:t=!1,onReset:n=()=>{}}){return r(C,{words:S()?.panel,label:l(e),changed:t,onReset:n})}function cl(){return{type:"custom",render:({value:e,onChange:t})=>r(Qo,{value:typeof e=="string"?e:"",onChange:t})}}function Qo({value:e,onChange:t}){const[n,o]=se(null),i=he.filter(c=>n===null||w[c].across===n),a=e&&e in w?w[e]:null;return L(R,{children:[r(h,{label:l("Photos in a row"),icon:r(It,{}),children:L("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":n===null,onClick:()=>o(null),children:l("All")}),ct.map(c=>r("button",{type:"button","aria-pressed":n===c,onClick:()=>o(c),children:c},c))]})}),r(h,{label:l("Layout"),icon:r(At,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:he.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(c=>r($,{content:l(w[c].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===c,"aria-label":l(w[c].label),onClick:()=>t(e===c?"":c),children:r("span",{className:"sf-gallery-pic",children:w[c].desktop.map(([s,u],p)=>r("i",{style:{gridColumn:`span ${s}`,gridRow:`span ${u}`}},p))})})},c))})})]})}export{fo as ANCHOR_HINT,ii as BOUND_TO_POST_NOTE,di as BUCKET_ICONS,Qi as CUSTOM_FIELD_MEDIA,el as CoordsField,zi as EDGE_ARROWS,Le as FOCAL_DEFAULT,Ko as FOCAL_POINTS,U as FOLD_FIELD_MARKER,Qe as FocalPicker,Io as GroupLabel,po as HIGHLIGHT_HINT,D as HidableTextField,de as LINK_FIELD_MARKER,Qr as Label,pe as MEDIA_FIELD_MARKER,Ji as MEDIA_TYPE_OPTIONS,So as PanelNoteLine,et as PlacementGridView,fe as SCAFFOLD_FIELD_MARKER,fl as SCALAR_TEXT_CONTROLS,qe as SECTION_BLEEDS_HINT,bo as SectionHeading,ie as Segmented,so as SiteGapDefaultReset,W as Slider,Ve as Swatches,pl as TEXT_CONTROL_KINDS,y as TEXT_FIELD_MARKER,nl as TICKER_ITEMS_ROW,qo as TextListField,co as WidthDefaultReset,Yo as aimAfterListChange,Gi as anchorFields,k as backTo,Ii as backgroundField,Ni as boxAlignField,Fi as boxBlockSpacingField,Oi as boxJustifyField,vi as boxPhoneRowField,Li as boxShareField,Ai as boxWrapField,gi as bucketHeader,Fo as cardCornersField,_o as cardImageBackgroundField,Jo as cardImageField,il as cardMediaFields,Ri as cardShapeFields,al as cardShowFields,ll as cardStyleFields,ki as cellWidthFields,Ki as checkbox,Ui as colorInput,si as copyText,Ye as cornerSidesField,oe as cornersRowField,Mi as dateTime,xi as designGroupHeader,wi as directionField,Vi as edgePad,pi as entriesHiddenForTab,Xi as focalPicker,tl as focusAfterRemove,Si as foldMarker,X as foldMetaOf,Co as foldTitleOf,cl as galleryLayoutField,yi as gapField,I as group,Hi as heightFields,ue as hidableText,ho as hintIsWhileTyping,P as iconOf,sl as imageCornersField,ri as inOwnBox,hi as isBucketHeader,bi as isDesignGroupHeader,io as isNoGlyph,ci as linkField,ji as multiSelect,ro as noGlyph,Wi as pageBackgroundField,fi as panelNote,Do as phoneOverrideField,$i as placementField,go as plainText,ui as plainTextarea,je as pxField,Ci as quietMarker,ce as readHidable,Vo as rowText,Yi as searchSelect,mi as section,Ti as sectionAnimationFields,Oo as sectionCornersField,Ei as sectionShapeFields,_i as sectionThemeFields,le as segmented,N as select,jo as setRowText,Pi as sizeField,H as slider,qi as sourceField,Di as spacingFields,li as text,ot as textFieldIdentifier,ni as textFieldOffPage,ol as textList,rl as textListRowField,ai as textarea,A as toggle,Zi as upload,lo as usePageWidthDetail,ao as useSiteGapDetail,Bi as widthField,oi as withIdentifier,ti as withOffPage,ei as withScaffold};
@@ -16,7 +16,9 @@ export type PageDocument = PageBundle & {
16
16
  id: string;
17
17
  version: string | null;
18
18
  kind?: string | null;
19
+ live?: PageLiveState;
19
20
  };
21
+ export type PageLiveState = "live" | "changed" | "never";
20
22
  export type SiteScope = {
21
23
  siteId?: string;
22
24
  };
@@ -45,12 +47,14 @@ export interface WebsitePages {
45
47
  load(ref: PageRef): Promise<PageDocument | null>;
46
48
  save(id: string, doc: PageBundle, expect: SaveExpectation): Promise<{
47
49
  version: string | null;
50
+ live?: PageLiveState;
48
51
  }>;
49
52
  version?(id: string): Promise<string | null>;
50
53
  publish?(id: string, expect?: {
51
54
  version: string;
52
55
  }): Promise<{
53
56
  version: string | null;
57
+ live?: PageLiveState;
54
58
  }>;
55
59
  create?(input: NewPageInput): Promise<EditorPageRow>;
56
60
  remove?(id: string, options?: {
@@ -91,6 +95,9 @@ export interface WebsiteTemplates {
91
95
  }
92
96
  export interface WebsitePreview {
93
97
  href(slug: string): string;
98
+ draftLink?(pageId: string): Promise<{
99
+ url: string | null;
100
+ }>;
94
101
  }
95
102
  export interface BlogPostRow {
96
103
  slug: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-web-builder",
3
- "version": "14.0.0",
3
+ "version": "15.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,8 +40,8 @@
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@tabler/icons-react": "^3.46.0",
43
- "efficient-easel": "^7.0.4",
44
- "efficient-shell": "^7.36.0",
43
+ "efficient-easel": "^8.0.0",
44
+ "efficient-shell": "^7.38.0",
45
45
  "isomorphic-dompurify": "^3.18.0",
46
46
  "next": ">=16",
47
47
  "react": ">=19",
@@ -59,8 +59,8 @@
59
59
  "@types/node": "^20",
60
60
  "@types/react": "^19",
61
61
  "@types/react-dom": "^19",
62
- "efficient-easel": "^7.2.0",
63
- "efficient-shell": "^7.36.0",
62
+ "efficient-easel": "^8.0.0",
63
+ "efficient-shell": "^7.38.0",
64
64
  "esbuild": "^0.28.0",
65
65
  "happy-dom": "^20.14.5",
66
66
  "isomorphic-dompurify": "^3.18.0",