efficient-easel 14.2.0 → 16.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 (82) hide show
  1. package/README.md +5 -4
  2. package/dist/{CanvasDragLayer-CLb7j-CZ.d.ts → CanvasDragLayer-dZCPbQCP.d.ts} +1 -1
  3. package/dist/canvas/index.d.ts +21 -1
  4. package/dist/canvas/index.js +1 -1
  5. package/dist/{chunk-NY7HHUGB.js → chunk-23VM4PMV.js} +2 -2
  6. package/dist/{chunk-44QA42OJ.js → chunk-63ZDVAVE.js} +1 -1
  7. package/dist/chunk-BALFHI3G.js +2 -0
  8. package/dist/{chunk-CMXK3JT3.js → chunk-GGC72GS4.js} +1 -1
  9. package/dist/{chunk-CY52PUMZ.js → chunk-HM7S7H5H.js} +1 -1
  10. package/dist/{chunk-XGW6NWLC.js → chunk-JD5HXBEX.js} +1 -1
  11. package/dist/{chunk-AYWN5NRH.js → chunk-KAML3KQH.js} +1 -1
  12. package/dist/{chunk-YKJ3RIMT.js → chunk-KFPCMMRK.js} +1 -1
  13. package/dist/chunk-N2B32EZB.js +5 -0
  14. package/dist/{chunk-TR4APEJZ.js → chunk-N2BVA6TS.js} +1 -1
  15. package/dist/chunk-N3LYD2LK.js +21 -0
  16. package/dist/chunk-OFBZOI6W.js +1 -0
  17. package/dist/{chunk-F3A7SXSV.js → chunk-OK7OH2ZN.js} +1 -1
  18. package/dist/{chunk-35VMTYPH.js → chunk-P3XVBLZ6.js} +4 -4
  19. package/dist/chunk-POSLNRTO.js +18 -0
  20. package/dist/chunk-PQRYAW2G.js +5 -0
  21. package/dist/chunk-RQBIFINA.js +57 -0
  22. package/dist/chunk-SMM3ST7A.js +13 -0
  23. package/dist/chunk-U6LJ5UKD.js +6 -0
  24. package/dist/chunk-UVQR7W6I.js +1 -0
  25. package/dist/chunk-WXFZD7WC.js +1 -0
  26. package/dist/chunk-X4T6JT3M.js +1 -0
  27. package/dist/copy/copy.css +9 -9
  28. package/dist/copy/index.d.ts +2 -29
  29. package/dist/copy/index.js +12 -13
  30. package/dist/drag/drag.css +22 -0
  31. package/dist/drag/index.d.ts +2 -2
  32. package/dist/drag/index.js +1 -1
  33. package/dist/easel/easel.css +26 -0
  34. package/dist/easel/index.js +1 -1
  35. package/dist/fields/index.js +1 -1
  36. package/dist/menu/index.d.ts +22 -27
  37. package/dist/menu/index.js +1 -1
  38. package/dist/menu/menu.css +7 -6
  39. package/dist/pick/index.d.ts +5 -70
  40. package/dist/pick/index.js +1 -3
  41. package/dist/pick/pick.css +1 -21
  42. package/dist/screen/components/AddBlockRow.js +1 -1
  43. package/dist/screen/components/AddSidePanel.js +1 -1
  44. package/dist/screen/components/MediaSidePanel.js +1 -1
  45. package/dist/screen/components/NodeContextMenu.d.ts +3 -3
  46. package/dist/screen/components/NodeContextMenu.js +1 -1
  47. package/dist/screen/components/SaveControls.d.ts +2 -2
  48. package/dist/screen/components/ScreenChrome.js +1 -1
  49. package/dist/screen/components/ScreenMount.d.ts +2 -2
  50. package/dist/screen/components/ScreenMount.js +1 -1
  51. package/dist/screen/components/ScreenStoreProvider.d.ts +2 -2
  52. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  53. package/dist/screen/components/SectionScreenShell.js +15 -15
  54. package/dist/screen/components/usePartBridge.d.ts +2 -2
  55. package/dist/screen/components/usePartBridge.js +1 -1
  56. package/dist/screen/index.d.ts +2 -2
  57. package/dist/screen/index.js +1 -1
  58. package/dist/screen/lib/key-scope.js +1 -1
  59. package/dist/screen/lib/puck/style-clipboard.d.ts +2 -2
  60. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  61. package/dist/screen/lib/screen-parts.d.ts +2 -2
  62. package/dist/screen/lib/screen-parts.js +1 -1
  63. package/dist/strings/catalogue.d.ts +2 -2
  64. package/dist/strings/catalogue.js +1 -1
  65. package/dist/strings/index.d.ts +2 -2
  66. package/dist/strings/index.js +1 -1
  67. package/dist/text-styles/index.js +36 -36
  68. package/dist/{words-BDignMl_.d.ts → words-CvwYvkJm.d.ts} +2 -0
  69. package/dist/{words-is_Vy6hn.d.ts → words-DWvCJXwR.d.ts} +2 -37
  70. package/package.json +3 -3
  71. package/dist/chunk-5XUMLKQF.js +0 -6
  72. package/dist/chunk-643PVCEG.js +0 -1
  73. package/dist/chunk-BXMXTO36.js +0 -1
  74. package/dist/chunk-CSGTPJTY.js +0 -5
  75. package/dist/chunk-D46OYLJR.js +0 -5
  76. package/dist/chunk-EA2HTX37.js +0 -5
  77. package/dist/chunk-ILXP5VX5.js +0 -1
  78. package/dist/chunk-LPM2SCM4.js +0 -13
  79. package/dist/chunk-NW4LJ4G4.js +0 -1
  80. package/dist/chunk-QFVRMARS.js +0 -18
  81. package/dist/chunk-SO5OLDH7.js +0 -21
  82. package/dist/chunk-XUAKHY4T.js +0 -57
@@ -84,6 +84,28 @@
84
84
  pointer-events: none;
85
85
  }
86
86
 
87
+ /* "DOUBLE-CLICK TO EDIT" (Lewis 2026-10-20, mockup v4 decision a): on the
88
+ selection's top-right corner, across its line (the layer hands it the
89
+ corner; it hangs left of it and is centred on the line); `.is-below` hangs
90
+ it under the bottom-right corner instead. Its surface is the shell's
91
+ (`solidSurfaceStyle`, inline); the size and words are the tooltip
92
+ bubble's. It takes no pointer: a click there is the block's. */
93
+ .es-canvas-hint {
94
+ position: absolute;
95
+ transform: translate(calc(-100% - var(--es-space-8, 8px)), -50%);
96
+ box-sizing: border-box;
97
+ padding: var(--es-space-4, 4px) var(--es-space-8, 8px);
98
+ border-radius: var(--radius-md);
99
+ font: 400 var(--text-xs, 12px) / 1.4 var(--es-font);
100
+ color: var(--es-text);
101
+ white-space: nowrap;
102
+ pointer-events: none;
103
+ z-index: 1;
104
+ }
105
+ .es-canvas-hint.is-below {
106
+ transform: translate(calc(-100% - var(--es-space-8, 8px)), var(--es-space-4, 4px));
107
+ }
108
+
87
109
  /* A ➕ INSERT POINT (./CanvasInsert, owner 2026-10-14): one look wherever the
88
110
  canvas offers to add — between sections and between, before and after the
89
111
  blocks of a box. The band only positions the chip and lets every other
@@ -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-CLb7j-CZ.js';
7
- import { D as DragWords } from '../words-BDignMl_.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-dZCPbQCP.js';
7
+ import { D as DragWords } from '../words-CvwYvkJm.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-QFVRMARS.js";import"../chunk-AYWN5NRH.js";export{AUTO_SCROLL_EDGE,AUTO_SCROLL_MAX_SPEED,autoScrollDelta,autoScrollSpeed,createDragSession,dropEffectFor,dropOnRow,frameScrollBox,gapToMoveIndex,isNoOpDrop,scrollBoxOf,scrollParent,startAutoScroll,stepGap,useTreeDrag}from"../chunk-67GNT6PF.js";import"../chunk-P2VEMZH5.js";import"../chunk-ILXP5VX5.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
1
+ export{AddPanel,CanvasDragLayer,CanvasInsert,EMPTY_MEASURE,HANDLE_GRACE_MS,canvasTarget,contains,gapInZone,gapLine,insertSeams,measureCanvas,pickSource,seamsBetween,sourcesAt}from"../chunk-POSLNRTO.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-67GNT6PF.js";import"../chunk-P2VEMZH5.js";import"../chunk-X4T6JT3M.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
@@ -122,6 +122,32 @@
122
122
  outline: 2px solid var(--es-canvas-outline-colour);
123
123
  outline-offset: 4px;
124
124
  }
125
+ /* THE POINTER (Lewis 2026-10-20, mockup v4 decision c): on the canvas it is
126
+ the arrow — over words, and over the links and buttons the page drew, which
127
+ the canvas never follows — and the I-beam only inside the words being
128
+ typed. The grab hand is the handle's, in the layer over the canvas.
129
+ `!important`: the canvas holds the PAGE's own sheet, and its
130
+ `a { cursor: pointer }` and button rules would otherwise win. */
131
+ .es-canvas-content,
132
+ .es-canvas-content * {
133
+ cursor: default !important;
134
+ }
135
+ .es-canvas-content [data-es-typing],
136
+ .es-canvas-content [data-es-typing] * {
137
+ cursor: text !important;
138
+ }
139
+
140
+ /* A PLACEHOLDER FOR EMPTY WORDS (Lewis 2026-10-20, decision h): words the
141
+ page draws empty and marks `data-es-placeholder` (an Eyebrow switched on
142
+ before it has words) show that word, greyed, on the canvas only — drawn by
143
+ the canvas beside the words, never into them, so nothing is typed over it.
144
+ It goes with the first typed letter (`:empty`). */
145
+ .es-canvas-content [data-es-placeholder]:empty::before {
146
+ content: attr(data-es-placeholder);
147
+ opacity: 0.45;
148
+ pointer-events: none;
149
+ }
150
+
125
151
  /* …and the words themselves draw no focus ring: a contenteditable gets the
126
152
  browser's (`outline: auto`), which drew a second line inside the box on a
127
153
  page whose own sheet does not remove it (an email). */
@@ -1 +1 @@
1
- export{CanvasFrame,CanvasPassThroughContext,DEFAULT_UI,EaselCanvas,EaselProvider,EditDocument,bindUndoKeys,createEasel,createUseEasel,recordsByDefault,reduce,uiView,useEasel,useEaselApi,useEaselNodeOps,useSelectedFields,validSelection}from"../chunk-LPM2SCM4.js";import"../chunk-TBY3DFKS.js";import"../chunk-ECM5F6JJ.js";import"../chunk-YRLPFZW3.js";import"../chunk-NY7HHUGB.js";import"../chunk-B4JN227A.js";import"../chunk-MFIRYGHW.js";import"../chunk-ILXP5VX5.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
1
+ export{CanvasFrame,CanvasPassThroughContext,DEFAULT_UI,EaselCanvas,EaselProvider,EditDocument,bindUndoKeys,createEasel,createUseEasel,recordsByDefault,reduce,uiView,useEasel,useEaselApi,useEaselNodeOps,useSelectedFields,validSelection}from"../chunk-SMM3ST7A.js";import"../chunk-TBY3DFKS.js";import"../chunk-ECM5F6JJ.js";import"../chunk-YRLPFZW3.js";import"../chunk-23VM4PMV.js";import"../chunk-B4JN227A.js";import"../chunk-MFIRYGHW.js";import"../chunk-X4T6JT3M.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
@@ -1 +1 @@
1
- export{FieldText,Inspector,InspectorField,LinkPicker,ListField,bucketsOf,copyItem,insertAt,labelOf,moveTo,planFields,removeAt}from"../chunk-SO5OLDH7.js";export{fieldIsShown,showWhenOf,shownFields,withShowWhen}from"../chunk-BPXEFVSQ.js";export{FieldSlider}from"../chunk-XWFH2NHZ.js";import"../chunk-4JSBIW5H.js";import"../chunk-K56YDHYQ.js";import"../chunk-EA2HTX37.js";import"../chunk-RC25EGHD.js";import"../chunk-KFV7N2DJ.js";export{useResolvedFields}from"../chunk-YRLPFZW3.js";export{FieldNumber}from"../chunk-2XMHLXMA.js";export{FieldSelect,optionFor}from"../chunk-G3GWAP5R.js";import"../chunk-WRFD4EXD.js";import"../chunk-36LVP5WD.js";import"../chunk-MFIRYGHW.js";import"../chunk-67GNT6PF.js";import"../chunk-P2VEMZH5.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
1
+ export{FieldText,Inspector,InspectorField,LinkPicker,ListField,bucketsOf,copyItem,insertAt,labelOf,moveTo,planFields,removeAt}from"../chunk-N3LYD2LK.js";export{fieldIsShown,showWhenOf,shownFields,withShowWhen}from"../chunk-BPXEFVSQ.js";export{FieldSlider}from"../chunk-XWFH2NHZ.js";import"../chunk-4JSBIW5H.js";import"../chunk-K56YDHYQ.js";import"../chunk-BALFHI3G.js";import"../chunk-RC25EGHD.js";import"../chunk-KFV7N2DJ.js";export{useResolvedFields}from"../chunk-YRLPFZW3.js";export{FieldNumber}from"../chunk-2XMHLXMA.js";export{FieldSelect,optionFor}from"../chunk-G3GWAP5R.js";import"../chunk-WRFD4EXD.js";import"../chunk-36LVP5WD.js";import"../chunk-MFIRYGHW.js";import"../chunk-67GNT6PF.js";import"../chunk-P2VEMZH5.js";import"../chunk-KRXQM65X.js";import"../chunk-NKB3KVAB.js";
@@ -1,10 +1,12 @@
1
1
  import * as react from 'react';
2
2
  import { a as EaselContextMenuProps, E as EaselContextMenuItem } from '../types-BsyPh6EW.js';
3
3
  export { b as EaselContextMenuSkin } from '../types-BsyPh6EW.js';
4
+ import { DropdownMenuEntry } from 'efficient-shell/ui';
4
5
 
5
6
  /**
6
7
  * The editors' right-click menu: the shell's `ContextMenu` with an
7
- * {@link EaselMenuItems} list in it (harness UI-16, UI-24; efficient-easel#199).
8
+ * {@link easelMenuEntries} list as its `items` (harness UI-16, UI-24;
9
+ * efficient-easel#199, efficient-shell#580): the shell draws the rows.
8
10
  *
9
11
  * Up to 0.106.0 this drew a box of its own — moved here from the admin
10
12
  * portal's `RowContextMenu` (card 66400.d) with a skin, an edge flip, a
@@ -22,39 +24,32 @@ export { b as EaselContextMenuSkin } from '../types-BsyPh6EW.js';
22
24
  declare function EaselContextMenu({ x, y, items, onClose, owner, portalTo }: EaselContextMenuProps): react.JSX.Element | null;
23
25
 
24
26
  /**
25
- * The editors' item list, drawn with the shell's menu pieces (harness UI-16,
26
- * UI-24; efficient-easel#199 step 4).
27
+ * The editors' item list as the shell's menu entries (harness UI-16, UI-24;
28
+ * efficient-shell#580).
27
29
  *
28
30
  * What a menu OFFERS stays a list of {@link EaselContextMenuItem}s — the node
29
31
  * menu, the Layers rows, the canvas block and the list field build theirs from
30
- * registries, and so do the hosts — and this turns one into the shell's
31
- * `PopupMenuItem` / `PopupSubmenu` / `PopupMenuDivider` / `PopupMenuLabel`.
32
- * Render it inside the shell's `ContextMenu` (or `EaselContextMenu`, which
33
- * does that for you):
32
+ * registries, and so do the hosts. This turns one into the `DropdownMenuEntry`
33
+ * list that the shell's `ContextMenu` and `DropdownMenu` both take as `items`,
34
+ * and the shell draws every row with its one renderer:
34
35
  *
35
- * <ContextMenu {...menu.props}>
36
- * <EaselMenuItems items={items} onClose={menu.close} />
37
- * </ContextMenu>
36
+ * <ContextMenu {...menu.props} items={easelMenuEntries(items)} />
38
37
  *
39
- * `'—'` a `PopupMenuDivider`;
40
- * `header` a `PopupMenuLabel` (the first names the menu: `menuLabel`);
41
- * `children` a `PopupSubmenu` — the flyout the shell now has, which is
42
- * what retires UI-16's one exception (the email canvas block
43
- * menu's layer ladder). One level, as before: a child's own
44
- * `children` are not drawn;
45
- * otherwise a `PopupMenuItem`, `danger` kept.
38
+ * `'—'` a `divider`;
39
+ * `header` a `label` (the first names the menu: `menuLabel`);
40
+ * `children` a `submenu`. One level, as before: a child's own `children`
41
+ * are not offered. A flyout whose entries carry `checked` is a
42
+ * set of states (the layer a "Select layer" ladder is on), so
43
+ * its entries are `radio`s;
44
+ * otherwise an `item`, `danger` kept.
46
45
  *
47
- * A root item closes the menu after it acts (a `PopupMenuItem` at the root
48
- * leaves that to its caller); one in a submenu closes it through the shell.
49
- * `icon` and `shortcut` are drawn only when given, in the `es-menu-*` columns
50
- * `menu.css` lays out — no Tailwind class is written here (the hosts' Tailwind
51
- * does not scan this package); a flyout's tick is the shell's (`checked`).
46
+ * Choosing an entry closes the menu, then runs its `onClick` (the shell's
47
+ * order). Easel draws no row: only the glyph and the shortcut, which the
48
+ * shell's entries have no slot for, are laid out by `menu.css`
49
+ * (`es-menu-icon`, `es-menu-label`, `es-menu-shortcut`), and only when given.
52
50
  */
53
- declare function EaselMenuItems({ items, onClose }: {
54
- items: readonly EaselContextMenuItem[];
55
- onClose: () => void;
56
- }): react.JSX.Element;
51
+ declare function easelMenuEntries(items: readonly EaselContextMenuItem[]): DropdownMenuEntry[];
57
52
  /** The menu's accessible name: its first caption, as it has always been. */
58
53
  declare function menuLabel(items: readonly EaselContextMenuItem[]): string | undefined;
59
54
 
60
- export { EaselContextMenu, EaselContextMenuItem, EaselContextMenuProps, EaselMenuItems, menuLabel };
55
+ export { EaselContextMenu, EaselContextMenuItem, EaselContextMenuProps, easelMenuEntries, menuLabel };
@@ -1 +1 @@
1
- export{EaselContextMenu}from"../chunk-BXMXTO36.js";export{EaselMenuItems,menuLabel}from"../chunk-EA2HTX37.js";
1
+ export{EaselContextMenu}from"../chunk-WXFZD7WC.js";export{easelMenuEntries,menuLabel}from"../chunk-BALFHI3G.js";
@@ -1,17 +1,18 @@
1
1
  /*
2
2
  * efficient-easel/menu.css — the columns of an editor menu row.
3
3
  *
4
- * The box and the rows are efficient-shell's `ContextMenu` and `PopupMenu`
5
- * pieces since 1.0.0 (efficient-easel#199, harness UI-16 and UI-24), dressed
6
- * by `efficient-shell/ui.css`. A row from `EaselMenuItems` may carry three
7
- * things the shell's row has no slot for, and this sheet lays them out with
8
- * the shell's tokens and nothing else:
4
+ * The box and the rows are efficient-shell's: `ContextMenu` since 1.0.0
5
+ * (efficient-easel#199, harness UI-16 and UI-24), and its one entries renderer
6
+ * since efficient-shell#580, dressed by `efficient-shell/ui.css`. An entry
7
+ * from `easelMenuEntries` may carry a glyph and a shortcut the shell's entry
8
+ * has no slot of its own for, and this sheet lays them out with the shell's
9
+ * tokens and nothing else:
9
10
  *
10
11
  * .es-menu-icon the glyph before the label;
11
12
  * .es-menu-label the label, which takes the room between them;
12
13
  * .es-menu-shortcut the keyboard shortcut, right-aligned and quieter.
13
14
  *
14
- * A flyout's "you are here" tick is the shell's (`PopupMenuItem` `checked`,
15
+ * A flyout's "you are here" tick is the shell's (a `radio` entry,
15
16
  * efficient-shell 4.165.0), not a column of this sheet's.
16
17
  *
17
18
  * Import once, after the shell's sheet:
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { P as PickWords } from '../words-is_Vy6hn.js';
3
+ import { P as PickWords } from '../words-DWvCJXwR.js';
4
4
  export { Hsv, hexToHsv, hsvToHex } from 'efficient-shell/ui';
5
5
 
6
6
  /** One colour the site's theme names — offered first, by name. */
@@ -157,68 +157,6 @@ type ColourWindowProps = {
157
157
  */
158
158
  declare function ColourWindow({ value, onChange, label, theme, onClose, id, inherited, readOnly, words: _words, swatch: _swatch, dragWrites, }: ColourWindowProps): react.JSX.Element;
159
159
 
160
- type ImageBoxProps = {
161
- /** The file's URL, or `''` while the setting has none. */
162
- value: string;
163
- onChange: (url: string) => void;
164
- /** The setting's name — "Background image", "Logo image". */
165
- label: string;
166
- /**
167
- * How THIS APP opens its media library: resolves to the URL chosen, or
168
- * `null` when the person closes it without choosing. The admin opens its
169
- * media window, the shop asks the admin to, a test resolves a string — the
170
- * box does not know or care. Absent: the box shows the picture but offers no
171
- * way to change it.
172
- *
173
- * A file DROPPED on the box comes as `file`, already held to the box's kind
174
- * and to `maxSizeBytes` by the shell's intake: the app uploads it however it
175
- * uploads everything else, and resolves to its URL.
176
- */
177
- openLibrary?: (file?: File) => Promise<string | null>;
178
- kind?: 'image' | 'video';
179
- /** What the empty box says. Default "Choose an image" / "Choose a video". */
180
- placeholder?: string;
181
- readOnly?: boolean;
182
- /**
183
- * The picture's focus point, a CSS `object-position` string ("38% 64%").
184
- * Given with `onFocusChange`, the dot sits ON the picture (the shell's
185
- * `ImageFocusPoint`): one picture, never a second copy in a row of its own.
186
- * Ignored for a video.
187
- */
188
- focus?: string;
189
- onFocusChange?: (focus: string) => void;
190
- /** A dropped file larger than this is refused, with the reason announced. */
191
- maxSizeBytes?: number;
192
- /** Height of the filled picture in px. Default the shell's. */
193
- height?: number;
194
- /**
195
- * The box's own words in the host's language:
196
- * `useEaselStrings().pick.image` (0.95.0). Left out, English. A prop, not
197
- * the strings provider: the pickers import nothing outside their folder.
198
- */
199
- words?: PickWords['image'];
200
- };
201
- /**
202
- * ONE IMAGE BOX (blueprint step 4.6), and since 2026-10-19 ONE PICTURE FIELD:
203
- * the shell's `MediaUploadField` (efficient-shell #528, first published in
204
- * 7.61.0), not a box drawn here. Both editors draw their picture rows through
205
- * this — the website's `upload()` rows and the email designer's image field —
206
- * so both get the shell's look: the picture with its Change image bar and the
207
- * bin on hover (always shown on a screen with no hover), the drop zone, and,
208
- * given `focus` + `onFocusChange`, the focus dot on the picture itself
209
- * (Lewis 2026-10-19: "one picture, one dot").
210
- *
211
- * The library is the APP's. Every editor opens a different one — the admin's
212
- * media window with its product and storefront tabs, the shop's ask to the
213
- * admin, a future host's own — so the box is handed `openLibrary` and opens
214
- * nothing itself, never a native file dialog: the shell field's `onPick` is
215
- * always given, which is what keeps its own file dialog shut.
216
- *
217
- * What stays here is the box's own state: "Choosing" while the library is
218
- * open (the shell's busy cover), and the line that says a library failed.
219
- */
220
- declare function ImageBox({ value, onChange, label, openLibrary, kind, placeholder, readOnly, focus, onFocusChange, maxSizeBytes, height, words, }: ImageBoxProps): react.JSX.Element;
221
-
222
160
  /**
223
161
  * The colour maths the picker runs on — pure, no React, no DOM.
224
162
  *
@@ -234,8 +172,9 @@ declare function ImageBox({ value, onChange, label, openLibrary, kind, placehold
234
172
  *
235
173
  * What is still easel's own: the readout (`hexReadout`), the box's length, the
236
174
  * point maths the shell keeps private (`svFromPoint`), `hueFromPoint` (which
237
- * reaches 360 at the strip's end, where the shell's stops at 359) and
238
- * `mediaName` — exported names hosts already import.
175
+ * reaches 360 at the strip's end, where the shell's stops at 359) — exported
176
+ * names hosts already import. A media file's name is the shell's
177
+ * `mediaFileName`; easel's `mediaName`, which nothing read, went in 15.0.0.
239
178
  */
240
179
 
241
180
  declare const typedHex: (text: string) => string | null;
@@ -262,9 +201,5 @@ declare function hueFromPoint(x: number, box: {
262
201
  left: number;
263
202
  width: number;
264
203
  }): number;
265
- /** The last segment of a media URL, decoded and without its query — what a
266
- * merchant recognises a file by. An inline `data:` or `blob:` URL has no file
267
- * name, so it reads as none rather than as its own bytes. */
268
- declare function mediaName(url: string): string;
269
204
 
270
- export { ColourPicker, type ColourPickerProps, ColourWindow, type ColourWindowProps, HEX_MAX_LENGTH, ImageBox, type ImageBoxProps, PickWords, type ThemeColour, hexReadout, hueFromPoint, mediaName, svFromPoint, typedHex };
205
+ export { ColourPicker, type ColourPickerProps, ColourWindow, type ColourWindowProps, HEX_MAX_LENGTH, PickWords, type ThemeColour, hexReadout, hueFromPoint, svFromPoint, typedHex };
@@ -1,3 +1 @@
1
- export{ColourPicker,ColourWindow,HEX_MAX_LENGTH,hexReadout,hexToHsv,hsvToHex,hueFromPoint,mediaName,svFromPoint,typedHex}from"../chunk-5XUMLKQF.js";import{DEFAULT_PICK_WORDS as e}from"../chunk-643PVCEG.js";import{useState as o}from"react";import{MediaUploadField as a}from"efficient-shell/ui";import{jsxs as i,jsx as r}from"react/jsx-runtime";function l({value:l,onChange:n,label:c,openLibrary:s,kind:t="image",placeholder:m,readOnly:d=!1,focus:h,onFocusChange:u,maxSizeBytes:g,height:p,words:v=e.image}){const[f,y]=o(!1),[x,b]=o(!1),k=Boolean(s)&&!d;/* @__PURE__ */
2
- return i("div",{className:"es-pick-image",children:[
3
- /* @__PURE__ */r(a,{value:l,onChange:n,onPick:e=>{(async e=>{if(s&&!f&&!d){y(!0),b(!1);try{const o=await s(e);o&&n(o)}catch{b(!0)}finally{y(!1)}}})(e)},accept:"video"===t?"video/*":"image/*",kind:t,placeholder:m??("video"===t?v.chooseVideo:v.chooseImage),cta:k?v.hint:void 0,maxSizeBytes:g,height:p,allowReplace:k,allowRemove:!d,removeLabel:v.removeNamed({label:c}),focus:"image"===t?h:void 0,onFocusChange:"image"!==t||d?void 0:u,busy:f,busyLabel:v.choosing,disabled:d||!k&&!l}),x?/* @__PURE__ */r("p",{className:"es-pick-image-status is-error",role:"alert",children:v.failed}):null]})}export{l as ImageBox};
1
+ export{ColourPicker,ColourWindow,HEX_MAX_LENGTH,hexReadout,hexToHsv,hsvToHex,hueFromPoint,svFromPoint,typedHex}from"../chunk-U6LJ5UKD.js";import"../chunk-OFBZOI6W.js";
@@ -1,4 +1,4 @@
1
- /* efficient-easel/pick — the colour row and the image box (blueprint step
1
+ /* efficient-easel/pick — the colour row (blueprint step
2
2
  4.6). Drawn on the panel's own tokens, so both editors' panels get the same
3
3
  picker without a line of their own CSS. The swatch and the window it opens
4
4
  are efficient-shell's (`Popover`, `ColorPickerPanel`, `colorSwatchClasses`;
@@ -195,23 +195,3 @@
195
195
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
196
196
  mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
197
197
  }
198
- /* ── The image box ──────────────────────────────────────────────────────── */
199
- /* The box itself is the shell's MediaUploadField (efficient-shell #528); only
200
- the column and the failed-library line are drawn here. */
201
- .es-pick-image {
202
- display: flex;
203
- flex-direction: column;
204
- gap: 8px;
205
- /* A host's field puts its control in a flex ROW (`.es-field-ctl`), where a
206
- plain block shrinks to its content: the box takes the row instead. */
207
- flex: 1 1 auto;
208
- min-width: 0;
209
- }
210
- .es-pick-image-status {
211
- margin: 0;
212
- font-size: var(--text-xs, 12px);
213
- color: var(--es-muted);
214
- }
215
- .es-pick-image-status.is-error {
216
- color: var(--es-danger);
217
- }
@@ -1 +1 @@
1
- export{AddBlockRow as default}from"../../chunk-F3A7SXSV.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{AddBlockRow as default}from"../../chunk-OK7OH2ZN.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -1 +1 @@
1
- export{blockKey,AddSidePanel as default,sectionKey,templateKey}from"../../chunk-D46OYLJR.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-QFVRMARS.js";import"../../chunk-AYWN5NRH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{blockKey,AddSidePanel as default,sectionKey,templateKey}from"../../chunk-N2B32EZB.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-POSLNRTO.js";import"../../chunk-KAML3KQH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -1 +1 @@
1
- export{MediaSidePanel as default}from"../../chunk-44QA42OJ.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{MediaSidePanel as default}from"../../chunk-63ZDVAVE.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -19,9 +19,9 @@ import '../../types-CsgMwHHa.js';
19
19
  import '../../wordFit-7XpmhcaW.js';
20
20
  import '../../edit-lock/index.js';
21
21
  import '../../panelWidths-D9hTLR25.js';
22
- import '../../CanvasDragLayer-CLb7j-CZ.js';
22
+ import '../../CanvasDragLayer-dZCPbQCP.js';
23
23
  import '../../session-DSQFmIvx.js';
24
- import '../../words-BDignMl_.js';
24
+ import '../../words-CvwYvkJm.js';
25
25
  import '../../types-D8P9q-BG.js';
26
26
  import 'efficient-shell/ui';
27
27
  import '../../words-Cl9xMUYY.js';
@@ -487,7 +487,7 @@ declare function pastePlace(host: NodeMenuHost, held: ClipboardEntry, target: {
487
487
  /** The three block keys. */
488
488
  type NodeShortcut = "copy" | "cut" | "paste" | "delete";
489
489
  /**
490
- * ⌘C / ⌘X / ⌘V (Ctrl on Windows) — Copy, Cut and Paste of the SELECTED block — and Delete / Backspace, which delete it (2026-10-14),
490
+ * ⌘C / ⌘X / ⌘V (Ctrl on Windows) — Copy, Cut and Paste of the SELECTED block — and Delete, which deletes it (2026-10-14; never Backspace, 2026-10-20),
491
491
  * the keyboard door to the menu's three rows, which print these keys beside
492
492
  * them (0.105.0, `ScreenParts.nodeKeys`). The campaign designer's own test
493
493
  * (admin-portal nodeShortcut), moved here with the keys.
@@ -1 +1 @@
1
- export{EASEL_NODE_CLIPBOARD,ancestorChain,nodeClipboardOf,nodeClipboardRules,nodeMenuItems,nodeShortcut,pageMenuItems,pastePlace,runNodeShortcut,textMenuItems,useNodeClipboard,useNodeContextMenu}from"../../chunk-NW4LJ4G4.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-BXMXTO36.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{EASEL_NODE_CLIPBOARD,ancestorChain,nodeClipboardOf,nodeClipboardRules,nodeMenuItems,nodeShortcut,pageMenuItems,pastePlace,runNodeShortcut,textMenuItems,useNodeClipboard,useNodeContextMenu}from"../../chunk-UVQR7W6I.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-WXFZD7WC.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -15,9 +15,9 @@ import '../../types-41704JE4.js';
15
15
  import '../../resolve-D68pb3Bx.js';
16
16
  import '../../plan-CGREINRO.js';
17
17
  import '../../watch-BTYOJpQU.js';
18
- import '../../CanvasDragLayer-CLb7j-CZ.js';
18
+ import '../../CanvasDragLayer-dZCPbQCP.js';
19
19
  import '../../session-DSQFmIvx.js';
20
- import '../../words-BDignMl_.js';
20
+ import '../../words-CvwYvkJm.js';
21
21
  import '../../types-BsyPh6EW.js';
22
22
  import '../../style-clipboard/index.js';
23
23
  import '../../words-CnnHb9jo.js';
@@ -1 +1 @@
1
- export{ScreenChrome as default}from"../../chunk-XUAKHY4T.js";import"../../chunk-XT6DOSHO.js";import"../../chunk-FGNR22NY.js";import"../../chunk-2GVCAIPX.js";import"../../chunk-26OOWIJJ.js";import"../../chunk-NBDMTIU2.js";import"../../chunk-MQNBD6AB.js";import"../../chunk-LER7RKTO.js";import"../../chunk-7F52SZOI.js";import"../../chunk-RSKHAHPJ.js";import"../../chunk-RKTF5XLP.js";import"../../chunk-3Z2MVLCD.js";import"../../chunk-CY52PUMZ.js";import"../../chunk-KCBEE2MC.js";import"../../chunk-TZIIRGVY.js";import"../../chunk-CMXK3JT3.js";import"../../chunk-TR4APEJZ.js";import"../../chunk-5545A3PC.js";import"../../chunk-D46OYLJR.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-44QA42OJ.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-NW4LJ4G4.js";import"../../chunk-2H3W5OLQ.js";import"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-BXMXTO36.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-BSPCSC45.js";import"../../chunk-IQ5TA7AM.js";import"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-4VJATVVR.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-QFVRMARS.js";import"../../chunk-AYWN5NRH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{ScreenChrome as default}from"../../chunk-RQBIFINA.js";import"../../chunk-XT6DOSHO.js";import"../../chunk-FGNR22NY.js";import"../../chunk-2GVCAIPX.js";import"../../chunk-26OOWIJJ.js";import"../../chunk-NBDMTIU2.js";import"../../chunk-MQNBD6AB.js";import"../../chunk-LER7RKTO.js";import"../../chunk-7F52SZOI.js";import"../../chunk-RSKHAHPJ.js";import"../../chunk-RKTF5XLP.js";import"../../chunk-3Z2MVLCD.js";import"../../chunk-HM7S7H5H.js";import"../../chunk-KCBEE2MC.js";import"../../chunk-TZIIRGVY.js";import"../../chunk-GGC72GS4.js";import"../../chunk-N2BVA6TS.js";import"../../chunk-5545A3PC.js";import"../../chunk-N2B32EZB.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-63ZDVAVE.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-UVQR7W6I.js";import"../../chunk-2H3W5OLQ.js";import"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-WXFZD7WC.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-BSPCSC45.js";import"../../chunk-IQ5TA7AM.js";import"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-4VJATVVR.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-POSLNRTO.js";import"../../chunk-KAML3KQH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -26,9 +26,9 @@ import '../../types-DGyDHiJV.js';
26
26
  import '../../types-CsgMwHHa.js';
27
27
  import '../../wordFit-7XpmhcaW.js';
28
28
  import '../../panelWidths-D9hTLR25.js';
29
- import '../../CanvasDragLayer-CLb7j-CZ.js';
29
+ import '../../CanvasDragLayer-dZCPbQCP.js';
30
30
  import '../../session-DSQFmIvx.js';
31
- import '../../words-BDignMl_.js';
31
+ import '../../words-CvwYvkJm.js';
32
32
  import '../../types-BsyPh6EW.js';
33
33
  import '../../style-clipboard/index.js';
34
34
  import '../../words-CnnHb9jo.js';
@@ -1 +1 @@
1
- export{DocumentScreen,ScreenMount as default}from"../../chunk-35VMTYPH.js";import"../../chunk-GXQCZJOP.js";import"../../chunk-XUAKHY4T.js";import"../../chunk-XT6DOSHO.js";import"../../chunk-FGNR22NY.js";import"../../chunk-2GVCAIPX.js";import"../../chunk-26OOWIJJ.js";import"../../chunk-NBDMTIU2.js";import"../../chunk-MQNBD6AB.js";import"../../chunk-LER7RKTO.js";import"../../chunk-7F52SZOI.js";import"../../chunk-RSKHAHPJ.js";import"../../chunk-RKTF5XLP.js";import"../../chunk-YKJ3RIMT.js";import"../../chunk-3Z2MVLCD.js";import"../../chunk-CY52PUMZ.js";import"../../chunk-KCBEE2MC.js";import"../../chunk-TZIIRGVY.js";import"../../chunk-CMXK3JT3.js";import"../../chunk-TR4APEJZ.js";import"../../chunk-5545A3PC.js";import"../../chunk-D46OYLJR.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-44QA42OJ.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-NW4LJ4G4.js";import"../../chunk-2H3W5OLQ.js";import"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-BXMXTO36.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-BSPCSC45.js";import"../../chunk-IQ5TA7AM.js";import"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-4VJATVVR.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-QFVRMARS.js";import"../../chunk-AYWN5NRH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{DocumentScreen,ScreenMount as default}from"../../chunk-P3XVBLZ6.js";import"../../chunk-GXQCZJOP.js";import"../../chunk-RQBIFINA.js";import"../../chunk-XT6DOSHO.js";import"../../chunk-FGNR22NY.js";import"../../chunk-2GVCAIPX.js";import"../../chunk-26OOWIJJ.js";import"../../chunk-NBDMTIU2.js";import"../../chunk-MQNBD6AB.js";import"../../chunk-LER7RKTO.js";import"../../chunk-7F52SZOI.js";import"../../chunk-RSKHAHPJ.js";import"../../chunk-RKTF5XLP.js";import"../../chunk-KFPCMMRK.js";import"../../chunk-3Z2MVLCD.js";import"../../chunk-HM7S7H5H.js";import"../../chunk-KCBEE2MC.js";import"../../chunk-TZIIRGVY.js";import"../../chunk-GGC72GS4.js";import"../../chunk-N2BVA6TS.js";import"../../chunk-5545A3PC.js";import"../../chunk-N2B32EZB.js";import"../../chunk-PA3PNTVV.js";import"../../chunk-BVN33R76.js";import"../../chunk-5ZBY24K7.js";import"../../chunk-62VPYC7F.js";import"../../chunk-HQ4VVRIC.js";import"../../chunk-63ZDVAVE.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-UVQR7W6I.js";import"../../chunk-2H3W5OLQ.js";import"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-UMDQ6CLQ.js";import"../../chunk-VVPZMWJE.js";import"../../chunk-V7U33NF2.js";import"../../chunk-6WY6ZXJG.js";import"../../chunk-WXFZD7WC.js";import"../../chunk-OSPUG6S6.js";import"../../chunk-WK3AFPXY.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-BSPCSC45.js";import"../../chunk-IQ5TA7AM.js";import"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-4VJATVVR.js";import"../../chunk-NDRZP6YR.js";import"../../chunk-H6DDIBQ4.js";import"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-POSLNRTO.js";import"../../chunk-KAML3KQH.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -13,9 +13,9 @@ import '../../types-CsgMwHHa.js';
13
13
  import '../../wordFit-7XpmhcaW.js';
14
14
  import '../../edit-lock/index.js';
15
15
  import '../../panelWidths-D9hTLR25.js';
16
- import '../../CanvasDragLayer-CLb7j-CZ.js';
16
+ import '../../CanvasDragLayer-dZCPbQCP.js';
17
17
  import '../../session-DSQFmIvx.js';
18
- import '../../words-BDignMl_.js';
18
+ import '../../words-CvwYvkJm.js';
19
19
  import '../../types-BsyPh6EW.js';
20
20
  import '../../style-clipboard/index.js';
21
21
  import '../../words-CnnHb9jo.js';
@@ -1 +1 @@
1
- export{ScreenStoreProvider as default}from"../../chunk-YKJ3RIMT.js";import"../../chunk-CSGTPJTY.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{ScreenStoreProvider as default}from"../../chunk-KFPCMMRK.js";import"../../chunk-PQRYAW2G.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -1,16 +1,16 @@
1
- import{AddBlockRow as e}from"../../chunk-F3A7SXSV.js";import{scrollPreviewToSection as n,gotoPreviewSlide as o}from"../../chunk-3Z2MVLCD.js";import{useEaselUndoKeys as r}from"../../chunk-CY52PUMZ.js";import{SlotChildActionsProvider as t}from"../../chunk-KCBEE2MC.js";import{DEFAULT_PANEL_W as s}from"../../chunk-TZIIRGVY.js";import{usePartBridge as i}from"../../chunk-CMXK3JT3.js";import{useSectionOps as c}from"../../chunk-TR4APEJZ.js";import"../../chunk-HQ4VVRIC.js";import{MediaSidePanel as p}from"../../chunk-44QA42OJ.js";import{SELECTION_MODE as l,useScreenPinned as m,useScreenCanvasFrame as d,useScreenInspectorPanel as a,useScreenPickFollowsSelection as u,sameInspectorMode as h,useStandaloneScreenBridges as k,useScreenBlockLook as f,useScreenBlockRules as j}from"../../chunk-CSGTPJTY.js";import{useScreenDocument as S}from"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import{useMediaPanel as y,usePanelPick as N,useCancelPanelPick as C}from"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import{useHostEscape as P}from"../../chunk-U3JP4VGF.js";import{DEFAULT_SCREEN_WORDS as R}from"../../chunk-VVPZMWJE.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-IQ5TA7AM.js";import{slotChildRowName as A}from"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import{slotFieldsOf as x,nestsInTree as M}from"../../chunk-PLVEGYK6.js";import{useEasel as v}from"../../chunk-LPM2SCM4.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-SO5OLDH7.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import{LayersTree as V,Subtree as E,TreeRow as H,TreeRowAction as g,TreeSeam as w}from"../../chunk-4JSBIW5H.js";import{DEFAULT_TREE_WORDS as z}from"../../chunk-K56YDHYQ.js";import"../../chunk-EA2HTX37.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-NDRZP6YR.js";import{DEFAULT_SAVE_WORDS as B,saveIndicator as O}from"../../chunk-H6DDIBQ4.js";import{SaveState as b,panelWidthVars as D}from"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-NY7HHUGB.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import{useWords as J}from"../../chunk-MFIRYGHW.js";import"../../chunk-QFVRMARS.js";import"../../chunk-AYWN5NRH.js";import{useTreeDrag as T}from"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-ILXP5VX5.js";import{zoneKey as W,parseZoneKey as Y}from"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";import{useState as Z,useRef as F,useEffect as L,useCallback as X,Fragment as I}from"react";import{Tooltip as G}from"efficient-shell/ui";import{TrashIcon as K}from"efficient-shell/icons/efficient";import{jsxs as $,jsx as Q,Fragment as U}from"react/jsx-runtime";var q=e=>n=>{n.target.closest("button, input")||e()},_={rowClick:q};function ee(){const{saveState:ee,readOnly:ne,readOnlyReason:oe=null}=S(),re=c(),{appState:te,selectedItem:se,config:ie}=v(e=>e),[ce,pe]=Z(l),le=J("screen",R),me=J("tree",z),de=J("save",B),{first:ae,last:ue,panelOf:he}=m(),ke=he(ae),fe=d(),je=a(),Se=te.data.content?.[0]??null,ye=Se?.props.id??null,Ne=Se?.type===ae,Ce=Se?.type===ue,Pe=F(null),Re=F(null);r(Re);const Ae=y(),xe=N(),Me=C();u(se?.props.id),L(()=>{const e=Re.current;if(!xe||!e)return;const n=e=>{"Escape"===e.key&&Me()};return e.addEventListener("keydown",n),()=>e.removeEventListener("keydown",n)},[xe]),P(null!==xe,()=>Me()),L(()=>{ye&&Pe.current!==ye&&(Pe.current=ye,Ne?pe(ke??l):se||re.select({index:0}))},[ye,se,re,Ne]);const ve=X(e=>pe(n=>h(n,e)?n:e),[]),Ve=k({kind:ce.kind,mode:ce,open:ve,show:e=>pe(e),reveal:()=>{},select:(e,n)=>{pe(e=>h(e,n)?e:n),re.select(e)}}),{selectNode:Ee}=i({mode:ce,setMode:pe,onOpenPart:n}),He=f(),{labelAtLevel:ge,Icon:we}=He,{canAddTo:ze}=j(),Be=e=>ge(e,"block",ie.components[e]?.label??e),Oe=e=>ge(e,"section",Be(e)),be=!Ne&&"puck"===ce.kind&&se?.props.id===ye,De=Se?ze(Se.type)?.spec??null:null,Je=Se&&De?`${Se.props.id}:${De.slot}`:null,Te=Se&&De&&Array.isArray(Se.props[De.slot])?Se.props[De.slot]:[],We=e=>A(e,Be,He.plainText),Ye=(e,r)=>{Se&&De&&Je&&(pe(l),De.slider?(o(String(Se.props.id),e),re.select({index:e,zone:Je}),n(String(Se.props.id))):(re.select({index:e,zone:Je}),n(r)))},Ze=()=>{if(!Se||!De||!Je)return;const e=Te.length;re.insertComponent(Je,De.childType,e),pe(l),De.slider?requestAnimationFrame(()=>{o(String(Se.props.id),e),re.select({index:e,zone:Je})}):re.select({index:e,zone:Je})},Fe=e=>x(ie,e),Le=e=>{const{parentId:n,slot:o}=Y(e),r=e=>{if(!e)return null;if(String(e.props.id)===n)return e;for(const n of Fe(e.type)){const o=Array.isArray(e.props[n])?e.props[n]:[];for(const e of o){const n=r(e);if(n)return n}}return null},t=r(Se)?.props[o];return Array.isArray(t)?t.length:0},Xe=(e,n,o)=>{const r=Math.min(Math.max(o,0),Le(e)),t=n<r?r-1:r;t!==n&&(re.reorderComponent(e,n,t),pe(l),re.select({index:t,zone:e}))},Ie=T({keyOf:e=>e.id,readOnly:Boolean(ne),canDrop:(e,n)=>W(n)===e.zone&&n.index>=0&&n.index<=Le(e.zone),onDrop:(e,n)=>Xe(e.zone,e.index,n.index),onStep:(e,n)=>Xe(e.zone,e.index,n<0?e.index-1:e.index+2)}),Ge=(e,n)=>/* @__PURE__ */Q(w,{...ne?{}:Ie.seam({place:{...Y(e),index:n}})},`seam:${e}:${n}`),Ke=e=>He.blockRowName(e,Be),$e=(e,o,r)=>{pe(l),re.select({index:o,zone:e}),n(r)},Qe=(e,n,o)=>{re.insertComponent(e,n,o),pe(l),re.select({index:o,zone:e})},Ue=(n,o,r)=>/* @__PURE__ */Q(e,{choices:r,onPick:e=>Qe(n,e,o)}),qe=(e,n)=>{const o=Fe((r=e).type).flatMap(e=>(Array.isArray(r.props[e])?r.props[e]:[]).map((n,o)=>({child:n,zone:`${r.props.id}:${e}`,index:o})));var r;const t=ze(e.type),s=t?.choices??null,i="footer"===t?.source?Ke:We;/* @__PURE__ */
2
- return $(U,{children:[o.map(({child:e,zone:o,index:r})=>{const t=se?.props.id===e.props.id,s=M(ie,e.type,n),c=i(e),p=String(e.props.id),m=()=>$e(o,r,p),{rowProps:d,...a}=Ie.row({item:{id:p,zone:o,index:r},place:{...Y(o),index:r}},{onClick:q(m)});/* @__PURE__ */
3
- return $(I,{children:[0===r&&Ge(o,0),
4
- /* @__PURE__ */Q(H,{words:me,icon:/* @__PURE__ */Q(we,{type:e.type,size:13}),name:c,selected:t,onSelect:m,...a,actions:/* @__PURE__ */Q(g,{kind:"delete",label:le.deleteNamed({name:c}),onClick:()=>{return e=o,n=r,re.removeComponent(e,n),pe(l),void re.select(null);var e,n},children:/* @__PURE__ */Q(K,{size:13})}),rowProps:d}),s&&/* @__PURE__ */Q(E,{children:qe(e,n+1)}),Ge(o,r+1)]},String(e.props.id??`${o}-${r}`))}),t&&s?Ue(`${e.props.id}:${t.slot}`,o.length,s):null]})},_e="HeroSingle"===Se?.type,en=Boolean(Se)&&(Boolean(ze(Se.type))||Fe(Se.type).length>0),nn=Boolean(Se)&&(Boolean(De)||Ce||Ne||_e||en);/* @__PURE__ */
5
- return $("div",{ref:Re,className:"sf-editor es-editor",style:D(s),children:[
6
- /* @__PURE__ */Q("div",{className:"sf-section-bar",children:/* @__PURE__ */Q(b,null!==oe?{tone:"off",label:oe,role:"status"}:{...O(ee,de),role:"status"})}),
7
- /* @__PURE__ */$("div",{className:"sf-body",children:[xe&&Ae?/* @__PURE__ */Q("aside",{className:"es-sidepanel es-sidepanel--left sf-panel sf-panel--left",children:/* @__PURE__ */Q(p,{panel:Ae,pick:xe})}):nn&&Se&&/* @__PURE__ */$("aside",{className:"es-sidepanel es-sidepanel--left sf-panel sf-panel--left",children:[
8
- /* @__PURE__ */Q("div",{className:"sf-panel-head",children:/* @__PURE__ */Q(G,{content:Ne?le.headerSettings:le.sectionSettings({name:Oe(Se.type)}),side:"bottom",children:/* @__PURE__ */Q("button",{type:"button",className:"sf-panel-title sf-panel-title--btn "+(be?"is-selected":""),"aria-pressed":be,onClick:()=>{Ne?pe(ke??l):(pe(l),re.select({index:0}))},children:Oe(Se.type)})})}),
9
- /* @__PURE__ */Q(V,{className:"sf-tree sf-scroll",rootProps:Ie.rootProps(),words:me,children:/* @__PURE__ */Q(E,{children:Ne?
10
- /* @__PURE__ */Q(H,{words:me,icon:/* @__PURE__ */Q(we,{type:"header",size:13}),name:le.headerSettings,selected:ce.kind===ke?.kind,onSelect:()=>pe(ke??l),rowProps:{onClick:q(()=>pe(ke??l))}}):De?/* @__PURE__ */$(U,{children:[Te.map((e,n)=>{const o=se?.props.id===e.props.id,r=We(e),t=String(e.props.id),s=()=>Ye(n,t),{rowProps:i,...c}=Ie.row({item:{id:t,zone:Je,index:n},place:{...Y(Je),index:n}},{onClick:q(s)});/* @__PURE__ */
11
- return $(I,{children:[0===n&&Ge(Je,0),
12
- /* @__PURE__ */Q(H,{words:me,icon:/* @__PURE__ */Q(we,{type:e.type,size:13}),name:r,selected:o,onSelect:s,...c,actions:/* @__PURE__ */Q(g,{kind:"delete",label:le.deleteNamed({name:r}),onClick:()=>{return e=n,void(Je&&(re.removeComponent(Je,e),pe(l),re.select(null)));var e},children:/* @__PURE__ */Q(K,{size:13})}),rowProps:i}),Ge(Je,n+1)]},String(e.props.id??n))}),
13
- /* @__PURE__ */$("button",{type:"button",className:"sf-add-card",onClick:Ze,children:[
14
- /* @__PURE__ */Q("span",{className:"sf-plus sf-plus--sm",children:"+"}),De.addLabel]}),ye?Ve.partRows?.(Se,_):null]}):qe(Se,1)})})]}),
1
+ import{AddBlockRow as e}from"../../chunk-OK7OH2ZN.js";import{scrollPreviewToSection as n,gotoPreviewSlide as o}from"../../chunk-3Z2MVLCD.js";import{useEaselUndoKeys as r}from"../../chunk-HM7S7H5H.js";import{SlotChildActionsProvider as t}from"../../chunk-KCBEE2MC.js";import{DEFAULT_PANEL_W as s}from"../../chunk-TZIIRGVY.js";import{usePartBridge as i}from"../../chunk-GGC72GS4.js";import{useSectionOps as c}from"../../chunk-N2BVA6TS.js";import"../../chunk-HQ4VVRIC.js";import{MediaSidePanel as p}from"../../chunk-63ZDVAVE.js";import{SELECTION_MODE as l,useScreenPinned as m,useScreenCanvasFrame as d,useScreenInspectorPanel as a,useScreenPickFollowsSelection as u,sameInspectorMode as h,useStandaloneScreenBridges as k,useScreenBlockLook as f,useScreenBlockRules as j}from"../../chunk-PQRYAW2G.js";import{useScreenDocument as S}from"../../chunk-ZZ64CEC2.js";import"../../chunk-ERR437B5.js";import"../../chunk-GMCZXMOV.js";import"../../chunk-RLBXE4EU.js";import"../../chunk-HNKB2ZYR.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-S4AWJX4Q.js";import"../../chunk-KG7RJWOK.js";import"../../chunk-VPFNZ7TB.js";import"../../chunk-LOMEH6DG.js";import"../../chunk-KCOBHPN6.js";import{useMediaPanel as y,usePanelPick as N,useCancelPanelPick as C}from"../../chunk-R6WTQWAC.js";import"../../chunk-O7Q4DDJT.js";import"../../chunk-RSCMJIWS.js";import{useHostEscape as A}from"../../chunk-U3JP4VGF.js";import{DEFAULT_SCREEN_WORDS as M}from"../../chunk-VVPZMWJE.js";import"../../chunk-I54UCYOU.js";import"../../chunk-GOTN2KY4.js";import"../../chunk-R5L2E7JX.js";import"../../chunk-IQ5TA7AM.js";import{slotChildRowName as P}from"../../chunk-TBF5CVPA.js";import"../../chunk-DUVRZ456.js";import"../../chunk-6W7WLPZH.js";import"../../chunk-IYT6NN2J.js";import{slotFieldsOf as R,nestsInTree as x}from"../../chunk-PLVEGYK6.js";import{useEasel as V}from"../../chunk-SMM3ST7A.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-ECM5F6JJ.js";import"../../chunk-N3LYD2LK.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-XWFH2NHZ.js";import{LayersTree as v,Subtree as H,TreeRow as g,TreeRowAction as B,TreeSeam as E}from"../../chunk-4JSBIW5H.js";import{DEFAULT_TREE_WORDS as O}from"../../chunk-K56YDHYQ.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-NDRZP6YR.js";import{DEFAULT_SAVE_WORDS as w,saveIndicator as z}from"../../chunk-H6DDIBQ4.js";import{SaveState as D,panelWidthVars as L}from"../../chunk-IE55HNMA.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import{useWords as b}from"../../chunk-MFIRYGHW.js";import"../../chunk-POSLNRTO.js";import"../../chunk-KAML3KQH.js";import{useTreeDrag as T}from"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import{zoneKey as W,parseZoneKey as Z}from"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";import{useState as F,useRef as G,useEffect as K,useCallback as Y,Fragment as J}from"react";import{Tooltip as I}from"efficient-shell/ui";import{TrashIcon as X}from"efficient-shell/icons/efficient";import{jsxs as $,jsx as Q,Fragment as U}from"react/jsx-runtime";var q=e=>n=>{n.target.closest("button, input")||e()},_={rowClick:q};function ee(){const{saveState:ee,readOnly:ne,readOnlyReason:oe=null}=S(),re=c(),{appState:te,selectedItem:se,config:ie}=V(e=>e),[ce,pe]=F(l),le=b("screen",M),me=b("tree",O),de=b("save",w),{first:ae,last:ue,panelOf:he}=m(),ke=he(ae),fe=d(),je=a(),Se=te.data.content?.[0]??null,ye=Se?.props.id??null,Ne=Se?.type===ae,Ce=Se?.type===ue,Ae=G(null),Me=G(null);r(Me);const Pe=y(),Re=N(),xe=C();u(se?.props.id),K(()=>{const e=Me.current;if(!Re||!e)return;const n=e=>{"Escape"===e.key&&xe()};return e.addEventListener("keydown",n),()=>e.removeEventListener("keydown",n)},[Re]),A(null!==Re,()=>xe()),K(()=>{ye&&Ae.current!==ye&&(Ae.current=ye,Ne?pe(ke??l):se||re.select({index:0}))},[ye,se,re,Ne]);const Ve=Y(e=>pe(n=>h(n,e)?n:e),[]),ve=k({kind:ce.kind,mode:ce,open:Ve,show:e=>pe(e),reveal:()=>{},select:(e,n)=>{pe(e=>h(e,n)?e:n),re.select(e)}}),{selectNode:He}=i({mode:ce,setMode:pe,onOpenPart:n}),ge=f(),{labelAtLevel:Be,Icon:Ee}=ge,{canAddTo:Oe}=j(),we=e=>Be(e,"block",ie.components[e]?.label??e),ze=e=>Be(e,"section",we(e)),De=!Ne&&"puck"===ce.kind&&se?.props.id===ye,Le=Se?Oe(Se.type)?.spec??null:null,be=Se&&Le?`${Se.props.id}:${Le.slot}`:null,Te=Se&&Le&&Array.isArray(Se.props[Le.slot])?Se.props[Le.slot]:[],We=e=>P(e,we,ge.plainText),Ze=(e,r)=>{Se&&Le&&be&&(pe(l),Le.slider?(o(String(Se.props.id),e),re.select({index:e,zone:be}),n(String(Se.props.id))):(re.select({index:e,zone:be}),n(r)))},Fe=()=>{if(!Se||!Le||!be)return;const e=Te.length;re.insertComponent(be,Le.childType,e),pe(l),Le.slider?requestAnimationFrame(()=>{o(String(Se.props.id),e),re.select({index:e,zone:be})}):re.select({index:e,zone:be})},Ge=e=>R(ie,e),Ke=e=>{const{parentId:n,slot:o}=Z(e),r=e=>{if(!e)return null;if(String(e.props.id)===n)return e;for(const n of Ge(e.type)){const o=Array.isArray(e.props[n])?e.props[n]:[];for(const e of o){const n=r(e);if(n)return n}}return null},t=r(Se)?.props[o];return Array.isArray(t)?t.length:0},Ye=(e,n,o)=>{const r=Math.min(Math.max(o,0),Ke(e)),t=n<r?r-1:r;t!==n&&(re.reorderComponent(e,n,t),pe(l),re.select({index:t,zone:e}))},Je=T({keyOf:e=>e.id,readOnly:Boolean(ne),canDrop:(e,n)=>W(n)===e.zone&&n.index>=0&&n.index<=Ke(e.zone),onDrop:(e,n)=>Ye(e.zone,e.index,n.index),onStep:(e,n)=>Ye(e.zone,e.index,n<0?e.index-1:e.index+2)}),Ie=(e,n)=>/* @__PURE__ */Q(E,{...ne?{}:Je.seam({place:{...Z(e),index:n}})},`seam:${e}:${n}`),Xe=e=>ge.blockRowName(e,we),$e=(e,o,r)=>{pe(l),re.select({index:o,zone:e}),n(r)},Qe=(e,n,o)=>{re.insertComponent(e,n,o),pe(l),re.select({index:o,zone:e})},Ue=(n,o,r)=>/* @__PURE__ */Q(e,{choices:r,onPick:e=>Qe(n,e,o)}),qe=(e,n)=>{const o=Ge((r=e).type).flatMap(e=>(Array.isArray(r.props[e])?r.props[e]:[]).map((n,o)=>({child:n,zone:`${r.props.id}:${e}`,index:o})));var r;const t=Oe(e.type),s=t?.choices??null,i="footer"===t?.source?Xe:We;/* @__PURE__ */
2
+ return $(U,{children:[o.map(({child:e,zone:o,index:r})=>{const t=se?.props.id===e.props.id,s=x(ie,e.type,n),c=i(e),p=String(e.props.id),m=()=>$e(o,r,p),{rowProps:d,...a}=Je.row({item:{id:p,zone:o,index:r},place:{...Z(o),index:r}},{onClick:q(m)});/* @__PURE__ */
3
+ return $(J,{children:[0===r&&Ie(o,0),
4
+ /* @__PURE__ */Q(g,{words:me,icon:/* @__PURE__ */Q(Ee,{type:e.type,size:13}),name:c,selected:t,onSelect:m,...a,actions:/* @__PURE__ */Q(B,{kind:"delete",label:le.deleteNamed({name:c}),onClick:()=>{return e=o,n=r,re.removeComponent(e,n),pe(l),void re.select(null);var e,n},children:/* @__PURE__ */Q(X,{size:13})}),rowProps:d}),s&&/* @__PURE__ */Q(H,{children:qe(e,n+1)}),Ie(o,r+1)]},String(e.props.id??`${o}-${r}`))}),t&&s?Ue(`${e.props.id}:${t.slot}`,o.length,s):null]})},_e="HeroSingle"===Se?.type,en=Boolean(Se)&&(Boolean(Oe(Se.type))||Ge(Se.type).length>0),nn=Boolean(Se)&&(Boolean(Le)||Ce||Ne||_e||en);/* @__PURE__ */
5
+ return $("div",{ref:Me,className:"sf-editor es-editor",style:L(s),children:[
6
+ /* @__PURE__ */Q("div",{className:"sf-section-bar",children:/* @__PURE__ */Q(D,null!==oe?{tone:"off",label:oe,role:"status"}:{...z(ee,de),role:"status"})}),
7
+ /* @__PURE__ */$("div",{className:"sf-body",children:[Re&&Pe?/* @__PURE__ */Q("aside",{className:"es-sidepanel es-sidepanel--left sf-panel sf-panel--left",children:/* @__PURE__ */Q(p,{panel:Pe,pick:Re})}):nn&&Se&&/* @__PURE__ */$("aside",{className:"es-sidepanel es-sidepanel--left sf-panel sf-panel--left",children:[
8
+ /* @__PURE__ */Q("div",{className:"sf-panel-head",children:/* @__PURE__ */Q(I,{content:Ne?le.headerSettings:le.sectionSettings({name:ze(Se.type)}),side:"bottom",children:/* @__PURE__ */Q("button",{type:"button",className:"sf-panel-title sf-panel-title--btn "+(De?"is-selected":""),"aria-pressed":De,onClick:()=>{Ne?pe(ke??l):(pe(l),re.select({index:0}))},children:ze(Se.type)})})}),
9
+ /* @__PURE__ */Q(v,{className:"sf-tree sf-scroll",rootProps:Je.rootProps(),words:me,children:/* @__PURE__ */Q(H,{children:Ne?
10
+ /* @__PURE__ */Q(g,{words:me,icon:/* @__PURE__ */Q(Ee,{type:"header",size:13}),name:le.headerSettings,selected:ce.kind===ke?.kind,onSelect:()=>pe(ke??l),rowProps:{onClick:q(()=>pe(ke??l))}}):Le?/* @__PURE__ */$(U,{children:[Te.map((e,n)=>{const o=se?.props.id===e.props.id,r=We(e),t=String(e.props.id),s=()=>Ze(n,t),{rowProps:i,...c}=Je.row({item:{id:t,zone:be,index:n},place:{...Z(be),index:n}},{onClick:q(s)});/* @__PURE__ */
11
+ return $(J,{children:[0===n&&Ie(be,0),
12
+ /* @__PURE__ */Q(g,{words:me,icon:/* @__PURE__ */Q(Ee,{type:e.type,size:13}),name:r,selected:o,onSelect:s,...c,actions:/* @__PURE__ */Q(B,{kind:"delete",label:le.deleteNamed({name:r}),onClick:()=>{return e=n,void(be&&(re.removeComponent(be,e),pe(l),re.select(null)));var e},children:/* @__PURE__ */Q(X,{size:13})}),rowProps:i}),Ie(be,n+1)]},String(e.props.id??n))}),
13
+ /* @__PURE__ */$("button",{type:"button",className:"sf-add-card",onClick:Fe,children:[
14
+ /* @__PURE__ */Q("span",{className:"sf-plus sf-plus--sm",children:"+"}),Le.addLabel]}),ye?ve.partRows?.(Se,_):null]}):qe(Se,1)})})]}),
15
15
  /* @__PURE__ */Q("div",{className:"sf-center",children:/* @__PURE__ */Q("div",{className:"sf-preview-host",children:/* @__PURE__ */Q(fe,{})})}),
16
- /* @__PURE__ */Q(t,{value:{selectChild:(e,n,o,r)=>"section"===ze(r)?.source?Ye(n,o):$e(e,n,o),addChild:(e,n,o,r,t)=>"section"===ze(t)?.source?Ze():Qe(`${e}:${n}`,o,r),childRowName:We,blockRowName:Ke},children:/* @__PURE__ */Q(je,{mode:ce,onOpenWebsiteSettings:Ve.openSettings??(()=>{}),onSelectNode:Ee,hideNodeActions:!0})})]})]})}export{ee as default};
16
+ /* @__PURE__ */Q(t,{value:{selectChild:(e,n,o,r)=>"section"===Oe(r)?.source?Ze(n,o):$e(e,n,o),addChild:(e,n,o,r,t)=>"section"===Oe(t)?.source?Fe():Qe(`${e}:${n}`,o,r),childRowName:We,blockRowName:Xe},children:/* @__PURE__ */Q(je,{mode:ce,onOpenWebsiteSettings:ve.openSettings??(()=>{}),onSelectNode:He,hideNodeActions:!0})})]})]})}export{ee as default};