efficient-web-builder 35.0.0 → 37.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 +51 -0
- package/dist/editor/components/PinnedChromeLoadNotice.d.ts +6 -0
- package/dist/editor/components/PinnedChromeLoadNotice.js +1 -1
- package/dist/editor/components/PreviewPartAnchors.js +1 -1
- package/dist/editor/components/WebsiteScreenParts.js +1 -1
- package/dist/editor/components/storefront-editor.css +19 -0
- package/dist/editor/lib/editor-document-adapter.d.ts +7 -0
- package/dist/editor/lib/editor-document-adapter.js +1 -1
- package/dist/editor/lib/puck/every-page.d.ts +2 -2
- package/dist/editor/lib/puck/every-page.js +1 -1
- package/dist/editor/lib/shared-sections-layer.d.ts +8 -0
- package/dist/editor/lib/shared-sections-layer.js +1 -0
- package/dist/format/lib/editor-words-catalogue.d.ts +10 -5
- package/dist/format/lib/editor-words-catalogue.js +3 -3
- package/dist/format/lib/puck/container-blocks.js +1 -1
- package/dist/format/lib/puck/text-seeds.d.ts +2 -0
- package/dist/format/lib/puck/text-seeds.js +1 -0
- package/dist/format/lib/sections/section-presets.js +1 -1
- package/dist/format/lib/shared-section-docs.d.ts +27 -0
- package/dist/format/lib/shared-section-docs.js +1 -0
- package/dist/format/lib/shared-sections-active.d.ts +42 -0
- package/dist/format/lib/shared-sections-active.js +1 -0
- package/dist/render/components/Text.js +1 -1
- package/dist/render/lib/puck/blocks/general/Text/render.js +1 -1
- package/dist/render/lib/puck/slot-specs.js +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,57 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 37.0.0 - 2026-10-23
|
|
6
|
+
|
|
7
|
+
**MAJOR for hosts:** the efficient-easel peer range is `^18.1.0` (was `^18.0.0`; dev the same). A shared section somebody else holds is locked by its node, which easel 18.1.0 hands the lock rule; on 18.0.0 the lock would never hold and an edit could be lost. A host moves the pin; nothing else to change.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Shared sections are edited in place** (Shared section design v4, approved by Lewis 2026-10-21; card [DESIGN] Shared Sections Used By Many Pages, PR 5b of the build plan). A page holds a reference in its top level, `{ type: "SharedSection", props: { id, section } }`; the shared section is a page of kind `section` whose document holds the one section (efficient-backend `storefront/shared_sections.py`). On a page that edits in place:
|
|
12
|
+
- `lib/shared-section-docs` (format side, pure): `spliceShared` puts each loaded section in its reference's place, with its own ids, and `splitShared` takes it back out; byte for byte, as `lib/pinned-chrome-doc` does for the header and footer. A reference whose document did not load stays a reference and is kept.
|
|
13
|
+
- The site page adapter loads each referenced section beside the page, and saves each one only when it changed, against its OWN version and the tab's clientId. A refusal is reported on that section only; the page beside it saves. Each is claimed beside the page and never taken over; where Publish is per page, each goes live with it (the site's one Publish takes them anyway).
|
|
14
|
+
- `PinnedChromeState.sections` (optional): the shared sections not stored as shown — could not load, held by somebody else, changed elsewhere, save failed. The canvas notice names the first one, after the header's and footer's.
|
|
15
|
+
- The screen is handed efficient-easel 18's document half (`pinned.shared`, `lib/shared-sections-layer`): which top-level node is which section and the pages that use it (`usedOn`, from the store's list), opening one of those pages, Make shared (`adopt`), what Add puts down (`nodeOf`: the section's own node, once per page), Detach (`copyNode`, every id fresh) and a deleted section (`removed`: the page is read again). `sharedReach` says "On 3 pages" for a shared section.
|
|
16
|
+
- `blockRules.isLockedBlock(type, node)`: a shared section somebody else holds is locked ALONE, by its node (efficient-easel 18.1.0's second argument), so no edit of it is lost (GG 2026-10-22).
|
|
17
|
+
- Words: "On 1 page", "On {count} pages", "On other pages", "A shared section", and four notices naming a shared section.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- **The Text block takes the Heading's and the Eyebrow's places** (card [MERGE] One Text Block And Click Through Parts, T2b; GG 2026-10-22). No stored block is rewritten: every stored Heading and Eyebrow still draws, edits, moves and pastes.
|
|
22
|
+
- The Brand Text, Split and Subscribe presets and the Image & Text Columns seed lay down a Text with tag h2 that follows Heading 2 where they laid down a Heading, and a Text that follows Body 5 where they laid down the plain Eyebrow. The label keeps the plain eyebrow's look as its part's own values: the accent ink, 0.3em letter spacing, capitals and line 1.5. The two shapes are written once, in `lib/puck/text-seeds` (`headingTextSeed`, `labelTextSeed`).
|
|
23
|
+
- Heading and Eyebrow leave Add in a Box, a Grid cell and a Slide box (`BlockChoice.retired`, easel 17). Both stay in each list, so a move or a paste is still taken, and a Slide box's slot still allows them.
|
|
24
|
+
- A Text that follows a heading style draws the Heading block's frame too (py-6, the 24px its padding adds to; was py-4), so it is the Heading block at that level, frame and all. Its empty placeholder in the editor is the Heading's.
|
|
25
|
+
- Same look, measured: on the published page every text the presets lay down has the same face, size, weight, line, letter spacing, case, colour and box as before.
|
|
26
|
+
- **A "Gap only" Box draws the same on the editor's canvas as on the page** (GG 2026-10-23, found by T2b's same-look proof). On the canvas a block in a Gap only Box kept its own top and bottom frame padding (a Heading +48px, a Text +32px), because the editor's item and the part host stand between the Box and the block, and the page's rule `.sf-box-gap-only > *` stops at the item. `components/storefront-editor.css` now reaches the block through both (`[data-puck-component] > [data-sf-part-host]`), and `components/PreviewPartAnchors` names its host `data-sf-part-host`. The published page does not change.
|
|
27
|
+
|
|
28
|
+
### Not here
|
|
29
|
+
|
|
30
|
+
- The `SharedSection` block (an editor placeholder for a reference that did not load, nothing on a published page) and the HTTP store are the host's registry and client: efficient-storefront-blocks, PR 6.
|
|
31
|
+
|
|
32
|
+
### Guards
|
|
33
|
+
|
|
34
|
+
- `scripts/test-shared-section-docs.ts` (red first): round trips with 0, 1 and 3 sections, where each stands, a reference not loaded, edits in the right half, moved and removed, `references`.
|
|
35
|
+
- `test-two-ways-to-add`: the easel range is ^18.1.0.
|
|
36
|
+
- `scripts/test-shared-section-adapter.ts`: the adapter against a fake backend — splice, page-only save, a section's own save, a conflict, a lock, a failed load, Make shared and Add, the store's names and counts, the notice, and what the screen is handed.
|
|
37
|
+
- New `scripts/test-text-replaces-heading.tsx` (red first): no preset or seed lays down a Heading or an Eyebrow; the heading and label shapes; a Text at Heading 1-3 is the Heading block's whole markup; Add offers neither block in any Box menu, and every list still holds both.
|
|
38
|
+
- New `scripts/test-gap-only-canvas.tsx` (red first): a Heading, a Text, a Text at Heading 2 and a Text with its own padding in a Gap only Box draw the same top and bottom padding on the canvas as on the page (happy-dom, the real canvas sheet, the page's two rules).
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
## 36.0.0 - 2026-10-22
|
|
42
|
+
|
|
43
|
+
**MAJOR for hosts:** the efficient-easel peer range is `^18.0.0` (was `^17.0.0`) and the efficient-shell peer range `^8.20.0` (was `^8.18.0`); dev the same. easel 18 needs shell 8.20.0 (`TreeRow` `tone`, the `shared` glyph). A host moves both pins with this release; nothing else to change.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- **The header and footer are drawn as SHARED nodes** (Shared section design v4, approved by Lewis 2026-10-21; card [DESIGN] Shared Sections Used By Many Pages, PR 5a of the build plan). On a page that edits them in place, the website hands the screen `sharedReach` (`lib/puck/every-page` `pinnedReach`): "On every page", and "On every page · old style" on the old Header and the old Footer. The screen (efficient-easel 18) draws their Layers rows green with the shared mark at the end and "On every page" in its Tooltip, in place of the "Every page" badge; their canvas tab is the green badge with the mark and the row's name, "On every page" in its Tooltip, in place of "Header · on every page"; and their outline is green.
|
|
48
|
+
- `groupTab` is now `noOwnTab` (no words: it only takes a header or footer group out of the canvas's click chain), and `groupBadge` only switches the in-place tree (its word is never drawn).
|
|
49
|
+
- Words: "On every page" and "On every page · old style" are new; "Every page" and the four "Header / Footer · on every page" tab phrases are gone.
|
|
50
|
+
|
|
51
|
+
### Guards
|
|
52
|
+
|
|
53
|
+
- `scripts/test-every-page-words.ts` (red first): how far each pinned node reaches, the catalogue holds the new words and not the old ones, and the website hands `sharedReach` and the two switches on an in-place page only.
|
|
54
|
+
- `test-two-ways-to-add`: the easel range is ^18.0.0. `test-shell-peer-range`: the shell range is ^8.20.0, and why.
|
|
55
|
+
|
|
5
56
|
## 35.0.0 - 2026-10-22
|
|
6
57
|
|
|
7
58
|
### Added
|
|
@@ -5,6 +5,12 @@ export declare const PINNED_CHROME_NOTES: {
|
|
|
5
5
|
readonly conflict: "The header and footer were changed somewhere else. Nothing you change in them here is saved. Reload to get the latest.";
|
|
6
6
|
readonly save: "The header and footer did not save. They are sent again with your next change.";
|
|
7
7
|
};
|
|
8
|
+
export declare const SHARED_SECTION_NOTES: {
|
|
9
|
+
readonly load: "{section} could not load. It stays on the page as it was. Reload to try again.";
|
|
10
|
+
readonly lock: "{name} is editing {section}. Nothing you change in it here is saved.";
|
|
11
|
+
readonly conflict: "{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.";
|
|
12
|
+
readonly save: "{section} did not save. It is sent again with your next change.";
|
|
13
|
+
};
|
|
8
14
|
export declare const PINNED_CHROME_LOAD_NOTICE: "The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.";
|
|
9
15
|
export declare const PINNED_CHROME_LOCK_NOTICE: "{name} is editing the header and footer. Nothing you change in them here is saved.";
|
|
10
16
|
export declare const PINNED_CHROME_CONFLICT_NOTICE: "The header and footer were changed somewhere else. Nothing you change in them here is saved. Reload to get the latest.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as a}from"react/jsx-runtime";import{useEffect as s,useState as d}from"react";import{Banner as c}from"efficient-shell/ui";import{useOpenPinnedChromeReport as l,usePinnedChromeState as h}from"./usePinnedChromeState.js";import{say as n}from"../../format/lib/editor-words.js";const r={load:"The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.",lock:"{name} is editing the header and footer. Nothing you change in them here is saved.",conflict:"The header and footer were changed somewhere else. Nothing you change in them here is saved. Reload to get the latest.",save:"The header and footer did not save. They are sent again with your next change."},m={load:"{section} could not load. It stays on the page as it was. Reload to try again.",lock:"{name} is editing {section}. Nothing you change in it here is saved.",conflict:"{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.",save:"{section} did not save. It is sent again with your next change."},u=r.load,f=r.lock,N=r.conflict,g=r.save;function p(o){if(!o)return null;if(o.loadFailed)return n(u);if(o.lockHolder)return n(f,{name:o.lockHolder.name||n("Somebody else")});if(o.conflict)return n(N);if(o.saveFailed)return n(g);const e=o.sections?.[0];if(!e)return null;const i=e.title||n("A shared section"),t=e.holder?.name||n("Somebody else");return n(m[e.problem],{section:i,name:t})}function E({report:o}){const e=p(h(o)),[i,t]=d(null);return s(()=>{e||t(null)},[e]),!e||i===e?null:a("aside",{className:"sf-canvas-notice",children:a(c,{tone:"warning",onDismiss:()=>t(e),children:e})})}function I(){return a(E,{report:l()})}export{I as OpenDocumentChromeLoadNotice,N as PINNED_CHROME_CONFLICT_NOTICE,u as PINNED_CHROME_LOAD_NOTICE,f as PINNED_CHROME_LOCK_NOTICE,r as PINNED_CHROME_NOTES,g as PINNED_CHROME_SAVE_NOTICE,E as PinnedChromeLoadNotice,m as SHARED_SECTION_NOTES,p as pinnedChromeNoticeWords};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as k}from"react/jsx-runtime";import{readInks as L}from"../../format/lib/puck/part-inks.js";import{useEffect as F,useRef as J}from"react";import{markOverlayPortal as z}from"../../format/lib/puck/overlay-portal.js";import{usePreviewParts as M}from"efficient-easel/draw/client";import{usePartStyle as Y}from"./PreviewPartStyleContext.js";import{usePreviewDevice as $}from"efficient-easel/draw/client";import{encodePartId as j}from"efficient-easel/draw";import{PUCK_COMPONENT_ATTR as B,engagePartAnchors as G}from"../lib/puck/part-anchors.js";import{PART_ATTR as R,PART_SELECTED_ATTR as E,PART_STYLE_KIND_ATTR as w,PART_STYLE_OWNER_ATTR as H,partStyleOwnerOf as _}from"../../render/lib/puck/text-parts.js";import{PART_STYLE_PROPERTIES as v,applyPartStyles as x,blockDrawsTextStyle as q,partFontKeyOf as U,partStyleBase as V,partStyleSource as Q}from"../../render/lib/puck/part-styles.js";import{fontRoleOfClassName as X,styleRoleOfClassName as Z}from"../../format/lib/fonts.js";import{typeScaleGroupOfClassName as N}from"../../format/lib/theme.js";import{styleKeyForPart as ee}from"../../format/lib/sections/section-text-kinds.js";function te(a){let o=null,s=null;for(let t=a;t&&(o===null||s===null);t=t.parentElement){const c=t.getAttribute("class");o??=Z(c),s??=N(c)}return{faceRole:o??"body",sizeGroup:s}}function C(a){const o=a.style,s={};for(const r of v)s[r]=o[r]??"",o[r]="";const t=getComputedStyle(a),c=getComputedStyle(a.ownerDocument.documentElement),p=V({fontSize:t.fontSize,fontWeight:t.fontWeight,lineHeight:t.lineHeight,letterSpacing:t.letterSpacing,textAlign:t.textAlign,textTransform:t.textTransform,paddingTop:t.paddingTop,maxWidth:t.maxWidth},U(t.fontFamily,r=>c.getPropertyValue(r)));for(const r of v)o[r]=s[r];return p}function re({needles:a,styles:o,type:s,children:t}){const c=J(null),{selectedPartId:p}=M(),{setPartStyle:r}=Y(),d=$()==="mobile",y=JSON.stringify(a),S=JSON.stringify(o);return F(()=>{const f=c.current;if(!f)return;const g=[],T=()=>f.parentElement,D=l=>{const n=T();if(!n)return null;const m=new MutationObserver(l);return m.observe(n,{attributes:!0,attributeFilter:[B]}),()=>m.disconnect()},W=l=>{const n=new MutationObserver(l);return n.observe(f,{childList:!0,subtree:!0,characterData:!0}),()=>n.disconnect()};let u=[];g.push(()=>{for(const l of u)l();u=[]});const I=JSON.parse(y),
|
|
1
|
+
"use client";import{jsx as k}from"react/jsx-runtime";import{readInks as L}from"../../format/lib/puck/part-inks.js";import{useEffect as F,useRef as J}from"react";import{markOverlayPortal as z}from"../../format/lib/puck/overlay-portal.js";import{usePreviewParts as M}from"efficient-easel/draw/client";import{usePartStyle as Y}from"./PreviewPartStyleContext.js";import{usePreviewDevice as $}from"efficient-easel/draw/client";import{encodePartId as j}from"efficient-easel/draw";import{PUCK_COMPONENT_ATTR as B,engagePartAnchors as G}from"../lib/puck/part-anchors.js";import{PART_ATTR as R,PART_SELECTED_ATTR as E,PART_STYLE_KIND_ATTR as w,PART_STYLE_OWNER_ATTR as H,partStyleOwnerOf as _}from"../../render/lib/puck/text-parts.js";import{PART_STYLE_PROPERTIES as v,applyPartStyles as x,blockDrawsTextStyle as q,partFontKeyOf as U,partStyleBase as V,partStyleSource as Q}from"../../render/lib/puck/part-styles.js";import{fontRoleOfClassName as X,styleRoleOfClassName as Z}from"../../format/lib/fonts.js";import{typeScaleGroupOfClassName as N}from"../../format/lib/theme.js";import{styleKeyForPart as ee}from"../../format/lib/sections/section-text-kinds.js";function te(a){let o=null,s=null;for(let t=a;t&&(o===null||s===null);t=t.parentElement){const c=t.getAttribute("class");o??=Z(c),s??=N(c)}return{faceRole:o??"body",sizeGroup:s}}function C(a){const o=a.style,s={};for(const r of v)s[r]=o[r]??"",o[r]="";const t=getComputedStyle(a),c=getComputedStyle(a.ownerDocument.documentElement),p=V({fontSize:t.fontSize,fontWeight:t.fontWeight,lineHeight:t.lineHeight,letterSpacing:t.letterSpacing,textAlign:t.textAlign,textTransform:t.textTransform,paddingTop:t.paddingTop,maxWidth:t.maxWidth},U(t.fontFamily,r=>c.getPropertyValue(r)));for(const r of v)o[r]=s[r];return p}function re({needles:a,styles:o,type:s,children:t}){const c=J(null),{selectedPartId:p}=M(),{setPartStyle:r}=Y(),d=$()==="mobile",y=JSON.stringify(a),S=JSON.stringify(o);return F(()=>{const f=c.current;if(!f)return;const g=[],T=()=>f.parentElement,D=l=>{const n=T();if(!n)return null;const m=new MutationObserver(l);return m.observe(n,{attributes:!0,attributeFilter:[B]}),()=>m.disconnect()},W=l=>{const n=new MutationObserver(l);return n.observe(f,{childList:!0,subtree:!0,characterData:!0}),()=>n.disconnect()};let u=[];g.push(()=>{for(const l of u)l();u=[]});const I=JSON.parse(y),h=JSON.parse(S),K=G(f,I,T,D,(l,n,m)=>{for(const e of u)e();u=[];const P=[];for(const e of m){const i=e,O=z(i);O&&u.push(O),i.getAttribute(R)===p?(i.setAttribute(E,""),P.push(i)):i.removeAttribute(E)}const b=Q(n,p,P,e=>X(e)!==null||N(e)!==null);if(b&&p){const e=b;r({partId:p,...te(e),base:C(e),inks:L(e),...(()=>{const i=_(e);return i?{styleOwner:i}:{}})()})}x(m.filter(e=>!_(e)).map(e=>({element:e,partId:e.getAttribute(R)??""})),h,e=>C(e),e=>ee(s,e),void 0,d,e=>q(s,e));const A=[...f.querySelectorAll(`[${H}="${CSS.escape(n)}"][${w}]`)];A.length&&x(A.map(e=>({element:e,partId:j(n,e.getAttribute(w)??"")})),h,void 0,e=>e,void 0,d)},W);return()=>{K();for(const l of g)l()}},[y,S,p,r,d]),k("div",{ref:c,"data-sf-part-host":"",style:{display:"contents"},children:t})}export{re as default,C as measureStyleBase,te as styleTagsOf};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as n,Fragment as A,jsxs as k}from"react/jsx-runtime";import{useCallback as _,useEffect as h,useRef as X,useState as J}from"react";import{Button as Q,Tooltip as $}from"efficient-shell/ui";import{SettingsSwitch as ee}from"efficient-easel/panel";import{PagesIcon as te,StylesIcon as oe}from"efficient-easel/rail";import{PaletteIcon as re}from"efficient-shell/icons/efficient";import{TemplateIcon as ne}from"efficient-easel/icons";import{Subtree as ie,TreeRow as B}from"efficient-easel/tree";import{useEasel as se}from"efficient-easel/easel";import{useEaselStrings as y}from"efficient-easel/strings";import{LocationsTreeContext as ae}from"./LocationsTreeContext.js";import ce from"./PagesPanel.js";import{usePreviewChat as de}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as le}from"./preview-devices.js";import{PreviewDeviceContext as pe}from"efficient-easel/draw/client";import{usePreviewHeader as me}from"../../render/components/PreviewHeaderContext.js";import{usePreviewSocial as fe}from"../../render/components/PreviewSocialContext.js";import{usePreviewSurface as ue}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as Se,usePreviewTicker as Ee}from"../../render/components/PreviewTickerContext.js";import{usePreviewHeroPart as we}from"../../render/components/PreviewHeroPartContext.js";import{HERO_MEDIA_PARTS as Pe,HERO_PART_MODE as H,heroMediaRows as Te,heroPartId as N,readHeroPartId as be}from"../../render/lib/puck/hero-media-parts.js";import he,{CHAT_MODE as ge,HEADER_MODE as D,SOCIAL_MODE as Ie,WEBSITE_MODE as W}from"./SectionEditor.js";import L from"./SectionIcon.js";import ve from"./SectionThumbnail.js";import{useScreenDocument as R}from"efficient-easel/screen/components/ScreenDocumentContext";import ke from"./StylesPanel.js";import{LOCATIONS_TYPE as _e,useLocationsTree as Ce}from"./useLocationsTree.js";import{usePinnedChromeSeed as Le}from"./usePinnedChromeSeed.js";import{usePreviewHref as Re}from"./usePreviewHref.js";import{WebsitePreviewButton as Oe}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as Ae,SITE_STYLES_TEXT_TAB as Be,useWebsiteName as ye}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as He}from"./useWebsiteMainAction.js";import{VersionHistory as Ne}from"./VersionHistoryDrawer.js";import{useEaselSession as De}from"efficient-easel/screen/lib/session-context";import{useOpenPageName as We}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as Ve,heroGroupNestDepth as Me}from"../../format/lib/hero-group-placement.js";import{stripMarkup as xe}from"../../format/lib/markup.js";import{categoryShortLabel as Ye,PINNED_SECTION_TYPE as Ge}from"../lib/puck/add-palette.js";import{canAddTo as Fe}from"../lib/puck/add-target.js";import{blockIsOffered as ze}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Ke,setBookingPreview as je}from"../../render/lib/puck/booking-preview.js";import{footerBlockRowName as Ue}from"../../format/lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Ze,HEADER_TYPE as V}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as qe,readLeftView as Xe,resolveLeftView as Je,writeLeftView as Qe}from"../../format/lib/puck/left-view.js";import{websiteIsLockedBlock as $e}from"../lib/puck/locked-blocks.js";import{everyPageBadge as et,everyPageNotice as tt,pinnedGroupTab as ot,websiteDuplicateBlocked as rt}from"../lib/puck/every-page.js";import{pinnedChromeInPlace as C}from"../../format/lib/pinned-chrome-lock.js";import{scrollPreviewToSection as nt,scrollPreviewToTop as M}from"efficient-easel/screen/lib/puck/preview-dom";import{SiteCanvas as it}from"../lib/puck/overrides.js";import{labelAtLevel as st}from"../../format/lib/puck/section-catalog.js";import{editorWords as at,say as c}from"../../format/lib/editor-words.js";import{SECTION_DESCRIPTIONS as ct}from"../../format/lib/puck/section-descriptions.js";import{groupAccepts as dt,isSectionGroupType as lt,sectionGroupZone as pt,SITE_FOOTER_TYPE as mt,SITE_HEADER_TYPE as ft}from"../../format/lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as ut,SAVE_AS_TEMPLATE_EVENT as St}from"../../format/lib/save-as-template-action.js";import{newSectionNode as Et}from"../lib/sections/new-section-node.js";import{useHostProducts as wt}from"../lib/use-host-products.js";import{backendOf as Pt}from"../lib/website-session.js";function x({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:r}=Ee(),d=y().tree,l=e,p=l.kind==="ticker"?l.heroId:null,a=_(i=>{if(!i)return;t({kind:"ticker",heroId:i}),nt(i)},[t]);return h(()=>{o(p)},[p,o]),h(()=>{r(a)},[r,a]),{partRows:(i,{rowClick:u})=>{const m=String(i.props.id);return i.type==="Hero"&&n(B,{icon:n(L,{type:"ticker",size:13}),name:c(Se),onSelect:()=>a(m),selected:p===m,rowProps:{onClick:u(()=>a(m))},words:d})}}}function Y({mode:e,select:t}){const{setSelectedHeroPart:o,setSelectHandler:r}=we(),d=y().tree,{appState:l}=se(f=>f),p=l.data.content??[],a=X(p);a.current=p;const i=e,u=Pe.find(f=>H[f]===i.kind),m=u&&"nodeId"in i?N(String(i.nodeId),u):null,w=_(f=>{const s=be(f);if(!s)return;const P=a.current.findIndex(S=>String(S.props.id)===s.nodeId);if(P<0)return;const b={kind:H[s.part],nodeId:s.nodeId};t({index:P},b)},[t]);return h(()=>{o(m)},[m,o]),h(()=>{r(w)},[r,w]),{partRows:(f,{rowClick:s})=>{const P=String(f.props.id),b=Te(f);if(b.length===0)return null;const S=I=>{const g=N(P,I.part);return n(B,{icon:n(L,{type:I.part==="media"?"heroMedia":"heroImage",size:13}),name:c(I.label),onSelect:()=>w(g),selected:m===g,rowProps:{onClick:s(()=>w(g))},words:d},g)},[E,...T]=b;return k(A,{children:[S(E),T.length>0&&n(ie,{children:T.map(S)})]})}}}function G(e,t){return{partRows:(o,r)=>k(A,{children:[e.partRows?.(o,r),t.partRows?.(o,r)]})}}function Tt(e){const{adapter:t,capabilities:o,currentSlug:r,siteId:d,docId:l,hasUnsavedEdits:p,bridgeCapabilities:a,notifyParent:i,token:u}=R(),{hasPreviewLink:m}=o,w=Pt(De()).preview?.draftLink,f=He(e.data),s=ut({hasTrustedConsole:!!u,canCreatePlatformTemplate:a.canCreatePlatformTemplate,capabilities:o,siteId:d,hasUnsavedEdits:p}),P=_(()=>{!d||!r||i(St,{siteId:d,slug:r})},[i,d,r]),b=Re({pageSlug:r,siteId:d,token:u}),S=t.previewHref?.(r)??b;return{barLead:()=>s.visible&&n($,{side:"bottom",content:s.enabled?c("Save this website as a platform template"):c(s.disabledReason),children:n("span",{className:"sf-tip-disabled",tabIndex:s.enabled?void 0:0,children:n(Q,{variant:"secondary",disabled:!s.enabled,onClick:P,rightIcon:n(ne,{size:15}),children:c("Save as Template")})})}),barTrail:()=>m&&r&&n(Oe,{liveHref:S,pageId:l??null,draftLink:w}),mainAction:f}}function bt(e,t){const{capabilities:o,templateId:r,siteId:d,tokenRef:l,navigate:p}=R(),{hasSiteTheme:a,explainsSiteSettings:i}=o,u=E=>t.setView(E),[m,w]=J(Ae[0].id),{surface:f,setSurface:s}=ue(),P=()=>{if(a){u("styles"),t.reveal(),M();return}e.show(W),e.reveal(),M()},b={id:"pages",label:c("Pages"),icon:n(te,{}),panel:({onHide:E})=>n(ce,{activeSurface:f,onPreviewSurface:s,onNavigate:T=>{s(null),p(r?{kind:"template",id:r,pageSlug:T}:{kind:"page",slug:T,siteId:d??void 0})},onClose:E})},S=[];return!a&&i&&S.push({id:"appearance",label:c("Appearance"),icon:n(re,{}),active:e.kind==="website",onSelect:P}),a&&S.push({id:"styles",label:c("Site styles"),icon:n(oe,{}),panel:({onHide:E,notify:T})=>n(ke,{tokenRef:l,siteId:d??void 0,onClose:E,onNotify:T,tab:m,onTabChange:w})}),{railLead:[b],railTrail:S,resolveLeftView:(E,T)=>Je(E,a,T),openSettings:P,openStyles:()=>{w(Be),u("styles")}}}function ht(e,t,o,r){const{kind:d,open:l}=e,{selected:p,zoneOf:a}=t;h(()=>{je(p?.type==="BookingBox"&&p.props.region==="confirm"?Ke(a(String(p.props.id))):null)},[p?.props.id]);const i=Ce(e,t),{capabilities:{hasSiteSettings:u}}=R(),{setSelected:m,setSelectHandler:w}=me(),{chat:f,setChat:s,setSelected:P,setSelectHandler:b}=de(),S=d==="header";h(()=>{m(S)},[S,m]),h(()=>{w(()=>l(D))},[w,l]);const E=_(()=>l(ge),[l]),T=d==="chat";h(()=>{P(T)},[T,P]),h(()=>{b(E)},[b,E]);const{setOpenHandler:I}=fe(),g=_(()=>l(Ie),[l]);h(()=>{I(g)},[I,g]);const K=G(x(e),Y(e)),j=Tt(t),U=bt(e,r),Z=o.device;return{...K,...j,...U,hasOwnRows:v=>v.type===_e,ownRows:i.renderLocationTree,sectionPressed:i.sectionPressed,wrap:v=>n(ae.Provider,{value:!0,children:k(pe.Provider,{value:Z,children:[v,n(Ne,{})]})}),addPanelRow:v=>u?k("div",{className:"sf-addside-sitewide",children:[n("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:n(L,{type:"chat",size:16})}),k("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{v(),E()},children:[c("Live chat"),n("span",{className:"sf-addside-sitewide-desc",children:c("A chat bubble on every page")})]}),n(ee,{checked:f.enabled,onChange:q=>s({enabled:q}),ariaLabel:c("Show the chat bubble on the whole site")})]}):void 0}}let F=null,O=new WeakMap;function gt(e){const t=at();if(!e||!t)return e;F!==t&&(F=t,O=new WeakMap);let o=O.get(e);return o||(o={...e,choices:e.choices?e.choices.map(r=>({...r,label:c(r.label)})):null,spec:e.spec?{...e.spec,addLabel:c(e.spec.addLabel)}:null},O.set(e,o)),o}const It={isLockedBlock:$e,duplicateBlocked:rt,nestDepth:(e,t,o)=>t===Ve?Me(e,o):0,newSectionNode:Et,canAddTo:(e,t)=>gt(Fe(e,t)),blockIsOffered:ze},vt=new Proxy(ct,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?c(o):o}}),kt={labelAtLevel:(e,t,o)=>c(st(e,t,o)),descriptions:vt,categoryLabel:e=>{const t=Ye(e);return t===void 0?void 0:c(t)},firstSection:Ge,blockRowName:Ue,plainText:xe,Icon:L,Thumbnail:ve,useProducts:wt},_t={desktop:2e3,tablet:800,mobile:390},z="desktop",Ct={options:le,initial:z,fluid:z,widths:_t},Lt={read:Xe,write:e=>Qe(e),forSelection:(e,t)=>qe(e,t)},Rt={first:V,last:Ze,firstGroup:ft,lastGroup:mt,isSectionGroup:lt,sectionGroupZone:pt,panelOf:e=>e===V?D:null,get groupTab(){return C()?ot:void 0},get groupBadge(){return C()?et():void 0},get changeNotice(){return C()?tt():void 0},get band(){return C()?Ot:void 0},get groupAccepts(){return C()?dt:void 0}},Ot={foldable:!0};function At(e){return{...G(x(e),Y(e)),openSettings:()=>e.show(W)}}const Do={useOwnerName:ye,useDocumentLabel:We,useBridges:ht,useStandaloneBridges:At,useDocumentPass:Le,blockRules:It,blockLook:kt,devices:Ct,leftView:Lt,pinned:Rt,Canvas:it,Inspector:he};export{Do as WEBSITE_SCREEN};
|
|
1
|
+
"use client";import{jsx as i,Fragment as B,jsxs as _}from"react/jsx-runtime";import{useCallback as C,useEffect as P,useRef as oe,useState as re}from"react";import{Button as ne,Tooltip as ie}from"efficient-shell/ui";import{SettingsSwitch as se}from"efficient-easel/panel";import{PagesIcon as ae,StylesIcon as ce}from"efficient-easel/rail";import{PaletteIcon as de}from"efficient-shell/icons/efficient";import{TemplateIcon as le}from"efficient-easel/icons";import{Subtree as pe,TreeRow as y}from"efficient-easel/tree";import{useEasel as H}from"efficient-easel/easel";import{useEaselStrings as N}from"efficient-easel/strings";import{LocationsTreeContext as me}from"./LocationsTreeContext.js";import fe from"./PagesPanel.js";import{usePreviewChat as ue}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as Se}from"./preview-devices.js";import{PreviewDeviceContext as he}from"efficient-easel/draw/client";import{usePreviewHeader as Ee}from"../../render/components/PreviewHeaderContext.js";import{usePreviewSocial as we}from"../../render/components/PreviewSocialContext.js";import{usePreviewSurface as Te}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as Pe,usePreviewTicker as be}from"../../render/components/PreviewTickerContext.js";import{usePreviewHeroPart as ge}from"../../render/components/PreviewHeroPartContext.js";import{HERO_MEDIA_PARTS as Ie,HERO_PART_MODE as D,heroMediaRows as ve,heroPartId as W,readHeroPartId as ke}from"../../render/lib/puck/hero-media-parts.js";import _e,{CHAT_MODE as Ce,HEADER_MODE as V,SOCIAL_MODE as Re,WEBSITE_MODE as M}from"./SectionEditor.js";import R from"./SectionIcon.js";import Le from"./SectionThumbnail.js";import{useScreenDocument as L}from"efficient-easel/screen/components/ScreenDocumentContext";import Oe from"./StylesPanel.js";import{LOCATIONS_TYPE as Ae,useLocationsTree as Be}from"./useLocationsTree.js";import{usePinnedChromeSeed as ye}from"./usePinnedChromeSeed.js";import{usePreviewHref as He}from"./usePreviewHref.js";import{WebsitePreviewButton as Ne}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as De,SITE_STYLES_TEXT_TAB as We,useWebsiteName as Ve}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as Me}from"./useWebsiteMainAction.js";import{VersionHistory as xe}from"./VersionHistoryDrawer.js";import{useEaselSession as x}from"efficient-easel/screen/lib/session-context";import{useOpenPageName as Ye}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as Fe,heroGroupNestDepth as Ge}from"../../format/lib/hero-group-placement.js";import{stripMarkup as ze}from"../../format/lib/markup.js";import{categoryShortLabel as Ke,PINNED_SECTION_TYPE as je}from"../lib/puck/add-palette.js";import{canAddTo as Ue}from"../lib/puck/add-target.js";import{blockIsOffered as Ze}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as qe,setBookingPreview as Xe}from"../../render/lib/puck/booking-preview.js";import{footerBlockRowName as Je}from"../../format/lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Qe,HEADER_TYPE as Y}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as $e,readLeftView as et,resolveLeftView as tt,writeLeftView as ot}from"../../format/lib/puck/left-view.js";import{websiteIsLockedBlock as rt}from"../lib/puck/locked-blocks.js";import{everyPageNotice as nt,noOwnTab as it,pinnedReach as F,websiteDuplicateBlocked as st}from"../lib/puck/every-page.js";import{sharedSectionReach as at,WEBSITE_SHARED_SECTIONS as ct}from"../lib/shared-sections-layer.js";import{activeSharedSections as O,setSharedEditor as G}from"../../format/lib/shared-sections-active.js";import{sharedSectionsOf as dt}from"efficient-easel/screen/lib/shared-sections";import{pinnedChromeInPlace as v}from"../../format/lib/pinned-chrome-lock.js";import{scrollPreviewToSection as lt,scrollPreviewToTop as z}from"efficient-easel/screen/lib/puck/preview-dom";import{SiteCanvas as pt}from"../lib/puck/overrides.js";import{labelAtLevel as mt}from"../../format/lib/puck/section-catalog.js";import{editorWords as ft,say as p}from"../../format/lib/editor-words.js";import{SECTION_DESCRIPTIONS as ut}from"../../format/lib/puck/section-descriptions.js";import{groupAccepts as St,isSectionGroupType as ht,sectionGroupZone as Et,SITE_FOOTER_TYPE as K,SITE_HEADER_TYPE as wt}from"../../format/lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Tt,SAVE_AS_TEMPLATE_EVENT as Pt}from"../../format/lib/save-as-template-action.js";import{newSectionNode as bt}from"../lib/sections/new-section-node.js";import{useHostProducts as gt}from"../lib/use-host-products.js";import{backendOf as It}from"../lib/website-session.js";function j({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:r}=be(),c=N().tree,d=e,n=d.kind==="ticker"?d.heroId:null,a=C(s=>{if(!s)return;t({kind:"ticker",heroId:s}),lt(s)},[t]);return P(()=>{o(n)},[n,o]),P(()=>{r(a)},[r,a]),{partRows:(s,{rowClick:u})=>{const m=String(s.props.id);return s.type==="Hero"&&i(y,{icon:i(R,{type:"ticker",size:13}),name:p(Pe),onSelect:()=>a(m),selected:n===m,rowProps:{onClick:u(()=>a(m))},words:c})}}}function U({mode:e,select:t}){const{setSelectedHeroPart:o,setSelectHandler:r}=ge(),c=N().tree,{appState:d}=H(f=>f),n=d.data.content??[],a=oe(n);a.current=n;const s=e,u=Ie.find(f=>D[f]===s.kind),m=u&&"nodeId"in s?W(String(s.nodeId),u):null,E=C(f=>{const l=ke(f);if(!l)return;const w=a.current.findIndex(S=>String(S.props.id)===l.nodeId);if(w<0)return;const b={kind:D[l.part],nodeId:l.nodeId};t({index:w},b)},[t]);return P(()=>{o(m)},[m,o]),P(()=>{r(E)},[r,E]),{partRows:(f,{rowClick:l})=>{const w=String(f.props.id),b=ve(f);if(b.length===0)return null;const S=I=>{const g=W(w,I.part);return i(y,{icon:i(R,{type:I.part==="media"?"heroMedia":"heroImage",size:13}),name:p(I.label),onSelect:()=>E(g),selected:m===g,rowProps:{onClick:l(()=>E(g))},words:c},g)},[h,...T]=b;return _(B,{children:[S(h),T.length>0&&i(pe,{children:T.map(S)})]})}}}function Z(e,t){return{partRows:(o,r)=>_(B,{children:[e.partRows?.(o,r),t.partRows?.(o,r)]})}}function vt(e){const{adapter:t,capabilities:o,currentSlug:r,siteId:c,docId:d,hasUnsavedEdits:n,bridgeCapabilities:a,notifyParent:s,token:u}=L(),{hasPreviewLink:m}=o,E=It(x()).preview?.draftLink,f=Me(e.data),l=Tt({hasTrustedConsole:!!u,canCreatePlatformTemplate:a.canCreatePlatformTemplate,capabilities:o,siteId:c,hasUnsavedEdits:n}),w=C(()=>{!c||!r||s(Pt,{siteId:c,slug:r})},[s,c,r]),b=He({pageSlug:r,siteId:c,token:u}),S=t.previewHref?.(r)??b;return{barLead:()=>l.visible&&i(ie,{side:"bottom",content:l.enabled?p("Save this website as a platform template"):p(l.disabledReason),children:i("span",{className:"sf-tip-disabled",tabIndex:l.enabled?void 0:0,children:i(ne,{variant:"secondary",disabled:!l.enabled,onClick:w,rightIcon:i(le,{size:15}),children:p("Save as Template")})})}),barTrail:()=>m&&r&&i(Ne,{liveHref:S,pageId:d??null,draftLink:E}),mainAction:f}}function kt(e,t){const{capabilities:o,templateId:r,siteId:c,tokenRef:d,navigate:n}=L(),{hasSiteTheme:a,explainsSiteSettings:s}=o,u=h=>t.setView(h),[m,E]=re(De[0].id),{surface:f,setSurface:l}=Te(),w=()=>{if(a){u("styles"),t.reveal(),z();return}e.show(M),e.reveal(),z()},b={id:"pages",label:p("Pages"),icon:i(ae,{}),panel:({onHide:h})=>i(fe,{activeSurface:f,onPreviewSurface:l,onNavigate:T=>{l(null),n(r?{kind:"template",id:r,pageSlug:T}:{kind:"page",slug:T,siteId:c??void 0})},onClose:h})},S=[];return!a&&s&&S.push({id:"appearance",label:p("Appearance"),icon:i(de,{}),active:e.kind==="website",onSelect:w}),a&&S.push({id:"styles",label:p("Site styles"),icon:i(ce,{}),panel:({onHide:h,notify:T})=>i(Oe,{tokenRef:d,siteId:c??void 0,onClose:h,onNotify:T,tab:m,onTabChange:E})}),{railLead:[b],railTrail:S,resolveLeftView:(h,T)=>tt(h,a,T),openSettings:w,openStyles:()=>{E(We),u("styles")}}}function _t(){const{navigate:e,siteId:t,reloadFromServer:o,docId:r}=L(),c=H(n=>n.config),d=x();P(()=>(G({openPage:n=>e({kind:"page",slug:n.slug,siteId:t??void 0}),reload:()=>{o()},config:c}),()=>G(null)),[e,t,o,c]),P(()=>{const n=O();if(!n||!r)return;let a=!1;return dt(d).list().then(s=>{a||n.learn(s)}).catch(()=>{}),()=>{a=!0}},[r,d])}function Ct(e,t,o,r){const{kind:c,open:d}=e,{selected:n,zoneOf:a}=t;P(()=>{Xe(n?.type==="BookingBox"&&n.props.region==="confirm"?qe(a(String(n.props.id))):null)},[n?.props.id]);const s=Be(e,t),{capabilities:{hasSiteSettings:u}}=L();_t();const{setSelected:m,setSelectHandler:E}=Ee(),{chat:f,setChat:l,setSelected:w,setSelectHandler:b}=ue(),S=c==="header";P(()=>{m(S)},[S,m]),P(()=>{E(()=>d(V))},[E,d]);const h=C(()=>d(Ce),[d]),T=c==="chat";P(()=>{w(T)},[T,w]),P(()=>{b(h)},[b,h]);const{setOpenHandler:I}=we(),g=C(()=>d(Re),[d]);P(()=>{I(g)},[I,g]);const J=Z(j(e),U(e)),Q=vt(t),$=kt(e,r),ee=o.device;return{...J,...Q,...$,hasOwnRows:k=>k.type===Ae,ownRows:s.renderLocationTree,sectionPressed:s.sectionPressed,wrap:k=>i(me.Provider,{value:!0,children:_(he.Provider,{value:ee,children:[k,i(xe,{})]})}),addPanelRow:k=>u?_("div",{className:"sf-addside-sitewide",children:[i("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:i(R,{type:"chat",size:16})}),_("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{k(),h()},children:[p("Live chat"),i("span",{className:"sf-addside-sitewide-desc",children:p("A chat bubble on every page")})]}),i(se,{checked:f.enabled,onChange:te=>l({enabled:te}),ariaLabel:p("Show the chat bubble on the whole site")})]}):void 0}}let q=null,A=new WeakMap;function Rt(e){const t=ft();if(!e||!t)return e;q!==t&&(q=t,A=new WeakMap);let o=A.get(e);return o||(o={...e,choices:e.choices?e.choices.map(r=>({...r,label:p(r.label)})):null,spec:e.spec?{...e.spec,addLabel:p(e.spec.addLabel)}:null},A.set(e,o)),o}const Lt={isLockedBlock:(e,t)=>rt(e)||!!(t&&O()?.heldElsewhere(t.props.id)),duplicateBlocked:st,nestDepth:(e,t,o)=>t===Fe?Ge(e,o):0,newSectionNode:bt,canAddTo:(e,t)=>Rt(Ue(e,t)),blockIsOffered:Ze},Ot=new Proxy(ut,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?p(o):o}}),At={labelAtLevel:(e,t,o)=>p(mt(e,t,o)),descriptions:Ot,categoryLabel:e=>{const t=Ke(e);return t===void 0?void 0:p(t)},firstSection:je,blockRowName:Je,plainText:ze,Icon:R,Thumbnail:Le,useProducts:gt},Bt={desktop:2e3,tablet:800,mobile:390},X="desktop",yt={options:Se,initial:X,fluid:X,widths:Bt},Ht={read:et,write:e=>ot(e),forSelection:(e,t)=>$e(e,t)},Nt={first:Y,last:Qe,firstGroup:wt,lastGroup:K,isSectionGroup:ht,sectionGroupZone:Et,panelOf:e=>e===Y?V:null,get sharedReach(){return v()?Wt:void 0},get shared(){return O()?ct:void 0},get groupTab(){return v()?it:void 0},get groupBadge(){return v()?F({type:K})??void 0:void 0},get changeNotice(){return v()?nt():void 0},get band(){return v()?Dt:void 0},get groupAccepts(){return v()?St:void 0}},Dt={foldable:!0},Wt=e=>F(e)??at(e);function Vt(e){return{...Z(j(e),U(e)),openSettings:()=>e.show(M)}}const jo={useOwnerName:Ve,useDocumentLabel:Ye,useBridges:Ct,useStandaloneBridges:Vt,useDocumentPass:ye,blockRules:Lt,blockLook:At,devices:yt,leftView:Ht,pinned:Nt,Canvas:pt,Inspector:_e};export{jo as WEBSITE_SCREEN};
|
|
@@ -816,6 +816,25 @@
|
|
|
816
816
|
|
|
817
817
|
/* @tokens canvas-end */
|
|
818
818
|
|
|
819
|
+
/* ── A Gap only Box on the canvas draws what the page draws ───────────────────
|
|
820
|
+
A Box set to "Gap only" (`sf-box-gap-only`, lib/content/box-layout) takes
|
|
821
|
+
away its blocks' own top and bottom padding; the host's unlayered rules are
|
|
822
|
+
`.sf-box-gap-only > *` and `.sf-box-gap-only > .sf-section-pad > *`. On the
|
|
823
|
+
canvas two elements stand between the Box and each block's root: the
|
|
824
|
+
editor's item (`[data-puck-component]`) and the part host
|
|
825
|
+
(`[data-sf-part-host]`, components/PreviewPartAnchors, `display: contents`).
|
|
826
|
+
A child selector stops at the item, so on the canvas every block kept its
|
|
827
|
+
frame (a Heading +48px, a Text +32px) and the Box was taller than on the
|
|
828
|
+
page. These are the host's two rules again, through the two elements.
|
|
829
|
+
Unlayered, for the host's reason: it must beat the `py-4` / `py-6` utility.
|
|
830
|
+
`scripts/test-gap-only-canvas.tsx` compares the canvas with the page.
|
|
831
|
+
Outside the canvas region above, whose rules may name only `[data-puck-…]`
|
|
832
|
+
(`scripts/test-editor-css-tokens.ts`); it holds no colour, radius or face. */
|
|
833
|
+
.sf-box-gap-only > [data-puck-component] > [data-sf-part-host] > *,
|
|
834
|
+
.sf-box-gap-only > [data-puck-component] > [data-sf-part-host] > .sf-section-pad > * {
|
|
835
|
+
padding-block: 0;
|
|
836
|
+
}
|
|
837
|
+
|
|
819
838
|
/* ── Canvas "Add section" seams (overlay between preview sections) ──────────
|
|
820
839
|
Absolutely positioned over .sf-preview-host (the iframe's box), one band per
|
|
821
840
|
seam between top-level sections, placed at the boundary Y measured from the
|
|
@@ -15,6 +15,13 @@ export type PinnedChromeState = {
|
|
|
15
15
|
saveFailed: boolean;
|
|
16
16
|
unpublished: boolean;
|
|
17
17
|
loadFailed: boolean;
|
|
18
|
+
sections?: readonly SharedSectionNote[];
|
|
19
|
+
};
|
|
20
|
+
export type SharedSectionNote = {
|
|
21
|
+
section: string;
|
|
22
|
+
title: string;
|
|
23
|
+
problem: "load" | "lock" | "conflict" | "save";
|
|
24
|
+
holder?: LockHolder;
|
|
18
25
|
};
|
|
19
26
|
export interface PinnedChromeReport {
|
|
20
27
|
state(): PinnedChromeState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{SITE_FOOTER_SLUG as
|
|
1
|
+
"use client";import{SITE_FOOTER_SLUG as H}from"../../format/lib/content/footer.js";import{offeredSetsOf as x}from"./editor-blocks.js";import{isBackendError as F}from"efficient-easel/screen/lib/backend-error";import{isEfficientBackend as z}from"efficient-easel/screen/lib/session";import{noteLoaded as M,notePublished as _,noteSaved as T,pageLiveState as Z}from"./page-live-state.js";import{noteSiteLiveState as ee,refreshSiteLiveState as A}from"./site-live-state.js";import{say as te}from"../../format/lib/editor-words.js";import{sendSiteWrites as ne}from"../../format/lib/site-writes.js";import{spliceChrome as oe,splitChrome as G}from"./pinned-chrome-doc.js";import{references as ie,sectionNodeOf as se,spliceShared as re,splitShared as le}from"../../format/lib/shared-section-docs.js";import{setActiveSharedSections as W}from"../../format/lib/shared-sections-active.js";import{setActivePinnedChrome as Y}from"../../format/lib/pinned-chrome-lock.js";import{backendOf as $}from"./website-session.js";function I(n){return!!(n?.publish&&n.liveState)}function ae(n,i){if(!I(n))return;const{versions:c,nameVersion:d,restoreVersion:a,previewVersion:o}=n;if(!(!c||!d||!a||!o))return{list:()=>c.call(n,i),name:(f,w)=>d.call(n,f,w,i),restore:(f,w)=>a.call(n,f,w??{},i),preview:f=>o.call(n,f,i)}}function ce(n,i){return async(c,d)=>{try{await ne()}catch(o){throw new Error(te("A change waiting to go live could not be saved."),{cause:o})}return(await n.publish(i)).state==="live"?ee({state:"live",changes:[]}):A(0),{version:d??null}}}function N(n,i,c){const d=i?{siteId:i}:void 0;return{resolve:a=>n.load({slug:a,...d}).then(o=>(o&&M(o.id,o.live),o)),saveLayout:(a,o,f,w)=>n.save(a,{layout:o},{version:f,clientId:w??""}).then(m=>(T(a,m.live),A(),m)),rereadVersion:n.version?a=>n.version(a):void 0,publish:I(c)?ce(c,d):n.publish?(a,o)=>n.publish(a,o?{version:o}:void 0).then(f=>(_(a,f.live),f)):void 0,listPages:()=>n.list(d),createPage:n.create?a=>n.create({...a,...d}):void 0,deletePage:n.remove?(a,o)=>n.remove(a,o):void 0}}function de(n,i,c,d,a=!1){let o=null;const f=new Set;let w=!1,m=new Map,y=new Map,h=new Map,g=new Map,P={docId:null,lockHolder:null,conflict:null,saveFailed:!1,unpublished:!1,loadFailed:!1,sections:[]};const B=new Set,D=()=>{if(!o)return!1;const e=Z(o.id);return e==="changed"||e==="never"||e===void 0&&w},S=e=>{P={...P,...e,docId:o?.id??null,unpublished:D(),sections:[...h.values()]};for(const t of B)t()},k=(e,t,s)=>{t?h.set(e,{section:e,title:m.get(e)?.title??"",problem:t,holder:s}):h.delete(e)},C=e=>e&&typeof e=="object"&&!Array.isArray(e)?e:{},O=e=>f.has(e),R=()=>new Map([...m].map(([e,t])=>[e,t.layout])),V=()=>`SharedSection-${typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2)}`,J=(e,t,s,r)=>{const l=C(t);m.set(e,{layout:l,version:s,savedJson:JSON.stringify(l),title:r})},U={state:()=>P,subscribe:e=>(B.add(e),()=>{B.delete(e)})},K={sectionOf:e=>y.get(e)?.section??null,heldElsewhere:e=>{const t=y.get(e)?.section;return!!(t&&h.get(t)?.problem==="lock")},adopt:(e,t)=>{J(t.id,t.layout,t.layout_updated_at,t.title),y.set(e,{section:t.id,refId:V()}),g.set(t.id,t.used_on),S({})},place:e=>{if([...y.values()].some(r=>r.section===e.id))return null;const t=se(C(e.layout)),s=typeof t?.props?.id=="string"?t.props.id:null;return!t||!s||!t.type?null:(J(e.id,e.layout,e.layout_updated_at,e.title),y.set(s,{section:e.id,refId:V()}),g.set(e.id,e.used_on),t)},usedOn:e=>g.get(e)??null,learn:e=>{for(const t of e){g.set(t.id,t.used_on);const s=m.get(t.id);s&&(s.title=t.title);const r=h.get(t.id);r&&h.set(t.id,{...r,title:t.title})}S({})}},Q=async(e,t)=>{for(const[s,r]of e){const l=m.get(s),u=JSON.stringify(r);if(!(!l||u===l.savedJson||h.get(s)?.problem==="lock"))try{const v=await n.save(s,{layout:r},{version:l.version,clientId:t??""});T(s,v.live),l.layout=r,l.version=v.version,l.savedJson=u,k(s,null)}catch(v){F(v,"changed-elsewhere")?k(s,"conflict"):F(v,"lock-taken")?k(s,"lock",v.holder??void 0):k(s,"save")}}e.size&&A(),S({})};return{resolve:async e=>{if(Y(e===H?null:U),W(e===H?null:K),m=new Map,y=new Map,h=new Map,g=new Map,e===H)return c.resolve(e);let t=!1;const[s,r]=await Promise.all([c.resolve(e),n.load({slug:H,...i}).catch(()=>(t=!0,null))]);if(r){M(r.id,r.live);const p=C(r.layout);o={id:r.id,layout:p,version:r.version,savedJson:""}}else o=null;if(w=!1,!s)return S({conflict:null,saveFailed:!1,loadFailed:t}),s;const l=C(s.layout),u=ie(l),v=await Promise.all(u.map(p=>n.load({id:p.section,...i}).catch(()=>null)));u.forEach((p,X)=>{const L=v[X];L?(M(L.id,L.live),J(p.section,L.layout,L.version,"")):(m.delete(p.section),h.set(p.section,{section:p.section,title:"",problem:"load"}))});const E=re(l,R());if(y=E.held,!o)return y.size&&f.add(s.id),S({conflict:null,saveFailed:!1,loadFailed:t}),y.size?{...s,layout:E.working}:s;const b=oe(E.working,o.layout);return o.savedJson=JSON.stringify(G(b,o.layout).chrome),f.add(s.id),S({conflict:null,saveFailed:!1,loadFailed:!1}),{...s,layout:b}},saveLayout:async(e,t,s,r)=>{if(!O(e))return c.saveLayout(e,t,s,r);const l=o,u=l?G(t,l.layout):{page:t,chrome:null},v=le(u.page,y,R()),E=await c.saveLayout(e,v.page,s,r);if(await Q(v.docs,r),!l)return E;const b=JSON.stringify(u.chrome);if(!u.chrome||b===l.savedJson||P.lockHolder)return E;try{const p=await n.save(l.id,{layout:u.chrome},{version:l.version,clientId:r??""});T(l.id,p.live),A(),l.layout=u.chrome,l.version=p.version,l.savedJson=b,w=!0,S({conflict:null,saveFailed:!1})}catch(p){F(p,"changed-elsewhere")?S({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):F(p,"lock-taken")?S({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):S({saveFailed:!0})}return E},publish:c.publish?async(e,t)=>{const s=await c.publish(e,t),r=o;if(r&&O(e)&&!a&&n.publish&&D()&&!P.lockHolder){const l=await n.publish(r.id,r.version?{version:r.version}:void 0);_(r.id,l.live),l.version!==null&&(r.version=l.version),w=!1,S({})}if(O(e)&&!a&&n.publish)for(const[l,u]of m){if(h.get(l)?.problem==="lock")continue;const v=await n.publish(l,u.version?{version:u.version}:void 0);_(l,v.live),v.version!==null&&(u.version=v.version)}return s}:void 0,lock:d?{claim:async(e,t,s)=>{const r=await d.claim(e,t,s);if(!O(e))return r;const l=o;if(l)try{await d.claim(l.id,t,!1),P.lockHolder&&S({lockHolder:null})}catch(u){F(u,"lock-taken")&&S({lockHolder:u.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}for(const u of m.keys())try{await d.claim(u,t,!1),h.get(u)?.problem==="lock"&&k(u,null)}catch(v){F(v,"lock-taken")&&k(u,"lock",v.holder??void 0)}return m.size&&S({}),r},release:async(e,t)=>{if(await d.release(e,t),!O(e))return;const s=o;s&&!P.lockHolder&&await d.release(s.id,t).catch(()=>{});for(const r of m.keys())h.get(r)?.problem!=="lock"&&await d.release(r,t).catch(()=>{})}}:void 0,pinnedChrome:U}}function ke(n,i=$(),c=x(),d={}){const a=z(i),o=n?{siteId:n}:void 0,f=a?!!n:!0,w=i.site.update,m=a&&c.commerce&&c.service,y=!!d.editsPinnedInPlace&&m,h=I(i.site)?i.site:void 0,g=N(i.pages,n,h),P=y?de(i.pages,o,g,i.lock,!!h):null;return{capabilities:{canPublish:!!h||!!i.pages.publish,hasSiteSettings:a,hasSiteTheme:!!i.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!i.pages.create,canDeletePagesInline:!!i.pages.remove,hasEditLock:!!i.lock,hasEditGuard:!0,hasPinnedChrome:m,editsPinnedInPlace:y,explainsSiteSettings:!1,hasSiteRecord:f,canEditSiteRecord:f&&!!w,hasPreviewLink:a||!!i.preview,hasCatalog:a&&c.commerce,hasForms:a&&c.service,hasBlog:!!i.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...g,...q(g.resolve),lock:i.lock,...P,site:f?()=>i.site.get(o):void 0,siteLiveState:h?()=>h.liveState(o):void 0,siteVersions:ae(h,o),updateSite:f&&w?B=>w(B,o):void 0,previewHref:i.preview?B=>i.preview.href(B):void 0}}function Fe(n,i=$(),c=x()){const d=z(i),a=i.templates,o=a?a.pages(n):{list:()=>Promise.reject(new Error(j)),load:()=>Promise.reject(new Error(j)),save:()=>Promise.reject(new Error(j))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!o.create,canDeletePagesInline:!!o.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:d&&c.commerce&&c.service,editsPinnedInPlace:!1,explainsSiteSettings:d,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:d&&c.commerce,hasForms:d&&c.service,hasBlog:!!i.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...N(o,void 0),...q(N(o,void 0).resolve),publish:void 0,templateName:a?()=>a.get(n).then(f=>f.name):void 0}}function q(n){return{resolve:i=>(Y(null),W(null),n(i))}}const j="This editor's backend has no website templates.";export{ke as makeSitePageAdapter,Fe as makeTemplatePageAdapter};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function pinnedReach(node: {
|
|
2
2
|
type?: string;
|
|
3
3
|
}): string | null;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const noOwnTab: () => string | null;
|
|
5
5
|
export declare const everyPageNotice: () => string;
|
|
6
6
|
export declare function websiteDuplicateBlocked(data: unknown, item: unknown): string | null;
|
|
7
7
|
export declare const EVERY_PAGE_PHRASES: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{say as e}from"../../../format/lib/editor-words.js";import{FOOTER_TYPE as
|
|
1
|
+
import{say as e}from"../../../format/lib/editor-words.js";import{FOOTER_TYPE as h,HEADER_TYPE as c}from"./footer-blocks.js";import{duplicateBlocked as p}from"../../../format/lib/hero-group-placement.js";import{groupDuplicateRefusal as l,SITE_FOOTER_TYPE as f,SITE_HEADER_TYPE as s}from"../../../format/lib/puck/section-groups.js";function E(o){switch(o?.type){case s:case f:return e("On every page");case c:case h:return e("On every page · old style");default:return null}}const y=()=>null,g=()=>e("Changed on every page");function m(o,n){const r=p(o,n);if(r)return r;const t=l(o,n);if(!t)return null;const a=t.group===s;return t.why==="type"?a?e("The header cannot take another one of these"):e("The footer cannot take another one of these"):a?e("The header holds at most 3 sections"):e("The footer holds at most 6 sections")}const O=["On every page","On every page · old style","Changed on every page","The header cannot take another one of these","The footer cannot take another one of these","The header holds at most 3 sections","The footer holds at most 6 sections"];export{O as EVERY_PAGE_PHRASES,g as everyPageNotice,y as noOwnTab,E as pinnedReach,m as websiteDuplicateBlocked};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ScreenSharedSections } from "efficient-easel/screen/lib/screen-parts";
|
|
2
|
+
export declare function sharedSectionReach(node: {
|
|
3
|
+
props?: {
|
|
4
|
+
id?: unknown;
|
|
5
|
+
};
|
|
6
|
+
}): string | null;
|
|
7
|
+
export declare const SHARED_SECTION_PHRASES: readonly string[];
|
|
8
|
+
export declare const WEBSITE_SHARED_SECTIONS: ScreenSharedSections;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{copyNode as i}from"efficient-easel/data";import{say as s}from"../../format/lib/editor-words.js";import{activeSharedSections as t,sharedEditor as p}from"../../format/lib/shared-sections-active.js";function l(n){const o=typeof n?.props?.id=="string"?n.props.id:null,e=t(),c=o&&e?e.sectionOf(o):null;if(!e||!c)return null;const r=e.usedOn(c);return r?r.length===1?s("On 1 page"):s("On {count} pages",{count:r.length}):s("On other pages")}const O=["On other pages","On 1 page","On {count} pages"],f={usedOn:n=>{const o=t(),e=o?.sectionOf(n.props.id)??null;return!o||!e?null:o.usedOn(e)??[]},openPage:n=>p()?.openPage(n),adopt:(n,o)=>t()?.adopt(n.props.id,o),nodeOf:n=>t()?.place(n)??null,detach:n=>{const o=p()?.config;return o?i(n,o):n},removed:()=>p()?.reload()};export{O as SHARED_SECTION_PHRASES,f as WEBSITE_SHARED_SECTIONS,l as sharedSectionReach};
|
|
@@ -48,6 +48,7 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
48
48
|
readonly "A second customer quote \u2014 what they loved, in a sentence or two.": "A second customer quote — what they loved, in a sentence or two.";
|
|
49
49
|
readonly "A section heading over a grid of column cards.": "A section heading over a grid of column cards.";
|
|
50
50
|
readonly "A sentence or two of supporting copy.": "A sentence or two of supporting copy.";
|
|
51
|
+
readonly "A shared section": "A shared section";
|
|
51
52
|
readonly "A short customer quote goes here \u2014 replace it with a real testimonial from your customers.": "A short customer quote goes here — replace it with a real testimonial from your customers.";
|
|
52
53
|
readonly "A short customer quote goes here.": "A short customer quote goes here.";
|
|
53
54
|
readonly "A short description of this recurring column.": "A short description of this recurring column.";
|
|
@@ -421,7 +422,6 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
421
422
|
readonly Essay: "Essay";
|
|
422
423
|
readonly Even: "Even";
|
|
423
424
|
readonly "Every Publish keeps a copy of the whole website: pages, menus and site styles.": "Every Publish keeps a copy of the whole website: pages, menus and site styles.";
|
|
424
|
-
readonly "Every page": "Every page";
|
|
425
425
|
readonly "Every text on the site that follows {style} changes to look like this one. This text\u2019s own changes are cleared, and it keeps following {style}.": "Every text on the site that follows {style} changes to look like this one. This text’s own changes are cleared, and it keeps following {style}.";
|
|
426
426
|
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.";
|
|
427
427
|
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.";
|
|
@@ -473,8 +473,6 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
473
473
|
readonly "Follows the site": "Follows the site";
|
|
474
474
|
readonly "Follows the style": "Follows the style";
|
|
475
475
|
readonly "Footer Box": "Footer Box";
|
|
476
|
-
readonly "Footer \u00B7 on every page": "Footer · on every page";
|
|
477
|
-
readonly "Footer \u00B7 on every page \u00B7 old style": "Footer · on every page · old style";
|
|
478
476
|
readonly Footnote: "Footnote";
|
|
479
477
|
readonly Form: "Form";
|
|
480
478
|
readonly "Form eyebrow": "Form eyebrow";
|
|
@@ -523,8 +521,6 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
523
521
|
readonly "Header and footer not live yet": "Header and footer not live yet";
|
|
524
522
|
readonly "Header badge": "Header badge";
|
|
525
523
|
readonly "Header settings belong to a website.": "Header settings belong to a website.";
|
|
526
|
-
readonly "Header \u00B7 on every page": "Header · on every page";
|
|
527
|
-
readonly "Header \u00B7 on every page \u00B7 old style": "Header · on every page · old style";
|
|
528
524
|
readonly Heading: "Heading";
|
|
529
525
|
readonly "Heading 1": "Heading 1";
|
|
530
526
|
readonly "Heading 2": "Heading 2";
|
|
@@ -750,11 +746,16 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
750
746
|
readonly Office: "Office";
|
|
751
747
|
readonly Offices: "Offices";
|
|
752
748
|
readonly "Offset tall": "Offset tall";
|
|
749
|
+
readonly "On 1 page": "On 1 page";
|
|
753
750
|
readonly "On a phone": "On a phone";
|
|
754
751
|
readonly "On every blog post.": "On every blog post.";
|
|
752
|
+
readonly "On every page": "On every page";
|
|
753
|
+
readonly "On every page \u00B7 old style": "On every page · old style";
|
|
754
|
+
readonly "On other pages": "On other pages";
|
|
755
755
|
readonly "On phones, content always fills the screen.": "On phones, content always fills the screen.";
|
|
756
756
|
readonly "On picture": "On picture";
|
|
757
757
|
readonly "On this page": "On this page";
|
|
758
|
+
readonly "On {count} pages": "On {count} pages";
|
|
758
759
|
readonly One: "One";
|
|
759
760
|
readonly "One row": "One row";
|
|
760
761
|
readonly "One then four": "One then four";
|
|
@@ -1267,6 +1268,7 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
1267
1268
|
readonly "{name} (taken down)": "{name} (taken down)";
|
|
1268
1269
|
readonly "{name} (unavailable)": "{name} (unavailable)";
|
|
1269
1270
|
readonly "{name} is editing the header and footer. Nothing you change in them here is saved.": "{name} is editing the header and footer. Nothing you change in them here is saved.";
|
|
1271
|
+
readonly "{name} is editing {section}. Nothing you change in it here is saved.": "{name} is editing {section}. Nothing you change in it here is saved.";
|
|
1270
1272
|
readonly "{name} is on this section": "{name} is on this section";
|
|
1271
1273
|
readonly "{name} \u2014 renamed in the Console: {place}.": "{name} — renamed in the Console: {place}.";
|
|
1272
1274
|
readonly "{n} change": "{n} change";
|
|
@@ -1280,6 +1282,9 @@ export declare const WEB_BUILDER_WORDS: {
|
|
|
1280
1282
|
readonly "{n} pictures in this version were deleted from the media library. They stay empty.": "{n} pictures in this version were deleted from the media library. They stay empty.";
|
|
1281
1283
|
readonly "{page} from version {n} is now your draft": "{page} from version {n} is now your draft";
|
|
1282
1284
|
readonly "{page} goes back to version {n} as a draft. Nothing else on your website changes.": "{page} goes back to version {n} as a draft. Nothing else on your website changes.";
|
|
1285
|
+
readonly "{section} could not load. It stays on the page as it was. Reload to try again.": "{section} could not load. It stays on the page as it was. Reload to try again.";
|
|
1286
|
+
readonly "{section} did not save. It is sent again with your next change.": "{section} did not save. It is sent again with your next change.";
|
|
1287
|
+
readonly "{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.": "{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.";
|
|
1283
1288
|
readonly "{value} from {from}": "{value} from {from}";
|
|
1284
1289
|
readonly "{value} on desktop": "{value} on desktop";
|
|
1285
1290
|
readonly "{what} settings belong to a website.": "{what} settings belong to a website.";
|
|
@@ -1,6 +1,6 @@
|
|
|
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 change waiting to go live could not be saved.":"A change waiting to go live could not be saved.","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",Account:"Account","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 office coordinates to plot the map":"Add office coordinates to plot the map","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.","Another page uses this URL handle.":"Another page uses this URL handle.",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 shot":"As shot","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","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 color":"Background color","Background image":"Background image","Background images":"Background images",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:"Below","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 word":"Bold word","Booking Form":"Booking Form",Border:"Border","Border bottom":"Border bottom","Border color":"Border color","Border left":"Border left","Border right":"Border right","Border style":"Border style","Border top":"Border top","Border width":"Border width",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","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",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 style":"Card style","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changed on every page":"Changed on every page","Changes not live yet":"Changes not live yet",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Check it with Preview. Press Publish to put it live.":"Check it with Preview. Press Publish to put it live.","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","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 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}","Click to play":"Click to play",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","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content cannot be wider than the background.":"Content cannot be wider than the background.","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 page — please retry.":"Couldn’t duplicate 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 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","Custom color":"Custom color","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",Dashed:"Dashed","Data points":"Data points",Date:"Date",Dealers:"Dealers","Dealers are not available on this website":"Dealers are not available on this website","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",Distance:"Distance","Distance from top":"Distance from top",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",Dotted:"Dotted",Down:"Down","Draft before restore":"Draft before restore","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate page":"Duplicate page","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicate “{name}”":"Duplicate “{name}”","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each side":"Each side","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 Publish keeps a copy of the whole website: pages, menus and site styles.":"Every Publish keeps a copy of the whole website: pages, menus and site styles.","Every page":"Every page","Every text on the site that follows {style} changes to look like this one. This text’s own changes are cleared, and it keeps following {style}.":"Every text on the site that follows {style} changes to look like this one. This text’s own changes are cleared, and it keeps following {style}.","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","Extra large — 64px":"Extra large — 64px",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","Fill color":"Fill color",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 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","Footer Box":"Footer Box","Footer · on every page":"Footer · on every page","Footer · on every page · old style":"Footer · on every page · old style",Footnote:"Footnote",Form:"Form","Form eyebrow":"Form eyebrow","Form heading":"Form heading","Form intro":"Form intro","Formatting — click a row first":"Formatting — click a row first","Formatting — row {n}":"Formatting — row {n}",Founders:"Founders","Founders heading":"Founders heading","Founders statement":"Founders statement","Four across":"Four across","Four stagger":"Four stagger",Frequency:"Frequency","Frequently *asked.*":"Frequently *asked.*","From the bottom":"From the bottom",Full:"Full","Full width":"Full width","Full-bleed intro image the next section scrolls over.":"Full-bleed intro image the next section scrolls over.","Full-screen image or video with a headline.":"Full-screen image or video with a headline.","Full-screen opener with rotating slides.":"Full-screen opener with rotating slides.",Gap:"Gap","Gap only":"Gap only","Give the new template page a name. It starts blank — add sections once it opens.":"Give the new template page a name. It starts blank — add sections once it opens.","Gives the other card this card's Corners.":"Gives the other card this card's Corners.","Gives the other {n} cards this card's Corners.":"Gives the other {n} cards this card's Corners.",Good:"Good","Greeting message":"Greeting message",Grid:"Grid",Group:"Group","Group heading":"Group heading","Group name":"Group name",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HQ:"HQ",HTML:"HTML","HTML tag":"HTML tag",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 and footer not live yet":"Header and footer not live yet","Header badge":"Header badge","Header settings belong to a website.":"Header settings belong to a website.","Header · on every page":"Header · on every page","Header · on every page · old style":"Header · on every page · old style",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading font size":"Heading font size",Headings:"Headings",Headquarters:"Headquarters",Height:"Height",Hero:"Hero","Hero & intros":"Hero & intros","Hero Slide":"Hero Slide","Hero Slideshow":"Hero Slideshow","Hero button":"Hero button","Hero line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide on phone":"Hide on phone","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 only":"Icon only","Icon position":"Icon position","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image 2":"Image 2","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",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","Label only":"Label only",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Large — 56px":"Large — 56px","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 and right":"Left and right","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Length:"Length",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line (trend)":"Line (trend)",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:"Live","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading versions":"Loading versions","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","Medium — 48px":"Medium — 48px",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","Mockup Card":"Mockup Card","Mockup card":"Mockup card","Mockup position":"Mockup position",Mono:"Mono","Month DD, YYYY":"Month DD, YYYY",More:"More",Motion:"Motion","Multi-column container for blocks.":"Multi-column container for blocks.",Muted:"Muted",Name:"Name","Name / alt":"Name / alt","Name this version":"Name this version","Named versions are always kept. Leave it empty to take the name away.":"Named versions are always kept. Leave it empty to take the name away.",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":"No match","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 place found. Try another postcode.":"No place found. Try another postcode.","No section anchors yet":"No section anchors yet","No style":"No style","No versions yet. Every Publish from now on keeps one.":"No versions yet. Every Publish from now on keeps one.","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 published":"Not published","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",Off:"Off",Office:"Office",Offices:"Offices","Offset tall":"Offset tall","On a phone":"On a phone","On every blog post.":"On every blog post.","On phones, content always fills the screen.":"On phones, content always fills the screen.","On picture":"On picture","On this page":"On this page",One:"One","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",Option:"Option","Order Table":"Order Table","Order summary":"Order summary",Outline:"Outline",Outlined:"Outlined",Overlay:"Overlay","Overlay - CartDrawer":"Overlay - CartDrawer","Overlay - ConsentBanner":"Overlay - ConsentBanner","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",Paragraph:"Paragraph","Paragraph size — 13px":"Paragraph size — 13px","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:"Playback","Playback speed":"Playback speed","Plays well with\n*your favourite apps.*":`Plays well with
|
|
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 shared section":"A shared section","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",Account:"Account","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 office coordinates to plot the map":"Add office coordinates to plot the map","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.","Another page uses this URL handle.":"Another page uses this URL handle.",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 shot":"As shot","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","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 color":"Background color","Background image":"Background image","Background images":"Background images",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:"Below","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 word":"Bold word","Booking Form":"Booking Form",Border:"Border","Border bottom":"Border bottom","Border color":"Border color","Border left":"Border left","Border right":"Border right","Border style":"Border style","Border top":"Border top","Border width":"Border width",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","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",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 style":"Card style","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changed on every page":"Changed on every page","Changes not live yet":"Changes not live yet",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Check it with Preview. Press Publish to put it live.":"Check it with Preview. Press Publish to put it live.","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","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 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}","Click to play":"Click to play",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","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content cannot be wider than the background.":"Content cannot be wider than the background.","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 page — please retry.":"Couldn’t duplicate 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 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","Custom color":"Custom color","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",Dashed:"Dashed","Data points":"Data points",Date:"Date",Dealers:"Dealers","Dealers are not available on this website":"Dealers are not available on this website","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",Distance:"Distance","Distance from top":"Distance from top",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",Dotted:"Dotted",Down:"Down","Draft before restore":"Draft before restore","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate page":"Duplicate page","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicate “{name}”":"Duplicate “{name}”","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each side":"Each side","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 Publish keeps a copy of the whole website: pages, menus and site styles.":"Every Publish keeps a copy of the whole website: pages, menus and site styles.","Every text on the site that follows {style} changes to look like this one. This text’s own changes are cleared, and it keeps following {style}.":"Every text on the site that follows {style} changes to look like this one. This text’s own changes are cleared, and it keeps following {style}.","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","Extra large — 64px":"Extra large — 64px",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","Fill color":"Fill color",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 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","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","HTML tag":"HTML tag",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 and footer not live yet":"Header and footer not live yet","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 line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide on phone":"Hide on phone","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 only":"Icon only","Icon position":"Icon position","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image 2":"Image 2","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",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","Label only":"Label only",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Large — 56px":"Large — 56px","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 and right":"Left and right","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Length:"Length",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line (trend)":"Line (trend)",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:"Live","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading versions":"Loading versions","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","Medium — 48px":"Medium — 48px",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","Mockup Card":"Mockup Card","Mockup card":"Mockup card","Mockup position":"Mockup position",Mono:"Mono","Month DD, YYYY":"Month DD, YYYY",More:"More",Motion:"Motion","Multi-column container for blocks.":"Multi-column container for blocks.",Muted:"Muted",Name:"Name","Name / alt":"Name / alt","Name this version":"Name this version","Named versions are always kept. Leave it empty to take the name away.":"Named versions are always kept. Leave it empty to take the name away.",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":"No match","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 place found. Try another postcode.":"No place found. Try another postcode.","No section anchors yet":"No section anchors yet","No style":"No style","No versions yet. Every Publish from now on keeps one.":"No versions yet. Every Publish from now on keeps one.","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 published":"Not published","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",Off:"Off",Office:"Office",Offices:"Offices","Offset tall":"Offset tall","On 1 page":"On 1 page","On a phone":"On a phone","On every blog post.":"On every blog post.","On every page":"On every page","On every page · old style":"On every page · old style","On other pages":"On other pages","On phones, content always fills the screen.":"On phones, content always fills the screen.","On picture":"On picture","On this page":"On this page","On {count} pages":"On {count} pages",One:"One","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",Option:"Option","Order Table":"Order Table","Order summary":"Order summary",Outline:"Outline",Outlined:"Outlined",Overlay:"Overlay","Overlay - CartDrawer":"Overlay - CartDrawer","Overlay - ConsentBanner":"Overlay - ConsentBanner","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",Paragraph:"Paragraph","Paragraph size — 13px":"Paragraph size — 13px","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:"Playback","Playback speed":"Playback speed","Plays well with\n*your favourite apps.*":`Plays well with
|
|
4
4
|
*your favourite apps.*`,"Pop up - SubscribePopup":"Pop up - SubscribePopup","Portal card (stock + button + orders)":"Portal card (stock + button + orders)",Position:"Position",Positions:"Positions","Post Card":"Post Card",Prefix:"Prefix",Preview:"Preview","Preview hover state":"Preview hover state","Preview the live site (opens in a new tab)":"Preview the live site (opens in a new tab)","Preview the live site in a new tab":"Preview the live site in a new tab","Preview your saved draft in a new tab":"Preview your saved draft in a new tab","Previous slide":"Previous slide",Price:"Price",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","Products, prices and forms always show as they are now.":"Products, prices and forms always show as they are now.","Promotions & sign-ups":"Promotions & sign-ups",Publish:"Publish",Published:"Published","Pull quote":"Pull quote","Put these drafts back":"Put these drafts back","Put this page on your site":"Put this page on your site","Put your changes on your site":"Put your changes on your site","Put your drafts back?":"Put your drafts back?","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","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",Restore:"Restore","Restore as draft":"Restore as draft","Restore one page only":"Restore one page only","Restore version {n}?":"Restore version {n}?","Restore whole website":"Restore whole website","Restore {page} from version {n}?":"Restore {page} from version {n}?","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:"Save","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","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.*
|
|
@@ -8,4 +8,4 @@ const e={"$ efficient …":"$ efficient …","0 min":"0 min","0 min read":"0 min
|
|
|
8
8
|
*the counter.*`,"Select a word, then press the highlighter.":"Select a word, then press the highlighter.","Selector guide (pills + results)":"Selector guide (pills + results)","Selector pills":"Selector pills",Separator:"Separator","Series title":"Series title",Serif:"Serif","Set this card's corners first.":"Set this card's corners first.","Shadow color":"Shadow color",Shape:"Shape","Share button":"Share button",Shared:"Shared","Shop & galleries":"Shop & galleries","Short description of this figure.":"Short description of this figure.","Short detail line":"Short detail line","Short supporting line":"Short supporting line",Show:"Show","Show arrows":"Show arrows","Show cover image":"Show cover image","Show hints":"Show hints","Show on a card":"Show on a card","Show on phones":"Show on phones","Show slide picker":"Show slide picker","Show texture":"Show texture","Show the chat bubble":"Show the chat bubble","Show the chat bubble on the whole site":"Show the chat bubble on the whole site","Show ticker":"Show ticker","Show {label} on the slide":"Show {label} on the slide","Shown beside the heading":"Shown beside the heading","Shows when a visitor points at the button":"Shows when a visitor points at the button","Side space":"Side space","Side-by-side image and text in two columns.":"Side-by-side image and text in two columns.",Sideways:"Sideways","Signup Form":"Signup Form",Simple:"Simple","Site button color":"Site button color","Site settings":"Site settings","Site styles":"Site styles","Six across":"Six across","Six stagger":"Six stagger",Size:"Size",Sizes:"Sizes","Slash /":"Slash /","Slide name":"Slide name","Slide picker":"Slide picker","Slide picker placement":"Slide picker placement","Slide picker shape":"Slide picker shape",Small:"Small","Small — 40px":"Small — 40px","Social Logos":"Social Logos","Social link settings belong to a website.":"Social link settings belong to a website.","Social links":"Social links",Soft:"Soft",Solid:"Solid","Somebody else":"Somebody else",Source:"Source","Space above and below":"Space above and below","Space between":"Space between",Spacer:"Spacer","Spec Strip":"Spec Strip","Spec Table":"Spec Table","Spec label":"Spec label","Spec tiles":"Spec tiles","Spec value":"Spec value","Spine (single rail)":"Spine (single rail)","Split (editorial aside)":"Split (editorial aside)",Square:"Square",Squares:"Squares",Stacked:"Stacked",Standard:"Standard",Start:"Start",Stat:"Stat","Stat & note":"Stat & note","Stat label":"Stat label","Stat name":"Stat name","Stat value":"Stat value",State:"State","State / Province":"State / Province",Statement:"Statement",Stats:"Stats","Stats & social proof":"Stats & social proof","Stats with Text":"Stats with Text","Status chip":"Status chip","Step *one*":"Step *one*","Step *three*":"Step *three*","Step *two*":"Step *two*","Stick to top":"Stick to top","Still time per slide":"Still time per slide","Storefront → Blog":"Storefront → Blog","Storefront ▸ Sites ▸ Settings":"Storefront ▸ Sites ▸ Settings","Story Timeline":"Story Timeline","Street address":"Street address",Stretch:"Stretch","Strip fill":"Strip fill","Strip items":"Strip items","Stripes · bold":"Stripes · bold","Stripes · fine":"Stripes · fine","Stripes · medium":"Stripes · medium",Style:"Style","Sub-title":"Sub-title","Sub-total lines":"Sub-total lines",Subtitle:"Subtitle","Subtitle font size":"Subtitle font size",Subtotal:"Subtotal","Success heading":"Success heading","Success message":"Success message",Superscript:"Superscript",Surfaces:"Surfaces","Switch now":"Switch now","Switch to Box footer":"Switch to Box footer","Synced from the blog post.":"Synced from the blog post.","Synced from the product.":"Synced from the product.","Synced from the site menu.":"Synced from the site menu.","Syncing from {place}…":"Syncing from {place}…",Tab:"Tab","Tab label":"Tab label","Tab name":"Tab name","Tabbed Gallery":"Tabbed Gallery",Tabs:"Tabs","Tall (3:4)":"Tall (3:4)","Tall first":"Tall first","Tall middle":"Tall middle","Team four":"Team four","Team one":"Team one","Team three":"Team three","Team two":"Team two",Telegram:"Telegram","Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.","Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.","Templates keep their look. Press Done.":"Templates keep their look. Press Done.",Terminal:"Terminal","Terminal (CLI session)":"Terminal (CLI session)","Terminal lines":"Terminal lines",Testimonials:"Testimonials",Text:"Text","Text & content":"Text & content","Text & media":"Text & media","Text color":"Text color","Text column":"Text column","Text height":"Text height","Text position":"Text position","Text size":"Text size","Text style":"Text style",Texts:"Texts",Texture:"Texture","Texture color":"Texture color","Texture opacity":"Texture opacity","Thanks — we'll email you to confirm.":"Thanks — we'll email you to confirm.","The chat bubble is hidden across the whole site.":"The chat bubble is hidden across the whole site.","The copy is a draft and stays hidden until you publish it. It opens in the editor.":"The copy is a draft and stays hidden until you publish it. It opens in the editor.","The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.":"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.","The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.":"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.","The floating chat bubble shows in the corner of every page.":"The floating chat bubble shows in the corner of every page.","The footer cannot take another one of these":"The footer cannot take another one of these","The footer holds at most 6 sections":"The footer holds at most 6 sections","The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.":"The header and footer could not load. They are hidden for now and nothing in them is saved. Reload to try again.","The header and footer did not save. They are sent again with your next change.":"The header and footer did not save. They are sent again with your next change.","The header and footer were changed somewhere else. Nothing you change in them here is saved. Reload to get the latest.":"The header and footer were changed somewhere else. Nothing you change in them here is saved. Reload to get the latest.","The header cannot take another one of these":"The header cannot take another one of these","The header holds at most 3 sections":"The header holds at most 3 sections","The name was not saved. Try again.":"The name was not saved. Try again.","The newest 30 are kept. Named versions are always kept.":"The newest 30 are kept. Named versions are always kept.","The preview did not open. Try again.":"The preview did not open. Try again.","The room left at the left and right edge of every page.":"The room left at the left and right edge of every page.","The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.":"The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.","The section it belonged to has been changed or removed.":"The section it belonged to has been changed or removed.","The version was not restored. Nothing changed. Try again.":"The version was not restored. Nothing changed. Try again.","The whole website goes back to version {n} as a draft.":"The whole website goes back to version {n} as a draft.","The whole website goes back to version {n} as a draft: {what}.":"The whole website goes back to version {n} as a draft: {what}.","The width of every section's background, until the section sets its own.":"The width of every section's background, until the section sets its own.","The width of every section's content, until the section sets its own.":"The width of every section's content, until the section sets its own.","The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.":"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.",Theme:"Theme","Theme Switch":"Theme Switch","Theme {n}":"Theme {n}","Theme {n} background":"Theme {n} background","Theme {n} main color":"Theme {n} main color","Theme {n} text color":"Theme {n} text color","They are saved in Version history as “Draft before restore”, so you can get them back.":"They are saved in Version history as “Draft before restore”, so you can get them back.",Thickness:"Thickness","Third item":"Third item","This cannot be undone.":"This cannot be undone.","This card is not in a section that can share corners.":"This card is not in a section that can share corners.","This color is hard to read on this theme's page. The buttons below are the same hue, darkened.":"This color is hard to read on this theme's page. The buttons below are the same hue, darkened.","This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.":"This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.","This color reads clearly on your pages.":"This color reads clearly on your pages.","This footer uses the old layout":"This footer uses the old layout","This is the only card in the section.":"This is the only card in the section.","This part is no longer here.":"This part is no longer here.","This part's settings did not open.":"This part's settings did not open.","This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.":"This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.","This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.","This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.","This ticker’s hero is no longer on the page.":"This ticker’s hero is no longer on the page.","Three across":"Three across","Three ladder":"Three ladder","Three stagger":"Three stagger",Ticker:"Ticker","Ticker items":"Ticker items",TikTok:"TikTok","Timeline entries":"Timeline entries","Timezone chip":"Timezone chip","Tint color":"Tint color","Tint opacity":"Tint opacity",Title:"Title","Today, {time}":"Today, {time}",Tone:"Tone",Top:"Top","Top and bottom":"Top and bottom","Top border":"Top border","Top center":"Top center","Top left":"Top left","Top right":"Top right","Top row":"Top row","Top space":"Top space",Total:"Total","Total amount":"Total amount","Total label":"Total label","Total line":"Total line","Track (year rail)":"Track (year rail)","Trailing note":"Trailing note","Triangle ▼":"Triangle ▼","Trusted by *teams worldwide*":"Trusted by *teams worldwide*","Try again":"Try again","Two across":"Two across","Two image galleries with tabs and filters.":"Two image galleries with tabs and filters.","Two tall":"Two tall",Type:"Type","Type a postcode or address":"Type a postcode or address","Typed here":"Typed here","Typed in":"Typed in","Tyre Fitment Form":"Tyre Fitment Form","Tyre Sizes":"Tyre Sizes","URL handle":"URL handle","URL pill":"URL pill","URL: /{slug}":"URL: /{slug}",Undo:"Undo","Undo did not work. Nothing changed. Try again.":"Undo did not work. Nothing changed. Try again.",Ungrouped:"Ungrouped",Unit:"Unit","Unit labels":"Unit labels",Up:"Up","Up and down":"Up and down",Upcoming:"Upcoming","Update style":"Update style","Update {style}?":"Update {style}?",Upload:"Upload","Upload a background image":"Upload a background image","Upload a poster still":"Upload a poster still","Uppercase heading":"Uppercase heading","Use {colour}":"Use {colour}",Value:"Value","Value suffix":"Value suffix","Version history":"Version history","Version history did not load.":"Version history did not load.","Version {n}":"Version {n}","Version {n} is now your draft":"Version {n} is now your draft",Versions:"Versions","Vertical breathing room between sections.":"Vertical breathing room between sections.",Video:"Video","Video file":"Video file","Video poster":"Video poster","View all":"View all","View all questions":"View all questions","View series →":"View series →",Volume:"Volume","Ways to pay":"Ways to pay",WeChat:"WeChat","What people *say.*":"What people *say.*",WhatsApp:"WhatsApp","Whether this page sits on the site's content column, or runs edge to edge.":"Whether this page sits on the site's content column, or runs edge to edge.","Whole number Theme Color":"Whole number Theme Color","Wide (2:1)":"Wide (2:1)","Wide promo strip with background image.":"Wide promo strip with background image.",Width:"Width","With us":"With us",Wording:"Wording",Wrap:"Wrap","Write the answer here.":"Write the answer here.","Write the opening paragraph here.\n\n- Start a line with a dash for a bullet.\n- Add as many as you like.":`Write the opening paragraph here.
|
|
9
9
|
|
|
10
10
|
- Start a line with a dash for a bullet.
|
|
11
|
-
- Add as many as you like.`,X:"X","X-Large":"X-Large",Year:"Year","Year →":"Year →",Years:"Years",YouTube:"YouTube","YouTube link":"YouTube link","Your *first* section.":"Your *first* section.","Your *second* section.":"Your *second* section.","Your drafts from before the restore are back":"Your drafts from before the restore are back","Your drafts go back to how they were before the restore.":"Your drafts go back to how they were before the restore.","Your fifth question goes here?":"Your fifth question goes here?","Your first question goes here?":"Your first question goes here?","Your fourth question goes here?":"Your fourth question goes here?","Your last changes did not save, so nothing was restored. Try again.":"Your last changes did not save, so nothing was restored. Try again.","Your live website does not change until you press Publish.":"Your live website does not change until you press Publish.","Your locations as a city gallery plus address and map cards.":"Your locations as a city gallery plus address and map cards.","Your review":"Your review","Your second question goes here?":"Your second question goes here?","Your third question goes here?":"Your third question goes here?","Your unpublished changes are kept":"Your unpublished changes are kept",Zigzag:"Zigzag",accent:"accent","all theme colors":"all theme colors","body text":"body text",button:"button",card:"card",city:"city",draft:"draft","e.g. About":"e.g. About","e.g. Americas":"e.g. Americas","e.g. about":"e.g. about","e.g. {example}":"e.g. {example}","each block's own spacing":"each block's own spacing",entries:"entries","from Site styles":"from Site styles",group:"group","https://youtu.be/…":"https://youtu.be/…",item:"item",label:"label",manifesto:"manifesto","not set":"not set","not shown live":"not shown live",part:"part",px:"px","the Text style in Site styles":"the Text style in Site styles","the admin":"the admin","the built-in corners":"the built-in corners","the page":"the page","the same as Desktop":"the same as Desktop","the section":"the section","the theme's image stage":"the theme's image stage","the theme's section background":"the theme's section background","this container's own spacing":"this container's own spacing","{day}, {time}":"{day}, {time}","{grade} on the button":"{grade} on the button","{label} hex code":"{label} hex code","{label} {n}":"{label} {n}","{label} — row {n}":"{label} — row {n}","{letter} · Step":"{letter} · Step","{name} (taken down)":"{name} (taken down)","{name} (unavailable)":"{name} (unavailable)","{name} is editing the header and footer. Nothing you change in them here is saved.":"{name} is editing the header and footer. Nothing you change in them here is saved.","{name} is on this section":"{name} is on this section","{name} — renamed in the Console: {place}.":"{name} — renamed in the Console: {place}.","{n} change":"{n} change","{n} changes":"{n} changes","{n} cities":"{n} cities","{n} city":"{n} city","{n} of {total} layouts":"{n} of {total} layouts","{n} page":"{n} page","{n} pages":"{n} pages","{n} picture in this version was deleted from the media library. It stays empty.":"{n} picture in this version was deleted from the media library. It stays empty.","{n} pictures in this version were deleted from the media library. They stay empty.":"{n} pictures in this version were deleted from the media library. They stay empty.","{page} from version {n} is now your draft":"{page} from version {n} is now your draft","{page} goes back to version {n} as a draft. Nothing else on your website changes.":"{page} goes back to version {n} as a draft. Nothing else on your website changes.","{value} from {from}":"{value} from {from}","{value} on desktop":"{value} on desktop","{what} settings belong to a website.":"{what} settings belong to a website.","— Articles in total":"— Articles in total","— Label":"— Label","— Name, Year":"— Name, Year"};export{e as WEB_BUILDER_WORDS};
|
|
11
|
+
- Add as many as you like.`,X:"X","X-Large":"X-Large",Year:"Year","Year →":"Year →",Years:"Years",YouTube:"YouTube","YouTube link":"YouTube link","Your *first* section.":"Your *first* section.","Your *second* section.":"Your *second* section.","Your drafts from before the restore are back":"Your drafts from before the restore are back","Your drafts go back to how they were before the restore.":"Your drafts go back to how they were before the restore.","Your fifth question goes here?":"Your fifth question goes here?","Your first question goes here?":"Your first question goes here?","Your fourth question goes here?":"Your fourth question goes here?","Your last changes did not save, so nothing was restored. Try again.":"Your last changes did not save, so nothing was restored. Try again.","Your live website does not change until you press Publish.":"Your live website does not change until you press Publish.","Your locations as a city gallery plus address and map cards.":"Your locations as a city gallery plus address and map cards.","Your review":"Your review","Your second question goes here?":"Your second question goes here?","Your third question goes here?":"Your third question goes here?","Your unpublished changes are kept":"Your unpublished changes are kept",Zigzag:"Zigzag",accent:"accent","all theme colors":"all theme colors","body text":"body text",button:"button",card:"card",city:"city",draft:"draft","e.g. About":"e.g. About","e.g. Americas":"e.g. Americas","e.g. about":"e.g. about","e.g. {example}":"e.g. {example}","each block's own spacing":"each block's own spacing",entries:"entries","from Site styles":"from Site styles",group:"group","https://youtu.be/…":"https://youtu.be/…",item:"item",label:"label",manifesto:"manifesto","not set":"not set","not shown live":"not shown live",part:"part",px:"px","the Text style in Site styles":"the Text style in Site styles","the admin":"the admin","the built-in corners":"the built-in corners","the page":"the page","the same as Desktop":"the same as Desktop","the section":"the section","the theme's image stage":"the theme's image stage","the theme's section background":"the theme's section background","this container's own spacing":"this container's own spacing","{day}, {time}":"{day}, {time}","{grade} on the button":"{grade} on the button","{label} hex code":"{label} hex code","{label} {n}":"{label} {n}","{label} — row {n}":"{label} — row {n}","{letter} · Step":"{letter} · Step","{name} (taken down)":"{name} (taken down)","{name} (unavailable)":"{name} (unavailable)","{name} is editing the header and footer. Nothing you change in them here is saved.":"{name} is editing the header and footer. Nothing you change in them here is saved.","{name} is editing {section}. Nothing you change in it here is saved.":"{name} is editing {section}. Nothing you change in it here is saved.","{name} is on this section":"{name} is on this section","{name} — renamed in the Console: {place}.":"{name} — renamed in the Console: {place}.","{n} change":"{n} change","{n} changes":"{n} changes","{n} cities":"{n} cities","{n} city":"{n} city","{n} of {total} layouts":"{n} of {total} layouts","{n} page":"{n} page","{n} pages":"{n} pages","{n} picture in this version was deleted from the media library. It stays empty.":"{n} picture in this version was deleted from the media library. It stays empty.","{n} pictures in this version were deleted from the media library. They stay empty.":"{n} pictures in this version were deleted from the media library. They stay empty.","{page} from version {n} is now your draft":"{page} from version {n} is now your draft","{page} goes back to version {n} as a draft. Nothing else on your website changes.":"{page} goes back to version {n} as a draft. Nothing else on your website changes.","{section} could not load. It stays on the page as it was. Reload to try again.":"{section} could not load. It stays on the page as it was. Reload to try again.","{section} did not save. It is sent again with your next change.":"{section} did not save. It is sent again with your next change.","{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.":"{section} was changed somewhere else. Nothing you change in it here is saved. Reload to get the latest.","{value} from {from}":"{value} from {from}","{value} on desktop":"{value} on desktop","{what} settings belong to a website.":"{what} settings belong to a website.","— Articles in total":"— Articles in total","— Label":"— Label","— Name, Year":"— Name, Year"};export{e as WEB_BUILDER_WORDS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BOX_LABEL as
|
|
1
|
+
import{BOX_LABEL as a,SECTION_CATALOG as p}from"./section-catalog.js";const o="content",C="Flex",n="Text & media",y="Layout & structure",i=[{type:"Eyebrow",label:"Eyebrow",retired:!0},{type:"Heading",label:"Heading",retired:!0},{type:"Text",label:"Text"},{type:"ImageBlock",label:"Image"},{type:"LogoBlock",label:"Logo"},{type:"ButtonBlock",label:"Button"},{type:"Form",label:"Form"},{type:"PostCard",label:"Post Card"},{type:"Stats",label:"Stats"},{type:"MenuBlock",label:"Menu"},{type:"EmailFormBlock",label:"Email Form"},{type:"SocialLogosBlock",label:"Social Logos"},{type:"LegalLineBlock",label:"Legal Line"},{type:"SearchBlock",label:"Search"},{type:"CartBlock",label:"Cart"},{type:"CountrySwitchBlock",label:"Country Switch"},{type:"AccountBlock",label:"Account"},{type:"ThemeSwitchBlock",label:"Theme Switch"}].map(e=>({...e,group:n})),s=(p.find(e=>e.key==="structure")?.sections??[]).map(e=>({type:e.type,label:e.label,group:y})),c=[...i,...s],l=[{type:"Eyebrow",label:"Eyebrow",retired:!0},{type:"Heading",label:"Heading",retired:!0},{type:"Text",label:"Text"},{type:"ImageBlock",label:"Image"},{type:"LogoBlock",label:"Logo"},{type:"ButtonBlock",label:"Button"},{type:"HeroGroup",label:a}],T=l.map(e=>e.type),b=1,u=l.filter(e=>e.type!=="HeroGroup");function E(e){return e<b?l:u}const B={Flex:{slot:o,choices:()=>c},Grid:{slot:o,choices:()=>c},HeroGroup:{slot:o,choices:E}};function _(e,r=0){const t=B[e];return t?{slot:t.slot,choices:t.choices(r)}:null}export{C as BOX_TYPE,o as CONTAINER_BLOCKS_SLOT,c as CONTAINER_BLOCK_CHOICES,T as HERO_GROUP_BLOCK_TYPES,b as HERO_GROUP_NEST_DEPTH,_ as containerBlocksFor};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=()=>({tag:"h2",_partStyles:{text:{textStyle:"heading-2"}}}),t=()=>({_partStyles:{text:{textStyle:"body-5",color:"accent",letterSpacing:.3,case:"upper",lineHeight:1.5}}});export{e as headingTextSeed,t as labelTextSeed};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BOX_TYPE as e}from"../puck/container-blocks.js";function t
|
|
1
|
+
import{BOX_TYPE as e}from"../puck/container-blocks.js";import{headingTextSeed as c,labelTextSeed as p}from"../puck/text-seeds.js";function i(t,n,o,m={}){return{type:t,props:{...n(t),id:o(t),...m}}}function g(t,n,o){return i(e,t,n,{...o,sectionPaddingTop:void 0,sectionPaddingBottom:void 0})}const r={Manifesto:(t,n)=>({type:e,props:{...t(e),id:n(e),direction:"row",share:"equal",sectionHeightMode:"screen",name:"Brand Text",content:[i(e,t,n,{direction:"column",justify:"center",blockSpacing:"gap",name:"Text",sectionPaddingTop:100,sectionPaddingBottom:100,sectionPaddingLeft:40,sectionPaddingRight:40,content:[i("Text",t,n,p()),i("Text",t,n,c()),i("Text",t,n),i("Stats",t,n)]}),g(t,n,{direction:"column",name:"Picture",content:[]})]}}),Split:(t,n)=>({type:e,props:{...t(e),id:n(e),direction:"row",share:"equal",sectionHeightMode:"screen",sectionHeightValue:70,name:"Image & Text Split",content:[i(e,t,n,{direction:"column",justify:"center",blockSpacing:"gap",name:"Text",sectionPaddingTop:100,sectionPaddingBottom:100,sectionPaddingLeft:60,sectionPaddingRight:60,content:[i("Text",t,n,p()),i("Text",t,n,c()),i("Text",t,n),i("ButtonBlock",t,n)]}),g(t,n,{direction:"column",name:"Image",content:[i("ImageBlock",t,n)]})]}}),Subscribe:(t,n)=>({type:e,props:{...t(e),id:n(e),direction:"column",name:"Subscribe",content:[i("Text",t,n,c()),i("Text",t,n),i("Form",t,n)]}})};function x(t){return r[t]??null}export{r as SECTION_PRESETS,x as presetFor};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const SHARED_SECTION_TYPE = "SharedSection";
|
|
2
|
+
type Node = {
|
|
3
|
+
type?: string;
|
|
4
|
+
props?: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
export type SectionLayout = Record<string, unknown>;
|
|
7
|
+
export type HeldSection = {
|
|
8
|
+
section: string;
|
|
9
|
+
refId: string;
|
|
10
|
+
reference?: Node;
|
|
11
|
+
};
|
|
12
|
+
export declare function sectionOf(node: Node | undefined): string | null;
|
|
13
|
+
export declare function references(layout: SectionLayout): {
|
|
14
|
+
refId: string;
|
|
15
|
+
section: string;
|
|
16
|
+
}[];
|
|
17
|
+
export declare function sectionNodeOf(doc: SectionLayout | null | undefined): Node | null;
|
|
18
|
+
export declare function referenceNode(refId: string, section: string): Node;
|
|
19
|
+
export declare function spliceShared(page: SectionLayout, docs: ReadonlyMap<string, SectionLayout>): {
|
|
20
|
+
working: SectionLayout;
|
|
21
|
+
held: Map<string, HeldSection>;
|
|
22
|
+
};
|
|
23
|
+
export declare function splitShared(working: SectionLayout, held: ReadonlyMap<string, HeldSection>, docs: ReadonlyMap<string, SectionLayout>): {
|
|
24
|
+
page: SectionLayout;
|
|
25
|
+
docs: Map<string, SectionLayout>;
|
|
26
|
+
};
|
|
27
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const l="SharedSection",S=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,u=e=>{const t=e?.content;return Array.isArray(t)?t:[]},p=e=>{const t=e?.props?.id;return typeof t=="string"?t:void 0};function h(e){if(e?.type!==l)return null;const t=e.props?.section;return typeof t=="string"&&S.test(t)?t.toLowerCase():null}function g(e){const t=[];for(const s of u(e)){const r=h(s),f=p(s);r&&f&&t.push({refId:f,section:r})}return t}function x(e){const t=u(e)[0];return t&&typeof t=="object"&&p(t)?t:null}function I(e,t){return{type:l,props:{id:e,section:t}}}function O(e,t){const s=new Map,r=new Set;let f=!1;const a=u(e).map(o=>{const i=h(o),n=p(o);if(!i||!n||r.has(i))return o;const c=x(t.get(i)),d=p(c??void 0);return!c||!d||s.has(d)?o:(r.add(i),s.set(d,{section:i,refId:n,reference:o}),f=!0,c)});return{working:f?{...e,content:a}:e,held:s}}function w(e,t,s){const r=new Map;let f=!1;const a=u(e).map(o=>{const i=p(o),n=i?t.get(i):void 0,c=n?s.get(n.section):void 0;if(!n||!c||r.has(n.section))return o;const d=u(c).slice(1),y=x(c);return r.set(n.section,y===o?c:{...c,content:[o,...d]}),f=!0,n.reference??I(n.refId,n.section)});return{page:f?{...e,content:a}:e,docs:r}}export{l as SHARED_SECTION_TYPE,I as referenceNode,g as references,x as sectionNodeOf,h as sectionOf,O as spliceShared,w as splitShared};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type SharedSectionRecord = {
|
|
2
|
+
id: string;
|
|
3
|
+
title: string;
|
|
4
|
+
layout: unknown;
|
|
5
|
+
layout_updated_at: string | null;
|
|
6
|
+
used_on: readonly {
|
|
7
|
+
id: string;
|
|
8
|
+
slug: string;
|
|
9
|
+
title: string;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
12
|
+
export interface SharedSectionsInPlace {
|
|
13
|
+
sectionOf(nodeId: string): string | null;
|
|
14
|
+
heldElsewhere(nodeId: string): boolean;
|
|
15
|
+
adopt(nodeId: string, section: SharedSectionRecord): void;
|
|
16
|
+
place(section: SharedSectionRecord): {
|
|
17
|
+
type: string;
|
|
18
|
+
props: {
|
|
19
|
+
id: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
};
|
|
22
|
+
} | null;
|
|
23
|
+
usedOn(section: string): readonly {
|
|
24
|
+
id: string;
|
|
25
|
+
slug: string;
|
|
26
|
+
title: string;
|
|
27
|
+
}[] | null;
|
|
28
|
+
learn(sections: readonly SharedSectionRecord[]): void;
|
|
29
|
+
}
|
|
30
|
+
export declare function setActiveSharedSections(api: SharedSectionsInPlace | null): void;
|
|
31
|
+
export declare function activeSharedSections(): SharedSectionsInPlace | null;
|
|
32
|
+
export type SharedEditor = {
|
|
33
|
+
openPage: (page: {
|
|
34
|
+
id: string;
|
|
35
|
+
slug: string;
|
|
36
|
+
title: string;
|
|
37
|
+
}) => void;
|
|
38
|
+
reload: () => void;
|
|
39
|
+
config: unknown;
|
|
40
|
+
};
|
|
41
|
+
export declare function setSharedEditor(next: SharedEditor | null): void;
|
|
42
|
+
export declare function sharedEditor(): SharedEditor | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=null;function n(t){e=t}function o(){return e}let r=null;function i(t){r=t}function c(){return r}export{o as activeSharedSections,n as setActiveSharedSections,i as setSharedEditor,c as sharedEditor};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as t}from"react/jsx-runtime";import p from"./BlockFrame.js";import{renderGold as n,renderHeadline as b,splitParagraphs as u}from"./goldPhrases.js";import{headingLook as N}from"./Heading.js";import{textTagOf as T}from"../../format/lib/content/text-tag.js";import{isTextStyleId as v}from"../lib/puck/part-styles.js";import{faceClassOf as x}from"../../format/lib/text-style-face.js";const s={bodyUpTo800:"max-[800px]:text-[length:var(--size-body,14px)]",bodySmall:"text-[length:var(--size-body,15px)]",bodyLarge:"text-[length:var(--size-body,17px)]",label:"text-[length:var(--size-label,13px)]"},$={left:"text-left",center:"text-center mx-auto",right:"text-right ml-auto"},S=`max-w-[380px] ${s.bodySmall} leading-[1.5] opacity-80 ${s.bodyUpTo800}`,L={default:"text-fg",dim:"text-fg-dim"};function z({text:a,align:d,tone:h,contained:m,hero:g=!1,pad:l,tag:y,textStyle:c}){if(g)return t("p",{className:S,children:n(a)});const e=v(c)?c:void 0,f=`${e?`${x({id:e})} `:""}max-w-[680px] whitespace-pre-line ${e==="body-5"?s.label:s.bodyLarge} leading-[1.7] ${$[d]} ${L[h]}`,o=T(y);if(e?.startsWith("heading-")){const i=String(Math.min(Number(e.slice(8)),6)),r=N(i,d,x({id:e}));return t(p,{contained:m,className:"py-
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import p from"./BlockFrame.js";import{renderGold as n,renderHeadline as b,splitParagraphs as u}from"./goldPhrases.js";import{headingLook as N}from"./Heading.js";import{textTagOf as T}from"../../format/lib/content/text-tag.js";import{isTextStyleId as v}from"../lib/puck/part-styles.js";import{faceClassOf as x}from"../../format/lib/text-style-face.js";const s={bodyUpTo800:"max-[800px]:text-[length:var(--size-body,14px)]",bodySmall:"text-[length:var(--size-body,15px)]",bodyLarge:"text-[length:var(--size-body,17px)]",label:"text-[length:var(--size-label,13px)]"},$={left:"text-left",center:"text-center mx-auto",right:"text-right ml-auto"},S=`max-w-[380px] ${s.bodySmall} leading-[1.5] opacity-80 ${s.bodyUpTo800}`,L={default:"text-fg",dim:"text-fg-dim"};function z({text:a,align:d,tone:h,contained:m,hero:g=!1,pad:l,tag:y,textStyle:c}){if(g)return t("p",{className:S,children:n(a)});const e=v(c)?c:void 0,f=`${e?`${x({id:e})} `:""}max-w-[680px] whitespace-pre-line ${e==="body-5"?s.label:s.bodyLarge} leading-[1.7] ${$[d]} ${L[h]}`,o=T(y);if(e?.startsWith("heading-")){const i=String(Math.min(Number(e.slice(8)),6)),r=N(i,d,x({id:e}));return t(p,{contained:m,className:"py-6",pad:l?{values:l,frame:24}:void 0,children:t(o,{className:r.className,style:r.style,children:b(a.trim(),!1)})})}return t(p,{contained:m,className:"py-4",pad:l?{values:l,frame:16}:void 0,children:o==="p"?u(a).map((i,r)=>t("p",{className:f,children:n(i)},r)):t(o,{className:f,children:n(a.trim())})})}export{z as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Fragment as
|
|
1
|
+
import{Fragment as f,jsx as a}from"react/jsx-runtime";import{padValuesOf as p}from"../../../../../../format/lib/content/section-padding.js";import g from"../../../../../components/Text.js";import{hidableText as s,readHidable as c}from"efficient-easel/draw";import{PH as o}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{phPrev as h}from"../../scaffold.js";import{readPartStyle as u}from"../../../part-styles.js";const H={label:"Text",defaultProps:{text:"",align:"left",tone:"default",tag:"p",contained:!0},render:t=>{const{text:e,align:n,tone:i,tag:d,contained:l,puck:m}=t;if(c(e).hidden)return a(f,{});const r=u(t,"text").textStyle,x=r?.startsWith("heading-")?o.heading:o.body;return a(g,{text:h(s(e),x,m)??"",align:n,tone:i,tag:d,textStyle:r,contained:l,pad:p(t)})}};export{H as TextRender};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{HERO_SLIDE_SEEDS as a}from"../../components/HeroSlide.js";import{heroGroupAddBlocked as l,heroGroupOverCapNotice as c}from"../../../format/lib/hero-group-placement.js";import{newNodeId as p}from"efficient-easel/draw";import{BOX_TYPE as t,CONTAINER_BLOCKS_SLOT as n}from"../../../format/lib/puck/container-blocks.js";import{BOX_LABEL as i}from"../../../format/lib/puck/section-catalog.js";const
|
|
1
|
+
import{HERO_SLIDE_SEEDS as a}from"../../components/HeroSlide.js";import{heroGroupAddBlocked as l,heroGroupOverCapNotice as c}from"../../../format/lib/hero-group-placement.js";import{newNodeId as p}from"efficient-easel/draw";import{BOX_TYPE as t,CONTAINER_BLOCKS_SLOT as n}from"../../../format/lib/puck/container-blocks.js";import{BOX_LABEL as i}from"../../../format/lib/puck/section-catalog.js";import{headingTextSeed as m}from"../../../format/lib/puck/text-seeds.js";const T="ImageBlock",E=3,d=(e,r,o={})=>({type:e,props:{...r?.(e)??{},id:p(e),...o}}),h=e=>({...e?.(t)??{},direction:"column",[n]:[d(T,e),d(t,e,{direction:"column",[n]:[d("Text",e,m()),d("Text",e)]})]}),s={Hero:{slot:"slides",childType:"HeroSlide",addLabel:"Add slide",slider:!0,seeds:()=>a.map(e=>({...e}))},HeroSlide:{slot:"groups",childType:"HeroGroup",addLabel:`Add ${i.toLowerCase()}`,seeds:()=>[],addBlocked:l,notice:c},HeroSingle:{slot:"boxes",childType:"HeroGroup",addLabel:`Add ${i.toLowerCase()}`,seeds:()=>[],addBlocked:l,notice:c},ProcessSteps:{slot:"boxes",childType:t,addLabel:`Add ${i.toLowerCase()}`,seeds:e=>Array.from({length:E},()=>h(e)),skipSeed:e=>Array.isArray(e.steps)&&e.steps.length>0}};function b(e){for(const[r,o]of Object.entries(e)){if(r in s&&s[r]!==o)throw new Error(`lib/puck/slot-specs: "${r}" already has a slot spec`);s[r]=o}}function y(e,r){const o=s[e];return o?{slot:o.slot,children:o.seeds(r).map(S=>({type:o.childType,props:{id:p(o.childType),...S}}))}:null}export{s as SLOT_SECTION_SPECS,y as buildSlotSeedChildren,b as registerSlotSectionSpecs};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-web-builder",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "37.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",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"@tabler/icons-react": "^3.46.0",
|
|
56
|
-
"efficient-easel": "^
|
|
57
|
-
"efficient-shell": "^8.
|
|
56
|
+
"efficient-easel": "^18.1.0",
|
|
57
|
+
"efficient-shell": "^8.20.0",
|
|
58
58
|
"isomorphic-dompurify": "^3.18.0",
|
|
59
59
|
"next": ">=16",
|
|
60
60
|
"react": ">=19",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"@types/node": "^20",
|
|
73
73
|
"@types/react": "^19",
|
|
74
74
|
"@types/react-dom": "^19",
|
|
75
|
-
"efficient-easel": "^
|
|
76
|
-
"efficient-shell": "^8.
|
|
75
|
+
"efficient-easel": "^18.1.0",
|
|
76
|
+
"efficient-shell": "^8.20.0",
|
|
77
77
|
"esbuild": "^0.28.0",
|
|
78
78
|
"happy-dom": "^20.14.5",
|
|
79
79
|
"isomorphic-dompurify": "^3.18.0",
|