efficient-easel 20.2.0 → 21.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.
Files changed (98) hide show
  1. package/README.md +15 -6
  2. package/dist/{CanvasDragLayer-ARfaivCu.d.ts → CanvasDragLayer-Cd1o0HQf.d.ts} +1 -1
  3. package/dist/{chunk-TNGOL65V.js → chunk-2E2SXDYQ.js} +1 -1
  4. package/dist/chunk-2M4T27BI.js +18 -0
  5. package/dist/chunk-4IJVV7DA.js +1 -0
  6. package/dist/{chunk-JQXD3TDE.js → chunk-66JNVRQM.js} +1 -1
  7. package/dist/{chunk-EFHV56BO.js → chunk-7L3NKHEC.js} +14 -14
  8. package/dist/chunk-APVUYICP.js +65 -0
  9. package/dist/{chunk-HK6I3NVO.js → chunk-E52W3M5I.js} +1 -1
  10. package/dist/chunk-EB6NI2VK.js +1 -0
  11. package/dist/chunk-EZTP6E2M.js +5 -0
  12. package/dist/chunk-FM6JO4WF.js +2 -0
  13. package/dist/chunk-FOHHXSOL.js +1 -0
  14. package/dist/{chunk-I7BROL77.js → chunk-HGCGIRVA.js} +1 -1
  15. package/dist/chunk-JACEEVVF.js +1 -0
  16. package/dist/{chunk-QAJAEWCZ.js → chunk-KFWNGPW3.js} +5 -5
  17. package/dist/{chunk-276MBG5P.js → chunk-LXTM2OLQ.js} +2 -2
  18. package/dist/{chunk-FGYJ5DJY.js → chunk-MSGZ56QL.js} +1 -1
  19. package/dist/chunk-MZ5GSSZ3.js +7 -0
  20. package/dist/{chunk-UJ46J7QW.js → chunk-N2RISV46.js} +1 -1
  21. package/dist/chunk-NA3GMA43.js +5 -0
  22. package/dist/{chunk-FGJTX2DL.js → chunk-OBWDHKLI.js} +6 -6
  23. package/dist/chunk-Q2A7RHG2.js +1 -0
  24. package/dist/{chunk-JBOSEHIX.js → chunk-R4QJ6DC5.js} +1 -1
  25. package/dist/chunk-S3DUFDQ6.js +6 -0
  26. package/dist/chunk-TQ5Y6S2X.js +1 -0
  27. package/dist/{chunk-OTONLZR4.js → chunk-V2ULLALL.js} +3 -3
  28. package/dist/chunk-WHS6Y55E.js +10 -0
  29. package/dist/{chunk-ZOBSIXRD.js → chunk-Y2T3JX7K.js} +1 -1
  30. package/dist/chunk-YHFKWV7H.js +21 -0
  31. package/dist/copy/index.js +13 -13
  32. package/dist/drag/drag.css +3 -9
  33. package/dist/drag/index.d.ts +2 -2
  34. package/dist/drag/index.js +1 -1
  35. package/dist/draw/index.d.ts +1 -1
  36. package/dist/draw/index.js +1 -1
  37. package/dist/easel/index.js +1 -1
  38. package/dist/fields/fields.css +2 -2
  39. package/dist/fields/index.d.ts +1 -1
  40. package/dist/fields/index.js +1 -1
  41. package/dist/panel/index.d.ts +37 -138
  42. package/dist/panel/index.js +15 -15
  43. package/dist/panel/panel.css +53 -347
  44. package/dist/screen/components/AddBlockRow.js +1 -1
  45. package/dist/screen/components/AddSidePanel.js +1 -1
  46. package/dist/screen/components/MediaPopup.d.ts +5 -6
  47. package/dist/screen/components/NodeContextMenu.d.ts +3 -3
  48. package/dist/screen/components/NodeContextMenu.js +1 -1
  49. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  50. package/dist/screen/components/SaveControls.d.ts +3 -3
  51. package/dist/screen/components/ScreenChrome.js +1 -1
  52. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  53. package/dist/screen/components/ScreenMount.d.ts +3 -3
  54. package/dist/screen/components/ScreenMount.js +1 -1
  55. package/dist/screen/components/ScreenStoreProvider.d.ts +3 -3
  56. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  57. package/dist/screen/components/SectionScreenShell.js +16 -16
  58. package/dist/screen/components/usePartBridge.d.ts +3 -3
  59. package/dist/screen/components/usePartBridge.js +1 -1
  60. package/dist/screen/index.d.ts +3 -3
  61. package/dist/screen/index.js +1 -1
  62. package/dist/screen/lib/content/view-tiers.d.ts +14 -2
  63. package/dist/screen/lib/content/view-tiers.js +1 -1
  64. package/dist/screen/lib/key-scope.js +1 -1
  65. package/dist/screen/lib/puck/device-fields.js +1 -1
  66. package/dist/screen/lib/puck/preview-dom.js +1 -1
  67. package/dist/screen/lib/puck/style-clipboard.d.ts +3 -3
  68. package/dist/screen/lib/puck/style-clipboard.js +1 -1
  69. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  70. package/dist/screen/lib/screen-parts.d.ts +3 -3
  71. package/dist/screen/lib/screen-parts.js +1 -1
  72. package/dist/screen/screen.css +3 -7
  73. package/dist/screen/words.d.ts +4 -0
  74. package/dist/screen/words.js +1 -1
  75. package/dist/strings/index.d.ts +2 -2
  76. package/dist/strings/index.js +2 -2
  77. package/dist/text-styles/index.js +30 -30
  78. package/dist/tree/index.d.ts +4 -4
  79. package/dist/tree/index.js +1 -1
  80. package/dist/{types-Bqq6ya0y.d.ts → types-DBy3L69b.d.ts} +11 -4
  81. package/dist/{words-vhnV8sM7.d.ts → words-CFkb8XtN.d.ts} +5 -0
  82. package/dist/{words-CvwYvkJm.d.ts → words-SD4neL0n.d.ts} +6 -0
  83. package/package.json +3 -3
  84. package/dist/chunk-23DYNW6S.js +0 -1
  85. package/dist/chunk-23VM4PMV.js +0 -7
  86. package/dist/chunk-2BOXPUGF.js +0 -1
  87. package/dist/chunk-3R3PEVU7.js +0 -65
  88. package/dist/chunk-7LYKFL3Q.js +0 -21
  89. package/dist/chunk-A6Z4SD3I.js +0 -10
  90. package/dist/chunk-H2PRGXCW.js +0 -18
  91. package/dist/chunk-KAML3KQH.js +0 -1
  92. package/dist/chunk-L2Y3PF2R.js +0 -4
  93. package/dist/chunk-MEHLY5Q4.js +0 -1
  94. package/dist/chunk-PAOZMXEI.js +0 -5
  95. package/dist/chunk-RC25EGHD.js +0 -5
  96. package/dist/chunk-VANKQVOW.js +0 -8
  97. package/dist/chunk-WEIE2FBC.js +0 -1
  98. package/dist/chunk-WRFD4EXD.js +0 -1
@@ -3,8 +3,8 @@ import { HTMLAttributes, CSSProperties, ReactNode } from 'react';
3
3
  import { P as Place } from '../types-41704JE4.js';
4
4
  import { D as DragSession } from '../session-DSQFmIvx.js';
5
5
  export { a as DragHeld, c as createDragSession } from '../session-DSQFmIvx.js';
6
- export { B as Box, a as CanvasDragLayer, b as CanvasDragLayerProps, C as CanvasDragModel, c as CanvasDropTarget, d as CanvasSeam, e as CanvasSource, f as CanvasZone, E as EMPTY_MEASURE, H as HANDLE_GRACE_MS, M as MeasuredCanvas, g as MeasuredNode, h as canvasTarget, i as contains, j as gapInZone, k as gapLine, l as insertSeams, m as measureCanvas, p as pickSource, s as seamsBetween, n as sourcesAt } from '../CanvasDragLayer-ARfaivCu.js';
7
- import { D as DragWords } from '../words-CvwYvkJm.js';
6
+ export { B as Box, a as CanvasDragLayer, b as CanvasDragLayerProps, C as CanvasDragModel, c as CanvasDropTarget, d as CanvasSeam, e as CanvasSource, f as CanvasZone, E as EMPTY_MEASURE, H as HANDLE_GRACE_MS, M as MeasuredCanvas, g as MeasuredNode, h as canvasTarget, i as contains, j as gapInZone, k as gapLine, l as insertSeams, m as measureCanvas, p as pickSource, s as seamsBetween, n as sourcesAt } from '../CanvasDragLayer-Cd1o0HQf.js';
7
+ import { D as DragWords } from '../words-SD4neL0n.js';
8
8
  import '../watch-BTYOJpQU.js';
9
9
 
10
10
  /**
@@ -1 +1 @@
1
- export{AddPanel,CanvasDragLayer,CanvasInsert,EMPTY_MEASURE,HANDLE_GRACE_MS,canvasTarget,contains,gapInZone,gapLine,insertSeams,measureCanvas,pickSource,seamsBetween,sourcesAt}from"../chunk-H2PRGXCW.js";import"../chunk-KAML3KQH.js";export{AUTO_SCROLL_EDGE,AUTO_SCROLL_MAX_SPEED,autoScrollDelta,autoScrollSpeed,createDragSession,dropEffectFor,dropOnRow,frameScrollBox,gapToMoveIndex,isNoOpDrop,scrollBoxOf,scrollParent,startAutoScroll,stepGap,useTreeDrag}from"../chunk-3S5N4HLJ.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";import"../chunk-P2VEMZH5.js";import"../chunk-QIDRJH3S.js";import"../chunk-LF3FUSCQ.js";
1
+ export{AddPanel,CanvasDragLayer,CanvasInsert,EMPTY_MEASURE,HANDLE_GRACE_MS,canvasTarget,contains,gapInZone,gapLine,insertSeams,measureCanvas,pickSource,seamsBetween,sourcesAt}from"../chunk-2M4T27BI.js";import"../chunk-TQ5Y6S2X.js";export{AUTO_SCROLL_EDGE,AUTO_SCROLL_MAX_SPEED,autoScrollDelta,autoScrollSpeed,createDragSession,dropEffectFor,dropOnRow,frameScrollBox,gapToMoveIndex,isNoOpDrop,scrollBoxOf,scrollParent,startAutoScroll,stepGap,useTreeDrag}from"../chunk-3S5N4HLJ.js";import"../chunk-P2VEMZH5.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";import"../chunk-QIDRJH3S.js";import"../chunk-LF3FUSCQ.js";
@@ -4,7 +4,7 @@ export { ANCHOR_FIELD_KEYS, EdgeCell, FOLD_FIELD_MARKER, FoldFieldMeta, LINK_FIE
4
4
  export { SCALAR_TEXT_CONTROLS, ScalarTextControlKind, TEXT_CONTROL_KINDS, TextControlKind } from '../screen/lib/puck/text-control-kinds.js';
5
5
  export { RowNameRule, rootRowName, sectionRenameProp, slotChildName, slotChildRenameProp, slotChildRowName } from '../screen/lib/puck/slot-child-name.js';
6
6
  export { FOOTER_TYPE, HEADER_TYPE, NodeLocation, ROOT_ZONE, SlotConfigView, TREE_MAX_DEPTH, TreeItem, blockNodeActions, childSlotsOf, locateNode, missingPinnedTypes, nestsInTree, newNodeId, pinnedDuplicateIds, pinnedDuplicateIndices, slotChildrenIn, slotFieldsOf } from '../screen/lib/puck/content-tree.js';
7
- export { AUTO_RULES, AutoRule, VIEW_DESKTOP_MIN, VIEW_TABLET_MIN, VIEW_TIERS, VIEW_TIER_LABEL, ViewTier, ViewValueKind, ViewValues, isAuto, phoneKey, resolveViewValue, tabletKey, viewTierForWidth } from '../screen/lib/content/view-tiers.js';
7
+ export { AUTO_RULES, AutoRule, FOLLOW_RULES, VIEW_DESKTOP_MIN, VIEW_TABLET_MIN, VIEW_TIERS, VIEW_TIER_LABEL, ViewTier, ViewValueKind, ViewValues, isAuto, phoneKey, resolveViewValue, tabletKey, viewTierForWidth } from '../screen/lib/content/view-tiers.js';
8
8
  export { HERO_SLIDER_GOTO_EVENT, HeroSliderGotoDetail } from '../screen/lib/puck/preview-events.js';
9
9
  export { R as REPEAT_ATTRIBUTE, a as REPEAT_INDEX_ATTRIBUTE } from '../repeat-Czi-6zPX.js';
10
10
  export { TEXT_STYLE_CASES, TEXT_STYLE_CASE_CSS, TextStyleCase, TextStyleCaseCss, isTextStyleCase, textStyleCaseCss, textStyleCaseOfCss } from '../text-styles/model.js';
@@ -1 +1 @@
1
- export{SCALAR_TEXT_CONTROLS,TEXT_CONTROL_KINDS}from"../chunk-PIND6KE7.js";export{AUTO_RULES,VIEW_DESKTOP_MIN,VIEW_TABLET_MIN,VIEW_TIERS,VIEW_TIER_LABEL,isAuto,phoneKey,resolveViewValue,tabletKey,viewTierForWidth}from"../chunk-HK6I3NVO.js";export{rootRowName,sectionRenameProp,slotChildName,slotChildRenameProp,slotChildRowName}from"../chunk-BHRC3ASL.js";export{hidableText,readHidable}from"../chunk-6W7WLPZH.js";export{HERO_SLIDER_GOTO_EVENT}from"../chunk-IQ5TA7AM.js";export{ANCHOR_FIELD_KEYS,FOLD_FIELD_MARKER,LINK_FIELD_MARKER,MEDIA_FIELD_MARKER,SCAFFOLD_FIELD_MARKER,TEXT_FIELD_MARKER,foldMetaOf,textFieldIdentifier}from"../chunk-DUVRZ456.js";export{PART_SEP,decodePartId,encodePartId}from"../chunk-IYT6NN2J.js";export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,blockNodeActions,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotChildrenIn,slotFieldsOf}from"../chunk-PLVEGYK6.js";export{TEXT_STYLE_CASES,TEXT_STYLE_CASE_CSS,isTextStyleCase,textStyleCaseCss,textStyleCaseOfCss}from"../chunk-YHZSBL2N.js";export{REPEAT_ATTRIBUTE,REPEAT_INDEX_ATTRIBUTE}from"../chunk-LF3FUSCQ.js";
1
+ export{SCALAR_TEXT_CONTROLS,TEXT_CONTROL_KINDS}from"../chunk-PIND6KE7.js";export{AUTO_RULES,FOLLOW_RULES,VIEW_DESKTOP_MIN,VIEW_TABLET_MIN,VIEW_TIERS,VIEW_TIER_LABEL,isAuto,phoneKey,resolveViewValue,tabletKey,viewTierForWidth}from"../chunk-E52W3M5I.js";export{rootRowName,sectionRenameProp,slotChildName,slotChildRenameProp,slotChildRowName}from"../chunk-BHRC3ASL.js";export{hidableText,readHidable}from"../chunk-6W7WLPZH.js";export{HERO_SLIDER_GOTO_EVENT}from"../chunk-IQ5TA7AM.js";export{ANCHOR_FIELD_KEYS,FOLD_FIELD_MARKER,LINK_FIELD_MARKER,MEDIA_FIELD_MARKER,SCAFFOLD_FIELD_MARKER,TEXT_FIELD_MARKER,foldMetaOf,textFieldIdentifier}from"../chunk-DUVRZ456.js";export{PART_SEP,decodePartId,encodePartId}from"../chunk-IYT6NN2J.js";export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,blockNodeActions,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotChildrenIn,slotFieldsOf}from"../chunk-PLVEGYK6.js";export{TEXT_STYLE_CASES,TEXT_STYLE_CASE_CSS,isTextStyleCase,textStyleCaseCss,textStyleCaseOfCss}from"../chunk-YHZSBL2N.js";export{REPEAT_ATTRIBUTE,REPEAT_INDEX_ATTRIBUTE}from"../chunk-LF3FUSCQ.js";
@@ -1 +1 @@
1
- export{CanvasFrame,CanvasPartsContext,CanvasPassThroughContext,CanvasSharedContext,DEFAULT_UI,EaselCanvas,EaselProvider,EditDocument,bindUndoKeys,createEasel,createUseEasel,recordsByDefault,reduce,uiView,useEasel,useEaselApi,useEaselNodeOps,useSelectedFields,validSelection}from"../chunk-EFHV56BO.js";import"../chunk-TBY3DFKS.js";import"../chunk-IWCKVZHS.js";import"../chunk-BSHIQIZC.js";import"../chunk-23VM4PMV.js";import"../chunk-KRL3IUV3.js";import"../chunk-MFIRYGHW.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";import"../chunk-QIDRJH3S.js";import"../chunk-LF3FUSCQ.js";
1
+ export{CanvasFrame,CanvasPartsContext,CanvasPassThroughContext,CanvasSharedContext,DEFAULT_UI,EaselCanvas,EaselProvider,EditDocument,bindUndoKeys,createEasel,createUseEasel,recordsByDefault,reduce,uiView,useEasel,useEaselApi,useEaselNodeOps,useSelectedFields,validSelection}from"../chunk-7L3NKHEC.js";import"../chunk-TBY3DFKS.js";import"../chunk-IWCKVZHS.js";import"../chunk-BSHIQIZC.js";import"../chunk-MZ5GSSZ3.js";import"../chunk-KRL3IUV3.js";import"../chunk-MFIRYGHW.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";import"../chunk-QIDRJH3S.js";import"../chunk-LF3FUSCQ.js";
@@ -102,12 +102,12 @@ span:has(> .es-fnum) { display: flex; min-width: 0; }
102
102
  .es-list { position: relative; display: flex; flex-direction: column; gap: 8px; min-width: 0; margin-top: max(var(--es-row-gap), var(--es-rhythm-between)); }
103
103
  .es-list-head {
104
104
  display: flex;
105
- align-items: baseline;
105
+ align-items: center;
106
106
  justify-content: space-between;
107
107
  gap: 8px;
108
108
  }
109
109
  .es-list-label { display: inline-flex; align-items: center; gap: 8px; font-size: var(--text-xs, 12px); font-weight: 600; color: var(--es-text); }
110
- .es-list-count { font-size: var(--text-2xs, 11px); color: var(--es-muted); font-variant-numeric: tabular-nums; }
110
+ /* The head's count is the shell's `ItemCount` (Lewis, 2026-10-23). */
111
111
 
112
112
  /* A host's bar for the row in use, between the name and the rows. */
113
113
  .es-list-above { min-width: 0; }
@@ -7,7 +7,7 @@ export { ShowWhenContext, ShowWhenRule, showWhenOf, withShowWhen } from 'efficie
7
7
  import { a as InspectorFieldDef, b as FieldRenderer, I as InspectorFields, c as FieldTextProps, d as FieldNumberProps, e as FieldSliderProps, f as FieldSelectManyProps, g as FieldSelectOneProps, F as FieldOption } from '../types-CDX6vd6A.js';
8
8
  export { A as ArrayFieldDef, C as CustomFieldDef, h as CustomFieldRenderProps, i as FieldSelectProps, N as NumberFieldDef, O as ObjectFieldDef, R as RadioFieldDef, S as SelectFieldDef, j as SlotFieldDef, T as TextFieldDef, k as TextareaFieldDef } from '../types-CDX6vd6A.js';
9
9
  import { R as ResolvableItem } from '../resolve-D68pb3Bx.js';
10
- export { F as FieldsWords } from '../words-vhnV8sM7.js';
10
+ export { F as FieldsWords } from '../words-CFkb8XtN.js';
11
11
  export { LinkFilter, LinkFilterField, LinkKindChoice, LinkOption, LinkOptionGroup, LinkPicker, LinkPickerProps, LinkRules, LinkTarget } from 'efficient-shell/ui';
12
12
  import '../types-41704JE4.js';
13
13
 
@@ -1 +1 @@
1
- export{FieldText,Inspector,InspectorField,LinkPicker,ListField,bucketsOf,copyItem,insertAt,labelOf,moveTo,planFields,removeAt}from"../chunk-7LYKFL3Q.js";export{fieldIsShown,showWhenOf,shownFields,withShowWhen}from"../chunk-BPXEFVSQ.js";import"../chunk-A6Z4SD3I.js";import"../chunk-K56YDHYQ.js";export{FieldSlider}from"../chunk-ZEH6QLBH.js";export{useResolvedFields}from"../chunk-IWCKVZHS.js";import"../chunk-FIVU2COQ.js";import"../chunk-RC25EGHD.js";import"../chunk-KFV7N2DJ.js";export{FieldNumber}from"../chunk-ZOBSIXRD.js";export{FieldSelect,optionFor}from"../chunk-QAJAEWCZ.js";import"../chunk-WRFD4EXD.js";import"../chunk-VANKQVOW.js";import"../chunk-MFIRYGHW.js";import"../chunk-3S5N4HLJ.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";import"../chunk-P2VEMZH5.js";
1
+ export{FieldText,Inspector,InspectorField,LinkPicker,ListField,bucketsOf,copyItem,insertAt,labelOf,moveTo,planFields,removeAt}from"../chunk-YHFKWV7H.js";export{fieldIsShown,showWhenOf,shownFields,withShowWhen}from"../chunk-BPXEFVSQ.js";import"../chunk-WHS6Y55E.js";import"../chunk-K56YDHYQ.js";export{FieldSlider}from"../chunk-ZEH6QLBH.js";export{useResolvedFields}from"../chunk-IWCKVZHS.js";import"../chunk-FIVU2COQ.js";import"../chunk-FM6JO4WF.js";import"../chunk-KFV7N2DJ.js";export{FieldNumber}from"../chunk-Y2T3JX7K.js";export{FieldSelect,optionFor}from"../chunk-KFWNGPW3.js";import"../chunk-JACEEVVF.js";import"../chunk-S3DUFDQ6.js";import"../chunk-MFIRYGHW.js";import"../chunk-3S5N4HLJ.js";import"../chunk-P2VEMZH5.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";
@@ -607,123 +607,49 @@ type SettingsActionProps = SettingsActionBaseProps & SettingsActionNote;
607
607
  declare function SettingsSegmented<V = string>({ options, value, onChange, ariaLabel, fit, disabled, className, }: SettingsSegmentedProps<V>): react.JSX.Element;
608
608
 
609
609
  /**
610
- * A group of settings under a grey band that folds with − / +: square, and
611
- * edge to edge of the settings body (Lewis 2026-10-14, again 2026-10-23).
612
- *
613
- * The sign is drawn by `panel.css` from `aria-expanded`, so the open state has
614
- * exactly one home (the attribute assistive tech already reads) instead of a
615
- * second copy in the markup.
616
- *
617
- * `count` is the reason a fold here is safe: a folded group that holds changes
618
- * still says so on its pill, so nothing a merchant changed can hide.
619
- *
620
- * THE TITLE IS A HEADING THAT HOLDS THE BUTTON (WAI-ARIA APG accordion pattern,
621
- * 7.2.0). A button alone gives a screen reader nothing to jump between; the
622
- * `h{level}` round it puts each group in the panel's outline, under the panel's
623
- * `h2` name. The level is the host's (default 3, as `SettingsGroupHead`), since
624
- * only the host knows the outline around it. `panel.css` takes every margin and
625
- * font off `.es-group-title`, so the pill looks as it did.
610
+ * A group of settings under a grey band that folds with − / +. THE SHELL'S
611
+ * `Accordion` band (B2 plan C, Lewis 2026-10-26): its markup, its `es-group…`
612
+ * classes and its look moved to efficient-shell, and the gap under the band
613
+ * is the band's (32px above and below its body). This name stays because
614
+ * both editors' hosts import it.
615
+ *
616
+ * Controlled: `open` is the host's, and a press only asks it to flip. The body
617
+ * stays mounted while folded (`keepMounted`), as it always did here, so a
618
+ * folded group's controls keep their state. `count` is the reason a fold is
619
+ * safe: a folded group that holds changes still says so on its pill.
626
620
  */
627
621
  declare function SettingsGroup({ title, open, onToggle, count, level, id, children, className, }: SettingsGroupProps): react.JSX.Element;
628
622
 
629
623
  /**
630
- * A group heading with NO group under it — the pill on its own.
631
- *
632
- * It exists because Puck lays the inspector out as a FLAT sibling list: a field
633
- * renders next to the heading above it, never inside it, so nothing here can
634
- * wrap the rows that follow. Heading a run of settings is therefore a job for a
635
- * component that heads and nothing else.
636
- *
637
- * `SettingsGroup` cannot do that job. It always renders its body div, and its
638
- * pill is always a <button> carrying `aria-expanded`, `aria-controls` and the
639
- * − / + sign. Used header-only it would draw a control that claims to expand
640
- * something, does nothing when clicked, and tells a screen reader the same lie.
641
- * A component that folds and a component that titles are two different things,
642
- * and this is the one that titles.
643
- *
644
- * So it is a HEADING, not a control: a real <h3> (the level is the host's, since
645
- * only the host knows the page outline around it) with no role bolted on, no
646
- * expanded state, no sign, no body. In a flat list the heading list is the only
647
- * structure a screen reader has left to navigate by, which is the whole reason
648
- * this renders a heading element rather than a styled <div>.
649
- *
650
- * It wears `.es-group-head` — the same pill as a real group's — so a section
651
- * that folds and a section that does not read as the same panel. `panel.css`
652
- * scopes the cursor and the hover tint to `button.es-group-head`, so the
653
- * heading does not offer a press it cannot honour.
654
- *
655
- * NO `count`. A folded group needs one because a fold can hide a change; a
656
- * heading folds nothing, so nothing can hide behind it.
624
+ * A group heading with NO group under it — the band on its own, for Puck's
625
+ * flat inspector list, where a heading cannot wrap the rows that follow it. A
626
+ * HEADING, not a control: no button, no sign, no count. THE SHELL'S
627
+ * `AccordionHeading` (B2 plan C, Lewis 2026-10-26); this name stays because
628
+ * both editors' hosts import it.
657
629
  */
658
630
  declare function SettingsGroupHead({ title, level, id, className, }: SettingsGroupHeadProps): react.JSX.Element;
659
631
 
660
632
  /**
661
- * The QUIET second tier — a heading one rung under `SettingsGroupHead`.
662
- *
663
- * It exists because a panel sometimes has two levels of heading and this package
664
- * only ever drew one. `SettingsGroupHead` is a filled pill, and a pill cannot
665
- * serve a tier AND its subordinate: two runs of settings under one pill each
666
- * need a name, and giving them the same pill says they are siblings of the thing
667
- * above them rather than parts of it.
668
- *
669
- * THE SHOP ALREADY DREW THIS LOOK, TWICE, WHICH IS WHY IT BELONGS HERE.
670
- * `efficient-storefront` hand-rolled `.sf-field-group` in the settings panel and
671
- * `.sf-group-label` in the Layers tree, and they are the same type to the
672
- * decimal — 10.5px / 600 / .07em / muted / uppercase. One look, hand-rolled in
673
- * two panels of one editor, is the definition of a thing the shell should own.
674
- *
675
- * ⚠️ NOT THE PILL WITH ITS FILL SWITCHED OFF, and that is the whole reason this
676
- * is a component and not a `variant` flag on the other one. The shop's own
677
- * `WHY NOT SettingsGroupHead` docblock refused that shape in advance: a named
678
- * look the shell draws, "not a boolean that switches the pill off. A flag whose
679
- * job is to turn the design off moves the fork inside the shell instead of
680
- * removing it." So there is no path from here to the pill's look and none back —
681
- * two tiers, two looks, each one this package's own.
682
- *
683
- * WHY IT IS QUIET BY TYPE AND THE PILL IS LOUD BY GROUND. The pill separates
684
- * itself from the settings around it with a fill; this separates itself with
685
- * CASE and COLOUR and takes no ground at all. That is what lets the two sit in
686
- * one panel without competing, and it is also why this tier can carry no rule:
687
- * a hairline under a heading separates it from the rows it heads, which is the
688
- * opposite of what a heading is for. Removing those rules is the change the
689
- * owner asked for.
690
- *
691
- * A REAL HEADING, defaulting to `h4` — one under the pill's default `h3`,
692
- * because that is where a subordinate heading sits when the pill above it took
693
- * the 3. The host may say otherwise; only the host knows the outline around it.
694
- * Puck lays an inspector out as a FLAT sibling list, so the heading list is the
695
- * only structure a screen reader has left to navigate by.
696
- *
697
- * NO fold, no count, no sign, no body — the same discipline as
698
- * {@link SettingsGroupHead}, and for the same reason: a component that folds and
699
- * a component that titles are two different things, and this is one that titles.
633
+ * The QUIET second tier — a heading one rung under `SettingsGroupHead`: case
634
+ * and colour, no ground and no rule, defaulting to `h4`. THE SHELL'S
635
+ * `AccordionHeading` at its `row` tier (B2 plan C, Lewis 2026-10-26); this
636
+ * name stays because both editors' hosts import it.
700
637
  */
701
638
  declare function SettingsGroupSub({ title, level, id, className, }: SettingsGroupSubProps): react.JSX.Element;
702
639
 
703
640
  /**
704
- * One setting: a label row, then its control.
705
- *
706
- * The row is stacked rather than side-by-side so the control gets the panel's
707
- * full width — a 308px panel cannot afford a label column AND a usable slider.
708
- * The label reads small and quiet; the VALUE sits at the end of the same line in
709
- * the text colour, which is what a merchant scans for. That contrast is the
710
- * point: before this, label and value looked alike and the panel read as noise.
711
- *
712
- * `hint` is where a clause-long explanation goes. A label is a name, never a
713
- * sentence.
714
- *
715
- * A BOOLEAN row is the one exception to "control on its own line" (card 8801,
716
- * Option A, approved). A switch is small and it is the whole control, so it
717
- * rides the label line in the `action` slot and the row costs one line instead
718
- * of two — which is what lets a 308px panel show four settings where it used to
719
- * show three. That is the only reason `children` is optional: a field with no
720
- * children draws no control row, and its label line IS the row.
721
- *
722
- * A field with no children AND no action has no control on either slot. That is
723
- * a mistake at the call site, so it renders NOTHING — an empty row would hide
724
- * the mistake behind 20px of blank panel.
641
+ * One setting: a name line, then its control. THE SHELL'S compact `SettingRow`
642
+ * (B2 plan C, Lewis 2026-10-26: "keep the easel look; put it in the shell"):
643
+ * its markup, its `es-field…` classes and its look moved to efficient-shell,
644
+ * and this name stays because both editors' hosts import it. The props are
645
+ * the same; `value` is the row's `readout`, `hint` its `description`,
646
+ * `htmlFor` its `controlId`, and `children` its control (`value`).
647
+ *
648
+ * A BOOLEAN row is one line (card 8801, Option A): its switch rides the name
649
+ * line in `action`, and a field with no children draws no control line. A
650
+ * field with neither draws NOTHING — an empty row would hide the mistake.
725
651
  */
726
- declare function SettingsField({ label, labelId, icon, value, hint, changed, htmlFor, action, children, className, }: SettingsFieldProps): react.JSX.Element | null;
652
+ declare function SettingsField({ label, labelId, icon, value, hint, changed, htmlFor, action, children, className, }: SettingsFieldProps): react.JSX.Element;
727
653
 
728
654
  /**
729
655
  * The yes-or-no control — ONE shape, both editors (card 8801).
@@ -758,40 +684,13 @@ declare function SettingsField({ label, labelId, icon, value, hint, changed, htm
758
684
  declare function SettingsSwitch({ checked, onChange, disabled, id, ariaLabel, ariaLabelledBy, className, }: SettingsSwitchProps): react.JSX.Element;
759
685
 
760
686
  /**
761
- * The end of a setting's label line: a ↺ button once the setting is changed,
762
- * NOTHING while it is not. ONE part, both editors.
763
- *
764
- * Owner, 2026-10-06: the two editors said "follows its default / put it back"
765
- * five ways (the website's "Inherits · Site" chip and blue reset dot, the
766
- * email's "Default" mark, "Reset" link and "Reset to default" text), and it
767
- * became one part. Option E, final 2026-10-07 (mockup
768
- * https://claude.ai/artifact/KATfHhLK7wogfTD84Manox), gave it its look:
769
- *
770
- * changed the set's `revert` icon (↺, "Revert to inherited") in a 22px
771
- * button, accent; its name "Reset <setting>", its tooltip that
772
- * plus what it goes back to when the host says ("(back to 24px
773
- * from Site styles)", also its description);
774
- * unchanged nothing at all: the row's grey value already says it is the
775
- * default. The 22px slot stays, empty and out of the tab order,
776
- * so every row's end lines up.
777
- *
778
- * It rides `SettingsField`'s `action` slot; `SettingsField` leaves its name
779
- * alone (only a switch is named after the field).
780
- *
781
- * FOCUS AFTER A PRESS. Reset turns the button into the empty slot, which cannot
782
- * hold focus, so a keyboard user would fall back to the top of the page. The
783
- * press hands focus to the row's own control (its slider, box or swatch) first.
784
- * That is read off the event's own element, never a global, so the module stays
785
- * a leaf.
786
- *
787
- * `defaultAction` is the one row with something to press while unchanged: the
788
- * website's type sizes, whose default can be a responsive `clamp()` no slider
789
- * stores, keep ONE press to the section's own built-in size (a feature is
790
- * never cut to fit a look). It draws the host's icon in the same 22px slot.
791
- *
792
- * CONTROLLED and hook-free like the rest of the panel: `changed` is the host's,
793
- * and a press only asks the host to clear. The words are handed in (`words`),
794
- * because a leaf never reads the strings provider.
687
+ * The end of a setting's name line: a ↺ button once the setting is changed,
688
+ * the empty 22px slot while it is not (option E, final 2026-10-07). THE
689
+ * SHELL'S `SettingReset` (B2 plan C, Lewis 2026-10-26): its markup, its
690
+ * `es-default-reset` classes, its look and the focus hand-off after a press
691
+ * moved to efficient-shell; this name stays because both editors' hosts
692
+ * import it. The words are still the host's (`words`), handed to the shell
693
+ * part as its name and tooltip.
795
694
  */
796
695
  declare function SettingsDefaultReset({ label, changed, onReset, detail, disabled, defaultAction, words, className, }: SettingsDefaultResetProps): react.JSX.Element;
797
696
 
@@ -1,15 +1,15 @@
1
- export{DESIGN_GROUPS,SETTINGS_BUCKETS,SettingsGroup}from"../chunk-RC25EGHD.js";import{DEFAULT_PANEL_WORDS as e}from"../chunk-KFV7N2DJ.js";export{SettingsSwitch}from"../chunk-OECWLNKJ.js";import{SettingsField as l,SettingsSegmented as n}from"../chunk-VANKQVOW.js";export{SettingsField,SettingsSegmented}from"../chunk-VANKQVOW.js";import{withTip as t}from"../chunk-P2VEMZH5.js";import{jsx as a,jsxs as i,Fragment as s}from"react/jsx-runtime";import{RevertIcon as o,BackgroundIcon as d,WidthIcon as r}from"efficient-shell/icons/efficient";import{Tooltip as c}from"efficient-shell/ui";export{BorderInput as SettingsBorder,CornersInput as SettingsCorners,AlignmentGrid as SettingsPlacement,SidesInput as SettingsSides,SidesEachToggle as SettingsSidesEach,borderSides,borderStartEach,sidesStartEach}from"efficient-shell/ui";function u({title:e,level:l=3,id:n,className:t}){/* @__PURE__ */
2
- return a(`h${l}`,{id:n,className:t?`es-group-head ${t}`:"es-group-head",children:e})}function h({title:e,level:l=4,id:n,className:t}){/* @__PURE__ */
3
- return a(`h${l}`,{id:n,className:t?`es-group-sub ${t}`:"es-group-sub",children:e})}function b({label:l,changed:n,onReset:i,detail:s,disabled:d,defaultAction:r,words:c,className:u}){const h={...e,...c},b=["es-default-reset"];if(n&&b.push("is-changed"),u&&b.push(u),!n&&r)return b.push("is-pressable"),t(r.title,/* @__PURE__ */a("button",{type:"button",className:b.join(" "),"aria-label":r.title,disabled:d,onClick:r.onPress,children:r.icon}));if(!n)/* @__PURE__ */
4
- return a("span",{className:b.join(" "),"aria-hidden":"true"});const g=h.resetName({label:l});return t(s?h.resetTitle({label:l,detail:s}):g,/* @__PURE__ */a("button",{type:"button",className:b.join(" "),"aria-label":g,"aria-description":s||void 0,disabled:d,onClick:e=>{i(),function(e){const l=e.currentTarget,n=l.closest(".es-field");let t=n?.querySelector(m(".es-field-ctl"))??n?.querySelector(m(".es-field-head"))??null,a=n?null:l.parentElement;for(let e=0;!t&&a&&e<f;e+=1,a=a.parentElement)t=[...a.querySelectorAll(p)].find(e=>e!==l)??null;t?.focus()}(e)},children:/* @__PURE__ */a(o,{size:15})}))}var p=['input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","button:not([disabled]):not(.es-default-reset)",'[tabindex]:not([tabindex="-1"])'].join(", "),m=e=>p.split(", ").map(l=>`${e} ${l}`).join(", "),f=4;function g({name:e,preview:l,offPage:n,status:t,onOpen:o,id:d,className:r}){const u=null!=l;/* @__PURE__ */
5
- return i("button",{type:"button",id:d,className:r?`es-drill ${r}`:"es-drill",onClick:o,children:[
6
- /* @__PURE__ */i(c,{content:u?/* @__PURE__ */i(s,{children:[e,
7
- /* @__PURE__ */a("br",{}),l]}):e,describe:!1,className:"es-drill-text",children:[
8
- /* @__PURE__ */a("span",{className:"es-drill-name",children:e}),u?/* @__PURE__ */a("span",{className:n?"es-drill-preview is-offpage":"es-drill-preview",children:l}):null]}),t?/* @__PURE__ */a("span",{className:"es-drill-status",children:t}):null,
9
- /* @__PURE__ */a("span",{className:"es-drill-chev","aria-hidden":"true"})]})}function N({label:e,onPress:l,disabled:n,note:t,done:s,doneLabel:o,icon:d,id:r,className:c}){const u=void 0===o?e:o,h=s?u:e,b=null!=t,p=b&&r?`${r}-note`:void 0;/* @__PURE__ */
10
- return i("div",{className:c?`es-action-wrap ${c}`:"es-action-wrap",children:[
11
- /* @__PURE__ */i("button",{type:"button",id:r,className:s?"es-action is-done":"es-action",disabled:n,"aria-describedby":p,onClick:l,children:[d?/* @__PURE__ */a("span",{className:"es-action-icon","aria-hidden":"true",children:d}):null,
12
- /* @__PURE__ */a("span",{className:"es-action-label",children:h})]}),b?/* @__PURE__ */a("p",{id:p,className:"es-action-note",children:t}):null,
13
- /* @__PURE__ */a("span",{className:"es-action-live",role:"status","aria-live":"polite",children:s?u:null})]})}var S=["full","content"],v={label:"Background",full:"Full width",content:"Content width"};function w({value:e,changed:t,detail:i,onChange:s,onReset:o,disabled:r=!1,hint:c,labelId:u,words:h,resetWords:p}){const m={...v,...h};/* @__PURE__ */
14
- return a(l,{label:m.label,labelId:u,icon:/* @__PURE__ */a(d,{}),changed:t,hint:c,action:/* @__PURE__ */a(b,{words:p,label:m.label,changed:t,detail:i,onReset:o}),children:/* @__PURE__ */a(n,{options:S.map(e=>({id:e,label:"full"===e?m.full:m.content})),value:e,onChange:s,ariaLabel:m.label,disabled:r})})}var C={label:"Content",full:"Full width",content:"Content width"};function j({mode:e,onMode:t,number:s,changed:o,detail:d,onReset:c,fullClosed:u=!1,disabled:h=!1,hint:p,labelId:m,words:f,resetWords:g}){const N={...C,...f},v=void 0!==e&&t?/* @__PURE__ */a(n,{options:S.map(e=>({id:e,label:"full"===e?N.full:N.content,disabled:"full"===e&&u})),value:e,onChange:t,ariaLabel:N.label,disabled:h}):null;/* @__PURE__ */
15
- return a(l,{label:N.label,labelId:m,icon:/* @__PURE__ */a(r,{}),changed:o,hint:p,action:/* @__PURE__ */a(b,{words:g,label:N.label,changed:o,detail:d,onReset:c}),children:v&&s?/* @__PURE__ */i("div",{className:"es-width-stack",children:[v,s]}):v??s??null})}export{S as BACKGROUND_WIDTHS,v as DEFAULT_BACKGROUND_WIDTH_WORDS,C as DEFAULT_CONTENT_WIDTH_WORDS,N as SettingsAction,w as SettingsBackgroundWidth,j as SettingsContentWidth,b as SettingsDefaultReset,g as SettingsDrill,u as SettingsGroupHead,h as SettingsGroupSub};
1
+ export{DESIGN_GROUPS,SETTINGS_BUCKETS,SettingsGroup}from"../chunk-FM6JO4WF.js";import{DEFAULT_PANEL_WORDS as e}from"../chunk-KFV7N2DJ.js";export{SettingsSwitch}from"../chunk-OECWLNKJ.js";import{SettingsField as l,SettingsSegmented as n}from"../chunk-S3DUFDQ6.js";export{SettingsField,SettingsSegmented}from"../chunk-S3DUFDQ6.js";import{AccordionHeading as a,SettingReset as t,Tooltip as i}from"efficient-shell/ui";export{BorderInput as SettingsBorder,CornersInput as SettingsCorners,AlignmentGrid as SettingsPlacement,SidesInput as SettingsSides,SidesEachToggle as SettingsSidesEach,borderSides,borderStartEach,sidesStartEach}from"efficient-shell/ui";import{jsx as s,jsxs as d,Fragment as o}from"react/jsx-runtime";import{BackgroundIcon as r,WidthIcon as c}from"efficient-shell/icons/efficient";function u({title:e,level:l=3,id:n,className:t}){/* @__PURE__ */
2
+ return s(a,{title:e,level:l,id:n,className:t?`es-panel-band ${t}`:"es-panel-band"})}function h({title:e,level:l=4,id:n,className:t}){/* @__PURE__ */
3
+ return s(a,{tier:"row",title:e,level:l,id:n,className:t})}function b({label:l,changed:n,onReset:a,detail:i,disabled:d,defaultAction:o,words:r,className:c}){const u={...e,...r},h=u.resetName({label:l});/* @__PURE__ */
4
+ return s(t,{label:l,changed:n,onReset:a,detail:i,disabled:d,defaultAction:o,name:h,tip:i?u.resetTitle({label:l,detail:i}):h,className:c})}function m({name:e,preview:l,offPage:n,status:a,onOpen:t,id:r,className:c}){const u=null!=l;/* @__PURE__ */
5
+ return d("button",{type:"button",id:r,className:c?`es-drill ${c}`:"es-drill",onClick:t,children:[
6
+ /* @__PURE__ */d(i,{content:u?/* @__PURE__ */d(o,{children:[e,
7
+ /* @__PURE__ */s("br",{}),l]}):e,describe:!1,className:"es-drill-text",children:[
8
+ /* @__PURE__ */s("span",{className:"es-drill-name",children:e}),u?/* @__PURE__ */s("span",{className:n?"es-drill-preview is-offpage":"es-drill-preview",children:l}):null]}),a?/* @__PURE__ */s("span",{className:"es-drill-status",children:a}):null,
9
+ /* @__PURE__ */s("span",{className:"es-drill-chev","aria-hidden":"true"})]})}function f({label:e,onPress:l,disabled:n,note:a,done:t,doneLabel:i,icon:o,id:r,className:c}){const u=void 0===i?e:i,h=t?u:e,b=null!=a,m=b&&r?`${r}-note`:void 0;/* @__PURE__ */
10
+ return d("div",{className:c?`es-action-wrap ${c}`:"es-action-wrap",children:[
11
+ /* @__PURE__ */d("button",{type:"button",id:r,className:t?"es-action is-done":"es-action",disabled:n,"aria-describedby":m,onClick:l,children:[o?/* @__PURE__ */s("span",{className:"es-action-icon","aria-hidden":"true",children:o}):null,
12
+ /* @__PURE__ */s("span",{className:"es-action-label",children:h})]}),b?/* @__PURE__ */s("p",{id:m,className:"es-action-note",children:a}):null,
13
+ /* @__PURE__ */s("span",{className:"es-action-live",role:"status","aria-live":"polite",children:t?u:null})]})}var p=["full","content"],g={label:"Background",full:"Full width",content:"Content width"};function N({value:e,changed:a,detail:t,onChange:i,onReset:d,disabled:o=!1,hint:c,labelId:u,words:h,resetWords:m}){const f={...g,...h};/* @__PURE__ */
14
+ return s(l,{label:f.label,labelId:u,icon:/* @__PURE__ */s(r,{}),changed:a,hint:c,action:/* @__PURE__ */s(b,{words:m,label:f.label,changed:a,detail:t,onReset:d}),children:/* @__PURE__ */s(n,{options:p.map(e=>({id:e,label:"full"===e?f.full:f.content})),value:e,onChange:i,ariaLabel:f.label,disabled:o})})}var S={label:"Content",full:"Full width",content:"Content width"};function v({mode:e,onMode:a,number:t,changed:i,detail:o,onReset:r,fullClosed:u=!1,disabled:h=!1,hint:m,labelId:f,words:g,resetWords:N}){const v={...S,...g},w=void 0!==e&&a?/* @__PURE__ */s(n,{options:p.map(e=>({id:e,label:"full"===e?v.full:v.content,disabled:"full"===e&&u})),value:e,onChange:a,ariaLabel:v.label,disabled:h}):null;/* @__PURE__ */
15
+ return s(l,{label:v.label,labelId:f,icon:/* @__PURE__ */s(c,{}),changed:i,hint:m,action:/* @__PURE__ */s(b,{words:N,label:v.label,changed:i,detail:o,onReset:r}),children:w&&t?/* @__PURE__ */d("div",{className:"es-width-stack",children:[w,t]}):w??t??null})}export{p as BACKGROUND_WIDTHS,g as DEFAULT_BACKGROUND_WIDTH_WORDS,S as DEFAULT_CONTENT_WIDTH_WORDS,f as SettingsAction,N as SettingsBackgroundWidth,v as SettingsContentWidth,b as SettingsDefaultReset,m as SettingsDrill,u as SettingsGroupHead,h as SettingsGroupSub};