efficient-easel 22.0.0 → 23.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 (145) hide show
  1. package/README.md +38 -23
  2. package/dist/{CanvasDragLayer-B6Yn9S8T.d.ts → CanvasDragLayer-NZpaX6aq.d.ts} +15 -4
  3. package/dist/{ScreenDocumentContext-BIK3uWtF.d.ts → ScreenDocumentContext-BDLUYzlM.d.ts} +4 -4
  4. package/dist/blocks/index.d.ts +11 -11
  5. package/dist/canvas/index.d.ts +21 -9
  6. package/dist/canvas/index.js +1 -1
  7. package/dist/{canvas-typing-Be4FO4q7.d.ts → canvas-typing-DOBx8dD3.d.ts} +12 -2
  8. package/dist/{chunk-XWKQP6AE.js → chunk-3P735WOM.js} +4 -4
  9. package/dist/{chunk-KWLHKKZO.js → chunk-4YUC7B7E.js} +1 -1
  10. package/dist/chunk-6F5GO337.js +1 -0
  11. package/dist/{chunk-3S5N4HLJ.js → chunk-6NJHYXJM.js} +1 -1
  12. package/dist/{chunk-BTDI7JAA.js → chunk-A6ZP5II4.js} +2 -2
  13. package/dist/{chunk-IWCKVZHS.js → chunk-AGWKB77Q.js} +1 -1
  14. package/dist/chunk-AT4DDMJS.js +1 -0
  15. package/dist/chunk-FF54HWSE.js +8 -0
  16. package/dist/{chunk-IROEWITG.js → chunk-FOOK54T2.js} +1 -1
  17. package/dist/{chunk-SWBADIQT.js → chunk-G3HAKQUF.js} +1 -1
  18. package/dist/{chunk-ZOSEBPAI.js → chunk-GKG3M5QK.js} +1 -1
  19. package/dist/chunk-GXRS52JD.js +5 -0
  20. package/dist/{chunk-YC6KLSW3.js → chunk-HLMQ34GP.js} +1 -1
  21. package/dist/chunk-HZSZT3BE.js +7 -0
  22. package/dist/{chunk-EB6NI2VK.js → chunk-IYHO4XQX.js} +1 -1
  23. package/dist/chunk-IZGFJWH4.js +1 -0
  24. package/dist/chunk-KXM6YRG2.js +1 -0
  25. package/dist/chunk-KXTXYINN.js +16 -0
  26. package/dist/chunk-LN43DP2A.js +18 -0
  27. package/dist/{chunk-YHFKWV7H.js → chunk-MXECWHRJ.js} +10 -10
  28. package/dist/chunk-OXZDSOZV.js +1 -0
  29. package/dist/{chunk-BSHIQIZC.js → chunk-RPMSET77.js} +1 -1
  30. package/dist/{chunk-K7BTCBWD.js → chunk-TGZCD6IP.js} +1 -1
  31. package/dist/chunk-VZUXOZGP.js +64 -0
  32. package/dist/{chunk-RY5AWQ63.js → chunk-XJ23ULBP.js} +1 -1
  33. package/dist/{chunk-TLN5ZT76.js → chunk-YHEYJKQL.js} +1 -1
  34. package/dist/chunk-YU3WHLGI.js +1 -0
  35. package/dist/copy/index.d.ts +20 -6
  36. package/dist/copy/index.js +29 -29
  37. package/dist/data/index.d.ts +30 -22
  38. package/dist/data/index.js +1 -1
  39. package/dist/drag/drag.css +10 -1
  40. package/dist/drag/index.d.ts +5 -5
  41. package/dist/drag/index.js +1 -1
  42. package/dist/draw/index.d.ts +1 -1
  43. package/dist/easel/easel.css +12 -5
  44. package/dist/easel/index.d.ts +90 -53
  45. package/dist/easel/index.js +1 -1
  46. package/dist/edit-lock/index.d.ts +5 -5
  47. package/dist/fields/fields.css +1 -1
  48. package/dist/fields/index.d.ts +15 -15
  49. package/dist/fields/index.js +1 -1
  50. package/dist/node-ops/index.d.ts +3 -3
  51. package/dist/node-ops/index.js +1 -1
  52. package/dist/panel/index.d.ts +1 -1
  53. package/dist/panel/panel.css +6 -1
  54. package/dist/pick/index.d.ts +5 -5
  55. package/dist/{plan-CRUh2kVK.d.ts → plan-D0DgSLnY.d.ts} +5 -5
  56. package/dist/render/index.d.ts +13 -13
  57. package/dist/render/index.js +1 -1
  58. package/dist/{resolve-AJ6WF4EL.d.ts → resolve-Bz4mszpL.d.ts} +5 -5
  59. package/dist/screen/components/AddBlockRow.js +1 -1
  60. package/dist/screen/components/AddSidePanel.d.ts +2 -2
  61. package/dist/screen/components/AddSidePanel.js +1 -1
  62. package/dist/screen/components/NodeContextMenu.d.ts +17 -20
  63. package/dist/screen/components/NodeContextMenu.js +1 -1
  64. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  65. package/dist/screen/components/PreviewDeviceContext.d.ts +1 -1
  66. package/dist/screen/components/PreviewPartsContext.d.ts +2 -2
  67. package/dist/screen/components/SaveControls.d.ts +8 -8
  68. package/dist/screen/components/ScreenChrome.js +1 -1
  69. package/dist/screen/components/ScreenDocumentContext.d.ts +5 -5
  70. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  71. package/dist/screen/components/ScreenMount.d.ts +8 -8
  72. package/dist/screen/components/ScreenMount.js +1 -1
  73. package/dist/screen/components/ScreenStoreProvider.d.ts +12 -12
  74. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  75. package/dist/screen/components/SectionScreenShell.js +17 -17
  76. package/dist/screen/components/usePartBridge.d.ts +10 -10
  77. package/dist/screen/components/usePartBridge.js +1 -1
  78. package/dist/screen/index.d.ts +8 -8
  79. package/dist/screen/index.js +1 -1
  80. package/dist/screen/lib/admin-bridge.d.ts +4 -4
  81. package/dist/screen/lib/document/block-types-in.d.ts +2 -1
  82. package/dist/screen/lib/document/block-types-in.js +1 -1
  83. package/dist/screen/lib/document/content-tree.d.ts +8 -8
  84. package/dist/screen/lib/document/device-fields.d.ts +7 -7
  85. package/dist/screen/lib/document/device-fields.js +1 -1
  86. package/dist/screen/lib/document/field-markers.d.ts +4 -4
  87. package/dist/screen/lib/document/palette-sections.d.ts +5 -5
  88. package/dist/screen/lib/document/panel-fields.d.ts +5 -5
  89. package/dist/screen/lib/document/panel-no-control-mark.d.ts +3 -3
  90. package/dist/screen/lib/document/part-id.d.ts +1 -1
  91. package/dist/screen/lib/document/preview-events.d.ts +2 -2
  92. package/dist/screen/lib/document/preview-selection-context.d.ts +2 -2
  93. package/dist/screen/lib/document/section-doc.d.ts +5 -5
  94. package/dist/screen/lib/document/section-doc.js +1 -1
  95. package/dist/screen/lib/document/slot-child-name.d.ts +1 -1
  96. package/dist/screen/lib/document/slot-section-spec.d.ts +1 -1
  97. package/dist/screen/lib/document/style-clipboard.d.ts +8 -8
  98. package/dist/screen/lib/document/style-clipboard.js +1 -1
  99. package/dist/screen/lib/document/tree-reveal.d.ts +4 -4
  100. package/dist/screen/lib/document/use-section-ops.d.ts +6 -6
  101. package/dist/screen/lib/document/use-section-ops.js +1 -1
  102. package/dist/screen/lib/document-addressing.d.ts +5 -5
  103. package/dist/screen/lib/document-hooks.d.ts +4 -4
  104. package/dist/screen/lib/host.d.ts +5 -5
  105. package/dist/screen/lib/key-scope.d.ts +1 -1
  106. package/dist/screen/lib/key-scope.js +1 -1
  107. package/dist/screen/lib/media-panel.d.ts +5 -5
  108. package/dist/screen/lib/media-picker.d.ts +6 -6
  109. package/dist/screen/lib/page-lock.d.ts +4 -4
  110. package/dist/screen/lib/screen-parts.d.ts +22 -10
  111. package/dist/screen/lib/screen-parts.js +1 -1
  112. package/dist/screen/lib/section-templates.d.ts +4 -4
  113. package/dist/screen/lib/session-context.d.ts +4 -4
  114. package/dist/screen/lib/session.d.ts +5 -5
  115. package/dist/screen/lib/shared-sections.d.ts +4 -4
  116. package/dist/screen/screen.css +14 -14
  117. package/dist/screen/words.d.ts +4 -3
  118. package/dist/screen/words.js +1 -1
  119. package/dist/{session-CrWwDt7Z.d.ts → session-EsjORLQ0.d.ts} +1 -1
  120. package/dist/shell/shell.css +2 -2
  121. package/dist/strings/index.d.ts +2 -2
  122. package/dist/strings/index.js +2 -2
  123. package/dist/style-clipboard/index.d.ts +2 -2
  124. package/dist/text-styles/index.d.ts +3 -3
  125. package/dist/text-styles/model.d.ts +1 -1
  126. package/dist/{types-BFd8FqQw.d.ts → types-BIytwvvH.d.ts} +2 -2
  127. package/dist/{types-DFxBChE3.d.ts → types-BljCVdzR.d.ts} +17 -17
  128. package/dist/{types-DlQIM1YO.d.ts → types-Dq180WRV.d.ts} +8 -8
  129. package/dist/{useNodeOps-C_nisDHh.d.ts → useNodeOps-igxrnEhq.d.ts} +2 -2
  130. package/dist/{watch-D0bNZRtU.d.ts → watch-Unf6SfUf.d.ts} +3 -3
  131. package/dist/{words-gIDCeRv3.d.ts → words-B5Gb7KFq.d.ts} +1 -1
  132. package/dist/{words-BpTjCfqO.d.ts → words-Cf5VT2Ic.d.ts} +2 -2
  133. package/package.json +1 -1
  134. package/dist/chunk-4LGROS5L.js +0 -1
  135. package/dist/chunk-BDSLF5BR.js +0 -1
  136. package/dist/chunk-CPL43ZLJ.js +0 -1
  137. package/dist/chunk-CUZQ2HMA.js +0 -18
  138. package/dist/chunk-GHBK7BKL.js +0 -1
  139. package/dist/chunk-IYYE7VJN.js +0 -65
  140. package/dist/chunk-KN2TIXUT.js +0 -1
  141. package/dist/chunk-L55YIXDC.js +0 -1
  142. package/dist/chunk-MZ5GSSZ3.js +0 -7
  143. package/dist/chunk-SJMS247S.js +0 -5
  144. package/dist/chunk-TXR7GC5A.js +0 -8
  145. package/dist/chunk-WJSEWAWK.js +0 -15
@@ -142,7 +142,7 @@ declare function accessForNewDocument(hasEditLock: boolean): EditAccess;
142
142
  declare const holderOf: (access: EditAccess) => LockHolder | null;
143
143
  /** Read the `edit-lock` body — from a 200 or from a 409's error payload. */
144
144
  declare function readLockHolder(data: unknown): LockHolder | null;
145
- /** The five capabilities the old editor's `permissions` prop carries for the canvas. */
145
+ /** The five capabilities the old library's `permissions` prop carries for the canvas. */
146
146
  type DocumentPermissions = {
147
147
  edit: boolean;
148
148
  insert: boolean;
@@ -151,13 +151,13 @@ type DocumentPermissions = {
151
151
  drag: boolean;
152
152
  };
153
153
  /**
154
- * The canvas's the old editor `permissions`, derived from the write gate.
154
+ * The canvas's the old library `permissions`, derived from the write gate.
155
155
  *
156
156
  * BOTH branches name ALL FIVE keys — and that completeness is the whole point,
157
- * not tidiness. The old editor does not replace this prop when it changes; it MERGES it
157
+ * not tidiness. The old library does not replace this prop when it changes; it MERGES it
158
158
  * over the permissions it already holds (store/slices/permissions.ts,
159
159
  * `useRegisterPermissionsSlice`: `{ ...existingGlobalPermissions, ...prop }`),
160
- * and a field's editability is the live `getPermissions().edit`. The old editor mounts
160
+ * and a field's editability is the live `getPermissions().edit`. The old library mounts
161
161
  * while the lock claim is still `checking`, so `canEdit` is false and the store
162
162
  * latches every key false. A PARTIAL writable value (say `{ drag: false }`)
163
163
  * would then merge WITHOUT an `edit` key and leave `edit:false` stuck — every
@@ -166,7 +166,7 @@ type DocumentPermissions = {
166
166
  * resets them, so the panel comes back the instant `canEdit` flips true.
167
167
  *
168
168
  * `drag` stays false in EITHER state: both editors move blocks with native DnD
169
- * rails of their own, so the old editor's flaky cross-iframe canvas drag is always off.
169
+ * rails of their own, so the old library's flaky cross-iframe canvas drag is always off.
170
170
  *
171
171
  * Write safety is unchanged: the `checking` window is still non-editable here,
172
172
  * and the host's own write gate still drops any edit attempted before the claim
@@ -4,7 +4,7 @@
4
4
  * The rows and the groups are `panel.css`'s (SettingsField, SettingsGroup),
5
5
  * and the tabs are the shell's `Tabs`. The panel's rhythm is defined in
6
6
  * `panel.css` ONCE (`--es-row-gap`, `--es-rhythm-*`), so this file adds no spacing between rows
7
- * and no spacing between groups. What it adds is what a row HOLDS where the old editor
7
+ * and no spacing between groups. What it adds is what a row HOLDS where the old library
8
8
  * used to put the browser's own: a text box, a number box, a dropdown.
9
9
  *
10
10
  * Every colour is a shell token (`shell.css`), so the dark editor is the same
@@ -4,12 +4,12 @@ import { S as SettingsBucket } from '../buckets-_MGDYJlb.js';
4
4
  export { D as DesignGroup } from '../buckets-_MGDYJlb.js';
5
5
  import { ShowWhenContext } from 'efficient-shell/format';
6
6
  export { ShowWhenContext, ShowWhenRule, showWhenOf, withShowWhen } from 'efficient-shell/format';
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-BFd8FqQw.js';
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-BFd8FqQw.js';
9
- import { R as ResolvableItem } from '../resolve-AJ6WF4EL.js';
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-BIytwvvH.js';
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-BIytwvvH.js';
9
+ import { R as ResolvableItem } from '../resolve-Bz4mszpL.js';
10
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
- import '../types-DlQIM1YO.js';
12
+ import '../types-Dq180WRV.js';
13
13
 
14
14
  /**
15
15
  * A SETTINGS ROW'S SHOW-WHEN, read by the panel (SSOT batch 1, Lewis
@@ -81,12 +81,12 @@ interface InspectorFieldProps {
81
81
  }
82
82
  /** A heading level a settings group may draw at. */
83
83
  type HeadingLevel = 2 | 3 | 4 | 5 | 6;
84
- /** The label a row shows: the field's own, else its key, as the old editor did. */
84
+ /** The label a row shows: the field's own, else its key, as the old library did. */
85
85
  declare const labelOf: (field: InspectorFieldDef, name: string) => string;
86
86
  /**
87
- * ONE FIELD, drawn by its type — what the old editor's `AutoField` was (blueprint 4.1).
87
+ * ONE FIELD, drawn by its type — what the old library's `AutoField` was (blueprint 4.1).
88
88
  *
89
- * custom the field's own render, called with the old editor's props plus `context`;
89
+ * custom the field's own render, called with the old library's props plus `context`;
90
90
  * text, textarea, number, select
91
91
  * a SettingsField row (quiet label, control under it) holding the
92
92
  * shell's own control, never the browser's;
@@ -221,7 +221,7 @@ interface InspectorProps {
221
221
  headingLevel?: HeadingLevel;
222
222
  }
223
223
  /**
224
- * THE SETTINGS PANEL'S BODY (blueprint step 4.1) — what `the old editor's fields panel` was in
224
+ * THE SETTINGS PANEL'S BODY (blueprint step 4.1) — what `the old library's fields panel` was in
225
225
  * both editors, without the hashed class names both had to hunt.
226
226
  *
227
227
  * - THE TABS ARE THE FIELDS' OWN. Which tab a field opens is said on the field
@@ -238,7 +238,7 @@ interface InspectorProps {
238
238
  * re-bakes its colours from a field on a tab you are not looking at; taking
239
239
  * the row out of the tree would stop that.
240
240
  * - EVERY ROW IS ONE `.es-insp-row` WITH ITS NAME ON IT (`data-field`), a
241
- * public class an app may style, where the old editor's wrapper had a hashed one. A row
241
+ * public class an app may style, where the old library's wrapper had a hashed one. A row
242
242
  * that draws nothing takes no space (`:empty`).
243
243
  * - THE SPACING IS THE PANEL'S (panel.css `--es-rhythm-*`): a row adds none of
244
244
  * its own, so the rhythm is defined once for both editors.
@@ -279,11 +279,11 @@ interface ResolvedFieldsInput {
279
279
  block: FieldsBlock | undefined;
280
280
  /** The node that holds it, or null at the top. */
281
281
  parent?: ResolvableItem | null;
282
- /** What a resolver is told about the editor (the old editor's public `{ data, ui }`). */
282
+ /** What a resolver is told about the editor (the old library's public `{ data, ui }`). */
283
283
  appState?: unknown;
284
284
  }
285
285
  /**
286
- * A NODE'S FIELDS, RESOLVED AS THE OLD EDITOR RESOLVED THEM — `useRegisterFieldsSlice`
286
+ * A NODE'S FIELDS, RESOLVED AS THE OLD LIBRARY RESOLVED THEM — `useRegisterFieldsSlice`
287
287
  * in Puck 0.20, which both editors' `resolveFields` were written against.
288
288
  *
289
289
  * - A new selection starts from the block's DECLARED fields (`lastFields` is
@@ -296,7 +296,7 @@ interface ResolvedFieldsInput {
296
296
  * - `loading` turns on only when an answer takes longer than 50 ms.
297
297
  *
298
298
  * `appState` and `parent` are read when a resolution starts, never watched:
299
- * The old editor re-resolved on the node's change alone.
299
+ * The old library re-resolved on the node's change alone.
300
300
  */
301
301
  declare function useResolvedFields({ id, node, block, parent, appState }: ResolvedFieldsInput): {
302
302
  fields: InspectorFields;
@@ -350,9 +350,9 @@ interface ListFieldProps<T> {
350
350
  noun?: string;
351
351
  items: readonly T[];
352
352
  onChange: (next: T[]) => void;
353
- /** A fresh item for "+" (the old editor's `defaultItemProps`, copied). */
353
+ /** A fresh item for "+" (the old library's `defaultItemProps`, copied). */
354
354
  newItem: () => T;
355
- /** The words after an item's name in its row (the old editor's `getItemSummary`). */
355
+ /** The words after an item's name in its row (the old library's `getItemSummary`). */
356
356
  summary?: (item: T, index: number) => ReactNode;
357
357
  /** An item's own name; default "<Noun> <n>". */
358
358
  itemName?: (item: T, index: number) => string;
@@ -401,7 +401,7 @@ declare function moveTo<T>(items: readonly T[], from: number, to: number): T[];
401
401
  declare function removeAt<T>(items: readonly T[], index: number): T[];
402
402
  /**
403
403
  * A copy of an item: a deep copy of plain data, so editing the copy never
404
- * writes through to the original (a list item is JSON — the old editor stored it so).
404
+ * writes through to the original (a list item is JSON — the old library stored it so).
405
405
  */
406
406
  declare function copyItem<T>(item: T): T;
407
407
  declare function ListField<T>({ label, icon, noun: ownNoun, items, onChange, newItem, summary, itemName, thumb, min, max, readOnly, open, onOpen, renderItem, renderRow, canRemove: removable, lockedReason, fixed, removeOnRow, canDuplicate, above, head, }: ListFieldProps<T>): react.JSX.Element;
@@ -1 +1 @@
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";
1
+ export{FieldText,Inspector,InspectorField,LinkPicker,ListField,bucketsOf,copyItem,insertAt,labelOf,moveTo,planFields,removeAt}from"../chunk-MXECWHRJ.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-AGWKB77Q.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-6NJHYXJM.js";import"../chunk-P2VEMZH5.js";import"../chunk-TGZCD6IP.js";import"../chunk-KXM6YRG2.js";
@@ -1,9 +1,9 @@
1
- export { A as AfterRemove, I as ItemSelector, N as NodeSelection, P as PassThrough, a as Planned, S as StepBounds, c as canStep, b as clickPick, d as clickPickPart, f as fromItemSelector, n as nextInChain, e as nodeChain, p as parentStep, g as planDuplicate, h as planMove, i as planPaste, j as planRemove, k as planRestore, l as planSetProps, m as planStep, o as planSwap, t as toItemSelector } from '../plan-CRUh2kVK.js';
2
- export { C as ClipboardEntry, N as NodeClipboard, a as NodeOps, b as NodeOpsHost, c as createNodeClipboard, u as useNodeOps } from '../useNodeOps-C_nisDHh.js';
1
+ export { A as AfterRemove, I as ItemSelector, N as NodeSelection, P as PassThrough, a as Planned, S as StepBounds, c as canStep, b as clickPick, d as clickPickPart, f as fromItemSelector, n as nextInChain, e as nodeChain, p as parentStep, g as planDuplicate, h as planMove, i as planPaste, j as planRemove, k as planRestore, l as planSetProps, m as planStep, o as planSwap, t as toItemSelector } from '../plan-D0DgSLnY.js';
2
+ export { C as ClipboardEntry, N as NodeClipboard, a as NodeOps, b as NodeOpsHost, c as createNodeClipboard, u as useNodeOps } from '../useNodeOps-igxrnEhq.js';
3
3
  import { ReactNode } from 'react';
4
4
  import { E as EaselContextMenuItem } from '../types-BbOBWXMP.js';
5
5
  import { N as NodeMenuWords } from '../words-DMG4dYq2.js';
6
- import '../types-DlQIM1YO.js';
6
+ import '../types-Dq180WRV.js';
7
7
 
8
8
  /**
9
9
  * nodeMenuItems — the right-click rows for a block, ONE list for both editors.
@@ -1 +1 @@
1
- export{createNodeClipboard,nodeMenuItems}from"../chunk-P5VYGWYO.js";import"../chunk-WK3AFPXY.js";export{canStep,clickPick,clickPickPart,fromItemSelector,nextInChain,nodeChain,parentStep,planDuplicate,planMove,planPaste,planRemove,planRestore,planSetProps,planStep,planSwap,toItemSelector,useNodeOps}from"../chunk-BSHIQIZC.js";import"../chunk-K7BTCBWD.js";import"../chunk-L55YIXDC.js";
1
+ export{createNodeClipboard,nodeMenuItems}from"../chunk-P5VYGWYO.js";import"../chunk-WK3AFPXY.js";export{canStep,clickPick,clickPickPart,fromItemSelector,nextInChain,nodeChain,parentStep,planDuplicate,planMove,planPaste,planRemove,planRestore,planSetProps,planStep,planSwap,toItemSelector,useNodeOps}from"../chunk-RPMSET77.js";import"../chunk-TGZCD6IP.js";import"../chunk-KXM6YRG2.js";
@@ -621,7 +621,7 @@ declare function SettingsSegmented<V = string>({ options, value, onChange, ariaL
621
621
  declare function SettingsGroup({ title, open, onToggle, count, level, id, children, className, }: SettingsGroupProps): react.JSX.Element;
622
622
 
623
623
  /**
624
- * A group heading with NO group under it — the band on its own, for the old editor's
624
+ * A group heading with NO group under it — the band on its own, for the old library's
625
625
  * flat inspector list, where a heading cannot wrap the rows that follow it. A
626
626
  * HEADING, not a control: no button, no sign, no count. THE SHELL'S
627
627
  * `AccordionHeading` (B2 plan C, Lewis 2026-10-26); this name stays because
@@ -32,7 +32,7 @@
32
32
  token behind any of them: there was nowhere to change it once, and no floor
33
33
  under any of it.
34
34
 
35
- ON `.es-editor`, because the panel HAS no root of its own. The old editor lays the
35
+ ON `.es-editor`, because the panel HAS no root of its own. The old library lays the
36
36
  inspector out as a flat sibling list, so the primitives render no wrapper —
37
37
  and `.es-editor` is the chrome root both editors already put on their own
38
38
  chrome and the root every colour in this sheet is already read from. A host
@@ -503,6 +503,11 @@
503
503
  because it is the only thing saying which name owns which control. Floored
504
504
  on `--es-row-gap`, not replaced, and not `calc()`. */
505
505
  .es-field { margin-top: max(var(--es-row-gap), var(--es-rhythm-between)); }
506
+ /* An Inspector inside a group body (a host's group of rows under a heading, e.g.
507
+ the website's "This page" in Styles > Basics): `.es-insp` is a flex column, so
508
+ the body's 32px and the first row's 32px do not fold into one. The body
509
+ carries the band's gap; the first row adds none. */
510
+ .es-group-body > .es-insp > .es-insp-rows > .es-insp-row:first-child > .es-field:first-child { margin-top: 0; }
506
511
  .es-field-head { margin-bottom: var(--es-rhythm-within); }
507
512
 
508
513
  /* A one-line row (a switch on the name line) has no control line, so no gap
@@ -21,7 +21,7 @@ type ColourPickerProps = {
21
21
  * A WORD the row prints in place of the hex. While `value` is `''` it names
22
22
  * the empty state ("Not set" by default). Given WITH a colour, it names the
23
23
  * state that colour is in — "Auto" for an ink that follows its fill, "Accent"
24
- * for a button on the theme's colour: the swatch shows the colour the page
24
+ * for a button on theme's colour: the swatch shows the colour the page
25
25
  * really has, the row prints the word, and the hex is in the window. A
26
26
  * caption that IS the value's hex is no word, and the row's hex box stays.
27
27
  */
@@ -60,7 +60,7 @@ type ColourPickerProps = {
60
60
  };
61
61
  /**
62
62
  * ONE COLOUR ROW (blueprint step 4.6): a swatch and its hex, and — pressing
63
- * the swatch — the shell's colour picker with the theme's colours, a
63
+ * the swatch — the shell's colour picker with theme's colours, a
64
64
  * saturation-and-brightness square, a hue strip and the hex again.
65
65
  *
66
66
  * ⚠️ NEVER THE SYSTEM COLOUR DIALOG. `<input type="color">` opens a different
@@ -111,7 +111,7 @@ type ColourWindowProps = {
111
111
  onChange: (next: string) => void;
112
112
  /** The colour's name: it names the panel's hex box ("<label> hex code"). */
113
113
  label: string;
114
- /** The theme's colours, offered first — the shell panel's `presets`, each named by the theme. */
114
+ /** The theme's colours, offered first — the shell panel's `presets`, each named by theme. */
115
115
  theme?: readonly ThemeColour[];
116
116
  /** Escape in the window. The opener closes it and takes the focus back. */
117
117
  onClose?: () => void;
@@ -143,13 +143,13 @@ type ColourWindowProps = {
143
143
  };
144
144
  /**
145
145
  * THE COLOUR WINDOW on its own: the shell's `ColorPickerPanel` (easel#199
146
- * step 4, harness UI-24) — the theme's colours as its presets, named by the
146
+ * step 4, harness UI-24) — theme's colours as its presets, named by the
147
147
  * theme, the saturation and brightness square, the hue strip and the hex.
148
148
  * `ColourPicker` opens it in the shell's Popover; a row that draws its own
149
149
  * swatches (the text-styles list's Any color, plan step E6) opens the same one
150
150
  * in its own flow, so there is one window, not two.
151
151
  *
152
- * What it maps: `theme` → `presets` (`label` = the theme colour's name),
152
+ * What it maps: `theme` → `presets` (`label` = theme colour's name),
153
153
  * `inherited` → `fallback` (the panel starts from it, its hex a placeholder,
154
154
  * and nothing is written until something moves), `readOnly` → `disabled`.
155
155
  * A pick EQUAL to the inherited colour still writes — it pins it — because the
@@ -1,12 +1,12 @@
1
- import { N as Node, P as Place, D as Data, a as DataConfig } from './types-DlQIM1YO.js';
1
+ import { N as Node, P as Place, D as Data, a as DataConfig } from './types-Dq180WRV.js';
2
2
 
3
3
  /**
4
4
  * Every node operation the two editors offer, as ONE pure step: a document in,
5
5
  * the next document and what to select out.
6
6
  *
7
- * Why one step. On the old editor, the editors built these out of several dispatches —
7
+ * Why one step. On the old library, the editors built these out of several dispatches —
8
8
  * the storefront's delete was three (remove, reset the inspector, clear the
9
- * selection), its cross-slot move three undo steps, its paste two — and the old editor's
9
+ * selection), its cross-slot move three undo steps, its paste two — and the old library's
10
10
  * selection is a POSITION, so after a delete it quietly pointed at whatever slid
11
11
  * into the gap. Here each operation is computed whole, on `efficient-easel/data`,
12
12
  * and the host commits it in one write (see ./useNodeOps). One action, one undo.
@@ -145,9 +145,9 @@ interface ItemSelector {
145
145
  zone?: string;
146
146
  index: number;
147
147
  }
148
- /** A node selection as the old editor's `itemSelector`; `null` for nothing or a slot. */
148
+ /** A node selection as the old library's `itemSelector`; `null` for nothing or a slot. */
149
149
  declare function toItemSelector(data: Data, config: DataConfig, selection: NodeSelection): ItemSelector | null;
150
- /** The old editor's `itemSelector` as a node selection; `null` when it points at nothing. */
150
+ /** The old library's `itemSelector` as a node selection; `null` when it points at nothing. */
151
151
  declare function fromItemSelector(data: Data, config: DataConfig, selector: ItemSelector | null | undefined): NodeSelection;
152
152
 
153
153
  export { type AfterRemove as A, type ItemSelector as I, type NodeSelection as N, type PassThrough as P, type StepBounds as S, type Planned as a, clickPick as b, canStep as c, clickPickPart as d, nodeChain as e, fromItemSelector as f, planDuplicate as g, planMove as h, planPaste as i, planRemove as j, planRestore as k, planSetProps as l, planStep as m, nextInChain as n, planSwap as o, parentStep as p, toItemSelector as t };
@@ -1,17 +1,17 @@
1
1
  import { CSSProperties, ReactNode, ReactElement } from 'react';
2
- import { B as BlockShape, D as Data } from '../types-DlQIM1YO.js';
2
+ import { B as BlockShape, D as Data } from '../types-Dq180WRV.js';
3
3
 
4
4
  /**
5
5
  * efficient-easel/render — draw a saved document, the published way.
6
6
  *
7
- * Step 1.2 of the engine that replaces the old editor (blueprint "From The Ground
7
+ * Step 1.2 of the engine that replaces the old library (blueprint "From The Ground
8
8
  * Up For Efficient Editor", 2026-09-29). The published storefront draws every
9
- * page through the old editor's `<Render>` today (efficient-storefront `lib/document/render-client.tsx`
9
+ * page through the old library's `<Render>` today (efficient-storefront `lib/document/render-client.tsx`
10
10
  * and `components/PublishedFooter.tsx`); this is the drop-in for it: the same
11
11
  * config, the same document, THE SAME HTML — `tests/render-document-parity.test.tsx`
12
12
  * renders both and compares the markup byte for byte.
13
13
  *
14
- * WHAT IS DIFFERENT IS WHAT IT IS MADE OF. The old editor's `<Render>` reaches the
14
+ * WHAT IS DIFFERENT IS WHAT IT IS MADE OF. The old library's `<Render>` reaches the
15
15
  * document through a React context and builds each block's props in hooks, so
16
16
  * it can only run as a client component. This is a plain function: no hook, no
17
17
  * context, no state, no browser global. It runs in a server component, in a
@@ -20,12 +20,12 @@ import { B as BlockShape, D as Data } from '../types-DlQIM1YO.js';
20
20
  * the blocks (the storefront's are client components today; blueprint default
21
21
  * #4 keeps that wrapper until they are moved one by one).
22
22
  *
23
- * THE BLOCK AUTHORING SHAPE IS THE OLD EDITOR'S (blueprint default #3), so an app hands
23
+ * THE BLOCK AUTHORING SHAPE IS THE OLD LIBRARY'S (blueprint default #3), so an app hands
24
24
  * in the config it has:
25
25
  *
26
26
  * - a block's `render` receives its props, plus `editor`, plus each SLOT as a
27
27
  * component: `render: ({ content: Content }) => <Content className="…" />`.
28
- * A slot draws `<div className style>` around its blocks, as the old editor's does,
28
+ * A slot draws `<div className style>` around its blocks, as the old library's does,
29
29
  * and says how many it draws in `Content.blockCount` (the editor's
30
30
  * canvas gives the same number);
31
31
  * - the root's `render` receives the root props, `editor`, `title` (`''` when
@@ -36,10 +36,10 @@ import { B as BlockShape, D as Data } from '../types-DlQIM1YO.js';
36
36
  * because they are good design:
37
37
  *
38
38
  * 1. The top-level list is wrapped in one plain `<div>`, root render or not.
39
- * (the old editor's own SERVER `<Render>` uses a fragment there instead, so the old editor's
39
+ * (the old library's own SERVER `<Render>` uses a fragment there instead, so the old library's
40
40
  * two renderers disagree; the client one is what is published.) A host
41
41
  * that needs to reach that wrapper from its stylesheet passes `className`
42
- * (0.95.0); left out, the `<div>` is as bare as the old editor's.
42
+ * (0.95.0); left out, the `<div>` is as bare as the old library's.
43
43
  * 2. `editor` differs by level. The root gets
44
44
  * `{ renderDropZone, isEditing: false, dragRef: null, metadata }`; a
45
45
  * top-level block gets `{ renderDropZone, metadata: { ...metadata,
@@ -49,7 +49,7 @@ import { B as BlockShape, D as Data } from '../types-DlQIM1YO.js';
49
49
  *
50
50
  * `renderDropZone` draws a legacy `zones` entry. Neither editor writes zones,
51
51
  * so it draws an empty `<div>` in practice; it exists so a block that still
52
- * calls it gets what the old editor gave it.
52
+ * calls it gets what the old library gave it.
53
53
  *
54
54
  * LEAF DISCIPLINE: imports React's JSX runtime and this package's own data
55
55
  * layer, nothing else (`tests/render-leaf-safety.test.ts`).
@@ -97,10 +97,10 @@ interface RenderConfig {
97
97
  }
98
98
  /**
99
99
  * What `Render` draws: a saved document, as loosely as the renderer reads it.
100
- * `root.props` is OPTIONAL here, as it is in the old editor's own `Data` type — a root
101
- * that holds its props directly (the older format) is drawn the way the old editor draws
100
+ * `root.props` is OPTIONAL here, as it is in the old library's own `Data` type — a root
101
+ * that holds its props directly (the older format) is drawn the way the old library draws
102
102
  * it, and a document with no root or no content draws an empty page. So a
103
- * old-editor-typed document is passed as it is, with no cast.
103
+ * old-library-typed document is passed as it is, with no cast.
104
104
  */
105
105
  interface RenderData {
106
106
  root?: {
@@ -117,7 +117,7 @@ interface RenderProps {
117
117
  /**
118
118
  * A class for the `<div>` around the top-level list — that wrapper, and
119
119
  * nothing else. OPT-IN: left out (or empty) the wrapper carries no attribute
120
- * at all, and the markup is the old editor's, byte for byte.
120
+ * at all, and the markup is the old library's, byte for byte.
121
121
  */
122
122
  className?: string;
123
123
  }
@@ -1,4 +1,4 @@
1
- import{isRecord as t,fieldsFrom as n,slotLocations as e,setIn as o,drawnBlockCount as r,isNode as a}from"../chunk-L55YIXDC.js";import{jsx as i}from"react/jsx-runtime";function c({config:e,data:o,metadata:r={},className:a}){const c=Array.isArray(o?.content)?o.content:[],d=t(o?.root)?o.root:{},m="props"in d?d.props:d,f={config:e,content:c,zones:t(o?.zones)?o.zones:{},metadata:r},p={renderDropZone:u(f,"root"),isEditing:!1,dragRef:null,metadata:r},g={...m,editor:p,title:m?.title||"",editMode:!1,id:"page-root"},y=s(f,n(e.root),g),h=c.map(t=>l(f,t)),z=/* @__PURE__ */i("div",a?{className:a,children:h}:{children:h}),N=e.root?.render;return N?/* @__PURE__ */i(N,{...y,children:z}):z}function s(t,n,r){let a=r;for(const i of e(r,n))a=o(a,i.segments,d(t,i.content));return a}function d(t,e){return Object.assign(function(o={}){/* @__PURE__ */
1
+ import{isRecord as t,fieldsFrom as n,slotLocations as e,setIn as o,drawnBlockCount as r,isNode as a}from"../chunk-KXM6YRG2.js";import{jsx as i}from"react/jsx-runtime";function c({config:e,data:o,metadata:r={},className:a}){const c=Array.isArray(o?.content)?o.content:[],d=t(o?.root)?o.root:{},m="props"in d?d.props:d,f={config:e,content:c,zones:t(o?.zones)?o.zones:{},metadata:r},p={renderDropZone:u(f,"root"),isEditing:!1,dragRef:null,metadata:r},g={...m,editor:p,title:m?.title||"",editMode:!1,id:"page-root"},y=s(f,n(e.root),g),h=c.map(t=>l(f,t)),z=/* @__PURE__ */i("div",a?{className:a,children:h}:{children:h}),N=e.root?.render;return N?/* @__PURE__ */i(N,{...y,children:z}):z}function s(t,n,r){let a=r;for(const i of e(r,n))a=o(a,i.segments,d(t,i.content));return a}function d(t,e){return Object.assign(function(o={}){/* @__PURE__ */
2
2
  return i("div",{className:o.className,style:o.style,children:e.map(e=>function(t,e){if(!a(e))return null;const o=t.config.components[e.type];if(!o)return null;const r=s(t,n(o),e.props),c=o.render,d={...r.editor,metadata:t.metadata||{}};/* @__PURE__ */
3
3
  return i(c,{...r,editor:d},r.id)}(t,e))})},{blockCount:r(e,t.config.components)})}function l(t,e){if(!a(e))return null;const o=t.config.components[e.type];if(!o)return null;const r=s(t,n(o),e.props),c=o.render,d={...r.editor,renderDropZone:u(t,r.id),metadata:{...t.metadata,...o.metadata}};/* @__PURE__ */
4
4
  return i(c,{...r,editor:d},r.id)}function u(t,n){return function({zone:e,className:o,style:r}){const a=`${n}:${e}`,c="root:default-zone"===a?t.content:t.zones[a],s=Array.isArray(c)?c:[];/* @__PURE__ */
@@ -1,20 +1,20 @@
1
- import { a as DataConfig } from './types-DlQIM1YO.js';
1
+ import { a as DataConfig } from './types-Dq180WRV.js';
2
2
 
3
3
  /**
4
- * A BLOCK'S `resolveData`, RUN AS THE OLD EDITOR RAN IT — `resolveComponentData` in the old editor
4
+ * A BLOCK'S `resolveData`, RUN AS THE OLD LIBRARY RAN IT — `resolveComponentData` in the old library
5
5
  * 0.20 (`lib/resolve-component-data.ts`), because the documents both editors
6
6
  * hold were resolved by it and must go on resolving the same way.
7
7
  *
8
8
  * - It runs only when the item differs from the last one resolved for that id
9
9
  * (deep-equal), unless the trigger is "force"; the last answer is reused.
10
10
  * - `changed` names every prop of the new item with whether it differs from
11
- * the last one resolved (`changedProps`, the old editor's `getChanged`).
11
+ * the last one resolved (`changedProps`, the old library's `getChanged`).
12
12
  * - The block's own `metadata` is spread over the host's.
13
13
  * - The answer's `props` are spread OVER the item's, and its `readOnly` kept
14
14
  * when it has any key.
15
15
  * - Then every slot's children are resolved the same way, in order.
16
16
  *
17
- * What differs from the old editor is only where the memory lives: the old editor kept the last
17
+ * What differs from the old library is only where the memory lives: the old library kept the last
18
18
  * change per id in a module-level object shared by every editor on the page;
19
19
  * here the host hands in its own (`createResolveCache`), one per editor.
20
20
  *
@@ -43,7 +43,7 @@ interface ResolveOptions {
43
43
  }
44
44
  /** Deep equality of JSON-shaped values, as `fast-deep-equal` answers it for them. */
45
45
  declare function deepEqual(a: unknown, b: unknown): boolean;
46
- /** Every prop of `next`, and whether it differs from `last` (the old editor's `getChanged`). */
46
+ /** Every prop of `next`, and whether it differs from `last` (the old library's `getChanged`). */
47
47
  declare function changedProps(next: ResolvableItem | null | undefined, last: ResolvableItem | null | undefined): Record<string, boolean>;
48
48
  /**
49
49
  * Resolve one item and everything in its slots. `didChange` says whether the
@@ -1 +1 @@
1
- export{AddBlockRow as default}from"../../chunk-YC6KLSW3.js";import"../../chunk-RUQOIQWI.js";import"../../chunk-SJMS247S.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-EB6NI2VK.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-WJSEWAWK.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-YHFKWV7H.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-IWCKVZHS.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-BSHIQIZC.js";import"../../chunk-FM6JO4WF.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-MZ5GSSZ3.js";import"../../chunk-KRL3IUV3.js";import"../../chunk-Y2T3JX7K.js";import"../../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-GHBK7BKL.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-K7BTCBWD.js";import"../../chunk-L55YIXDC.js";
1
+ export{AddBlockRow as default}from"../../chunk-HLMQ34GP.js";import"../../chunk-RUQOIQWI.js";import"../../chunk-GXRS52JD.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-IYHO4XQX.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-KXTXYINN.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-MXECWHRJ.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-AGWKB77Q.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-RPMSET77.js";import"../../chunk-FM6JO4WF.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-HZSZT3BE.js";import"../../chunk-KRL3IUV3.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-JACEEVVF.js";import"../../chunk-S3DUFDQ6.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-6NJHYXJM.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-YU3WHLGI.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-TGZCD6IP.js";import"../../chunk-KXM6YRG2.js";
@@ -1,10 +1,10 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { D as DragSession } from '../../session-CrWwDt7Z.js';
3
+ import { D as DragSession } from '../../session-EsjORLQ0.js';
4
4
  import { SectionTemplate } from '../lib/section-template-types.js';
5
5
  import { SharedSection } from '../lib/shared-section-types.js';
6
6
  import { BlockChoice } from '../lib/document/block-choice.js';
7
- import '../../types-DlQIM1YO.js';
7
+ import '../../types-Dq180WRV.js';
8
8
  import '../lib/document/content-tree.js';
9
9
 
10
10
  /** What a tile adds, parsed back out of its key. */
@@ -1 +1 @@
1
- export{blockKey,AddSidePanel as default,sectionKey,sharedKey,templateKey}from"../../chunk-TXR7GC5A.js";import"../../chunk-VKPOH6MK.js";import"../../chunk-CPL43ZLJ.js";import"../../chunk-N7E6264U.js";import"../../chunk-N3MJOHAG.js";import"../../chunk-SINAM2IT.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-RUQOIQWI.js";import"../../chunk-SJMS247S.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-EB6NI2VK.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-WJSEWAWK.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-YHFKWV7H.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-IWCKVZHS.js";import"../../chunk-ZKY45F5G.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-BSHIQIZC.js";import"../../chunk-FM6JO4WF.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-ZG6PVMC3.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-AJSDWWJW.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MZ5GSSZ3.js";import"../../chunk-KRL3IUV3.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-JACEEVVF.js";import"../../chunk-S3DUFDQ6.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-CUZQ2HMA.js";import"../../chunk-TQ5Y6S2X.js";import"../../chunk-3S5N4HLJ.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-GHBK7BKL.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-K7BTCBWD.js";import"../../chunk-L55YIXDC.js";
1
+ export{blockKey,AddSidePanel as default,sectionKey,sharedKey,templateKey}from"../../chunk-FF54HWSE.js";import"../../chunk-VKPOH6MK.js";import"../../chunk-IZGFJWH4.js";import"../../chunk-N7E6264U.js";import"../../chunk-N3MJOHAG.js";import"../../chunk-SINAM2IT.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-RUQOIQWI.js";import"../../chunk-GXRS52JD.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-IYHO4XQX.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-KXTXYINN.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-MXECWHRJ.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-WHS6Y55E.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-ZEH6QLBH.js";import"../../chunk-AGWKB77Q.js";import"../../chunk-ZKY45F5G.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-RPMSET77.js";import"../../chunk-FM6JO4WF.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-ZG6PVMC3.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-AJSDWWJW.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-HZSZT3BE.js";import"../../chunk-KRL3IUV3.js";import"../../chunk-Y2T3JX7K.js";import"../../chunk-KFWNGPW3.js";import"../../chunk-JACEEVVF.js";import"../../chunk-S3DUFDQ6.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-LN43DP2A.js";import"../../chunk-TQ5Y6S2X.js";import"../../chunk-6NJHYXJM.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-YU3WHLGI.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-TGZCD6IP.js";import"../../chunk-KXM6YRG2.js";
@@ -1,26 +1,26 @@
1
1
  import * as react from 'react';
2
2
  import { E as EaselContextMenuItem } from '../../types-BbOBWXMP.js';
3
- import { P as Place } from '../../types-DlQIM1YO.js';
4
- import { N as NodeClipboard, C as ClipboardEntry, a as NodeOps } from '../../useNodeOps-C_nisDHh.js';
3
+ import { P as Place } from '../../types-Dq180WRV.js';
4
+ import { N as NodeClipboard, C as ClipboardEntry, a as NodeOps } from '../../useNodeOps-igxrnEhq.js';
5
5
  import { N as NodeMenuWords } from '../../words-DMG4dYq2.js';
6
6
  import { StyleSnapshot } from '../../style-clipboard/index.js';
7
7
  import { S as StyleClipboardWords } from '../../words-CnnHb9jo.js';
8
8
  import { ScreenMenuWords } from '../words.js';
9
- import { C as CanvasTarget } from '../../watch-D0bNZRtU.js';
9
+ import { C as CanvasTarget } from '../../watch-Unf6SfUf.js';
10
10
  import { ScreenMenuRows } from '../lib/screen-parts.js';
11
11
  import { EaselSession } from '../lib/session.js';
12
- import '../../plan-CRUh2kVK.js';
12
+ import '../../plan-D0DgSLnY.js';
13
13
  import '../../blocks/index.js';
14
- import '../../types-DFxBChE3.js';
14
+ import '../../types-BljCVdzR.js';
15
15
  import '../../data/index.js';
16
- import '../../resolve-AJ6WF4EL.js';
16
+ import '../../resolve-Bz4mszpL.js';
17
17
  import '../../types-B3iSHX-w.js';
18
18
  import '../../types-Cy7rdmXt.js';
19
19
  import '../../wordFit-7XpmhcaW.js';
20
20
  import '../../edit-lock/index.js';
21
21
  import '../../panelWidths-DgQXiPXU.js';
22
- import '../../CanvasDragLayer-B6Yn9S8T.js';
23
- import '../../session-CrWwDt7Z.js';
22
+ import '../../CanvasDragLayer-NZpaX6aq.js';
23
+ import '../../session-EsjORLQ0.js';
24
24
  import '../../words-SD4neL0n.js';
25
25
  import '../../types-DBy3L69b.js';
26
26
  import 'efficient-shell/ui';
@@ -30,7 +30,7 @@ import '../lib/section-template-types.js';
30
30
  import '../lib/document/content-tree.js';
31
31
  import '../lib/shared-section-types.js';
32
32
  import '../lib/document/block-choice.js';
33
- import '../../ScreenDocumentContext-BIK3uWtF.js';
33
+ import '../../ScreenDocumentContext-BDLUYzlM.js';
34
34
  import '../lib/document-contract.js';
35
35
  import '../lib/document-switch.js';
36
36
  import '../../engine-CvXpFE86.js';
@@ -158,15 +158,12 @@ type NodeMenuHost = {
158
158
  back: () => void;
159
159
  forward: () => void;
160
160
  };
161
- /** Put the panel on the page's own settings. */
162
- openPageSettings: () => void;
163
- /**
164
- * What the page's menu calls that row (0.106.0): the screen's word for the
165
- * document's own settings, `EaselStrings.screen.pageSettings` — the Layers
166
- * tree's first row says it too (the campaign designer's "Email styles").
167
- * Absent: "Page settings", as the row always said.
168
- */
169
- pageSettingsLabel?: string;
161
+ /** Take the merchant to THIS document's own styles (the layer's
162
+ * `ScreenBridges.openPageStyles`). Absent: the menu has no such row. */
163
+ openPageStyles?: () => void;
164
+ /** What the page's menu calls that row: `EaselStrings.screen.pageStyles`.
165
+ * Absent: "This page". */
166
+ pageStylesLabel?: string;
170
167
  /**
171
168
  * THE MENU'S WORDS in the host's language (3.1.0): a node's rows
172
169
  * (`EaselStrings.menu`), Copy style and Paste style (`styleClipboard`), and
@@ -316,7 +313,7 @@ type NodeMenuHost = {
316
313
  * A top-level node goes through `selectIndex` (inspector mode, the Locations
317
314
  * focus reset, scroll the preview to it); a slot child goes through
318
315
  * `selectChild`, which for a SLIDER parent must move the carousel to that
319
- * slide BEFORE selecting, or the old editor measures its overlay on an off-screen slide
316
+ * slide BEFORE selecting, or the old library measures its overlay on an off-screen slide
320
317
  * and the canvas grows a horizontal scrollbar. Neither is restated here. The
321
318
  * `parentType` is what the slider question is asked of, so the chain hands it
322
319
  * down rather than the chrome looking it up a second time.
@@ -569,7 +566,7 @@ declare function textMenuItems(host: NodeMenuHost, el: TextEl): EaselContextMenu
569
566
  * render. Per-row handlers are deliberately gone — see {@link onTreeContextMenu}.
570
567
  *
571
568
  * `canvas` is the editor's canvas frame (`efficient-easel/canvas`
572
- * `useCanvasFrame`, found once by the chrome) — null until the old editor has drawn into
569
+ * `useCanvasFrame`, found once by the chrome) — null until the old library has drawn into
573
570
  * it. The canvas half below listens on it.
574
571
  */
575
572
  declare function useNodeContextMenu(host: NodeMenuHost, canvas: CanvasTarget | null): {
@@ -1 +1 @@
1
- export{EASEL_NODE_CLIPBOARD,ancestorChain,nodeClipboardOf,nodeClipboardRules,nodeMenuItems,nodeShortcut,pageMenuItems,pastePlace,runNodeShortcut,textMenuItems,useNodeClipboard,useNodeContextMenu}from"../../chunk-4LGROS5L.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-EB6NI2VK.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-ZKY45F5G.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-P5VYGWYO.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-BSHIQIZC.js";import"../../chunk-GHBK7BKL.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-K7BTCBWD.js";import"../../chunk-L55YIXDC.js";
1
+ export{EASEL_NODE_CLIPBOARD,ancestorChain,nodeClipboardOf,nodeClipboardRules,nodeMenuItems,nodeShortcut,pageMenuItems,pastePlace,runNodeShortcut,textMenuItems,useNodeClipboard,useNodeContextMenu}from"../../chunk-AT4DDMJS.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-IYHO4XQX.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-TCAAOYQY.js";import"../../chunk-ZKY45F5G.js";import"../../chunk-FIVU2COQ.js";import"../../chunk-P5VYGWYO.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-RPMSET77.js";import"../../chunk-YU3WHLGI.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-TGZCD6IP.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{PageEditGuardNotices as default}from"../../chunk-ZOSEBPAI.js";import"../../chunk-BTDI7JAA.js";import"../../chunk-77IWWW6X.js";import"../../chunk-ERR437B5.js";import"../../chunk-UNVKPVZW.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-BIK3AO2V.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-EB6NI2VK.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-ZG6PVMC3.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-AJSDWWJW.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MFIRYGHW.js";
1
+ export{PageEditGuardNotices as default}from"../../chunk-GKG3M5QK.js";import"../../chunk-A6ZP5II4.js";import"../../chunk-77IWWW6X.js";import"../../chunk-ERR437B5.js";import"../../chunk-UNVKPVZW.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-BIK3AO2V.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-FHCKFOCD.js";import"../../chunk-YM4UEGBV.js";import"../../chunk-SNF5764Q.js";import"../../chunk-MQA7OFRA.js";import"../../chunk-IYHO4XQX.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-ZG6PVMC3.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-AJSDWWJW.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MFIRYGHW.js";
@@ -6,7 +6,7 @@ import { ViewTier } from '../lib/content/view-tiers.js';
6
6
  *
7
7
  * The storefront editor chrome (ScreenChrome) owns a Desktop / Tablet
8
8
  * / Mobile switcher in its top bar (local `device` state, rendered at logical
9
- * widths 2000 / 800 / 390). That switcher — NOT the old editor's built-in viewports — is
9
+ * widths 2000 / 800 / 390). That switcher — NOT the old library's built-in viewports — is
10
10
  * what resizes the preview iframe, so viewport-aware inspector fields must read
11
11
  * IT to know which view the merchant is editing. The chrome lends its live
12
12
  * `device` to the website layer, which provides it here
@@ -13,7 +13,7 @@ import * as react from 'react';
13
13
  * than listed.
14
14
  *
15
15
  * That is also why it is a fourth context and not a rewrite of the three: their
16
- * regions carry NO the old editor fields at all (a HeroSingle's copy and a Hero's ticker
16
+ * regions carry NO old-library fields at all (a HeroSingle's copy and a Hero's ticker
17
17
  * items are props with bespoke panels and no field declarations), so a
18
18
  * field-derived bridge cannot see them and the two mechanisms provably never
19
19
  * claim the same element. See the card report for why retiring them is its own
@@ -22,7 +22,7 @@ import * as react from 'react';
22
22
  * The payload is ONE string — `"<nodeId>::<propKey>"`, or `"<nodeId>::"` for the
23
23
  * whole section — so the shared {@link createPreviewSelectionContext} factory
24
24
  * fits unchanged; `encodePartId`/`decodePartId` own that spelling. Provider sits
25
- * ABOVE the old editor root so its value reaches BOTH the chrome (which registers the select
25
+ * ABOVE the old library's root so its value reaches BOTH the chrome (which registers the select
26
26
  * handler and mirrors the open panel back) AND the portaled preview iframe.
27
27
  */
28
28
  declare const PreviewPartsProvider: ({ children }: {
@@ -9,14 +9,14 @@ import '../../wordFit-7XpmhcaW.js';
9
9
  import '../../edit-lock/index.js';
10
10
  import '../../panelWidths-DgQXiPXU.js';
11
11
  import '../../blocks/index.js';
12
- import '../../types-DFxBChE3.js';
12
+ import '../../types-BljCVdzR.js';
13
13
  import '../../data/index.js';
14
- import '../../types-DlQIM1YO.js';
15
- import '../../resolve-AJ6WF4EL.js';
16
- import '../../plan-CRUh2kVK.js';
17
- import '../../watch-D0bNZRtU.js';
18
- import '../../CanvasDragLayer-B6Yn9S8T.js';
19
- import '../../session-CrWwDt7Z.js';
14
+ import '../../types-Dq180WRV.js';
15
+ import '../../resolve-Bz4mszpL.js';
16
+ import '../../plan-D0DgSLnY.js';
17
+ import '../../watch-Unf6SfUf.js';
18
+ import '../../CanvasDragLayer-NZpaX6aq.js';
19
+ import '../../session-EsjORLQ0.js';
20
20
  import '../../words-SD4neL0n.js';
21
21
  import '../../types-BbOBWXMP.js';
22
22
  import '../../style-clipboard/index.js';
@@ -29,7 +29,7 @@ import '../lib/section-template-types.js';
29
29
  import '../lib/document/content-tree.js';
30
30
  import '../lib/shared-section-types.js';
31
31
  import '../lib/document/block-choice.js';
32
- import '../../ScreenDocumentContext-BIK3uWtF.js';
32
+ import '../../ScreenDocumentContext-BDLUYzlM.js';
33
33
  import '../lib/document-contract.js';
34
34
  import '../lib/document-switch.js';
35
35
  import '../lib/admin-bridge.js';