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.
- package/dist/chunk-4JSBIW5H.js +9 -0
- package/dist/{chunk-6N64PNWF.js → chunk-4YBMSUPL.js} +1 -1
- package/dist/chunk-7GVPKRW2.js +14 -0
- package/dist/{chunk-CRG625FM.js → chunk-D4BUPPPV.js} +3 -3
- package/dist/{chunk-XW4AV5N4.js → chunk-FUOZKV7A.js} +3 -3
- package/dist/chunk-KFMJ4IM4.js +5 -0
- package/dist/{chunk-RKSKUGWC.js → chunk-LJOYIXO4.js} +43 -43
- package/dist/{chunk-CRPJGCSO.js → chunk-NJOPEWYN.js} +16 -16
- package/dist/{chunk-MUZNA23W.js → chunk-QBJJVMVB.js} +1 -1
- package/dist/chunk-QEWRHH6R.js +5 -0
- package/dist/{chunk-XBNOEQMR.js → chunk-SNMCF2ZD.js} +1 -1
- package/dist/{chunk-SCPCXNTB.js → chunk-TJOUAFJE.js} +1 -1
- package/dist/{chunk-VZGLBEAE.js → chunk-X2GNFJRC.js} +1 -1
- package/dist/{chunk-LZ6EGT4Y.js → chunk-XJPNW26S.js} +1 -1
- package/dist/{chunk-MTRFMGBO.js → chunk-ZHTQCAQ2.js} +1 -1
- package/dist/drag/drag.css +5 -56
- package/dist/drag/index.js +1 -1
- package/dist/easel/index.js +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/screen/components/AddBlockRow.js +1 -1
- package/dist/screen/components/AddSidePanel.js +1 -1
- package/dist/screen/components/MediaSidePanel.js +1 -1
- package/dist/screen/components/NodeContextMenu.d.ts +1 -1
- package/dist/screen/components/NodeContextMenu.js +1 -1
- package/dist/screen/components/ScreenChrome.js +1 -1
- package/dist/screen/components/ScreenMount.d.ts +1 -1
- package/dist/screen/components/ScreenMount.js +1 -1
- package/dist/screen/components/ScreenStoreProvider.d.ts +1 -1
- package/dist/screen/components/ScreenStoreProvider.js +1 -1
- package/dist/screen/components/SectionScreenShell.js +15 -15
- package/dist/screen/components/usePartBridge.d.ts +1 -1
- package/dist/screen/components/usePartBridge.js +1 -1
- package/dist/screen/index.d.ts +1 -1
- package/dist/screen/index.js +1 -1
- package/dist/screen/lib/key-scope.js +1 -1
- package/dist/screen/lib/puck/style-clipboard.d.ts +1 -1
- package/dist/screen/lib/puck/use-section-ops.js +1 -1
- package/dist/screen/lib/screen-parts.d.ts +1 -1
- package/dist/screen/lib/screen-parts.js +1 -1
- package/dist/screen/screen.css +9 -42
- package/dist/tree/index.d.ts +8 -4
- package/dist/tree/index.js +1 -1
- package/dist/tree/tree.css +6 -3
- package/dist/{types-BqGnUVX5.d.ts → types-BLRK6_JO.d.ts} +7 -0
- package/package.json +3 -3
- package/dist/chunk-2GLQRNYT.js +0 -16
- package/dist/chunk-LUSM3QTY.js +0 -5
- package/dist/chunk-UFY6RNMT.js +0 -9
- package/dist/chunk-YIKMVF24.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
export{editorRootFocus,useEaselKeyTarget,useEaselUndoKeys}from"../../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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";
|
package/dist/screen/screen.css
CHANGED
|
@@ -337,51 +337,18 @@
|
|
|
337
337
|
box-shadow: inset 2px 0 0 var(--sf-accent);
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
-
/* ── Left panel: section tree
|
|
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 {
|
package/dist/tree/index.d.ts
CHANGED
|
@@ -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-
|
|
3
|
-
export { f as TreeRowFold, T as TreeRowMark } from '../types-
|
|
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
|
-
/**
|
|
13
|
-
|
|
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
|
package/dist/tree/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LayersTree,Subtree,TREE_DRAG_HINT,TreeEmptySlot,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-
|
|
1
|
+
export{LayersTree,Subtree,TREE_DRAG_HINT,TreeEmptySlot,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-4JSBIW5H.js";import"../chunk-K56YDHYQ.js";
|
package/dist/tree/tree.css
CHANGED
|
@@ -22,9 +22,12 @@
|
|
|
22
22
|
.es-tree {
|
|
23
23
|
flex: 1;
|
|
24
24
|
overflow-y: auto;
|
|
25
|
-
/*
|
|
26
|
-
|
|
27
|
-
|
|
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
|
+
"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.
|
|
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.
|
|
530
|
+
"efficient-shell": "^7.21.0",
|
|
531
531
|
"esbuild": "^0.27.0",
|
|
532
532
|
"jsdom": "^26.1.0",
|
|
533
533
|
"react": "^18.2.0",
|
package/dist/chunk-2GLQRNYT.js
DELETED
|
@@ -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};
|
package/dist/chunk-LUSM3QTY.js
DELETED
|
@@ -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};
|
package/dist/chunk-UFY6RNMT.js
DELETED
|
@@ -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};
|
package/dist/chunk-YIKMVF24.js
DELETED
|
@@ -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};
|