efficient-web-builder 16.0.1 → 17.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 +67 -0
- package/dist/components/HeroGroup.d.ts +5 -1
- package/dist/components/HeroGroup.js +1 -1
- package/dist/components/HeroSingle.js +1 -1
- package/dist/components/PartSettingsPanel.d.ts +0 -20
- package/dist/components/PartSettingsPanel.js +1 -1
- package/dist/components/PartTextBox.d.ts +2 -1
- package/dist/components/PartTextBox.js +1 -1
- package/dist/components/SectionEditor.d.ts +0 -1
- package/dist/components/SectionEditor.js +1 -1
- package/dist/components/storefront-editor.css +9 -9
- package/dist/lib/content/borders.d.ts +21 -0
- package/dist/lib/content/borders.js +1 -0
- package/dist/lib/editor-words-catalogue.d.ts +14 -12
- package/dist/lib/editor-words-catalogue.js +5 -5
- package/dist/lib/puck/blocks/general/CategoryBar/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Chart/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Countdown/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Flex/fields.js +1 -1
- package/dist/lib/puck/blocks/general/HeroGroup/fields.js +1 -1
- package/dist/lib/puck/blocks/general/HeroGroup/render.js +1 -1
- package/dist/lib/puck/blocks/general/HeroSlide/fields.js +1 -1
- package/dist/lib/puck/blocks/general/ImageBlock/fields.js +1 -1
- package/dist/lib/puck/blocks/general/LogoBlock/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Logos/fields.js +1 -1
- package/dist/lib/puck/blocks/general/SectionHeader/fields.js +1 -1
- package/dist/lib/puck/controls.d.ts +17 -0
- package/dist/lib/puck/controls.js +1 -1
- package/dist/lib/puck/field-groups.js +1 -1
- package/dist/lib/puck/part-styles.d.ts +2 -1
- package/dist/lib/puck/part-styles.js +2 -2
- package/dist/lib/puck/passes/borders.d.ts +2 -0
- package/dist/lib/puck/passes/borders.js +1 -0
- package/dist/lib/puck/passes/index.js +1 -1
- package/dist/lib/puck/passes/inspector.js +1 -1
- package/dist/lib/puck/passes/section-padding.js +1 -1
- package/dist/lib/puck/passes/types.d.ts +5 -0
- package/dist/lib/source-rules/label-vocabulary.js +3 -3
- package/dist/lib/source-rules/one-border-resolver.d.ts +4 -0
- package/dist/lib/source-rules/one-border-resolver.js +1 -0
- package/dist/lib/source-rules/support/part-slider-call-sites.js +3 -3
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as r,jsxs as L,Fragment as R}from"react/jsx-runtime";import{cloneElement as ae,useId as tt,useRef as Z,useState as se}from"react";import{useEasel as F,useSelectedFields as nt}from"efficient-easel/easel";import{say as l,editorEaselWords as S}from"../editor-words.js";import{readHidable as ce,hidableText as ue}from"./hidable.js";import{FOLD_FIELD_MARKER as U,LINK_FIELD_MARKER as de,MEDIA_FIELD_MARKER as pe,SCAFFOLD_FIELD_MARKER as fe,TEXT_FIELD_MARKER as y,foldMetaOf as X,textFieldIdentifier as ot}from"./field-markers.js";import rt from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as it,CORNER_RADIUS_MAX as me,CORNER_RADIUS_MIN as v}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as lt,IMAGE_CORNERS_LABEL as at}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as st}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as ct,GALLERY_LAYOUTS as w,GALLERY_LAYOUT_KEYS as he}from"../content/gallery-layout.js";import{anchorSiblingsOf as ut,HERO_GROUP_PLACEMENTS as dt,HERO_GROUP_PLACEMENT_DEFAULT as pt,normalisePlacement as ft,placementPoints as ge}from"../hero-group-placement.js";import mt from"../../components/KeepHint.js";import{AdjustIcon as ht,AlignLeftIcon as gt,AlignSeparateIcon as bt,AnimationIcon as be,BackgroundIcon as xt,BlockSectionIcon as St,CartIcon as Ct,ColumnWidthsIcon as xe,ColumnsIcon as It,CornerIcon as _t,DirectionDownIcon as yt,DirectionLeftIcon as Et,DirectionRightIcon as Tt,DirectionUpIcon as Rt,DollarIcon as Ot,FinishIcon as Nt,GapIcon as Se,GridIcon as At,GroundIcon as Lt,HashIcon as Ce,HeightIcon as Ft,ImageIcon as vt,ListIcon as wt,LocationIcon as Q,PaddingBottomIcon as Ie,PaddingLeftIcon as _e,PaddingRightIcon as ye,PaddingTopIcon as Ee,PageIcon as Te,PhoneIcon as Pt,PlacementIcon as kt,ProductSizeIcon as Dt,RotateIcon as Bt,SquareIcon as Ht,TypeIcon as Gt,WidthIcon as Mt,WrapIcon as Wt}from"efficient-easel/icons";import{FieldGlyph as Re}from"../../components/FieldGlyph.js";import{resolvePageBackground as Kt}from"../content/page-background.js";import{CORNER_SIDES as Oe,CORNER_SIDE_POINTS as Ut,hasOwnSectionCorners as Xt,normalizeCornerSides as Ne}from"../content/section-corners.js";import{SECTION_MOTION_NONE as $t,SECTION_MOTION_OPTIONS as zt}from"../content/section-animation.js";import{enclosingSectionProps as Ae}from"./enclosing-section.js";import{SettingsDefaultReset as C,SettingsField as h,SettingsGroupHead as Vt,SettingsGroupSub as jt,SettingsSegmented as Yt,SettingsSwitch as qt}from"efficient-easel/panel";import{FieldSelect as Jt,ListField as Zt}from"efficient-easel/fields";import{AlignmentGrid as Qt,Checkbox as en,CornersInput as tn,DateTimePicker as nn,FOCAL_DEFAULT as Le,Slider as on,Tooltip as $}from"efficient-shell/ui";import{ColourControl as Fe}from"./ColourControl.js";import ve from"./MarkupToolbar.js";import{deviceField as O}from"./device-fields.js";import{NO_CONTROL_FIELD as rn,NoControlMark as ln,noControlField as we}from"./panel-no-control-mark.js";import{OWN_BOX_FIELD as an}from"./own-box.js";import{phoneKey as z,resolvePhoneValue as ee}from"./phone-override.js";import{SuppressibleText as sn}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as cn,CARD_OUTLINE_OPTIONS as un,DEFAULT_CARD_INDEX_FORMAT as dn,DEFAULT_CARD_OUTLINE as pn}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as fn,DEFAULT_COVER_INDEX as mn}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as hn}from"./text-control-kinds.js";import gn from"../../components/ImageFocusRow.js";import bn from"../../components/MediaUploadField.js";import xn from"../../components/MultiSelectField.js";import Sn from"../../components/SectionThemePicker.js";import Cn from"../../components/SearchSelectField.js";import In from"../../components/StorefrontLinkField.js";import Pe from"../../components/UiIcon.js";import{SECTION_PADDING as _}from"../content/section-padding.js";import{hasPhoneHeight as _n,resolveSectionMinHeight as yn}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as En,SECTION_MIN_HEIGHT_GROUP_LABEL as G,SECTION_SCREEN_PCT as Tn}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as Rn,containerDirectionPoints as On,resolveContainerDirection as ke}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Nn,BOX_BLOCK_SPACING_LABEL as An,BOX_BLOCK_SPACING_POINTS as De,BOX_JUSTIFY_POINTS as Be,BOX_PHONE_ROW_LABEL as Ln,BOX_PHONE_ROW_MAX as Fn,BOX_PHONE_ROW_MIN as He,BOX_SHARE_LABEL as Ge,BOX_SHARE_POINTS as te,BOX_WRAP_LABEL as vn,BOX_WRAP_POINTS as Me}from"../content/box-layout.js";import{usePreviewHeader as V}from"../../components/PreviewHeaderContext.js";import{CONTAINER_GAP as ne,CONTAINER_GAP_BUILT_IN as wn,GAP_FIELD_CONTAINER as Pn,hasOwnContainerGap as kn,resolveContainerGap as Dn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as Bn,CARD_IMAGE_BG_OFF as Hn,CARD_IMAGE_BG_SWATCH_NAMES as Gn,CARD_IMAGE_BG_SWATCHES as Mn,isCardImageBackgroundInheriting as Wn,cardImageBackgroundChoice as Kn,THEME_CARD_IMAGE_BG as Un}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as Xn,SECTION_BG_SWATCHES as $n,SECTION_BG_SWATCH_NAMES as zn,THEME_SECTION_BG as Vn,isSectionBackgroundInheriting as jn}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as Yn}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as qn,TYPE_SIZE_INHERIT as Jn,isTypeSizeInheriting as Zn}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as Qn,WIDTH_CHOICE_LABEL as eo,WIDTH_INHERIT as to,resolveWidth as no,sectionRunsFullWidth as We}from"../content/section-width.js";import{useFoldHeadingLevel as Ke}from"./panel-heading-scope.js";import{withStyleKind as oo}from"efficient-easel/style-clipboard";function M(e){for(const[t,n]of Object.entries(e))n&&typeof n=="object"&&!X(n)&&oo(n,`section:${t}`);return e}function Qr({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function Ue(){return null}function ro(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(Ue,{},e)}function io(e){return e.type===Ue}function P(e){return io(e)?void 0:e}function k(e,t){return l("{value} from {from}",{value:e,from:t})}function lo(){const{appState:e}=F(i=>i),t=e.data.root?.props??{},{mode:n,pageWidth:o}=no(t,"full");return n==="page"?k(`${o}px`,l("the page")):n==="contained"?k(l("Contained"),l("the page")):k(l("Full"),l("the page"))}function ao(){const{blockGap:e}=V();return e===null?l("this container's own spacing"):k(`${e}px`,l("Site styles"))}function so({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:ao(),onReset:t})}function co({inherited:e,onReset:t,label:n}){return r(C,{words:S()?.panel,label:l(n),changed:!e,detail:lo(),onReset:t})}function D({value:e,onChange:t,label:n,placeholder:o,hint:i,multiline:a,hideable:c=!0,markup:s=!0}){const{text:u,hidden:p}=ce(e),m=Z(null),d=Z(null),f=T=>t(c?{text:T,hidden:p}:T),g=()=>t({text:u,hidden:!p}),b=c&&p,E=tt(),x=i?ho(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(mt,{children:l(i)}):void 0,K=p?l("Show {label} on the slide",{label:l(n)}):l("Hide {label} on the slide",{label:l(n)});return r(h,{label:l(n),icon:r(Gt,{}),htmlFor:E,className:b?"is-hidden":void 0,hint:x,action:c?r($,{content:K,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":p,"aria-label":K,onClick:g,children:p?r(Pe,{name:"eye-off",size:14}):r(Pe,{name:"eye",size:14})})}):void 0,children:L("div",{className:"sf-copybox",children:[s&&r(ve,{target:a?d:m,value:u,onChange:f}),a?r("textarea",{id:E,ref:d,value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)}):r("input",{id:E,ref:m,type:"text",value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>f(T.target.value)})]})})}function ei(e,t){return{...e,[fe]:t}}function ti(e){const t=e[y];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[y]:{...t,offPage:!0}}}function ni(e){return!e||typeof e!="object"?!1:e[y]?.offPage===!0}function oi(e){const t=e[y];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[y]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as pl,SCALAR_TEXT_CONTROLS as fl}from"./text-control-kinds.js";function ri(e,t){if(!e[y])throw new Error("inOwnBox: the field holds no authored text");const{[rn]:o,...i}=e;return{...i,[an]:!0,render:t}}const uo=new Set(hn),B=(e,t)=>{const n={...t,[y]:e};if(!uo.has(e.control))return n;const o=t.render;return{...we(n,"authored-copy"),render:i=>r(sn,{name:i.name,children:o(i)})}},ii="Everything else on this block comes from the linked post. Unlink it to edit by hand.",po="Select a word, then press the highlighter.",fo="A short name so a link can jump straight to this section, like yoursite.com/page#about.",mo=new Set([po]),ho=e=>mo.has(e);function li(e,t,n){return B({control:"text",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n})})}function ai(e,t,n){return B({control:"textarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0})})}function go(e,t,n){return B({control:"plainText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1,markup:!1})})}function si(e,t,n){return B({control:"copyText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1})})}function ci(e){return{type:"custom",[de]:{label:e},render:({value:t,onChange:n})=>r(In,{value:ue(t),onChange:n,label:e})}}function ui(e,t,n){return B({control:"plainTextarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0,hideable:!1})})}const di={Design:ht,Animation:be};function pi(e,t){return e.includes("Design")?t!=="Design":null}function bo({label:e}){return r(Vt,{title:l(e),level:Ke(1)})}function xo({level:e,label:t}){return e===1?r(bo,{label:t}):r(Io,{label:t})}function Xe(e,t){return{type:"custom",[U]:{label:e,level:t},render:()=>r(xo,{level:t,label:e})}}function I(e){return Xe(e,2)}function fi(e){return{type:"custom",render:()=>r(So,{text:e})}}function So({text:e}){return r("p",{className:"sf-note",children:l(e)})}function mi(e){return Xe(e,1)}function hi(e){return X(e)!==null&&e?.tabs!==void 0}const $e=new Map;function gi(e,t){const n=`${e}\0${t?t.join(""):""}`,o=$e.get(n)??{type:"custom",tabs:t,[U]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(R,{})};return $e.set(n,o),o}function bi(e){return X(e)!==null&&e?.designGroup!==void 0}const ze=new Map;function xi(e){const t=ze.get(e)??{type:"custom",[U]:{label:e,level:1},designGroup:e,marker:!0,...e==="Content"?{}:{fold:e},render:()=>r(R,{})};return ze.set(e,t),t}function Co(e){const t=e;return t?.marker===!0&&typeof t.fold=="string"?t.fold:null}function Si(e,t){return Co(e)===t?e:{...e,marker:!0,fold:t,render:()=>r(R,{})}}function Ci(e){const t=e;if(t.marker===!0&&t.fold===void 0)return e;const{fold:n,...o}=e;return{...o,marker:!0,render:()=>r(R,{})}}function Io({label:e}){return r(jt,{title:l(e),level:Ke(2)})}function Ve({swatches:e,current:t,onPick:n,names:o}){const i=e.find(s=>s.toLowerCase()===t.toLowerCase()),a=i?o?.[i]:void 0,c=a?l(a):t;return L("div",{className:"sf-swatches",children:[e.map(s=>{const u=o?.[s]?l(o[s]):s;return r($,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===s.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===s.toLowerCase()?"is-active":""}`,style:{background:s},onClick:()=>n(s),"aria-label":u})},s)}),r("span",{className:"sf-swatch-hex",children:c})]})}function Ii(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=jn(n,t);return r(h,{label:l(e),icon:r(xt,{}),changed:!i,action:r(C,{words:S()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>o(Xn)}),children:Ve({swatches:$n,current:i?Vn:n??t??"",onPick:o,names:zn})})}}}function _o(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=n,a=Wn(i,t);return r(h,{label:l(e),icon:r(Lt,{}),changed:!a,action:r(C,{words:S()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>o(Bn)}),children:Ve({swatches:Mn,current:a?Un:Kn(i,t),onPick:o,names:Gn})})}}}function _i(e=n=>n,t){return M({_gSectionTheme:I(Yn),sectionAccent:{type:"custom",render:({value:n,onChange:o})=>r(Sn,{value:e(n),onChange:o,followLabel:t})}})}function W({min:e,max:t,step:n,value:o,onChange:i,suffix:a="",readout:c=!0,notch:s,ariaLabel:u,disabled:p=!1}){const m=s!==void 0&&Number.isFinite(s)&&s>=e&&s<=t;return r("div",{className:m?"sf-slider has-notch":"sf-slider",style:m?{"--sf-notch":(s-e)/(t-e)}:void 0,children:r(on,{min:e,max:t,step:n,value:o,suffix:a||void 0,showInput:c,label:u===void 0?void 0:l(u),disabled:p,size:"sm",className:"sf-slider-track",onChange:d=>{d!==null&&d!==o&&i(d)}})})}function H(e,t,n,o,i,a,c="",s){return{type:"custom",render:u=>r(h,{label:l(e),icon:P(t),action:s?s("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:W({min:n,max:o,step:i,value:typeof u.value=="number"?u.value:a,suffix:c,ariaLabel:e,onChange:u.onChange})})}}function je(e,t){const{min:n,max:o,step:i=1,unsetLabel:a,hint:c,restTrack:s,unsetMark:u,icon:p}=t;return{type:"custom",render:({value:m,onChange:d})=>{const f=typeof m=="number"?m:null,g=f===null;return r(h,{label:l(e),icon:p?P(p):void 0,value:g?u||a===void 0?void 0:l(a):`${f}px`,changed:!g,action:u?ae(u,{changed:!g,onReset:()=>d(null)}):r(C,{words:S()?.panel,label:l(e),changed:!g,onReset:()=>d(null)}),hint:typeof c=="string"?l(c):c,children:s?s({min:n,max:o,step:i,px:f,label:e,onChange:d}):W({min:n,max:o,step:i,value:f??n,readout:!1,ariaLabel:e,onChange:d})})}}}function yi(e){const t=H("Gap",r(Se,{}),ne.min,ne.max,ne.step,wn[e],"px",(n,o)=>r(so,{inherited:!kn(e,n),onReset:()=>o(void 0),label:"Gap"}));return{type:"custom",[Pn]:e,render:n=>t.render({...n,value:Dn(e,n.value,n.field?.siteGap),storedValue:n.value,onChange:o=>n.onChange(o)})}}const j="Corners";function oe(e){return{type:"custom",render:({value:t,onChange:n})=>{const o=typeof t=="number"&&Number.isFinite(t)?t:null,i=o!==null;return r(h,{label:l(j),icon:r(_t,{}),changed:i,action:ae(e.mark,{changed:i,onReset:()=>n(null)}),hint:e.hint,children:r(Eo,{tier:e,px:o,onRadius:n})})}}}function yo(e){let t=null;try{t=nt()}catch{t=null}return[t?.values?.[e],n=>t?.onChange(e,n)]}function Eo({tier:e,px:t,onRadius:n}){const o=e.useFollowed(),i=e.useClosedReason?e.useClosedReason():null,[a,c]=yo(e.sidesKey),s=Ne(a)??[...Oe];return r(tn,{label:l(j),value:s,corners:Ut,onChange:u=>{const p=Ne(u)??[];c(p.length===Oe.length?null:p)},radius:t,onRadiusChange:n,radiusMin:v,radiusMax:me,radiusStep:e.step??1,radiusPlaceholder:String(o),disabled:i!==null,disabledReason:i??void 0})}function Ye(){return we({type:"custom",render:()=>r(ln,{})},"always")}function To({label:e,changed:t=!1,onReset:n=()=>{}}){const{cornerRadiusPx:o}=V(),i=typeof o=="number"?`${o}px`:l("not set");return r(C,{words:S()?.panel,label:l(e),changed:t,detail:o==null?l("the built-in corners"):k(i,l("Site styles")),onReset:n})}function Ro(){const{cornerRadiusPx:e}=V();return typeof e=="number"?e:v}function Oo(){return oe({sidesKey:"sectionCornerSides",useFollowed:Ro,useClosedReason:()=>Je()?l(qe):null,mark:r(To,{label:j}),hint:r(No,{})})}const qe="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function Je(){return We(Y())}function No(){return r(R,{children:Je()?qe:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function Ei(){return M({_gShape:I("Shape"),sectionCorners:Oo(),sectionCornerSides:Ye()})}function Ti(){return{_gMotion:I("Motion"),sectionAnimation:le("Entrance",r(be,{}),[...zt],$t)}}function re(){let e=null;try{const{appState:t,selectedItem:n}=F(i=>i),o=n?.props?.id?String(n.props.id):void 0;e=o?Ae(t?.data,o):null}catch{e=null}return e!==null&&We(e)}function Ze(e){const{cornerRadiusPx:t}=V(),n=re(),o=typeof t=="number"?t:e;let i=null;try{const{appState:c,selectedItem:s}=F(p=>p),u=s?.props?.id?String(s.props.id):void 0;i=u?Ae(c?.data,u):null}catch{i=null}if(n||!i)return o;const a=i.sectionCorners;return Xt(a)?a:o}function Ao({label:e,changed:t=!1,onReset:n=()=>{}}){const o=re(),i=Ze(v),a=o?"Site":"Section";return r(C,{words:S()?.panel,label:l(e),changed:t,detail:k(`${i}px`,o?l("Site styles"):l("the section")),onReset:n})}function Lo(){return r(R,{children:re()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function Fo(){return oe({sidesKey:"cardCornerSides",useFollowed:()=>Ze(v),mark:r(Ao,{label:j}),hint:r(Lo,{})})}function vo(){return{type:"custom",render:()=>r(rt,{})}}function Ri(){return{_gShape:I("Shape"),cardCorners:Fo(),cardCornerSides:Ye(),cardCornersApplyAll:vo()}}function Oi(){return N("Justify",r(bt,{}),Be,Be[0].value)}function Ni(){return N("Item alignment",r(gt,{}),Nn,"stretch")}function Ai(){return N(vn,r(Wt,{}),Me,Me[0].value)}function Li(){return{type:"custom",render:({value:e,onChange:t})=>{const n=te.find(o=>o.value===e)??te[0];return r(h,{label:l(Ge),icon:r(xe,{}),value:l(n.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(Ge),children:te.map(o=>r($,{content:l(o.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":n.value===o.value,"aria-label":l(o.label),onClick:()=>t(o.value),children:r("span",{className:"sf-gallery-pic",children:wo(o.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},o.value))})})}}}function wo(e){if(!e)return[3,4];const t=e.reduce((n,o)=>n+o,0);return e.map(n=>Math.round(n/t*12))}function Fi(){return N(An,r(Se,{}),De,De[0].value)}function vi(){return H(Ln,r(Pt,{}),He,Fn,1,He)}function wi(e){const t=le(Rn,ro("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),On(e),ke(e,void 0));return{type:"custom",render:n=>t.render({...n,value:ke(e,n.value),onChange:o=>n.onChange(o)})}}function Pi(e,t,n,o,i,a){return{type:"custom",render:({value:c,onChange:s})=>r(h,{label:l(e),icon:r(Re,{noun:a}),action:r(C,{words:S()?.panel,label:l(e),changed:!Zn(c),detail:l("the Text style in Site styles"),onReset:()=>s(Jn),defaultAction:{onPress:()=>s(qn),title:l("Keep this section's own built-in size"),icon:r(St,{})}}),children:W({min:t,max:n,step:o,value:typeof c=="number"?c:i,suffix:"px",ariaLabel:e,onChange:s})})}}function ki(){return{_gCellWidth:I("Cell width"),gridSpan:N("Positions",r(xe,{}),[{label:"Auto",value:""},...Array.from({length:st},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function Y(){let e=null;try{e=F(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Po({min:e,max:t,step:n,px:o,label:i,onChange:a,desktopKey:c,fallback:s}){const u=Y()[c],p=ee(void 0,u,s);return r(R,{children:W({min:e,max:t,step:n,value:ee(o,u,s),readout:!1,ariaLabel:i,notch:p,onChange:a})})}function ko({label:e,desktopKey:t,fallback:n,changed:o=!1,onReset:i=()=>{}}){const a=Y()[t],c=ee(void 0,a,n);return r(C,{words:S()?.panel,label:l(e),changed:o,detail:l("{value} on desktop",{value:`${c}px`}),onReset:i})}function Do(e){return je(e.label,{icon:e.icon,min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(ko,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Po,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const Bo={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"},Ho={Top:Ee,Bottom:Ie,Left:_e,Right:ye},Go=e=>{const t=Ho[e];return r(t,{})};function Di(e={}){const t=e.keys?.top??"sectionPaddingTop",n=e.keys?.bottom??"sectionPaddingBottom",o=e.group!==!1,i=x=>Bo[x],a=x=>H(i("Top"),r(Ee,{}),_.min,_.max,_.step,x,"px"),c=(x,K,T,J=_)=>O("mobile",Do({label:i(x),icon:Go(x),desktopKey:K,min:J.min,max:J.max,step:J.step,fallback:T})),s=e.top??_.min,u=e.bottom??_.min,p="sectionPaddingLeft",m="sectionPaddingRight",d=e.sideBounds??_,f=e.side??d.min,g=e.sidePhone??f,b=e.phone===!0,E=x=>b?O("desktop",x):x;return M({...o?{_gSpacing:I("Padding")}:{},[t]:E(a(s)),...b?{[z(t)]:c("Top",t,s)}:{},...e.only==="top"?{}:{[n]:E(H(i("Bottom"),r(Ie,{}),_.min,_.max,_.step,u,"px")),...b?{[z(n)]:c("Bottom",n,u)}:{}},...e.sides?{[p]:E(H(i("Left"),r(_e,{}),d.min,d.max,d.step,f,"px")),...b?{[z(p)]:c("Left",p,g,d)}:{},[m]:E(H(i("Right"),r(ye,{}),d.min,d.max,d.step,f,"px")),...b?{[z(m)]:c("Right",m,g,d)}:{}}:{}})}const Mo={contained:"Contained",page:"Page",full:"Full"},q="Width";function Bi(e,t=Qn,n=!0){const o=t.map(i=>({label:eo[i]??Mo[i],value:i}));return M({...n?{_gWidth:I(q)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(q),icon:r(Mt,{}),action:n?r(co,{inherited:a?.inherited??!1,onReset:()=>i(to),label:q}):void 0,children:ie({options:o,value:a?.currentValue||e,onChange:i,ariaLabel:q})})}})}function Hi(){const e=o=>({type:"custom",render:({value:i,onChange:a})=>r(h,{label:G,icon:P(r(Ft,{})),action:o?o(a):void 0,children:ie({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:G})})}),t=()=>({type:"custom",render:({value:o,onChange:i,field:a})=>{const c=a?.unit==="%"?"%":"px",s=c==="%"?Tn:En;return r("div",{className:"sf-field",children:W({min:s.min,max:s.max,step:s.step,value:typeof o=="number"?o:s.fallback,suffix:c,ariaLabel:G,onChange:i})})}}),n=()=>le("Unit",r(Ce,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return M({_gHeight:I(G),sectionHeightMode:O("desktop",e()),sectionHeightValue:O("desktop",t()),sectionHeightUnit:O("desktop",n()),sectionHeightModePhone:O("mobile",e(o=>r(Wo,{onClear:()=>o(void 0)}))),sectionHeightValuePhone:O("mobile",t()),sectionHeightUnitPhone:O("mobile",n())})}function Wo({onClear:e}){const t=Y(),n=_n(t),o=yn(t),i=l("{value} on desktop",{value:o.mode==="auto"?l("Auto"):`${o.value}${o.unit}`});return r(C,{words:S()?.panel,label:l(G),changed:n,detail:i,onReset:e})}function Gi(){return{_gAnchor:I("Anchor"),anchor:go("Anchor name","e.g. about",fo)}}function Mi(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=`${a??c??e}-datetime`,u=Date.parse(typeof o=="string"?o:"");return r(h,{label:l(e),icon:t,htmlFor:s,hint:n===void 0?void 0:l(n),children:r(nn,{id:s,value:Number.isFinite(u)?new Date(u):null,onChange:p=>i(p?p.toISOString():"")})})}}}function A(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=typeof o=="boolean"?o:t,u=`${a??c??e}-label`;return r(h,{label:l(e),labelId:u,icon:n,action:r(qt,{checked:s,onChange:i,ariaLabelledBy:u})})}}}function Wi(){return{type:"custom",render:({value:e,onChange:t,id:n,name:o})=>{const i=`${String(n??o??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Te,{}),htmlFor:i,action:r(Fe,{id:i,label:"Background",value:Kt(e),onChange:t})})}}}function Ki(e,t){return{type:"custom",render:({value:n,onChange:o,id:i})=>{const a=typeof n=="boolean"?n:t,c=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:c,className:"sf-checkbox",action:r(en,{id:c,checked:a,onChange:o})})}}}function Ui(e,t){return{type:"custom",render:({value:n,onChange:o})=>r(h,{label:l(e),action:Fe({value:n||t,onChange:o,label:e})})}}const Ko=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function Qe({label:e,value:t,onChange:n,points:o=Ko}){const i=o.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(Qt,{label:l(e),value:t,points:i,onChange:n})}function Xi(e,t=Le,n="mediaImage"){return{type:"custom",render:({value:o,onChange:i})=>r("div",{className:"sf-focal-row",children:r(Uo,{label:e,value:o||t,onChange:i,imageProp:n})})}}function Uo({label:e,value:t,onChange:n,imageProp:o}){const{selectedItem:i}=F(c=>c),a=i?.props?.[o];return r(gn,{label:e,value:t,onChange:n,image:typeof a=="string"?a:void 0})}const Xo=ge([]);function $i(e,{stacking:t,fallback:n=pt}){return{type:"custom",render:({value:o,onChange:i})=>{const a=dt.includes(o)?o:n;return t?r($o,{label:e,value:a,onChange:i}):et({label:e,value:a,onChange:i,points:Xo})}}}function $o({label:e,value:t,onChange:n}){const{appState:o,selectedItem:i}=F(s=>s),a=i?.props?.id?String(i.props.id):void 0,c=a?ut(o?.data,a):[];return et({label:e,value:t,onChange:n,points:ge(c,a)})}function et({label:e,value:t,onChange:n,points:o}){const i=o.find(a=>a.disabled);return r(h,{label:l(e),icon:r(kt,{}),hint:i?.title?l(i.title):void 0,children:Qe({label:e,value:ft(t),onChange:n,points:o})})}const zi={top:r(Rt,{}),right:r(Tt,{}),bottom:r(yt,{}),left:r(Et,{})};function Vi(e,t,n,o,i,a){const c=m=>t.find(d=>d.value===m),s=m=>({value:m,label:"",disabled:!0,title:o}),u=m=>{const d=t.find(g=>g.cell===m);if(!d)return s(`missing-${m}`);const f=a?.[m];return f?{value:d.value,label:d.label,icon:f}:{value:d.value,label:d.label}},p=[s("corner-top-left"),u("top"),s("corner-top-right"),u("left"),s("centre"),u("right"),s("corner-bottom-left"),u("bottom"),s("corner-bottom-right")];return{type:"custom",render:({value:m,onChange:d})=>{const f=t.some(g=>g.value===m)?m:n;return r(h,{label:l(e),icon:i,value:c(f)?.label?l(c(f).label):"",children:Qe({label:e,value:f,onChange:d,points:p})})}}}const zo="\0note";function N(e,t,n,o,i){return{type:"custom",options:n,fallback:o,...i?{note:i}:{},render:({value:a,onChange:c,field:s})=>{const u=s.options??n,p=s.fallback??o,m=u.some(d=>d.value===a)?a:p;return r(h,{label:l(e),icon:P(t),children:r(Jt,{value:m,ariaLabel:l(e),onChange:c,options:[...i?[{label:l(i),value:zo,disabled:!0}]:[],...u.map(d=>({label:l(d.label),value:d.value}))]})})}}}function ji(e,t,n){return{type:"custom",options:t,render:({value:o,onChange:i,field:a})=>r(xn,{label:e,options:(a.options??t).map(c=>({...c,label:l(c.label)})),value:Array.isArray(o)?o:[],onChange:i,...n?{emptyLabel:l(n)}:{}})}}function Yi(e,t,n,o){return{type:"custom",options:t,fallback:n,render:({value:i,onChange:a,field:c})=>r(Cn,{label:e,options:(c.options??t).map(s=>({...s,label:l(s.label)})),fallback:c.fallback??n,value:i,onChange:a,placeholder:o===void 0?void 0:l(o)})}}function qi(e,t={}){return{type:"custom",render:({value:n,onChange:o})=>{const i={value:n,onChange:o,...t};return r(e,{...i})}}}function ie({options:e,value:t,onChange:n,ariaLabel:o,disabled:i=!1}){return r(Yt,{options:e.map(a=>a.picture?{id:a.value,label:a.picture,title:l(a.title??a.label)}:{id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)}),value:t,onChange:n,ariaLabel:l(o),disabled:i})}const Ji=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function le(e,t,n,o){const i=n.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:c,field:s})=>r(h,{label:l(e),icon:P(t),children:ie({options:i,value:i.some(u=>u.value===a)?a:a||s?.currentValue||o,onChange:c,ariaLabel:e})})}}function Zi(e,t,n){return{type:"custom",[pe]:!0,render:({value:o,onChange:i})=>r(bn,{value:o||"",onChange:i,label:e,accept:t,placeholder:n})}}const Qi={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function el({value:e,onChange:t,label:n}){const o=e||{},i=!!o.pending,a=i?"var(--fg-dim, #888)":o.ok?"#1d9e75":"#d85a30",c=(s,u)=>t({...o,[s]:u===""?void 0:Number(u)});return L(h,{label:l(n),icon:r(Q,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...o,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),o.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(o.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...o,manual:!o.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:o.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),o.manual&&L("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof o.lat=="number"?o.lat:"",onChange:s=>c("lat",s.target.value)})}),r(h,{label:l("Longitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof o.lng=="number"?o.lng:"",onChange:s=>c("lng",s.target.value)})})]})]})}function Vo(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function jo(e,t,n){const o=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?o:o.map((i,a)=>a===t?{text:n}:i)}function tl(e,t){return e===null?null:t>e?e:null}function Yo(e,t,n){if(n===null||n>=t.length)return null;for(let o=0;o<n;o+=1)if(e[o]!==t[o])return null;return e[n]!==t[n]&&t.includes(e[n])||e[n]!==t[n]&&t.length!==e.length?null:n}const nl={label:"Ticker items",icon:r(wt,{})};function ol(e,t,n,o){return{type:"custom",[y]:{control:"textList",label:e,placeholder:n,itemKey:"text",rendering:o},render:({value:i,onChange:a})=>r(qo,{label:e,icon:P(t),items:Array.isArray(i)?i:[],placeholder:n,onChange:a,markup:o==="markup"})}}function qo({label:e,icon:t,items:n,placeholder:o,onChange:i,markup:a=!1}){const c=Z(null),[s,u]=se(null),p=d=>d.map(f=>({text:f?.text??""})),m=d=>{const f=Yo(n,d,s);f===null&&(c.current=null),u(f),i(p(d))};return r(Zt,{label:l(e),icon:t,noun:l("item"),items:n,onChange:m,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(ve,{target:c,value:Vo(n,s),onChange:d=>i(jo(n,s??-1,d)),disabled:s===null,label:s===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:s+1})}):void 0,renderRow:(d,f,g)=>r("input",{type:"text",className:a&&s===f?"sf-list-marking":void 0,value:d?.text??"",placeholder:l(o),"aria-label":l("{label} {n}",{label:l(e),n:f+1}),onChange:b=>g({text:b.target.value}),onFocus:b=>{c.current=b.currentTarget,u(f)}})})}function rl(e,t){const n=`${e.label} — row ${t+1}`;return B({control:"plainText",label:n,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:o,onChange:i})=>r(D,{value:o,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function il(e){return{_gCards:I("Cards"),coverIndex:N("Cover image",r(vt,{}),fn,String(mn),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:_o("Image background",Hn),cardImage:Jo(),spinOnHover:A("Rotate on hover",e?.spinDefault??!0,r(Bt,{}))}}function ll(){return{outline:N("Card outline",r(Ht,{}),un,pn),indexBadge:N("Card number",r(Ce,{}),cn,dn),showBadge:A("Product badge",!0,r(Re,{noun:"tag"}))}}function al(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:I("Show on a card"),showCardPrice:A("Price",!0,r(Ot,{})),showCardFinishes:A("Finish swatches",!0,r(Nt,{})),showCardSizes:A("Sizes",t,r(Dt,{})),showCardBuy:A("Buy button",t,r(Ct,{})),showCardPage:A("Page button",t,r(Te,{}))}}function Jo(){return je("Card image",{min:v,max:me,step:it,hint:"Rounds the picture. The card's own corner is in Site styles."})}function sl(){return oe({sidesKey:"cornerSides",step:lt,useFollowed:()=>v,mark:r(Zo,{label:at}),hint:l("Rounds the picture. Left alone it stays square.")})}function Zo({label:e,changed:t=!1,onReset:n=()=>{}}){return r(C,{words:S()?.panel,label:l(e),changed:t,onReset:n})}function cl(){return{type:"custom",render:({value:e,onChange:t})=>r(Qo,{value:typeof e=="string"?e:"",onChange:t})}}function Qo({value:e,onChange:t}){const[n,o]=se(null),i=he.filter(c=>n===null||w[c].across===n),a=e&&e in w?w[e]:null;return L(R,{children:[r(h,{label:l("Photos in a row"),icon:r(It,{}),children:L("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":n===null,onClick:()=>o(null),children:l("All")}),ct.map(c=>r("button",{type:"button","aria-pressed":n===c,onClick:()=>o(c),children:c},c))]})}),r(h,{label:l("Layout"),icon:r(At,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:he.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(c=>r($,{content:l(w[c].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===c,"aria-label":l(w[c].label),onClick:()=>t(e===c?"":c),children:r("span",{className:"sf-gallery-pic",children:w[c].desktop.map(([s,u],p)=>r("i",{style:{gridColumn:`span ${s}`,gridRow:`span ${u}`}},p))})})},c))})})]})}export{fo as ANCHOR_HINT,ii as BOUND_TO_POST_NOTE,di as BUCKET_ICONS,Qi as CUSTOM_FIELD_MEDIA,el as CoordsField,zi as EDGE_ARROWS,Le as FOCAL_DEFAULT,Ko as FOCAL_POINTS,U as FOLD_FIELD_MARKER,Qe as FocalPicker,Io as GroupLabel,po as HIGHLIGHT_HINT,D as HidableTextField,de as LINK_FIELD_MARKER,Qr as Label,pe as MEDIA_FIELD_MARKER,Ji as MEDIA_TYPE_OPTIONS,So as PanelNoteLine,et as PlacementGridView,fe as SCAFFOLD_FIELD_MARKER,fl as SCALAR_TEXT_CONTROLS,qe as SECTION_BLEEDS_HINT,bo as SectionHeading,ie as Segmented,so as SiteGapDefaultReset,W as Slider,Ve as Swatches,pl as TEXT_CONTROL_KINDS,y as TEXT_FIELD_MARKER,nl as TICKER_ITEMS_ROW,qo as TextListField,co as WidthDefaultReset,Yo as aimAfterListChange,Gi as anchorFields,k as backTo,Ii as backgroundField,Ni as boxAlignField,Fi as boxBlockSpacingField,Oi as boxJustifyField,vi as boxPhoneRowField,Li as boxShareField,Ai as boxWrapField,gi as bucketHeader,Fo as cardCornersField,_o as cardImageBackgroundField,Jo as cardImageField,il as cardMediaFields,Ri as cardShapeFields,al as cardShowFields,ll as cardStyleFields,ki as cellWidthFields,Ki as checkbox,Ui as colorInput,si as copyText,Ye as cornerSidesField,oe as cornersRowField,Mi as dateTime,xi as designGroupHeader,wi as directionField,Vi as edgePad,pi as entriesHiddenForTab,Xi as focalPicker,tl as focusAfterRemove,Si as foldMarker,X as foldMetaOf,Co as foldTitleOf,cl as galleryLayoutField,yi as gapField,I as group,Hi as heightFields,ue as hidableText,ho as hintIsWhileTyping,P as iconOf,sl as imageCornersField,ri as inOwnBox,hi as isBucketHeader,bi as isDesignGroupHeader,io as isNoGlyph,ci as linkField,ji as multiSelect,ro as noGlyph,Wi as pageBackgroundField,fi as panelNote,Do as phoneOverrideField,$i as placementField,go as plainText,ui as plainTextarea,je as pxField,Ci as quietMarker,ce as readHidable,Vo as rowText,Yi as searchSelect,mi as section,Ti as sectionAnimationFields,Oo as sectionCornersField,Ei as sectionShapeFields,_i as sectionThemeFields,le as segmented,N as select,jo as setRowText,Pi as sizeField,H as slider,qi as sourceField,Di as spacingFields,li as text,ot as textFieldIdentifier,ni as textFieldOffPage,ol as textList,rl as textListRowField,ai as textarea,A as toggle,Zi as upload,lo as usePageWidthDetail,ao as useSiteGapDetail,Bi as widthField,oi as withIdentifier,ti as withOffPage,ei as withScaffold};
|
|
1
|
+
"use client";import{jsx as r,jsxs as P,Fragment as O}from"react/jsx-runtime";import{cloneElement as ue,useId as ct,useRef as ee,useState as $}from"react";import{useEasel as w,useSelectedFields as de}from"efficient-easel/easel";import{say as l,editorEaselWords as y}from"../editor-words.js";import{readHidable as pe,hidableText as fe}from"./hidable.js";import{FOLD_FIELD_MARKER as z,LINK_FIELD_MARKER as me,MEDIA_FIELD_MARKER as he,SCAFFOLD_FIELD_MARKER as ge,TEXT_FIELD_MARKER as I,foldMetaOf as V,textFieldIdentifier as ut}from"./field-markers.js";import dt from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as pt,CORNER_RADIUS_MAX as be,CORNER_RADIUS_MIN as L}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as ft,IMAGE_CORNERS_LABEL as mt}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as ht}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as gt,GALLERY_LAYOUTS as F,GALLERY_LAYOUT_KEYS as xe}from"../content/gallery-layout.js";import{anchorSiblingsOf as bt,HERO_GROUP_PLACEMENTS as xt,HERO_GROUP_PLACEMENT_DEFAULT as St,normalisePlacement as yt,placementPoints as Se}from"../hero-group-placement.js";import Ct from"../../components/KeepHint.js";import{AdjustIcon as _t,AlignLeftIcon as It,AlignSeparateIcon as Et,AnimationIcon as ye,BackgroundIcon as Rt,BorderAllIcon as Tt,BlockSectionIcon as Ot,CartIcon as At,ColumnWidthsIcon as Ce,ColumnsIcon as Nt,CornerIcon as Pt,DirectionDownIcon as wt,DirectionLeftIcon as Lt,DirectionRightIcon as Ft,DirectionUpIcon as vt,DollarIcon as kt,FinishIcon as Dt,GapIcon as _e,GridIcon as Bt,GroundIcon as Ht,HashIcon as Ie,HeightIcon as Gt,ImageIcon as Mt,ListIcon as Kt,LocationIcon as te,PaddingAllIcon as Wt,PaddingBottomIcon as Ee,PaddingLeftIcon as Re,PaddingRightIcon as Te,PaddingTopIcon as Oe,PageIcon as Ae,PhoneIcon as Ut,PlacementIcon as Xt,ProductSizeIcon as jt,RotateIcon as $t,SquareIcon as zt,TypeIcon as Vt,WidthIcon as Yt,WrapIcon as qt}from"efficient-easel/icons";import{FieldGlyph as Ne}from"../../components/FieldGlyph.js";import{resolvePageBackground as Jt}from"../content/page-background.js";import{CORNER_SIDES as Pe,CORNER_SIDE_POINTS as Zt,hasOwnSectionCorners as Qt,normalizeCornerSides as we}from"../content/section-corners.js";import{SECTION_MOTION_NONE as en,SECTION_MOTION_OPTIONS as tn}from"../content/section-animation.js";import{enclosingSectionProps as Le}from"./enclosing-section.js";import{SettingsDefaultReset as C,SettingsField as h,SettingsGroupHead as nn,SettingsGroupSub as on,SettingsBorder as rn,SettingsSegmented as ln,SettingsSides as an,SettingsSidesEach as Fe,sidesStartEach as sn,SettingsSwitch as cn,borderSides as un,borderStartEach as dn}from"efficient-easel/panel";import{FieldSelect as pn,ListField as fn}from"efficient-easel/fields";import{AlignmentGrid as mn,Checkbox as hn,CornersInput as gn,DateTimePicker as bn,FOCAL_DEFAULT as ve,Slider as xn,Tooltip as Y}from"efficient-shell/ui";import{ColourControl as ke}from"./ColourControl.js";import De from"./MarkupToolbar.js";import{deviceField as _}from"./device-fields.js";import{NO_CONTROL_FIELD as Sn,NoControlMark as Be,noControlField as ne}from"./panel-no-control-mark.js";import{OWN_BOX_FIELD as yn}from"./own-box.js";import{phoneKey as M,resolvePhoneValue as oe}from"./phone-override.js";import{SuppressibleText as Cn}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as _n,CARD_OUTLINE_OPTIONS as In,DEFAULT_CARD_INDEX_FORMAT as En,DEFAULT_CARD_OUTLINE as Rn}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as Tn,DEFAULT_COVER_INDEX as On}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as An}from"./text-control-kinds.js";import Nn from"../../components/ImageFocusRow.js";import Pn from"../../components/MediaUploadField.js";import wn from"../../components/MultiSelectField.js";import Ln from"../../components/SectionThemePicker.js";import Fn from"../../components/SearchSelectField.js";import vn from"../../components/StorefrontLinkField.js";import He from"../../components/UiIcon.js";import{SECTION_PADDING as E}from"../content/section-padding.js";import{hasPhoneHeight as kn,resolveSectionMinHeight as Dn}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as Bn,SECTION_MIN_HEIGHT_GROUP_LABEL as K,SECTION_SCREEN_PCT as Hn}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as Gn,containerDirectionPoints as Mn,resolveContainerDirection as Ge}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Kn,BOX_BLOCK_SPACING_LABEL as Wn,BOX_BLOCK_SPACING_POINTS as Me,BOX_JUSTIFY_POINTS as Ke,BOX_PHONE_ROW_LABEL as Un,BOX_PHONE_ROW_MAX as Xn,BOX_PHONE_ROW_MIN as We,BOX_SHARE_LABEL as Ue,BOX_SHARE_POINTS as re,BOX_WRAP_LABEL as jn,BOX_WRAP_POINTS as Xe}from"../content/box-layout.js";import{usePreviewHeader as W}from"../../components/PreviewHeaderContext.js";import{BORDER_MAX as $n}from"../content/borders.js";import{DEFAULT_SURFACES as zn,normalizeTheme as Vn}from"../theme.js";import{CONTAINER_GAP as ie,CONTAINER_GAP_BUILT_IN as Yn,GAP_FIELD_CONTAINER as qn,hasOwnContainerGap as Jn,resolveContainerGap as Zn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as Qn,CARD_IMAGE_BG_OFF as eo,CARD_IMAGE_BG_SWATCH_NAMES as to,CARD_IMAGE_BG_SWATCHES as no,isCardImageBackgroundInheriting as oo,cardImageBackgroundChoice as ro,THEME_CARD_IMAGE_BG as io}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as lo,SECTION_BG_SWATCHES as ao,SECTION_BG_SWATCH_NAMES as so,THEME_SECTION_BG as co,isSectionBackgroundInheriting as uo}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as po}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as fo,TYPE_SIZE_INHERIT as mo,isTypeSizeInheriting as ho}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as go,WIDTH_CHOICE_LABEL as bo,WIDTH_INHERIT as xo,resolveWidth as So,sectionRunsFullWidth as je}from"../content/section-width.js";import{useFoldHeadingLevel as $e}from"./panel-heading-scope.js";import{withStyleKind as yo}from"efficient-easel/style-clipboard";function v(e){for(const[t,n]of Object.entries(e))n&&typeof n=="object"&&!V(n)&&yo(n,`section:${t}`);return e}function Ii({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function ze(){return null}function Co(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(ze,{},e)}function _o(e){return e.type===ze}function k(e){return _o(e)?void 0:e}function D(e,t){return l("{value} from {from}",{value:e,from:t})}function Io(){const{appState:e}=w(i=>i),t=e.data.root?.props??{},{mode:n,pageWidth:o}=So(t,"full");return n==="page"?D(`${o}px`,l("the page")):n==="contained"?D(l("Contained"),l("the page")):D(l("Full"),l("the page"))}function Eo(){const{blockGap:e}=W();return e===null?l("this container's own spacing"):D(`${e}px`,l("Site styles"))}function Ro({inherited:e,onReset:t,label:n}){return r(C,{words:y()?.panel,label:l(n),changed:!e,detail:Eo(),onReset:t})}function To({inherited:e,onReset:t,label:n}){return r(C,{words:y()?.panel,label:l(n),changed:!e,detail:Io(),onReset:t})}function B({value:e,onChange:t,label:n,placeholder:o,hint:i,multiline:a,hideable:c=!0,markup:s=!0}){const{text:u,hidden:d}=pe(e),f=ee(null),p=ee(null),m=T=>t(c?{text:T,hidden:d}:T),g=()=>t({text:u,hidden:!d}),x=c&&d,R=ct(),S=i?wo(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(Ct,{children:l(i)}):void 0,j=d?l("Show {label} on the slide",{label:l(n)}):l("Hide {label} on the slide",{label:l(n)});return r(h,{label:l(n),icon:r(Vt,{}),htmlFor:R,className:x?"is-hidden":void 0,hint:S,action:c?r(Y,{content:j,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":d,"aria-label":j,onClick:g,children:d?r(He,{name:"eye-off",size:14}):r(He,{name:"eye",size:14})})}):void 0,children:P("div",{className:"sf-copybox",children:[s&&r(De,{target:a?p:f,value:u,onChange:m}),a?r("textarea",{id:R,ref:p,value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>m(T.target.value)}):r("input",{id:R,ref:f,type:"text",value:u,placeholder:o===void 0?void 0:l(o),onChange:T=>m(T.target.value)})]})})}function Ei(e,t){return{...e,[ge]:t}}function Ri(e){const t=e[I];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[I]:{...t,offPage:!0}}}function Ti(e){return!e||typeof e!="object"?!1:e[I]?.offPage===!0}const Ve="sfPanelOnly";function Oi(e){if(!e[I])throw new Error("withPanelOnly: the field holds no authored text");return{...e,[Ve]:!0}}function Ai(e){return!!e&&typeof e=="object"&&e[Ve]===!0}function Ni(e){const t=e[I];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[I]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as Gl,SCALAR_TEXT_CONTROLS as Ml}from"./text-control-kinds.js";function Pi(e,t){if(!e[I])throw new Error("inOwnBox: the field holds no authored text");const{[Sn]:o,...i}=e;return{...i,[yn]:!0,render:t}}const Oo=new Set(An),H=(e,t)=>{const n={...t,[I]:e};if(!Oo.has(e.control))return n;const o=t.render;return{...ne(n,"authored-copy"),render:i=>r(Cn,{name:i.name,children:o(i)})}},wi="Everything else on this block comes from the linked post. Unlink it to edit by hand.",Ao="Select a word, then press the highlighter.",No="A short name so a link can jump straight to this section, like yoursite.com/page#about.",Po=new Set([Ao]),wo=e=>Po.has(e);function Li(e,t,n){return H({control:"text",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:e,placeholder:t,hint:n})})}function Fi(e,t,n){return H({control:"textarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0})})}function Lo(e,t,n){return H({control:"plainText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1,markup:!1})})}function vi(e,t,n){return H({control:"copyText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1})})}function ki(e){return{type:"custom",[me]:{label:e},render:({value:t,onChange:n})=>r(vn,{value:fe(t),onChange:n,label:e})}}function Di(e,t,n){return H({control:"plainTextarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0,hideable:!1})})}const Bi={Design:_t,Animation:ye};function Hi(e,t){return e.includes("Design")?t!=="Design":null}function Fo({label:e}){return r(nn,{title:l(e),level:$e(1)})}function vo({level:e,label:t}){return e===1?r(Fo,{label:t}):r(Bo,{label:t})}function Ye(e,t){return{type:"custom",[z]:{label:e,level:t},render:()=>r(vo,{level:t,label:e})}}function b(e){return Ye(e,2)}function Gi(e){return{type:"custom",render:()=>r(ko,{text:e})}}function ko({text:e}){return r("p",{className:"sf-note",children:l(e)})}function Mi(e){return Ye(e,1)}function Ki(e){return V(e)!==null&&e?.tabs!==void 0}const qe=new Map;function Wi(e,t){const n=`${e}\0${t?t.join(""):""}`,o=qe.get(n)??{type:"custom",tabs:t,[z]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(O,{})};return qe.set(n,o),o}function Ui(e){return V(e)!==null&&e?.designGroup!==void 0}const Je=new Map;function Xi(e){const t=Je.get(e)??{type:"custom",[z]:{label:e,level:1},designGroup:e,marker:!0,...e==="Content"?{}:{fold:e},render:()=>r(O,{})};return Je.set(e,t),t}function Do(e){const t=e;return t?.marker===!0&&typeof t.fold=="string"?t.fold:null}function ji(e,t){return Do(e)===t?e:{...e,marker:!0,fold:t,render:()=>r(O,{})}}function $i(e){const t=e;if(t.marker===!0&&t.fold===void 0)return e;const{fold:n,...o}=e;return{...o,marker:!0,render:()=>r(O,{})}}function Bo({label:e}){return r(on,{title:l(e),level:$e(2)})}function Ze({swatches:e,current:t,onPick:n,names:o}){const i=e.find(s=>s.toLowerCase()===t.toLowerCase()),a=i?o?.[i]:void 0,c=a?l(a):t;return P("div",{className:"sf-swatches",children:[e.map(s=>{const u=o?.[s]?l(o[s]):s;return r(Y,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===s.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===s.toLowerCase()?"is-active":""}`,style:{background:s},onClick:()=>n(s),"aria-label":u})},s)}),r("span",{className:"sf-swatch-hex",children:c})]})}function zi(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=uo(n,t);return r(h,{label:l(e),icon:r(Rt,{}),changed:!i,action:r(C,{words:y()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>o(lo)}),children:Ze({swatches:ao,current:i?co:n??t??"",onPick:o,names:so})})}}}function Ho(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=n,a=oo(i,t);return r(h,{label:l(e),icon:r(Ht,{}),changed:!a,action:r(C,{words:y()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>o(Qn)}),children:Ze({swatches:no,current:a?io:ro(i,t),onPick:o,names:to})})}}}function Vi(e=n=>n,t){return v({_gSectionTheme:b(po),sectionAccent:{type:"custom",render:({value:n,onChange:o})=>r(Ln,{value:e(n),onChange:o,followLabel:t})}})}function U({min:e,max:t,step:n,value:o,onChange:i,suffix:a="",readout:c=!0,notch:s,ariaLabel:u,disabled:d=!1}){const f=s!==void 0&&Number.isFinite(s)&&s>=e&&s<=t;return r("div",{className:f?"sf-slider has-notch":"sf-slider",style:f?{"--sf-notch":(s-e)/(t-e)}:void 0,children:r(xn,{min:e,max:t,step:n,value:o,suffix:a||void 0,showInput:c,label:u===void 0?void 0:l(u),disabled:d,size:"sm",className:"sf-slider-track",onChange:p=>{p!==null&&p!==o&&i(p)}})})}function G(e,t,n,o,i,a,c="",s){return{type:"custom",render:u=>r(h,{label:l(e),icon:k(t),action:s?s("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:U({min:n,max:o,step:i,value:typeof u.value=="number"?u.value:a,suffix:c,ariaLabel:e,onChange:u.onChange})})}}function Qe(e,t){const{min:n,max:o,step:i=1,unsetLabel:a,hint:c,restTrack:s,unsetMark:u,icon:d}=t;return{type:"custom",render:({value:f,onChange:p})=>{const m=typeof f=="number"?f:null,g=m===null;return r(h,{label:l(e),icon:d?k(d):void 0,value:g?u||a===void 0?void 0:l(a):`${m}px`,changed:!g,action:u?ue(u,{changed:!g,onReset:()=>p(null)}):r(C,{words:y()?.panel,label:l(e),changed:!g,onReset:()=>p(null)}),hint:typeof c=="string"?l(c):c,children:s?s({min:n,max:o,step:i,px:m,label:e,onChange:p}):U({min:n,max:o,step:i,value:m??n,readout:!1,ariaLabel:e,onChange:p})})}}}function Yi(e){const t=G("Gap",r(_e,{}),ie.min,ie.max,ie.step,Yn[e],"px",(n,o)=>r(Ro,{inherited:!Jn(e,n),onReset:()=>o(void 0),label:"Gap"}));return{type:"custom",[qn]:e,render:n=>t.render({...n,value:Zn(e,n.value,n.field?.siteGap),storedValue:n.value,onChange:o=>n.onChange(o)})}}const q="Corners";function le(e){return{type:"custom",render:({value:t,onChange:n})=>{const o=typeof t=="number"&&Number.isFinite(t)?t:null,i=o!==null;return r(h,{label:l(q),icon:r(Pt,{}),changed:i,action:ue(e.mark,{changed:i,onReset:()=>n(null)}),hint:e.hint,children:r(Go,{tier:e,px:o,onRadius:n})})}}}function et(e){let t=null;try{t=de()}catch{t=null}return[t?.values?.[e],n=>t?.onChange(e,n)]}function Go({tier:e,px:t,onRadius:n}){const o=e.useFollowed(),i=e.useClosedReason?e.useClosedReason():null,[a,c]=et(e.sidesKey),s=we(a)??[...Pe];return r(gn,{label:l(q),value:s,corners:Zt,onChange:u=>{const d=we(u)??[];c(d.length===Pe.length?null:d)},radius:t,onRadiusChange:n,radiusMin:L,radiusMax:be,radiusStep:e.step??1,radiusPlaceholder:String(o),disabled:i!==null,disabledReason:i??void 0})}function tt(){return ne({type:"custom",render:()=>r(Be,{})},"always")}function Mo({label:e,changed:t=!1,onReset:n=()=>{}}){const{cornerRadiusPx:o}=W(),i=typeof o=="number"?`${o}px`:l("not set");return r(C,{words:y()?.panel,label:l(e),changed:t,detail:o==null?l("the built-in corners"):D(i,l("Site styles")),onReset:n})}function Ko(){const{cornerRadiusPx:e}=W();return typeof e=="number"?e:L}function Wo(){return le({sidesKey:"sectionCornerSides",useFollowed:Ko,useClosedReason:()=>ot()?l(nt):null,mark:r(Mo,{label:q}),hint:r(Uo,{})})}const nt="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function ot(){return je(J())}function Uo(){return r(O,{children:ot()?nt:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function qi(){return v({_gShape:b("Shape"),sectionCorners:Wo(),sectionCornerSides:tt(),sectionBorder:rt("desktop"),sectionBorderPhone:rt("mobile")})}const Xo=()=>({width:l("Border width"),sides:{top:l("Border top"),right:l("Border right"),bottom:l("Border bottom"),left:l("Border left")},style:l("Border style"),styles:{solid:l("Solid"),dashed:l("Dashed"),dotted:l("Dotted")},color:l("Border color"),unit:"px"});function jo(e){const t=Object.fromEntries(Object.entries(e).filter(([,n])=>n!=null&&n!==""));return Object.keys(t).length?t:void 0}function $o(){let e;try{const t=Vn(W().theme);e=t.themes[t.selected]?.line}catch{e=void 0}return e||zn.line}function zo({value:e,onChange:t,tier:n}){const[o]=et("sectionBorder"),i=$o(),a=e&&typeof e=="object"?e:{},c=n==="mobile"?o&&typeof o=="object"?o:{}:{},[s,u]=$(()=>dn(a,c)),d=Xo();return r(h,{label:l("Border"),icon:r(Tt,{}),action:r(Fe,{each:s,label:l("Each side"),onChange:u}),children:r(rn,{label:l("Border"),value:a,each:s,onChange:f=>t(jo(f)),placeholder:{sides:un(c),style:c.style??"solid",color:c.color||i},presets:[i],words:d,max:$n})})}function rt(e){return _(e,{type:"custom",render:({value:t,onChange:n})=>r(zo,{value:t,onChange:n,tier:e})})}function Ji(){return{_gMotion:b("Motion"),sectionAnimation:ce("Entrance",r(ye,{}),[...tn],en)}}function ae(){let e=null;try{const{appState:t,selectedItem:n}=w(i=>i),o=n?.props?.id?String(n.props.id):void 0;e=o?Le(t?.data,o):null}catch{e=null}return e!==null&&je(e)}function it(e){const{cornerRadiusPx:t}=W(),n=ae(),o=typeof t=="number"?t:e;let i=null;try{const{appState:c,selectedItem:s}=w(d=>d),u=s?.props?.id?String(s.props.id):void 0;i=u?Le(c?.data,u):null}catch{i=null}if(n||!i)return o;const a=i.sectionCorners;return Qt(a)?a:o}function Vo({label:e,changed:t=!1,onReset:n=()=>{}}){const o=ae(),i=it(L),a=o?"Site":"Section";return r(C,{words:y()?.panel,label:l(e),changed:t,detail:D(`${i}px`,o?l("Site styles"):l("the section")),onReset:n})}function Yo(){return r(O,{children:ae()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function qo(){return le({sidesKey:"cardCornerSides",useFollowed:()=>it(L),mark:r(Vo,{label:q}),hint:r(Yo,{})})}function Jo(){return{type:"custom",render:()=>r(dt,{})}}function Zi(){return{_gShape:b("Shape"),cardCorners:qo(),cardCornerSides:tt(),cardCornersApplyAll:Jo()}}function Qi(){return A("Justify",r(Et,{}),Ke,Ke[0].value)}function el(){return A("Item alignment",r(It,{}),Kn,"stretch")}function tl(){return A(jn,r(qt,{}),Xe,Xe[0].value)}function nl(){return{type:"custom",render:({value:e,onChange:t})=>{const n=re.find(o=>o.value===e)??re[0];return r(h,{label:l(Ue),icon:r(Ce,{}),value:l(n.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(Ue),children:re.map(o=>r(Y,{content:l(o.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":n.value===o.value,"aria-label":l(o.label),onClick:()=>t(o.value),children:r("span",{className:"sf-gallery-pic",children:Zo(o.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},o.value))})})}}}function Zo(e){if(!e)return[3,4];const t=e.reduce((n,o)=>n+o,0);return e.map(n=>Math.round(n/t*12))}function ol(){return A(Wn,r(_e,{}),Me,Me[0].value)}function rl(){return G(Un,r(Ut,{}),We,Xn,1,We)}function il(e){const t=ce(Gn,Co("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),Mn(e),Ge(e,void 0));return{type:"custom",render:n=>t.render({...n,value:Ge(e,n.value),onChange:o=>n.onChange(o)})}}function ll(e,t,n,o,i,a){return{type:"custom",render:({value:c,onChange:s})=>r(h,{label:l(e),icon:r(Ne,{noun:a}),action:r(C,{words:y()?.panel,label:l(e),changed:!ho(c),detail:l("the Text style in Site styles"),onReset:()=>s(mo),defaultAction:{onPress:()=>s(fo),title:l("Keep this section's own built-in size"),icon:r(Ot,{})}}),children:U({min:t,max:n,step:o,value:typeof c=="number"?c:i,suffix:"px",ariaLabel:e,onChange:s})})}}function al(){return{_gCellWidth:b("Cell width"),gridSpan:A("Positions",r(Ce,{}),[{label:"Auto",value:""},...Array.from({length:ht},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function J(){let e=null;try{e=w(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Qo({min:e,max:t,step:n,px:o,label:i,onChange:a,desktopKey:c,fallback:s}){const u=J()[c],d=oe(void 0,u,s);return r(O,{children:U({min:e,max:t,step:n,value:oe(o,u,s),readout:!1,ariaLabel:i,notch:d,onChange:a})})}function er({label:e,desktopKey:t,fallback:n,changed:o=!1,onReset:i=()=>{}}){const a=J()[t],c=oe(void 0,a,n);return r(C,{words:y()?.panel,label:l(e),changed:o,detail:l("{value} on desktop",{value:`${c}px`}),onReset:i})}function tr(e){return Qe(e.label,{icon:e.icon,min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(er,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Qo,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const nr={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"},or={Top:Oe,Bottom:Ee,Left:Re,Right:Te},rr=e=>{const t=or[e];return r(t,{})};function sl(e={}){const t=e.keys?.top??"sectionPaddingTop",n=e.keys?.bottom??"sectionPaddingBottom",o=e.group!==!1,i=S=>nr[S],a=S=>G(i("Top"),r(Oe,{}),E.min,E.max,E.step,S,"px"),c=(S,j,T,Q=E)=>_("mobile",tr({label:i(S),icon:rr(S),desktopKey:j,min:Q.min,max:Q.max,step:Q.step,fallback:T})),s=e.top??E.min,u=e.bottom??E.min,d="sectionPaddingLeft",f="sectionPaddingRight",p=e.sideBounds??E,m=e.side??p.min,g=e.sidePhone??m,x=e.phone===!0,R=S=>x?_("desktop",S):S;return v({...o?{_gSpacing:b("Padding")}:{},[t]:R(a(s)),...x?{[M(t)]:c("Top",t,s)}:{},...e.only==="top"?{}:{[n]:R(G(i("Bottom"),r(Ee,{}),E.min,E.max,E.step,u,"px")),...x?{[M(n)]:c("Bottom",n,u)}:{}},...e.sides?{[d]:R(G(i("Left"),r(Re,{}),p.min,p.max,p.step,m,"px")),...x?{[M(d)]:c("Left",d,g,p)}:{},[f]:R(G(i("Right"),r(Te,{}),p.min,p.max,p.step,m,"px")),...x?{[M(f)]:c("Right",f,g,p)}:{}}:{}})}const X=["top","right","bottom","left"],ir={top:"sectionPaddingTop",right:"sectionPaddingRight",bottom:"sectionPaddingBottom",left:"sectionPaddingLeft"},lt=e=>typeof e=="number"?e:null;function lr(e,t,n){const o={};for(const i of X)n[i]!==t[i]&&(o[e[i]]=n[i]??void 0);return o}function ar({tier:e,o:t}){let n=null;try{n=de()}catch{n=null}const o=n?.values??{},i=e==="mobile"?t.phoneKeys:t.keys,a=Object.fromEntries(X.map(d=>[d,lt(o[i[d]])])),c=Object.fromEntries(X.map(d=>[d,String(e==="mobile"?lt(o[t.keys[d]])??t.fallback[d]:t.fallback[d])])),[s,u]=$(()=>sn(a,c));return r(h,{label:l("Padding"),icon:r(Wt,{}),action:r(Fe,{each:s,label:l("Each side"),onChange:u}),children:r(an,{label:l("Padding"),each:s,value:a,placeholder:c,min:t.min,max:t.max,step:t.step,onChange:d=>{const f=lr(i,a,d);Object.keys(f).length&&n?.onChangeMany(f)},words:{sides:{top:l("Padding top"),right:l("Padding right"),bottom:l("Padding bottom"),left:l("Padding left")},vertical:l("Top and bottom"),horizontal:l("Left and right"),unit:"px"}})})}function cl(e={}){const t={...ir,...e.keys},n={keys:t,phoneKeys:Object.fromEntries(X.map(s=>[s,M(t[s])])),fallback:{top:0,right:0,bottom:0,left:0,...e.fallback},min:e.min??0,max:e.max??200,step:e.step??4},o=e.phone!==!1,i=s=>{const u={type:"custom",render:()=>r(ar,{tier:s,o:n})};return o?_(s,u):u},a=()=>ne({type:"custom",render:()=>r(Be,{})},"always"),c=X.filter(s=>s!=="top");return v({...e.group===!1?{}:{_gSpacing:b("Padding")},[n.keys.top]:i("desktop"),...o?{[n.phoneKeys.top]:i("mobile")}:{},...Object.fromEntries(c.map(s=>[n.keys[s],a()])),...o?Object.fromEntries(c.map(s=>[n.phoneKeys[s],_("mobile",a())])):{}})}const sr={contained:"Contained",page:"Page",full:"Full"},Z="Width";function ul(e,t=go,n=!0){const o=t.map(i=>({label:bo[i]??sr[i],value:i}));return v({...n?{_gWidth:b(Z)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(Z),icon:r(Yt,{}),action:n?r(To,{inherited:a?.inherited??!1,onReset:()=>i(xo),label:Z}):void 0,children:se({options:o,value:a?.currentValue||e,onChange:i,ariaLabel:Z})})}})}function dl(){const e=o=>({type:"custom",render:({value:i,onChange:a})=>r(h,{label:K,icon:k(r(Gt,{})),action:o?o(a):void 0,children:se({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:K})})}),t=()=>({type:"custom",render:({value:o,onChange:i,field:a})=>{const c=a?.unit==="%"?"%":"px",s=c==="%"?Hn:Bn;return r("div",{className:"sf-field",children:U({min:s.min,max:s.max,step:s.step,value:typeof o=="number"?o:s.fallback,suffix:c,ariaLabel:K,onChange:i})})}}),n=()=>ce("Unit",r(Ie,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return v({_gHeight:b(K),sectionHeightMode:_("desktop",e()),sectionHeightValue:_("desktop",t()),sectionHeightUnit:_("desktop",n()),sectionHeightModePhone:_("mobile",e(o=>r(cr,{onClear:()=>o(void 0)}))),sectionHeightValuePhone:_("mobile",t()),sectionHeightUnitPhone:_("mobile",n())})}function cr({onClear:e}){const t=J(),n=kn(t),o=Dn(t),i=l("{value} on desktop",{value:o.mode==="auto"?l("Auto"):`${o.value}${o.unit}`});return r(C,{words:y()?.panel,label:l(K),changed:n,detail:i,onReset:e})}function pl(){return{_gAnchor:b("Anchor"),anchor:Lo("Anchor name","e.g. about",No)}}function fl(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=`${a??c??e}-datetime`,u=Date.parse(typeof o=="string"?o:"");return r(h,{label:l(e),icon:t,htmlFor:s,hint:n===void 0?void 0:l(n),children:r(bn,{id:s,value:Number.isFinite(u)?new Date(u):null,onChange:d=>i(d?d.toISOString():"")})})}}}function N(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=typeof o=="boolean"?o:t,u=`${a??c??e}-label`;return r(h,{label:l(e),labelId:u,icon:n,action:r(cn,{checked:s,onChange:i,ariaLabelledBy:u})})}}}function ml(){return{type:"custom",render:({value:e,onChange:t,id:n,name:o})=>{const i=`${String(n??o??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Ae,{}),htmlFor:i,action:r(ke,{id:i,label:"Background",value:Jt(e),onChange:t})})}}}function hl(e,t){return{type:"custom",render:({value:n,onChange:o,id:i})=>{const a=typeof n=="boolean"?n:t,c=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:c,className:"sf-checkbox",action:r(hn,{id:c,checked:a,onChange:o})})}}}function gl(e,t){return{type:"custom",render:({value:n,onChange:o})=>r(h,{label:l(e),action:ke({value:n||t,onChange:o,label:e})})}}const ur=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function at({label:e,value:t,onChange:n,points:o=ur}){const i=o.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(mn,{label:l(e),value:t,points:i,onChange:n})}function bl(e,t=ve,n="mediaImage"){return{type:"custom",render:({value:o,onChange:i})=>r("div",{className:"sf-focal-row",children:r(dr,{label:e,value:o||t,onChange:i,imageProp:n})})}}function dr({label:e,value:t,onChange:n,imageProp:o}){const{selectedItem:i}=w(c=>c),a=i?.props?.[o];return r(Nn,{label:e,value:t,onChange:n,image:typeof a=="string"?a:void 0})}const pr=Se([]);function xl(e,{stacking:t,fallback:n=St}){return{type:"custom",render:({value:o,onChange:i})=>{const a=xt.includes(o)?o:n;return t?r(fr,{label:e,value:a,onChange:i}):st({label:e,value:a,onChange:i,points:pr})}}}function fr({label:e,value:t,onChange:n}){const{appState:o,selectedItem:i}=w(s=>s),a=i?.props?.id?String(i.props.id):void 0,c=a?bt(o?.data,a):[];return st({label:e,value:t,onChange:n,points:Se(c,a)})}function st({label:e,value:t,onChange:n,points:o}){const i=o.find(a=>a.disabled);return r(h,{label:l(e),icon:r(Xt,{}),hint:i?.title?l(i.title):void 0,children:at({label:e,value:yt(t),onChange:n,points:o})})}const Sl={top:r(vt,{}),right:r(Ft,{}),bottom:r(wt,{}),left:r(Lt,{})};function yl(e,t,n,o,i,a){const c=f=>t.find(p=>p.value===f),s=f=>({value:f,label:"",disabled:!0,title:o}),u=f=>{const p=t.find(g=>g.cell===f);if(!p)return s(`missing-${f}`);const m=a?.[f];return m?{value:p.value,label:p.label,icon:m}:{value:p.value,label:p.label}},d=[s("corner-top-left"),u("top"),s("corner-top-right"),u("left"),s("centre"),u("right"),s("corner-bottom-left"),u("bottom"),s("corner-bottom-right")];return{type:"custom",render:({value:f,onChange:p})=>{const m=t.some(g=>g.value===f)?f:n;return r(h,{label:l(e),icon:i,value:c(m)?.label?l(c(m).label):"",children:at({label:e,value:m,onChange:p,points:d})})}}}const mr="\0note";function A(e,t,n,o,i){return{type:"custom",options:n,fallback:o,...i?{note:i}:{},render:({value:a,onChange:c,field:s})=>{const u=s.options??n,d=s.fallback??o,f=u.some(p=>p.value===a)?a:d;return r(h,{label:l(e),icon:k(t),children:r(pn,{value:f,ariaLabel:l(e),onChange:c,options:[...i?[{label:l(i),value:mr,disabled:!0}]:[],...u.map(p=>({label:l(p.label),value:p.value}))]})})}}}function Cl(e,t,n){return{type:"custom",options:t,render:({value:o,onChange:i,field:a})=>r(wn,{label:e,options:(a.options??t).map(c=>({...c,label:l(c.label)})),value:Array.isArray(o)?o:[],onChange:i,...n?{emptyLabel:l(n)}:{}})}}function _l(e,t,n,o){return{type:"custom",options:t,fallback:n,render:({value:i,onChange:a,field:c})=>r(Fn,{label:e,options:(c.options??t).map(s=>({...s,label:l(s.label)})),fallback:c.fallback??n,value:i,onChange:a,placeholder:o===void 0?void 0:l(o)})}}function Il(e,t={}){return{type:"custom",render:({value:n,onChange:o})=>{const i={value:n,onChange:o,...t};return r(e,{...i})}}}function se({options:e,value:t,onChange:n,ariaLabel:o,disabled:i=!1}){return r(ln,{options:e.map(a=>a.picture?{id:a.value,label:a.picture,title:l(a.title??a.label)}:{id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)}),value:t,onChange:n,ariaLabel:l(o),disabled:i})}const El=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function ce(e,t,n,o){const i=n.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:c,field:s})=>r(h,{label:l(e),icon:k(t),children:se({options:i,value:i.some(u=>u.value===a)?a:a||s?.currentValue||o,onChange:c,ariaLabel:e})})}}function Rl(e,t,n){return{type:"custom",[he]:!0,render:({value:o,onChange:i})=>r(Pn,{value:o||"",onChange:i,label:e,accept:t,placeholder:n})}}const Tl={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function Ol({value:e,onChange:t,label:n}){const o=e||{},i=!!o.pending,a=i?"var(--fg-dim, #888)":o.ok?"#1d9e75":"#d85a30",c=(s,u)=>t({...o,[s]:u===""?void 0:Number(u)});return P(h,{label:l(n),icon:r(te,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...o,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),o.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(o.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...o,manual:!o.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:o.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),o.manual&&P("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(te,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof o.lat=="number"?o.lat:"",onChange:s=>c("lat",s.target.value)})}),r(h,{label:l("Longitude"),icon:r(te,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof o.lng=="number"?o.lng:"",onChange:s=>c("lng",s.target.value)})})]})]})}function hr(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function gr(e,t,n){const o=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?o:o.map((i,a)=>a===t?{text:n}:i)}function Al(e,t){return e===null?null:t>e?e:null}function br(e,t,n){if(n===null||n>=t.length)return null;for(let o=0;o<n;o+=1)if(e[o]!==t[o])return null;return e[n]!==t[n]&&t.includes(e[n])||e[n]!==t[n]&&t.length!==e.length?null:n}const Nl={label:"Ticker items",icon:r(Kt,{})};function Pl(e,t,n,o){return{type:"custom",[I]:{control:"textList",label:e,placeholder:n,itemKey:"text",rendering:o},render:({value:i,onChange:a})=>r(xr,{label:e,icon:k(t),items:Array.isArray(i)?i:[],placeholder:n,onChange:a,markup:o==="markup"})}}function xr({label:e,icon:t,items:n,placeholder:o,onChange:i,markup:a=!1}){const c=ee(null),[s,u]=$(null),d=p=>p.map(m=>({text:m?.text??""})),f=p=>{const m=br(n,p,s);m===null&&(c.current=null),u(m),i(d(p))};return r(fn,{label:l(e),icon:t,noun:l("item"),items:n,onChange:f,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(De,{target:c,value:hr(n,s),onChange:p=>i(gr(n,s??-1,p)),disabled:s===null,label:s===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:s+1})}):void 0,renderRow:(p,m,g)=>r("input",{type:"text",className:a&&s===m?"sf-list-marking":void 0,value:p?.text??"",placeholder:l(o),"aria-label":l("{label} {n}",{label:l(e),n:m+1}),onChange:x=>g({text:x.target.value}),onFocus:x=>{c.current=x.currentTarget,u(m)}})})}function wl(e,t){const n=`${e.label} — row ${t+1}`;return H({control:"plainText",label:n,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:o,onChange:i})=>r(B,{value:o,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function Ll(e){return{_gCards:b("Cards"),coverIndex:A("Cover image",r(Mt,{}),Tn,String(On),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:Ho("Image background",eo),cardImage:Sr(),spinOnHover:N("Rotate on hover",e?.spinDefault??!0,r($t,{}))}}function Fl(){return{outline:A("Card outline",r(zt,{}),In,Rn),indexBadge:A("Card number",r(Ie,{}),_n,En),showBadge:N("Product badge",!0,r(Ne,{noun:"tag"}))}}function vl(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:b("Show on a card"),showCardPrice:N("Price",!0,r(kt,{})),showCardFinishes:N("Finish swatches",!0,r(Dt,{})),showCardSizes:N("Sizes",t,r(jt,{})),showCardBuy:N("Buy button",t,r(At,{})),showCardPage:N("Page button",t,r(Ae,{}))}}function Sr(){return Qe("Card image",{min:L,max:be,step:pt,hint:"Rounds the picture. The card's own corner is in Site styles."})}function kl(){return le({sidesKey:"cornerSides",step:ft,useFollowed:()=>L,mark:r(yr,{label:mt}),hint:l("Rounds the picture. Left alone it stays square.")})}function yr({label:e,changed:t=!1,onReset:n=()=>{}}){return r(C,{words:y()?.panel,label:l(e),changed:t,onReset:n})}function Dl(){return{type:"custom",render:({value:e,onChange:t})=>r(Cr,{value:typeof e=="string"?e:"",onChange:t})}}function Cr({value:e,onChange:t}){const[n,o]=$(null),i=xe.filter(c=>n===null||F[c].across===n),a=e&&e in F?F[e]:null;return P(O,{children:[r(h,{label:l("Photos in a row"),icon:r(Nt,{}),children:P("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":n===null,onClick:()=>o(null),children:l("All")}),gt.map(c=>r("button",{type:"button","aria-pressed":n===c,onClick:()=>o(c),children:c},c))]})}),r(h,{label:l("Layout"),icon:r(Bt,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:xe.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(c=>r(Y,{content:l(F[c].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===c,"aria-label":l(F[c].label),onClick:()=>t(e===c?"":c),children:r("span",{className:"sf-gallery-pic",children:F[c].desktop.map(([s,u],d)=>r("i",{style:{gridColumn:`span ${s}`,gridRow:`span ${u}`}},d))})})},c))})})]})}export{No as ANCHOR_HINT,wi as BOUND_TO_POST_NOTE,Bi as BUCKET_ICONS,Tl as CUSTOM_FIELD_MEDIA,Ol as CoordsField,Sl as EDGE_ARROWS,ve as FOCAL_DEFAULT,ur as FOCAL_POINTS,z as FOLD_FIELD_MARKER,at as FocalPicker,Bo as GroupLabel,Ao as HIGHLIGHT_HINT,B as HidableTextField,me as LINK_FIELD_MARKER,Ii as Label,he as MEDIA_FIELD_MARKER,El as MEDIA_TYPE_OPTIONS,ko as PanelNoteLine,st as PlacementGridView,ge as SCAFFOLD_FIELD_MARKER,Ml as SCALAR_TEXT_CONTROLS,nt as SECTION_BLEEDS_HINT,ir as SIDE_PAD_KEYS,Fo as SectionHeading,se as Segmented,Ro as SiteGapDefaultReset,U as Slider,Ze as Swatches,Gl as TEXT_CONTROL_KINDS,I as TEXT_FIELD_MARKER,Nl as TICKER_ITEMS_ROW,xr as TextListField,To as WidthDefaultReset,br as aimAfterListChange,pl as anchorFields,D as backTo,zi as backgroundField,el as boxAlignField,ol as boxBlockSpacingField,Qi as boxJustifyField,rl as boxPhoneRowField,nl as boxShareField,tl as boxWrapField,Wi as bucketHeader,qo as cardCornersField,Ho as cardImageBackgroundField,Sr as cardImageField,Ll as cardMediaFields,Zi as cardShapeFields,vl as cardShowFields,Fl as cardStyleFields,al as cellWidthFields,hl as checkbox,gl as colorInput,vi as copyText,tt as cornerSidesField,le as cornersRowField,fl as dateTime,Xi as designGroupHeader,il as directionField,yl as edgePad,Hi as entriesHiddenForTab,bl as focalPicker,Al as focusAfterRemove,ji as foldMarker,V as foldMetaOf,Do as foldTitleOf,Dl as galleryLayoutField,Yi as gapField,b as group,dl as heightFields,fe as hidableText,wo as hintIsWhileTyping,k as iconOf,kl as imageCornersField,Pi as inOwnBox,Ki as isBucketHeader,Ui as isDesignGroupHeader,_o as isNoGlyph,ki as linkField,Cl as multiSelect,Co as noGlyph,ml as pageBackgroundField,Gi as panelNote,tr as phoneOverrideField,xl as placementField,Lo as plainText,Di as plainTextarea,Qe as pxField,$i as quietMarker,pe as readHidable,hr as rowText,_l as searchSelect,Mi as section,Ji as sectionAnimationFields,rt as sectionBorderField,Wo as sectionCornersField,qi as sectionShapeFields,Vi as sectionThemeFields,ce as segmented,A as select,gr as setRowText,cl as sidesPaddingFields,lr as sidesPaddingPatch,ll as sizeField,G as slider,Il as sourceField,sl as spacingFields,Li as text,ut as textFieldIdentifier,Ti as textFieldOffPage,Ai as textFieldPanelOnly,Pl as textList,wl as textListRowField,Fi as textarea,N as toggle,Rl as upload,Io as usePageWidthDetail,Eo as useSiteGapDetail,ul as widthField,Ni as withIdentifier,Ri as withOffPage,Oi as withPanelOnly,Ei as withScaffold};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{anchorFields as m,bucketHeader as L,cardMediaFields as N,cardShowFields as Y,cardStyleFields as U,designGroupHeader as F,foldMarker as W,foldMetaOf as h,group as z,quietMarker as q,heightFields as E,sectionAnimationFields as w,sectionShapeFields as O,sectionThemeFields as D,spacingFields as B,widthField as T}from"./controls.js";import{deviceField as J,deviceMetaOf as x}from"./device-fields.js";import{DESIGN_GROUPS as k,SETTINGS_BUCKETS as Q}from"efficient-easel/panel";import{BUCKET_KEY as d,DESIGN_GROUP_KEY as b}from"./field-buckets.js";const A=Q;function V(e){return e==="Animation"?"Animation":"Design"}const X="Editor only — not shown live",I={"Archive link":"Content",Article:"Content",Blocks:"Content","Blog posts":"Content","Browser mock":"Content",Button:"Content","Call to action":"Content","Car prompt":"Content","Card link":"Content",Cards:"Content","Claims bars":"Content","Contact info":"Content",Content:"Content","Content source":"Content",Contents:"Content",Filters:"Content","Show on a card":"Content",Footnote:"Content",Form:"Content",Founders:"Content","Gallery A":"Content","Gallery B":"Content","Gallery link":"Content",Header:"Content","Header link":"Content","Image caption":"Content","In this issue":"Content",Items:"Content","Kanban columns":"Content",Lead:"Content","Left panel":"Content",Link:"Content",Links:"Content","Message form":"Content",Metadata:"Content",Milestones:"Content","Mockup card":"Content","Newsletter panel":"Content",Offices:"Content",Options:"Content","Others gallery":"Content","Overlay button":"Content",Product:"Content","Product page":"Content",Products:"Content","Pull quote":"Content",Questions:"Content","Recent issues":"Content","Recent posts":"Content",Reviews:"Content","Right panel · actions":"Content","Right panel · choices":"Content","Right panel · form":"Content","Routing groups":"Content",Rows:"Content",Section:"Content","Section header":"Content",Sections:"Content","Signup form":"Content","Source product":"Content","Stat & note":"Content",Stats:"Content","Submit button":"Content","Success state":"Content",Wheel:"Content",Terminal:"Content",Text:"Content","Text column":"Content","Timeline entries":"Content","Top row":"Content",Total:"Content","Trailing note":"Content","“Other” reason":"Content","Background images":"Design",Gallery:"Content",Image:"Content","Image column":"Content",Images:"Content",Logo:"Content",Media:"Content","Background image":"Design",Color:"Design","Image tint":"Design",Style:"Design",Shape:"Design",Texture:"Design","Text style":"Design",Motion:"Animation",Anchor:"Anchor",Arrangement:"Layout","Auto-slide":"Layout",Bar:"Layout","Cell width":"Size",Behavior:"Layout",Controls:"Layout",Diagram:"Layout",[X]:"Layout","Filters shown":"Layout","Slide picker":"Layout",Arrows:"Layout","On a phone":"Layout",Nudge:"Position","Image gallery":"Layout",Grid:"Layout",Layout:"Layout",Padding:"Layout",Price:"Layout",Preview:"Layout",Setup:"Layout","Show / hide elements":"Layout","Show in the buy box":"Layout",Visibility:"Layout",Width:"Size",Height:"Size"},P={"AlloyWheelsListing._gCards":"Design","ProductGrid._gCards":"Design"},$={"Text._gSpacing":"Size","Heading._gSpacing":"Size"};function _(e,t,o){const a=`${e}.${t}`;return $[a]??P[a]??I[o]}function se(e,t,o){const a=_(e,t,o);return a?V(a):void 0}function G(e){return e==="Animation"?[d.Animation]:[d.Design,b[e]]}function S(...e){const t=[];for(const o of e)for(const a of Object.values(o)){const C=x(a),p=h(C?C.inner:a),u=p?I[p.label]:void 0;if(u)for(const g of G(u))t.includes(g)||t.push(g)}return t}const he=[...S(B({phone:!0}),T("full"),E(),m()),...Object.keys(B({phone:!0})),...Object.keys(T("full")),...Object.keys(E()),...Object.keys(m())],be=[...S(D()),...Object.keys(D())],Ce=[...S(O()),...Object.keys(O())],pe=[...S(w()),...Object.keys(w())],Z=Object.keys(N()),ee=new Set(["cardImage","imageBackground"]),ge=[...G(_("ProductGrid","_gCards","Cards")??"Design"),...Z.filter(e=>e.startsWith("_g")||ee.has(e))],ye=Object.keys(U()),ke=Object.keys(Y({bottomDefault:!0})),te={"ImageBlock._gStyle":"duplicated the Style bucket header above it (2026-09-04)","ButtonBlock._gStyle":"duplicated the Style bucket header above it (2026-09-04)","HeroGroup._gContent":"duplicated the Content bucket header above it (2026-09-04)","HeroGroup._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","Footer._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","FooterLogo._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterLogo._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterMenu._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterMenu._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterGroup._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","FooterText._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterText._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterSocial._gStyle":"duplicated the Style bucket header above it (born tabbed, 2026-09-17)","FooterSocial._gLayout":"duplicated the Layout bucket header above it (born tabbed, 2026-09-17)","MenuBlock._gContent":"duplicated the Content bucket header above it (born tabbed, H.1)","MenuBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.1)","EmailFormBlock._gContent":"duplicated the Content bucket header above it (born tabbed, H.1)","SocialLogosBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.1)","SocialLogosBlock._gLayout":"duplicated the Layout bucket header above it (born tabbed, H.1)","SearchBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.2)","CartBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.2)","Split._gContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gVehicleContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gWheelContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gOthersContent":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gHeadCopy":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gLeftCopy":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gRightCopy":"duplicated the Content bucket header above it (2026-09-04)","CollectionCard._gContent":"duplicated the Content bucket header above it (A Card Sets Its Own Corners)","HeroSlide._gContent":"duplicated the Content bucket header above it (Hero Slide Tabs And Theme)","BrandStrip._gContent":"duplicated the Content bucket header above it (66338)","BrandStrip._gStyle":"duplicated the Style bucket header above it (66338)","BrandStrip._gLayout":"duplicated the Layout bucket header above it (66338)","KeyFeatures._gContent":"duplicated the Content bucket header above it (66049)","KeyFeatures._gStyle":"duplicated the Style bucket header above it (66049)","ParagraphsA._gContent":"duplicated the Content bucket header above it (66049)","ParagraphsA._gStyle":"duplicated the Style bucket header above it (66049)","Chart._gContent":"duplicated the Content bucket header above it (66049)","Chart._gStyle":"duplicated the Style bucket header above it (66049)","Logos._gContent":"duplicated the Content bucket header above it (66049)","Logos._gStyle":"duplicated the Style bucket header above it (66049)","Mockup._gContent":"duplicated the Content bucket header above it (66049)","Mockup._gStyle":"duplicated the Style bucket header above it (66049)","Stats._gContent":"duplicated the Content bucket header above it (66049)","Stats._gStyle":"duplicated the Style bucket header above it (66049)","StatsParagraph._gContent":"duplicated the Content bucket header above it (66049)","StatsParagraph._gStyle":"duplicated the Style bucket header above it (66049)","Testimonials._gContent":"duplicated the Content bucket header above it (66049)","Testimonials._gStyle":"duplicated the Style bucket header above it (66049)","AppointmentBooking._gContent":"duplicated the Content bucket header above it (66050)","BookingBox._gContent":"duplicated the Content bucket header above it ([SPLIT] Booking Form Into Three Boxes) — the same fault its own section retired in 66050, one level down","FAQ._gContent":"duplicated the Content bucket header above it (66050, family sweep)","FAQ._gLayout":"duplicated the Layout bucket header above it (66050, family sweep)","Form._gContent":"duplicated the Content bucket header above it (66050)","ReviewForm._gContent":"duplicated the Content bucket header above it (66050)","SubmitBuild._gContent":"duplicated the Content bucket header above it (66050)","SubmitBox._gContent":"duplicated the Content bucket header above it ([SPLIT] SubmitBuild Keeps Its Two Columns) — the same fault its own section retired in 66050, one level down","CheckoutCTA._gContent":"duplicated the Content bucket header above it (66051)","CheckoutCTA._gLayout":"duplicated the Layout bucket header above it (66051)","DeliveryOptions._gContent":"duplicated the Content bucket header above it (66051)","DeliveryOptions._gLayout":"duplicated the Layout bucket header above it (66051)","OrderSummary._gContent":"duplicated the Content bucket header above it (66051)","OrderSummary._gLayout":"duplicated the Layout bucket header above it (66051)","PaymentBadges._gContent":"duplicated the Content bucket header above it (66051)","PaymentBadges._gLayout":"duplicated the Layout bucket header above it (66051)","Collections._gContent":"duplicated the Content bucket header above it (66052)","Collections._gLayout":"duplicated the Layout bucket header above it (66052)","DocMasthead._gContent":"duplicated the Content bucket header above it (66053)","Events._gContent":"duplicated the Content bucket header above it (66054)","Events._gLayout":"duplicated the Layout bucket header above it (66054)","FeaturedCover._gContent":"duplicated the Content bucket header above it (66054)","Series._gStyle":"duplicated the Style bucket header above it (66054)","Flex._gContent":"duplicated the Content bucket header above it (66055)","Flex._gLayout":"duplicated the Layout bucket header above it (66055)","SectionHeader._gContent":"duplicated the Content bucket header above it (66055)","Breadcrumb._gContent":"duplicated the Content bucket header above it (66056)","CategoryBar._gStyle":"duplicated the Style bucket header above it (66056)","Hero._gContent":"duplicated the Content bucket header above it (66056)","Hero._gStyle":"duplicated the Style bucket header above it (66056)","HeroSingle._gStyle":"duplicated the Style bucket header above it (66056)","IntroBleed._gContent":"duplicated the Content bucket header above it (66056)","IntroBleed._gLayout":"duplicated the Layout bucket header above it (66056)","BundleOffer._gLayout":"duplicated the Layout bucket header above it (66059)","ProcessSteps._gContent":"duplicated the Content bucket header above it (66059)","Banner._gContent":"duplicated the Content bucket header above it (66060.1)","Banner._gLayout":"duplicated the Layout bucket header above it, and governed no controls (66060.1)","Manifesto._gContent":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gHeadCopy":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gLeftCopy":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gRightCopy":"duplicated the Content bucket header above it (66060.1)","Ticker._gContent":"duplicated the Content bucket header above it (66060.1)","Ticker._gStyle":"duplicated the Style bucket header above it (66060.1)","Timeline._gContent":"duplicated the Content bucket header above it (66060.1)","TitleWithButtons._gContent":"duplicated the Content bucket header above it (66060.1)","TitleWithButtons._gStyle":"duplicated the Style bucket header above it (66060.1)","Cards._gContent":"duplicated the Content bucket header above it (66218)","Cards._gStyle":"duplicated the Style bucket header above it (66218)","Prose._gContent":"duplicated the Content bucket header above it (66218)","Reviews._gContent":"duplicated the Content bucket header above it (66218)","Reviews._gStyle":"duplicated the Style bucket header above it (66218)"},H={Content:["Content"],Size:["Size"],Design:["Design","Style"],Layout:["Layout"],Position:["Position"],Anchor:["Anchor"],Animation:["Animation"]},K={_gAnchor:"repeated the Anchor group heading above it (two tabs, 11.0.0)"};{const e={...B({phone:!0}),...T("full"),...E(),...m(),...D(),...O(),...w()};for(const t of Object.keys(K)){const o=h(e[t]),a=o?I[o.label]:void 0;if(!o||o.level!==2||!a||!H[a].includes(o.label))throw new Error(`INJECTED_RETIRED (lib/puck/field-groups.ts) lists "${t}", but no uniform builder makes a level-2 heading by that key whose label repeats its place's word. The heading was renamed, moved or removed and the row is stale — a list that quietly matches nothing is worse than no list.`)}}const ne=new Set(["_sContent","_sStyle","_sLayout","_sMedia"]),oe=new Map([[d.Design,"Content"],[d.Animation,"Animation"],...k.map(e=>[b[e],e])]);function _e(e){const t=new Set([...Object.values(d),b.Content]);for(const[o,a]of Object.entries(e))if(!t.has(o)&&h(a)?.level===1)return 1;return 2}function ae(e){const t=`${e}.`;return Object.keys(te).filter(o=>o.startsWith(t)).map(o=>o.slice(t.length))}function ie(e,t){const o=x(e),a=z(t);return o?J(o.tier,a):a}function re(e,t){const o=h(t);return o?e==="Content"||e==="Animation"?W(t,o.label):q(t):t}function M(e){return e==="Design"?k:["Animation"]}function Se(e,t){const o=[],a=new Set(ae(t)),C=new Set;let p=!1,u=null;for(const[n,r]of Object.entries(e)){const i=h(r);if(ne.has(n))throw new Error(`${t}.${n}: that key was a tab header until efficient-web-builder 11.0.0, when the panel moved to two tabs (Design · Animation). Its tab is gone, so the key may not come back. Give the heading a key of the section's own (\`_g…\`), or open a Design group with its own key (\`_dDesign: section("Design")\`, \`_dLayout: section("Layout")\`).`);const c=oe.get(n);if(c!==void 0){if(i?.level!==1)throw new Error(`${t}.${n}: that key is reserved for the ${c} heading of the settings panel, but this field is ${i?`a level-${i.level} "${i.label}" header`:"not a header"}, so it cannot serve as one. Rename the section's own field.`);(n===d.Design||n===d.Animation)&&(p=!0),o.push(u={place:c,entries:[],adopted:!0});continue}if(!i){u||o.push(u={place:"Content",entries:[]}),u.entries.push([n,r]);continue}if(a.has(n)||n in K){const s=_(t,n,i.label);if(i.level!==2||!s||!H[s].includes(i.label))throw new Error(`${t}.${n}: ${a.has(n)?"RETIRED":"INJECTED_RETIRED"} (lib/puck/field-groups.ts) lists this sub-heading as one whose name repeats the place it sits in, but it is a level-${i.level} "${i.label}" header in the ${s??"(unclassified)"} place. Only a level-2 header whose label is one of its place's words (PLACE_WORDS) may be retired — anything else is a heading a merchant reads for its own sake. Fix the row or drop it.`);a.has(n)&&C.add(n),o.push(u={place:s,entries:[]});continue}const l=_(t,n,i.label);if(!l)throw new Error(`${t}.${n}: the inspector group "${i.label}" is not classified in LABEL_GROUP (lib/puck/field-groups.ts), so there is no way to say which of ${[...k,"Animation"].join(" / ")} its controls belong under. Classify it — an unclassified group silently lands wherever it was declared, which is the whole bug.`);o.push(u={place:l,entries:[[n,i.level===2?r:ie(r,i.label)]]})}const g=new Set(Object.entries(e).filter(([,n])=>h(n)).map(([n])=>n));for(const[n,r]of[["BLOCK_KEY_GROUP",$],["KEY_GROUP",P]]){const i=Object.keys(r).filter(c=>c.startsWith(`${t}.`)).filter(c=>!g.has(c.slice(t.length+1)));if(i.length)throw new Error(`${t}: ${n} (lib/puck/field-groups.ts) lists ${JSON.stringify(i)}, but no fold header by that key is in this section's panel. Either the heading was renamed or removed and the row is stale, or the row names the wrong key — an override that quietly matches nothing is worse than no override.`)}const v=p?[]:[...a].filter(n=>!C.has(n));if(v.length)throw new Error(`${t}: RETIRED (lib/puck/field-groups.ts) lists ${JSON.stringify(v)}, but this section has no such fold header${v.length>1?"s":""}. Either the heading was renamed or removed and the row is stale, or the row names the wrong section — a list that quietly matches nothing is worse than no list.`);const R=new Set(o.filter(n=>n.entries.length>0).map(n=>n.place)),f=A.filter(n=>M(n).some(r=>R.has(r))),y={};for(const n of f){y[d[n]]=L(n,n===f[0]?f:null);for(const r of M(n)){if(!R.has(r))continue;const i=o.filter(l=>l.place===r),c=i.findIndex(l=>l.adopted);c>0&&i.unshift(...i.splice(c,1)),n==="Design"&&(y[b[r]]=F(r));for(const l of i)for(const[s,j]of l.entries)y[s]=re(r,j)}}return y}function ve(e){return d.Design in e?e:{[d.Design]:L("Design",null),[b.Content]:F("Content"),...e}}function fe(e){return A.some(t=>d[t]in e)}function me(e){const t=A.filter(a=>d[a]in e);if(t.length===0)return e;const o={...e};for(const a of t)o[d[a]]=L(a,a===t[0]?t:null);return o}export{$ as BLOCK_KEY_GROUP,ge as BOUND_CARD_MEDIA_FIELD_KEYS,A as BUCKETS,d as BUCKET_KEY,Z as CARD_MEDIA_FIELD_KEYS,ke as CARD_SHOW_FIELD_KEYS,ye as CARD_STYLE_FIELD_KEYS,k as DESIGN_GROUPS,b as DESIGN_GROUP_KEY,X as EDITOR_ONLY_GROUP,K as INJECTED_RETIRED,P as KEY_GROUP,I as LABEL_GROUP,he as LAYOUT_FIELD_KEYS,H as PLACE_WORDS,te as RETIRED,pe as SECTION_ANIM_FIELD_KEYS,Ce as SECTION_SHAPE_FIELD_KEYS,be as SECTION_THEME_FIELD_KEYS,Se as assignSectionGroups,se as bucketOf,V as bucketOfPlace,_e as foldTopTier,fe as hasBucketTabs,S as headerKeysOf,G as headerKeysOfPlace,_ as placeOf,me as reseatBucketTabs,ae as retiredHeadings,ve as seatDesignBucket};
|
|
1
|
+
import{anchorFields as m,bucketHeader as L,cardMediaFields as N,cardShowFields as Y,cardStyleFields as U,designGroupHeader as F,foldMarker as W,foldMetaOf as h,group as z,quietMarker as q,heightFields as E,sectionAnimationFields as w,sectionShapeFields as O,sectionThemeFields as D,sidesPaddingFields as B,widthField as T}from"./controls.js";import{deviceField as J,deviceMetaOf as x}from"./device-fields.js";import{DESIGN_GROUPS as k,SETTINGS_BUCKETS as Q}from"efficient-easel/panel";import{BUCKET_KEY as d,DESIGN_GROUP_KEY as b}from"./field-buckets.js";const A=Q;function V(e){return e==="Animation"?"Animation":"Design"}const X="Editor only — not shown live",I={"Archive link":"Content",Article:"Content",Blocks:"Content","Blog posts":"Content","Browser mock":"Content",Button:"Content","Call to action":"Content","Car prompt":"Content","Card link":"Content",Cards:"Content","Claims bars":"Content","Contact info":"Content",Content:"Content","Content source":"Content",Contents:"Content",Filters:"Content","Show on a card":"Content",Footnote:"Content",Form:"Content",Founders:"Content","Gallery A":"Content","Gallery B":"Content","Gallery link":"Content",Header:"Content","Header link":"Content","Image caption":"Content","In this issue":"Content",Items:"Content","Kanban columns":"Content",Lead:"Content","Left panel":"Content",Link:"Content",Links:"Content","Message form":"Content",Metadata:"Content",Milestones:"Content","Mockup card":"Content","Newsletter panel":"Content",Offices:"Content",Options:"Content","Others gallery":"Content","Overlay button":"Content",Product:"Content","Product page":"Content",Products:"Content","Pull quote":"Content",Questions:"Content","Recent issues":"Content","Recent posts":"Content",Reviews:"Content","Right panel · actions":"Content","Right panel · choices":"Content","Right panel · form":"Content","Routing groups":"Content",Rows:"Content",Section:"Content","Section header":"Content",Sections:"Content","Signup form":"Content","Source product":"Content","Stat & note":"Content",Stats:"Content","Submit button":"Content","Success state":"Content",Wheel:"Content",Terminal:"Content",Text:"Content","Text column":"Content","Timeline entries":"Content","Top row":"Content",Total:"Content","Trailing note":"Content","“Other” reason":"Content","Background images":"Design",Gallery:"Content",Image:"Content","Image column":"Content",Images:"Content",Logo:"Content",Media:"Content","Background image":"Design",Color:"Design","Image tint":"Design",Style:"Design",Shape:"Design",Texture:"Design","Text style":"Design",Motion:"Animation",Anchor:"Anchor",Arrangement:"Layout","Auto-slide":"Layout",Bar:"Layout","Cell width":"Size",Behavior:"Layout",Controls:"Layout",Diagram:"Layout",[X]:"Layout","Filters shown":"Layout","Slide picker":"Layout",Arrows:"Layout","On a phone":"Layout",Nudge:"Position","Image gallery":"Layout",Grid:"Layout",Layout:"Layout",Padding:"Layout",Price:"Layout",Preview:"Layout",Setup:"Layout","Show / hide elements":"Layout","Show in the buy box":"Layout",Visibility:"Layout",Width:"Size",Height:"Size"},P={"AlloyWheelsListing._gCards":"Design","ProductGrid._gCards":"Design"},$={"Text._gSpacing":"Size","Heading._gSpacing":"Size"};function _(e,t,o){const a=`${e}.${t}`;return $[a]??P[a]??I[o]}function se(e,t,o){const a=_(e,t,o);return a?V(a):void 0}function G(e){return e==="Animation"?[d.Animation]:[d.Design,b[e]]}function S(...e){const t=[];for(const o of e)for(const a of Object.values(o)){const C=x(a),p=h(C?C.inner:a),u=p?I[p.label]:void 0;if(u)for(const g of G(u))t.includes(g)||t.push(g)}return t}const he=[...S(B(),T("full"),E(),m()),...Object.keys(B()),...Object.keys(T("full")),...Object.keys(E()),...Object.keys(m())],be=[...S(D()),...Object.keys(D())],Ce=[...S(O()),...Object.keys(O())],pe=[...S(w()),...Object.keys(w())],Z=Object.keys(N()),ee=new Set(["cardImage","imageBackground"]),ge=[...G(_("ProductGrid","_gCards","Cards")??"Design"),...Z.filter(e=>e.startsWith("_g")||ee.has(e))],ye=Object.keys(U()),ke=Object.keys(Y({bottomDefault:!0})),te={"ImageBlock._gStyle":"duplicated the Style bucket header above it (2026-09-04)","ButtonBlock._gStyle":"duplicated the Style bucket header above it (2026-09-04)","HeroGroup._gContent":"duplicated the Content bucket header above it (2026-09-04)","HeroGroup._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","Footer._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","FooterLogo._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterLogo._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterMenu._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterMenu._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterGroup._gLayout":"duplicated the Layout bucket header above it (2026-09-04)","FooterText._gContent":"duplicated the Content bucket header above it (2026-09-04)","FooterText._gStyle":"duplicated the Style bucket header above it (2026-09-04)","FooterSocial._gStyle":"duplicated the Style bucket header above it (born tabbed, 2026-09-17)","FooterSocial._gLayout":"duplicated the Layout bucket header above it (born tabbed, 2026-09-17)","MenuBlock._gContent":"duplicated the Content bucket header above it (born tabbed, H.1)","MenuBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.1)","EmailFormBlock._gContent":"duplicated the Content bucket header above it (born tabbed, H.1)","SocialLogosBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.1)","SocialLogosBlock._gLayout":"duplicated the Layout bucket header above it (born tabbed, H.1)","SearchBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.2)","CartBlock._gStyle":"duplicated the Style bucket header above it (born tabbed, H.2)","Split._gContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gVehicleContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gWheelContent":"duplicated the Content bucket header above it (2026-09-04)","Gallery._gOthersContent":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gHeadCopy":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gLeftCopy":"duplicated the Content bucket header above it (2026-09-04)","Subscribe._gRightCopy":"duplicated the Content bucket header above it (2026-09-04)","CollectionCard._gContent":"duplicated the Content bucket header above it (A Card Sets Its Own Corners)","HeroSlide._gContent":"duplicated the Content bucket header above it (Hero Slide Tabs And Theme)","BrandStrip._gContent":"duplicated the Content bucket header above it (66338)","BrandStrip._gStyle":"duplicated the Style bucket header above it (66338)","BrandStrip._gLayout":"duplicated the Layout bucket header above it (66338)","KeyFeatures._gContent":"duplicated the Content bucket header above it (66049)","KeyFeatures._gStyle":"duplicated the Style bucket header above it (66049)","ParagraphsA._gContent":"duplicated the Content bucket header above it (66049)","ParagraphsA._gStyle":"duplicated the Style bucket header above it (66049)","Chart._gContent":"duplicated the Content bucket header above it (66049)","Chart._gStyle":"duplicated the Style bucket header above it (66049)","Logos._gContent":"duplicated the Content bucket header above it (66049)","Logos._gStyle":"duplicated the Style bucket header above it (66049)","Mockup._gContent":"duplicated the Content bucket header above it (66049)","Mockup._gStyle":"duplicated the Style bucket header above it (66049)","Stats._gContent":"duplicated the Content bucket header above it (66049)","Stats._gStyle":"duplicated the Style bucket header above it (66049)","StatsParagraph._gContent":"duplicated the Content bucket header above it (66049)","StatsParagraph._gStyle":"duplicated the Style bucket header above it (66049)","Testimonials._gContent":"duplicated the Content bucket header above it (66049)","Testimonials._gStyle":"duplicated the Style bucket header above it (66049)","AppointmentBooking._gContent":"duplicated the Content bucket header above it (66050)","BookingBox._gContent":"duplicated the Content bucket header above it ([SPLIT] Booking Form Into Three Boxes) — the same fault its own section retired in 66050, one level down","FAQ._gContent":"duplicated the Content bucket header above it (66050, family sweep)","FAQ._gLayout":"duplicated the Layout bucket header above it (66050, family sweep)","Form._gContent":"duplicated the Content bucket header above it (66050)","ReviewForm._gContent":"duplicated the Content bucket header above it (66050)","SubmitBuild._gContent":"duplicated the Content bucket header above it (66050)","SubmitBox._gContent":"duplicated the Content bucket header above it ([SPLIT] SubmitBuild Keeps Its Two Columns) — the same fault its own section retired in 66050, one level down","CheckoutCTA._gContent":"duplicated the Content bucket header above it (66051)","CheckoutCTA._gLayout":"duplicated the Layout bucket header above it (66051)","DeliveryOptions._gContent":"duplicated the Content bucket header above it (66051)","DeliveryOptions._gLayout":"duplicated the Layout bucket header above it (66051)","OrderSummary._gContent":"duplicated the Content bucket header above it (66051)","OrderSummary._gLayout":"duplicated the Layout bucket header above it (66051)","PaymentBadges._gContent":"duplicated the Content bucket header above it (66051)","PaymentBadges._gLayout":"duplicated the Layout bucket header above it (66051)","Collections._gContent":"duplicated the Content bucket header above it (66052)","Collections._gLayout":"duplicated the Layout bucket header above it (66052)","DocMasthead._gContent":"duplicated the Content bucket header above it (66053)","Events._gContent":"duplicated the Content bucket header above it (66054)","Events._gLayout":"duplicated the Layout bucket header above it (66054)","FeaturedCover._gContent":"duplicated the Content bucket header above it (66054)","Series._gStyle":"duplicated the Style bucket header above it (66054)","Flex._gContent":"duplicated the Content bucket header above it (66055)","Flex._gLayout":"duplicated the Layout bucket header above it (66055)","SectionHeader._gContent":"duplicated the Content bucket header above it (66055)","Breadcrumb._gContent":"duplicated the Content bucket header above it (66056)","CategoryBar._gStyle":"duplicated the Style bucket header above it (66056)","Hero._gContent":"duplicated the Content bucket header above it (66056)","Hero._gStyle":"duplicated the Style bucket header above it (66056)","HeroSingle._gStyle":"duplicated the Style bucket header above it (66056)","IntroBleed._gContent":"duplicated the Content bucket header above it (66056)","IntroBleed._gLayout":"duplicated the Layout bucket header above it (66056)","BundleOffer._gLayout":"duplicated the Layout bucket header above it (66059)","ProcessSteps._gContent":"duplicated the Content bucket header above it (66059)","Banner._gContent":"duplicated the Content bucket header above it (66060.1)","Banner._gLayout":"duplicated the Layout bucket header above it, and governed no controls (66060.1)","Manifesto._gContent":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gHeadCopy":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gLeftCopy":"duplicated the Content bucket header above it (66060.1)","SubscribeBlogs._gRightCopy":"duplicated the Content bucket header above it (66060.1)","Ticker._gContent":"duplicated the Content bucket header above it (66060.1)","Ticker._gStyle":"duplicated the Style bucket header above it (66060.1)","Timeline._gContent":"duplicated the Content bucket header above it (66060.1)","TitleWithButtons._gContent":"duplicated the Content bucket header above it (66060.1)","TitleWithButtons._gStyle":"duplicated the Style bucket header above it (66060.1)","Cards._gContent":"duplicated the Content bucket header above it (66218)","Cards._gStyle":"duplicated the Style bucket header above it (66218)","Prose._gContent":"duplicated the Content bucket header above it (66218)","Reviews._gContent":"duplicated the Content bucket header above it (66218)","Reviews._gStyle":"duplicated the Style bucket header above it (66218)"},H={Content:["Content"],Size:["Size"],Design:["Design","Style"],Layout:["Layout"],Position:["Position"],Anchor:["Anchor"],Animation:["Animation"]},K={_gAnchor:"repeated the Anchor group heading above it (two tabs, 11.0.0)"};{const e={...B(),...T("full"),...E(),...m(),...D(),...O(),...w()};for(const t of Object.keys(K)){const o=h(e[t]),a=o?I[o.label]:void 0;if(!o||o.level!==2||!a||!H[a].includes(o.label))throw new Error(`INJECTED_RETIRED (lib/puck/field-groups.ts) lists "${t}", but no uniform builder makes a level-2 heading by that key whose label repeats its place's word. The heading was renamed, moved or removed and the row is stale — a list that quietly matches nothing is worse than no list.`)}}const ne=new Set(["_sContent","_sStyle","_sLayout","_sMedia"]),oe=new Map([[d.Design,"Content"],[d.Animation,"Animation"],...k.map(e=>[b[e],e])]);function _e(e){const t=new Set([...Object.values(d),b.Content]);for(const[o,a]of Object.entries(e))if(!t.has(o)&&h(a)?.level===1)return 1;return 2}function ae(e){const t=`${e}.`;return Object.keys(te).filter(o=>o.startsWith(t)).map(o=>o.slice(t.length))}function ie(e,t){const o=x(e),a=z(t);return o?J(o.tier,a):a}function re(e,t){const o=h(t);return o?e==="Content"||e==="Animation"?W(t,o.label):q(t):t}function M(e){return e==="Design"?k:["Animation"]}function Se(e,t){const o=[],a=new Set(ae(t)),C=new Set;let p=!1,u=null;for(const[n,r]of Object.entries(e)){const i=h(r);if(ne.has(n))throw new Error(`${t}.${n}: that key was a tab header until efficient-web-builder 11.0.0, when the panel moved to two tabs (Design · Animation). Its tab is gone, so the key may not come back. Give the heading a key of the section's own (\`_g…\`), or open a Design group with its own key (\`_dDesign: section("Design")\`, \`_dLayout: section("Layout")\`).`);const c=oe.get(n);if(c!==void 0){if(i?.level!==1)throw new Error(`${t}.${n}: that key is reserved for the ${c} heading of the settings panel, but this field is ${i?`a level-${i.level} "${i.label}" header`:"not a header"}, so it cannot serve as one. Rename the section's own field.`);(n===d.Design||n===d.Animation)&&(p=!0),o.push(u={place:c,entries:[],adopted:!0});continue}if(!i){u||o.push(u={place:"Content",entries:[]}),u.entries.push([n,r]);continue}if(a.has(n)||n in K){const s=_(t,n,i.label);if(i.level!==2||!s||!H[s].includes(i.label))throw new Error(`${t}.${n}: ${a.has(n)?"RETIRED":"INJECTED_RETIRED"} (lib/puck/field-groups.ts) lists this sub-heading as one whose name repeats the place it sits in, but it is a level-${i.level} "${i.label}" header in the ${s??"(unclassified)"} place. Only a level-2 header whose label is one of its place's words (PLACE_WORDS) may be retired — anything else is a heading a merchant reads for its own sake. Fix the row or drop it.`);a.has(n)&&C.add(n),o.push(u={place:s,entries:[]});continue}const l=_(t,n,i.label);if(!l)throw new Error(`${t}.${n}: the inspector group "${i.label}" is not classified in LABEL_GROUP (lib/puck/field-groups.ts), so there is no way to say which of ${[...k,"Animation"].join(" / ")} its controls belong under. Classify it — an unclassified group silently lands wherever it was declared, which is the whole bug.`);o.push(u={place:l,entries:[[n,i.level===2?r:ie(r,i.label)]]})}const g=new Set(Object.entries(e).filter(([,n])=>h(n)).map(([n])=>n));for(const[n,r]of[["BLOCK_KEY_GROUP",$],["KEY_GROUP",P]]){const i=Object.keys(r).filter(c=>c.startsWith(`${t}.`)).filter(c=>!g.has(c.slice(t.length+1)));if(i.length)throw new Error(`${t}: ${n} (lib/puck/field-groups.ts) lists ${JSON.stringify(i)}, but no fold header by that key is in this section's panel. Either the heading was renamed or removed and the row is stale, or the row names the wrong key — an override that quietly matches nothing is worse than no override.`)}const v=p?[]:[...a].filter(n=>!C.has(n));if(v.length)throw new Error(`${t}: RETIRED (lib/puck/field-groups.ts) lists ${JSON.stringify(v)}, but this section has no such fold header${v.length>1?"s":""}. Either the heading was renamed or removed and the row is stale, or the row names the wrong section — a list that quietly matches nothing is worse than no list.`);const R=new Set(o.filter(n=>n.entries.length>0).map(n=>n.place)),f=A.filter(n=>M(n).some(r=>R.has(r))),y={};for(const n of f){y[d[n]]=L(n,n===f[0]?f:null);for(const r of M(n)){if(!R.has(r))continue;const i=o.filter(l=>l.place===r),c=i.findIndex(l=>l.adopted);c>0&&i.unshift(...i.splice(c,1)),n==="Design"&&(y[b[r]]=F(r));for(const l of i)for(const[s,j]of l.entries)y[s]=re(r,j)}}return y}function ve(e){return d.Design in e?e:{[d.Design]:L("Design",null),[b.Content]:F("Content"),...e}}function fe(e){return A.some(t=>d[t]in e)}function me(e){const t=A.filter(a=>d[a]in e);if(t.length===0)return e;const o={...e};for(const a of t)o[d[a]]=L(a,a===t[0]?t:null);return o}export{$ as BLOCK_KEY_GROUP,ge as BOUND_CARD_MEDIA_FIELD_KEYS,A as BUCKETS,d as BUCKET_KEY,Z as CARD_MEDIA_FIELD_KEYS,ke as CARD_SHOW_FIELD_KEYS,ye as CARD_STYLE_FIELD_KEYS,k as DESIGN_GROUPS,b as DESIGN_GROUP_KEY,X as EDITOR_ONLY_GROUP,K as INJECTED_RETIRED,P as KEY_GROUP,I as LABEL_GROUP,he as LAYOUT_FIELD_KEYS,H as PLACE_WORDS,te as RETIRED,pe as SECTION_ANIM_FIELD_KEYS,Ce as SECTION_SHAPE_FIELD_KEYS,be as SECTION_THEME_FIELD_KEYS,Se as assignSectionGroups,se as bucketOf,V as bucketOfPlace,_e as foldTopTier,fe as hasBucketTabs,S as headerKeysOf,G as headerKeysOfPlace,_ as placeOf,me as reseatBucketTabs,ae as retiredHeadings,ve as seatDesignBucket};
|
|
@@ -3,7 +3,7 @@ import type { PartEl } from "./part-anchors.js";
|
|
|
3
3
|
import { type PartNeedle } from "./text-parts.js";
|
|
4
4
|
export declare const PART_STYLES_PROP = "_partStyles";
|
|
5
5
|
export declare const PART_STYLED_ATTR = "data-sf-part-styled";
|
|
6
|
-
export declare const PART_CASES: readonly ["none", "upper", "lower"];
|
|
6
|
+
export declare const PART_CASES: readonly ["none", "upper", "capitalize", "lower"];
|
|
7
7
|
export type PartCase = (typeof PART_CASES)[number];
|
|
8
8
|
export declare const PART_WEIGHTS: readonly [400, 500, 600, 700];
|
|
9
9
|
export type PartWeight = (typeof PART_WEIGHTS)[number];
|
|
@@ -62,6 +62,7 @@ export type PartStyle = {
|
|
|
62
62
|
padding?: number;
|
|
63
63
|
width?: number;
|
|
64
64
|
color?: string;
|
|
65
|
+
italic?: boolean;
|
|
65
66
|
};
|
|
66
67
|
export type PartStyleBase = {
|
|
67
68
|
fontKey: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{FONT_OPTIONS as C,FONT_ROLES as I,fontOption as K,SIZE_STEP_OF_ROLE as G}from"../fonts.js";import{encodePartKey as X}from"./part-key.js";import{decodePartId as M,normalizePartText as S}from"./text-parts.js";import{COLOUR_TOKEN as $}from"../word-styles.js";const b="_partStyles",U="data-sf-part-styled",V=["none","upper","lower"],B=[400,500,600,700],Y=["left","center","right","justify"],Z=5,
|
|
2
|
-
`)}function
|
|
1
|
+
import{FONT_OPTIONS as C,FONT_ROLES as I,fontOption as K,SIZE_STEP_OF_ROLE as G}from"../fonts.js";import{encodePartKey as X}from"./part-key.js";import{decodePartId as M,normalizePartText as S}from"./text-parts.js";import{COLOUR_TOKEN as $}from"../word-styles.js";const b="_partStyles",U="data-sf-part-styled",V=["none","upper","capitalize","lower"],B=[400,500,600,700],Y=["left","center","right","justify"],Z=5,q=1e3,J=-5,Q=10,v=0,tt=64,nt=2,et=120,T=1280,rt=10,H={size:{min:Z,max:q,step:1},padding:{min:v,max:tt,step:nt},width:{min:et,max:T,step:rt}},ot=.05,it=.01,st=["line","letter"],at=.5,ct=2.5,lt=-1,ft=1,ut=0,pt=400,E={none:"none",upper:"uppercase",capitalize:"capitalize",lower:"lowercase"};function g(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function F(t){return g(t?.[b])??{}}function L(t,n){const e=F(t);return Object.hasOwn(e,n)?g(e[n])??{}:{}}function Gt(t,n){return Object.values(L(t,n)).filter(e=>e!==void 0).length}function z(t,n,e){const r={...F(t)};if(dt(e).length?r[n]=e:delete r[n],!Object.keys(r).length){const{[b]:o,...i}=t;return i}return{...t,[b]:r}}function dt(t){return Object.entries(t).filter(([,n])=>n!==void 0)}function xt(t){return st.includes(t)}const h=(t,n,e)=>Math.min(e,Math.max(n,t));function mt(t,n){if(xt(t)){const e=Math.round(Number(n));return!Number.isFinite(e)||e===0?null:h(e,J,Q)}if(t==="lineHeight"){const e=Number(n);return Number.isFinite(e)?m(h(e,at,ct),3):null}if(t==="letterSpacing"){const e=Number(n);return Number.isFinite(e)?m(h(e,lt,ft),4):null}if(t==="paragraphSpacing"){const e=Math.round(Number(n));return!Number.isFinite(e)||e<=0?null:h(e,ut,pt)}if(Object.hasOwn(H,t)){const{min:e,max:r}=H[t],o=Math.round(Number(n));return Number.isFinite(o)?h(o,e,r):null}return t==="italic"?typeof n=="boolean"?n:null:t==="role"?I.includes(String(n))?n:null:n}const Pt=[["font","role"],["line","lineHeight"],["letter","letterSpacing"]];function gt(t){const n=[];for(const[e,r]of Pt)e===t?n.push(r):r===t&&n.push(e);return n}function Xt(t,n,e,r){const o={...L(t,n)},i=r==null?null:mt(e,r);if(i===null)delete o[e];else{o[e]=i;for(const s of gt(e))delete o[s]}return z(t,n,o)}function Ut(t,n){return z(t,n,{})}function ht(t){for(const n of V)if(E[n]===t)return n;return"none"}function At(t){return!t||!Object.hasOwn(E,t)?"":E[t]}const _t={heading:"--font-role-heading",heading2:"--font-role-heading2",heading3:"--font-role-heading3",body:"--font-role-body",accent:"--font-role-accent",label:"--font-role-label"};function Tt(t){const n=t.role;return n&&I.includes(n)?n:null}const Rt={headingLarge:"min(clamp(64px,9vw,144px), var(--sf-heading-max,9999px))",headingMedium:"min(32px, var(--sf-heading-max,9999px))",headingSmall:"min(24px, var(--sf-heading-max,9999px))",accent:"32px",body:"14px",label:"12px"};function St(t){const n=G[t],e=Rt[n];return e?`var(--size-${n}, ${e})`:`var(--size-${n})`}function bt(t){const n={};return typeof t.lineHeight=="number"?n.lineHeight=t.lineHeight:t.line&&(n.lineHeight=m(Et+t.line*ot,3)),typeof t.letterSpacing=="number"?n.letterSpacingEm=t.letterSpacing:t.letter&&(n.letterSpacingEm=m(t.letter*it,4)),n}const Et=1,A="--sf-part-para";function R(t,n){const e=Tt(t),r=bt(t),o=t.size?`${t.size}px`:e?St(e):"";return{fontFamily:t.font?yt(t.font):e?`var(${_t[e]})`:"",fontWeight:t.weight?String(t.weight):"",fontSize:o,minWidth:o?"0":"",overflowWrap:o?"break-word":"",lineHeight:r.lineHeight!==void 0?String(r.lineHeight):"",letterSpacing:r.letterSpacingEm!==void 0?`${r.letterSpacingEm}em`:"",[A]:t.paragraphSpacing?`${t.paragraphSpacing}px`:"",textTransform:At(t.case),textAlign:t.align??"",paddingTop:N(t.padding),paddingBottom:N(t.padding),maxWidth:N(t.width),color:Nt(t.color),fontStyle:t.italic===!0?"italic":t.italic===!1?"normal":""}}const Nt=t=>t===void 0||t===""?"":Object.hasOwn($,t)?$[t]:j.test(t)?t:"",j=/^#[0-9a-fA-F]{6}$/;function Vt(t){return j.test(t)}const N=t=>t===void 0?"":`${t}px`,m=(t,n)=>Number(t.toFixed(n));function Bt(t,n){const e=Number.parseFloat(t.fontSize)||16,r=Number.parseFloat(t.lineHeight),o=Number.parseFloat(t.letterSpacing),i=Number.parseFloat(t.paddingTop),s=Number.parseFloat(t.maxWidth);return{fontKey:n,sizePx:e,weight:Ot(Number.parseInt(t.fontWeight,10)),lineRatio:Number.isFinite(r)?m(r/e,3):1.2,letterEm:Number.isFinite(o)?m(o/e,4):0,align:wt(t.textAlign),case:ht(t.textTransform),paddingPx:Number.isFinite(i)?Math.round(i):0,widthPx:Number.isFinite(s)&&s<T?Math.round(s):T}}function Ot(t){return Number.isFinite(t)?B.reduce((n,e)=>Math.abs(e-t)<Math.abs(n-t)?e:n):400}function wt(t){for(const n of Y)if(n===t)return n;return t==="end"?"right":"left"}function Yt(t,n){const e=k(t);if(!e)return"";for(const r of C)if(k(n(r.cssVar))===e)return r.key;return""}const k=t=>(t.split(",")[0]??"").replace(/["']/g,"").replace(/\s+/g," ").trim().toLowerCase();function yt(t){const n=K(t);return n?`var(${n.cssVar})`:""}function Zt(t,n,e,r){return!n||M(n)?.nodeId!==t?null:e.find(i=>r(i.getAttribute("class")))??e[0]??null}function qt(t,n,e=()=>_,r=i=>i,o=$t){let i=0;for(const{element:s,partId:a}of t){const l=M(a)?.propKey;if(!l)continue;const c=r(l),f=Object.hasOwn(n,c)?g(n[c])??{}:{},p=R(f,_),u=w.some(x=>s.style[x]);let d=!1;for(const[x,P]of Object.entries(p))Ht(s,x,P),P&&(d=!0);if(u||w.some(x=>p[x]))for(const x of It(s,o))for(const P of w)x.style[P]=p[P]??"";d&&(i+=1)}return i}function It(t,n){const e=S(t.textContent??""),r=[];let o=t;for(let i=0;i<Mt&&n(o);i+=1){const s=o.parentElement;if(!s||S(s.textContent??"")!==e)break;r.push(s),o=s}return r}const Mt=8;function $t(t){const n=t;return typeof window>"u"||!n?.ownerDocument?!1:window.getComputedStyle(n).display==="inline"}const _={fontKey:"",sizePx:16,weight:400,lineRatio:1,letterEm:0,align:"left",case:"none",paddingPx:0,widthPx:T};function Ht(t,n,e){if(!n.startsWith("--")){t.style[n]=e;return}const r=t.style;typeof r.setProperty=="function"?e?r.setProperty(n,e):r.removeProperty?.(n):r[n]=e;const o=t;n===A&&(e?o.setAttribute?.(W,""):o.removeAttribute?.(W))}const W="data-sf-part-para",Ft=Object.keys(R({},_)),O=new Set(["color","overflowWrap",A,"fontStyle"]),w=Ft.filter(t=>!O.has(t));function Jt(t,n,e,r=o=>o){const o=new Map;for(const a of t){const l=X(a.key,a.row);for(const c of a.texts){const f=o.get(c);f?(f.keys.add(a.key),f.partKeys.add(l)):o.set(c,{keys:new Set([a.key]),partKeys:new Set([l])})}}const i=new Map;for(const a of Object.keys(n)){if(!Lt(a))continue;const l=g(n[a])??{},c=R(l,_);Object.values(c).some(Boolean)&&i.set(a,{stamp:D(e,a),declarations:c})}const s=new Map;for(const[a,{keys:l,partKeys:c}]of o){const f=c.size===1?[...c][0]:l.size===1?[...l][0]:null;if(!f)continue;const p=r(f);if(!Object.hasOwn(n,p))continue;const u=g(n[p])??{},d=R(u,_);Object.values(d).some(Boolean)&&s.set(a,{stamp:D(e,f),declarations:d})}return s.size||i.size?{rules:s,kindRules:i,drawn:new Set(o.keys())}:null}function Lt(t){return t.startsWith("@")}function Qt(t,n){return t?.kindRules.get(n)??null}function D(t,n){const e=r=>r.replace(/[^A-Za-z0-9_-]+/g,"-");return`${e(t)}~${e(n)}`}function vt(t){const n=[],e=new Set,r=o=>{const{stamp:i,declarations:s}=o;if(e.has(i))return;e.add(i);const a=Object.entries(s).filter(([,u])=>u!==""),l=u=>u.map(([d,y])=>`${jt(d)}: ${y}`).join("; "),c=`[${U}="${i}"]`,f=a.filter(([u])=>!O.has(u)),p=a.filter(([u])=>O.has(u));f.length&&n.push(`${c}, *:has(> ${c}) { ${l(f)} }`),p.length&&n.push(`${c} { ${l(p)} }`),s[A]&&n.push(...zt(c))};for(const o of t.rules.values())r(o);for(const o of t.kindRules.values())r(o);return n.join(`
|
|
2
|
+
`)}function zt(t){const n=`var(${A})`,e=":is([data-sf-bullet], [data-sf-number])";return[`${t} br:not(br + br) { display: block; content: ""; margin-top: ${n} }`,`${t} ${e}:not(:first-child) { margin-top: ${n} }`,`${t} ${e}:not(:last-child) { margin-bottom: ${n} }`]}const jt=t=>t.replace(/[A-Z]/g,n=>`-${n.toLowerCase()}`);function tn(t,n){if(!t)return null;const e=S(n),r=t.rules.get(e);if(r)return r;if(e.length<kt||t.drawn.has(e))return null;let o=null;for(const[i,s]of t.rules)if(i.includes(e)){if(o&&o.stamp!==s.stamp)return null;o=s}return o}const kt=8;export{Y as PART_ALIGNS,V as PART_CASES,ft as PART_LETTER_EM_MAX,lt as PART_LETTER_EM_MIN,it as PART_LETTER_STEP,ct as PART_LINE_HEIGHT_MAX,at as PART_LINE_HEIGHT_MIN,ot as PART_LINE_STEP,H as PART_MEASURED_TRACKS,Q as PART_NUDGE_MAX,J as PART_NUDGE_MIN,tt as PART_PADDING_MAX,v as PART_PADDING_MIN,nt as PART_PADDING_STEP,W as PART_PARAGRAPH_ATTR,pt as PART_PARAGRAPH_MAX,ut as PART_PARAGRAPH_MIN,A as PART_PARAGRAPH_VAR,st as PART_RELATIVE_PROPS,q as PART_SIZE_MAX,Z as PART_SIZE_MIN,U as PART_STYLED_ATTR,b as PART_STYLES_PROP,Ft as PART_STYLE_PROPERTIES,B as PART_WEIGHTS,T as PART_WIDTH_MAX,et as PART_WIDTH_MIN,rt as PART_WIDTH_STEP,w as SHARED_PART_PROPERTIES,qt as applyPartStyles,Vt as isHexColour,Lt as isPartKindKey,zt as paragraphRules,ht as partCaseOfTransform,At as partCaseTransform,Yt as partFontKeyOf,Qt as partRuleForKind,tn as partRuleForText,bt as partSpacingOf,Bt as partStyleBase,Gt as partStyleCount,vt as partStyleCss,R as partStyleDeclarations,Zt as partStyleSource,Xt as propsWithPartStyleValue,Ut as propsWithoutPartStyle,Jt as publishedPartStyles,L as readPartStyle,F as readPartStyles};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as s}from"react/jsx-runtime";import{SECTION_BORDER_CLASS as i,sectionBorderStyle as d}from"../../content/borders.js";const l={name:"sectionBorder",applies:(r,n,e)=>n.isSection(r)&&!!e&&typeof e.render=="function",draw(r){const n=r.render;r.render=e=>{const o=d(e.sectionBorder,e.sectionBorderPhone),t=n(e);return o?s("div",{className:i,style:{display:"contents",...o},children:t}):t}}};export{l as sectionBorder};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{catalogueLabel as
|
|
1
|
+
import{catalogueLabel as m}from"./catalogue-labels.js";import{cellWidth as n}from"./cell-width.js";import{clickableParts as s}from"./clickable-parts.js";import{cardCorners as p,sectionCorners as c}from"./corners.js";import{emptyHeadings as f}from"./empty-headings.js";import{hiddenNodes as a}from"./hidden-nodes.js";import{sectionAnchor as l}from"./section-anchor.js";import{sectionAnimation as d}from"./section-animation.js";import{sectionHeight as h}from"./section-height.js";import{sectionBorder as g}from"./borders.js";import{blockPadding as u,sectionPadding as P}from"./section-padding.js";import{sectionTheme as A,slideTheme as b}from"./section-theme.js";import{buttonAlignInRow as w,containedWidth as C,imageWidth as S,sectionWidth as W}from"./section-width.js";import{blockGroups as B,sectionGroups as G}from"./settings-groups.js";import{openSlotDisallow as H,sectionGroupAllow as L}from"./slot-rules.js";import{registryPassContext as Q}from"./registry-context.js";const T=[L,H,P,c,g,p,u,n,W,C,w,S,h,l,A,d,b,G,B,f,s,a,m];function F(r,e,o){const i=e;for(const t of T)t.applies(r,o,i)&&(o.inspector&&t.panel?.(i,r,o.inspector,o),t.draw?.(i,r,o));return e}export{T as BLOCK_PASSES,F as applyBlockPasses,Q as registryPassContext};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BLOCK_THEME_FOLLOW_LABEL as i,SECTION_THEME_FOLLOW_LABEL as e}from"../../../components/SectionThemePicker.js";import{anchorFields as
|
|
1
|
+
import{BLOCK_THEME_FOLLOW_LABEL as i,SECTION_THEME_FOLLOW_LABEL as e}from"../../../components/SectionThemePicker.js";import{anchorFields as s,cardShapeFields as d,cellWidthFields as o,heightFields as t,sectionAnimationFields as r,sectionShapeFields as l,sectionThemeFields as n,slider as F,spacingFields as m,sidesPaddingFields as p,widthField as a}from"../controls.js";import{assignSectionGroups as c}from"../field-groups.js";import{dropEmptyHeadings as E}from"../panel-drop-empty-headings.js";const _={spacingFields:m,sidesPaddingFields:p,sectionShapeFields:l,cardShapeFields:d,cellWidthFields:o,widthField:a,heightFields:t,anchorFields:s,sectionThemeFields:n,sectionAnimationFields:r,slider:F,assignSectionGroups:c,dropEmptyHeadings:E,SECTION_THEME_FOLLOW_LABEL:e,BLOCK_THEME_FOLLOW_LABEL:i};export{_ as PASS_INSPECTOR};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as g}from"react/jsx-runtime";import{isBackgroundBox as f}from"../../content/box-background.js";import{resolveSectionPadding as m,sectionPadAttrs as r}from"../../content/section-padding.js";const c={ParagraphsA:{top:60,bottom:80},StatsParagraph:{top:120,bottom:120},Timeline:{top:120,bottom:120},Footprint:{top:120,bottom:120},TimelineTrack:{top:120,bottom:120},TitleWithButtons:{top:140,bottom:140},ProcessSteps:{top:120,bottom:120},DetailRows:{top:100,bottom:100}},P=new Set(Object.keys(c)),h=new Set(["Hero","HeroSingle","IntroBleed","CategoryBar","DocTabs"]),l=new Set(["ProductGrid"]);function a(t,o,n=!1){const d=t.render;t.render=e=>{if(o?.(e))return d(e);const i=n?r(e.sectionPaddingTop,e.sectionPaddingBottom,e.sectionPaddingTopPhone,e.sectionPaddingBottomPhone,e.sectionPaddingLeft,e.sectionPaddingRight,e.sectionPaddingLeftPhone,e.sectionPaddingRightPhone):r(e.sectionPaddingTop,e.sectionPaddingBottom,e.sectionPaddingTopPhone,e.sectionPaddingBottomPhone),s=d(e);return i?g("div",{className:i.className,style:i.style,children:s}):s}}const b={name:"sectionPadding",applies:(t,o,n)=>o.isSection(t)&&!h.has(t)&&!!n&&typeof n.render=="function",panel(t,o,n){P.has(o)||l.has(o)||(t.fields={...t.fields,...n.sidesPaddingFields()})},draw(t,o){if(P.has(o)){const n=t.render,d=c[o];t.render=e=>{const i=m(e,d);return n({...e,padTop:i.top,padBottom:i.bottom})};return}if(l.has(o)){a(t);return}a(t,o==="Flex"?n=>f(n.bgImage):void 0,!0)}},u=["Heading","Text"],B={name:"blockPadding",applies:(t,o,n)=>u.includes(t)&&!!n&&typeof n.render=="function",panel(t,o,n){t.fields={...t.fields,...n.sidesPaddingFields()}},draw(t){a(t,void 0,!0)}};export{P as SECTION_PAD_INNER,c as SECTION_PAD_INNER_DEFAULTS,B as blockPadding,b as sectionPadding};
|
|
@@ -21,6 +21,11 @@ export type PassInspector = {
|
|
|
21
21
|
spacingFields: (opts: {
|
|
22
22
|
phone: true;
|
|
23
23
|
}) => FieldMap;
|
|
24
|
+
sidesPaddingFields: (opts?: {
|
|
25
|
+
keys?: Partial<Record<"top" | "right" | "bottom" | "left", string>>;
|
|
26
|
+
phone?: boolean;
|
|
27
|
+
group?: boolean;
|
|
28
|
+
}) => FieldMap;
|
|
24
29
|
sectionShapeFields: () => FieldMap;
|
|
25
30
|
cardShapeFields: () => FieldMap;
|
|
26
31
|
cellWidthFields: () => FieldMap;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{failedChecks as $,ruleChecks as x}from"./rule.js";import{isPanelFile as v,readLabels as w,readPanelLabels as C}from"./support/label-extraction.js";import{registryFiles as T}from"./support/registry-source.js";const p=["kicker","tagline","headline","blurb","description","copy","paragraph","photo","picture","cta","kind","class","grayscale","greyscale","colour","align","align items","text alignment","centre","catalogue","behaviour","labelled","stylised","stack","container","gutter","margin","site width","max width","contained","boxed","header offset","clearance"],j=
|
|
1
|
+
import{failedChecks as $,ruleChecks as x}from"./rule.js";import{isPanelFile as v,readLabels as w,readPanelLabels as C}from"./support/label-extraction.js";import{registryFiles as T}from"./support/registry-source.js";const p=["kicker","tagline","headline","blurb","description","copy","paragraph","photo","picture","cta","kind","class","grayscale","greyscale","colour","align","align items","text alignment","centre","catalogue","behaviour","labelled","stylised","stack","container","gutter","margin","site width","max width","contained","boxed","header offset","clearance","typeface","font family","leading","character spacing","kerning","text transform"],j=a=>a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),R=p.map(a=>({word:a,pattern:new RegExp(`\\b${j(a)}s?\\b`)}));function H(a){return a.split(/\(| — /)[0].trim()}function k(a,c){const t=H(a).toLowerCase(),o=[];for(const{word:d,pattern:l}of R)l.test(t)&&o.push(`N10.1 "${d}"`);/^title\b/.test(t)&&!c&&o.push("N10.2 Title at section level"),/^heading\b/.test(t)&&c&&o.push("N10.2 Heading at item level");const e=/\b(button|link)\s+(text|label|href|url)$/.exec(t);return e&&o.push(`N10.3 "${e[1]} ${e[2]}"`),t==="text"&&o.push("N10.4 bare Text"),o}function N(a,c,t){const o=T(a),e=a.filter(v),d=new Map,l=[],h=(n,s)=>{for(const f of n){const y=s(f.text);d.set(f.path,y.length);for(const m of y)l.push({...m,file:f.path,why:k(m.label,m.item)})}};h(o,w),h(e,C);for(const[n,s]of Object.entries(c.floors)){const f=d.get(n);t(`${n} yields >= ${s} labels (found ${f??"none: not read"})`,f!==void 0&&f>=s,f===void 0?"it has a floor but was not read — it dropped out of the panels and the registry":"the reader is broken, not the panel")}const r=o.reduce((n,s)=>n+(d.get(s.path)??0),0);t(`the block registry yields >= ${c.minRegistryLabels} labels across ${o.length} files (found ${r})`,r>=c.minRegistryLabels,"the reader is broken, not the panel");const g=l.filter(n=>n.why.length>0),u=n=>c.parked.some(s=>s.file===n.file&&s.label===n.label),i=g.filter(n=>!u(n)),b=l.filter(n=>n.item).length;t(`every field label obeys N10.1–N10.4 (${l.length} read across ${o.length+e.length} files: ${l.length-b} section-level, ${b} item-level)`,i.length===0,`${i.length} break doc/naming.md N10:
|
|
2
2
|
`+i.map(n=>` ${n.file}:${n.line} ${n.item?"[item] ":"[section]"} ${JSON.stringify(n.label)} — ${n.why.join(", ")}`).join(`
|
|
3
|
-
`));for(const n of c.parked)t(`PARKED ${n.file} ${JSON.stringify(n.label)} still breaks N10 — ${n.why}`,g.some(
|
|
3
|
+
`));for(const n of c.parked)t(`PARKED ${n.file} ${JSON.stringify(n.label)} still breaks N10 — ${n.why}`,g.some(s=>s.file===n.file&&s.label===n.label),"it no longer breaks N10 (renamed, or its row deleted) — take it out of the list");return{read:l,live:i}}function L(a,c){const{check:t,report:o}=x("label vocabulary");t(`N10.1 forbids ${p.length} words, each written once, lower-case and trimmed: ${[...p].sort().join(", ")}`,p.length>0&&new Set(p).size===p.length&&p.every(e=>e===e.trim().toLowerCase()&&e.length>0),JSON.stringify(p));{const e=(l,h=!1)=>k(l,h),d=p.filter(l=>{const h=`N10.1 "${l}"`,r=l[0].toUpperCase()+l.slice(1);return!e(r).includes(h)||!e(`Card ${l}s`).includes(h)});t("N10.1 catches every word on the list, alone and as a qualified plural",d.length===0,d.join(", ")),t("N10.1 …but not inside a longer word",e("Copyright").length===0&&e("Classic layout").length===0&&e("Stacking order").length===0,JSON.stringify([e("Copyright"),e("Classic layout"),e("Stacking order")])),t("N10.2 a section's label may not start Title, an item's may not start Heading",e("Title").includes("N10.2 Title at section level")&&e("Heading",!0).includes("N10.2 Heading at item level")),t("N10.2 …and each is right at its own level",e("Heading").length===0&&e("Title",!0).length===0&&e("Card title").length===0&&e("Section heading",!0).length===0),t("N10.3 nothing follows `button` or `link`",e("Button text").includes('N10.3 "button text"')&&e("Submit button label").includes('N10.3 "button label"')&&e("Link href").includes('N10.3 "link href"')&&e("Archive link URL").includes('N10.3 "link url"')),t("N10.3 …and the pair itself passes",e("Button").length===0&&e("Button link").length===0&&e("Archive link").length===0),t("N10.4 a bare Text fails; Alt text is a name",e("Text").includes("N10.4 bare Text")&&e("Alt text").length===0),t("the name is cut at a hint tail, so a hint cannot corrupt the verdict",e("Body (blank line = new paragraph)").length===0&&e("Copy — the words under it").includes('N10.1 "copy"'))}{const e=[{path:"lib/puck/config.tsx",text:['heading: plainText("Heading"),','eyebrow: plainText("Kicker"),','title: plainText("Title"),','cards: { type: "array", label: "Cards",'," arrayFields: {",' heading: plainText("Heading"),',' title: plainText("Card title"),'," },","},",'layout: { type: "select", label: "Layout",',' options: [{ label: "Centre", value: "center" }] },'].join(`
|
|
4
4
|
`)},{path:"components/FixturePanel.tsx",text:['import { SettingsField } from "efficient-easel/panel";',"const items = [",' { label: "Copy", onClick: () => copy() },',"];","const rows = [",' { key: "photo", label: "Photo", group: "media" },',"];","const tabs: SettingsTabItem[] = [",' { id: "text", label: "Text" },',"];",'<SettingsField label="Colour" />'].join(`
|
|
5
|
-
`)},{path:"components/HandRolled.tsx",text:'<div className="sf-field"><Row label="Gutter" /></div>'},{path:"components/ShopperForm.tsx",text:'<Field label="Description" />'}],d=x("fixture"),{read:l,live:h}=N(e,{floors:{"components/FixturePanel.tsx":5,"components/HandRolled.tsx":1,"components/Moved.tsx":1},minRegistryLabels:8,parked:[{file:"components/FixturePanel.tsx",label:"Colour",why:"fixture: still breaks"},{file:"lib/puck/config.tsx",label:"Headline",why:"fixture: renamed long ago"}]},d.check),
|
|
5
|
+
`)},{path:"components/HandRolled.tsx",text:'<div className="sf-field"><Row label="Gutter" /></div>'},{path:"components/ShopperForm.tsx",text:'<Field label="Description" />'}],d=x("fixture"),{read:l,live:h}=N(e,{floors:{"components/FixturePanel.tsx":5,"components/HandRolled.tsx":1,"components/Moved.tsx":1},minRegistryLabels:8,parked:[{file:"components/FixturePanel.tsx",label:"Colour",why:"fixture: still breaks"},{file:"lib/puck/config.tsx",label:"Headline",why:"fixture: renamed long ago"}]},d.check),r=$(d.report()).map(i=>i.name),g=i=>r.some(b=>b.startsWith(i)),u=l.map(i=>i.label);t("the fixture reads the registry's fields and the panels' rows, and no option, action, tab or shopper's form",u.join(" · ")==="Heading · Kicker · Title · Cards · Heading · Card title · Layout · Photo · Colour · Gutter",u.join(" · ")),t("…and the breaches are the ones it wrote, the parked one waived",h.map(i=>`${i.label}=${i.why.join("+")}`).join(" · ")==='Kicker=N10.1 "kicker" · Title=N10.2 Title at section level · Heading=N10.2 Heading at item level · Photo=N10.1 "photo" · Gutter=N10.1 "gutter"',JSON.stringify(h.map(i=>[i.label,i.why]))),t("a file under its floor goes red",g("components/FixturePanel.tsx yields")&&!g("components/HandRolled.tsx yields"),r.join(" | ")),t("a floored file that is not read goes red",g("components/Moved.tsx yields"),r.join(" | ")),t("a registry under its floor goes red",g("the block registry yields"),r.join(" | ")),t("a PARKED label that no longer breaks N10 goes red, and one that still does is waived",g('PARKED lib/puck/config.tsx "Headline"')&&!g('PARKED components/FixturePanel.tsx "Colour"'),r.join(" | ")),t("the verdict goes red on a live breach",g("every field label obeys"),r.join(" | ")),t("…and nothing else did",r.length===5,r.join(" | "))}return N(a,c,t),o()}export{p as NEVER_WORDS,L as labelVocabulary,k as vocabularyBreaches};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ruleChecks as h}from"./rule.js";const o="--sf-border-";function p(i,{resolver:t="lib/content/borders.ts"}={}){const{check:s,report:c}=h("one border resolver"),n=i.filter(e=>/\.(?:ts|tsx|js|jsx|mjs)$/.test(e.path));s(`the resolver ${t} is in the tree`,n.some(e=>e.path===t&&e.text.includes(o)));const r=n.filter(e=>e.path!==t&&e.text.includes(o)).map(e=>e.path);return s(`no other file writes a ${o}* property`,r.length===0,r.length?`a second border resolver: ${r.join(", ")}`:void 0),c()}export{p as oneBorderResolver};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const a="components/PartSettingsPanel.tsx";function w(t){let n="",e=0,o=null;for(;e<t.length;){const s=t[e],i=t[e+1];if(o){if(n+=s,s==="\\"){n+=i??"",e+=2;continue}s===o&&(o=null),e+=1;continue}if(s==='"'||s==="'"||s==="`"){o=s,n+=s,e+=1;continue}if(s==="/"&&i==="/"){for(;e<t.length&&t[e]!==`
|
|
2
2
|
`;)e+=1;continue}if(s==="/"&&i==="*"){for(e+=2;e<t.length&&!(t[e]==="*"&&t[e+1]==="/");)t[e]===`
|
|
3
3
|
`&&(n+=`
|
|
4
|
-
`),e+=1;e+=2;continue}n+=s,e+=1}return n}function l(t){throw new Error(t)}function S(t){const n=/const PART_FIELDS\s*=\s*\[([\s\S]*?)\]\s*as const/.exec(t);n||l(`${a}: no \`const PART_FIELDS = [ … ] as const\` — this reader takes the panel's row labels from that one table, and cannot find it. Has it been renamed?`);const e=new Map;for(const o of n[1].matchAll(/\{\s*key:\s*"([^"]+)"\s*,\s*label:\s*"([^"]+)"/g))e.set(o[1],o[2]);return e.size===0&&l(`${a}: PART_FIELDS holds no \`key\`/\`label\` pairs.`),e}function
|
|
4
|
+
`),e+=1;e+=2;continue}n+=s,e+=1}return n}function l(t){throw new Error(t)}function S(t){const n=/const PART_FIELDS\s*=\s*\[([\s\S]*?)\]\s*as const/.exec(t);if(!n&&!/<Slider\b/.test(t))return new Map;n||l(`${a}: no \`const PART_FIELDS = [ … ] as const\` — this reader takes the panel's row labels from that one table, and cannot find it. Has it been renamed?`);const e=new Map;for(const o of n[1].matchAll(/\{\s*key:\s*"([^"]+)"\s*,\s*label:\s*"([^"]+)"/g))e.set(o[1],o[2]);return e.size===0&&/<Slider\b/.test(t)&&l(`${a}: PART_FIELDS holds no \`key\`/\`label\` pairs.`),e}function b(t){const n=w(t),e=S(n),o=[];for(const s of n.matchAll(/<Slider[\s/>]/g)){const i=s.index??0,c=n.indexOf("/>",i);c===-1&&l(`${a}: a <Slider at offset ${i} is not self-closing. This reader reads a call site's props up to \`/>\`; a Slider with children needs a different reader.`);const u=n.slice(i,c),d=n.slice(0,i),h=/((?:\s*case\s+"[^"]+"\s*:)+)\s*return\s*\(\s*$/.exec(d),f=h?[...h[1].matchAll(/case\s+"([^"]+)"\s*:/g)].map(r=>r[1]):[];f.length===0&&l(`${a}: the <Slider at line ${d.split(`
|
|
5
5
|
`).length} is not returned DIRECTLY by a
|
|
6
6
|
\`case "…": return (\` branch, so this reader cannot say which field it draws.
|
|
7
7
|
|
|
@@ -13,5 +13,5 @@ const a="components/PartSettingsPanel.tsx";function w(t){let n="",e=0,o=null;for
|
|
|
13
13
|
is the wrapper, not the slot, and the row would look fixed while measuring the same 129px.
|
|
14
14
|
|
|
15
15
|
So a wrap needs a decision, not a wider selector — either unwrap it, or give the wrapper the
|
|
16
|
-
row and say why in \`components/storefront-editor.css\`. Card 66247.`),o.push({fields:f,line:
|
|
17
|
-
`).length,readoutOff:/readout=\{false\}/.test(u),labelFor(r){const p=e.get(r);return p||l(`${a}: field \`${r}\` draws a slider but is not in PART_FIELDS, so it has no row label. The two declarations have drifted apart.`),p}})}return o}const
|
|
16
|
+
row and say why in \`components/storefront-editor.css\`. Card 66247.`),o.push({fields:f,line:d.split(`
|
|
17
|
+
`).length,readoutOff:/readout=\{false\}/.test(u),labelFor(r){const p=e.get(r);return p||l(`${a}: field \`${r}\` draws a slider but is not in PART_FIELDS, so it has no row label. The two declarations have drifted apart.`),p}})}return o}const m=t=>t.flatMap(n=>n.fields);export{a as PART_PANEL,b as readSliderCallSites,m as sliderFields};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-web-builder",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "17.0.0",
|
|
4
4
|
"description": "The EFFICIENT website builder: the website editor, the general sections and the renderer that draws them, compiled. Hostable by any EFFICIENT product; nothing here imports a host.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Efficient Pty Ltd",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@tabler/icons-react": "^3.46.0",
|
|
43
|
-
"efficient-easel": "^
|
|
44
|
-
"efficient-shell": "^7.
|
|
43
|
+
"efficient-easel": "^10.1.0",
|
|
44
|
+
"efficient-shell": "^7.47.0",
|
|
45
45
|
"isomorphic-dompurify": "^3.18.0",
|
|
46
46
|
"next": ">=16",
|
|
47
47
|
"react": ">=19",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"@types/node": "^20",
|
|
60
60
|
"@types/react": "^19",
|
|
61
61
|
"@types/react-dom": "^19",
|
|
62
|
-
"efficient-easel": "^
|
|
63
|
-
"efficient-shell": "^7.
|
|
62
|
+
"efficient-easel": "^10.1.0",
|
|
63
|
+
"efficient-shell": "^7.47.0",
|
|
64
64
|
"esbuild": "^0.28.0",
|
|
65
65
|
"happy-dom": "^20.14.5",
|
|
66
66
|
"isomorphic-dompurify": "^3.18.0",
|