efficient-web-builder 11.0.0 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 11.0.1 - 2026-10-14
4
+
5
+ Three bugs from 11.0.0 (the two-tab move), found in the storefront-blocks bump.
6
+
7
+ - **A parent panel no longer lists its children; Layers does** (Lewis's rule:
8
+ children are picked in Layers). The child lists are gone from Hero
9
+ (`slideList`), Hero slide (`groupList`), Hero box (`HeroGroup.contentList`),
10
+ HeroSingle (`boxList`), Process steps (`boxList`), Box (`Flex.contentList`)
11
+ and Grid (`contentList`). The slots and the stored data do not change: a
12
+ child is still added, picked, moved and deleted from Layers, the Add panel
13
+ and right-click. The "too many boxes" note on a Hero slide and HeroSingle
14
+ stays as its own row (`slotNoticeField`). The empty "Boxes" band those two
15
+ panels had left is gone too. Guard: `scripts/test-child-lists-live-in-layers.tsx` (new).
16
+ - **A card Box's left and right padding is in the Design tab again.** A Box
17
+ with a background picture gets Padding left / right; 11.0.0 put them at the
18
+ end of the list, on the Animation tab. They now sit right after Padding top
19
+ / bottom. Guard: `scripts/test-box-card-padding-in-design.tsx` (new).
20
+ - **Copy style copies HeroSingle's tint again.** Its Tint color and Tint
21
+ opacity were under the Media group, which 11.0.0 moved into the Content
22
+ part, and Copy style never copies Content. They now have their own "Image
23
+ tint" group (Design), like the Hero slide's. Only rows move, no key changes.
24
+ Guard: `scripts/test-copy-style-takes-every-look.tsx` (new) checks every
25
+ look row (colour, opacity, overlay, tint, darken, blur, filter) of every
26
+ block.
27
+
3
28
  ## 11.0.0 - 2026-10-14
4
29
 
5
30
  - **Breaking: the settings panel has two tabs, Design and Animation** (owner,
@@ -9,6 +9,10 @@ export declare function SlotChildRows({ parent, parentType, label, rowName, onSe
9
9
  onAddChild: SlotChildActions["addChild"];
10
10
  nestDepth?: number;
11
11
  }): import("react").JSX.Element | null;
12
+ export declare function slotNoticeOf(parentType: string, children: readonly unknown[]): string | null;
13
+ export declare function SlotNoticeField({ parentType }: {
14
+ parentType: string;
15
+ }): import("react").JSX.Element | null;
12
16
  export declare function rowNamerFor(actions: SlotChildActions, parentType: string): SlotChildActions["childRowName"];
13
17
  export default function SlotChildRowsField({ parentType, label, }: {
14
18
  parentType: string;
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as A,jsxs as C}from"react/jsx-runtime";import{useEasel as N}from"efficient-easel/easel";import{LayersIcon as b}from"efficient-easel/icons";import{SettingsDrill as k,SettingsField as F}from"efficient-easel/panel";import _ from"./AddBlockRow.js";import j from"./AddChildRow.js";import{useSlotChildActions as D}from"./SlotChildActionsContext.js";import{HERO_GROUP_TYPE as $,heroGroupNestDepth as E}from"../lib/hero-group-placement.js";import{canAddTo as R}from"../lib/puck/add-target.js";import{say as I}from"../lib/editor-words.js";function O({parent:o,parentType:t,label:d,rowName:r,onSelectChild:s,onAddChild:m,nestDepth:a=0}){const h=R(t,a);if(!h)return null;const{slot:n,choices:u,spec:i}=h,p=String(o.props.id),f=`${p}:${n}`,l=Array.isArray(o.props[n])?o.props[n]:[],x=i?.addBlocked?.(l)??null,g=i?.notice?.(l)??null,S=C(A,{children:[g?e("p",{className:"sf-note",children:g}):null,l.map((c,w)=>e(k,{name:r(c),onOpen:()=>s(f,w,String(c.props.id),t)},String(c.props.id??`${f}-${w}`))),u?e(_,{choices:u,onPick:c=>m(p,n,c,l.length,t)}):i.fixed?null:e(j,{label:i.addLabel,blocked:x,onAdd:()=>m(p,n,i.childType,l.length,t)})]});return e("div",{className:"sf-slot-rows",children:d?e(F,{label:I(d),icon:e(b,{}),value:String(l.length),children:S}):S})}function P(o,t){return R(t)?.source==="footer"?o.blockRowName:o.childRowName}function v({parentType:o,label:t}){const{appState:d,selectedItem:r}=N(a=>a),s=D();if(!s||!r||r.type!==o)return null;const m=o===$?E(d?.data,String(r.props.id)):0;return e(O,{parent:r,parentType:o,label:t,rowName:P(s,o),onSelectChild:s.selectChild,onAddChild:s.addChild,nestDepth:m})}export{O as SlotChildRows,v as default,P as rowNamerFor};
1
+ "use client";import{jsx as r,Fragment as R,jsxs as k}from"react/jsx-runtime";import{useEasel as x}from"efficient-easel/easel";import{LayersIcon as C}from"efficient-easel/icons";import{SettingsDrill as b,SettingsField as F}from"efficient-easel/panel";import _ from"./AddBlockRow.js";import j from"./AddChildRow.js";import{useSlotChildActions as D}from"./SlotChildActionsContext.js";import{HERO_GROUP_TYPE as I,heroGroupNestDepth as O}from"../lib/hero-group-placement.js";import{canAddTo as p}from"../lib/puck/add-target.js";import{say as $}from"../lib/editor-words.js";function E({parent:o,parentType:t,label:s,rowName:n,onSelectChild:e,onAddChild:l,nestDepth:a=0}){const f=p(t,a);if(!f)return null;const{slot:c,choices:h,spec:d}=f,u=String(o.props.id),g=`${u}:${c}`,i=Array.isArray(o.props[c])?o.props[c]:[],A=d?.addBlocked?.(i)??null,S=d?.notice?.(i)??null,N=k(R,{children:[S?r("p",{className:"sf-note",children:S}):null,i.map((m,w)=>r(b,{name:n(m),onOpen:()=>e(g,w,String(m.props.id),t)},String(m.props.id??`${g}-${w}`))),h?r(_,{choices:h,onPick:m=>l(u,c,m,i.length,t)}):d.fixed?null:r(j,{label:d.addLabel,blocked:A,onAdd:()=>l(u,c,d.childType,i.length,t)})]});return r("div",{className:"sf-slot-rows",children:s?r(F,{label:$(s),icon:r(C,{}),value:String(i.length),children:N}):N})}function P(o,t){return p(o)?.spec?.notice?.(t)??null}function M({parentType:o}){const{selectedItem:t}=x(l=>l);if(!t||t.type!==o)return null;const s=p(o)?.slot,n=s&&Array.isArray(t.props[s])?t.props[s]:[],e=P(o,n);return e?r("p",{className:"sf-note",children:e}):null}function v(o,t){return p(t)?.source==="footer"?o.blockRowName:o.childRowName}function y({parentType:o,label:t}){const{appState:s,selectedItem:n}=x(a=>a),e=D();if(!e||!n||n.type!==o)return null;const l=o===I?O(s?.data,String(n.props.id)):0;return r(E,{parent:n,parentType:o,label:t,rowName:v(e,o),onSelectChild:e.selectChild,onAddChild:e.addChild,nestDepth:l})}export{E as SlotChildRows,M as SlotNoticeField,y as default,v as rowNamerFor,P as slotNoticeOf};
@@ -1 +1 @@
1
- import{jsx as l}from"react/jsx-runtime";import{BOX_CARD_PAD as t,BOX_CARD_SIDE as d,BOX_DARKEN as e,BOX_DARKEN_STYLES as a,isBackgroundBox as p}from"../../../../content/box-background.js";import{containerDirectionPoints as c}from"../../../../content/container-direction.js";import{OpacityIcon as m,StylesIcon as g}from"efficient-easel/icons";import{boxAlignField as x,boxBlockSpacingField as F,boxJustifyField as k,boxPhoneRowField as u,boxShareField as b,boxWrapField as f,gapField as B,group as n,placementField as _,plainText as y,select as S,slider as D,spacingFields as h,upload as R}from"../../../controls.js";import{slotRowsField as A}from"../../shared-fields.js";import{FlexSlots as I}from"./render.js";const j={fields:{_gContent:n("Content"),contentList:A("Flex","Blocks"),content:I.content,_gLayout:n("Layout"),direction:{type:"radio",options:c("Flex")},label:y("Tab name"),gap:B("Flex"),justify:k(),align:x(),wrap:f(),share:b(),phoneRow:u(),blockSpacing:F(),_gBackground:n("Background image"),bgImage:R("Image","image/*"),darken:D("Darken",l(m,{}),e.min,e.max,e.step,e.fallback,e.unit),darkenStyle:S("Darken style",l(g,{}),a,a[0].value),placement:_("Content position",{stacking:!1})},resolveFields:(r,{fields:i})=>{const s=r.props;if(p(s.bgImage))return{...i,...h({phone:!0,top:t.desktop,bottom:t.desktop,sides:!0,side:t.side,sidePhone:t.sidePhone,sideBounds:d})};const o={...i};return delete o.darken,delete o.darkenStyle,delete o.placement,o}};export{j as FlexFields};
1
+ import{jsx as d}from"react/jsx-runtime";import{BOX_CARD_PAD as n,BOX_CARD_SIDE as f,BOX_DARKEN as e,BOX_DARKEN_STYLES as p,isBackgroundBox as u}from"../../../../content/box-background.js";import{containerDirectionPoints as b}from"../../../../content/container-direction.js";import{OpacityIcon as k,StylesIcon as x}from"efficient-easel/icons";import{boxAlignField as F,boxBlockSpacingField as y,boxJustifyField as _,boxPhoneRowField as B,boxShareField as S,boxWrapField as D,gapField as O,group as s,placementField as h,plainText as j,select as A,slider as I,spacingFields as R,upload as C}from"../../../controls.js";import{FlexSlots as P}from"./render.js";const K={fields:{_gContent:s("Content"),content:P.content,_gLayout:s("Layout"),direction:{type:"radio",options:b("Flex")},label:j("Tab name"),gap:O("Flex"),justify:_(),align:F(),wrap:D(),share:S(),phoneRow:B(),blockSpacing:y(),_gBackground:s("Background image"),bgImage:C("Image","image/*"),darken:I("Darken",d(k,{}),e.min,e.max,e.step,e.fallback,e.unit),darkenStyle:A("Darken style",d(x,{}),p,p[0].value),placement:h("Content position",{stacking:!1})},resolveFields:(c,{fields:l})=>{const g=c.props;if(u(g.bgImage)){const i=R({phone:!0,top:n.desktop,bottom:n.desktop,sides:!0,side:n.side,sidePhone:n.sidePhone,sideBounds:f}),t={};let a=!1;for(const[r,m]of Object.entries(l)){if(r in i){a||Object.assign(t,i),a=!0;continue}t[r]=m}return a||Object.assign(t,i),t}const o={...l};return delete o.darken,delete o.darkenStyle,delete o.placement,o}};export{K as FlexFields};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{GRID_COLUMNS_FALLBACK as i,GRID_MAX_COLUMNS as n,GRID_MOBILE_MAX_COLUMNS as s,GRID_MOBILE_MIN_COLUMNS as m}from"../../../../content/grid-span.js";import{ColumnsIcon as t,PhoneIcon as l}from"efficient-easel/icons";import{gapField as e,slider as r}from"../../../controls.js";import{slotRowsField as _}from"../../shared-fields.js";import{GridSlots as p}from"./render.js";const G={fields:{contentList:_("Grid","Blocks"),columns:r("Columns",o(t,{}),1,n,1,i),mobileColumns:r("Columns on phone",o(l,{}),m,s,1,m),gap:e("Grid"),content:p.content}};export{G as GridFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{GRID_COLUMNS_FALLBACK as r,GRID_MAX_COLUMNS as i,GRID_MOBILE_MAX_COLUMNS as s,GRID_MOBILE_MIN_COLUMNS as m}from"../../../../content/grid-span.js";import{ColumnsIcon as t,PhoneIcon as l}from"efficient-easel/icons";import{gapField as _,slider as n}from"../../../controls.js";import{GridSlots as e}from"./render.js";const d={fields:{columns:n("Columns",o(t,{}),1,i,1,r),mobileColumns:n("Columns on phone",o(l,{}),m,s,1,m),gap:_("Grid"),content:e.content}};export{d as GridFields};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{REEL_PLACEMENT_DEFAULT as p,REEL_SHAPE_DEFAULT as S,HERO_REEL_SHAPES as d,REEL_SHAPE_LABELS as A,REEL_SHOWN_DEFAULT as m}from"../../../../reel.js";import{HERO_TEXTURE_COLOUR_DEFAULT as R,HERO_TEXTURE_SHOWN_DEFAULT as O}from"../../../../hero-texture.js";import{HERO_ARROW_SHAPE_DEFAULT as L,HERO_ARROW_SHAPE_LABELS as P,HERO_ARROW_SHAPES as H,HERO_ARROWS_PLACEMENT_DEFAULT as u,HERO_ARROWS_SHOWN_DEFAULT as h}from"../../../../hero-arrows.js";import{ClockIcon as w,EyeIcon as l,OpacityIcon as T,PhoneIcon as E,PlayIcon as k,SlideArrowsBareIcon as I,SlideArrowsRoundIcon as f,SlideArrowsSquareIcon as g,SlidePickerBarIcon as D,SlidePickerCardsIcon as U,SlidePickerDotsIcon as F,SlidePickerNumbersIcon as y,SquareIcon as _}from"efficient-easel/icons";import{efficientLooks as b}from"efficient-shell/icons/efficient-looks";const N=b.looks?.solid?.["slide-arrows-round"],W={cards:e(U,{}),dots:e(F,{}),numbers:e(y,{}),bar:e(D,{})},x={outline:e(f,{}),solid:e(N,{}),square:e(g,{}),bare:e(I,{})};import{colorInput as C,group as o,placementField as n,segmented as i,slider as c,toggle as t}from"../../../controls.js";import{deviceField as s,deviceNote as B}from"../../../device-fields.js";import{HERO_PHONE_SIDEWAYS_DEFAULT as q,HERO_PHONE_SIDEWAYS_LABEL as M,HERO_PHONE_UPDOWN_DEFAULT as j,HERO_PHONE_UPDOWN_LABEL as X,phoneSidewaysPoints as Y,phoneUpDownPoints as v}from"../../../../hero-phone-stack.js";import{heightField as a,alignField as K,slotRowsField as z}from"../../shared-fields.js";import{HeroSlots as G}from"./render.js";const se={fields:{_dDevice:B(),_gContent:o("Content"),slideList:z("Hero","Slides"),slides:G.slides,_gStyle:o("Style"),alignment:K(),_gTexture:o("Texture"),showTexture:t("Show texture",O,e(l,{})),textureColor:C("Texture color",R),textureOpacity:c("Texture opacity",e(T,{}),0,100,1,40,"%"),_gLayout:o("Layout"),heightDesktop:a("desktop"),heightMobile:a("mobile"),_gAutoplay:o("Auto-slide"),autoplay:t("Auto-advance slides",!1,e(k,{})),autoplayInterval:c("Still time per slide",e(w,{}),2,15,1,6,"s"),_gPicker:o("Slide picker"),showPicker:t("Show slide picker",m,e(l,{})),pickerShape:i("Slide picker shape",e(_,{}),d.map(r=>({label:A[r],value:r,picture:W[r]})),S),pickerPlacement:n("Slide picker placement",{stacking:!1,fallback:p}),_gArrows:o("Arrows"),showArrows:t("Show arrows",h,e(l,{})),arrowsShape:i("Arrows shape",e(_,{}),H.map(r=>({label:P[r],value:r,picture:x[r]})),L),arrowsPlacement:n("Arrows placement",{stacking:!1,fallback:u}),_gPhone:s("mobile",o("On a phone")),phoneUpDown:s("mobile",i(X,e(E,{}),v(),j)),phoneSideways:s("mobile",i(M,e(E,{}),Y(),q))}};export{se as HeroFields};
1
+ import{jsx as e}from"react/jsx-runtime";import{REEL_PLACEMENT_DEFAULT as p,REEL_SHAPE_DEFAULT as S,HERO_REEL_SHAPES as d,REEL_SHAPE_LABELS as A,REEL_SHOWN_DEFAULT as m}from"../../../../reel.js";import{HERO_TEXTURE_COLOUR_DEFAULT as R,HERO_TEXTURE_SHOWN_DEFAULT as O}from"../../../../hero-texture.js";import{HERO_ARROW_SHAPE_DEFAULT as P,HERO_ARROW_SHAPE_LABELS as L,HERO_ARROW_SHAPES as H,HERO_ARROWS_PLACEMENT_DEFAULT as u,HERO_ARROWS_SHOWN_DEFAULT as h}from"../../../../hero-arrows.js";import{ClockIcon as T,EyeIcon as l,OpacityIcon as w,PhoneIcon as E,PlayIcon as k,SlideArrowsBareIcon as I,SlideArrowsRoundIcon as f,SlideArrowsSquareIcon as g,SlidePickerBarIcon as D,SlidePickerCardsIcon as U,SlidePickerDotsIcon as F,SlidePickerNumbersIcon as y,SquareIcon as _}from"efficient-easel/icons";import{efficientLooks as b}from"efficient-shell/icons/efficient-looks";const N=b.looks?.solid?.["slide-arrows-round"],W={cards:e(U,{}),dots:e(F,{}),numbers:e(y,{}),bar:e(D,{})},x={outline:e(f,{}),solid:e(N,{}),square:e(g,{}),bare:e(I,{})};import{colorInput as C,group as o,placementField as n,segmented as i,slider as c,toggle as t}from"../../../controls.js";import{deviceField as s,deviceNote as B}from"../../../device-fields.js";import{HERO_PHONE_SIDEWAYS_DEFAULT as q,HERO_PHONE_SIDEWAYS_LABEL as M,HERO_PHONE_UPDOWN_DEFAULT as j,HERO_PHONE_UPDOWN_LABEL as X,phoneSidewaysPoints as Y,phoneUpDownPoints as v}from"../../../../hero-phone-stack.js";import{heightField as a,alignField as K}from"../../shared-fields.js";import{HeroSlots as z}from"./render.js";const le={fields:{_dDevice:B(),_gContent:o("Content"),slides:z.slides,_gStyle:o("Style"),alignment:K(),_gTexture:o("Texture"),showTexture:t("Show texture",O,e(l,{})),textureColor:C("Texture color",R),textureOpacity:c("Texture opacity",e(w,{}),0,100,1,40,"%"),_gLayout:o("Layout"),heightDesktop:a("desktop"),heightMobile:a("mobile"),_gAutoplay:o("Auto-slide"),autoplay:t("Auto-advance slides",!1,e(k,{})),autoplayInterval:c("Still time per slide",e(T,{}),2,15,1,6,"s"),_gPicker:o("Slide picker"),showPicker:t("Show slide picker",m,e(l,{})),pickerShape:i("Slide picker shape",e(_,{}),d.map(r=>({label:A[r],value:r,picture:W[r]})),S),pickerPlacement:n("Slide picker placement",{stacking:!1,fallback:p}),_gArrows:o("Arrows"),showArrows:t("Show arrows",h,e(l,{})),arrowsShape:i("Arrows shape",e(_,{}),H.map(r=>({label:L[r],value:r,picture:x[r]})),P),arrowsPlacement:n("Arrows placement",{stacking:!1,fallback:u}),_gPhone:s("mobile",o("On a phone")),phoneUpDown:s("mobile",i(X,e(E,{}),v(),j)),phoneSideways:s("mobile",i(M,e(E,{}),Y(),q))}};export{le as HeroFields};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{HERO_GROUP_NUDGE_LIMIT as o,HERO_GROUP_WIDTH_DEFAULT as _,HERO_GROUP_WIDTH_MAX as d,HERO_GROUP_WIDTH_MIN as s,HERO_GROUP_WIDTH_NESTED_DEFAULT as g,heroGroupNestDepth as c}from"../../../../hero-group-placement.js";import{NudgeIcon as l,WidthIcon as a}from"efficient-easel/icons";import{boxAlignField as f,boxJustifyField as H,boxWrapField as F,directionField as G,gapField as x,group as r,placementField as O,plainText as R,slider as t,spacingFields as h,withIdentifier as E,withOffPage as I}from"../../../controls.js";import{PH as D}from"../../placeholders.js";import{slotRowsField as T}from"../../shared-fields.js";import{HeroGroupSlots as U}from"./render.js";const A={fields:{_gContent:r("Content"),name:E(I(R("Box name",D.boxName))),contentList:T("HeroGroup"),content:U.content,_gLayout:r("Layout"),placement:O("Placement",{stacking:!0}),width:t("Width",e(a,{}),s,d,5,_,"%"),direction:G("HeroGroup"),gap:x("HeroGroup"),justify:H(),align:f(),wrap:F(),_gNudge:r("Nudge"),nudgeX:t("Sideways",e(l,{}),-o,o,1,0,"px"),nudgeY:t("Up and down",e(l,{}),-o,o,1,0,"px"),...h({phone:!0})},resolveFields:(n,{fields:p,appState:m})=>{const u=typeof n.props.id=="string"?n.props.id:"";if(c(m?.data,u)===0)return p;const i={...p};return delete i.placement,i.width=t("Width",e(a,{}),s,d,5,g,"%"),i}};export{A as HeroGroupFields};
1
+ import{jsx as e}from"react/jsx-runtime";import{HERO_GROUP_NUDGE_LIMIT as o,HERO_GROUP_WIDTH_DEFAULT as u,HERO_GROUP_WIDTH_MAX as d,HERO_GROUP_WIDTH_MIN as a,HERO_GROUP_WIDTH_NESTED_DEFAULT as g,heroGroupNestDepth as c}from"../../../../hero-group-placement.js";import{NudgeIcon as s,WidthIcon as l}from"efficient-easel/icons";import{boxAlignField as f,boxJustifyField as H,boxWrapField as x,directionField as F,gapField as G,group as r,placementField as O,plainText as h,slider as t,spacingFields as E,withIdentifier as I,withOffPage as R}from"../../../controls.js";import{PH as D}from"../../placeholders.js";import{HeroGroupSlots as T}from"./render.js";const L={fields:{_gContent:r("Content"),name:I(R(h("Box name",D.boxName))),content:T.content,_gLayout:r("Layout"),placement:O("Placement",{stacking:!0}),width:t("Width",e(l,{}),a,d,5,u,"%"),direction:F("HeroGroup"),gap:G("HeroGroup"),justify:H(),align:f(),wrap:x(),_gNudge:r("Nudge"),nudgeX:t("Sideways",e(s,{}),-o,o,1,0,"px"),nudgeY:t("Up and down",e(s,{}),-o,o,1,0,"px"),...E({phone:!0})},resolveFields:(n,{fields:p,appState:_})=>{const m=typeof n.props.id=="string"?n.props.id:"";if(c(_?.data,m)===0)return p;const i={...p};return delete i.placement,i.width=t("Width",e(l,{}),a,d,5,g,"%"),i}};export{L as HeroGroupFields};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{BOX_LABEL_PLURAL as g}from"../../../section-catalog.js";import{MediaIcon as n,OpacityIcon as a,PlacementIcon as c}from"efficient-easel/icons";import{colorInput as r,edgePad as O,FOCAL_DEFAULT as y,focalPicker as _,group as i,MEDIA_TYPE_OPTIONS as L,segmented as I,slider as l,upload as t}from"../../../controls.js";import{deviceNote as f}from"../../../device-fields.js";import{DEFAULT_OVERLAY_COLOR as v,DEFAULT_OVERLAY_POSITION as T,OVERLAY_POSITION_OPTIONS as u}from"../../../../sections/hero-overlay.js";import{heightField as d,slotRowsField as A}from"../../shared-fields.js";import{HeroSingleSlots as F}from"./render.js";const D={fields:{_dDevice:f(),_gBoxes:i(g),boxList:A("HeroSingle"),boxes:F.boxes,_gStyle:i("Style"),overlay:l("Overlay",o(a,{}),0,100,5,100,"%"),overlayColor:r("Overlay color",v),overlayPosition:O("Overlay position",u,T,"A corner would need a diagonal ramp, which this overlay does not draw.",o(c,{})),_gLayout:i("Layout"),heightDesktop:d("desktop"),heightMobile:d("mobile"),_gMedia:i("Media"),mediaType:I("Type",o(n,{}),L,"image"),mediaImage:t("Background image","image/*","Upload a background image"),imageFocal:_("Image focus",y),tintColor:r("Tint color","#000000"),tintOpacity:l("Tint opacity",o(a,{}),0,100,5,0,"%"),mediaVideo:t("Background video","video/*","Upload a background video"),poster:t("Video poster","image/*","Upload a poster still")},resolveFields:(m,{fields:s})=>{const p=m.props.mediaType??"image",e={...s};return p==="image"?(delete e.mediaVideo,delete e.poster):(delete e.mediaImage,delete e.imageFocal,delete e.tintColor,delete e.tintOpacity),e}};export{D as HeroSingleFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{MediaIcon as p,OpacityIcon as a,PlacementIcon as s}from"efficient-easel/icons";import{colorInput as r,edgePad as c,FOCAL_DEFAULT as O,focalPicker as y,group as i,MEDIA_TYPE_OPTIONS as _,segmented as I,slider as l,upload as t}from"../../../controls.js";import{deviceNote as T}from"../../../device-fields.js";import{DEFAULT_OVERLAY_COLOR as v,DEFAULT_OVERLAY_POSITION as f,OVERLAY_POSITION_OPTIONS as u}from"../../../../sections/hero-overlay.js";import{heightField as d,slotNoticeField as F}from"../../shared-fields.js";import{HeroSingleSlots as L}from"./render.js";const N={fields:{_dDevice:T(),boxNotice:F("HeroSingle"),boxes:L.boxes,_gStyle:i("Style"),overlay:l("Overlay",o(a,{}),0,100,5,100,"%"),overlayColor:r("Overlay color",v),overlayPosition:c("Overlay position",u,f,"A corner would need a diagonal ramp, which this overlay does not draw.",o(s,{})),_gLayout:i("Layout"),heightDesktop:d("desktop"),heightMobile:d("mobile"),_gMedia:i("Media"),mediaType:I("Type",o(p,{}),_,"image"),mediaImage:t("Background image","image/*","Upload a background image"),imageFocal:y("Image focus",O),mediaVideo:t("Background video","video/*","Upload a background video"),poster:t("Video poster","image/*","Upload a poster still"),_gTint:i("Image tint"),tintColor:r("Tint color","#000000"),tintOpacity:l("Tint opacity",o(a,{}),0,100,5,0,"%")},resolveFields:(m,{fields:g})=>{const n=m.props.mediaType??"image",e={...g};return n==="image"?(delete e.mediaVideo,delete e.poster):(delete e.mediaImage,delete e.imageFocal,delete e._gTint,delete e.tintColor,delete e.tintOpacity),e}};export{N as HeroSingleFields};
@@ -1 +1 @@
1
- import{jsx as i}from"react/jsx-runtime";import{BOX_LABEL_PLURAL as m}from"../../../section-catalog.js";import{MediaIcon as p,OpacityIcon as s,PlayIcon as n}from"efficient-easel/icons";import{colorInput as g,FOCAL_DEFAULT as c,focalPicker as f,group as o,MEDIA_TYPE_OPTIONS as u,plainText as v,segmented as I,slider as t,text as _,upload as d,withIdentifier as T}from"../../../controls.js";import{PH as y}from"../../placeholders.js";import{slotRowsField as L}from"../../shared-fields.js";import{HeroSlideSlots as S}from"./render.js";const C={fields:{_gContent:o("Content"),name:T(v("Slide name",y.slideName)),process:_("Reel label","Label"),_gGroups:o(m),groupList:L("HeroSlide"),groups:S.groups,_gMedia:o("Media"),mediaType:I("Type",i(p,{}),u,"video"),mediaVideo:d("Background video","video/*","Upload a background video"),videoSpeed:t("Playback speed",i(n,{}),25,100,5,100,"%"),mediaImage:d("Background image","image/*","Upload a background image"),imageFocal:f("Image focus",c),poster:d("Video poster","image/*","Upload a poster still"),_gTint:o("Image tint"),tintColor:g("Tint color","#000000"),overlay:t("Overlay",i(s,{}),0,100,5,0,"%")},resolveFields:(a,{fields:r})=>{const l=a.props.mediaType??"video",e={...r};return l==="image"?(delete e.mediaVideo,delete e.videoSpeed,delete e.poster):(delete e.mediaImage,delete e.imageFocal,delete e._gTint,delete e.tintColor,delete e.overlay),e}};export{C as HeroSlideFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{MediaIcon as m,OpacityIcon as p,PlayIcon as s}from"efficient-easel/icons";import{colorInput as n,FOCAL_DEFAULT as g,focalPicker as c,group as i,MEDIA_TYPE_OPTIONS as f,plainText as u,segmented as v,slider as t,text as I,upload as d,withIdentifier as T}from"../../../controls.js";import{PH as y}from"../../placeholders.js";import{slotNoticeField as S}from"../../shared-fields.js";import{HeroSlideSlots as _}from"./render.js";const O={fields:{_gContent:i("Content"),name:T(u("Slide name",y.slideName)),process:I("Reel label","Label"),groupNotice:S("HeroSlide"),groups:_.groups,_gMedia:i("Media"),mediaType:v("Type",o(m,{}),f,"video"),mediaVideo:d("Background video","video/*","Upload a background video"),videoSpeed:t("Playback speed",o(s,{}),25,100,5,100,"%"),mediaImage:d("Background image","image/*","Upload a background image"),imageFocal:c("Image focus",g),poster:d("Video poster","image/*","Upload a poster still"),_gTint:i("Image tint"),tintColor:n("Tint color","#000000"),overlay:t("Overlay",o(p,{}),0,100,5,0,"%")},resolveFields:(a,{fields:l})=>{const r=a.props.mediaType??"video",e={...l};return r==="image"?(delete e.mediaVideo,delete e.videoSpeed,delete e.poster):(delete e.mediaImage,delete e.imageFocal,delete e._gTint,delete e.tintColor,delete e.overlay),e}};export{O as HeroSlideFields};
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{BOX_LABEL_PLURAL as d}from"../../../section-catalog.js";import{ColumnsIcon as a,PlacementIcon as p}from"efficient-easel/icons";import{cardImageField as c,group as u,section as e,segmented as x,slider as P,text as t,textarea as S}from"../../../controls.js";import{SPLITTABLE_SECTIONS as _,headFieldsForPlacement as b,widthFieldsForParent as f}from"../../../../sections/section-head-placement.js";import{PH as g}from"../../placeholders.js";import{innerSpacingFields as F,slotRowsField as L,WIDTH_ROW_KEYS as h}from"../../shared-fields.js";import{PROCESS_PH as i,ProcessStepsSlots as C}from"./render.js";const v={fields:{_sHeader:e("Header"),_gContent:u("Content"),num:t("Number",i.num),title:t("Heading",i.title),description:S("Body",g.body),_sColumns:e(d),boxList:L("ProcessSteps"),boxes:C.boxes,_dDesign:e("Design"),columns:P("Columns",r(a,{}),2,4,1,3),cardImage:c(),cardText:x("Text position",r(p,{}),[{label:"Below picture",value:"below"},{label:"On picture",value:"on-image"}],"below"),_dLayout:e("Layout"),...F("ProcessSteps")},resolveFields:(o,{fields:n,parent:l})=>{const s=b(f(n,l,h),o.props.headPlacement,_.ProcessSteps.headRows);if(!(Array.isArray(o.props.boxes)&&o.props.boxes.length>0))return s;const{cardText:w,...m}=s;return m}};export{v as ProcessStepsFields};
1
+ import{jsx as r}from"react/jsx-runtime";import{BOX_LABEL_PLURAL as a}from"../../../section-catalog.js";import{ColumnsIcon as d,PlacementIcon as p}from"efficient-easel/icons";import{cardImageField as c,group as u,section as e,segmented as x,slider as P,text as t,textarea as _}from"../../../controls.js";import{SPLITTABLE_SECTIONS as S,headFieldsForPlacement as f,widthFieldsForParent as g}from"../../../../sections/section-head-placement.js";import{PH as b}from"../../placeholders.js";import{innerSpacingFields as h,WIDTH_ROW_KEYS as C}from"../../shared-fields.js";import{PROCESS_PH as i,ProcessStepsSlots as F}from"./render.js";const v={fields:{_sHeader:e("Header"),_gContent:u("Content"),num:t("Number",i.num),title:t("Heading",i.title),description:_("Body",b.body),_sColumns:e(a),boxes:F.boxes,_dDesign:e("Design"),columns:P("Columns",r(d,{}),2,4,1,3),cardImage:c(),cardText:x("Text position",r(p,{}),[{label:"Below picture",value:"below"},{label:"On picture",value:"on-image"}],"below"),_dLayout:e("Layout"),...h("ProcessSteps")},resolveFields:(o,{fields:n,parent:l})=>{const s=f(g(n,l,C),o.props.headPlacement,S.ProcessSteps.headRows);if(!(Array.isArray(o.props.boxes)&&o.props.boxes.length>0))return s;const{cardText:T,...m}=s;return m}};export{v as ProcessStepsFields};
@@ -9,6 +9,7 @@ export declare const alignField: () => import("../controls.js").CustomField<stri
9
9
  export declare const toneField: () => import("../controls.js").CustomField<string>;
10
10
  export declare const innerSpacingFields: (key: string) => Record<string, import("../controls.js").CustomField<undefined> | import("../controls.js").CustomField<number>>;
11
11
  export declare const slotRowsField: (parentType: string, label?: string) => never;
12
+ export declare const slotNoticeField: (parentType: string) => never;
12
13
  export declare function photographyToggle(): ReturnType<typeof toggle>;
13
14
  export declare const WIDTH_ROW_KEYS: readonly string[];
14
15
  export declare function textKindGlyph(label: string): ReactElement;
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{SECTION_PAD_INNER_DEFAULTS as n}from"../passes/section-padding.js";import i from"../../../components/SlotChildRows.js";import{SECTION_HEIGHT as r}from"../../content/section-height.js";import{usePreviewHeader as p}from"../../../components/PreviewHeaderContext.js";import{IMAGE_GRAYSCALE_LABEL as a}from"../../content/image-treatment.js";import{AlignLeftIcon as m,BlackAndWhiteIcon as c,ContrastIcon as d,HeightIcon as s,TypeIcon as f}from"efficient-easel/icons";import{linkField as u,segmented as l,slider as g,spacingFields as h,text as x,toggle as F,widthField as T}from"../controls.js";import{deviceField as y}from"../device-fields.js";import{FieldGlyph as I}from"../../../components/FieldGlyph.js";import{fieldNoun as A}from"../field-noun.js";import{CTA_PH as _}from"./placeholders.js";const D=e=>y(e,g("Height",t(s,{}),r.min,r.max,r.step,r.fallback,r.unit)),O={ctaText:x("Button",_.text),ctaHref:u("Button link")},P=()=>l("Alignment",t(m,{}),[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],"left"),j=()=>l("Tone",t(d,{}),[{label:"Default",value:"default"},{label:"Muted",value:"dim"}],"default"),W=e=>h({...n[e],keys:{top:"padTop",bottom:"padBottom"},group:!1}),K=(e,o)=>({type:"custom",render:()=>t(i,{parentType:e,label:o})});function b(e){const{photographyGrayscale:o}=p();return F(a,o===!0,t(c,{})).render(e)}function M(){return{type:"custom",render:e=>t(b,{...e})}}const Y=Object.keys(T("full"));function U(e){const o=A(e);return o?t(I,{noun:o}):t(f,{})}export{Y as WIDTH_ROW_KEYS,P as alignField,O as ctaField,D as heightField,W as innerSpacingFields,M as photographyToggle,K as slotRowsField,U as textKindGlyph,j as toneField};
1
+ import{jsx as t}from"react/jsx-runtime";import{SECTION_PAD_INNER_DEFAULTS as n}from"../passes/section-padding.js";import i,{SlotNoticeField as p}from"../../../components/SlotChildRows.js";import{SECTION_HEIGHT as r}from"../../content/section-height.js";import{usePreviewHeader as a}from"../../../components/PreviewHeaderContext.js";import{IMAGE_GRAYSCALE_LABEL as c}from"../../content/image-treatment.js";import{AlignLeftIcon as m,BlackAndWhiteIcon as d,ContrastIcon as s,HeightIcon as u,TypeIcon as f}from"efficient-easel/icons";import{linkField as g,segmented as l,slider as h,spacingFields as x,text as F,toggle as y,widthField as T}from"../controls.js";import{deviceField as I}from"../device-fields.js";import{FieldGlyph as A}from"../../../components/FieldGlyph.js";import{fieldNoun as _}from"../field-noun.js";import{CTA_PH as b}from"./placeholders.js";const O=e=>I(e,h("Height",t(u,{}),r.min,r.max,r.step,r.fallback,r.unit)),P={ctaText:F("Button",b.text),ctaHref:g("Button link")},j=()=>l("Alignment",t(m,{}),[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],"left"),W=()=>l("Tone",t(s,{}),[{label:"Default",value:"default"},{label:"Muted",value:"dim"}],"default"),K=e=>x({...n[e],keys:{top:"padTop",bottom:"padBottom"},group:!1}),M=(e,o)=>({type:"custom",render:()=>t(i,{parentType:e,label:o})}),Y=e=>({type:"custom",render:()=>t(p,{parentType:e})});function E(e){const{photographyGrayscale:o}=a();return y(c,o===!0,t(d,{})).render(e)}function U(){return{type:"custom",render:e=>t(E,{...e})}}const q=Object.keys(T("full"));function z(e){const o=_(e);return o?t(A,{noun:o}):t(f,{})}export{q as WIDTH_ROW_KEYS,j as alignField,P as ctaField,O as heightField,K as innerSpacingFields,U as photographyToggle,Y as slotNoticeField,M as slotRowsField,z as textKindGlyph,W as toneField};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-web-builder",
3
- "version": "11.0.0",
3
+ "version": "11.0.1",
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",