efficient-easel 3.7.0 → 4.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 (49) hide show
  1. package/dist/chunk-4JSBIW5H.js +9 -0
  2. package/dist/{chunk-6N64PNWF.js → chunk-4YBMSUPL.js} +1 -1
  3. package/dist/chunk-7GVPKRW2.js +14 -0
  4. package/dist/{chunk-CRG625FM.js → chunk-D4BUPPPV.js} +3 -3
  5. package/dist/{chunk-XW4AV5N4.js → chunk-FUOZKV7A.js} +3 -3
  6. package/dist/chunk-KFMJ4IM4.js +5 -0
  7. package/dist/{chunk-RKSKUGWC.js → chunk-LJOYIXO4.js} +43 -43
  8. package/dist/{chunk-CRPJGCSO.js → chunk-NJOPEWYN.js} +16 -16
  9. package/dist/{chunk-MUZNA23W.js → chunk-QBJJVMVB.js} +1 -1
  10. package/dist/chunk-QEWRHH6R.js +5 -0
  11. package/dist/{chunk-XBNOEQMR.js → chunk-SNMCF2ZD.js} +1 -1
  12. package/dist/{chunk-SCPCXNTB.js → chunk-TJOUAFJE.js} +1 -1
  13. package/dist/{chunk-VZGLBEAE.js → chunk-X2GNFJRC.js} +1 -1
  14. package/dist/{chunk-LZ6EGT4Y.js → chunk-XJPNW26S.js} +1 -1
  15. package/dist/{chunk-MTRFMGBO.js → chunk-ZHTQCAQ2.js} +1 -1
  16. package/dist/drag/drag.css +5 -56
  17. package/dist/drag/index.js +1 -1
  18. package/dist/easel/index.js +1 -1
  19. package/dist/fields/index.js +1 -1
  20. package/dist/screen/components/AddBlockRow.js +1 -1
  21. package/dist/screen/components/AddSidePanel.js +1 -1
  22. package/dist/screen/components/MediaSidePanel.js +1 -1
  23. package/dist/screen/components/NodeContextMenu.d.ts +1 -1
  24. package/dist/screen/components/NodeContextMenu.js +1 -1
  25. package/dist/screen/components/ScreenChrome.js +1 -1
  26. package/dist/screen/components/ScreenMount.d.ts +1 -1
  27. package/dist/screen/components/ScreenMount.js +1 -1
  28. package/dist/screen/components/ScreenStoreProvider.d.ts +1 -1
  29. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  30. package/dist/screen/components/SectionScreenShell.js +15 -15
  31. package/dist/screen/components/usePartBridge.d.ts +1 -1
  32. package/dist/screen/components/usePartBridge.js +1 -1
  33. package/dist/screen/index.d.ts +1 -1
  34. package/dist/screen/index.js +1 -1
  35. package/dist/screen/lib/key-scope.js +1 -1
  36. package/dist/screen/lib/puck/style-clipboard.d.ts +1 -1
  37. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  38. package/dist/screen/lib/screen-parts.d.ts +1 -1
  39. package/dist/screen/lib/screen-parts.js +1 -1
  40. package/dist/screen/screen.css +9 -42
  41. package/dist/tree/index.d.ts +8 -4
  42. package/dist/tree/index.js +1 -1
  43. package/dist/tree/tree.css +6 -3
  44. package/dist/{types-BqGnUVX5.d.ts → types-BLRK6_JO.d.ts} +7 -0
  45. package/package.json +3 -3
  46. package/dist/chunk-2GLQRNYT.js +0 -16
  47. package/dist/chunk-LUSM3QTY.js +0 -5
  48. package/dist/chunk-UFY6RNMT.js +0 -9
  49. package/dist/chunk-YIKMVF24.js +0 -5
@@ -1 +1 @@
1
- export{editorRootFocus,useEaselKeyTarget,useEaselUndoKeys}from"../../chunk-VZGLBEAE.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-XW4AV5N4.js";import"../../chunk-AELNNAFM.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-UK2FQOUT.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-ZNCEOSXO.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{editorRootFocus,useEaselKeyTarget,useEaselUndoKeys}from"../../chunk-X2GNFJRC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-FUOZKV7A.js";import"../../chunk-AELNNAFM.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-UK2FQOUT.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";import"../../chunk-ZNCEOSXO.js";
@@ -19,7 +19,7 @@ import '../../../panelWidths-D9hTLR25.js';
19
19
  import '../../../CanvasDragLayer-DVJGgA-g.js';
20
20
  import '../../../session-DSQFmIvx.js';
21
21
  import '../../../words-BDignMl_.js';
22
- import '../../../types-BqGnUVX5.js';
22
+ import '../../../types-BLRK6_JO.js';
23
23
  import '../../../words-Cl9xMUYY.js';
24
24
  import '../../components/AddSidePanel.js';
25
25
  import '../section-template-types.js';
@@ -1 +1 @@
1
- export{useSectionOps}from"../../../chunk-XBNOEQMR.js";import"../../../chunk-YIKMVF24.js";import"../../../chunk-PLVEGYK6.js";import"../../../chunk-R6WTQWAC.js";import"../../../chunk-U3JP4VGF.js";import"../../../chunk-XW4AV5N4.js";import"../../../chunk-AELNNAFM.js";import"../../../chunk-CRPJGCSO.js";import"../../../chunk-OZ72A6MY.js";import"../../../chunk-UFY6RNMT.js";import"../../../chunk-YNOZ5NXW.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-QTLAVDJE.js";import"../../../chunk-YRLPFZW3.js";import"../../../chunk-EA2HTX37.js";import"../../../chunk-UK2FQOUT.js";import"../../../chunk-66LWADFP.js";import"../../../chunk-QLD57GBB.js";import"../../../chunk-FFYXVAAL.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-67GNT6PF.js";import"../../../chunk-ZNCEOSXO.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-KRXQM65X.js";import"../../../chunk-NKB3KVAB.js";
1
+ export{useSectionOps}from"../../../chunk-SNMCF2ZD.js";import"../../../chunk-KFMJ4IM4.js";import"../../../chunk-PLVEGYK6.js";import"../../../chunk-R6WTQWAC.js";import"../../../chunk-U3JP4VGF.js";import"../../../chunk-FUOZKV7A.js";import"../../../chunk-AELNNAFM.js";import"../../../chunk-NJOPEWYN.js";import"../../../chunk-OZ72A6MY.js";import"../../../chunk-4JSBIW5H.js";import"../../../chunk-YNOZ5NXW.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-QTLAVDJE.js";import"../../../chunk-YRLPFZW3.js";import"../../../chunk-EA2HTX37.js";import"../../../chunk-UK2FQOUT.js";import"../../../chunk-66LWADFP.js";import"../../../chunk-QLD57GBB.js";import"../../../chunk-FFYXVAAL.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-67GNT6PF.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-KRXQM65X.js";import"../../../chunk-NKB3KVAB.js";import"../../../chunk-ZNCEOSXO.js";
@@ -8,7 +8,7 @@ import { M as MeasuredCanvas, C as CanvasDragModel } from '../../CanvasDragLayer
8
8
  import { E as EaselContextMenuItem } from '../../types-BsyPh6EW.js';
9
9
  import { a as EaselRailItem } from '../../types-CsgMwHHa.js';
10
10
  import { StyleRow } from '../../style-clipboard/index.js';
11
- import { T as TreeRowMark } from '../../types-BqGnUVX5.js';
11
+ import { T as TreeRowMark } from '../../types-BLRK6_JO.js';
12
12
  import { AddKey } from '../components/AddSidePanel.js';
13
13
  import { k as AnyScreenTarget } from '../../host-CiuzZJXj.js';
14
14
  import { HostProduct } from './host-chrome.js';
@@ -1 +1 @@
1
- export{SELECTION_MODE,ScreenCanvasTargetProvider,ScreenPartsProvider,isPinnedFirst,isPinnedLast,isSlotMode,sameInspectorMode,screenSlotsOf,useScreenAdd,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasDrag,useScreenCanvasFrame,useScreenCanvasHead,useScreenCanvasTarget,useScreenDevices,useScreenDocumentLabel,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenNodeKeys,useScreenNotify,useScreenOwnerName,useScreenParts,useScreenPickFollowsSelection,useScreenPinned,useScreenSaveSwitch,useScreenStorageNamespace,useScreenStyleClipboard,useStandaloneScreenBridges}from"../../chunk-YIKMVF24.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-XW4AV5N4.js";import"../../chunk-AELNNAFM.js";import"../../chunk-CRPJGCSO.js";import"../../chunk-OZ72A6MY.js";import"../../chunk-UFY6RNMT.js";import"../../chunk-YNOZ5NXW.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-QTLAVDJE.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-EA2HTX37.js";import"../../chunk-UK2FQOUT.js";import"../../chunk-66LWADFP.js";import"../../chunk-QLD57GBB.js";import"../../chunk-FFYXVAAL.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-ZNCEOSXO.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
1
+ export{SELECTION_MODE,ScreenCanvasTargetProvider,ScreenPartsProvider,isPinnedFirst,isPinnedLast,isSlotMode,sameInspectorMode,screenSlotsOf,useScreenAdd,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasDrag,useScreenCanvasFrame,useScreenCanvasHead,useScreenCanvasTarget,useScreenDevices,useScreenDocumentLabel,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenNodeKeys,useScreenNotify,useScreenOwnerName,useScreenParts,useScreenPickFollowsSelection,useScreenPinned,useScreenSaveSwitch,useScreenStorageNamespace,useScreenStyleClipboard,useStandaloneScreenBridges}from"../../chunk-KFMJ4IM4.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-FUOZKV7A.js";import"../../chunk-AELNNAFM.js";import"../../chunk-NJOPEWYN.js";import"../../chunk-OZ72A6MY.js";import"../../chunk-4JSBIW5H.js";import"../../chunk-YNOZ5NXW.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-QTLAVDJE.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-EA2HTX37.js";import"../../chunk-UK2FQOUT.js";import"../../chunk-66LWADFP.js";import"../../chunk-QLD57GBB.js";import"../../chunk-FFYXVAAL.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";import"../../chunk-ZNCEOSXO.js";
@@ -337,51 +337,18 @@
337
337
  box-shadow: inset 2px 0 0 var(--sf-accent);
338
338
  }
339
339
 
340
- /* ── Left panel: section tree (wraps Puck.Outline) ────────────────────── */
340
+ /* ── Left panel: section tree ─────────────────────────────────────────────
341
+ The Layers tree is the left panel's scroll box (`lib/puck/tree-reveal`
342
+ scrolls it to the selected row). Nothing more: its ONE inset, 12 a side, is
343
+ `.es-tree`'s (`efficient-easel/tree.css`). This rule used to pad the same
344
+ element a second time (8 / 11 / 10 over `.es-tree`'s 8 / 12 / 12) and to
345
+ re-declare `--es-rhythm-group` 10 and `--es-rhythm-between` 6 for rows that
346
+ stopped reading them when they became the shell's `TreeRow` — their gaps
347
+ are the shell tree's, 4 (Lewis on the Pages panel, 2026-10-13: "packed too
348
+ tight"). */
341
349
  .sf-tree {
342
350
  flex: 1;
343
351
  overflow-y: auto;
344
- /* THE TWO SIDES PAY FOR DIFFERENT THINGS, and they always did.
345
- LEFT 8 — the inset a rounded row needs. The reason WAS "a rounded bar
346
- cannot bleed to a panel edge"; the bars are gone (One Ladder, 2026-09-04)
347
- and the reason survives them unchanged, because every row in the tree is
348
- still a rounded control and an inset control is simply a control.
349
- RIGHT 11 — this element also carries `.sf-scroll`, and
350
- `.sf-scroll::-webkit-scrollbar` is `width: 11px` of REAL, space-taking
351
- gutter, not an overlay. This tree scrolls on almost every page. What used
352
- to live at the row's right end was the caret; it is the count pill now,
353
- and a count sitting under a scrollbar thumb is the same defect wearing a
354
- different glyph.
355
- Everything inside still starts on the same 11px text column, which is what
356
- keeps the words aligned down the panel. */
357
- padding: 0 11px 10px 8px;
358
-
359
- /* ── THE TREE'S RHYTHM — the shell's names, the tree's own density ─────────
360
- `efficient-easel` 0.19.0 stopped hiding its spacing inside literals and gave
361
- each rhythm a name (card 66228, `efficient-easel/panel.css`). The tree reads
362
- those names. It does NOT read the panel's VALUES and does not compute them:
363
-
364
- · Copying 28/7 in would be a second source of truth for numbers the shell
365
- is already the source of — the one rule that sits above a green suite.
366
- · A scale FACTOR off them would be a lie. Lewis picked the tree's two
367
- numbers by eye on 2026-08-31 (`mockups/layers-panel-v9-left-only-and-drag.html`
368
- and `editor-add-and-context-v1.html`): 10 between bars, 6 between rows.
369
- Against the panel that is 10/36 = 0.28 and 6/28 = 0.21 — TWO factors,
370
- not one, so there is no single number to scale by. `panel.css` already
371
- refuses this shape for the same reason, in its own words: 28 was
372
- measured, it is not "10 plus 18".
373
-
374
- So what is shared is the VOCABULARY and the RULE, not the values: `-group`
375
- means "a heading, from what is above it" in both panels and `-between`
376
- means "one row, from the next" in both, each stated once at its own
377
- density. A tree at the panel's 28px a row would scroll forever.
378
-
379
- Declared HERE rather than on `.sf-editor` deliberately — the settings panel
380
- is a sibling reading the same names from the shell, and an override at the
381
- editor root would re-rhythm IT too. `scripts/test-tree-rhythm-tokens.ts` is
382
- the gate. */
383
- --es-rhythm-group: 10px;
384
- --es-rhythm-between: 6px;
385
352
  }
386
353
 
387
354
  .sf-chip {
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
- import { L as LayersTreeProps, S as SubtreeProps, a as TreeGroupLabelProps, b as TreeEmptySlotProps, c as TreeRowProps, d as TreeRowActionProps, e as TreeSeamProps } from '../types-BqGnUVX5.js';
3
- export { f as TreeRowFold, T as TreeRowMark } from '../types-BqGnUVX5.js';
2
+ import { L as LayersTreeProps, S as SubtreeProps, a as TreeGroupLabelProps, b as TreeEmptySlotProps, c as TreeRowProps, d as TreeRowActionProps, e as TreeSeamProps } from '../types-BLRK6_JO.js';
3
+ export { f as TreeRowFold, T as TreeRowMark } from '../types-BLRK6_JO.js';
4
4
  export { T as TreeWords } from '../words-Cl9xMUYY.js';
5
5
 
6
6
  /**
@@ -9,8 +9,12 @@ export { T as TreeWords } from '../words-Cl9xMUYY.js';
9
9
  * `screen/lib/puck/tree-reveal` scrolls, and the scroll box `tree.css` keeps.
10
10
  */
11
11
  declare function LayersTree({ className, children, rootProps, ariaLabel, words }: LayersTreeProps): react.JSX.Element;
12
- /** A quiet uppercase label over a run of rows — the shell's `TreeGroupLabel`. */
13
- declare function TreeGroupLabel({ children }: TreeGroupLabelProps): react.JSX.Element;
12
+ /**
13
+ * A quiet uppercase label over a run of rows — the shell's `TreeGroupLabel`,
14
+ * with its count and its fold (efficient-shell, "TreeGroupLabel takes a count
15
+ * and folds"): the Pages panel's headings and the Layers panel's are one.
16
+ */
17
+ declare function TreeGroupLabel({ children, count, expanded, onToggle }: TreeGroupLabelProps): react.JSX.Element;
14
18
  /**
15
19
  * The rows one level down: the shell's `TreeGroup` (`role="group"`, the indent
16
20
  * and the hairline — the only thing in the tree that says depth), and one more
@@ -1 +1 @@
1
- export{LayersTree,Subtree,TREE_DRAG_HINT,TreeEmptySlot,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-UFY6RNMT.js";import"../chunk-K56YDHYQ.js";
1
+ export{LayersTree,Subtree,TREE_DRAG_HINT,TreeEmptySlot,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-4JSBIW5H.js";import"../chunk-K56YDHYQ.js";
@@ -22,9 +22,12 @@
22
22
  .es-tree {
23
23
  flex: 1;
24
24
  overflow-y: auto;
25
- /* LEFT 8 — the inset a rounded row needs. RIGHT 12 — the room a real,
26
- space-taking scrollbar takes, so nothing at a row's end sits under the thumb. */
27
- padding: 0 12px 12px 8px;
25
+ /* ONE INSET, 12 A SIDE — the editor panel's search field's (Lewis on the
26
+ Pages panel, 2026-10-13: "packed too tight"). It was 8 left and 12 right,
27
+ and the screen's `.sf-tree` said 8 and 11 over the top of it on the same
28
+ element; a row's fill ran nearly to the panel's edge. A scrollbar, when
29
+ the tree scrolls, takes its own room outside this padding. */
30
+ padding: 0 var(--es-space-12) var(--es-space-12);
28
31
  /* The row actions lie over the end of the name on a scrim of the row's own
29
32
  tone over the PANEL's ground (efficient-shell 4.166.0). The shell assumes
30
33
  `--surface`; the tree sits on easel's panel, so it says which. */
@@ -14,6 +14,13 @@ type LayersTreeProps = {
14
14
  };
15
15
  type TreeGroupLabelProps = {
16
16
  children: ReactNode;
17
+ /** How many rows it heads, in the shell's count pill at its end — "MAIN PAGES 3". */
18
+ count?: ReactNode;
19
+ /** Present when the heading folds the rows under it: whether they show. The
20
+ * heading is then the shell's button, with `aria-expanded` and the row's caret. */
21
+ expanded?: boolean;
22
+ /** Fold or unfold. The rows under it are the host's to render or leave out. */
23
+ onToggle?: () => void;
17
24
  };
18
25
  type SubtreeProps = {
19
26
  children?: ReactNode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-easel",
3
- "version": "3.7.0",
3
+ "version": "4.0.0",
4
4
  "description": "Efficient Easel: the EFFICIENT editors' shared engine and chrome: the saved document as pure functions, the published renderer, and the editor frame, panels, Layers tree, text grammar and type-in-place box. Published as editor-shell up to 0.66.0 and as efficient-editor up to 0.95.0.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Efficient Pty Ltd",
@@ -517,7 +517,7 @@
517
517
  "dist"
518
518
  ],
519
519
  "peerDependencies": {
520
- "efficient-shell": "^5.6.0 || ^6.4.0 || ^7.7.0",
520
+ "efficient-shell": "^5.6.0 || ^6.4.0 || ^7.21.0",
521
521
  "react": ">=18",
522
522
  "react-dom": ">=18"
523
523
  },
@@ -527,7 +527,7 @@
527
527
  "@types/node": "^22.0.0",
528
528
  "@types/react": "^18.2.0",
529
529
  "@types/react-dom": "^18.2.0",
530
- "efficient-shell": "^7.7.0",
530
+ "efficient-shell": "^7.21.0",
531
531
  "esbuild": "^0.27.0",
532
532
  "jsdom": "^26.1.0",
533
533
  "react": "^18.2.0",
@@ -1,16 +0,0 @@
1
- import{DEFAULT_DRAG_WORDS as e}from"./chunk-O2NLQBFX.js";import{dropEffectFor as t,scrollBoxOf as n,frameScrollBox as l,startAutoScroll as r,isNoOpDrop as a}from"./chunk-67GNT6PF.js";import{useCanvasLayout as o,useCanvasEvent as s}from"./chunk-PAELDYYS.js";import{framePointToHost as i,elementScale as c,frameRectToLayer as d,clientPointToLayer as u}from"./chunk-ZNCEOSXO.js";import{withTip as h}from"./chunk-P2VEMZH5.js";import{parseZoneKey as f}from"./chunk-KRXQM65X.js";import{useRef as p,useEffect as m,useState as g,useCallback as b,useMemo as y,useSyncExternalStore as v,useId as x,useLayoutEffect as k}from"react";import{Tooltip as w}from"efficient-shell/ui";import{jsxs as N,jsx as A}from"react/jsx-runtime";import{CloseIcon as D,SearchIcon as z}from"efficient-shell/icons/efficient";var T=(e,t,n)=>t>=e.left&&t<=e.left+e.width&&n>=e.top&&n<=e.top+e.height,C=e=>e.width*e.height;function S(e,t,n){return e.map((e,t)=>({s:e,at:t})).filter(({s:e})=>T(e.box,t,n)).sort((e,t)=>C(t.s.box)-C(e.s.box)||e.at-t.at).map(({s:e})=>e)}function E(e,t,n){return S(e,t,n).at(-1)??null}function $(e,t,n){const l="x"===e.axis?t:n;let r=0;for(const t of e.children){l>("x"===e.axis?t.left+t.width/2:t.top+t.height/2)&&(r+=1)}return r}function L(e,t){const n=e.children;if("x"===e.axis){const l=n[t-1],r=n[t],a=l&&r?(l.left+l.width+r.left)/2:l?l.left+l.width:r?r.left:e.box.left,o=r??l??e.box;return{left:a-1,top:o.top,width:2,height:o.height}}const l=n[t-1],r=n[t],a=l&&r?(l.top+l.height+r.top)/2:l?l.top+l.height:r?r.top:e.box.top;return{left:e.box.left,top:a-1,width:e.box.width,height:2}}function j(e,t,n,l,r=()=>!1,a=()=>!0){const o=e.filter(e=>T(e.box,t,n)).sort((e,t)=>C(e.box)-C(t.box));for(const e of o){const o=$(e,t,n),s={...e.list,index:o};if(r(s))return null;if(l(s))return{zone:e,to:s,line:L(e,o)};if(!a(s))return null}return null}function M(e,t=e.key){const n=[];for(let l=1;l<e.children.length;l++){const r=e.children[l-1],a=e.children[l],o=r.top+r.height;n.push({key:`${t}:${l}`,place:{...e.list,index:l},box:{left:e.box.left,top:o,width:e.box.width,height:Math.max(a.top-o,0)}})}return n}var B={nodes:[],zones:[]},O="data-puck-dropzone",K="data-puck-component";function X(e,t){if(e.length>=2){const[t,n]=e;return Math.abs(n.top-t.top)<Math.min(t.height,n.height)/2&&n.left>t.left?"x":"y"}const n=t.ownerDocument.defaultView?.getComputedStyle(t);return n&&n.display.includes("flex")&&n.flexDirection.startsWith("row")?"x":"y"}function q(e,t){const{frame:n,document:l}=e,r=e=>d(n,function(e){const t=e.getBoundingClientRect();return{left:t.left,top:t.top,width:t.width,height:t.height}}(e),t),a=[],o=[];for(const e of l.querySelectorAll(`[${O}]`)){const t=e.getAttribute(O)??"";let n;try{n=f(t)}catch{continue}const l=[...e.querySelectorAll(`[${K}]`)].filter(t=>t.parentElement?.closest(`[${O}]`)===e),s=l.map(r);o.push({key:t,list:n,box:r(e),axis:X(s,e),children:s}),l.forEach((e,t)=>{const l=e.getAttribute(K);l&&a.push({id:l,place:{...n,index:t},box:s[t]})})}return{nodes:a,zones:o}}var P="data-es-empty-cell",Y="data-puck-dropzone",Z=140;var F=e=>({left:e.left,top:e.top,width:e.width,height:e.height});function R(d){const{canvas:h,session:f,readOnly:x,words:D=e.canvas}=d,z=p(d);m(()=>{z.current=d});const T=p(null),C=o(h),[E,$]=g(0),L=b(()=>$(e=>e+1),[]),[M,O]=g(B);m(()=>{const e=T.current;h&&e&&O((z.current.measure??q)(h,e))},[h,C,d.revision,E]);const K=d.model,X=y(()=>K(M),[K,M]),Z=v(f.subscribe,f.shown,f.shown),R=d.choose,Q=(e,t)=>{const n=S(X.sources,e,t);return 0===n.length?null:R?R(n):n[n.length-1]},[V,G]=g(null),[H,I]=g(null),W=p(null),J=()=>{W.current&&clearTimeout(W.current),W.current=null},U=()=>{J(),W.current=setTimeout(()=>{f.get()||G(null)},140)};m(()=>J,[]);const _=p(null);s(h,"mousemove",e=>{const t=T.current;if(!h||!t)return;const n=i(h.frame,e.clientX,e.clientY,t),l=c(t),r={x:n.x/l,y:n.y/l};if(_.current=r,z.current.readOnly||f.get())return;J();const a=Q(r.x,r.y);G(e=>e?.key===a?.key&&e?.box===a?.box?e:a)}),s(h,"mouseout",e=>{e.relatedTarget||(_.current=null,U())}),s(h,"mouseover",e=>{e.relatedTarget||L()});const ee=p(null),te=b(()=>{ee.current?.(),ee.current=null,I(null)},[]);m(()=>f.subscribe(()=>{f.get()?L():te()}),[f,te,L]),m(()=>te,[te]),("undefined"==typeof document?m:k)(()=>{if(f.get())return;const e=_.current;G(t=>x?null:e?Q(e.x,e.y):t?X.sources.find(e=>e.key===t.key)??null:null)},[X,Z,f,x,R]);const ne=e=>{const t=f.get(),n=T.current;if(!t||!n)return null;const l=u(n,e.clientX,e.clientY);_.current=l;const r=j(X.zones,l.x,l.y,e=>z.current.canDrop(t.item,e),e=>!!t.from&&a(t.from,e),e=>z.current.fallThrough?.(t.item,e,t.from)??!0);return r?{h:t,t:r}:null},le={onDragEnter:e=>{if(ee.current)return;const t=n(e.currentTarget.parentElement?.parentElement??null),a=h?l(h.document):null,o=[];t&&o.push(r(t)),a&&h&&o.push(r(a,h.frame)),ee.current=o.length?()=>o.forEach(e=>e()):null},onDragOver:e=>{const n=ne(e);if(!n)return void I(null);e.preventDefault(),e.dataTransfer.dropEffect=t(e.dataTransfer.effectAllowed);const l={zoneKey:n.t.zone.key,line:n.t.line,axis:n.t.zone.axis};I(e=>e&&e.zoneKey===l.zoneKey&&e.line.left===l.line.left&&e.line.top===l.line.top?e:l)},onDragLeave:e=>{const t=e.relatedTarget;t&&e.currentTarget.contains(t)||(_.current=null,I(null))},onDrop:e=>{const t=ne(e);t&&(e.preventDefault(),f.end(),te(),z.current.onDrop(t.h.item,t.t.to))}},re={draggable:!x&&!!V,onMouseEnter:J,onMouseLeave:()=>!f.get()&&U(),onDragStart:e=>{if(V&&!x){f.start({key:V.key,item:V.item,from:V.from}),e.dataTransfer.effectAllowed="move";try{e.dataTransfer.setData("text/plain",V.key)}catch{}}else e.preventDefault()},onDragEnd:()=>{f.end(),te()},onClick:()=>{V&&!x&&z.current.onPick?.(V.item)}},{seams:ae=[]}=X,oe=X.zones.filter(e=>0===e.children.length),se=d.onZoneAdd&&!x?oe:[],ie=se.map(e=>e.key).join("\n");return m(()=>{const e=h?.document;if(!e)return;const t=new Set(ie?ie.split("\n"):[]);for(const n of e.querySelectorAll(`[${Y}]`))n.toggleAttribute(P,t.has(n.getAttribute(Y)??""));return()=>{for(const t of e.querySelectorAll(`[${P}]`))t.removeAttribute(P)}},[h,ie,M,C,E]),/* @__PURE__ */N("div",{ref:T,className:"es-canvas-layer",children:[Z||!d.onSeamAdd||x?null:ae.map(e=>/* @__PURE__ */A("div",{className:"es-canvas-seam",style:{left:e.box.left,top:e.box.top+e.box.height/2-8,width:e.box.width,height:16},children:/* @__PURE__ */A("button",{type:"button",className:"es-canvas-seam-add",onClick:()=>d.onSeamAdd?.(e.place),children:D.addButton({label:d.seamLabel??D.addSection})})},e.key)),se.length?se.map(e=>/* @__PURE__ */A("button",{type:"button",className:H?.zoneKey===e.key?"es-canvas-empty is-over":"es-canvas-empty",style:F(e.box),onClick:()=>d.onZoneAdd?.({...e.list,index:0}),children:/* @__PURE__ */A("span",{className:"es-canvas-empty-add",children:D.addButton({label:d.zoneAddLabel??D.addBlock})})},e.key)):null,Z?/* @__PURE__ */A("div",{className:"es-canvas-catch",...le}):null,H&&!oe.some(e=>e.key===H.zoneKey)?/* @__PURE__ */A("div",{className:`es-canvas-line is-${H.axis}`,style:F(H.line)}):null,
2
- /* @__PURE__ */A("div",{className:"es-canvas-handle-spot",style:V?{"--es-handle-x":`${V.box.left+2}px`,"--es-handle-y":`${Math.max(V.box.top-11,0)}px`}:void 0,children:/* @__PURE__ */A(w,{className:"es-canvas-handle-tip",side:"top",content:!V||x||Z?null:V.title??D.handle({label:V.label}),children:/* @__PURE__ */N("div",{className:["es-canvas-handle",V&&!x?"is-shown":"",Z?"is-dragging":""].filter(Boolean).join(" "),...re,children:[
3
- /* @__PURE__ */A("span",{className:"es-canvas-grip","aria-hidden":"true",children:"⋮⋮"}),V?.label]})})})]})}var Q=e=>e.tiles.length>0&&e.tiles.every(e=>null!=e.cover);function V({groups:t,session:n,itemFor:l,onInsert:r,at:a,hint:o,searchLabel:s,readOnly:i,words:c=e.add}){const d=o??c.hint,u=s??c.search,[f,p]=g(""),m=x(),b=f.trim().toLowerCase(),y=function(e){const t=/* @__PURE__ */new Map;return e.map(e=>{const n=e.key??e.title,l=t.get(n)??0;return t.set(n,l+1),0===l?n:`${n}\0${l}`})}(t),v=t.map((e,t)=>({...e,key:y[t],tiles:b?e.tiles.filter(e=>((e,t)=>e.label.toLowerCase().includes(t)||(e.keywords??[]).some(e=>e.toLowerCase().includes(t)))(e,b)):e.tiles})).filter(e=>e.tiles.length>0),k=(e,t)=>r=>{if(t)r.preventDefault();else{n.start({key:`new:${e}`,item:l(e)}),r.dataTransfer.effectAllowed="copy";try{r.dataTransfer.setData("text/plain",e)}catch{}}};/* @__PURE__ */
4
- return N("div",{className:"es-add",children:[a?/* @__PURE__ */N("div",{className:"es-add-at",role:"status",children:[
5
- /* @__PURE__ */A("span",{children:a.label}),h(c.stop,/* @__PURE__ */A("button",{type:"button",className:"es-add-at-clear","aria-label":c.stop,onClick:a.onClear,children:/* @__PURE__ */A(D,{size:12,"aria-hidden":"true"})}))]}):null,
6
- /* @__PURE__ */A("p",{className:"es-add-hint",children:d}),
7
- /* @__PURE__ */N("div",{className:"es-add-search",children:[
8
- /* @__PURE__ */A(z,{size:16,"aria-hidden":"true"}),
9
- /* @__PURE__ */A("input",{id:m,type:"search","aria-label":u,placeholder:c.searchPlaceholder({label:u}),value:f,onChange:e=>p(e.target.value)}),f?/* @__PURE__ */A("button",{type:"button",className:"es-add-search-clear","aria-label":c.clearSearch,onClick:()=>p(""),children:/* @__PURE__ */A(D,{size:12,"aria-hidden":"true"})}):null]}),0===v.length?/* @__PURE__ */N("div",{className:"es-add-empty",role:"status",children:[
10
- /* @__PURE__ */A("div",{className:"es-add-empty-title",children:c.nothing({query:f.trim()})}),
11
- /* @__PURE__ */A("div",{className:"es-add-empty-sub",children:c.tryAnother})]}):v.map(e=>/* @__PURE__ */N("section",{className:"es-add-group","aria-label":e.title,children:[
12
- /* @__PURE__ */N("div",{className:"es-add-group-head",children:[
13
- /* @__PURE__ */A("span",{className:"es-add-group-title",children:e.title}),
14
- /* @__PURE__ */A("span",{className:"es-add-group-count",children:e.tiles.length})]}),
15
- /* @__PURE__ */A("div",{className:Q(e)?"es-add-grid is-cards":"es-add-grid",children:e.tiles.map(e=>{const t=Boolean(i||e.disabled),l=i?void 0:e.disabled?e.disabledReason:e.title??c.tile({label:e.label});return h(l,/* @__PURE__ */N("button",{type:"button",className:null!=e.cover?"es-add-tile has-cover":"es-add-tile",draggable:!t,"aria-disabled":t||void 0,"aria-label":c.tile({label:e.label}),onDragStart:k(e.type,t),onDragEnd:()=>n.end(),onClick:()=>!t&&r(e.type),children:[null!=e.cover?/* @__PURE__ */A("span",{className:"es-add-tile-cover","aria-hidden":"true",children:e.cover}):e.icon?/* @__PURE__ */A("span",{className:"es-add-tile-glyph","aria-hidden":"true",children:e.icon}):null,
16
- /* @__PURE__ */A("span",{className:"es-add-tile-label",children:e.label})]},e.type))})})]},e.key))]})}export{V as AddPanel,R as CanvasDragLayer,B as EMPTY_MEASURE,Z as HANDLE_GRACE_MS,j as canvasTarget,T as contains,$ as gapInZone,L as gapLine,q as measureCanvas,E as pickSource,M as seamsBetween,S as sourcesAt};
@@ -1,5 +0,0 @@
1
- import{blockTypesIn as e}from"./chunk-5ZBY24K7.js";import{buildPaletteSections as t,pinnedSection as o,paletteWithoutPinned as n,categoryLabel as i}from"./chunk-PA3PNTVV.js";import{sectionTemplatesOf as s}from"./chunk-BVN33R76.js";import{SidePanelHead as r,PanelModeExit as c}from"./chunk-5SOSVTVI.js";import{useEaselSession as l}from"./chunk-O7Q4DDJT.js";import{blockRuns as a}from"./chunk-HQ4VVRIC.js";import{useScreenBlockLook as p,useScreenBlockRules as m}from"./chunk-YIKMVF24.js";import{DEFAULT_SCREEN_WORDS as d}from"./chunk-MCHMF32I.js";import{useEasel as f}from"./chunk-XW4AV5N4.js";import{useWords as u}from"./chunk-MFIRYGHW.js";import{AddPanel as k}from"./chunk-2GLQRNYT.js";import{DEFAULT_DRAG_WORDS as h}from"./chunk-O2NLQBFX.js";import{useState as y,useEffect as b,useMemo as j}from"react";import{AddIcon as g}from"efficient-shell/icons/efficient";import{jsx as $,jsxs as O,Fragment as V}from"react/jsx-runtime";var B=e=>`section:${e}`,I=e=>`block:${e}`,v=e=>`template:${e}`;function N({blocks:N,blocksOnly:x,at:F,onAdd:L,itemFor:A,session:H,siteWide:T,onClose:C,onHide:M,readOnly:Q}){const R=f(e=>e.config),S=p(),{labelAtLevel:Y,categoryLabel:w,firstSection:D,Icon:W,Thumbnail:z}=S,{blockIsOffered:G}=m(),K=u("screen",d).add,P=u("drag",h).add,X=l(),[E,J]=y([]);b(()=>{let t=!1;const o=e=>G(e,X);return s(X).list().then(n=>{if(t)return;const i=R.components;J(n.filter(t=>t.node?.type&&i[t.node.type]&&e(t.node).every(o)))}).catch(()=>{}),()=>{t=!0}},[R,X]);const Z=j(()=>t(R,S),[R]),q=e=>({type:B(e.type),label:e.name,cover:/* @__PURE__ */$(z,{type:e.type}),title:e.desc?`${e.name} — ${e.desc}`:K.tile({name:e.name}),keywords:[e.alias??"",e.desc,e.type,e.catLabel].filter(Boolean)}),U=j(()=>{const e=[];if(N&&N.choices.length>0&&a(N.choices).forEach((t,o)=>{e.push({key:`blocks:${o}`,title:0===o?`${K.inside({name:N.parentName})}${t.group?` · ${t.group}`:""}`:t.group??"",tiles:t.items.map(e=>({type:I(e.type),label:e.label,icon:/* @__PURE__ */$(W,{type:e.type,size:18}),title:K.tile({name:e.label})}))})}),x)return e;const t=o(Z,D);t&&e.push({key:"start",title:K.startBlank,tiles:[q(t)]}),E.length>0&&e.push({key:"templates",title:K.templates,tiles:E.map(e=>{return{type:v(e.id),label:e.name,cover:/* @__PURE__ */$(z,{type:e.node.type}),keywords:[(t=e.node.type,Y(t,"section",R.components[t]?.label??t)),e.node.type]};var t})});const s=n(Z,D);for(const t of Object.keys(R.categories??{})){const o=s.filter(e=>e.cat===t);0!==o.length&&e.push({key:`category:${t}`,title:i(R,t,w),tiles:o.map(q)})}return e},[N,x,E,Z,R,K]),_=e=>{const t=e.indexOf(":"),o=e.slice(0,t),n=e.slice(t+1);if("section"===o)return{kind:"section",type:n};if("block"===o)return{kind:"block",type:n};if("template"===o){const e=E.find(e=>e.id===n);return e?{kind:"template",template:e}:null}return null};/* @__PURE__ */
2
- return O(V,{children:[
3
- /* @__PURE__ */$(r,{icon:/* @__PURE__ */$(g,{size:15}),title:K.title,context:x?K.contextBlocks:K.contextAll,actions:/* @__PURE__ */$(c,{label:K.done,description:K.doneDescription,onClick:C}),onHide:M}),
4
- /* @__PURE__ */O("div",{className:"sf-addside sf-scroll",children:[
5
- /* @__PURE__ */$(k,{groups:U,session:H,itemFor:e=>A(_(e)??{kind:"section",type:e}),onInsert:e=>{const t=_(e);t&&L(t)},at:F,hint:x?K.hintBlocks:K.hint,searchLabel:x?K.searchBlocks:K.searchSections,readOnly:Q,words:P}),T&&!x?T:null]})]})}export{N as AddSidePanel,I as blockKey,B as sectionKey,v as templateKey};
@@ -1,9 +0,0 @@
1
- import{DEFAULT_TREE_WORDS as e}from"./chunk-K56YDHYQ.js";import{useContext as r,createContext as a,isValidElement as l}from"react";import{Tree as o,TreeGroupLabel as n,TreeGroup as i,Tooltip as s,TreeRow as t,IconButton as d,TreeSeam as c,TreeEmptySlot as m}from"efficient-shell/ui";import{jsx as p,jsxs as g,Fragment as h}from"react/jsx-runtime";var u,b=()=>u??=a(1),f=()=>r(b());function k({className:r,children:a,rootProps:l,ariaLabel:n,words:i=e}){/* @__PURE__ */
2
- return p(o,{"aria-label":n??i.name??e.name,className:r?`es-tree ${r}`:"es-tree",rootProps:l,children:a})}function v({children:e}){/* @__PURE__ */
3
- return p(n,{children:e})}function w({children:e}){const r=f(),a=b();/* @__PURE__ */
4
- return p(a.Provider,{value:r+1,children:/* @__PURE__ */p(i,{children:e})})}var N=e.dragHint,P=e=>[e].flat(1/0).some(e=>l(e)&&!0===e.props.pressed);function y({icon:r,name:a,preview:l,selected:o,hidden:n,draggable:i,dragHint:d,dragging:c,drop:m,fold:u,actions:b,nameSlot:k,onSelect:v,marks:w,badge:N,trailing:y,children:A,rowProps:S,level:T,words:H=e}){const j=f(),B=["es-tree-row",o?"is-selected":"",n?"is-hidden":"",i?"is-draggable":"",c?"is-dragging":"",m?`is-drop-${m}`:""].filter(Boolean).join(" "),C=/* @__PURE__ */g(h,{children:[
5
- /* @__PURE__ */p("span",{className:"es-tree-name",children:a}),w?.map(e=>/* @__PURE__ */p(s,{content:e.label,children:/* @__PURE__ */p("span",{className:"es-tree-mark","aria-label":e.label,role:"img",children:e.icon})},e.key)),y?/* @__PURE__ */p(s,{content:y.label,children:/* @__PURE__ */p("span",{className:"es-tree-trailing","aria-label":y.label,role:"img",children:y.icon})}):null,A]}),x=S?.onClick,$={click:!1},D=x?e=>{x(e),$.click=!0,queueMicrotask(()=>{$.click=!1})}:void 0,L=v?()=>{$.click||v()}:void 0;/* @__PURE__ */
6
- return p(t,{label:C,level:T??j,icon:r,preview:l,selected:!!o,expanded:u?u.open:void 0,onToggle:u?.onToggle,onSelect:L,muted:!!n,badge:N,actions:b,actionsPinned:P(b),rename:k,drop:m,dragging:!!c,draggable:!!i,dragHint:d??H.dragHint,className:B,rowProps:{...S,onClick:D,...i?{"aria-keyshortcuts":"Alt+ArrowUp Alt+ArrowDown"}:{}}})}function A({kind:e,label:r,onClick:a,pressed:l,disabled:o,children:n}){/* @__PURE__ */
7
- return p(s,{content:r,children:/* @__PURE__ */p(d,{"aria-label":r,"aria-pressed":l,"aria-disabled":o||void 0,variant:"delete"===e?"ghost-danger":"ghost",size:"sm","data-kind":e,className:o?"es-tree-act-off":void 0,onClick:e=>{e.stopPropagation(),a()},children:n})})}function S({drop:e,onAdd:r,label:a,seamProps:l}){const o=["es-tree-seam",e?"is-drop":"",r?"has-add":"",l?.className??""].filter(Boolean).join(" "),n={...l,className:o};/* @__PURE__ */
8
- return p(c,{drop:!!e,onInsert:r,label:a,seamProps:n})}function T({drop:r,onAdd:a,label:l,seamProps:o,words:n=e}){const i=l??(a?n.addBlock??e.addBlock:n.emptySlot??e.emptySlot),s={...o,className:o?.className?`es-tree-empty ${o.className}`:"es-tree-empty"};/* @__PURE__ */
9
- return p(m,{drop:!!r,onAdd:a,label:i,slotProps:s})}export{k as LayersTree,w as Subtree,N as TREE_DRAG_HINT,T as TreeEmptySlot,v as TreeGroupLabel,y as TreeRow,A as TreeRowAction,S as TreeSeam};
@@ -1,5 +0,0 @@
1
- import{slotFieldsOf as n}from"./chunk-PLVEGYK6.js";import{usePickFollowsSelection as e}from"./chunk-R6WTQWAC.js";import{EaselCanvas as t,useSelectedFields as r}from"./chunk-XW4AV5N4.js";import{Inspector as i}from"./chunk-CRPJGCSO.js";import{createContext as o,useContext as u}from"react";import{DesktopIcon as l}from"efficient-shell/icons/efficient";import{jsx as s}from"react/jsx-runtime";var c={kind:"puck"};function f(n,e){const t=n,r=e,i=Object.keys(t);return i.length===Object.keys(r).length&&i.every(n=>Object.is(t[n],r[n]))}function a(n){const e=n;return"string"==typeof e.nodeId&&"string"==typeof e.slot}function d(e,t,r){const i=e.slotsOf?.(r);return i||n(t,r.type).map(n=>({slot:n,label:n,rung:!1}))}function p(n,e){return n.isFirst?n.isFirst(e):e.type===n.first}function m(n,e){return n.isLast?n.isLast(e):e.type===n.last}var k={},h={},v=()=>k,g=()=>"",y=()=>null,b=()=>{},O={isLockedBlock:()=>!1,duplicateBlocked:()=>null,nestDepth:()=>0,newSectionNode:()=>null,canAddTo:()=>null,blockIsOffered:()=>!0},j={labelAtLevel:(n,e,t)=>t,descriptions:{},categoryLabel:()=>{},firstSection:null,blockRowName:(n,e)=>e(n.type),plainText:n=>n,Icon:()=>null,Thumbnail:()=>null,useProducts:()=>null},w={options:[{id:"desktop",label:"Desktop",icon:/* @__PURE__ */s(l,{})}],initial:"desktop",fluid:"desktop",widths:{desktop:2e3}},C={read:()=>"sections",write:()=>{},forSelection:(n,e)=>n?"sections":e},L={first:null,last:null,firstGroup:null,lastGroup:null,isSectionGroup:()=>!1,sectionGroupZone:()=>"",panelOf:()=>null};function S(){/* @__PURE__ */
2
- return s(t,{height:"fill"})}function P(){const{id:n,fields:e,values:t,readOnly:o,onChange:u}=r();/* @__PURE__ */
3
- return s("div",{className:"es-sidepanel es-sidepanel--right",children:/* @__PURE__ */s(i,{fields:e,values:t,onChange:u,readOnly:o,idPrefix:n})})}var G=o({});function N({parts:n,children:e}){/* @__PURE__ */
4
- return s(G.Provider,{value:n,children:e})}function D(){return u(G)}function x(){return(D().useOwnerName??g)()}function A(){return(D().useDocumentLabel??y)()}function B(n,e,t,r){return(D().useBridges??v)(n,e,t,r)}function I(n){return(D().useStandaloneBridges??v)(n)}function R(n,e){(D().useDocumentPass??b)(n,e)}function T(){return D().blockRules??O}function F(){return D().blockLook??j}function V(){return D().devices??w}function W(){return D().leftView??C}function K(){return D().pinned??L}function E(){return D().saveSwitch??!0}function H(n){e(!0===D().pickFollowsSelection,n)}function J(){return D().add??h}function Q(){return D().storageNamespace||void 0}function X(){return D().styleClipboard??null}function Y(){return D().nodeKeys??!0}function Z(){return D().notify??null}function q(){return D().Canvas??S}function z(){return D().CanvasHead??null}function M(){return D().canvasDrag??null}var U=o(null);function $({target:n,children:e}){/* @__PURE__ */
5
- return s(U.Provider,{value:n,children:e})}function _(){return u(U)}function nn(){return D().Inspector??P}export{c as SELECTION_MODE,$ as ScreenCanvasTargetProvider,N as ScreenPartsProvider,p as isPinnedFirst,m as isPinnedLast,a as isSlotMode,f as sameInspectorMode,d as screenSlotsOf,J as useScreenAdd,F as useScreenBlockLook,T as useScreenBlockRules,B as useScreenBridges,M as useScreenCanvasDrag,q as useScreenCanvasFrame,z as useScreenCanvasHead,_ as useScreenCanvasTarget,V as useScreenDevices,A as useScreenDocumentLabel,R as useScreenDocumentPass,nn as useScreenInspectorPanel,W as useScreenLeftView,Y as useScreenNodeKeys,Z as useScreenNotify,x as useScreenOwnerName,D as useScreenParts,H as useScreenPickFollowsSelection,K as useScreenPinned,E as useScreenSaveSwitch,Q as useScreenStorageNamespace,X as useScreenStyleClipboard,I as useStandaloneScreenBridges};