efficient-web-builder 15.0.0 → 15.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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 15.0.1 - 2026-10-15
|
|
4
|
+
|
|
5
|
+
**The Button's three kept fields draw the no-control mark** (card [BUMP] Storefront Editor Packages To Latest, director JJ; found by the storefront's move to 14.0.0). A patch: nothing a merchant sees changes.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- `href`, `iconPosition` and `arrow` on the Button block (#92) are declared so a save keeps them, and each says "no control here" on its field object (`noControlField(…, "always")`). But their `render` drew an empty fragment, not `<NoControlMark />`. So the drawn panel had no `data-sf-no-control` mark for them, and the storefront's `test-panel-no-empty-rows` counted three empty rows and three settings with no way back. They now draw the mark, and each names the visible field that writes it (`reachedBy`): `href` → `label` (the Button box), `iconPosition` → `icon` (the before / after glyphs on the Icon row), `arrow` → `icon` (the Icon row, which shows and replaces the old Arrow switch).
|
|
10
|
+
- No stored key changes. The fields stay declared, so a save keeps their values.
|
|
11
|
+
- No other field renders empty: every other `render` that draws nothing is a heading or tab marker (`marker: true`), which the Inspector never draws as a row. Device scope notes (`deviceNote`) draw easel's `data-sf-device-hidden` mark, which collapses the same way.
|
|
12
|
+
|
|
13
|
+
### Guards
|
|
14
|
+
|
|
15
|
+
- New `test-no-control-fields-draw-the-mark`: §1 no field of any general block renders an empty row (a control, or a collapse mark); §2 every field stamped `"always"` draws a collapse mark; §3 the Button's kept fields draw the mark, stay declared, and name a partner on the same panel that draws a control. All three failed on 15.0.0 (§1: `ButtonBlock.href`, `ButtonBlock.iconPosition`, `ButtonBlock.arrow`).
|
|
16
|
+
|
|
3
17
|
## 15.0.0 - 2026-10-15
|
|
4
18
|
|
|
5
19
|
**Publish is the website's main action, and Preview opens the saved draft** (card [DESIGN] A Clearer Save In Both Editors, build plan W1; final design by Lewis, 2026-10-15: https://claude.ai/artifact/NVN9yTSG8rYRh8w5Mv8Tpp). The website editor and the email designer are one editor (Lewis, 2026-10-15): the bar, the save icon and the save menu are efficient-easel 8.0.0's, the same in both. This layer only hands data: no save word, icon or menu of its own. A major: the efficient-easel peer range narrows to `^8.0.0` and the efficient-shell one to `^7.38.0` (harness `12-cicd.md`: a narrowed peer range is a major).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jsx as e,jsxs as u}from"react/jsx-runtime";import{ButtonIcon as d,ButtonIconIcon as h,IconAfterTextIcon as g,IconBeforeTextIcon as I,StylesIcon as y,WidthIcon as x}from"efficient-easel/icons";import*as b from"efficient-easel/icons";import{SettingsField as C}from"efficient-easel/panel";import{useSelectedFields as c}from"efficient-easel/easel";import{IconPicker as S,Segmented as B}from"efficient-shell/ui";import{StorefrontTextLinkField as v}from"../../../../../components/StorefrontLinkField.js";import{BUTTON_ICONS as F,buttonIconChoice as k,buttonIconSide as _}from"../../../../content/button-icon.js";import{say as i}from"../../../../editor-words.js";import{group as T,inOwnBox as z,linkField as N,plainText as O,section as m,segmented as f}from"../../../controls.js";import{NoControlMark as w,noControlField as j}from"../../../panel-no-control-mark.js";import{alignField as L}from"../../shared-fields.js";const s=o=>({...j({type:"custom",render:()=>e(w,{})},"always"),reachedBy:o});function P(o){const n=(o==="none"?"no-symbol":o).replace(/(^|-)([a-z])/g,(r,a,p)=>p.toUpperCase()),t=b[`${n}Icon`];return t?e(t,{size:16}):null}const A=F.map(o=>({value:o,icon:P(o)}));function U({value:o,onChange:l}){const n=c(),t=n.values.href,r=typeof o=="string"?o:o&&typeof o=="object"&&"text"in o?String(o.text??""):"";return e(v,{label:"Button",icon:e(d,{size:18}),text:r,onTextChange:l,link:typeof t=="string"?t:"",onLinkChange:a=>n.onChange("href",a)})}function W({value:o,onChange:l}){const n=c(),t=k(o,n.values.arrow),r=_(n.values.iconPosition);return e(C,{label:i("Icon"),icon:e(h,{size:18}),children:u("div",{className:"flex items-center gap-2",children:[e(S,{label:i("Icon"),value:t,emptyValue:"none",options:A,onChange:l}),t!=="none"&&e(B,{label:i("Icon position"),value:r,onChange:a=>n.onChange("iconPosition",a),options:[{value:"before",icon:e(I,{size:16}),label:e("span",{className:"sr-only",children:i("Icon before text")}),title:i("Icon before text")},{value:"after",icon:e(g,{size:16}),label:e("span",{className:"sr-only",children:i("Icon after text")}),title:i("Icon after text")}]})]})})}const Q={fields:{label:z(O("Button"),o=>e(U,{value:o.value,onChange:o.onChange})),href:{...N("Button link"),...s("label")},_dSize:m("Size"),widthFit:f("Width",e(x,{}),[{label:"Fit content",value:"fit"},{label:"Fill",value:"fill"}],"fit"),_gStyle:T("Style"),variant:f("Style",e(y,{}),[{label:"Filled",value:"primary"},{label:"Outline",value:"ghost"}],"primary"),icon:{type:"custom",render:o=>e(W,{value:o.value,onChange:o.onChange})},iconPosition:s("icon"),arrow:s("icon"),_dLayout:m("Layout"),align:L()}};export{Q as ButtonBlockFields};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-web-builder",
|
|
3
|
-
"version": "15.0.
|
|
3
|
+
"version": "15.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",
|