efficient-web-builder 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +169 -0
  2. package/README.md +42 -0
  3. package/dist/components/ApplyCornersToSiblings.js +1 -1
  4. package/dist/components/Banner.js +1 -1
  5. package/dist/components/BlockGapField.js +1 -1
  6. package/dist/components/BlogPostSource.js +1 -1
  7. package/dist/components/Breadcrumb.js +1 -1
  8. package/dist/components/CardShadowField.js +1 -1
  9. package/dist/components/CategoryBar.js +1 -1
  10. package/dist/components/ChatSettingsPanel.js +1 -1
  11. package/dist/components/ClearColoursDialog.js +1 -1
  12. package/dist/components/CornersField.js +1 -1
  13. package/dist/components/DocBody.js +5 -5
  14. package/dist/components/DuplicateToPageMenu.js +1 -1
  15. package/dist/components/FAQ.js +1 -1
  16. package/dist/components/Flex.js +1 -1
  17. package/dist/components/Footprint.js +3 -3
  18. package/dist/components/HeadingAudit.js +1 -1
  19. package/dist/components/HeroImageField.js +1 -1
  20. package/dist/components/HeroSection.js +2 -2
  21. package/dist/components/HeroSingle.js +1 -1
  22. package/dist/components/HeroSlide.js +1 -1
  23. package/dist/components/HoverEffectField.js +1 -1
  24. package/dist/components/ImageFocusRow.js +1 -1
  25. package/dist/components/IntegrationsSection.js +1 -1
  26. package/dist/components/IntroBleed.js +1 -1
  27. package/dist/components/KeyFeatures.js +1 -1
  28. package/dist/components/LocationsGroupedField.js +1 -1
  29. package/dist/components/MediaUploadField.js +1 -1
  30. package/dist/components/MultiSelectField.js +1 -1
  31. package/dist/components/PagesPanel.js +1 -1
  32. package/dist/components/PartInkControl.js +1 -1
  33. package/dist/components/PartResetDot.js +1 -1
  34. package/dist/components/PartSettingsPanel.js +1 -1
  35. package/dist/components/PartTextBox.js +1 -1
  36. package/dist/components/PhotographyField.js +1 -1
  37. package/dist/components/ProcessSteps.js +1 -1
  38. package/dist/components/SearchSelectField.d.ts +1 -1
  39. package/dist/components/SearchSelectField.js +1 -1
  40. package/dist/components/SectionEditor.js +1 -1
  41. package/dist/components/SectionTextEntries.js +1 -1
  42. package/dist/components/SectionThemePicker.js +1 -1
  43. package/dist/components/Series.js +1 -1
  44. package/dist/components/ShadowColourField.js +1 -1
  45. package/dist/components/SideSpaceField.js +1 -1
  46. package/dist/components/SiteFields.js +1 -1
  47. package/dist/components/SiteWidthField.js +1 -1
  48. package/dist/components/SlotChildRows.js +1 -1
  49. package/dist/components/SocialLinksPanel.js +1 -1
  50. package/dist/components/SourceStatus.js +1 -1
  51. package/dist/components/SpecStrip.js +1 -1
  52. package/dist/components/Split.js +1 -1
  53. package/dist/components/StandaloneSectionEditor.js +1 -1
  54. package/dist/components/StatsParagraph.js +1 -1
  55. package/dist/components/StorefrontLinkField.js +1 -1
  56. package/dist/components/StylesPanel.js +1 -1
  57. package/dist/components/SwitchToBoxFooter.js +1 -1
  58. package/dist/components/Testimonials.js +1 -1
  59. package/dist/components/TextStyleRow.js +1 -1
  60. package/dist/components/TextStylesField.js +1 -1
  61. package/dist/components/ThemeCard.js +1 -1
  62. package/dist/components/ThemeColourField.js +1 -1
  63. package/dist/components/ThemeField.js +1 -1
  64. package/dist/components/TickerSection.js +1 -1
  65. package/dist/components/TickerSettingsPanel.js +1 -1
  66. package/dist/components/TitleWithButtons.js +1 -1
  67. package/dist/components/WebsiteScreenParts.js +1 -1
  68. package/dist/components/WebsiteSettingsPanel.js +1 -1
  69. package/dist/components/WidthFollowField.js +1 -1
  70. package/dist/components/preview-devices.js +1 -1
  71. package/dist/components/storefront-editor.css +43 -37
  72. package/dist/components/useLocationsTree.js +1 -1
  73. package/dist/lib/content/ink.d.ts +36 -0
  74. package/dist/lib/content/ink.js +1 -0
  75. package/dist/lib/content/section-surface.js +1 -1
  76. package/dist/lib/editor-words-catalogue.d.ts +1184 -0
  77. package/dist/lib/editor-words-catalogue.js +11 -0
  78. package/dist/lib/editor-words.d.ts +15 -0
  79. package/dist/lib/editor-words.js +1 -0
  80. package/dist/lib/links/link-picker-setup.js +1 -1
  81. package/dist/lib/puck/ColourControl.js +1 -1
  82. package/dist/lib/puck/MarkupToolbar.js +1 -1
  83. package/dist/lib/puck/apply-card-corners.js +1 -1
  84. package/dist/lib/puck/blocks/general/Breadcrumb/render.js +1 -1
  85. package/dist/lib/puck/blocks/general/Cards/render.js +1 -1
  86. package/dist/lib/puck/blocks/general/CategoryBar/render.js +1 -1
  87. package/dist/lib/puck/blocks/general/Chart/render.js +2 -2
  88. package/dist/lib/puck/blocks/general/DocBody/render.js +1 -1
  89. package/dist/lib/puck/blocks/general/DocMasthead/render.js +1 -1
  90. package/dist/lib/puck/blocks/general/DocTabs/render.js +1 -1
  91. package/dist/lib/puck/blocks/general/FAQ/render.js +1 -1
  92. package/dist/lib/puck/blocks/general/Footprint/render.js +2 -2
  93. package/dist/lib/puck/blocks/general/KeyFeatures/render.js +1 -1
  94. package/dist/lib/puck/blocks/general/Logos/render.js +1 -1
  95. package/dist/lib/puck/blocks/general/Masthead/render.js +1 -1
  96. package/dist/lib/puck/blocks/general/OrderSummary/render.js +1 -1
  97. package/dist/lib/puck/blocks/general/PaymentBadges/render.js +1 -1
  98. package/dist/lib/puck/blocks/general/ProcessSteps/render.js +1 -1
  99. package/dist/lib/puck/blocks/general/Series/render.js +1 -1
  100. package/dist/lib/puck/blocks/general/StatsParagraph/render.js +1 -1
  101. package/dist/lib/puck/blocks/general/Testimonials/render.js +1 -1
  102. package/dist/lib/puck/blocks/general/Timeline/render.js +2 -2
  103. package/dist/lib/puck/blocks/general/TimelineTrack/render.js +1 -1
  104. package/dist/lib/puck/blocks/scaffold.js +1 -1
  105. package/dist/lib/puck/controls.js +1 -1
  106. package/dist/lib/puck/footer-block-row-name.js +1 -1
  107. package/dist/lib/puck/page-root-fields.js +1 -1
  108. package/dist/lib/puck/theme-swatches.js +1 -1
  109. package/dist/lib/source-rules/editor-words.d.ts +26 -0
  110. package/dist/lib/source-rules/editor-words.js +3 -0
  111. package/dist/lib/source-rules/mirrored-rows-agree.js +1 -1
  112. package/dist/lib/source-rules/part-style-naming.js +1 -1
  113. package/dist/lib/source-rules/support/label-extraction.js +2 -2
  114. package/dist/lib/theme-save-message.js +1 -1
  115. package/package.json +6 -5
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as b}from"react/jsx-runtime";import{useCallback as k,useEffect as f,useState as Y}from"react";import{ExternalIcon as F}from"efficient-easel/icons";import{Button as G,Tooltip as O,buttonClasses as j}from"efficient-shell/ui";import{SettingsSwitch as z}from"efficient-easel/panel";import{PagesIcon as K,StylesIcon as U}from"efficient-easel/rail";import{TreeRow as Z}from"efficient-easel/tree";import q from"./HeadingAudit.js";import{LocationsTreeContext as X}from"./LocationsTreeContext.js";import J from"./PagesPanel.js";import{usePreviewChat as Q}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as $}from"./preview-devices.js";import{PreviewDeviceContext as ee}from"./PreviewDeviceContext.js";import{usePreviewHeader as te}from"./PreviewHeaderContext.js";import{usePreviewSocial as oe}from"./PreviewSocialContext.js";import{usePreviewSurface as re}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as ie,usePreviewTicker as se}from"./PreviewTickerContext.js";import ne,{CHAT_MODE as ae,HEADER_MODE as y,SOCIAL_MODE as ce,WEBSITE_MODE as B}from"./SectionEditor.js";import g from"./SectionIcon.js";import le from"./SectionThumbnail.js";import{useStorefrontDocument as I}from"./StorefrontDocumentContext.js";import de from"./StylesPanel.js";import pe from"./TemplateGlyph.js";import{useFooterFocus as me}from"./useFooterFocus.js";import{LOCATIONS_TYPE as fe,useLocationsTree as ue}from"./useLocationsTree.js";import{usePinnedChromeSeed as Se}from"./usePinnedChromeSeed.js";import{usePreviewHref as Ee}from"./usePreviewHref.js";import{SITE_STYLES_TABS as Te,SITE_STYLES_TEXT_TAB as he,useWebsiteName as we}from"./WebsiteSettingsPanel.js";import{HERO_GROUP_TYPE as Pe,duplicateBlocked as ve,heroGroupNestDepth as be}from"../lib/hero-group-placement.js";import{stripMarkup as ke}from"../lib/markup.js";import{categoryShortLabel as ge,PINNED_SECTION_TYPE as Ie}from"../lib/puck/add-palette.js";import{canAddTo as Ce}from"../lib/puck/add-target.js";import{blockIsOffered as _e}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Le,setBookingPreview as Oe}from"../lib/puck/booking-preview.js";import{footerBlockRowName as ye}from"../lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Be,HEADER_TYPE as A}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as Ae,readLeftView as Ne,resolveLeftView as Re,writeLeftView as He}from"../lib/puck/left-view.js";import{isLockedBlock as De}from"../lib/puck/locked-blocks.js";import{scrollPreviewToSection as xe,scrollPreviewToTop as N}from"../lib/puck/preview-dom.js";import{SiteCanvas as Ve}from"../lib/puck/overrides.js";import{labelAtLevel as We}from"../lib/puck/section-catalog.js";import{SECTION_DESCRIPTIONS as Me}from"../lib/puck/section-descriptions.js";import{isSectionGroupType as Ye,sectionGroupZone as Fe,SITE_FOOTER_TYPE as Ge,SITE_HEADER_TYPE as je}from"../lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as ze,SAVE_AS_TEMPLATE_EVENT as Ke}from"../lib/save-as-template-action.js";import{newSectionNode as Ue}from"../lib/sections/new-section-node.js";import{useHostProducts as Ze}from"../lib/use-host-products.js";function R({mode:t,open:o}){const{setSelectedHeroId:r,setSelectHandler:c}=se(),l=t,n=l.kind==="ticker"?l.heroId:null,a=k(i=>{if(!i)return;o({kind:"ticker",heroId:i}),xe(i)},[o]);return f(()=>{r(n)},[n,r]),f(()=>{c(a)},[c,a]),{partRows:(i,{rowClick:m})=>{const s=String(i.props.id);return i.type==="Hero"&&e(Z,{icon:e(g,{type:"ticker",size:13}),name:ie,onSelect:()=>a(s),selected:n===s,rowProps:{onClick:m(()=>a(s))}})}}}function qe(){const{adapter:t,capabilities:o,currentSlug:r,siteId:c,hasUnsavedEdits:l,bridgeCapabilities:n,notifyParent:a,token:i}=I(),{hasPreviewLink:m}=o,s=ze({hasTrustedConsole:!!i,canCreatePlatformTemplate:n.canCreatePlatformTemplate,capabilities:o,siteId:c,hasUnsavedEdits:l}),T=k(()=>{!c||!r||a(Ke,{siteId:c,slug:r})},[a,c,r]),u=Ee({pageSlug:r,siteId:c,token:i}),S=t.previewHref?.(r)??u;return{barLead:()=>s.visible&&e(O,{side:"bottom",content:s.enabled?"Save this website as a platform template":s.disabledReason,children:e("span",{className:"sf-tip-disabled",tabIndex:s.enabled?void 0:0,children:e(G,{variant:"secondary",disabled:!s.enabled,onClick:T,rightIcon:e(pe,{}),children:"Save as Template"})})}),barTrail:()=>m&&r&&e(O,{content:"Preview the live site (opens in a new tab)",children:b("a",{className:j({variant:"secondary"}),href:S,target:"_blank",rel:"noopener noreferrer","aria-label":"Preview the live site in a new tab",children:["Preview",e(F,{size:15})]})})}}function Xe(){return b("svg",{width:"17",height:"17",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round",children:[e("path",{d:"M12 3a9 9 0 0 0 0 18 2.3 2.3 0 0 0 2.3-2.3c0-.55-.22-1.05-.57-1.42-.34-.37-.56-.87-.56-1.43A2.35 2.35 0 0 1 15.6 13.5H18a3 3 0 0 0 3-3c0-4.14-4-7.5-9-7.5z"}),e("circle",{cx:"7.7",cy:"11.3",r:"1.05",fill:"currentColor",stroke:"none"}),e("circle",{cx:"12",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),e("circle",{cx:"16",cy:"11",r:"1.05",fill:"currentColor",stroke:"none"})]})}function Je(t,o){const{capabilities:r,templateId:c,siteId:l,tokenRef:n,navigate:a}=I(),{hasSiteTheme:i,explainsSiteSettings:m}=r,s=d=>o.setView(d),[T,u]=Y(Te[0].id),{surface:S,setSurface:w}=re(),P=()=>{if(i){s("styles"),o.reveal(),N();return}t.show(B),t.reveal(),N()},v={id:"pages",label:"Pages",icon:e(K,{}),panel:({onHide:d})=>e(J,{activeSurface:S,onPreviewSurface:w,onNavigate:p=>{w(null),a(c?{kind:"template",id:c,pageSlug:p}:{kind:"page",slug:p,siteId:l??void 0})},onClose:d})},E=[];return!i&&m&&E.push({id:"appearance",label:"Appearance",icon:e(Xe,{}),active:t.kind==="website",onSelect:P}),i&&E.push({id:"styles",label:"Site styles",icon:e(U,{}),panel:({onHide:d,notify:p})=>e(de,{tokenRef:n,siteId:l??void 0,onClose:d,onNotify:p,tab:T,onTabChange:u})}),{railLead:[v],railTrail:E,resolveLeftView:(d,p)=>Re(d,i,p),openSettings:P,openStyles:()=>{u(he),s("styles")}}}function Qe(t,o,r,c){const{kind:l,open:n}=t,{selected:a,zoneOf:i}=o,m=me(o,r);f(()=>{Oe(a?.type==="BookingBox"&&a.props.region==="confirm"?Le(i(String(a.props.id))):null)},[a?.props.id]);const s=ue(t,o),{capabilities:{hasSiteSettings:T}}=I(),{setSelected:u,setSelectHandler:S}=te(),{chat:w,setChat:P,setSelected:v,setSelectHandler:E}=Q(),d=l==="header";f(()=>{u(d)},[d,u]),f(()=>{S(()=>n(y))},[S,n]);const p=k(()=>n(ae),[n]),C=l==="chat";f(()=>{v(C)},[C,v]),f(()=>{E(p)},[E,p]);const{setOpenHandler:_}=oe(),L=k(()=>n(ce),[n]);f(()=>{_(L)},[_,L]);const D=R(t),x=qe(),V=Je(t,c),W=r.device;return{...m,...D,...x,...V,treeFoot:()=>e("div",{className:"sf-tree-tool",children:e(q,{})}),hasOwnRows:h=>h.type===fe,ownRows:s.renderLocationTree,sectionPressed:s.sectionPressed,wrap:h=>e(X.Provider,{value:!0,children:e(ee.Provider,{value:W,children:h})}),addPanelRow:h=>T?b("div",{className:"sf-addside-sitewide",children:[e("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:e(g,{type:"chat",size:16})}),b("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{h(),p()},children:["Live chat",e("span",{className:"sf-addside-sitewide-desc",children:"A chat bubble on every page"})]}),e(z,{checked:w.enabled,onChange:M=>P({enabled:M}),ariaLabel:"Show the chat bubble on the whole site"})]}):void 0}}const $e={isLockedBlock:De,duplicateBlocked:ve,nestDepth:(t,o,r)=>o===Pe?be(t,r):0,newSectionNode:Ue,canAddTo:Ce,blockIsOffered:_e},et={labelAtLevel:We,descriptions:Me,categoryLabel:ge,firstSection:Ie,blockRowName:ye,plainText:ke,Icon:g,Thumbnail:le,useProducts:Ze},tt={desktop:2e3,tablet:800,mobile:390},H="desktop",ot={options:$,initial:H,fluid:H,widths:tt},rt={read:Ne,write:t=>He(t),forSelection:(t,o)=>Ae(t,o)},it={first:A,last:Be,firstGroup:je,lastGroup:Ge,isSectionGroup:Ye,sectionGroupZone:Fe,panelOf:t=>t===A?y:null};function st(t){return{...R(t),openSettings:()=>t.show(B)}}const Qt={useOwnerName:we,useBridges:Qe,useStandaloneBridges:st,useDocumentPass:Se,blockRules:$e,blockLook:et,devices:ot,leftView:rt,pinned:it,Canvas:Ve,Inspector:ne};export{Qt as WEBSITE_SCREEN};
1
+ "use client";import{jsx as r,jsxs as k}from"react/jsx-runtime";import{useCallback as I,useEffect as S,useState as j}from"react";import{ExternalIcon as z}from"efficient-easel/icons";import{Button as K,Tooltip as A,buttonClasses as U}from"efficient-shell/ui";import{SettingsSwitch as Z}from"efficient-easel/panel";import{PagesIcon as q,StylesIcon as X}from"efficient-easel/rail";import{TreeRow as J}from"efficient-easel/tree";import{useEaselStrings as Q}from"efficient-easel/strings";import $ from"./HeadingAudit.js";import{LocationsTreeContext as ee}from"./LocationsTreeContext.js";import te from"./PagesPanel.js";import{usePreviewChat as oe}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as re}from"./preview-devices.js";import{PreviewDeviceContext as ie}from"./PreviewDeviceContext.js";import{usePreviewHeader as se}from"./PreviewHeaderContext.js";import{usePreviewSocial as ne}from"./PreviewSocialContext.js";import{usePreviewSurface as ae}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as ce,usePreviewTicker as le}from"./PreviewTickerContext.js";import de,{CHAT_MODE as pe,HEADER_MODE as B,SOCIAL_MODE as me,WEBSITE_MODE as N}from"./SectionEditor.js";import C from"./SectionIcon.js";import fe from"./SectionThumbnail.js";import{useStorefrontDocument as g}from"./StorefrontDocumentContext.js";import ue from"./StylesPanel.js";import Se from"./TemplateGlyph.js";import{useFooterFocus as Te}from"./useFooterFocus.js";import{LOCATIONS_TYPE as Ee,useLocationsTree as he}from"./useLocationsTree.js";import{usePinnedChromeSeed as we}from"./usePinnedChromeSeed.js";import{usePreviewHref as be}from"./usePreviewHref.js";import{SITE_STYLES_TABS as Pe,SITE_STYLES_TEXT_TAB as ve,useWebsiteName as ke}from"./WebsiteSettingsPanel.js";import{HERO_GROUP_TYPE as Ie,duplicateBlocked as Ce,heroGroupNestDepth as ge}from"../lib/hero-group-placement.js";import{stripMarkup as _e}from"../lib/markup.js";import{categoryShortLabel as Le,PINNED_SECTION_TYPE as ye}from"../lib/puck/add-palette.js";import{canAddTo as Oe}from"../lib/puck/add-target.js";import{blockIsOffered as Ae}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as Be,setBookingPreview as Ne}from"../lib/puck/booking-preview.js";import{footerBlockRowName as Re}from"../lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as He,HEADER_TYPE as R}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as De,readLeftView as We,resolveLeftView as xe,writeLeftView as Ve}from"../lib/puck/left-view.js";import{isLockedBlock as Me}from"../lib/puck/locked-blocks.js";import{scrollPreviewToSection as Fe,scrollPreviewToTop as H}from"../lib/puck/preview-dom.js";import{SiteCanvas as Ye}from"../lib/puck/overrides.js";import{labelAtLevel as Ge}from"../lib/puck/section-catalog.js";import{editorWords as je,say as i}from"../lib/editor-words.js";import{SECTION_DESCRIPTIONS as ze}from"../lib/puck/section-descriptions.js";import{isSectionGroupType as Ke,sectionGroupZone as Ue,SITE_FOOTER_TYPE as Ze,SITE_HEADER_TYPE as qe}from"../lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Xe,SAVE_AS_TEMPLATE_EVENT as Je}from"../lib/save-as-template-action.js";import{newSectionNode as Qe}from"../lib/sections/new-section-node.js";import{useHostProducts as $e}from"../lib/use-host-products.js";function D({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:s}=le(),f=Q().tree,c=e,l=c.kind==="ticker"?c.heroId:null,n=I(d=>{if(!d)return;t({kind:"ticker",heroId:d}),Fe(d)},[t]);return S(()=>{o(l)},[l,o]),S(()=>{s(n)},[s,n]),{partRows:(d,{rowClick:a})=>{const u=String(d.props.id);return d.type==="Hero"&&r(J,{icon:r(C,{type:"ticker",size:13}),name:i(ce),onSelect:()=>n(u),selected:l===u,rowProps:{onClick:a(()=>n(u))},words:f})}}}function et(){const{adapter:e,capabilities:t,currentSlug:o,siteId:s,hasUnsavedEdits:f,bridgeCapabilities:c,notifyParent:l,token:n}=g(),{hasPreviewLink:d}=t,a=Xe({hasTrustedConsole:!!n,canCreatePlatformTemplate:c.canCreatePlatformTemplate,capabilities:t,siteId:s,hasUnsavedEdits:f}),u=I(()=>{!s||!o||l(Je,{siteId:s,slug:o})},[l,s,o]),T=be({pageSlug:o,siteId:s,token:n}),E=e.previewHref?.(o)??T;return{barLead:()=>a.visible&&r(A,{side:"bottom",content:a.enabled?i("Save this website as a platform template"):i(a.disabledReason),children:r("span",{className:"sf-tip-disabled",tabIndex:a.enabled?void 0:0,children:r(K,{variant:"secondary",disabled:!a.enabled,onClick:u,rightIcon:r(Se,{}),children:i("Save as Template")})})}),barTrail:()=>d&&o&&r(A,{content:i("Preview the live site (opens in a new tab)"),children:k("a",{className:U({variant:"secondary"}),href:E,target:"_blank",rel:"noopener noreferrer","aria-label":i("Preview the live site in a new tab"),children:[i("Preview"),r(z,{size:15})]})})}}function tt(){return k("svg",{width:"17",height:"17",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round",children:[r("path",{d:"M12 3a9 9 0 0 0 0 18 2.3 2.3 0 0 0 2.3-2.3c0-.55-.22-1.05-.57-1.42-.34-.37-.56-.87-.56-1.43A2.35 2.35 0 0 1 15.6 13.5H18a3 3 0 0 0 3-3c0-4.14-4-7.5-9-7.5z"}),r("circle",{cx:"7.7",cy:"11.3",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"12",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),r("circle",{cx:"16",cy:"11",r:"1.05",fill:"currentColor",stroke:"none"})]})}function ot(e,t){const{capabilities:o,templateId:s,siteId:f,tokenRef:c,navigate:l}=g(),{hasSiteTheme:n,explainsSiteSettings:d}=o,a=p=>t.setView(p),[u,T]=j(Pe[0].id),{surface:E,setSurface:b}=ae(),P=()=>{if(n){a("styles"),t.reveal(),H();return}e.show(N),e.reveal(),H()},v={id:"pages",label:i("Pages"),icon:r(q,{}),panel:({onHide:p})=>r(te,{activeSurface:E,onPreviewSurface:b,onNavigate:m=>{b(null),l(s?{kind:"template",id:s,pageSlug:m}:{kind:"page",slug:m,siteId:f??void 0})},onClose:p})},h=[];return!n&&d&&h.push({id:"appearance",label:i("Appearance"),icon:r(tt,{}),active:e.kind==="website",onSelect:P}),n&&h.push({id:"styles",label:i("Site styles"),icon:r(X,{}),panel:({onHide:p,notify:m})=>r(ue,{tokenRef:c,siteId:f??void 0,onClose:p,onNotify:m,tab:u,onTabChange:T})}),{railLead:[v],railTrail:h,resolveLeftView:(p,m)=>xe(p,n,m),openSettings:P,openStyles:()=>{T(ve),a("styles")}}}function rt(e,t,o,s){const{kind:f,open:c}=e,{selected:l,zoneOf:n}=t,d=Te(t,o);S(()=>{Ne(l?.type==="BookingBox"&&l.props.region==="confirm"?Be(n(String(l.props.id))):null)},[l?.props.id]);const a=he(e,t),{capabilities:{hasSiteSettings:u}}=g(),{setSelected:T,setSelectHandler:E}=se(),{chat:b,setChat:P,setSelected:v,setSelectHandler:h}=oe(),p=f==="header";S(()=>{T(p)},[p,T]),S(()=>{E(()=>c(B))},[E,c]);const m=I(()=>c(pe),[c]),L=f==="chat";S(()=>{v(L)},[L,v]),S(()=>{h(m)},[h,m]);const{setOpenHandler:y}=ne(),O=I(()=>c(me),[c]);S(()=>{y(O)},[y,O]);const V=D(e),M=et(),F=ot(e,s),Y=o.device;return{...d,...V,...M,...F,treeFoot:()=>r("div",{className:"sf-tree-tool",children:r($,{})}),hasOwnRows:w=>w.type===Ee,ownRows:a.renderLocationTree,sectionPressed:a.sectionPressed,wrap:w=>r(ee.Provider,{value:!0,children:r(ie.Provider,{value:Y,children:w})}),addPanelRow:w=>u?k("div",{className:"sf-addside-sitewide",children:[r("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:r(C,{type:"chat",size:16})}),k("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{w(),m()},children:[i("Live chat"),r("span",{className:"sf-addside-sitewide-desc",children:i("A chat bubble on every page")})]}),r(Z,{checked:b.enabled,onChange:G=>P({enabled:G}),ariaLabel:i("Show the chat bubble on the whole site")})]}):void 0}}let W=null,_=new WeakMap;function it(e){const t=je();if(!e||!t)return e;W!==t&&(W=t,_=new WeakMap);let o=_.get(e);return o||(o={...e,choices:e.choices?e.choices.map(s=>({...s,label:i(s.label)})):null,spec:e.spec?{...e.spec,addLabel:i(e.spec.addLabel)}:null},_.set(e,o)),o}const st={isLockedBlock:Me,duplicateBlocked:Ce,nestDepth:(e,t,o)=>t===Ie?ge(e,o):0,newSectionNode:Qe,canAddTo:(e,t)=>it(Oe(e,t)),blockIsOffered:Ae},nt=new Proxy(ze,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?i(o):o}}),at={labelAtLevel:(e,t,o)=>i(Ge(e,t,o)),descriptions:nt,categoryLabel:e=>{const t=Le(e);return t===void 0?void 0:i(t)},firstSection:ye,blockRowName:Re,plainText:_e,Icon:C,Thumbnail:fe,useProducts:$e},ct={desktop:2e3,tablet:800,mobile:390},x="desktop",lt={options:re,initial:x,fluid:x,widths:ct},dt={read:We,write:e=>Ve(e),forSelection:(e,t)=>De(e,t)},pt={first:R,last:He,firstGroup:qe,lastGroup:Ze,isSectionGroup:Ke,sectionGroupZone:Ue,panelOf:e=>e===R?B:null};function mt(e){return{...D(e),openSettings:()=>e.show(N)}}const ao={useOwnerName:ke,useBridges:rt,useStandaloneBridges:mt,useDocumentPass:we,blockRules:st,blockLook:at,devices:lt,leftView:dt,pinned:pt,Canvas:Ye,Inspector:de};export{ao as WEBSITE_SCREEN};
@@ -1 +1 @@
1
- "use client";import{jsx as n,jsxs as y,Fragment as w}from"react/jsx-runtime";import{useEasel as P}from"efficient-easel/easel";import{useEffect as G,useRef as N,useState as x}from"react";import k from"./ThemeField.js";import B from"./CornersField.js";import W from"./CardShadowField.js";import v from"./ShadowColourField.js";import A from"./BlockGapField.js";import O from"./HoverEffectField.js";import j from"./HeroImageField.js";import Y from"./PhotographyField.js";import U from"./SideSpaceField.js";import X from"./SiteWidthField.js";import M from"./TextStylesField.js";import{usePreviewHeader as f}from"./PreviewHeaderContext.js";import{SettingsTabs as $}from"efficient-easel/panel";import{Tooltip as q,tabButtonId as J,tabPanelId as Z}from"efficient-shell/ui";import{ContrastIcon as K,NoteIcon as Q,SettingsIcon as V,TypeIcon as D}from"efficient-easel/icons";import{useThemeRowPersist as ee}from"../lib/theme-row-persist.js";import{themeSaveNotice as oe}from"../lib/theme-save-message.js";import{NEUTRAL_SITE_NAME as te}from"../lib/content/site-name.js";import{normalizeFonts as ne}from"../lib/fonts.js";import{previewFrame as re}from"../lib/puck/preview-dom.js";import{CORNER_STYLE_TO_PX as se,normalizeCornerRadius as ie,normalizeCornerStyle as ae,normalizeShadowColor as ce,headingTypographyToRow as le,normalizeHeadingCompression as de,normalizeHeadingTypography as pe,DEFAULT_SIZES as he}from"../lib/theme.js";const E="sf-site-styles",ue="sf-site-styles-tabpanel",ge=!1,fe="Show hints";function me({shown:e,onChange:o}){return n("div",{className:"sf-hints",children:y("button",{type:"button","aria-pressed":e,onClick:()=>o(!e),className:`sf-rung sf-hints-toggle${e?" is-active":""}`,children:[n(Q,{size:13}),fe]})})}const fo="text",b=[{id:"basics",label:"Basics",icon:n(V,{})},{id:"theme",label:"Theme",icon:n(K,{})},{id:"text",label:"Text",icon:n(D,{})}];function Se({themeFromDocument:e,persist:o}){const{appState:s,dispatch:r}=P(u=>u),{theme:a,setTheme:t}=f(),c=s.data,h=c.root?.props??{},i=u=>{if(e){const g={...h,theme:u};r({type:"replaceRoot",root:{...c.root,props:g},recordHistory:!0})}else t(u);o({selected_preset:u.selected,theme_presets:u.themes})};return n(k,{value:e?h.theme:a,onChange:i})}function Ce(e,o){const[s,r]=x(null),a=N(null),t=JSON.stringify(e),c=N(o);return c.current=o,G(()=>{if(a.current===null){a.current=t;return}if(a.current===t)return;a.current=t;const h=window.setTimeout(()=>r(c.current),700),i=window.setTimeout(()=>r(null),2200);return()=>{window.clearTimeout(h),window.clearTimeout(i)}},[t]),s}function ye({themeFromDocument:e,persist:o}){const{appState:s,dispatch:r}=P(d=>d),[a,t]=x(null),{fonts:c,setFonts:h,sizes:i,setSizes:u,headingCompression:g,setHeadingCompression:_,headingTypography:C,setHeadingTypography:l}=f(),T=s.data,m=T.root?.props??{},S=e?ne(m.fonts):c,F=e?he:i,z=e?de(m.headingCompression):g,I=e?pe(m.headingTypography):C,R=d=>r({type:"replaceRoot",root:{...T.root,props:{...m,...d}},recordHistory:!0}),L=Ce({curFonts:S,curCompression:z,curTypography:I},a);return n(M,{fonts:S,sizes:F,compression:z,headingTypography:I,openRole:a,onOpenRole:t,onFontChange:(d,H)=>{const p={...S,[d]:H};e?R({fonts:p}):h(p),o({heading_font:p.heading,body_font:p.body,accent_font:p.accent,label_font:p.label})},onSizeChange:e?void 0:(d,H)=>{const p={...F,[d]:H};u(p),o({heading_size_large_px:p.headingLarge,heading_size_medium_px:p.headingMedium,heading_size_small_px:p.headingSmall,accent_size_px:p.accent,body_size_px:p.body,label_size_px:p.label})},onCompressionChange:d=>{e?R({headingCompression:d}):_(d),o({heading_compression:d})},onHeadingTypographyChange:d=>{e?R({headingTypography:d}):l(d),o(le(d))},livePx:we,savedRole:L})}const _e={heading:"main h1, main h2",heading2:"main h1, main h2",heading3:"main h1, main h2",accent:"main h1 em, main h2 em",body:"main p",label:"main .mono-eyebrow"};function we(e){if(typeof document>"u")return null;const s=(re()?.contentDocument??document).querySelector(_e[e]);if(!s)return null;const r=parseFloat(getComputedStyle(s).fontSize);return Number.isFinite(r)?r:null}function Te({themeFromDocument:e,persist:o,showHint:s}){const{appState:r,dispatch:a}=P(l=>l),{cornerRadiusPx:t,setCornerRadiusPx:c}=f(),h=r.data,i=h.root?.props??{},u=i.cornerRadiusPx===void 0?se[ae(i.cornerStyle)]:ie(i.cornerRadiusPx),g=e?u:t,_=l=>a({type:"replaceRoot",root:{...h.root,props:{...i,...l}},recordHistory:!0});return n(B,{value:g,onChange:l=>{e?_({cornerRadiusPx:l}):c(l),o({corner_radius_px:l})},showHint:s})}function xe(e){return{site_width:e}}function be({persist:e,showHint:o}){const{siteWidth:s,setSiteWidth:r}=f();return n(X,{value:s,onChange:t=>{r(t),e(xe(t),t===null)},showHint:o})}function Re(e){return{block_gap:e}}function He(e){return{site_gutter:e}}function Pe({persist:e,showHint:o}){const{siteGutter:s,setSiteGutter:r}=f();return n(U,{value:s,onChange:t=>{r(t),e(He(t),t===null)},showHint:o})}function Ee({persist:e,showHint:o}){const{blockGap:s,setBlockGap:r}=f();return n(A,{value:s,onChange:t=>{r(t),e(Re(t),t===null)},showHint:o})}function Fe({persist:e,showHint:o}){const{heroBackgroundFollowsWidth:s,setHeroBackgroundFollowsWidth:r}=f();return n(j,{value:s,onChange:t=>{r(t),e({hero_background_follows_width:t},!0)},showHint:o})}function ze({persist:e,showHint:o=!0}){return y(w,{children:[n(be,{persist:e,showHint:o}),n(Pe,{persist:e,showHint:o}),n(Ee,{persist:e,showHint:o}),n(Fe,{persist:e,showHint:o})]})}function Ie(e){return{card_shadow:e}}function Ne(e){return e===null?{shadow_color:null}:{shadow_color:ce(e)}}function Le(e){return{hover_effect:e}}function Ge({persist:e,showHint:o=!0}){const{cardShadow:s,setCardShadow:r,shadowColor:a,setShadowColor:t,hoverEffect:c,setHoverEffect:h}=f();return y(w,{children:[n(W,{value:s,onChange:i=>{r(i),e(Ie(i),!0)},showHint:o}),n(v,{value:a,onChange:i=>{t(i),e(Ne(i),i===null)},showHint:o}),n(O,{value:c,onChange:i=>{h(i),e(Le(i),!0)},showHint:o})]})}function ke(e){return{photography_grayscale:e}}function Be({persist:e,showHint:o}){const{photographyGrayscale:s,setPhotographyGrayscale:r}=f();return n(Y,{value:s,onChange:t=>{r(t),e(ke(t),!0)},showHint:o})}function We({persist:e,showHint:o=!0}){return n(w,{children:n(Be,{persist:e,showHint:o})})}function ve(){const{websiteName:e}=f();return e?.trim()||te}function mo(){const e=ve();return n(q,{content:`${e} — renamed in the Console: Storefront ▸ Sites ▸ Settings.`,className:"sf-name-tip",children:n("span",{className:"sf-panel-site",children:e})})}function Ae({themeFromDocument:e=!1,tokenRef:o,siteId:s,onNotify:r,tab:a,onTabChange:t}){const{persist:c}=ee({themeFromDocument:e,tokenRef:o,siteId:s,onResult:m=>{const S=oe(m);S&&r?.(S.msg,S.tone)}}),[h,i]=x(b[0].id),u=a!==void 0,g=u?a:h,_=u?t??(()=>{}):i,C=b.find(m=>m.id===g)??b[0],[l,T]=x(ge);return y(w,{children:[n($,{items:b,activeId:C.id,onSelect:_,ariaLabel:"Site styles",idPrefix:E}),y("div",{id:Z(E,C.id),className:ue,role:"tabpanel","aria-labelledby":J(E,C.id),children:[g==="basics"&&y(w,{children:[n(Te,{themeFromDocument:e,persist:c,showHint:l}),!e&&n(Ge,{persist:c,showHint:l}),!e&&n(ze,{persist:c,showHint:l}),!e&&n(We,{persist:c,showHint:l}),n(me,{shown:l,onChange:T})]}),g==="theme"&&n(Se,{themeFromDocument:e,persist:c}),g==="text"&&n(ye,{themeFromDocument:e,persist:c})]})]})}export{Ge as CardLookFields,me as HintsToggle,ze as PageGroupFields,We as PhotographyGroupFields,ge as SHOW_HINTS_DEFAULT,E as SITE_STYLES_ID_PREFIX,b as SITE_STYLES_TABS,fo as SITE_STYLES_TEXT_TAB,ue as TABPANEL_CLASS,mo as WebsiteNameReadonly,Re as blockGapPatch,Ie as cardShadowPatch,Ae as default,Le as hoverEffectPatch,ke as photographyPatch,Ne as shadowColourPatch,He as siteGutterPatch,xe as siteWidthPatch,ve as useWebsiteName};
1
+ "use client";import{jsx as n,jsxs as y,Fragment as w}from"react/jsx-runtime";import{useEasel as E}from"efficient-easel/easel";import{useEffect as k,useRef as L,useState as b}from"react";import B from"./ThemeField.js";import W from"./CornersField.js";import v from"./CardShadowField.js";import A from"./ShadowColourField.js";import O from"./BlockGapField.js";import j from"./HoverEffectField.js";import Y from"./HeroImageField.js";import U from"./PhotographyField.js";import X from"./SideSpaceField.js";import M from"./SiteWidthField.js";import q from"./TextStylesField.js";import{usePreviewHeader as m}from"./PreviewHeaderContext.js";import{SettingsTabs as J}from"efficient-easel/panel";import{Tooltip as Z,tabButtonId as $,tabPanelId as K}from"efficient-shell/ui";import{ContrastIcon as Q,NoteIcon as V,SettingsIcon as D,TypeIcon as ee}from"efficient-easel/icons";import{useThemeRowPersist as oe}from"../lib/theme-row-persist.js";import{themeSaveNotice as te}from"../lib/theme-save-message.js";import{say as T}from"../lib/editor-words.js";import{NEUTRAL_SITE_NAME as ne}from"../lib/content/site-name.js";import{normalizeFonts as re}from"../lib/fonts.js";import{previewFrame as se}from"../lib/puck/preview-dom.js";import{CORNER_STYLE_TO_PX as ie,normalizeCornerRadius as ae,normalizeCornerStyle as ce,normalizeShadowColor as le,headingTypographyToRow as pe,normalizeHeadingCompression as de,normalizeHeadingTypography as he,DEFAULT_SIZES as ue}from"../lib/theme.js";const F="sf-site-styles",ge="sf-site-styles-tabpanel",fe=!1,me="Show hints";function Se({shown:e,onChange:o}){return n("div",{className:"sf-hints",children:y("button",{type:"button","aria-pressed":e,onClick:()=>o(!e),className:`sf-rung sf-hints-toggle${e?" is-active":""}`,children:[n(V,{size:13}),T(me)]})})}const So="text",R=[{id:"basics",label:"Basics",icon:n(D,{})},{id:"theme",label:"Theme",icon:n(Q,{})},{id:"text",label:"Text",icon:n(ee,{})}];function Ce({themeFromDocument:e,persist:o}){const{appState:s,dispatch:r}=E(u=>u),{theme:a,setTheme:t}=m(),c=s.data,h=c.root?.props??{},i=u=>{if(e){const f={...h,theme:u};r({type:"replaceRoot",root:{...c.root,props:f},recordHistory:!0})}else t(u);o({selected_preset:u.selected,theme_presets:u.themes})};return n(B,{value:e?h.theme:a,onChange:i})}function ye(e,o){const[s,r]=b(null),a=L(null),t=JSON.stringify(e),c=L(o);return c.current=o,k(()=>{if(a.current===null){a.current=t;return}if(a.current===t)return;a.current=t;const h=window.setTimeout(()=>r(c.current),700),i=window.setTimeout(()=>r(null),2200);return()=>{window.clearTimeout(h),window.clearTimeout(i)}},[t]),s}function _e({themeFromDocument:e,persist:o}){const{appState:s,dispatch:r}=E(p=>p),[a,t]=b(null),{fonts:c,setFonts:h,sizes:i,setSizes:u,headingCompression:f,setHeadingCompression:_,headingTypography:C,setHeadingTypography:l}=m(),x=s.data,g=x.root?.props??{},S=e?re(g.fonts):c,z=e?ue:i,I=e?de(g.headingCompression):f,N=e?he(g.headingTypography):C,H=p=>r({type:"replaceRoot",root:{...x.root,props:{...g,...p}},recordHistory:!0}),G=ye({curFonts:S,curCompression:I,curTypography:N},a);return n(q,{fonts:S,sizes:z,compression:I,headingTypography:N,openRole:a,onOpenRole:t,onFontChange:(p,P)=>{const d={...S,[p]:P};e?H({fonts:d}):h(d),o({heading_font:d.heading,body_font:d.body,accent_font:d.accent,label_font:d.label})},onSizeChange:e?void 0:(p,P)=>{const d={...z,[p]:P};u(d),o({heading_size_large_px:d.headingLarge,heading_size_medium_px:d.headingMedium,heading_size_small_px:d.headingSmall,accent_size_px:d.accent,body_size_px:d.body,label_size_px:d.label})},onCompressionChange:p=>{e?H({headingCompression:p}):_(p),o({heading_compression:p})},onHeadingTypographyChange:p=>{e?H({headingTypography:p}):l(p),o(pe(p))},livePx:Te,savedRole:G})}const we={heading:"main h1, main h2",heading2:"main h1, main h2",heading3:"main h1, main h2",accent:"main h1 em, main h2 em",body:"main p",label:"main .mono-eyebrow"};function Te(e){if(typeof document>"u")return null;const s=(se()?.contentDocument??document).querySelector(we[e]);if(!s)return null;const r=parseFloat(getComputedStyle(s).fontSize);return Number.isFinite(r)?r:null}function xe({themeFromDocument:e,persist:o,showHint:s}){const{appState:r,dispatch:a}=E(l=>l),{cornerRadiusPx:t,setCornerRadiusPx:c}=m(),h=r.data,i=h.root?.props??{},u=i.cornerRadiusPx===void 0?ie[ce(i.cornerStyle)]:ae(i.cornerRadiusPx),f=e?u:t,_=l=>a({type:"replaceRoot",root:{...h.root,props:{...i,...l}},recordHistory:!0});return n(W,{value:f,onChange:l=>{e?_({cornerRadiusPx:l}):c(l),o({corner_radius_px:l})},showHint:s})}function be(e){return{site_width:e}}function Re({persist:e,showHint:o}){const{siteWidth:s,setSiteWidth:r}=m();return n(M,{value:s,onChange:t=>{r(t),e(be(t),t===null)},showHint:o})}function He(e){return{block_gap:e}}function Pe(e){return{site_gutter:e}}function Ee({persist:e,showHint:o}){const{siteGutter:s,setSiteGutter:r}=m();return n(X,{value:s,onChange:t=>{r(t),e(Pe(t),t===null)},showHint:o})}function Fe({persist:e,showHint:o}){const{blockGap:s,setBlockGap:r}=m();return n(O,{value:s,onChange:t=>{r(t),e(He(t),t===null)},showHint:o})}function ze({persist:e,showHint:o}){const{heroBackgroundFollowsWidth:s,setHeroBackgroundFollowsWidth:r}=m();return n(Y,{value:s,onChange:t=>{r(t),e({hero_background_follows_width:t},!0)},showHint:o})}function Ie({persist:e,showHint:o=!0}){return y(w,{children:[n(Re,{persist:e,showHint:o}),n(Ee,{persist:e,showHint:o}),n(Fe,{persist:e,showHint:o}),n(ze,{persist:e,showHint:o})]})}function Ne(e){return{card_shadow:e}}function Le(e){return e===null?{shadow_color:null}:{shadow_color:le(e)}}function Ge(e){return{hover_effect:e}}function ke({persist:e,showHint:o=!0}){const{cardShadow:s,setCardShadow:r,shadowColor:a,setShadowColor:t,hoverEffect:c,setHoverEffect:h}=m();return y(w,{children:[n(v,{value:s,onChange:i=>{r(i),e(Ne(i),!0)},showHint:o}),n(A,{value:a,onChange:i=>{t(i),e(Le(i),i===null)},showHint:o}),n(j,{value:c,onChange:i=>{h(i),e(Ge(i),!0)},showHint:o})]})}function Be(e){return{photography_grayscale:e}}function We({persist:e,showHint:o}){const{photographyGrayscale:s,setPhotographyGrayscale:r}=m();return n(U,{value:s,onChange:t=>{r(t),e(Be(t),!0)},showHint:o})}function ve({persist:e,showHint:o=!0}){return n(w,{children:n(We,{persist:e,showHint:o})})}function Ae(){const{websiteName:e}=m();return e?.trim()||ne}function Co(){const e=Ae();return n(Z,{content:T("{name} — renamed in the Console: {place}.",{name:e,place:T("Storefront ▸ Sites ▸ Settings")}),className:"sf-name-tip",children:n("span",{className:"sf-panel-site",children:e})})}function Oe({themeFromDocument:e=!1,tokenRef:o,siteId:s,onNotify:r,tab:a,onTabChange:t}){const{persist:c}=oe({themeFromDocument:e,tokenRef:o,siteId:s,onResult:g=>{const S=te(g);S&&r?.(S.msg,S.tone)}}),[h,i]=b(R[0].id),u=a!==void 0,f=u?a:h,_=u?t??(()=>{}):i,C=R.find(g=>g.id===f)??R[0],[l,x]=b(fe);return y(w,{children:[n(J,{items:R.map(g=>({...g,label:T(g.label)})),activeId:C.id,onSelect:_,ariaLabel:T("Site styles"),idPrefix:F}),y("div",{id:K(F,C.id),className:ge,role:"tabpanel","aria-labelledby":$(F,C.id),children:[f==="basics"&&y(w,{children:[n(xe,{themeFromDocument:e,persist:c,showHint:l}),!e&&n(ke,{persist:c,showHint:l}),!e&&n(Ie,{persist:c,showHint:l}),!e&&n(ve,{persist:c,showHint:l}),n(Se,{shown:l,onChange:x})]}),f==="theme"&&n(Ce,{themeFromDocument:e,persist:c}),f==="text"&&n(_e,{themeFromDocument:e,persist:c})]})]})}export{ke as CardLookFields,Se as HintsToggle,Ie as PageGroupFields,ve as PhotographyGroupFields,fe as SHOW_HINTS_DEFAULT,F as SITE_STYLES_ID_PREFIX,R as SITE_STYLES_TABS,So as SITE_STYLES_TEXT_TAB,ge as TABPANEL_CLASS,Co as WebsiteNameReadonly,He as blockGapPatch,Ne as cardShadowPatch,Oe as default,Ge as hoverEffectPatch,Be as photographyPatch,Le as shadowColourPatch,Pe as siteGutterPatch,be as siteWidthPatch,Ae as useWebsiteName};
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsDefaultReset as c,SettingsField as u,SettingsSegmented as m}from"efficient-easel/panel";import{WidthIcon as h}from"efficient-easel/icons";import{WIDTH_CHOICE_LABEL as l}from"../lib/content/section-width.js";function g({value:i,resolved:d,onChange:o,label:n="Width",labelId:a,followsLabel:s,hint:f}){const e=i===void 0,r=e?d:i;return t(u,{label:n,labelId:a,icon:t(h,{}),value:e?s:void 0,changed:!e,action:t(c,{label:n,changed:!e,onReset:()=>o(void 0)}),hint:f,children:t(m,{options:[{label:l.page,id:"content"},{label:l.full,id:"full"}],value:r,ariaLabel:n,onChange:o})})}export{g as default};
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsDefaultReset as u,SettingsField as p,SettingsSegmented as h}from"efficient-easel/panel";import{WidthIcon as g}from"efficient-easel/icons";import{say as o,editorEaselWords as b}from"../lib/editor-words.js";import{WIDTH_CHOICE_LABEL as d}from"../lib/content/section-width.js";function W({value:l,resolved:a,onChange:i,label:s="Width",labelId:r,followsLabel:f,hint:c}){const e=l===void 0,m=e?a:l,n=o(s);return t(p,{label:n,labelId:r,icon:t(g,{}),value:e?f:void 0,changed:!e,action:t(u,{words:b()?.panel,label:n,changed:!e,onReset:()=>i(void 0)}),hint:c,children:t(h,{options:[{label:o(d.page),id:"content"},{label:o(d.full),id:"full"}],value:m,ariaLabel:n,onChange:i})})}export{W as default};
@@ -1 +1 @@
1
- "use client";import{jsx as E}from"react/jsx-runtime";import{DesktopIcon as I,PhoneIcon as t,TabletIcon as e}from"efficient-easel/icons";import{VIEW_TIERS as m,VIEW_TIER_LABEL as n}from"../lib/content/view-tiers.js";const s={desktop:E(I,{}),tablet:E(e,{}),mobile:E(t,{})},_=m.map(o=>({id:o,label:n[o],icon:s[o]}));export{_ as PREVIEW_DEVICES};
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{DesktopIcon as E,PhoneIcon as I,TabletIcon as e}from"efficient-easel/icons";import{say as m}from"../lib/editor-words.js";import{VIEW_TIERS as n,VIEW_TIER_LABEL as r}from"../lib/content/view-tiers.js";const s={desktop:t(E,{}),tablet:t(e,{}),mobile:t(I,{})},l=n.map(o=>({id:o,get label(){return m(r[o])},icon:s[o]}));export{l as PREVIEW_DEVICES};
@@ -356,7 +356,7 @@
356
356
  padding: 0;
357
357
  border: 0;
358
358
  background: none;
359
- font: 600 12.5px/1.3 var(--sf-font);
359
+ font: 600 12px/1.3 var(--sf-font);
360
360
  color: var(--sf-text);
361
361
  text-align: left;
362
362
  cursor: pointer;
@@ -366,7 +366,7 @@
366
366
  }
367
367
  .sf-addside-sitewide-desc {
368
368
  font-weight: 400;
369
- font-size: 11.5px;
369
+ font-size: 12px;
370
370
  color: var(--sf-muted);
371
371
  }
372
372
 
@@ -502,12 +502,12 @@
502
502
  color: var(--sf-on-accent);
503
503
  border-radius: var(--radius-lg);
504
504
  padding: 8px 14px;
505
- font-size: 12.5px;
505
+ font-size: 12px;
506
506
  font-weight: 600;
507
507
  box-shadow: 0 4px 12px var(--sf-accent-shadow);
508
508
  }
509
509
  .sf-addcard-plus {
510
- font-size: 15px;
510
+ font-size: 16px;
511
511
  line-height: 1;
512
512
  margin-top: -1px;
513
513
  }
@@ -518,12 +518,12 @@
518
518
  padding: 0 2px 2px;
519
519
  }
520
520
  .sf-addcard-name {
521
- font-size: 12.5px;
521
+ font-size: 12px;
522
522
  font-weight: 600;
523
523
  color: var(--sf-text);
524
524
  }
525
525
  .sf-addcard-desc {
526
- font-size: 10.5px;
526
+ font-size: 11px;
527
527
  line-height: 1.35;
528
528
  color: var(--sf-muted);
529
529
  }
@@ -553,7 +553,7 @@
553
553
  color: var(--sf-text);
554
554
  }
555
555
  .sf-addempty-sub {
556
- font-size: 12.5px;
556
+ font-size: 12px;
557
557
  }
558
558
 
559
559
  /* ── Center: device-framed preview (wraps Puck.Preview) ──────────────── */
@@ -925,7 +925,7 @@
925
925
  came to hang 6px OUTSIDE the panel at every width under 280 (measured: gap
926
926
  -6.0px at 260 and at 220, against 0.0 at the default 320). One name, read
927
927
  by the padding, by the narrow override, and by anything that undoes it. */
928
- --sf-insp-pad-x: 14px;
928
+ --sf-insp-pad-x: 16px;
929
929
  padding: 4px var(--sf-insp-pad-x) 18px;
930
930
 
931
931
  /* THE DROPDOWN ARROW, WRITTEN ONCE — card 66399.c.
@@ -946,7 +946,12 @@
946
946
  --sf-select-arrow: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' fill='%23c3c3c3'><polygon points='0,0 100,0 50,50'/></svg>");
947
947
  }
948
948
 
949
- /* …AND THE 14 IS A DIFFERENT COST AT EACH END OF A PANEL THE MERCHANT DRAGS
949
+ /* 2026-10-13: THE WIDE PADDING IS 16, AND THE LINE 284. 14 was off the
950
+ spacing scale (Lewis 2026-10-12: 2 / 4 / 8 / 12 / 16 …) and a value off it
951
+ goes UP. The content width card 66212 protects stays 241px; at 16 each side
952
+ that needs a 285px panel, so the query below reads `< 284px`. The note that
953
+ follows is card 66212's own, written at 14.
954
+ …AND THE 14 IS A DIFFERENT COST AT EACH END OF A PANEL THE MERCHANT DRAGS
950
955
  (card 66212). One number, held at every width from 220 to 560:
951
956
 
952
957
  320px default 308 client (1px seam + 11px scrollbar) − 28 = 280 content
@@ -986,7 +991,7 @@
986
991
  and 10 has nothing to spare, and type is paid vertically as well — card 66206
987
992
  has just set the row rhythm to 16px, which shrinking type would hand straight
988
993
  back. The padding was the horizontal cost, so the padding is what moved. */
989
- @container (width < 280px) {
994
+ @container (width < 284px) {
990
995
  .sf-insp-body {
991
996
  /* The TOKEN, not `padding-inline` — so everything that reads the padding
992
997
  narrows with it, instead of only the padding itself. */
@@ -1004,7 +1009,7 @@
1004
1009
  background: var(--sf-field-bg);
1005
1010
  border-radius: var(--sf-field-radius);
1006
1011
  padding: 8px 11px;
1007
- font-size: 13px;
1012
+ font-size: 14px;
1008
1013
  color: var(--sf-field-text);
1009
1014
  font-family: var(--sf-font);
1010
1015
  }
@@ -1105,7 +1110,7 @@
1105
1110
  background-position: calc(100% - 12px) calc(50% + 3px);
1106
1111
  border-radius: var(--sf-field-radius);
1107
1112
  padding: 8px 11px;
1108
- font-size: 13px;
1113
+ font-size: 14px;
1109
1114
  color: var(--sf-field-text);
1110
1115
  cursor: pointer;
1111
1116
  }
@@ -1177,7 +1182,7 @@
1177
1182
  background: var(--sf-field-bg);
1178
1183
  border-radius: var(--sf-field-radius);
1179
1184
  padding: 8px 11px;
1180
- font-size: 13px;
1185
+ font-size: 14px;
1181
1186
  font-family: var(--sf-font);
1182
1187
  color: var(--sf-field-text);
1183
1188
  text-align: left;
@@ -1189,7 +1194,7 @@
1189
1194
  box-shadow: 0 0 0 3px var(--sf-accent-ring);
1190
1195
  }
1191
1196
  .sf-multi-caret {
1192
- font-size: 10px;
1197
+ font-size: 11px;
1193
1198
  color: var(--sf-text-secondary);
1194
1199
  flex: none;
1195
1200
  }
@@ -1391,7 +1396,7 @@
1391
1396
  border: 0;
1392
1397
  background: transparent;
1393
1398
  border-radius: max(calc(var(--sf-field-radius) - 2px), 2px);
1394
- font-size: 13px;
1399
+ font-size: 14px;
1395
1400
  font-family: var(--sf-font);
1396
1401
  color: var(--sf-field-text);
1397
1402
  text-align: left;
@@ -1541,7 +1546,7 @@
1541
1546
  border: none;
1542
1547
  background: transparent;
1543
1548
  font-family: var(--sf-font);
1544
- font-size: 13px;
1549
+ font-size: 14px;
1545
1550
  color: var(--sf-text);
1546
1551
  outline: none;
1547
1552
  }
@@ -1609,7 +1614,7 @@
1609
1614
  }
1610
1615
  .sf-page-draft {
1611
1616
  flex: none;
1612
- font-size: 10px;
1617
+ font-size: 11px;
1613
1618
  font-weight: 600;
1614
1619
  color: var(--sf-muted);
1615
1620
  text-transform: uppercase;
@@ -1692,7 +1697,7 @@
1692
1697
  background: transparent;
1693
1698
  color: var(--sf-accent-text);
1694
1699
  font-family: var(--sf-font);
1695
- font-size: 13px;
1700
+ font-size: 14px;
1696
1701
  font-weight: 600;
1697
1702
  cursor: pointer;
1698
1703
  }
@@ -2146,7 +2151,7 @@
2146
2151
  background: var(--sf-chip-bg);
2147
2152
  border-radius: var(--sf-field-radius);
2148
2153
  padding: 8px 11px;
2149
- font-size: 13px;
2154
+ font-size: 14px;
2150
2155
  color: var(--sf-text-secondary);
2151
2156
  font-family: var(--sf-font);
2152
2157
  cursor: default;
@@ -2517,7 +2522,7 @@
2517
2522
  border-radius: var(--sf-field-radius);
2518
2523
  background: var(--sf-field-bg);
2519
2524
  color: var(--sf-field-text);
2520
- font-size: 13px;
2525
+ font-size: 14px;
2521
2526
  text-align: left;
2522
2527
  cursor: pointer;
2523
2528
  }
@@ -2537,7 +2542,7 @@
2537
2542
  so it reads quieter than everything else on the row. */
2538
2543
  .sf-chooser-meta {
2539
2544
  flex: none;
2540
- font-size: 10px;
2545
+ font-size: 11px;
2541
2546
  text-transform: uppercase;
2542
2547
  letter-spacing: 0.05em;
2543
2548
  color: var(--sf-disabled);
@@ -2573,7 +2578,7 @@
2573
2578
  border: 0;
2574
2579
  background: none;
2575
2580
  text-align: left;
2576
- font-size: 13px;
2581
+ font-size: 14px;
2577
2582
  color: var(--sf-text-secondary);
2578
2583
  cursor: pointer;
2579
2584
  }
@@ -2694,7 +2699,7 @@
2694
2699
  color: var(--sf-disabled);
2695
2700
  }
2696
2701
  .sf-scale-a--lg {
2697
- font-size: 15px;
2702
+ font-size: 16px;
2698
2703
  color: var(--sf-muted);
2699
2704
  }
2700
2705
  /* The "Auto" button that clears an optional number back to the built-in. */
@@ -2879,7 +2884,7 @@
2879
2884
  glyph and it keeps its accessible name in `aria-label`. */
2880
2885
  .sf-rung--glyph {
2881
2886
  flex: 0 0 34px;
2882
- font-size: 13px;
2887
+ font-size: 14px;
2883
2888
  line-height: 18px;
2884
2889
  text-align: center;
2885
2890
  }
@@ -3058,7 +3063,7 @@
3058
3063
  .sf-theme-warn {
3059
3064
  flex: none;
3060
3065
  margin-left: auto;
3061
- font-size: 10px;
3066
+ font-size: 11px;
3062
3067
  font-weight: 700;
3063
3068
  color: var(--status-warning-soft-ink);
3064
3069
  white-space: nowrap;
@@ -3164,7 +3169,7 @@
3164
3169
  }
3165
3170
  .sf-readability-head {
3166
3171
  margin-bottom: 7px;
3167
- font-size: 10px;
3172
+ font-size: 11px;
3168
3173
  font-weight: 700;
3169
3174
  letter-spacing: 0.06em;
3170
3175
  text-transform: uppercase;
@@ -3348,7 +3353,7 @@
3348
3353
  min-width: 0;
3349
3354
  }
3350
3355
  .sf-preview-pin-label {
3351
- font-size: 13px;
3356
+ font-size: 14px;
3352
3357
  font-weight: 500;
3353
3358
  color: var(--sf-text);
3354
3359
  }
@@ -3369,7 +3374,7 @@
3369
3374
  .sf-colstep-value {
3370
3375
  min-width: 14px;
3371
3376
  text-align: center;
3372
- font-size: 13px;
3377
+ font-size: 14px;
3373
3378
  font-weight: 500;
3374
3379
  color: var(--sf-text);
3375
3380
  }
@@ -3471,11 +3476,12 @@
3471
3476
  SCOPED TO THE NARROW PANEL, on the container card 66212 already put on
3472
3477
  `.sf-panel` — the same rule, one level down: that card paid the horizontal
3473
3478
  cost out of the body's padding, and this pays the rest out of the strip's.
3474
- Above 280px nothing changes, so all 23 `segmented()` call sites and the four
3479
+ Above 284px (280 until the body's padding went 14 → 16 on 2026-10-13: one
3480
+ edge, one number) nothing changes, so all 23 `segmented()` call sites and the four
3475
3481
  panels that draw their own label rows are byte-identical at every width where
3476
3482
  they already fit. A `.sf-seg2` that is not inside a `.sf-panel` matches no
3477
3483
  container and is untouched by construction. */
3478
- @container (width < 280px) {
3484
+ @container (width < 284px) {
3479
3485
  .sf-seg2 button {
3480
3486
  padding-inline: 6px;
3481
3487
  }
@@ -3657,7 +3663,7 @@ input.sf-list-marking {
3657
3663
  }
3658
3664
  .sf-formsummary-warn {
3659
3665
  margin: 0;
3660
- font-size: 11.5px;
3666
+ font-size: 12px;
3661
3667
  line-height: 1.45;
3662
3668
  color: var(--sf-danger);
3663
3669
  }
@@ -3757,7 +3763,7 @@ ul.sf-image-status {
3757
3763
  same six classes wearing one name. */
3758
3764
  .sf-note {
3759
3765
  padding: 14px 16px;
3760
- font-size: 13px;
3766
+ font-size: 14px;
3761
3767
  line-height: 1.5;
3762
3768
  color: var(--sf-muted);
3763
3769
  }
@@ -3942,7 +3948,7 @@ ul.sf-image-status {
3942
3948
  background: none;
3943
3949
  text-align: left;
3944
3950
  /* E6 — a field label is never smaller than 12px, and an option is a label. */
3945
- font-size: 13px;
3951
+ font-size: 14px;
3946
3952
  color: var(--sf-field-text);
3947
3953
  border-radius: max(calc(var(--sf-field-radius) - 2px), 2px);
3948
3954
  cursor: pointer;
@@ -4019,7 +4025,7 @@ ul.sf-image-status {
4019
4025
  it read at 13px and wrapped, taking "Edit style" over two lines with it. So
4020
4026
  it keeps its look exactly and takes an honest name. */
4021
4027
  .sf-part-style-state {
4022
- font-size: 11.5px;
4028
+ font-size: 12px;
4023
4029
  color: var(--sf-text-secondary);
4024
4030
  }
4025
4031
  /* The override count. A chip rather than plain text because it is a NUMBER a
@@ -4031,7 +4037,7 @@ ul.sf-image-status {
4031
4037
  padding: 2px 9px;
4032
4038
  background: var(--sf-accent-tint);
4033
4039
  color: var(--sf-accent-text);
4034
- font-size: 10.5px;
4040
+ font-size: 11px;
4035
4041
  font-weight: 700;
4036
4042
  font-variant-numeric: tabular-nums;
4037
4043
  }
@@ -4305,7 +4311,7 @@ ul.sf-image-status {
4305
4311
  background: var(--sf-field-bg);
4306
4312
  border-radius: 999px;
4307
4313
  padding: 4px 11px;
4308
- font-size: 11.5px;
4314
+ font-size: 12px;
4309
4315
  font-weight: 600;
4310
4316
  color: var(--sf-icon);
4311
4317
  cursor: pointer;
@@ -4428,7 +4434,7 @@ ul.sf-image-status {
4428
4434
 
4429
4435
  /* How many the filter left. Without it an empty-looking strip is a mystery. */
4430
4436
  .sf-gallery-count {
4431
- font-size: 10.5px;
4437
+ font-size: 11px;
4432
4438
  color: var(--sf-disabled);
4433
4439
  margin-top: 7px;
4434
4440
  }
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as d,Fragment as ge}from"react/jsx-runtime";import{Fragment as q,useEffect as J,useRef as F}from"react";import{useTreeDrag as Q}from"efficient-easel/drag";import{ImageIcon as ye,TextLinesIcon as ke,TrashIcon as V}from"efficient-easel/icons";import{Subtree as X,TreeRow as L,TreeRowAction as Z,TreeSeam as b}from"efficient-easel/tree";import{decodeLocationPartId as ve,encodeLocationPartId as xe,usePreviewLocationPart as fe}from"./PreviewLocationPartContext.js";import{PUCK_MODE as he}from"./SectionEditor.js";import{useLocationsFocus as me,setLocationsFocus as p}from"../lib/puck/locations-focus.js";import{bucketsOf as ee,moveGroup as oe,moveCity as ne,addCity as Le,addGroup as Ie,deleteGroup as Pe,deleteCity as Ce,absCityIndex as te,groupLabelOf as Se,cardKey as re}from"../lib/puck/locations-tree.js";const ce="ContactLocations";function $e({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M3 12h18M12 3c2.6 2.6 2.6 15.4 0 18M12 3c-2.6 2.6-2.6 15.4 0 18"})]})}function we({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M12 21s6-5 6-10a6 6 0 10-12 0c0 5 6 10 6 10z"}),t("circle",{cx:"12",cy:"11",r:"2"})]})}function Te({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M9 4 3 6.5v13L9 17l6 3 6-2.5v-13L15 7z"}),t("path",{d:"M9 4v13M15 7v13"})]})}const $=c=>({parentId:`locations-${c}`,slot:"groups"}),O=(c,y)=>({parentId:`locations-${c}`,slot:`cities:${y}`});function _e(c,y){const{readOnly:I,selected:P}=y,v=y.data?.content??[],le=c.kind===he.kind,w=F(null);J(()=>{const o=P?.type===ce?String(P.props.id):null;o&&o!==w.current&&p({level:"groups"}),w.current=o},[P?.props.id]);const{selectedLocationPartId:se,setSelectedLocationPartId:G,setSelectHandler:j}=fe(),l=me(),g=(o,e)=>{const r=v[o];r&&y.replace(o,{type:r.type,props:{...r.props,locations:e}})},f=o=>{const e=v[o]?.props?.locations;return Array.isArray(e)?e:[]},A=Q({keyOf:o=>`group:${o.si}:${o.index}`,readOnly:!!I,canDrop:(o,e)=>e.parentId===$(o.si).parentId&&e.slot==="groups",onDrop:(o,e)=>{g(o.si,oe(f(o.si),o.index,e.index)),l.level==="city"&&p({level:"groups"})},onStep:(o,e)=>{g(o.si,oe(f(o.si),o.index,e<0?o.index-1:o.index+2)),l.level==="city"&&p({level:"groups"})}}),T=Q({keyOf:o=>`city:${o.si}:${o.group}:${o.index}`,readOnly:!!I,canDrop:(o,e)=>e.parentId===$(o.si).parentId&&e.slot.startsWith("cities:"),onDrop:(o,e)=>{const r=e.slot.slice(7);g(o.si,ne(f(o.si),o.group,o.index,r,e.index)),p({level:"group",key:r})},onStep:(o,e)=>{g(o.si,ne(f(o.si),o.group,o.index,o.group,e<0?o.index-1:o.index+2)),l.level==="city"&&p({level:"group",key:o.group})}}),N=F(v);N.current=v;const R=F(()=>{});J(()=>{j(o=>{const e=ve(o);if(!e)return;const r=N.current.findIndex(C=>C.props?.id===e.nodeId);r<0||R.current(r,{level:e.part,index:e.index})})},[j]);const s=(o,e)=>{w.current=v[o]?.props?.id??null,y.select(o),p(e),c.reveal();const r=v[o]?.props?.id;typeof r=="string"&&(e.level==="image"||e.level==="map")?G(xe(r,e.index,e.level)):G(null),typeof r=="string"&&y.scrollTo(r)};return R.current=s,{renderLocationTree:(o,e,{rowClick:r,isCollapsed:C,toggleCollapse:z})=>{const x=f(e),ie=ee(x),h=String(o.props.id),m=le&&P?.props.id===h,_=n=>t(b,{...I?{}:A.seam({place:{...$(e),index:n}})},`seam:${h}:groups:${n}`),B=(n,u)=>t(b,{...I?{}:T.seam({place:{...O(e,n),index:u}})},`seam:${h}:cities:${n}:${u}`);return d(ge,{children:[t(L,{icon:t(ke,{size:13}),name:"Texts",onSelect:()=>s(e,{level:"texts"}),selected:m&&l.level==="texts",rowProps:{onClick:r(()=>s(e,{level:"texts"}))}}),ie.map((n,u)=>{const D=`${h}::grp::${n.key}`,E=C(D),ae=m&&l.level==="group"&&l.key===n.key,W=Se(n.key,n.name),K={...O(e,n.key),index:n.cards.length},H=T.row({item:{si:e,group:n.key,index:-1},place:K,into:K,canDrag:!1},{onClick:r(()=>s(e,{level:"group",key:n.key}))}),S=A.row({item:{si:e,index:u},place:{...$(e),index:u}},H.rowProps);return d(q,{children:[u===0&&_(0),t(L,{icon:t($e,{size:13}),name:W,onSelect:()=>s(e,{level:"group",key:n.key}),selected:ae,draggable:S.draggable,dragging:S.dragging,drop:S.drop??H.drop,fold:{open:!E,label:"group",onToggle:()=>z(D)},actions:t(Z,{kind:"delete",label:`Delete ${W} group (${n.cards.length} ${n.cards.length===1?"city":"cities"})`,onClick:()=>{g(e,Pe(x,n.key)),p({level:"groups"})},children:t(V,{size:15})}),rowProps:S.rowProps,children:t("span",{className:"es-group-count",children:n.cards.length})}),!E&&d(X,{children:[n.cards.map((k,a)=>{const i=te(x,n.key,a),de=m&&l.level==="city"&&l.index===i,M=String(k?.name??"")||"City",U=`${h}::city::${re(k)}`,Y=C(U),{rowProps:pe,...ue}=T.row({item:{si:e,group:n.key,index:a},place:{...O(e,n.key),index:a}},{onClick:r(()=>s(e,{level:"city",index:i}))});return d(q,{children:[a===0&&B(n.key,0),t(L,{icon:t(we,{size:13}),name:M,onSelect:()=>s(e,{level:"city",index:i}),selected:de,...ue,fold:{open:!Y,label:M,onToggle:()=>z(U)},actions:t(Z,{kind:"delete",label:`Delete ${M}`,onClick:()=>{g(e,Ce(x,n.key,a)),p({level:"group",key:n.key})},children:t(V,{size:15})}),rowProps:pe}),!Y&&d(X,{children:[t(L,{icon:t(ye,{size:13}),name:"Image",onSelect:()=>s(e,{level:"image",index:i}),selected:m&&l.level==="image"&&l.index===i,rowProps:{onClick:r(()=>s(e,{level:"image",index:i}))}}),t(L,{icon:t(Te,{size:13}),name:"Map",onSelect:()=>s(e,{level:"map",index:i}),selected:m&&l.level==="map"&&l.index===i,rowProps:{onClick:r(()=>s(e,{level:"map",index:i}))}})]}),B(n.key,a+1)]},re(k))}),d("button",{type:"button",className:"sf-add-card",onClick:()=>{const k=Le(x,n.key);g(e,k);const a=ee(k).find(i=>i.key===n.key);p(a&&a.cards.length?{level:"city",index:te(k,n.key,a.cards.length-1)}:{level:"group",key:n.key})},children:[t("span",{className:"sf-plus sf-plus--sm",children:"+"}),"Add city"]})]}),_(u+1)]},D)}),d("button",{type:"button",className:"sf-add-card",onClick:()=>{const{cards:n,key:u}=Ie(x);g(e,n),s(e,{level:"group",key:u})},children:[t("span",{className:"sf-plus sf-plus--sm",children:"+"}),"Add group"]})]})},sectionPressed:o=>{o?.type===ce&&p({level:"groups"})}}}export{ce as LOCATIONS_TYPE,_e as useLocationsTree};
1
+ "use client";import{jsx as t,jsxs as d,Fragment as ke}from"react/jsx-runtime";import{Fragment as Q,useEffect as V,useRef as G}from"react";import{useTreeDrag as X}from"efficient-easel/drag";import{ImageIcon as me,TextLinesIcon as ve,TrashIcon as Z}from"efficient-easel/icons";import{Subtree as b,TreeRow as I,TreeRowAction as ee,TreeSeam as oe}from"efficient-easel/tree";import{useEaselStrings as xe}from"efficient-easel/strings";import{decodeLocationPartId as fe,encodeLocationPartId as he,usePreviewLocationPart as Le}from"./PreviewLocationPartContext.js";import{PUCK_MODE as we}from"./SectionEditor.js";import{say as g,sayCount as Ie}from"../lib/editor-words.js";import{useLocationsFocus as Pe,setLocationsFocus as p}from"../lib/puck/locations-focus.js";import{bucketsOf as ne,moveGroup as te,moveCity as re,addCity as Ce,addGroup as Se,deleteGroup as $e,deleteCity as Te,absCityIndex as ce,groupLabelOf as De,cardKey as se}from"../lib/puck/locations-tree.js";const le="ContactLocations";function Me({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M3 12h18M12 3c2.6 2.6 2.6 15.4 0 18M12 3c-2.6 2.6-2.6 15.4 0 18"})]})}function Fe({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M12 21s6-5 6-10a6 6 0 10-12 0c0 5 6 10 6 10z"}),t("circle",{cx:"12",cy:"11",r:"2"})]})}function Oe({size:c=13}){return d("svg",{width:c,height:c,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M9 4 3 6.5v13L9 17l6 3 6-2.5v-13L15 7z"}),t("path",{d:"M9 4v13M15 7v13"})]})}const T=c=>({parentId:`locations-${c}`,slot:"groups"}),j=(c,k)=>({parentId:`locations-${c}`,slot:`cities:${k}`});function He(c,k){const{readOnly:P,selected:C}=k,f=xe().tree,v=k.data?.content??[],ie=c.kind===we.kind,D=G(null);V(()=>{const o=C?.type===le?String(C.props.id):null;o&&o!==D.current&&p({level:"groups"}),D.current=o},[C?.props.id]);const{selectedLocationPartId:ae,setSelectedLocationPartId:A,setSelectHandler:N}=Le(),s=Pe(),y=(o,e)=>{const r=v[o];r&&k.replace(o,{type:r.type,props:{...r.props,locations:e}})},h=o=>{const e=v[o]?.props?.locations;return Array.isArray(e)?e:[]},R=X({keyOf:o=>`group:${o.si}:${o.index}`,readOnly:!!P,canDrop:(o,e)=>e.parentId===T(o.si).parentId&&e.slot==="groups",onDrop:(o,e)=>{y(o.si,te(h(o.si),o.index,e.index)),s.level==="city"&&p({level:"groups"})},onStep:(o,e)=>{y(o.si,te(h(o.si),o.index,e<0?o.index-1:o.index+2)),s.level==="city"&&p({level:"groups"})}}),M=X({keyOf:o=>`city:${o.si}:${o.group}:${o.index}`,readOnly:!!P,canDrop:(o,e)=>e.parentId===T(o.si).parentId&&e.slot.startsWith("cities:"),onDrop:(o,e)=>{const r=e.slot.slice(7);y(o.si,re(h(o.si),o.group,o.index,r,e.index)),p({level:"group",key:r})},onStep:(o,e)=>{y(o.si,re(h(o.si),o.group,o.index,o.group,e<0?o.index-1:o.index+2)),s.level==="city"&&p({level:"group",key:o.group})}}),z=G(v);z.current=v;const _=G(()=>{});V(()=>{N(o=>{const e=fe(o);if(!e)return;const r=z.current.findIndex(S=>S.props?.id===e.nodeId);r<0||_.current(r,{level:e.part,index:e.index})})},[N]);const l=(o,e)=>{D.current=v[o]?.props?.id??null,k.select(o),p(e),c.reveal();const r=v[o]?.props?.id;typeof r=="string"&&(e.level==="image"||e.level==="map")?A(he(r,e.index,e.level)):A(null),typeof r=="string"&&k.scrollTo(r)};return _.current=l,{renderLocationTree:(o,e,{rowClick:r,isCollapsed:S,toggleCollapse:B})=>{const x=h(e),de=ne(x),L=String(o.props.id),w=ie&&C?.props.id===L,E=n=>t(oe,{...P?{}:R.seam({place:{...T(e),index:n}})},`seam:${L}:groups:${n}`),W=(n,u)=>t(oe,{...P?{}:M.seam({place:{...j(e,n),index:u}})},`seam:${L}:cities:${n}:${u}`);return d(ke,{children:[t(I,{icon:t(ve,{size:13}),name:g("Texts"),words:f,onSelect:()=>l(e,{level:"texts"}),selected:w&&s.level==="texts",rowProps:{onClick:r(()=>l(e,{level:"texts"}))}}),de.map((n,u)=>{const F=`${L}::grp::${n.key}`,K=S(F),pe=w&&s.level==="group"&&s.key===n.key,U=n.name||n.key?De(n.key,n.name):g("Ungrouped"),H={...j(e,n.key),index:n.cards.length},Y=M.row({item:{si:e,group:n.key,index:-1},place:H,into:H,canDrag:!1},{onClick:r(()=>l(e,{level:"group",key:n.key}))}),$=R.row({item:{si:e,index:u},place:{...T(e),index:u}},Y.rowProps);return d(Q,{children:[u===0&&E(0),t(I,{icon:t(Me,{size:13}),name:U,words:f,onSelect:()=>l(e,{level:"group",key:n.key}),selected:pe,draggable:$.draggable,dragging:$.dragging,drop:$.drop??Y.drop,fold:{open:!K,label:g("group"),onToggle:()=>B(F)},actions:t(ee,{kind:"delete",label:Ie("Delete {label} group ({n} city)","Delete {label} group ({n} cities)",n.cards.length,{label:U}),onClick:()=>{y(e,$e(x,n.key)),p({level:"groups"})},children:t(Z,{size:15})}),rowProps:$.rowProps,children:t("span",{className:"es-group-count",children:n.cards.length})}),!K&&d(b,{children:[n.cards.map((m,a)=>{const i=ce(x,n.key,a),ue=w&&s.level==="city"&&s.index===i,O=String(m?.name??"")||g("City"),q=`${L}::city::${se(m)}`,J=S(q),{rowProps:ge,...ye}=M.row({item:{si:e,group:n.key,index:a},place:{...j(e,n.key),index:a}},{onClick:r(()=>l(e,{level:"city",index:i}))});return d(Q,{children:[a===0&&W(n.key,0),t(I,{icon:t(Fe,{size:13}),name:O,words:f,onSelect:()=>l(e,{level:"city",index:i}),selected:ue,...ye,fold:{open:!J,label:O,onToggle:()=>B(q)},actions:t(ee,{kind:"delete",label:g("Delete {name}",{name:O}),onClick:()=>{y(e,Te(x,n.key,a)),p({level:"group",key:n.key})},children:t(Z,{size:15})}),rowProps:ge}),!J&&d(b,{children:[t(I,{icon:t(me,{size:13}),name:g("Image"),words:f,onSelect:()=>l(e,{level:"image",index:i}),selected:w&&s.level==="image"&&s.index===i,rowProps:{onClick:r(()=>l(e,{level:"image",index:i}))}}),t(I,{icon:t(Oe,{size:13}),name:g("Map"),words:f,onSelect:()=>l(e,{level:"map",index:i}),selected:w&&s.level==="map"&&s.index===i,rowProps:{onClick:r(()=>l(e,{level:"map",index:i}))}})]}),W(n.key,a+1)]},se(m))}),d("button",{type:"button",className:"sf-add-card",onClick:()=>{const m=Ce(x,n.key);y(e,m);const a=ne(m).find(i=>i.key===n.key);p(a&&a.cards.length?{level:"city",index:ce(m,n.key,a.cards.length-1)}:{level:"group",key:n.key})},children:[t("span",{className:"sf-plus sf-plus--sm",children:"+"}),g("Add city")]})]}),E(u+1)]},F)}),d("button",{type:"button",className:"sf-add-card",onClick:()=>{const{cards:n,key:u}=Se(x);y(e,n),l(e,{level:"group",key:u})},children:[t("span",{className:"sf-plus sf-plus--sm",children:"+"}),g("Add group")]})]})},sectionPressed:o=>{o?.type===le&&p({level:"groups"})}}}export{le as LOCATIONS_TYPE,He as useLocationsTree};
@@ -0,0 +1,36 @@
1
+ export declare const SECTION_PALETTE: readonly [{
2
+ readonly role: "bg";
3
+ readonly token: "--bg";
4
+ readonly ink: false;
5
+ }, {
6
+ readonly role: "fg";
7
+ readonly token: "--fg";
8
+ readonly ink: true;
9
+ }, {
10
+ readonly role: "surface";
11
+ readonly token: "--site-surface";
12
+ readonly ink: false;
13
+ }, {
14
+ readonly role: "surface-2";
15
+ readonly token: "--site-surface-2";
16
+ readonly ink: false;
17
+ }, {
18
+ readonly role: "line";
19
+ readonly token: "--site-line";
20
+ readonly ink: true;
21
+ }, {
22
+ readonly role: "muted";
23
+ readonly token: "--fg-dim";
24
+ readonly ink: true;
25
+ }];
26
+ type PaletteEntry = (typeof SECTION_PALETTE)[number];
27
+ type InkEntry = Extract<PaletteEntry, {
28
+ ink: true;
29
+ }>;
30
+ export declare const INK: readonly InkEntry[];
31
+ export type InkRole = InkEntry["role"];
32
+ export type InkSource = Readonly<Record<InkRole, string>>;
33
+ export declare function inkStyle(source: InkSource): Record<string, string>;
34
+ export declare const ON_MEDIA_INK: InkSource;
35
+ export declare const ON_MEDIA_INK_STYLE: Readonly<Record<string, string>>;
36
+ export {};
@@ -0,0 +1 @@
1
+ const n=[{role:"bg",token:"--bg",ink:!1},{role:"fg",token:"--fg",ink:!0},{role:"surface",token:"--site-surface",ink:!1},{role:"surface-2",token:"--site-surface-2",ink:!1},{role:"line",token:"--site-line",ink:!0},{role:"muted",token:"--fg-dim",ink:!0}],l=n.filter(e=>e.ink);function i(e){const r={color:e.fg};for(const{role:o,token:t}of l)r[t]=e[o];return r}const f={fg:"var(--overlay-fg)",line:"color-mix(in srgb, var(--overlay-fg) 24%, transparent)",muted:"color-mix(in srgb, var(--overlay-fg) 76%, transparent)"},s=Object.freeze(i(f));export{l as INK,f as ON_MEDIA_INK,s as ON_MEDIA_INK_STYLE,n as SECTION_PALETTE,i as inkStyle};
@@ -1 +1 @@
1
- const a=-1,c="sf-section-accent",o="Color",E=new Set(["CategoryBar","DocTabs"]),f=new Set(["Flex"]),n=0;function r(e){return e===-1?null:typeof e=="number"&&Number.isInteger(e)&&e>=0?e:n}function u(e){return e??-1}function s(e){const t=`--theme-preset-${e}`;return{"--sf-sec-accent":`var(${t}-accent)`,"--sf-sec-accent-2":`var(${t}-accent-2)`,"--sf-sec-accent-ink":`var(${t}-accent-ink)`,"--sf-sec-bg":`var(${t}-bg, var(--theme-bg))`,"--sf-sec-fg":`var(${t}-fg, var(--theme-fg))`,"--sf-sec-surface":`var(${t}-surface, var(--theme-surface))`,"--sf-sec-surface-2":`var(${t}-surface-2, var(--theme-surface-2))`,"--sf-sec-line":`var(${t}-line, var(--theme-line))`,"--sf-sec-muted":`var(${t}-muted, var(--theme-muted))`}}function T(e){const t=r(e.sectionAccent);return t===null?null:{className:c,style:s(t)}}export{c as SECTION_ACCENT_CLASS,n as SECTION_ACCENT_DEFAULT,a as SECTION_ACCENT_INHERIT,E as SECTION_THEME_EXCLUDED,o as SECTION_THEME_GROUP_LABEL,f as SECTION_THEME_NESTED_READING,u as nestedAccentValue,r as resolveSectionAccent,s as sectionAccentVars,T as sectionThemeWrap};
1
+ import{SECTION_PALETTE as o}from"./ink.js";const r=-1,s="sf-section-accent",C="Color",f=new Set(["CategoryBar","DocTabs"]),i=new Set(["Flex"]),E=0;function a(e){return e===r?null:typeof e=="number"&&Number.isInteger(e)&&e>=0?e:E}function l(e){return e??r}function T(e){const t=`--theme-preset-${e}`,c={"--sf-sec-accent":`var(${t}-accent)`,"--sf-sec-accent-2":`var(${t}-accent-2)`,"--sf-sec-accent-ink":`var(${t}-accent-ink)`};for(const{role:n}of o)c[`--sf-sec-${n}`]=`var(${t}-${n}, var(--theme-${n}))`;return c}function p(e){const t=a(e.sectionAccent);return t===null?null:{className:s,style:T(t)}}export{s as SECTION_ACCENT_CLASS,E as SECTION_ACCENT_DEFAULT,r as SECTION_ACCENT_INHERIT,f as SECTION_THEME_EXCLUDED,C as SECTION_THEME_GROUP_LABEL,i as SECTION_THEME_NESTED_READING,l as nestedAccentValue,a as resolveSectionAccent,T as sectionAccentVars,p as sectionThemeWrap};