efficient-easel 21.0.0 → 22.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/README.md +28 -23
- package/dist/{CanvasDragLayer-Cd1o0HQf.d.ts → CanvasDragLayer-B6Yn9S8T.d.ts} +4 -4
- package/dist/{ScreenDocumentContext-CFJeqqKk.d.ts → ScreenDocumentContext-BIK3uWtF.d.ts} +8 -4
- package/dist/blocks/index.d.ts +17 -17
- package/dist/{buckets-Tj-nkBpg.d.ts → buckets-_MGDYJlb.d.ts} +2 -2
- package/dist/canvas/index.d.ts +9 -9
- package/dist/canvas/index.js +1 -1
- package/dist/chunk-467WWV4I.js +1 -0
- package/dist/chunk-4LGROS5L.js +1 -0
- package/dist/{chunk-2GVCAIPX.js → chunk-BDSLF5BR.js} +1 -1
- package/dist/{chunk-U66YKDAR.js → chunk-BIK3AO2V.js} +1 -1
- package/dist/chunk-BTDI7JAA.js +2 -0
- package/dist/chunk-CUZQ2HMA.js +18 -0
- package/dist/chunk-DDH2DYQP.js +1 -0
- package/dist/chunk-GHBK7BKL.js +1 -0
- package/dist/{chunk-FOHHXSOL.js → chunk-IROEWITG.js} +1 -1
- package/dist/chunk-IYYE7VJN.js +65 -0
- package/dist/chunk-KN2TIXUT.js +1 -0
- package/dist/{chunk-MSGZ56QL.js → chunk-KWLHKKZO.js} +1 -1
- package/dist/{chunk-43AEUUNQ.js → chunk-N3MJOHAG.js} +1 -1
- package/dist/{chunk-BVN33R76.js → chunk-N7E6264U.js} +1 -1
- package/dist/{chunk-66JNVRQM.js → chunk-RY5AWQ63.js} +1 -1
- package/dist/chunk-SJMS247S.js +5 -0
- package/dist/chunk-SNF5764Q.js +1 -0
- package/dist/chunk-SSRYU3YG.js +1 -0
- package/dist/{chunk-R4QJ6DC5.js → chunk-SWBADIQT.js} +1 -1
- package/dist/{chunk-GOTN2KY4.js → chunk-TIAWIOGD.js} +1 -1
- package/dist/{chunk-HGCGIRVA.js → chunk-TLN5ZT76.js} +1 -1
- package/dist/chunk-TXR7GC5A.js +8 -0
- package/dist/{chunk-FGNR22NY.js → chunk-UMBNBCL4.js} +1 -1
- package/dist/chunk-WJSEWAWK.js +15 -0
- package/dist/{chunk-V2ULLALL.js → chunk-XWKQP6AE.js} +3 -3
- package/dist/{chunk-EZTP6E2M.js → chunk-YC6KLSW3.js} +1 -1
- package/dist/{chunk-O7Q4DDJT.js → chunk-YM4UEGBV.js} +1 -1
- package/dist/{chunk-N2RISV46.js → chunk-ZOSEBPAI.js} +1 -1
- package/dist/copy/index.d.ts +2 -2
- package/dist/data/index.d.ts +21 -21
- package/dist/drag/index.d.ts +5 -5
- package/dist/drag/index.js +1 -1
- package/dist/draw/client.d.ts +1 -1
- package/dist/draw/client.js +1 -1
- package/dist/draw/index.d.ts +8 -8
- package/dist/draw/index.js +1 -1
- package/dist/easel/easel.css +5 -5
- package/dist/easel/index.d.ts +57 -57
- package/dist/easel/index.js +1 -1
- package/dist/edit-lock/index.d.ts +5 -5
- package/dist/fields/fields.css +1 -1
- package/dist/fields/index.d.ts +17 -17
- package/dist/node-ops/index.d.ts +3 -3
- package/dist/panel/index.d.ts +4 -4
- package/dist/panel/panel.css +1 -1
- package/dist/{plan-CZS902DV.d.ts → plan-CRUh2kVK.d.ts} +5 -5
- package/dist/render/index.d.ts +19 -19
- package/dist/render/index.js +5 -5
- package/dist/{repeat-Czi-6zPX.d.ts → repeat-D65bJS8d.d.ts} +1 -1
- package/dist/{resolve-D68pb3Bx.d.ts → resolve-AJ6WF4EL.d.ts} +5 -5
- package/dist/screen/components/AddBlockRow.d.ts +1 -1
- package/dist/screen/components/AddBlockRow.js +1 -1
- package/dist/screen/components/AddSidePanel.d.ts +4 -4
- package/dist/screen/components/AddSidePanel.js +1 -1
- package/dist/screen/components/NodeContextMenu.d.ts +21 -21
- package/dist/screen/components/NodeContextMenu.js +1 -1
- package/dist/screen/components/PageEditGuardNotices.js +1 -1
- package/dist/screen/components/PreviewDeviceContext.d.ts +1 -1
- package/dist/screen/components/PreviewPartsContext.d.ts +4 -4
- package/dist/screen/components/PreviewPartsContext.js +1 -1
- package/dist/screen/components/SaveControls.d.ts +12 -12
- package/dist/screen/components/ScreenChrome.js +1 -1
- package/dist/screen/components/ScreenDocumentContext.d.ts +6 -6
- package/dist/screen/components/ScreenDocumentContext.js +1 -1
- package/dist/screen/components/ScreenMount.d.ts +12 -12
- package/dist/screen/components/ScreenMount.js +1 -1
- package/dist/screen/components/ScreenStoreProvider.d.ts +16 -16
- package/dist/screen/components/ScreenStoreProvider.js +1 -1
- package/dist/screen/components/SectionScreenShell.js +17 -17
- package/dist/screen/components/SlotChildActionsContext.d.ts +1 -1
- package/dist/screen/components/usePartBridge.d.ts +14 -14
- package/dist/screen/components/usePartBridge.js +1 -1
- package/dist/screen/index.d.ts +13 -13
- package/dist/screen/index.js +1 -1
- package/dist/screen/lib/admin-bridge.d.ts +5 -5
- package/dist/screen/lib/admin-bridge.js +1 -1
- package/dist/screen/lib/content/view-tiers.d.ts +1 -1
- package/dist/screen/lib/{puck → document}/add-target-types.d.ts +1 -1
- package/dist/screen/lib/{puck → document}/block-choice.d.ts +3 -3
- package/dist/screen/lib/document/block-choice.js +1 -0
- package/dist/screen/lib/document/block-types-in.js +1 -0
- package/dist/screen/lib/{puck → document}/content-tree.d.ts +7 -7
- package/dist/screen/lib/{puck → document}/content-tree.js +1 -1
- package/dist/screen/lib/{puck → document}/device-fields.d.ts +8 -8
- package/dist/screen/lib/{puck → document}/device-fields.js +1 -1
- package/dist/screen/lib/{puck → document}/field-buckets.d.ts +3 -3
- package/dist/screen/lib/document/field-buckets.js +1 -0
- package/dist/screen/lib/{puck → document}/field-markers.d.ts +15 -15
- package/dist/screen/lib/{puck → document}/field-markers.js +1 -1
- package/dist/screen/lib/{puck → document}/hidable.d.ts +3 -3
- package/dist/screen/lib/document/hidable.js +1 -0
- package/dist/screen/lib/{puck → document}/palette-sections.d.ts +7 -7
- package/dist/screen/lib/{puck → document}/palette-sections.js +1 -1
- package/dist/screen/lib/{puck → document}/panel-fields.d.ts +6 -6
- package/dist/screen/lib/document/panel-fields.js +1 -0
- package/dist/screen/lib/{puck → document}/panel-no-control-mark.d.ts +5 -6
- package/dist/screen/lib/{puck → document}/panel-no-control-mark.js +1 -1
- package/dist/screen/lib/{puck → document}/part-id.d.ts +3 -3
- package/dist/screen/lib/document/part-id.js +1 -0
- package/dist/screen/lib/{puck → document}/preview-click.d.ts +1 -1
- package/dist/screen/lib/document/preview-click.js +1 -0
- package/dist/screen/lib/{puck → document}/preview-dom.js +1 -1
- package/dist/screen/lib/{puck → document}/preview-events.d.ts +4 -4
- package/dist/screen/lib/document/preview-events.js +1 -0
- package/dist/screen/lib/{puck → document}/preview-selection-context.d.ts +2 -2
- package/dist/screen/lib/{puck → document}/preview-selection-context.js +1 -1
- package/dist/screen/lib/{puck → document}/section-doc.d.ts +5 -5
- package/dist/screen/lib/{puck → document}/section-doc.js +1 -1
- package/dist/screen/lib/{puck → document}/slot-child-name.d.ts +2 -2
- package/dist/screen/lib/document/slot-child-name.js +1 -0
- package/dist/screen/lib/document/slot-heal.js +1 -0
- package/dist/screen/lib/{puck → document}/slot-section-spec.d.ts +3 -3
- package/dist/screen/lib/{puck → document}/style-clipboard.d.ts +9 -9
- package/dist/screen/lib/document/style-clipboard.js +1 -0
- package/dist/screen/lib/{puck → document}/text-control-kinds.d.ts +4 -4
- package/dist/screen/lib/{puck → document}/text-control-kinds.js +1 -1
- package/dist/screen/lib/{puck → document}/tree-reveal.d.ts +6 -6
- package/dist/screen/lib/{puck → document}/tree-reveal.js +1 -1
- package/dist/screen/lib/{puck → document}/use-section-ops.d.ts +6 -6
- package/dist/screen/lib/document/use-section-ops.js +1 -0
- package/dist/screen/lib/document-addressing.d.ts +6 -6
- package/dist/screen/lib/document-hooks.d.ts +4 -4
- package/dist/screen/lib/document-switch.d.ts +1 -1
- package/dist/screen/lib/host.d.ts +6 -6
- package/dist/screen/lib/key-scope.d.ts +1 -1
- package/dist/screen/lib/key-scope.js +1 -1
- package/dist/screen/lib/media-panel.d.ts +6 -6
- package/dist/screen/lib/media-picker.d.ts +7 -7
- package/dist/screen/lib/page-lock.d.ts +5 -5
- package/dist/screen/lib/screen-parts.d.ts +30 -26
- package/dist/screen/lib/screen-parts.js +1 -1
- package/dist/screen/lib/section-template-types.d.ts +1 -1
- package/dist/screen/lib/section-templates.d.ts +5 -5
- package/dist/screen/lib/section-templates.js +1 -1
- package/dist/screen/lib/session-context.d.ts +5 -5
- package/dist/screen/lib/session-context.js +1 -1
- package/dist/screen/lib/session.d.ts +8 -8
- package/dist/screen/lib/session.js +1 -1
- package/dist/screen/lib/shared-section-types.d.ts +1 -1
- package/dist/screen/lib/shared-sections.d.ts +5 -5
- package/dist/screen/lib/shared-sections.js +1 -1
- package/dist/screen/screen.css +17 -17
- package/dist/{session-DSQFmIvx.d.ts → session-CrWwDt7Z.d.ts} +1 -1
- package/dist/strings/index.d.ts +2 -2
- package/dist/strings/index.js +1 -1
- package/dist/style-clipboard/index.d.ts +2 -2
- package/dist/tree/index.d.ts +1 -1
- package/dist/{types-CDX6vd6A.d.ts → types-BFd8FqQw.d.ts} +3 -3
- package/dist/{types-Cq53lL8d.d.ts → types-DFxBChE3.d.ts} +18 -18
- package/dist/{types-41704JE4.d.ts → types-DlQIM1YO.d.ts} +8 -8
- package/dist/{useNodeOps-fIDWzftn.d.ts → useNodeOps-C_nisDHh.d.ts} +2 -2
- package/dist/{watch-BTYOJpQU.d.ts → watch-D0bNZRtU.d.ts} +5 -5
- package/dist/{words-BeX5eGq7.d.ts → words-fbR9IwxH.d.ts} +1 -1
- package/package.json +145 -145
- package/dist/chunk-2E2SXDYQ.js +0 -1
- package/dist/chunk-2M4T27BI.js +0 -18
- package/dist/chunk-4IJVV7DA.js +0 -1
- package/dist/chunk-7L3NKHEC.js +0 -15
- package/dist/chunk-APVUYICP.js +0 -65
- package/dist/chunk-BHRC3ASL.js +0 -1
- package/dist/chunk-I54UCYOU.js +0 -1
- package/dist/chunk-LXTM2OLQ.js +0 -2
- package/dist/chunk-NA3GMA43.js +0 -5
- package/dist/chunk-OBWDHKLI.js +0 -8
- package/dist/chunk-Q2A7RHG2.js +0 -1
- package/dist/chunk-QIDRJH3S.js +0 -1
- package/dist/chunk-RSCMJIWS.js +0 -1
- package/dist/screen/lib/puck/block-choice.js +0 -1
- package/dist/screen/lib/puck/block-types-in.js +0 -1
- package/dist/screen/lib/puck/field-buckets.js +0 -1
- package/dist/screen/lib/puck/hidable.js +0 -1
- package/dist/screen/lib/puck/panel-fields.js +0 -1
- package/dist/screen/lib/puck/part-id.js +0 -1
- package/dist/screen/lib/puck/preview-click.js +0 -1
- package/dist/screen/lib/puck/preview-events.js +0 -1
- package/dist/screen/lib/puck/slot-child-name.js +0 -1
- package/dist/screen/lib/puck/slot-heal.js +0 -1
- package/dist/screen/lib/puck/style-clipboard.js +0 -1
- package/dist/screen/lib/puck/use-section-ops.js +0 -1
- /package/dist/{chunk-MQNBD6AB.js → chunk-3QB2ZQXK.js} +0 -0
- /package/dist/{chunk-LER7RKTO.js → chunk-5XL2RXFU.js} +0 -0
- /package/dist/{chunk-6W7WLPZH.js → chunk-6UAEFOJ4.js} +0 -0
- /package/dist/{chunk-26OOWIJJ.js → chunk-7OCEPOEJ.js} +0 -0
- /package/dist/{chunk-IQ5TA7AM.js → chunk-AJ2SUSET.js} +0 -0
- /package/dist/{chunk-DUVRZ456.js → chunk-ANPOR6EY.js} +0 -0
- /package/dist/{chunk-5ZBY24K7.js → chunk-CPL43ZLJ.js} +0 -0
- /package/dist/{chunk-PIND6KE7.js → chunk-I6SK6ZDT.js} +0 -0
- /package/dist/{chunk-7F52SZOI.js → chunk-INRERJU4.js} +0 -0
- /package/dist/{chunk-R5L2E7JX.js → chunk-MGVI67QV.js} +0 -0
- /package/dist/{chunk-IYT6NN2J.js → chunk-R4AUZVA3.js} +0 -0
- /package/dist/{chunk-M2Z775ZC.js → chunk-RUQOIQWI.js} +0 -0
- /package/dist/{chunk-PLVEGYK6.js → chunk-TCAAOYQY.js} +0 -0
- /package/dist/{chunk-PA3PNTVV.js → chunk-VKPOH6MK.js} +0 -0
- /package/dist/screen/lib/{puck → document}/add-target-types.js +0 -0
- /package/dist/screen/lib/{puck → document}/block-types-in.d.ts +0 -0
- /package/dist/screen/lib/{puck → document}/preview-dom.d.ts +0 -0
- /package/dist/screen/lib/{puck → document}/slot-heal.d.ts +0 -0
- /package/dist/screen/lib/{puck → document}/slot-section-spec.js +0 -0
|
@@ -15,7 +15,7 @@ type AddTargetSource = "section" | "footer" | "container";
|
|
|
15
15
|
* `null` where the parent adds ONE child type from a button instead.
|
|
16
16
|
* 2 the ROW NAME — `rowNamerFor` (components/SlotChildRows) reads
|
|
17
17
|
* {@link AddTarget.source} to pick the FOOTER's block-label rule over
|
|
18
|
-
* lib/
|
|
18
|
+
* lib/document/slot-child-name.ts. It must ask "is this a FOOTER block", NOT
|
|
19
19
|
* "does this parent use a menu": a Box adds from a menu too and
|
|
20
20
|
* keeps the slot-child rule, or its Headings, Texts and Buttons all fall
|
|
21
21
|
* through to a rule that reads a heading, a bound menu and first-words.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* It is set at BUILD time by whichever module assembles the list, from the
|
|
11
11
|
* source each choice came from — never hand-written per row. See
|
|
12
|
-
* `lib/
|
|
12
|
+
* `lib/document/container-blocks.ts`, which is the only assembler that sets one.
|
|
13
13
|
*/
|
|
14
14
|
type BlockChoice = {
|
|
15
15
|
type: string;
|
|
@@ -38,7 +38,7 @@ declare function offeredChoices<C extends BlockChoice>(choices: readonly C[]): C
|
|
|
38
38
|
* chip row at the top of the Add panel (`components/AddSectionPanel`). They draw
|
|
39
39
|
* ONE list, so "where does a heading start" must be ONE answer; two `map`s each
|
|
40
40
|
* comparing with the previous item is how the two surfaces begin dividing the
|
|
41
|
-
* same list differently. That is the exact defect `lib/
|
|
41
|
+
* same list differently. That is the exact defect `lib/document/add-target.ts`'s
|
|
42
42
|
* docblock is an essay about, one tier down.
|
|
43
43
|
*
|
|
44
44
|
* ⚠️ AND THE MENU'S CLASS NAME IS DELIBERATELY NOT WRITTEN IN THIS FILE.
|
|
@@ -48,7 +48,7 @@ declare function offeredChoices<C extends BlockChoice>(choices: readonly C[]): C
|
|
|
48
48
|
* markup lives in `components/AddBlockRow`; this is only the arithmetic.
|
|
49
49
|
*
|
|
50
50
|
* It preserves ORDER and never sorts: the list arrives in the order its assembler
|
|
51
|
-
* chose (`lib/
|
|
51
|
+
* chose (`lib/document/container-blocks.ts` says why that order is what it is), and a
|
|
52
52
|
* renderer is not the place to have a second opinion about it.
|
|
53
53
|
*
|
|
54
54
|
* A list whose choices carry NO group comes back as a single run with
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{blockRuns,offeredChoices}from"../../../chunk-RUQOIQWI.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{blockTypesIn}from"../../../chunk-CPL43ZLJ.js";
|
|
@@ -31,7 +31,7 @@ declare function slotFieldsOf(config: SlotConfigView, type: string): string[];
|
|
|
31
31
|
* What a component type's config ALLOWS of the two actions that make another
|
|
32
32
|
* node or take one away (0.103.0): its `permissions.duplicate` and
|
|
33
33
|
* `permissions.delete`, each true unless the config says false — the reading
|
|
34
|
-
*
|
|
34
|
+
* The old editor gave a config that carried none. The campaign designer's Product keeps
|
|
35
35
|
* its Price line this way (`{ delete: false, duplicate: false }`).
|
|
36
36
|
*
|
|
37
37
|
* The screen's tree rows, its menu and the inspector head it hands this to
|
|
@@ -48,7 +48,7 @@ declare function blockNodeActions(config: SlotConfigView, type: string): {
|
|
|
48
48
|
};
|
|
49
49
|
/**
|
|
50
50
|
* A slot child, addressed the way the Layers tree selects it: the node, the
|
|
51
|
-
* compound zone key "<parentId>:<slotName>"
|
|
51
|
+
* compound zone key "<parentId>:<slotName>" the old editor's ops take, and its index in
|
|
52
52
|
* that slot.
|
|
53
53
|
*/
|
|
54
54
|
type SlotChild = {
|
|
@@ -75,7 +75,7 @@ declare function slotChildrenIn(item: TreeItem, slot: string): SlotChild[];
|
|
|
75
75
|
/**
|
|
76
76
|
* WHERE a node sits in the document — the node itself, the zone key its own
|
|
77
77
|
* array is addressed by, and its index in that array. Exactly the three
|
|
78
|
-
* arguments
|
|
78
|
+
* arguments an old-editor `replace` / `remove` / `reorder` op takes.
|
|
79
79
|
*/
|
|
80
80
|
type NodeLocation = {
|
|
81
81
|
item: TreeItem;
|
|
@@ -112,16 +112,16 @@ type NodeLocation = {
|
|
|
112
112
|
* `ScreenChrome` memoises a Map of EVERY node's address (plus each
|
|
113
113
|
* zone's whole sibling list) and hands the lookup to the context menu as
|
|
114
114
|
* `locate`. That map is built once per document for a surface that needs all of
|
|
115
|
-
* it; this finds ONE node and is reachable from
|
|
115
|
+
* it; this finds ONE node and is reachable from an old-editor field, which the map is
|
|
116
116
|
* not — it lives in a component's closure and rides no context. What must not
|
|
117
117
|
* be two things is the set of SLOT PROP NAMES, and it is not: both walk through
|
|
118
118
|
* `childSlotsOf`, so an address here and an address there cannot disagree.
|
|
119
|
-
*
|
|
119
|
+
* The old editor's own `getSelectorForId` is a third reader of the same fact, and the one
|
|
120
120
|
* a live store already offers — it is a hook-bound function, so a guard cannot
|
|
121
121
|
* call it, which is the whole reason this one is written pure.
|
|
122
122
|
*
|
|
123
123
|
* PURE, and takes the config as an argument, so a guard can assert against it
|
|
124
|
-
* without
|
|
124
|
+
* without an old-editor store, a React tree or a hook.
|
|
125
125
|
*
|
|
126
126
|
* `null` when no node carries the id — the honest answer for a stale selection,
|
|
127
127
|
* and every caller treats it as "there is nothing to write".
|
|
@@ -201,7 +201,7 @@ declare function pinnedDuplicateIds(content: ReadonlyArray<{
|
|
|
201
201
|
* Which pinned chrome types a document is MISSING, and a load-time seed must
|
|
202
202
|
* therefore create. A type counts as missing only when it is absent from BOTH:
|
|
203
203
|
*
|
|
204
|
-
* - `live` — the editor's
|
|
204
|
+
* - `live` — the editor's the old editor store, read at the moment of the write; and
|
|
205
205
|
* - `persisted` — the document exactly as it was LOADED from the backend.
|
|
206
206
|
*
|
|
207
207
|
* Requiring both is what makes seeding idempotent, and neither check can be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,blockNodeActions,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotChildrenIn,slotFieldsOf}from"../../../chunk-
|
|
1
|
+
export{FOOTER_TYPE,HEADER_TYPE,ROOT_ZONE,TREE_MAX_DEPTH,blockNodeActions,childSlotsOf,locateNode,missingPinnedTypes,nestsInTree,newNodeId,pinnedDuplicateIds,pinnedDuplicateIndices,slotChildrenIn,slotFieldsOf}from"../../../chunk-TCAAOYQY.js";
|
|
@@ -3,7 +3,7 @@ import { PreviewDevice } from '../../components/PreviewDeviceContext.js';
|
|
|
3
3
|
import '../content/view-tiers.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* lib/
|
|
6
|
+
* lib/document/device-fields.tsx — show the setting for the device the merchant is
|
|
7
7
|
* currently looking at, and only that one.
|
|
8
8
|
*
|
|
9
9
|
* THE PROBLEM. A section that can be sized differently on a phone stores TWO
|
|
@@ -12,8 +12,8 @@ import '../content/view-tiers.js';
|
|
|
12
12
|
* screen; the panel ignored it, so the merchant read labels to find the control
|
|
13
13
|
* that matched what they were looking at.
|
|
14
14
|
*
|
|
15
|
-
* THE MECHANISM, and why this one. A
|
|
16
|
-
*
|
|
15
|
+
* THE MECHANISM, and why this one. A the old editor `resolveFields` cannot do it: in this
|
|
16
|
+
* The old editor version the fields slice re-resolves only when the selected node's DATA
|
|
17
17
|
* changes (`useRegisterFieldsSlice` subscribes to `state.indexes.nodes[id]`), and
|
|
18
18
|
* switching device changes no data — the panel would keep whatever field set the
|
|
19
19
|
* last edit produced. So the decision is made where it can re-render freely: in
|
|
@@ -35,11 +35,11 @@ import '../content/view-tiers.js';
|
|
|
35
35
|
* ({@link DEVICE_NOTE}); it never presents desktop values as if they were
|
|
36
36
|
* tablet's. {@link shownTier} is the single place that ruling is written down.
|
|
37
37
|
*
|
|
38
|
-
* WHY THE HIDDEN FIELD LEAVES NO GAP.
|
|
39
|
-
* own padded
|
|
38
|
+
* WHY THE HIDDEN FIELD LEAVES NO GAP. The old editor wraps every top-level field in its
|
|
39
|
+
* own padded old editor's padded field box before it calls `render`, so a field that
|
|
40
40
|
* renders nothing would still cost ~37px of empty panel. The gate instead paints
|
|
41
41
|
* a zero-size marker and this package's `screen.css` collapses the
|
|
42
|
-
* wrapper that contains one — the same "reach the wrapper
|
|
42
|
+
* wrapper that contains one — the same "reach the wrapper the old editor owns" trick the
|
|
43
43
|
* fold reflow in `controls.tsx` already relies on, expressed as one CSS rule
|
|
44
44
|
* instead of a second DOM pass (so it cannot race the fold's).
|
|
45
45
|
*/
|
|
@@ -63,7 +63,7 @@ declare function shownTier(device: PreviewDevice): DeviceTier;
|
|
|
63
63
|
* letting the desktop values pass for tablet's own.
|
|
64
64
|
*/
|
|
65
65
|
declare const DEVICE_NOTE: Readonly<Record<PreviewDevice, string | null>>;
|
|
66
|
-
/** The attribute the stylesheet looks for to collapse a gated-off field's
|
|
66
|
+
/** The attribute the stylesheet looks for to collapse a gated-off field's the old editor
|
|
67
67
|
* wrapper. Declared here, matched once in this package's `screen.css`, which
|
|
68
68
|
* every host that mounts the screen loads (it sat in the website's sheet until
|
|
69
69
|
* 0.103.0, so a second host's hidden rows kept their space). */
|
|
@@ -83,7 +83,7 @@ type AnyCustomField = {
|
|
|
83
83
|
* wraps live ON the field object, never only inside the render closure. Without
|
|
84
84
|
* it a gated control is opaque to every static walk — and the fold guard in
|
|
85
85
|
* `scripts/test-section-groups.ts` genuinely needs to see the header underneath
|
|
86
|
-
* to check its label against what it draws.
|
|
86
|
+
* to check its label against what it draws. The old editor ignores extra keys. */
|
|
87
87
|
declare const DEVICE_FIELD_MARKER: "__device";
|
|
88
88
|
/** The payload on {@link DEVICE_FIELD_MARKER}. */
|
|
89
89
|
type DeviceFieldMeta = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{DEVICE_FIELD_MARKER,DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceMetaOf,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-
|
|
1
|
+
export{DEVICE_FIELD_MARKER,DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceMetaOf,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-KWLHKKZO.js";import"../../../chunk-INRERJU4.js";import"../../../chunk-EB6NI2VK.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { S as SettingsBucket, D as DesignGroup } from '../../../buckets-
|
|
1
|
+
import { S as SettingsBucket, D as DesignGroup } from '../../../buckets-_MGDYJlb.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* lib/
|
|
4
|
+
* lib/document/field-buckets.ts — the two settings buckets a section's fields are
|
|
5
5
|
* sorted into (Design, Animation: owner 2026-10-08, final 2026-10-10), the
|
|
6
6
|
* field key each bucket's header is emitted under, and the field key of each
|
|
7
7
|
* Design group's heading.
|
|
8
8
|
*
|
|
9
|
-
* Moved out of lib/
|
|
9
|
+
* Moved out of lib/document/field-groups (which re-exports both) so the editor's
|
|
10
10
|
* screen can read a header's key — the style clipboard copies a look by the
|
|
11
11
|
* groups it sits in — without importing the field builders that sort a
|
|
12
12
|
* section's fields (doc/adr/0004). The reasoning behind the buckets themselves
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{BUCKET_KEY,DESIGN_GROUP_KEY}from"../../../chunk-3QB2ZQXK.js";
|
|
@@ -4,12 +4,12 @@ import { TextControlKind } from './text-control-kinds.js';
|
|
|
4
4
|
* field-markers — what a field DECLARES about itself, readable without the
|
|
5
5
|
* inspector.
|
|
6
6
|
*
|
|
7
|
-
* A control factory in `lib/
|
|
7
|
+
* A control factory in `lib/document/controls` stamps a marker on the field object
|
|
8
8
|
* it returns: this prop holds authored copy, this one a link, this row array
|
|
9
9
|
* draws these scaffold rows while it is empty. Two kinds of code read those
|
|
10
10
|
* stamps. The inspector does, and so does the RENDER side — the part walk that
|
|
11
|
-
* makes a headline clickable (`lib/
|
|
12
|
-
* (`lib/
|
|
11
|
+
* makes a headline clickable (`lib/document/text-parts`), the typing bridge
|
|
12
|
+
* (`lib/document/part-text`, `lib/document/part-rows`) — and a section's own option
|
|
13
13
|
* module may be typed by a control's vocabulary (`lib/sections/ticker-scroll`
|
|
14
14
|
* names the pad cell each direction sits in).
|
|
15
15
|
*
|
|
@@ -19,7 +19,7 @@ import { TextControlKind } from './text-control-kinds.js';
|
|
|
19
19
|
* client and the cart. A render-side module that only wanted the string
|
|
20
20
|
* `"__text"` imported all of it, which is what kept a general section from being
|
|
21
21
|
* drawn anywhere the inspector cannot go (doc/adr/0002). The same split, for the
|
|
22
|
-
* same reason, that `lib/
|
|
22
|
+
* same reason, that `lib/document/hidable` and `lib/document/text-control-kinds` already
|
|
23
23
|
* made.
|
|
24
24
|
*
|
|
25
25
|
* This file imports nothing but that kinds leaf. `controls.tsx` re-exports
|
|
@@ -33,7 +33,7 @@ import { TextControlKind } from './text-control-kinds.js';
|
|
|
33
33
|
* GENERATOR (`scripts/gen-neutralization-manifest.ts`) walks the built config
|
|
34
34
|
* looking for it, so the text factories are the single source of truth for
|
|
35
35
|
* "this prop holds customer-authored copy" — a new text field is covered the
|
|
36
|
-
* moment it is declared, with no list to maintain anywhere (
|
|
36
|
+
* moment it is declared, with no list to maintain anywhere (the old editor ignores extra
|
|
37
37
|
* keys).
|
|
38
38
|
*
|
|
39
39
|
* Unlike the media marker this carries a PAYLOAD, because the neutralizer needs
|
|
@@ -59,14 +59,14 @@ declare const LINK_FIELD_MARKER: "__link";
|
|
|
59
59
|
* greyed hint (`placeholder` above), and everything that asks "what does this
|
|
60
60
|
* prop put on screen?" — the neutralizer, the part walk — reads it there. A row
|
|
61
61
|
* array had no equivalent: `config.tsx` passes the scaffold constant straight
|
|
62
|
-
* into `phRows(value, SCAFFOLD,
|
|
62
|
+
* into `phRows(value, SCAFFOLD, editor)` inside the render, where nothing outside
|
|
63
63
|
* the component can see it. So a freshly-dropped section drew three grey rows of
|
|
64
|
-
* scaffold copy that `lib/
|
|
64
|
+
* scaffold copy that `lib/document/text-parts` could not name, and clicking that copy
|
|
65
65
|
* opened the whole section instead of the one control behind it (card 66072).
|
|
66
66
|
*
|
|
67
67
|
* It is the SAME constant the render passes — `withScaffold` (in
|
|
68
|
-
* `lib/
|
|
69
|
-
* preview and the walk cannot drift.
|
|
68
|
+
* `lib/document/controls`) takes it as an argument rather than copying it — so the
|
|
69
|
+
* preview and the walk cannot drift. The old editor ignores extra keys on a field, exactly
|
|
70
70
|
* as it does for the two markers above.
|
|
71
71
|
*/
|
|
72
72
|
declare const SCAFFOLD_FIELD_MARKER: "__scaffold";
|
|
@@ -96,7 +96,7 @@ type TextListRendering =
|
|
|
96
96
|
| "verbatim";
|
|
97
97
|
/** The payload on {@link TEXT_FIELD_MARKER}: what a text field says about the
|
|
98
98
|
* copy it holds. The `with…` wrappers that set its optional facts, and the
|
|
99
|
-
* readers that pair with them, are in `lib/
|
|
99
|
+
* readers that pair with them, are in `lib/document/controls`. */
|
|
100
100
|
type TextFieldMeta = {
|
|
101
101
|
control: TextControlKind;
|
|
102
102
|
/** The control's inspector label — a classification signal when a field
|
|
@@ -160,21 +160,21 @@ type TextFieldMeta = {
|
|
|
160
160
|
};
|
|
161
161
|
/** Which of an edge pad's four live squares an answer sits in — the cell a
|
|
162
162
|
* direction option names beside its value (`lib/sections/ticker-scroll`), and
|
|
163
|
-
* the one the pad in `lib/
|
|
163
|
+
* the one the pad in `lib/document/controls` lights. */
|
|
164
164
|
type EdgeCell = "top" | "right" | "bottom" | "left";
|
|
165
165
|
/** Marker carried by every media field object. The manifest GENERATOR walks the
|
|
166
166
|
* built config looking for it, so the factory below is the single source of
|
|
167
167
|
* truth for "this prop holds media" — a new media field is covered the moment
|
|
168
|
-
* it is declared, with no list to maintain anywhere (
|
|
168
|
+
* it is declared, with no list to maintain anywhere (the old editor ignores extra keys). */
|
|
169
169
|
declare const MEDIA_FIELD_MARKER: "__media";
|
|
170
170
|
/** Marker carried by every heading {@link group} / {@link section} builds — and
|
|
171
171
|
* by every bucket header {@link bucketHeader} builds, whose "heading" a
|
|
172
172
|
* merchant reads as a TAB. Same style as {@link TEXT_FIELD_MARKER} / {@link LINK_FIELD_MARKER}:
|
|
173
173
|
* the label and the level ON the field object, not only inside the render
|
|
174
174
|
* closure. Without it a header's label is unreadable at runtime — the closure
|
|
175
|
-
* is all there is — and the four-bucket pass (`lib/
|
|
175
|
+
* is all there is — and the four-bucket pass (`lib/document/field-groups.ts`) would
|
|
176
176
|
* have to re-derive it by parsing `config.tsx`, i.e. a second source of truth
|
|
177
|
-
* for something the field already knows.
|
|
177
|
+
* for something the field already knows. The old editor ignores extra keys, and the
|
|
178
178
|
* neutralization walk classifies by its own markers / `type` / prop name, so a
|
|
179
179
|
* header stays exactly as invisible to it as it was (see
|
|
180
180
|
* `scripts/gen-neutralization-manifest.ts`). */
|
|
@@ -194,7 +194,7 @@ declare function foldMetaOf(field: unknown): FoldFieldMeta | null;
|
|
|
194
194
|
*/
|
|
195
195
|
declare function textFieldIdentifier(field: unknown): boolean;
|
|
196
196
|
/**
|
|
197
|
-
* The keys `anchorFields()` (lib/
|
|
197
|
+
* The keys `anchorFields()` (lib/document/controls) declares: the anchor's group
|
|
198
198
|
* header and its name row. The style clipboard leaves them out of a copied
|
|
199
199
|
* look — an anchor is the section's address, not its style — and reads them
|
|
200
200
|
* here rather than calling the builder, so it needs nothing of the inspector's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ANCHOR_FIELD_KEYS,FOLD_FIELD_MARKER,LINK_FIELD_MARKER,MEDIA_FIELD_MARKER,SCAFFOLD_FIELD_MARKER,TEXT_FIELD_MARKER,foldMetaOf,textFieldIdentifier}from"../../../chunk-
|
|
1
|
+
export{ANCHOR_FIELD_KEYS,FOLD_FIELD_MARKER,LINK_FIELD_MARKER,MEDIA_FIELD_MARKER,SCAFFOLD_FIELD_MARKER,TEXT_FIELD_MARKER,foldMetaOf,textFieldIdentifier}from"../../../chunk-ANPOR6EY.js";
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
* hidable — the ONE reader for the shape a hideable copy row stores.
|
|
3
3
|
*
|
|
4
4
|
* Every authored-text row in the editor is one of five controls
|
|
5
|
-
* (`lib/
|
|
5
|
+
* (`lib/document/text-control-kinds`), and two of them — `text()` and `textarea()` —
|
|
6
6
|
* carry the eye that takes an element off the page while keeping the words. Those
|
|
7
7
|
* two persist `{ text, hidden }`; the other three persist a bare string, and so
|
|
8
8
|
* does every page published before the eye existed. A prop's stored value is
|
|
9
9
|
* therefore an OBJECT OR A STRING, and which one it is depends on whether a
|
|
10
10
|
* merchant has touched that row — not on anything a reader can see in the code.
|
|
11
11
|
*
|
|
12
|
-
* ⚠️ WHY THIS IS ITS OWN FILE. `readHidable` was born in `lib/
|
|
12
|
+
* ⚠️ WHY THIS IS ITS OWN FILE. `readHidable` was born in `lib/document/controls.tsx`
|
|
13
13
|
* beside the field that writes the shape, and `controls.tsx` is React: it imports
|
|
14
14
|
* the editor shell, the markup toolbar and 30 components. So a PURE module that
|
|
15
15
|
* needs to read a stored heading could not use the one reader without dragging
|
|
16
|
-
* the whole editor in — and `lib/
|
|
16
|
+
* the whole editor in — and `lib/document/heading-outline.ts` is exactly that module
|
|
17
17
|
* (its own header promises no React and no config import, so the audit can be
|
|
18
18
|
* walked in a test without mounting the editor). It called `String(...)` on the
|
|
19
19
|
* prop instead, and printed the literal words `[object Object]` into the outline
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{hidableText,readHidable}from"../../../chunk-6UAEFOJ4.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Config } from '../../../blocks/index.js';
|
|
2
2
|
import 'react';
|
|
3
|
-
import '../../../types-
|
|
3
|
+
import '../../../types-DFxBChE3.js';
|
|
4
4
|
import '../../../data/index.js';
|
|
5
|
-
import '../../../types-
|
|
6
|
-
import '../../../resolve-
|
|
7
|
-
import '../../../plan-
|
|
5
|
+
import '../../../types-DlQIM1YO.js';
|
|
6
|
+
import '../../../resolve-AJ6WF4EL.js';
|
|
7
|
+
import '../../../plan-CRUh2kVK.js';
|
|
8
8
|
|
|
9
9
|
/** One offerable section, with the category it is grouped under. */
|
|
10
10
|
type PaletteSection = {
|
|
@@ -43,7 +43,7 @@ type PaletteSection = {
|
|
|
43
43
|
* What the layer says of its sections for the palette: the word for a type at
|
|
44
44
|
* a level, a group's short heading where it has one, and the blurbs. The
|
|
45
45
|
* screen's `blockLook` is one (lib/screen-parts); so is the website's own
|
|
46
|
-
* (lib/
|
|
46
|
+
* (lib/document/add-palette).
|
|
47
47
|
*/
|
|
48
48
|
interface PaletteLook {
|
|
49
49
|
/** What a node of `type` is called at a level, given the label the config
|
|
@@ -67,13 +67,13 @@ interface PaletteLook {
|
|
|
67
67
|
* Child-only blocks (HeroSlide / CollectionCard / ProductRef) and the four
|
|
68
68
|
* generic primitives (Heading / Text / ImageBlock / ButtonBlock) sit in NO
|
|
69
69
|
* category on purpose, so they never appear here — they are added from their
|
|
70
|
-
* parent's slot instead. See the note above `categories:` in lib/
|
|
70
|
+
* parent's slot instead. See the note above `categories:` in lib/document/config.tsx.
|
|
71
71
|
*
|
|
72
72
|
* A category the config marks `visible: false` is NOT offered (0.105.0, seam
|
|
73
73
|
* E9): it is a registry's way of keeping blocks it has out of the picker — the
|
|
74
74
|
* campaign designer's Product parts, its retired blocks, its Sections — and a
|
|
75
75
|
* palette that listed them would offer things that may not be put on a page.
|
|
76
|
-
*
|
|
76
|
+
* The old editor's own palette read the flag the same way. No website category carries
|
|
77
77
|
* it, so the website's palette is the list it was.
|
|
78
78
|
*/
|
|
79
79
|
declare function buildPaletteSections(config: Config, look: PaletteLook): PaletteSection[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{buildPaletteSections,categoryLabel,matchesQuery,paletteWithoutPinned,pinnedSection}from"../../../chunk-
|
|
1
|
+
export{buildPaletteSections,categoryLabel,matchesQuery,paletteWithoutPinned,pinnedSection}from"../../../chunk-VKPOH6MK.js";
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
* array on a linked product, Image & Text Columns takes its text-position row
|
|
8
8
|
* away once it has Boxes.
|
|
9
9
|
*
|
|
10
|
-
* `
|
|
10
|
+
* `the old editor's fields panel` honours all of that. Every list built beside it from the raw
|
|
11
11
|
* declaration does not — and one of them is the copy list in
|
|
12
12
|
* `components/SectionEditor`. So a merchant met the SAME heading twice: once in
|
|
13
|
-
* the panel
|
|
13
|
+
* the panel the old editor drew, and once in a list drawn from rows the resolver had
|
|
14
14
|
* already dropped (owner, 2026-09-10, on a Booking Form's Head box).
|
|
15
15
|
*
|
|
16
|
-
* ⚠️
|
|
17
|
-
* internal — `useEasel((s) => s)` and `
|
|
16
|
+
* ⚠️ THE OLD EDITOR DOES NOT EXPOSE ITS RESOLVED SET. The store slice that holds it is
|
|
17
|
+
* internal — `useEasel((s) => s)` and `the old selector hook` both hand back `the old store API`, which
|
|
18
18
|
* has no `fields` on it (checked against 0.20.2's own types, not remembered). So
|
|
19
|
-
* the resolver is asked here, the same way
|
|
19
|
+
* the resolver is asked here, the same way the old editor asks it.
|
|
20
20
|
*
|
|
21
21
|
* ⚠️ AND AN ASYNC RESOLVER IS ANSWERED WITH THE DECLARATION. A promise cannot be
|
|
22
22
|
* read during a render, and a list that waited would flicker rows in and out.
|
|
@@ -35,7 +35,7 @@ interface PanelComponent {
|
|
|
35
35
|
* `parent` is passed as null and `appState` as an empty object because the ONE
|
|
36
36
|
* caller uses the result for authored-copy rows, which no resolver decides from
|
|
37
37
|
* either. A caller that needs the width rows — which DO read `parent` — must ask
|
|
38
|
-
*
|
|
38
|
+
* The old editor rather than this.
|
|
39
39
|
*/
|
|
40
40
|
declare function panelFieldsOf(config: {
|
|
41
41
|
components?: Record<string, PanelComponent>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{panelFieldsOf}from"../../../chunk-5XL2RXFU.js";import"../../../chunk-BPXEFVSQ.js";
|
|
@@ -4,12 +4,11 @@ import { ReactElement } from 'react';
|
|
|
4
4
|
* panel-no-control-mark — what a settings field draws when it draws NO CONTROL
|
|
5
5
|
* on the screen it is on (card 66178).
|
|
6
6
|
*
|
|
7
|
-
* WHY A FIELD HAS TO SAY THIS OUT LOUD.
|
|
7
|
+
* WHY A FIELD HAS TO SAY THIS OUT LOUD. The old editor lays the inspector out as a FLAT
|
|
8
8
|
* list and owns the wrapper around every top-level field, and its own stylesheet
|
|
9
9
|
* rules the gap between two of them:
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* border-top: 1px solid var(--puck-color-grey-09); margin-top: 8px; }
|
|
11
|
+
* (wrapper) field + field { border-top: 1px solid <grey>; margin-top: 8px; }
|
|
13
12
|
*
|
|
14
13
|
* That rule is right — a line between two adjacent rows. But a field whose
|
|
15
14
|
* `render` returns `null` still gets the wrapper, still takes its `16px 16px
|
|
@@ -19,7 +18,7 @@ import { ReactElement } from 'react';
|
|
|
19
18
|
* `<div class="_InputWrapper_"></div>`, and three rules stacked with only blank
|
|
20
19
|
* space between them. Across the catalogue it was 338 such rows in 74 panels.
|
|
21
20
|
*
|
|
22
|
-
* We cannot stop
|
|
21
|
+
* We cannot stop the old editor emitting the wrapper, so the wrapper is collapsed from the
|
|
23
22
|
* outside: the field renders this zero-size marker and ONE declarative rule in
|
|
24
23
|
* `components/storefront-editor.css` takes the wrapper out of the layout
|
|
25
24
|
* entirely — `display: none`, so the row leaves the accessibility tree with it
|
|
@@ -50,7 +49,7 @@ declare function NoControlMark(): ReactElement;
|
|
|
50
49
|
* and no React — it has a field list and nothing else. So a field that draws no
|
|
51
50
|
* control has to say so twice, in the two places the answer is asked, and both
|
|
52
51
|
* are stamped by the ONE `if` that decides it: see `textField` in
|
|
53
|
-
* `lib/
|
|
52
|
+
* `lib/document/controls`, which wraps the render and stamps the marker together.
|
|
54
53
|
*
|
|
55
54
|
* The two reasons are not the same shape, hence a word rather than a boolean:
|
|
56
55
|
* • `"always"` — it draws nothing wherever it appears. A device scope note, a
|
|
@@ -66,7 +65,7 @@ type NoControlFieldMeta = "always" | "authored-copy";
|
|
|
66
65
|
* own. The ONE place that knows the marker's shape. */
|
|
67
66
|
declare function noControlMetaOf(field: unknown): NoControlFieldMeta | null;
|
|
68
67
|
/** Stamp {@link NO_CONTROL_FIELD} on a field. The cast is here and nowhere else:
|
|
69
|
-
*
|
|
68
|
+
* The old editor's field types have no slot for a marker, so an object literal carrying
|
|
70
69
|
* one trips the excess-property check at every call site otherwise — the same
|
|
71
70
|
* reason `group()` and the text/link markers have their own builders. */
|
|
72
71
|
declare function noControlField<F>(field: F, reason: NoControlFieldMeta): F;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{NO_CONTROL_ATTR,NO_CONTROL_FIELD,NoControlMark,noControlField,noControlMetaOf}from"../../../chunk-
|
|
1
|
+
export{NO_CONTROL_ATTR,NO_CONTROL_FIELD,NoControlMark,noControlField,noControlMetaOf}from"../../../chunk-INRERJU4.js";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/
|
|
2
|
+
* lib/document/part-id.ts — how one PART of a section is named: `"<nodeId>::<propKey>"`.
|
|
3
3
|
*
|
|
4
4
|
* A part is one authored text of a node (a heading, a button label) that the
|
|
5
5
|
* editor's inspector can drill into. Its id is read on both sides of the
|
|
6
6
|
* preview: the section's render marks each part with it, and the screen's part
|
|
7
7
|
* bridge (components/usePartBridge) opens the part it names. The codec moved
|
|
8
|
-
* here from lib/
|
|
8
|
+
* here from lib/document/text-parts (which re-exports it) so the screen reads it
|
|
9
9
|
* without the text walk, and moves into efficient-easel with it (doc/adr/0004).
|
|
10
10
|
*/
|
|
11
11
|
/** Separates the node id from the prop key inside a part id. A doubled colon:
|
|
12
|
-
*
|
|
12
|
+
* an old-editor node id is `<Type>-<uuid>` and a compound zone is `<parentId>:<slot>`,
|
|
13
13
|
* so a single colon is already taken. */
|
|
14
14
|
declare const PART_SEP = "::";
|
|
15
15
|
/** `"<nodeId>::<propKey>"`, or `"<nodeId>::"` for "the whole section". */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{PART_SEP,decodePartId,encodePartId}from"../../../chunk-R4AUZVA3.js";
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* The two callers are told apart HERE rather than at each of the eight call
|
|
18
18
|
* sites, because the difference is one rule and a rule spelled eight times is a
|
|
19
|
-
* rule that drifts. `useSelectHandler` (lib/
|
|
19
|
+
* rule that drifts. `useSelectHandler` (lib/document/preview-selection-context) is
|
|
20
20
|
* the single entry point every in-preview click already goes through — it is
|
|
21
21
|
* invoked from inside the portaled preview iframe — so wrapping it once covers
|
|
22
22
|
* both editor shells and all four bridges, and the tree keeps calling the same
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{isPreviewClick,runAsPreviewClick}from"../../../chunk-MGVI67QV.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{gotoPreviewSlide,pinPreviewToBottom,pinPreviewToSection,previewFrame,scrollPreviewToSection,scrollPreviewToTop}from"../../../chunk-
|
|
1
|
+
export{gotoPreviewSlide,pinPreviewToBottom,pinPreviewToSection,previewFrame,scrollPreviewToSection,scrollPreviewToTop}from"../../../chunk-DDH2DYQP.js";import"../../../chunk-AJ2SUSET.js";import"../../../chunk-LF3FUSCQ.js";import"../../../chunk-MGVI67QV.js";
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* lib/
|
|
2
|
+
* lib/document/preview-events.ts — events the editor's screen sends INTO the preview.
|
|
3
3
|
*
|
|
4
4
|
* Moved from components/HeroSection (which re-exports them) so the screen's
|
|
5
|
-
* preview bridge (lib/
|
|
5
|
+
* preview bridge (lib/document/preview-dom) can send them without importing a
|
|
6
6
|
* section, and moves into efficient-easel with the screen (doc/adr/0004). A
|
|
7
7
|
* section listens for its own; the name is the contract between the two.
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* Event the editor chrome dispatches INTO the preview iframe to jump a Hero's
|
|
11
11
|
* slider to a slide by index. The chrome (section tree + "Add slide") lives
|
|
12
|
-
* outside this iframe and can't reach the slider's React state, and
|
|
12
|
+
* outside this iframe and can't reach the slider's React state, and the old editor's
|
|
13
13
|
* selection overlay is portaled to the iframe `<body>` (not inside `.hero-track`),
|
|
14
14
|
* so selection alone can't be observed from here — this is the explicit bridge.
|
|
15
15
|
* See {@link ScreenChrome} `selectChild` / `addChild`.
|
|
16
16
|
*/
|
|
17
17
|
declare const HERO_SLIDER_GOTO_EVENT = "hero-slider:goto";
|
|
18
18
|
interface HeroSliderGotoDetail {
|
|
19
|
-
/** Target Hero's stable
|
|
19
|
+
/** Target Hero's stable the old editor id (`data-easel-block`); omit to hit all Heroes. */
|
|
20
20
|
id?: string;
|
|
21
21
|
/** Zero-based slide index to show. */
|
|
22
22
|
index: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{HERO_SLIDER_GOTO_EVENT}from"../../../chunk-AJ2SUSET.js";
|
|
@@ -3,8 +3,8 @@ import { ReactNode } from 'react';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Shared machinery for the editor preview's "selection bridges" — the click-to-
|
|
6
|
-
* select plumbing every piece of site CHROME needs because it is NOT
|
|
7
|
-
* and so can't route through
|
|
6
|
+
* select plumbing every piece of site CHROME needs because it is NOT an old-editor node
|
|
7
|
+
* and so can't route through the old editor's own selection. The header, the chat bubble,
|
|
8
8
|
* and a Hero's ticker / background / text overlay each expose the SAME two-way
|
|
9
9
|
* bridge, and all built it by hand until this file:
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{createPreviewSelectionContext,useSelectHandler}from"../../../chunk-
|
|
1
|
+
export{createPreviewSelectionContext,useSelectHandler}from"../../../chunk-TIAWIOGD.js";import"../../../chunk-MGVI67QV.js";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { Data } from '../../../blocks/index.js';
|
|
2
2
|
import { TreeItem } from './content-tree.js';
|
|
3
3
|
import 'react';
|
|
4
|
-
import '../../../types-
|
|
4
|
+
import '../../../types-DFxBChE3.js';
|
|
5
5
|
import '../../../data/index.js';
|
|
6
|
-
import '../../../types-
|
|
7
|
-
import '../../../resolve-
|
|
8
|
-
import '../../../plan-
|
|
6
|
+
import '../../../types-DlQIM1YO.js';
|
|
7
|
+
import '../../../resolve-AJ6WF4EL.js';
|
|
8
|
+
import '../../../plan-CRUh2kVK.js';
|
|
9
9
|
|
|
10
10
|
declare function nodeToDoc(node: TreeItem): Data;
|
|
11
11
|
declare function docToNode(data: Data): TreeItem | null;
|
|
12
12
|
/**
|
|
13
13
|
* Deep-copy a stored section node with FRESH ids — the node's own and every
|
|
14
14
|
* inline slot child's, recursively — so inserting the same template twice never
|
|
15
|
-
* lands two nodes with colliding ids (
|
|
15
|
+
* lands two nodes with colliding ids (the old editor keys selection/replace on id, and
|
|
16
16
|
* React keys render on it).
|
|
17
17
|
*
|
|
18
18
|
* `strip` (0.106.0) sees each copied node once its children are copied, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-
|
|
1
|
+
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-BDSLF5BR.js";import"../../../chunk-TCAAOYQY.js";
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
* `scripts/test-slot-child-lists.tsx` §5 pins that this stays the ONE home.
|
|
65
65
|
*/
|
|
66
66
|
/**
|
|
67
|
-
* A
|
|
67
|
+
* A the old editor content node as this rule reads it. Deliberately looser than
|
|
68
68
|
* `TreeItem` (no required `id`): `CollectionCard.render` names itself from the
|
|
69
69
|
* props it was handed, and never has a node in hand.
|
|
70
70
|
*/
|
|
@@ -155,7 +155,7 @@ type RowNameRule<N extends SlotChild = SlotChild> = (node: N, level: "section" |
|
|
|
155
155
|
* an ordinary `Heading` a merchant writes — copy, printed on the page. A rename
|
|
156
156
|
* keyed on the prop NAME would quietly rewrite that heading from a menu item
|
|
157
157
|
* called "Rename". So the field must DECLARE itself an identifier
|
|
158
|
-
* (`withIdentifier`, see `lib/
|
|
158
|
+
* (`withIdentifier`, see `lib/document/controls`), which is the same declaration the
|
|
159
159
|
* settings panel reads to keep these rows out of the copy list.
|
|
160
160
|
*
|
|
161
161
|
* `fields` is taken as an argument rather than imported, exactly like the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{rootRowName,sectionRenameProp,slotChildName,slotChildRenameProp,slotChildRowName}from"../../../chunk-SSRYU3YG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-6UAEFOJ4.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{dedupeSlotChildren}from"../../../chunk-7OCEPOEJ.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A component type's own `defaultProps`, looked up in the
|
|
2
|
+
* A component type's own `defaultProps`, looked up in the old editor config.
|
|
3
3
|
*
|
|
4
|
-
* Handed IN rather than imported: `lib/
|
|
4
|
+
* Handed IN rather than imported: `lib/document/config` imports the seed
|
|
5
5
|
* registry's neighbours, and a seed registry that reached back into the config
|
|
6
6
|
* would close the loop. Both callers of `seeds()` already hold the config
|
|
7
7
|
* (`components/ScreenChrome`, `components/StandaloneSectionEditor`),
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* seed ONE flat child whose every field is content, so a missing default changes
|
|
12
12
|
* nothing they draw. Image & Text Columns seeds a Box holding blocks, and a Box
|
|
13
13
|
* without its `direction` / `justify` / `align` / `wrap` is a different shape on
|
|
14
|
-
* the page — see `boxColumnSeed` in lib/
|
|
14
|
+
* the page — see `boxColumnSeed` in lib/document/slot-specs.
|
|
15
15
|
*/
|
|
16
16
|
type NodeDefaults = (type: string) => Record<string, unknown>;
|
|
17
17
|
interface SlotSectionSpec {
|