efficient-easel 0.103.0 → 0.104.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/README.md +33 -6
- package/dist/chunk-4EUWOGZF.js +1 -0
- package/dist/chunk-5D2XAZKH.js +62 -0
- package/dist/chunk-7755VWRT.js +4 -0
- package/dist/chunk-7GVLSNFW.js +1 -0
- package/dist/chunk-A2LFBOUF.js +1 -0
- package/dist/{chunk-Z3KBLIEH.js → chunk-BBRY7KI4.js} +1 -1
- package/dist/chunk-BVN33R76.js +1 -0
- package/dist/chunk-D6324C3E.js +5 -0
- package/dist/chunk-ERR437B5.js +1 -0
- package/dist/chunk-HMWJB3HF.js +1 -0
- package/dist/{chunk-KDYIMJTZ.js → chunk-KCOBHPN6.js} +1 -1
- package/dist/chunk-KVNRNDUC.js +1 -0
- package/dist/chunk-LEGAPYPC.js +1 -0
- package/dist/chunk-LRTIMWZG.js +2 -0
- package/dist/{chunk-LG436UTD.js → chunk-LXEOVUAV.js} +1 -1
- package/dist/{chunk-66ICOE3I.js → chunk-NEQIEYYO.js} +1 -1
- package/dist/{chunk-6TZTKAB5.js → chunk-O7Q4DDJT.js} +1 -1
- package/dist/chunk-PYNQRX56.js +4 -0
- package/dist/{chunk-6UJ3Y6FC.js → chunk-QCBWT2XE.js} +1 -1
- package/dist/{chunk-7MU3RJ6S.js → chunk-QDEZQ5A6.js} +1 -1
- package/dist/chunk-QOPY2LQM.js +1 -0
- package/dist/{chunk-AKFJK65Z.js → chunk-R2MUSGPS.js} +1 -1
- package/dist/chunk-RSCMJIWS.js +1 -0
- package/dist/{chunk-GXN65JMA.js → chunk-TTENU2HX.js} +1 -1
- package/dist/chunk-UB7JVPK4.js +1 -0
- package/dist/{chunk-MSBF7IW3.js → chunk-YODRYAZX.js} +2 -2
- package/dist/chunk-Z6BAZFSW.js +2 -0
- package/dist/chunk-ZOJEFIP4.js +1 -0
- package/dist/screen/components/AddBlockRow.js +1 -1
- package/dist/screen/components/AddSidePanel.js +1 -1
- package/dist/screen/components/MediaSidePanel.d.ts +2 -1
- package/dist/screen/components/MediaSidePanel.js +1 -1
- package/dist/screen/components/NodeContextMenu.d.ts +47 -2
- package/dist/screen/components/NodeContextMenu.js +1 -1
- package/dist/screen/components/PageEditGuardNotices.js +1 -1
- package/dist/screen/components/ScreenChrome.js +1 -1
- package/dist/screen/components/ScreenDocumentContext.d.ts +1 -0
- package/dist/screen/components/ScreenDocumentContext.js +1 -1
- package/dist/screen/components/ScreenMount.d.ts +4 -1
- package/dist/screen/components/ScreenMount.js +1 -1
- package/dist/screen/components/ScreenStoreProvider.d.ts +3 -0
- package/dist/screen/components/ScreenStoreProvider.js +1 -1
- package/dist/screen/components/SectionScreenShell.js +16 -16
- package/dist/screen/components/usePartBridge.d.ts +3 -0
- package/dist/screen/components/usePartBridge.js +1 -1
- package/dist/screen/index.d.ts +5 -2
- package/dist/screen/index.js +1 -1
- package/dist/screen/lib/admin-bridge.d.ts +2 -0
- package/dist/screen/lib/admin-bridge.js +1 -1
- package/dist/screen/lib/backend-error.d.ts +20 -5
- package/dist/screen/lib/backend-error.js +1 -1
- package/dist/screen/lib/document-addressing.d.ts +1 -0
- package/dist/screen/lib/failure.d.ts +6 -2
- package/dist/screen/lib/failure.js +1 -1
- package/dist/screen/lib/host-inbound.js +1 -1
- package/dist/screen/lib/host.d.ts +2 -1
- package/dist/screen/lib/load-error.d.ts +9 -3
- package/dist/screen/lib/load-error.js +1 -1
- package/dist/screen/lib/media-panel.d.ts +81 -17
- package/dist/screen/lib/media-panel.js +1 -1
- package/dist/screen/lib/media-picker.d.ts +13 -1
- package/dist/screen/lib/media-picker.js +1 -1
- package/dist/screen/lib/page-lock.d.ts +45 -1
- package/dist/screen/lib/page-lock.js +1 -1
- package/dist/screen/lib/puck/content-tree.d.ts +20 -1
- package/dist/screen/lib/puck/content-tree.js +1 -1
- package/dist/screen/lib/puck/section-doc.js +1 -1
- package/dist/screen/lib/puck/slot-child-name.d.ts +18 -3
- package/dist/screen/lib/puck/slot-child-name.js +1 -1
- package/dist/screen/lib/puck/use-section-ops.d.ts +6 -0
- package/dist/screen/lib/puck/use-section-ops.js +1 -1
- package/dist/screen/lib/screen-parts.d.ts +150 -4
- package/dist/screen/lib/screen-parts.js +1 -1
- package/dist/screen/lib/section-templates.d.ts +25 -1
- package/dist/screen/lib/section-templates.js +1 -1
- package/dist/screen/lib/session-context.d.ts +5 -1
- package/dist/screen/lib/session-context.js +1 -1
- package/dist/screen/lib/session.d.ts +58 -5
- package/dist/screen/lib/session.js +1 -1
- package/dist/screen/words.d.ts +24 -1
- package/dist/screen/words.js +1 -1
- package/dist/strings/catalogue.js +1 -1
- package/dist/strings/index.js +1 -1
- package/dist/tree/index.d.ts +4 -142
- package/dist/types-DJDBtdB2.d.ts +143 -0
- package/package.json +1 -1
- package/dist/chunk-3M3A3DN2.js +0 -4
- package/dist/chunk-4MXFKJUY.js +0 -1
- package/dist/chunk-6FY3PZS3.js +0 -1
- package/dist/chunk-A7ZJII7O.js +0 -1
- package/dist/chunk-AJBJ74ME.js +0 -1
- package/dist/chunk-AKZWUV5Z.js +0 -1
- package/dist/chunk-F6CCTEIX.js +0 -1
- package/dist/chunk-FUDHI5I4.js +0 -1
- package/dist/chunk-HDKTR5TZ.js +0 -62
- package/dist/chunk-HMX55DYT.js +0 -1
- package/dist/chunk-HWW4XJOH.js +0 -1
- package/dist/chunk-NBJ2YY6Y.js +0 -4
- package/dist/chunk-OORDMLL4.js +0 -5
- package/dist/chunk-Q3SQBNJB.js +0 -1
- package/dist/chunk-VV5ADNBR.js +0 -1
- package/dist/chunk-YJXEHK6I.js +0 -2
- package/dist/chunk-ZWK3CBRU.js +0 -1
- package/dist/chunk-ZZ7VLIHQ.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ComponentType, ReactNode } from 'react';
|
|
3
|
-
import { H as HostPickedMedia } from '../../host-DJ8Gzsx7.js';
|
|
3
|
+
import { H as HostPickedMedia, E as EaselHost } from '../../host-DJ8Gzsx7.js';
|
|
4
4
|
import '../../blocks/index.js';
|
|
5
5
|
import '../../types-E3HrTPg2.js';
|
|
6
6
|
import '../../data/index.js';
|
|
@@ -9,6 +9,8 @@ import '../../resolve-D68pb3Bx.js';
|
|
|
9
9
|
import '../../plan-DChbUXdS.js';
|
|
10
10
|
import './document-contract.js';
|
|
11
11
|
import './session.js';
|
|
12
|
+
import './backend-error.js';
|
|
13
|
+
import '../../edit-lock/index.js';
|
|
12
14
|
import './host-chrome.js';
|
|
13
15
|
import './links/link-filters.js';
|
|
14
16
|
import '../../LinkPicker-W2Rtxetz.js';
|
|
@@ -17,7 +19,6 @@ import './section-template-types.js';
|
|
|
17
19
|
import './puck/content-tree.js';
|
|
18
20
|
import './document-switch.js';
|
|
19
21
|
import '../../engine-DBxp_v6B.js';
|
|
20
|
-
import '../../edit-lock/index.js';
|
|
21
22
|
import './admin-bridge.js';
|
|
22
23
|
|
|
23
24
|
/**
|
|
@@ -40,13 +41,23 @@ import './admin-bridge.js';
|
|
|
40
41
|
* • BROWSING — the rail opens the "media" left view. The host's panel shows
|
|
41
42
|
* the library to look through, upload to, tidy. `pick` is null.
|
|
42
43
|
* • PICKING — a field calls `requestMediaPick` (lib/media-picker). With
|
|
43
|
-
* a panel here, that becomes
|
|
44
|
-
* panel over the left panel in pick mode, the host's panel
|
|
45
|
-
* and the field gets the media. Leaving pick mode any other
|
|
46
|
-
* panel's Cancel, a rail button, closing the panel) settles it
|
|
44
|
+
* a panel here, that becomes a request to THIS provider's pick store: the
|
|
45
|
+
* chrome lays the panel over the left panel in pick mode, the host's panel
|
|
46
|
+
* calls `onPick`, and the field gets the media. Leaving pick mode any other
|
|
47
|
+
* way (the panel's Cancel, a rail button, closing the panel) settles it
|
|
48
|
+
* `null`.
|
|
47
49
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* ONE PENDING PICK PER PROVIDER (0.103.0). Until then the pending pick was
|
|
51
|
+
* module state, one for the page — right while one editor is mounted, and
|
|
52
|
+
* wrong the moment two are (the admin's website editor and campaign designer):
|
|
53
|
+
* a field in one laid the other's panel over its own left panel too, and a
|
|
54
|
+
* Cancel in either settled the other's field. Each provider now keeps its own
|
|
55
|
+
* {@link MediaPickStore}; the chrome under it reads that one, and a field's
|
|
56
|
+
* request finds it by the HOST the field asks through (`requestMediaPick(host,
|
|
57
|
+
* …)` — one host per mounted editor, lib/host), so no prop or context has to
|
|
58
|
+
* reach the field's click handler. A request whose host no provider sits under
|
|
59
|
+
* goes to the provider mounted last, which is exactly what the module state
|
|
60
|
+
* answered, so one mounted editor behaves as it always did.
|
|
50
61
|
*/
|
|
51
62
|
/** What a field asked the panel for. `file` is a file dropped straight on the
|
|
52
63
|
* field: the host uploads it and picks it without waiting for a click. */
|
|
@@ -57,6 +68,14 @@ interface MediaPickRequest {
|
|
|
57
68
|
/** The field's label, e.g. "Background image". */
|
|
58
69
|
title: string;
|
|
59
70
|
file?: File | null;
|
|
71
|
+
/**
|
|
72
|
+
* The field's own terms for its host's panel (0.103.0), handed to it
|
|
73
|
+
* untouched — the campaign designer's logo field asks for `{ bakeableOnly:
|
|
74
|
+
* true }`. The screen reads none of it. Absent when the field gave none;
|
|
75
|
+
* the window's `open-media-picker` message never carries it (its shape is
|
|
76
|
+
* the website's protocol).
|
|
77
|
+
*/
|
|
78
|
+
options?: Record<string, unknown>;
|
|
60
79
|
}
|
|
61
80
|
/** The props the host's panel component is drawn with. */
|
|
62
81
|
interface MediaPanelProps {
|
|
@@ -67,28 +86,73 @@ interface MediaPanelProps {
|
|
|
67
86
|
}
|
|
68
87
|
/** The host's media library, as a component the editor draws in its panel. */
|
|
69
88
|
type MediaPanelComponent = ComponentType<MediaPanelProps>;
|
|
89
|
+
/**
|
|
90
|
+
* One editor's pending pick (0.103.0): what its panel is choosing for, and who
|
|
91
|
+
* waits on the answer. A {@link MediaPanelProvider} makes one for itself.
|
|
92
|
+
*/
|
|
93
|
+
interface MediaPickStore {
|
|
94
|
+
/** The field the panel is choosing for, or null while nothing is. */
|
|
95
|
+
current(): MediaPickRequest | null;
|
|
96
|
+
/**
|
|
97
|
+
* Open pick mode for one field; resolves with the media chosen, or null. A
|
|
98
|
+
* second field asking before the first is answered takes the panel over,
|
|
99
|
+
* and the first resolves null — one panel answers one field.
|
|
100
|
+
*/
|
|
101
|
+
request(request: MediaPickRequest): Promise<HostPickedMedia | null>;
|
|
102
|
+
/** Answer the field the panel is choosing for (`media` null: no choice). A
|
|
103
|
+
* stale id — an answer for a request already superseded — does nothing. */
|
|
104
|
+
settle(requestId: string, media: HostPickedMedia | null): void;
|
|
105
|
+
/** Leave pick mode without a choice, whatever is being chosen. */
|
|
106
|
+
cancel(): void;
|
|
107
|
+
subscribe(listener: () => void): () => void;
|
|
108
|
+
}
|
|
109
|
+
declare function createMediaPickStore(): MediaPickStore;
|
|
70
110
|
/** Supply the host's panel to the editor below. `panel` null keeps the old
|
|
71
|
-
* window: fields ask the host with `open-media-picker`.
|
|
111
|
+
* window: fields ask the host with `open-media-picker`. Sit it under the
|
|
112
|
+
* editor's `EaselHostProvider`, as the website's frame does: that host is
|
|
113
|
+
* how a field's request finds this provider among several. */
|
|
72
114
|
declare function MediaPanelProvider({ panel, children }: {
|
|
73
115
|
panel: MediaPanelComponent | null;
|
|
74
116
|
children: ReactNode;
|
|
75
117
|
}): react.JSX.Element;
|
|
76
118
|
/** The host's panel for the editor this renders in, or null. */
|
|
77
119
|
declare function useMediaPanel(): MediaPanelComponent | null;
|
|
78
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* The pick store a field's request through `host` goes to, or null when that
|
|
122
|
+
* editor has no panel and the host is asked with the window's message: the
|
|
123
|
+
* provider under that host (the last one, if two share it), else the page's
|
|
124
|
+
* provider, as the one module-wide store answered before 0.103.0.
|
|
125
|
+
*/
|
|
126
|
+
declare function mediaPickStoreFor(host: EaselHost): MediaPickStore | null;
|
|
127
|
+
/** Whether a field's request goes to the panel rather than to the host — of
|
|
128
|
+
* the page's provider, the one mounted last. */
|
|
79
129
|
declare function hasMediaPanel(): boolean;
|
|
80
130
|
/**
|
|
81
|
-
* Open the panel in pick mode for one
|
|
82
|
-
*
|
|
83
|
-
*
|
|
131
|
+
* Open the page's panel (the provider mounted last) in pick mode for one
|
|
132
|
+
* field; resolves with the media chosen, or null. A field asks through
|
|
133
|
+
* `requestMediaPick`, which finds the panel of ITS editor instead.
|
|
84
134
|
*/
|
|
85
135
|
declare function requestPanelPick(request: MediaPickRequest): Promise<HostPickedMedia | null>;
|
|
86
|
-
/** Answer the field
|
|
136
|
+
/** Answer the field a panel is choosing for (`media` null: no choice), in
|
|
137
|
+
* whichever editor asked: a request id names one field of one editor. A
|
|
87
138
|
* stale id — an answer for a request already superseded — does nothing. */
|
|
88
139
|
declare function settlePanelPick(requestId: string, media: HostPickedMedia | null): void;
|
|
89
|
-
/** Leave pick mode without a choice, whatever is being chosen.
|
|
140
|
+
/** Leave the page's pick mode without a choice, whatever is being chosen.
|
|
141
|
+
* Under a provider, `useCancelPanelPick` leaves that editor's. */
|
|
90
142
|
declare function cancelPanelPick(): void;
|
|
91
|
-
/** The field the panel is choosing for, or null while nothing is
|
|
143
|
+
/** The field the panel is choosing for, or null while nothing is — in the
|
|
144
|
+
* editor this renders in. */
|
|
92
145
|
declare function usePanelPick(): MediaPickRequest | null;
|
|
146
|
+
/** Leave THIS editor's pick mode without a choice (0.103.0): a stable
|
|
147
|
+
* function, for the chrome's Escape, rail and panel-closed paths. */
|
|
148
|
+
declare function useCancelPanelPick(): () => void;
|
|
149
|
+
/**
|
|
150
|
+
* A change of selection leaves pick mode (0.103.0, `ScreenParts
|
|
151
|
+
* .pickFollowsSelection`): with `follows`, the field still waiting when
|
|
152
|
+
* `selection` moves is settled with null, as a Cancel would — the field that
|
|
153
|
+
* asked belongs to the block that is no longer selected. Without it, nothing:
|
|
154
|
+
* a pick outlives a selection, as it always has.
|
|
155
|
+
*/
|
|
156
|
+
declare function usePickFollowsSelection(follows: boolean, selection: unknown): void;
|
|
93
157
|
|
|
94
|
-
export { type MediaPanelComponent, type MediaPanelProps, MediaPanelProvider, type MediaPickRequest, cancelPanelPick, hasMediaPanel, requestPanelPick, settlePanelPick, useMediaPanel, usePanelPick };
|
|
158
|
+
export { type MediaPanelComponent, type MediaPanelProps, MediaPanelProvider, type MediaPickRequest, type MediaPickStore, cancelPanelPick, createMediaPickStore, hasMediaPanel, mediaPickStoreFor, requestPanelPick, settlePanelPick, useCancelPanelPick, useMediaPanel, usePanelPick, usePickFollowsSelection };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{MediaPanelProvider,cancelPanelPick,hasMediaPanel,requestPanelPick,settlePanelPick,useMediaPanel,usePanelPick}from"../../chunk-
|
|
1
|
+
export{MediaPanelProvider,cancelPanelPick,createMediaPickStore,hasMediaPanel,mediaPickStoreFor,requestPanelPick,settlePanelPick,useCancelPanelPick,useMediaPanel,usePanelPick,usePickFollowsSelection}from"../../chunk-Z6BAZFSW.js";import"../../chunk-R5ZVNJLJ.js";
|
|
@@ -8,6 +8,8 @@ import '../../resolve-D68pb3Bx.js';
|
|
|
8
8
|
import '../../plan-DChbUXdS.js';
|
|
9
9
|
import './document-contract.js';
|
|
10
10
|
import './session.js';
|
|
11
|
+
import './backend-error.js';
|
|
12
|
+
import '../../edit-lock/index.js';
|
|
11
13
|
import './host-chrome.js';
|
|
12
14
|
import './links/link-filters.js';
|
|
13
15
|
import '../../LinkPicker-W2Rtxetz.js';
|
|
@@ -16,7 +18,6 @@ import './section-template-types.js';
|
|
|
16
18
|
import './puck/content-tree.js';
|
|
17
19
|
import './document-switch.js';
|
|
18
20
|
import '../../engine-DBxp_v6B.js';
|
|
19
|
-
import '../../edit-lock/index.js';
|
|
20
21
|
import './admin-bridge.js';
|
|
21
22
|
|
|
22
23
|
/**
|
|
@@ -28,6 +29,10 @@ import './admin-bridge.js';
|
|
|
28
29
|
* • A host that supplies a MEDIA PANEL (lib/media-panel — the admin
|
|
29
30
|
* portal, from efficient-web 0.2.0) answers in the editor's own left panel:
|
|
30
31
|
* the request opens that panel in pick mode, and nothing leaves the editor.
|
|
32
|
+
* The panel is the one of the editor the field asks through: `host` is
|
|
33
|
+
* that editor's (one per mounted editor), and the provider under it keeps
|
|
34
|
+
* its own pending pick (0.103.0), so two editors mounted in one page never
|
|
35
|
+
* answer each other's fields.
|
|
31
36
|
* • Any other host is asked to open its picker window, over the
|
|
32
37
|
* request/response protocol below. The picker UI lives in the host, so
|
|
33
38
|
* this module owns the EDITOR half:
|
|
@@ -54,11 +59,18 @@ interface PickedMedia {
|
|
|
54
59
|
* Choose media for a slot; resolves with the chosen media, or null if the user
|
|
55
60
|
* cancelled (or there's no host to ask). `file` is a file dropped straight on
|
|
56
61
|
* the slot — the host uploads it and picks it immediately.
|
|
62
|
+
*
|
|
63
|
+
* `options` (0.103.0) are the field's own terms for its host's PANEL, handed to
|
|
64
|
+
* it untouched on the request (`MediaPickRequest.options`) — the campaign
|
|
65
|
+
* designer's logo field asks for `{ bakeableOnly: true }`. The window's
|
|
66
|
+
* `open-media-picker` message carries none: its shape is the website's
|
|
67
|
+
* protocol, mirrored by the storefront.
|
|
57
68
|
*/
|
|
58
69
|
declare function requestMediaPick(host: EaselHost, opts: {
|
|
59
70
|
accept: string;
|
|
60
71
|
title: string;
|
|
61
72
|
file?: File | null;
|
|
73
|
+
options?: Record<string, unknown>;
|
|
62
74
|
}): Promise<PickedMedia | null>;
|
|
63
75
|
/** Settle a pending pick (called by the central message listener on the admin's
|
|
64
76
|
* reply). Unknown ids — a stale reply, or a pick meant for another editor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{requestMediaPick,resolveMediaPick}from"../../chunk-
|
|
1
|
+
export{requestMediaPick,resolveMediaPick}from"../../chunk-UB7JVPK4.js";import"../../chunk-Z6BAZFSW.js";import"../../chunk-R5ZVNJLJ.js";
|
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
import { EditLock } from '../../edit-lock/index.js';
|
|
2
|
+
import { EaselSession } from './session.js';
|
|
3
|
+
import '../../blocks/index.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../../types-E3HrTPg2.js';
|
|
6
|
+
import '../../data/index.js';
|
|
7
|
+
import '../../types-41704JE4.js';
|
|
8
|
+
import '../../resolve-D68pb3Bx.js';
|
|
9
|
+
import '../../plan-DChbUXdS.js';
|
|
10
|
+
import './backend-error.js';
|
|
11
|
+
import './host-chrome.js';
|
|
12
|
+
import './links/link-filters.js';
|
|
13
|
+
import '../../LinkPicker-W2Rtxetz.js';
|
|
14
|
+
import './document-contract.js';
|
|
15
|
+
import './document-hooks.js';
|
|
16
|
+
import './section-template-types.js';
|
|
17
|
+
import './puck/content-tree.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The storefront editor's binding of the SHARED edit lock.
|
|
21
|
+
*
|
|
22
|
+
* The rules themselves — who may write the open document, what a failed claim /
|
|
23
|
+
* take-over / heartbeat means, how to read a refused save, and the claim driver
|
|
24
|
+
* that keeps a held write from being lost — live in `efficient-easel/edit-lock` and
|
|
25
|
+
* are imported straight from there by the code that needs them. This file used
|
|
26
|
+
* to be a 334-line copy of them; the campaign designer in efficient-admin-portal
|
|
27
|
+
* carried a second, drifted copy of the same rules. Card 11161 merged the two
|
|
28
|
+
* into the shared package, and this is all that is left here: the TWO facts that
|
|
29
|
+
* are genuinely this repo's.
|
|
30
|
+
*
|
|
31
|
+
* 1. what a failure looks like HERE (lib/failure: this repo's
|
|
32
|
+
* `ApiError`, or the editor backend's `WebsiteBackendError`), and
|
|
33
|
+
* 2. the `code` this backend puts in a refused-save body for a PAGE.
|
|
34
|
+
*
|
|
35
|
+
* Nothing else belongs in this file. A rule a second editor would also need goes
|
|
36
|
+
* in the shared module, or the copy starts growing back.
|
|
37
|
+
*/
|
|
2
38
|
|
|
3
39
|
declare const pageEditLock: EditLock;
|
|
40
|
+
/**
|
|
41
|
+
* The lock's rules for one editor's session (0.103.0): {@link pageEditLock}
|
|
42
|
+
* itself for a session that reads its host's errors as the page does — every
|
|
43
|
+
* session before 0.103.0, and the website's still — and, for a session that
|
|
44
|
+
* brought its own reading (`hostFailures`), the same rules reading a failure
|
|
45
|
+
* that session's way. Made once per session.
|
|
46
|
+
*/
|
|
47
|
+
declare function editLockOf(session: EaselSession): EditLock;
|
|
4
48
|
|
|
5
|
-
export { pageEditLock };
|
|
49
|
+
export { editLockOf, pageEditLock };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{pageEditLock}from"../../chunk-
|
|
1
|
+
export{editLockOf,pageEditLock}from"../../chunk-ZOJEFIP4.js";import"../../chunk-4EUWOGZF.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-JUQ6YJCG.js";import"../../chunk-RE4LP46F.js";
|
|
@@ -27,6 +27,25 @@ type SlotConfigView = {
|
|
|
27
27
|
* not know has no slots — and cannot render either, so there is nothing to walk.
|
|
28
28
|
*/
|
|
29
29
|
declare function slotFieldsOf(config: SlotConfigView, type: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* What a component type's config ALLOWS of the two actions that make another
|
|
32
|
+
* node or take one away (0.103.0): its `permissions.duplicate` and
|
|
33
|
+
* `permissions.delete`, each true unless the config says false — the reading
|
|
34
|
+
* Puck gave a config that carried none. The campaign designer's Product keeps
|
|
35
|
+
* its Price line this way (`{ delete: false, duplicate: false }`).
|
|
36
|
+
*
|
|
37
|
+
* The screen's tree rows, its menu and the inspector head it hands this to
|
|
38
|
+
* (`ScreenInspectorPanelProps.nodeActions`) all ask HERE, so the three cannot
|
|
39
|
+
* come to disagree about one block. Only the config's own, never the
|
|
40
|
+
* easel-wide permissions the edit lock sets: a document somebody else holds is
|
|
41
|
+
* refused at the writes, as it always was, and draws the rows it drew.
|
|
42
|
+
*
|
|
43
|
+
* A type the config does not know allows both, as one with no `permissions`.
|
|
44
|
+
*/
|
|
45
|
+
declare function blockNodeActions(config: SlotConfigView, type: string): {
|
|
46
|
+
duplicate: boolean;
|
|
47
|
+
delete: boolean;
|
|
48
|
+
};
|
|
30
49
|
/**
|
|
31
50
|
* A slot child, addressed the way the Layers tree selects it: the node, the
|
|
32
51
|
* compound zone key "<parentId>:<slotName>" Puck's ops take, and its index in
|
|
@@ -193,4 +212,4 @@ declare function missingPinnedTypes(live: ReadonlyArray<{
|
|
|
193
212
|
type?: string;
|
|
194
213
|
}>): string[];
|
|
195
214
|
|
|
196
|
-
export { FOOTER_TYPE, HEADER_TYPE, type NodeLocation, ROOT_ZONE, type SlotChild, type SlotConfigView, TREE_MAX_DEPTH, type TreeItem, childSlotsOf, locateNode, missingPinnedTypes, nestsInTree, newNodeId, pinnedDuplicateIds, pinnedDuplicateIndices, slotFieldsOf };
|
|
215
|
+
export { FOOTER_TYPE, HEADER_TYPE, type NodeLocation, ROOT_ZONE, type SlotChild, type SlotConfigView, TREE_MAX_DEPTH, type TreeItem, blockNodeActions, childSlotsOf, locateNode, missingPinnedTypes, nestsInTree, newNodeId, pinnedDuplicateIds, pinnedDuplicateIndices, slotFieldsOf };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotFieldsOf}from"../../../chunk-
|
|
1
|
+
export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,blockNodeActions,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotFieldsOf}from"../../../chunk-7GVLSNFW.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-
|
|
1
|
+
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-R2MUSGPS.js";import"../../../chunk-7GVLSNFW.js";
|
|
@@ -126,7 +126,19 @@ declare function slotChildName(child: SlotChild, wheelName?: (code: string) => s
|
|
|
126
126
|
* needs at least one character between a pair, so a name that is non-empty
|
|
127
127
|
* cannot strip to nothing and be renamed into its component's label.
|
|
128
128
|
*/
|
|
129
|
-
declare function slotChildRowName(child:
|
|
129
|
+
declare function slotChildRowName<N extends SlotChild>(child: N, compLabel: (type: string) => string, plainText: (copy: string) => string, wheelName?: (code: string) => string | undefined, rowName?: RowNameRule<N>): string;
|
|
130
|
+
/**
|
|
131
|
+
* THE LAYER'S LAST WORD (0.103.0) — `ScreenBlockLook.rowName`
|
|
132
|
+
* (lib/screen-parts), the rung a layer may stand above the whole precedence:
|
|
133
|
+
* handed the node, the level it is named at and what the rule here answered,
|
|
134
|
+
* it answers the row's name. The campaign designer names its rows by its own
|
|
135
|
+
* labels, and needs none of the website's rungs.
|
|
136
|
+
*
|
|
137
|
+
* An argument and not a rung written here, for the reason the grammar and the
|
|
138
|
+
* catalog are: this module has no layer. Absent, the rule here is the name, as
|
|
139
|
+
* it was before the member existed.
|
|
140
|
+
*/
|
|
141
|
+
type RowNameRule<N extends SlotChild = SlotChild> = (node: N, level: "section" | "block", fallback: string) => string;
|
|
130
142
|
/**
|
|
131
143
|
* WHICH PROP A RENAME WRITES — the write side of the rule above, and here for
|
|
132
144
|
* the reason the read side is: naming a slot child has ONE home (card 66194).
|
|
@@ -180,7 +192,10 @@ declare function slotChildRenameProp(fields: Record<string, unknown> | undefined
|
|
|
180
192
|
*
|
|
181
193
|
* `fallback` is the caller's type-level label (`sectionLabel(type)`), which is
|
|
182
194
|
* what every published page reads today and what an unnamed node keeps reading.
|
|
195
|
+
*
|
|
196
|
+
* `rowName` is the layer's last word ({@link RowNameRule}), asked at the
|
|
197
|
+
* SECTION level with what this rung answered.
|
|
183
198
|
*/
|
|
184
|
-
declare function rootRowName(node:
|
|
199
|
+
declare function rootRowName<N extends SlotChild>(node: N, fallback: string, rowName?: RowNameRule<N>): string;
|
|
185
200
|
|
|
186
|
-
export { type SlotChild, rootRowName, slotChildName, slotChildRenameProp, slotChildRowName };
|
|
201
|
+
export { type RowNameRule, type SlotChild, rootRowName, slotChildName, slotChildRenameProp, slotChildRowName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{rootRowName,slotChildName,slotChildRenameProp,slotChildRowName}from"../../../chunk-
|
|
1
|
+
export{rootRowName,slotChildName,slotChildRenameProp,slotChildRowName}from"../../../chunk-QOPY2LQM.js";import"../../../chunk-DUVRZ456.js";import"../../../chunk-6W7WLPZH.js";
|
|
@@ -80,6 +80,12 @@ type SectionOpsOptions = {
|
|
|
80
80
|
* un-fix that card.
|
|
81
81
|
*/
|
|
82
82
|
readOnly?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Resolve each node an op puts in (`easel.resolveNode`, trigger `"insert"`).
|
|
85
|
+
* Default: the layer's rule (`ScreenBlockRules.resolveOnInsert`), else
|
|
86
|
+
* false — no op resolves anything, as before 0.103.0.
|
|
87
|
+
*/
|
|
88
|
+
resolveOnInsert?: boolean;
|
|
83
89
|
};
|
|
84
90
|
declare function useSectionOps(options?: SectionOpsOptions): SectionOps;
|
|
85
91
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{useSectionOps}from"../../../chunk-
|
|
1
|
+
export{useSectionOps}from"../../../chunk-A2LFBOUF.js";import"../../../chunk-7GVLSNFW.js";import"../../../chunk-7755VWRT.js";import"../../../chunk-Z6BAZFSW.js";import"../../../chunk-R5ZVNJLJ.js";import"../../../chunk-P67FP7PG.js";import"../../../chunk-AELNNAFM.js";import"../../../chunk-BXZ6WLHC.js";import"../../../chunk-EOJNJCMJ.js";import"../../../chunk-ZFDCDJNZ.js";import"../../../chunk-ZNS7727Y.js";import"../../../chunk-3EDSDPIP.js";import"../../../chunk-QTLAVDJE.js";import"../../../chunk-YRLPFZW3.js";import"../../../chunk-KTVH2ZRL.js";import"../../../chunk-D2BCHTQR.js";import"../../../chunk-EWVJSRRY.js";import"../../../chunk-P6O363EE.js";import"../../../chunk-FPOKPNO4.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BZ5ASXOL.js";import"../../../chunk-67GNT6PF.js";import"../../../chunk-ZNCEOSXO.js";import"../../../chunk-L5KW4HG5.js";import"../../../chunk-KRXQM65X.js";import"../../../chunk-NKB3KVAB.js";
|
|
@@ -3,6 +3,7 @@ import { ReactNode, MouseEvent, ComponentType } from 'react';
|
|
|
3
3
|
import { Data } from '../../blocks/index.js';
|
|
4
4
|
import { D as DeviceOption } from '../../types-CqY85foL.js';
|
|
5
5
|
import { a as EaselRailItem } from '../../types-DWS-s9z-.js';
|
|
6
|
+
import { T as TreeRowMark } from '../../types-DJDBtdB2.js';
|
|
6
7
|
import { HostProduct } from './host-chrome.js';
|
|
7
8
|
import { EaselSession } from './session.js';
|
|
8
9
|
import { AddTarget } from './puck/add-target-types.js';
|
|
@@ -14,8 +15,10 @@ import '../../plan-DChbUXdS.js';
|
|
|
14
15
|
import '../../edit-lock/index.js';
|
|
15
16
|
import '../../panelWidths-D9hTLR25.js';
|
|
16
17
|
import '../../wordFit-D4S36PvB.js';
|
|
18
|
+
import '../../words-DgHcY5qB.js';
|
|
17
19
|
import './links/link-filters.js';
|
|
18
20
|
import '../../LinkPicker-W2Rtxetz.js';
|
|
21
|
+
import './backend-error.js';
|
|
19
22
|
import './document-contract.js';
|
|
20
23
|
import './document-hooks.js';
|
|
21
24
|
import './section-template-types.js';
|
|
@@ -143,6 +146,23 @@ interface ScreenInspectorPanelProps {
|
|
|
143
146
|
/** Hide the panel: the last button of its head. Omitted by a screen whose
|
|
144
147
|
* inspector is always in view. */
|
|
145
148
|
onHidePanel?: () => void;
|
|
149
|
+
/**
|
|
150
|
+
* Which of the head's two node actions the selected node's BLOCK allows
|
|
151
|
+
* (0.103.0): its config's `permissions.duplicate` and `permissions.delete`,
|
|
152
|
+
* each true unless the config says false — the answer the screen's own tree
|
|
153
|
+
* rows and menu honour, handed on so the head the layer draws honours it
|
|
154
|
+
* too, hiding or greying a refused one. With nothing selected both are true.
|
|
155
|
+
* Handed by the page screen; a layer that never reads it draws its head as
|
|
156
|
+
* it did.
|
|
157
|
+
*/
|
|
158
|
+
nodeActions?: ScreenNodeActions;
|
|
159
|
+
}
|
|
160
|
+
/** What a block's config allows of the two actions that make another node or
|
|
161
|
+
* take one away (`ComponentConfig.permissions`): `false` only where the config
|
|
162
|
+
* says so (lib/puck/content-tree `blockNodeActions`). */
|
|
163
|
+
interface ScreenNodeActions {
|
|
164
|
+
duplicate: boolean;
|
|
165
|
+
delete: boolean;
|
|
146
166
|
}
|
|
147
167
|
/**
|
|
148
168
|
* The document and its tree of rows, as far as a layer needs them to wire and
|
|
@@ -450,6 +470,17 @@ interface ScreenBlockRules {
|
|
|
450
470
|
* no host chose its blocks, every type is.
|
|
451
471
|
*/
|
|
452
472
|
blockIsOffered: (type: string, session?: EaselSession) => boolean;
|
|
473
|
+
/**
|
|
474
|
+
* Is a new block RESOLVED as it goes in (0.103.0)? With true, every insert
|
|
475
|
+
* the screen makes — a section, a block into a slot, a saved template, a
|
|
476
|
+
* seeded slot child — is followed by `easel.resolveNode(id, { trigger:
|
|
477
|
+
* 'insert' })`, as the campaign designer's own inserts are: the block's
|
|
478
|
+
* `resolveData` runs the moment it arrives (seeding its children, stamping a
|
|
479
|
+
* default), in the insert's own undo step, not at its first edit or the next
|
|
480
|
+
* time the document opens. Absent, false: an insert runs no resolver, as
|
|
481
|
+
* the website's never has.
|
|
482
|
+
*/
|
|
483
|
+
resolveOnInsert?: boolean;
|
|
453
484
|
}
|
|
454
485
|
/** The tier a node is NAMED at: a node at the top of the document is a section,
|
|
455
486
|
* a node inside another is a block. */
|
|
@@ -516,6 +547,41 @@ interface ScreenBlockLook {
|
|
|
516
547
|
* the screen read the products itself, so its effect keeps its place.
|
|
517
548
|
*/
|
|
518
549
|
useProducts: () => readonly HostProduct[] | null;
|
|
550
|
+
/**
|
|
551
|
+
* THE LAYER'S LAST WORD ON WHAT A LAYERS ROW SAYS (0.103.0): handed a node,
|
|
552
|
+
* the level it is named at and `fallback` — what the screen's own naming
|
|
553
|
+
* rule answered (lib/puck/slot-child-name: a name the node carries, else its
|
|
554
|
+
* type's label; a pinned row's word) — it answers the row's name. Asked of
|
|
555
|
+
* every node row the page screen's Layers tree draws, and of the menu's
|
|
556
|
+
* Select layer flyout, a block's canvas handle and a section's own list of
|
|
557
|
+
* its children in the inspector, which say the same words. The campaign
|
|
558
|
+
* designer's rows read its own labels ("Section 2", "Header"). Absent: the
|
|
559
|
+
* screen's rule, as it named every row.
|
|
560
|
+
*/
|
|
561
|
+
rowName?: (node: ScreenNode, level: ScreenNodeLevel, fallback: string) => string;
|
|
562
|
+
/**
|
|
563
|
+
* The quieter words a node row draws after its name (`TreeRow`'s
|
|
564
|
+
* `preview`): a node's own first words, so a tree of rows all called
|
|
565
|
+
* "Section" can be told apart by eye. The layer chooses and shortens them;
|
|
566
|
+
* nothing (null, undefined, "") draws nothing. Absent: no row has any.
|
|
567
|
+
*/
|
|
568
|
+
rowPreview?: (node: ScreenNode) => string | null | undefined;
|
|
569
|
+
/**
|
|
570
|
+
* The small marks a node row draws right after its name (`TreeRow`'s
|
|
571
|
+
* `marks`): a state the row only SHOWS, such as "Shown on phones only".
|
|
572
|
+
* Absent, or nothing handed back: no marks.
|
|
573
|
+
*/
|
|
574
|
+
rowMarks?: (node: ScreenNode) => ReadonlyArray<TreeRowMark> | null | undefined;
|
|
575
|
+
/**
|
|
576
|
+
* The layer's own buttons on a node row, by the node and where it sits:
|
|
577
|
+
* `TreeRowAction`s (efficient-easel/tree), placed between the screen's trash
|
|
578
|
+
* and its eye — the campaign designer's phone switch. Asked of every node
|
|
579
|
+
* row, a locked one and a pinned one too, so the layer decides; what comes
|
|
580
|
+
* back is placed as it is, and nothing draws nothing. A button that writes
|
|
581
|
+
* renders a component of the layer's that reaches the document itself.
|
|
582
|
+
* Absent: the screen's two, as it drew them.
|
|
583
|
+
*/
|
|
584
|
+
rowActions?: (node: ScreenNode, zone: string, index: number) => ReactNode;
|
|
519
585
|
}
|
|
520
586
|
/**
|
|
521
587
|
* THE DEVICES the canvas can be looked at on. That the top bar has a switch,
|
|
@@ -566,9 +632,15 @@ interface ScreenDevices {
|
|
|
566
632
|
* selected and where a pinned node's row is pressed, and shows what it is
|
|
567
633
|
* handed.
|
|
568
634
|
*
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
635
|
+
* And HOW THE LAYERS TREE FRAMES THEM (0.103.0): which node is pinned where it
|
|
636
|
+
* is not one type (`isFirst`, `isLast` — the campaign designer's Header and
|
|
637
|
+
* Footer are both sections, told apart by a prop), how the first one's row is
|
|
638
|
+
* drawn (`firstRow`) and what the band of sections between them looks like
|
|
639
|
+
* (`band`). Each is optional, and its default is the tree the website has.
|
|
640
|
+
*
|
|
641
|
+
* The same object for the life of a mount, its functions plain functions of
|
|
642
|
+
* what they are passed: the screen reads it anywhere, inside the callbacks and
|
|
643
|
+
* effects it does not rebuild for it.
|
|
572
644
|
*/
|
|
573
645
|
interface ScreenPinnedNodes {
|
|
574
646
|
/** The type of the node pinned FIRST: the band starts after it. Null when
|
|
@@ -576,6 +648,32 @@ interface ScreenPinnedNodes {
|
|
|
576
648
|
first: string | null;
|
|
577
649
|
/** The type of the node pinned LAST: the band ends at it. */
|
|
578
650
|
last: string | null;
|
|
651
|
+
/**
|
|
652
|
+
* Is this top-level node the one pinned first (0.103.0)? Where every node
|
|
653
|
+
* of the pinned type is not pinned — the campaign designer's Header is an
|
|
654
|
+
* `EmailSection` with `_region: "header"`, beside body sections of the same
|
|
655
|
+
* type — the layer says which. The page screen asks it wherever it tested
|
|
656
|
+
* a node against `first`: the band, the tree, the canvas handles, the menu.
|
|
657
|
+
* (The section screen, which holds one node, still asks the type.) The
|
|
658
|
+
* first node that answers yes is the one. Absent: a node of type `first`.
|
|
659
|
+
*/
|
|
660
|
+
isFirst?: (node: ScreenNode) => boolean;
|
|
661
|
+
/** …and the one pinned last (the Footer). Absent: a node of type `last`. */
|
|
662
|
+
isLast?: (node: ScreenNode) => boolean;
|
|
663
|
+
/**
|
|
664
|
+
* How the Layers tree draws the node pinned first (0.103.0). `"panel"`: a
|
|
665
|
+
* row of its own that opens the layer's panel for it (`panelOf`), drawn
|
|
666
|
+
* whether or not the document holds the node, and none of its children —
|
|
667
|
+
* the website's Header, whose settings are a panel. `"node"`: the node
|
|
668
|
+
* itself, selected by its row and folding open into its children, exactly
|
|
669
|
+
* as the node pinned last is drawn — the campaign designer's Header, a
|
|
670
|
+
* section with blocks in it. Absent: `"panel"`.
|
|
671
|
+
*/
|
|
672
|
+
firstRow?: "panel" | "node";
|
|
673
|
+
/** What the band of sections between the two pins looks like in the tree
|
|
674
|
+
* (0.103.0). Absent: a group label in the screen's words, the sections at
|
|
675
|
+
* the tree's own depth, and no row after them. */
|
|
676
|
+
band?: ScreenPinnedBand;
|
|
579
677
|
/** The type of the group of sections pinned first, ahead of everything. */
|
|
580
678
|
firstGroup: string | null;
|
|
581
679
|
/** …and of the one pinned last. */
|
|
@@ -593,6 +691,31 @@ interface ScreenPinnedNodes {
|
|
|
593
691
|
*/
|
|
594
692
|
panelOf: (type: string | null | undefined) => ScreenInspectorMode | null;
|
|
595
693
|
}
|
|
694
|
+
/**
|
|
695
|
+
* THE BAND, AS THE LAYERS TREE FRAMES IT (`ScreenPinnedNodes.band`, 0.103.0):
|
|
696
|
+
* the sections between the two pins. Where the band starts and ends is the
|
|
697
|
+
* screen's arithmetic either way; this is only how it is drawn.
|
|
698
|
+
*/
|
|
699
|
+
interface ScreenPinnedBand {
|
|
700
|
+
/** What the band is called. Absent: the screen's words, `screen.pageSections`
|
|
701
|
+
* ("Template · Home page") on a document with the edit guard and
|
|
702
|
+
* `screen.templateSections` ("Template · Template") on one without. */
|
|
703
|
+
label?: string;
|
|
704
|
+
/** The band is a ROW that folds, its sections under it — the campaign
|
|
705
|
+
* designer's Body. Absent or false: a group label over the sections, which
|
|
706
|
+
* sit at the tree's own depth. */
|
|
707
|
+
foldable?: boolean;
|
|
708
|
+
/** The band ends with an "Add section" row (`screen.addSection`) that opens
|
|
709
|
+
* Add at the end of the band, where the band's last "+" does. Hidden while
|
|
710
|
+
* the document is read-only, as every "+" is. Absent or false: the band ends
|
|
711
|
+
* at its last gap. */
|
|
712
|
+
addAtEnd?: boolean;
|
|
713
|
+
}
|
|
714
|
+
/** Is `node` the one the layer pins FIRST — its own test (`isFirst`), else a
|
|
715
|
+
* node of the `first` type, the test the screen has always made. */
|
|
716
|
+
declare function isPinnedFirst(pinned: ScreenPinnedNodes, node: ScreenNode): boolean;
|
|
717
|
+
/** …and LAST (`isLast`, else a node of the `last` type). */
|
|
718
|
+
declare function isPinnedLast(pinned: ScreenPinnedNodes, node: ScreenNode): boolean;
|
|
596
719
|
/**
|
|
597
720
|
* THE VIEW THE LEFT PANEL IS ON, from one mount to the next. That the panel
|
|
598
721
|
* has views, that one of them is current and that the choice is kept is the
|
|
@@ -622,6 +745,13 @@ interface ScreenParts {
|
|
|
622
745
|
* reads it (components/MediaSidePanel), through `useScreenOwnerName`.
|
|
623
746
|
*/
|
|
624
747
|
useOwnerName?: () => string;
|
|
748
|
+
/**
|
|
749
|
+
* The Layers head's context line — what the open document is, under the
|
|
750
|
+
* word "Layers" — as the hook the head calls (0.103.0). The campaign
|
|
751
|
+
* designer's names the campaign and its variant. Absent: the document's
|
|
752
|
+
* address, `/${slug}`, as the website's head has always said it.
|
|
753
|
+
*/
|
|
754
|
+
useDocumentLabel?: () => string;
|
|
625
755
|
/**
|
|
626
756
|
* The layer's wiring between the inspector and what the layer draws in the
|
|
627
757
|
* canvas, as ONE hook the screen calls where it used to hold that wiring: a
|
|
@@ -680,6 +810,15 @@ interface ScreenParts {
|
|
|
680
810
|
* website has it.
|
|
681
811
|
*/
|
|
682
812
|
saveSwitch?: boolean;
|
|
813
|
+
/**
|
|
814
|
+
* Does a field's media pick give way to a change of selection (0.103.0)? A
|
|
815
|
+
* field of the selected block asks the host's panel to choose (lib/
|
|
816
|
+
* media-panel); with true, selecting another block, or none, while it waits
|
|
817
|
+
* leaves pick mode and settles the field with null, as Cancel would — the
|
|
818
|
+
* campaign designer's picker belongs to the block it was opened for. Absent,
|
|
819
|
+
* false: a pick outlives a change of selection, as the website's does.
|
|
820
|
+
*/
|
|
821
|
+
pickFollowsSelection?: boolean;
|
|
683
822
|
/**
|
|
684
823
|
* THE CANVAS the screen frames: the engine's, as the layer dresses it — the
|
|
685
824
|
* layer's own sheet and theme in the frame, its own say over the outline
|
|
@@ -713,6 +852,9 @@ declare function useScreenParts(): ScreenParts;
|
|
|
713
852
|
/** The layer's bridges, run in the screen. With no layer, nothing runs. */
|
|
714
853
|
/** The name a panel's head gives what is being edited (`useOwnerName`). */
|
|
715
854
|
declare function useScreenOwnerName(): string;
|
|
855
|
+
/** The Layers head's context line (`useDocumentLabel`), or null with no
|
|
856
|
+
* layer's, and the screen says the document's address. */
|
|
857
|
+
declare function useScreenDocumentLabel(): string | null;
|
|
716
858
|
declare function useScreenBridges(inspector: ScreenInspector, tree: ScreenTree, canvas: ScreenCanvas, left: ScreenLeftPanel): ScreenBridges;
|
|
717
859
|
/** The layer's bridges for the screen that holds one node by itself. With no
|
|
718
860
|
* layer, nothing runs. */
|
|
@@ -738,6 +880,10 @@ declare function useScreenPinned(): ScreenPinnedNodes;
|
|
|
738
880
|
/** Whether the save pill is the autosave's switch. With no layer, it is, as
|
|
739
881
|
* the screen has always drawn it. */
|
|
740
882
|
declare function useScreenSaveSwitch(): boolean;
|
|
883
|
+
/** Leave a field's pick when `selection` changes, if the layer says a pick
|
|
884
|
+
* follows the selection (`pickFollowsSelection`). With no layer, a pick
|
|
885
|
+
* outlives a change of selection, as it always has. */
|
|
886
|
+
declare function useScreenPickFollowsSelection(selection: unknown): void;
|
|
741
887
|
/** The canvas the layer dresses for the screen to frame. With no layer, the
|
|
742
888
|
* engine's plain one. */
|
|
743
889
|
declare function useScreenCanvasFrame(): ComponentType;
|
|
@@ -745,4 +891,4 @@ declare function useScreenCanvasFrame(): ComponentType;
|
|
|
745
891
|
* engine's plain rows for the selection. */
|
|
746
892
|
declare function useScreenInspectorPanel(): ComponentType<ScreenInspectorPanelProps>;
|
|
747
893
|
|
|
748
|
-
export { type NodeDefaults, SELECTION_MODE, type ScreenBlockLook, type ScreenBlockRules, type ScreenBridges, type ScreenCanvas, type ScreenDevices, type ScreenDocumentOps, type ScreenInspector, type ScreenInspectorMode, type ScreenInspectorPanelProps, type ScreenLeftPanel, type ScreenLeftView, type ScreenLeftViewFrame, type ScreenLeftViewRules, type ScreenNewNode, type ScreenNode, type ScreenNodeLevel, type ScreenNodeMaker, type ScreenPartMode, type ScreenParts, ScreenPartsProvider, type ScreenPinnedNodes, type ScreenRailItem, type ScreenTree, type ScreenTreeFolds, type ScreenTreeRows, sameInspectorMode, useScreenBlockLook, useScreenBlockRules, useScreenBridges, useScreenCanvasFrame, useScreenDevices, useScreenDocumentPass, useScreenInspectorPanel, useScreenLeftView, useScreenOwnerName, useScreenParts, useScreenPinned, useScreenSaveSwitch, useStandaloneScreenBridges };
|
|
894
|
+
export { type NodeDefaults, SELECTION_MODE, type ScreenBlockLook, type ScreenBlockRules, type ScreenBridges, type ScreenCanvas, type ScreenDevices, type ScreenDocumentOps, type ScreenInspector, type ScreenInspectorMode, type ScreenInspectorPanelProps, type ScreenLeftPanel, type ScreenLeftView, type ScreenLeftViewFrame, type ScreenLeftViewRules, type ScreenNewNode, type ScreenNode, type ScreenNodeActions, type ScreenNodeLevel, type ScreenNodeMaker, type ScreenPartMode, type ScreenParts, ScreenPartsProvider, type ScreenPinnedBand, type ScreenPinnedNodes, type ScreenRailItem, type ScreenTree, type ScreenTreeFolds, type ScreenTreeRows, isPinnedFirst, isPinnedLast, sameInspectorMode, useScreenBlockLook, useScreenBlockRules, useScreenBridges, useScreenCanvasFrame, useScreenDevices, useScreenDocumentLabel, useScreenDocumentPass, useScreenInspectorPanel, useScreenLeftView, useScreenOwnerName, useScreenParts, useScreenPickFollowsSelection, useScreenPinned, useScreenSaveSwitch, useStandaloneScreenBridges };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{SELECTION_MODE,ScreenPartsProvider,sameInspectorMode,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasFrame,useScreenDevices,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenOwnerName,useScreenParts,useScreenPinned,useScreenSaveSwitch,useStandaloneScreenBridges}from"../../chunk-
|
|
1
|
+
export{SELECTION_MODE,ScreenPartsProvider,isPinnedFirst,isPinnedLast,sameInspectorMode,useScreenBlockLook,useScreenBlockRules,useScreenBridges,useScreenCanvasFrame,useScreenDevices,useScreenDocumentLabel,useScreenDocumentPass,useScreenInspectorPanel,useScreenLeftView,useScreenOwnerName,useScreenParts,useScreenPickFollowsSelection,useScreenPinned,useScreenSaveSwitch,useStandaloneScreenBridges}from"../../chunk-7755VWRT.js";import"../../chunk-Z6BAZFSW.js";import"../../chunk-R5ZVNJLJ.js";import"../../chunk-P67FP7PG.js";import"../../chunk-AELNNAFM.js";import"../../chunk-BXZ6WLHC.js";import"../../chunk-EOJNJCMJ.js";import"../../chunk-ZFDCDJNZ.js";import"../../chunk-ZNS7727Y.js";import"../../chunk-3EDSDPIP.js";import"../../chunk-QTLAVDJE.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-KTVH2ZRL.js";import"../../chunk-D2BCHTQR.js";import"../../chunk-EWVJSRRY.js";import"../../chunk-P6O363EE.js";import"../../chunk-FPOKPNO4.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-BZ5ASXOL.js";import"../../chunk-67GNT6PF.js";import"../../chunk-ZNCEOSXO.js";import"../../chunk-L5KW4HG5.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
|