efficient-easel 21.0.0 → 21.1.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 +15 -3
- package/dist/{CanvasDragLayer-Cd1o0HQf.d.ts → CanvasDragLayer-CFUcBbgc.d.ts} +1 -1
- package/dist/{ScreenDocumentContext-CFJeqqKk.d.ts → ScreenDocumentContext-1RgtGKWR.d.ts} +4 -0
- package/dist/blocks/index.d.ts +5 -3
- package/dist/{buckets-Tj-nkBpg.d.ts → buckets-Sw94ll9I.d.ts} +1 -1
- package/dist/canvas/index.d.ts +8 -6
- package/dist/canvas/index.js +1 -1
- package/dist/chunk-2C7W64S5.js +8 -0
- package/dist/chunk-2L6KWUBC.js +1 -0
- package/dist/chunk-467WWV4I.js +1 -0
- package/dist/chunk-4FD7TAOE.js +1 -0
- package/dist/chunk-67HCYOW4.js +1 -0
- package/dist/chunk-A2VVB4RH.js +0 -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-DDH2DYQP.js +1 -0
- package/dist/{chunk-HGCGIRVA.js → chunk-DNQ7AF6K.js} +1 -1
- package/dist/{chunk-66JNVRQM.js → chunk-GWYNMSIP.js} +1 -1
- package/dist/{chunk-V2ULLALL.js → chunk-I67UW5UG.js} +3 -3
- package/dist/{chunk-MSGZ56QL.js → chunk-KWLHKKZO.js} +1 -1
- package/dist/{chunk-FOHHXSOL.js → chunk-MLQKNED6.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-OHZHYROJ.js +5 -0
- package/dist/{chunk-YHFKWV7H.js → chunk-PFFH7ASD.js} +13 -13
- package/dist/chunk-PRHBWA5V.js +0 -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-TUXLORVR.js +15 -0
- package/dist/{chunk-FGNR22NY.js → chunk-U5DNBT63.js} +1 -1
- package/dist/{chunk-EZTP6E2M.js → chunk-U7TFWHST.js} +1 -1
- package/dist/{chunk-2M4T27BI.js → chunk-WJJ7H42G.js} +7 -7
- package/dist/chunk-YIUE4US7.js +0 -0
- package/dist/{chunk-O7Q4DDJT.js → chunk-YM4UEGBV.js} +1 -1
- package/dist/chunk-YVFYWAYU.js +65 -0
- package/dist/{chunk-N2RISV46.js → chunk-ZOSEBPAI.js} +1 -1
- package/dist/copy/index.d.ts +2 -2
- package/dist/copy/index.js +11 -11
- package/dist/drag/index.d.ts +2 -2
- 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 +3 -1
- package/dist/easel/index.d.ts +2 -2
- package/dist/easel/index.js +1 -1
- package/dist/fields/index.d.ts +4 -4
- package/dist/fields/index.js +1 -1
- package/dist/panel/index.d.ts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/render/index.js +5 -5
- package/dist/{repeat-Czi-6zPX.d.ts → repeat-BNgSq2Nw.d.ts} +1 -1
- package/dist/screen/components/AddBlockRow.d.ts +1 -1
- package/dist/screen/components/AddBlockRow.js +1 -1
- package/dist/screen/components/AddSidePanel.d.ts +2 -2
- package/dist/screen/components/AddSidePanel.js +1 -1
- package/dist/screen/components/NodeContextMenu.d.ts +13 -13
- package/dist/screen/components/NodeContextMenu.js +1 -1
- package/dist/screen/components/PageEditGuardNotices.js +1 -1
- package/dist/screen/components/PreviewPartsContext.d.ts +2 -2
- package/dist/screen/components/PreviewPartsContext.js +1 -1
- package/dist/screen/components/SaveControls.d.ts +7 -7
- package/dist/screen/components/ScreenChrome.js +1 -1
- package/dist/screen/components/ScreenDocumentContext.d.ts +2 -2
- package/dist/screen/components/ScreenDocumentContext.js +1 -1
- package/dist/screen/components/ScreenMount.d.ts +7 -7
- package/dist/screen/components/ScreenMount.js +1 -1
- package/dist/screen/components/ScreenStoreProvider.d.ts +7 -7
- 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 +7 -7
- package/dist/screen/components/usePartBridge.js +1 -1
- package/dist/screen/index.d.ts +8 -8
- package/dist/screen/index.js +1 -1
- package/dist/screen/lib/admin-bridge.d.ts +1 -1
- package/dist/screen/lib/admin-bridge.js +1 -1
- package/dist/screen/lib/content/view-tiers.d.ts +1 -1
- package/dist/screen/lib/document/add-target-types.d.ts +55 -0
- package/dist/screen/lib/document/add-target-types.js +1 -0
- package/dist/screen/lib/document/block-choice.d.ts +64 -0
- package/dist/screen/lib/document/block-choice.js +1 -0
- package/dist/screen/lib/document/block-types-in.d.ts +39 -0
- package/dist/screen/lib/document/block-types-in.js +1 -0
- package/dist/screen/lib/document/content-tree.d.ts +222 -0
- package/dist/screen/lib/document/content-tree.js +1 -0
- package/dist/screen/lib/document/device-fields.d.ts +128 -0
- package/dist/screen/lib/document/device-fields.js +1 -0
- package/dist/screen/lib/document/field-buckets.d.ts +36 -0
- package/dist/screen/lib/document/field-buckets.js +1 -0
- package/dist/screen/lib/document/field-markers.d.ts +205 -0
- package/dist/screen/lib/document/field-markers.js +1 -0
- package/dist/screen/lib/document/hidable.d.ts +44 -0
- package/dist/screen/lib/document/hidable.js +1 -0
- package/dist/screen/lib/document/palette-sections.d.ts +103 -0
- package/dist/screen/lib/document/palette-sections.js +1 -0
- package/dist/screen/lib/document/panel-fields.d.ts +47 -0
- package/dist/screen/lib/document/panel-fields.js +1 -0
- package/dist/screen/lib/document/panel-no-control-mark.d.ts +74 -0
- package/dist/screen/lib/document/panel-no-control-mark.js +1 -0
- package/dist/screen/lib/document/part-id.d.ts +23 -0
- package/dist/screen/lib/document/part-id.js +1 -0
- package/dist/screen/lib/document/preview-click.d.ts +49 -0
- package/dist/screen/lib/document/preview-click.js +1 -0
- package/dist/screen/lib/document/preview-dom.d.ts +8 -0
- package/dist/screen/lib/document/preview-dom.js +1 -0
- package/dist/screen/lib/document/preview-events.d.ts +25 -0
- package/dist/screen/lib/document/preview-events.js +1 -0
- package/dist/screen/lib/document/preview-selection-context.d.ts +72 -0
- package/dist/screen/lib/document/preview-selection-context.js +1 -0
- package/dist/screen/lib/document/section-doc.d.ts +24 -0
- package/dist/screen/lib/document/section-doc.js +1 -0
- package/dist/screen/lib/document/slot-child-name.d.ts +225 -0
- package/dist/screen/lib/document/slot-child-name.js +1 -0
- package/dist/screen/lib/document/slot-heal.d.ts +5 -0
- package/dist/screen/lib/document/slot-heal.js +1 -0
- package/dist/screen/lib/document/slot-section-spec.d.ts +96 -0
- package/dist/screen/lib/document/slot-section-spec.js +1 -0
- package/dist/screen/lib/document/style-clipboard.d.ts +144 -0
- package/dist/screen/lib/document/style-clipboard.js +1 -0
- package/dist/screen/lib/document/text-control-kinds.d.ts +71 -0
- package/dist/screen/lib/document/text-control-kinds.js +1 -0
- package/dist/screen/lib/document/tree-reveal.d.ts +62 -0
- package/dist/screen/lib/document/tree-reveal.js +1 -0
- package/dist/screen/lib/document/use-section-ops.d.ts +110 -0
- package/dist/screen/lib/document/use-section-ops.js +1 -0
- package/dist/screen/lib/document-addressing.d.ts +2 -2
- package/dist/screen/lib/document-switch.d.ts +1 -1
- package/dist/screen/lib/host.d.ts +2 -2
- 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 +2 -2
- package/dist/screen/lib/media-picker.d.ts +2 -2
- package/dist/screen/lib/page-lock.d.ts +1 -1
- package/dist/screen/lib/puck/add-target-types.d.ts +3 -55
- package/dist/screen/lib/puck/add-target-types.js +1 -0
- package/dist/screen/lib/puck/block-choice.d.ts +1 -64
- package/dist/screen/lib/puck/block-choice.js +1 -1
- package/dist/screen/lib/puck/block-types-in.d.ts +1 -39
- package/dist/screen/lib/puck/block-types-in.js +1 -1
- package/dist/screen/lib/puck/content-tree.d.ts +1 -222
- package/dist/screen/lib/puck/content-tree.js +1 -1
- package/dist/screen/lib/puck/device-fields.d.ts +3 -127
- package/dist/screen/lib/puck/device-fields.js +1 -1
- package/dist/screen/lib/puck/field-buckets.d.ts +2 -36
- package/dist/screen/lib/puck/field-buckets.js +1 -1
- package/dist/screen/lib/puck/field-markers.d.ts +2 -205
- package/dist/screen/lib/puck/field-markers.js +1 -1
- package/dist/screen/lib/puck/hidable.d.ts +1 -44
- package/dist/screen/lib/puck/hidable.js +1 -1
- package/dist/screen/lib/puck/palette-sections.d.ts +2 -97
- package/dist/screen/lib/puck/palette-sections.js +1 -1
- package/dist/screen/lib/puck/panel-fields.d.ts +1 -47
- package/dist/screen/lib/puck/panel-fields.js +1 -1
- package/dist/screen/lib/puck/panel-no-control-mark.d.ts +2 -74
- package/dist/screen/lib/puck/panel-no-control-mark.js +1 -1
- package/dist/screen/lib/puck/part-id.d.ts +1 -23
- package/dist/screen/lib/puck/part-id.js +1 -1
- package/dist/screen/lib/puck/preview-click.d.ts +1 -49
- package/dist/screen/lib/puck/preview-click.js +1 -1
- package/dist/screen/lib/puck/preview-dom.d.ts +1 -8
- package/dist/screen/lib/puck/preview-dom.js +1 -1
- package/dist/screen/lib/puck/preview-events.d.ts +1 -25
- package/dist/screen/lib/puck/preview-events.js +1 -1
- package/dist/screen/lib/puck/preview-selection-context.d.ts +2 -72
- package/dist/screen/lib/puck/preview-selection-context.js +1 -1
- package/dist/screen/lib/puck/section-doc.d.ts +3 -18
- package/dist/screen/lib/puck/section-doc.js +1 -1
- package/dist/screen/lib/puck/slot-child-name.d.ts +1 -225
- package/dist/screen/lib/puck/slot-child-name.js +1 -1
- package/dist/screen/lib/puck/slot-heal.d.ts +2 -5
- package/dist/screen/lib/puck/slot-heal.js +1 -1
- package/dist/screen/lib/puck/slot-section-spec.d.ts +1 -96
- package/dist/screen/lib/puck/slot-section-spec.js +1 -0
- package/dist/screen/lib/puck/style-clipboard.d.ts +12 -114
- package/dist/screen/lib/puck/style-clipboard.js +1 -1
- package/dist/screen/lib/puck/text-control-kinds.d.ts +1 -71
- package/dist/screen/lib/puck/text-control-kinds.js +1 -1
- package/dist/screen/lib/puck/tree-reveal.d.ts +1 -62
- package/dist/screen/lib/puck/tree-reveal.js +1 -1
- package/dist/screen/lib/puck/use-section-ops.d.ts +4 -105
- package/dist/screen/lib/puck/use-section-ops.js +1 -1
- package/dist/screen/lib/screen-parts.d.ts +25 -18
- 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 +1 -1
- package/dist/screen/lib/section-templates.js +1 -1
- package/dist/screen/lib/session-context.d.ts +1 -1
- package/dist/screen/lib/session-context.js +1 -1
- package/dist/screen/lib/session.d.ts +3 -3
- 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 +1 -1
- package/dist/screen/lib/shared-sections.js +1 -1
- package/dist/screen/screen.css +2 -2
- package/dist/strings/index.d.ts +2 -2
- package/dist/strings/index.js +1 -1
- package/dist/text-styles/index.js +21 -21
- package/dist/tree/index.d.ts +1 -1
- package/dist/{types-CDX6vd6A.d.ts → types-B8NwXKlE.d.ts} +1 -1
- package/dist/{watch-BTYOJpQU.d.ts → watch-D8xZow3y.d.ts} +2 -2
- package/dist/{words-BeX5eGq7.d.ts → words-CmEnDoOe.d.ts} +1 -1
- package/package.json +154 -10
- package/dist/chunk-2E2SXDYQ.js +0 -1
- 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/{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
|
@@ -1,74 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* panel-no-control-mark — what a settings field draws when it draws NO CONTROL
|
|
5
|
-
* on the screen it is on (card 66178).
|
|
6
|
-
*
|
|
7
|
-
* WHY A FIELD HAS TO SAY THIS OUT LOUD. Puck lays the inspector out as a FLAT
|
|
8
|
-
* list and owns the wrapper around every top-level field, and its own stylesheet
|
|
9
|
-
* rules the gap between two of them:
|
|
10
|
-
*
|
|
11
|
-
* ._PuckFields--wrapFields_ ._PuckFields-field_ + ._PuckFields-field_ {
|
|
12
|
-
* border-top: 1px solid var(--puck-color-grey-09); margin-top: 8px; }
|
|
13
|
-
*
|
|
14
|
-
* That rule is right — a line between two adjacent rows. But a field whose
|
|
15
|
-
* `render` returns `null` still gets the wrapper, still takes its `16px 16px
|
|
16
|
-
* 12px` of padding and still draws the line, so the panel shows a hairline with
|
|
17
|
-
* nothing on one side of it. Measured on the Collections Content tab before this
|
|
18
|
-
* card: two 29px-tall wrappers whose whole content was
|
|
19
|
-
* `<div class="_InputWrapper_"></div>`, and three rules stacked with only blank
|
|
20
|
-
* space between them. Across the catalogue it was 338 such rows in 74 panels.
|
|
21
|
-
*
|
|
22
|
-
* We cannot stop Puck emitting the wrapper, so the wrapper is collapsed from the
|
|
23
|
-
* outside: the field renders this zero-size marker and ONE declarative rule in
|
|
24
|
-
* `components/storefront-editor.css` takes the wrapper out of the layout
|
|
25
|
-
* entirely — `display: none`, so the row leaves the accessibility tree with it
|
|
26
|
-
* rather than lingering as an unlabelled blank. That is exactly the shape the
|
|
27
|
-
* bucket boundary markers (`data-sf-bucket`) and the device-gated fields
|
|
28
|
-
* (`data-sf-device-hidden`) already use, and it is declarative for the same
|
|
29
|
-
* reason: it cannot race the tab pass.
|
|
30
|
-
*
|
|
31
|
-
* IT IS NOT A WAY TO HIDE A SETTING. A field that draws nothing here must still
|
|
32
|
-
* be reachable somewhere — as an entry row in the section screen's TEXT group,
|
|
33
|
-
* or through another control on the same panel. `scripts/test-panel-no-empty-rows.tsx`
|
|
34
|
-
* §2 fails a field that draws no control and has no way back to it, which is how
|
|
35
|
-
* the lost "Anchor name" box was found.
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
/** The attribute the marker carries — the single source, read by the stylesheet
|
|
39
|
-
* rule and by the guard that proves the rule is there. */
|
|
40
|
-
declare const NO_CONTROL_ATTR = "data-sf-no-control";
|
|
41
|
-
/** The marker itself. `hidden` as well as the CSS rule, so a field that renders
|
|
42
|
-
* it in a context the editor stylesheet has not reached (a test harness, a
|
|
43
|
-
* bundled preview) still draws nothing rather than an empty inline box. */
|
|
44
|
-
declare function NoControlMark(): ReactElement;
|
|
45
|
-
/**
|
|
46
|
-
* …AND THE SAME FACT SAID ON THE FIELD OBJECT (card 66201).
|
|
47
|
-
*
|
|
48
|
-
* The attribute above is drawn, so only a render can see it. The pass that drops
|
|
49
|
-
* a heading standing over nothing runs in `resolveFields`, where there is no DOM
|
|
50
|
-
* and no React — it has a field list and nothing else. So a field that draws no
|
|
51
|
-
* control has to say so twice, in the two places the answer is asked, and both
|
|
52
|
-
* are stamped by the ONE `if` that decides it: see `textField` in
|
|
53
|
-
* `lib/puck/controls`, which wraps the render and stamps the marker together.
|
|
54
|
-
*
|
|
55
|
-
* The two reasons are not the same shape, hence a word rather than a boolean:
|
|
56
|
-
* • `"always"` — it draws nothing wherever it appears. A device scope note, a
|
|
57
|
-
* key whose one control is a row elsewhere on the same panel.
|
|
58
|
-
* • `"authored-copy"` — a scalar copy box card 8819 moved to the DRILL screen.
|
|
59
|
-
* It draws nothing on the section screen unless its prop is STRUCTURAL, which
|
|
60
|
-
* is the one question `SuppressibleText` also asks at render time.
|
|
61
|
-
*/
|
|
62
|
-
declare const NO_CONTROL_FIELD: "__noControl";
|
|
63
|
-
/** The payload on {@link NO_CONTROL_FIELD}. */
|
|
64
|
-
type NoControlFieldMeta = "always" | "authored-copy";
|
|
65
|
-
/** Read a field's no-control payload, or `null` when it draws a control of its
|
|
66
|
-
* own. The ONE place that knows the marker's shape. */
|
|
67
|
-
declare function noControlMetaOf(field: unknown): NoControlFieldMeta | null;
|
|
68
|
-
/** Stamp {@link NO_CONTROL_FIELD} on a field. The cast is here and nowhere else:
|
|
69
|
-
* Puck's field types have no slot for a marker, so an object literal carrying
|
|
70
|
-
* one trips the excess-property check at every call site otherwise — the same
|
|
71
|
-
* reason `group()` and the text/link markers have their own builders. */
|
|
72
|
-
declare function noControlField<F>(field: F, reason: NoControlFieldMeta): F;
|
|
73
|
-
|
|
74
|
-
export { NO_CONTROL_ATTR, NO_CONTROL_FIELD, type NoControlFieldMeta, NoControlMark, noControlField, noControlMetaOf };
|
|
1
|
+
export { NO_CONTROL_ATTR, NO_CONTROL_FIELD, NoControlFieldMeta, NoControlMark, noControlField, noControlMetaOf } from '../document/panel-no-control-mark.js';
|
|
2
|
+
import 'react';
|
|
@@ -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,23 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* lib/puck/part-id.ts — how one PART of a section is named: `"<nodeId>::<propKey>"`.
|
|
3
|
-
*
|
|
4
|
-
* A part is one authored text of a node (a heading, a button label) that the
|
|
5
|
-
* editor's inspector can drill into. Its id is read on both sides of the
|
|
6
|
-
* preview: the section's render marks each part with it, and the screen's part
|
|
7
|
-
* bridge (components/usePartBridge) opens the part it names. The codec moved
|
|
8
|
-
* here from lib/puck/text-parts (which re-exports it) so the screen reads it
|
|
9
|
-
* without the text walk, and moves into efficient-easel with it (doc/adr/0004).
|
|
10
|
-
*/
|
|
11
|
-
/** Separates the node id from the prop key inside a part id. A doubled colon:
|
|
12
|
-
* a Puck node id is `<Type>-<uuid>` and a compound zone is `<parentId>:<slot>`,
|
|
13
|
-
* so a single colon is already taken. */
|
|
14
|
-
declare const PART_SEP = "::";
|
|
15
|
-
/** `"<nodeId>::<propKey>"`, or `"<nodeId>::"` for "the whole section". */
|
|
16
|
-
declare function encodePartId(nodeId: string, propKey: string | null): string;
|
|
17
|
-
/** Inverse of {@link encodePartId}. `propKey: null` means the whole section. */
|
|
18
|
-
declare function decodePartId(partId: string): {
|
|
19
|
-
nodeId: string;
|
|
20
|
-
propKey: string | null;
|
|
21
|
-
} | null;
|
|
22
|
-
|
|
23
|
-
export { PART_SEP, decodePartId, encodePartId };
|
|
1
|
+
export { PART_SEP, decodePartId, encodePartId } from '../document/part-id.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{PART_SEP,decodePartId,encodePartId}from"../../../chunk-
|
|
1
|
+
export{PART_SEP,decodePartId,encodePartId}from"../../../chunk-R4AUZVA3.js";
|
|
@@ -1,49 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* "Did this come from a click INSIDE the preview?" — the one fact that decides
|
|
3
|
-
* whether the editor is allowed to scroll its canvas.
|
|
4
|
-
*
|
|
5
|
-
* Every in-preview selection bridge (a section's text PARTS, and a Hero's
|
|
6
|
-
* ticker / Background / Text) shares ONE handler with the matching row in the
|
|
7
|
-
* Layers tree. The handler ends in `scrollPreviewToSection`, and only one of its
|
|
8
|
-
* two callers should travel:
|
|
9
|
-
*
|
|
10
|
-
* · from the LAYERS TREE — scroll. A row in a list can name a section that is
|
|
11
|
-
* off-screen, and taking the merchant there is the whole point of clicking it.
|
|
12
|
-
* · from a CLICK IN THE PREVIEW — do not. The merchant is already looking at
|
|
13
|
-
* the thing they clicked, so moving the canvas under them is motion they did
|
|
14
|
-
* not ask for (card 66392: "after clicking, the screen moves; cancel this
|
|
15
|
-
* sliding motion" — measured at 409px of travel in the phone preview).
|
|
16
|
-
*
|
|
17
|
-
* The two callers are told apart HERE rather than at each of the eight call
|
|
18
|
-
* sites, because the difference is one rule and a rule spelled eight times is a
|
|
19
|
-
* rule that drifts. `useSelectHandler` (lib/puck/preview-selection-context) is
|
|
20
|
-
* the single entry point every in-preview click already goes through — it is
|
|
21
|
-
* invoked from inside the portaled preview iframe — so wrapping it once covers
|
|
22
|
-
* both editor shells and all four bridges, and the tree keeps calling the same
|
|
23
|
-
* handlers directly and unchanged.
|
|
24
|
-
*
|
|
25
|
-
* ⚠️ AMBIENT, AND DELIBERATELY SO. Threading a "did this come from the preview"
|
|
26
|
-
* argument through the bridges would mean editing every handler and every one of
|
|
27
|
-
* its callers — exactly the call-site patching that left the last fix half-done.
|
|
28
|
-
* The cost is that the fact lives in a module variable, so two things are load-
|
|
29
|
-
* bearing: the flag is only ever read SYNCHRONOUSLY (see `scrollPreviewToSection`,
|
|
30
|
-
* which must not defer the check into its `requestAnimationFrame`), and it is
|
|
31
|
-
* restored in a `finally` so a throwing handler cannot leave the canvas
|
|
32
|
-
* permanently unable to scroll. Both are pinned by
|
|
33
|
-
* `scripts/test-preview-click-does-not-scroll.tsx`.
|
|
34
|
-
*
|
|
35
|
-
* No imports on purpose: `preview-dom` reads this and `preview-selection-context`
|
|
36
|
-
* writes it, and the latter is reached from inside the preview iframe — putting
|
|
37
|
-
* the flag in `preview-dom` would close a cycle back through HeroSection.
|
|
38
|
-
*/
|
|
39
|
-
/**
|
|
40
|
-
* Run `handler` as work caused by a click INSIDE the preview, so anything it
|
|
41
|
-
* reaches knows not to move the canvas. Returns whatever `handler` returns; the
|
|
42
|
-
* fact is restored even if it throws.
|
|
43
|
-
*/
|
|
44
|
-
declare function runAsPreviewClick<T>(handler: () => T): T;
|
|
45
|
-
/** True while a `runAsPreviewClick` handler is on the stack. Read it
|
|
46
|
-
* SYNCHRONOUSLY — deferred work runs after the click has already returned. */
|
|
47
|
-
declare function isPreviewClick(): boolean;
|
|
48
|
-
|
|
49
|
-
export { isPreviewClick, runAsPreviewClick };
|
|
1
|
+
export { isPreviewClick, runAsPreviewClick } from '../document/preview-click.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{isPreviewClick,runAsPreviewClick}from"../../../chunk-
|
|
1
|
+
export{isPreviewClick,runAsPreviewClick}from"../../../chunk-MGVI67QV.js";
|
|
@@ -1,8 +1 @@
|
|
|
1
|
-
|
|
2
|
-
declare function scrollPreviewToSection(id: string): void;
|
|
3
|
-
declare function gotoPreviewSlide(heroId: string, index: number): void;
|
|
4
|
-
declare function scrollPreviewToTop(): void;
|
|
5
|
-
declare function pinPreviewToSection(id: string): () => void;
|
|
6
|
-
declare function pinPreviewToBottom(onPinned?: () => void): () => void;
|
|
7
|
-
|
|
8
|
-
export { gotoPreviewSlide, pinPreviewToBottom, pinPreviewToSection, previewFrame, scrollPreviewToSection, scrollPreviewToTop };
|
|
1
|
+
export { gotoPreviewSlide, pinPreviewToBottom, pinPreviewToSection, previewFrame, scrollPreviewToSection, scrollPreviewToTop } from '../document/preview-dom.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,25 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* lib/puck/preview-events.ts — events the editor's screen sends INTO the preview.
|
|
3
|
-
*
|
|
4
|
-
* Moved from components/HeroSection (which re-exports them) so the screen's
|
|
5
|
-
* preview bridge (lib/puck/preview-dom) can send them without importing a
|
|
6
|
-
* section, and moves into efficient-easel with the screen (doc/adr/0004). A
|
|
7
|
-
* section listens for its own; the name is the contract between the two.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Event the editor chrome dispatches INTO the preview iframe to jump a Hero's
|
|
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 Puck's
|
|
13
|
-
* selection overlay is portaled to the iframe `<body>` (not inside `.hero-track`),
|
|
14
|
-
* so selection alone can't be observed from here — this is the explicit bridge.
|
|
15
|
-
* See {@link ScreenChrome} `selectChild` / `addChild`.
|
|
16
|
-
*/
|
|
17
|
-
declare const HERO_SLIDER_GOTO_EVENT = "hero-slider:goto";
|
|
18
|
-
interface HeroSliderGotoDetail {
|
|
19
|
-
/** Target Hero's stable Puck id (`data-puck-component`); omit to hit all Heroes. */
|
|
20
|
-
id?: string;
|
|
21
|
-
/** Zero-based slide index to show. */
|
|
22
|
-
index: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export { HERO_SLIDER_GOTO_EVENT, type HeroSliderGotoDetail };
|
|
1
|
+
export { HERO_SLIDER_GOTO_EVENT, HeroSliderGotoDetail } from '../document/preview-events.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{HERO_SLIDER_GOTO_EVENT}from"../../../chunk-
|
|
1
|
+
export{HERO_SLIDER_GOTO_EVENT}from"../../../chunk-AJ2SUSET.js";
|
|
@@ -1,72 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
/**
|
|
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 a Puck node
|
|
7
|
-
* and so can't route through Puck's own selection. The header, the chat bubble,
|
|
8
|
-
* and a Hero's ticker / background / text overlay each expose the SAME two-way
|
|
9
|
-
* bridge, and all built it by hand until this file:
|
|
10
|
-
*
|
|
11
|
-
* - `select(…)` / `setSelectHandler(fn)` — a ref-backed handler the chrome
|
|
12
|
-
* registers (it opens the matching inspector panel), invoked from inside the
|
|
13
|
-
* portaled preview iframe when the element is clicked. It lives behind a ref so
|
|
14
|
-
* the chrome can re-register without re-rendering the preview; `select` itself
|
|
15
|
-
* stays stable. See {@link useSelectHandler}.
|
|
16
|
-
* - a mirrored SELECTION the preview reads to draw its own "selected" outline.
|
|
17
|
-
*
|
|
18
|
-
* Two entry points reuse the bridge:
|
|
19
|
-
* - {@link useSelectHandler} — just the ref-backed `select` / `setSelectHandler`
|
|
20
|
-
* pair, for the header + chat bridges. They keep a plain boolean `selected` and
|
|
21
|
-
* layer their own live-config state around it, so they compose this hook rather
|
|
22
|
-
* than the whole context factory.
|
|
23
|
-
* - {@link createPreviewSelectionContext} — a whole context + provider + hook for
|
|
24
|
-
* an ID-SCOPED bridge (a Hero's ticker / background / text), where the mirrored
|
|
25
|
-
* selection is "which sibling id is selected" (`selected<Thing>Id`), scoped by
|
|
26
|
-
* id so sibling heroes never cross-select. The three such contexts differ ONLY
|
|
27
|
-
* in that field's name, so they are each one call to this factory.
|
|
28
|
-
*/
|
|
29
|
-
/**
|
|
30
|
-
* The ref-backed `select` / `setSelectHandler` pair shared by every selection
|
|
31
|
-
* bridge. `Args` is the click payload the chrome's handler receives — `[]` for a
|
|
32
|
-
* lone toggle (header / chat) or `[id: string]` for an id-scoped bridge (ticker /
|
|
33
|
-
* hero media / hero text). `select` is stable across renders; registering a new
|
|
34
|
-
* handler never re-renders the portaled preview.
|
|
35
|
-
*/
|
|
36
|
-
declare function useSelectHandler<Args extends unknown[]>(): {
|
|
37
|
-
select: (...args: Args) => void;
|
|
38
|
-
setSelectHandler: (fn: (...args: Args) => void) => void;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* The context value of an id-scoped selection bridge, keyed by the id field's
|
|
42
|
-
* name `Key` (e.g. `"selectedHeroId"`): the mirrored id + its `set…` setter, plus
|
|
43
|
-
* the shared `select(id)` / `setSelectHandler` pair. Keeping the field name in the
|
|
44
|
-
* type is what lets one factory reproduce each context's exact public API.
|
|
45
|
-
*/
|
|
46
|
-
type PreviewIdSelection<Key extends string> = {
|
|
47
|
-
[P in Key]: string | null;
|
|
48
|
-
} & {
|
|
49
|
-
[P in Key as `set${Capitalize<P>}`]: (id: string | null) => void;
|
|
50
|
-
} & {
|
|
51
|
-
select: (id: string) => void;
|
|
52
|
-
setSelectHandler: (fn: (id: string) => void) => void;
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Build a complete id-scoped selection-bridge context — the shared body of
|
|
56
|
-
* PreviewTickerContext / PreviewHeroMediaContext / PreviewHeroTextContext, which
|
|
57
|
-
* differ only in the id field's NAME. Pass that field name and the returned
|
|
58
|
-
* `Provider` + `useSelection` expose exactly `{ [idKey], set<IdKey>, select,
|
|
59
|
-
* setSelectHandler }`, so each context's existing consumers read unchanged.
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* export const { Provider: PreviewTickerProvider, useSelection: usePreviewTicker } =
|
|
63
|
-
* createPreviewSelectionContext("selectedHeroId");
|
|
64
|
-
*/
|
|
65
|
-
declare function createPreviewSelectionContext<Key extends string>(idKey: Key): {
|
|
66
|
-
Provider: ({ children }: {
|
|
67
|
-
children: ReactNode;
|
|
68
|
-
}) => react.JSX.Element;
|
|
69
|
-
useSelection: () => PreviewIdSelection<Key>;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export { type PreviewIdSelection, createPreviewSelectionContext, useSelectHandler };
|
|
1
|
+
export { PreviewIdSelection, createPreviewSelectionContext, useSelectHandler } from '../document/preview-selection-context.js';
|
|
2
|
+
import 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{createPreviewSelectionContext,useSelectHandler}from"../../../chunk-
|
|
1
|
+
export{createPreviewSelectionContext,useSelectHandler}from"../../../chunk-TIAWIOGD.js";import"../../../chunk-MGVI67QV.js";
|
|
@@ -1,24 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
export { cloneNodeWithFreshIds, docToNode, nodeToDoc } from '../document/section-doc.js';
|
|
2
|
+
import '../../../blocks/index.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '../../../types-Cq53lL8d.js';
|
|
5
5
|
import '../../../data/index.js';
|
|
6
6
|
import '../../../types-41704JE4.js';
|
|
7
7
|
import '../../../resolve-D68pb3Bx.js';
|
|
8
8
|
import '../../../plan-CZS902DV.js';
|
|
9
|
-
|
|
10
|
-
declare function nodeToDoc(node: TreeItem): Data;
|
|
11
|
-
declare function docToNode(data: Data): TreeItem | null;
|
|
12
|
-
/**
|
|
13
|
-
* Deep-copy a stored section node with FRESH ids — the node's own and every
|
|
14
|
-
* inline slot child's, recursively — so inserting the same template twice never
|
|
15
|
-
* lands two nodes with colliding ids (Puck keys selection/replace on id, and
|
|
16
|
-
* React keys render on it).
|
|
17
|
-
*
|
|
18
|
-
* `strip` (0.106.0) sees each copied node once its children are copied, and
|
|
19
|
-
* answers it as the copy should hold it — the layer's `blockRules.stripCopy`,
|
|
20
|
-
* which takes out what only an original may hold. It keeps the fresh id.
|
|
21
|
-
*/
|
|
22
|
-
declare function cloneNodeWithFreshIds(node: TreeItem, strip?: (node: TreeItem) => TreeItem): TreeItem;
|
|
23
|
-
|
|
24
|
-
export { cloneNodeWithFreshIds, docToNode, nodeToDoc };
|
|
9
|
+
import '../document/content-tree.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-
|
|
1
|
+
export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-BDSLF5BR.js";import"../../../chunk-TCAAOYQY.js";
|
|
@@ -1,225 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* What a slot child is CALLED — the ONE rule, and the only place it is written
|
|
3
|
-
* (card 66194).
|
|
4
|
-
*
|
|
5
|
-
* A slot-backed section (Hero Slideshow, Collections, Product Grid, Customer
|
|
6
|
-
* Photo Grid, Gallery) keeps its children on its own props, and three surfaces
|
|
7
|
-
* have to put a word on each of them: the page editor's Sections tree
|
|
8
|
-
* (`ScreenChrome`), the standalone section editor's tree
|
|
9
|
-
* (`SectionScreenShell`) — which also feeds the list drawn inside the section's
|
|
10
|
-
* own settings panel through `SlotChildActionsContext` — and `CollectionCard`'s
|
|
11
|
-
* own render, which puts the SAME word on the published card.
|
|
12
|
-
*
|
|
13
|
-
* Before this card the rule was written out three times. Card 66186 wrote the
|
|
14
|
-
* second copy, card 66190 had to edit both to add the Collection Card step and
|
|
15
|
-
* discovered the third while doing it. Three copies of a five-rung precedence is
|
|
16
|
-
* a rule that looks right until the day two of them disagree — and a merchant
|
|
17
|
-
* would meet that as a tree row and a card that name the same thing differently.
|
|
18
|
-
*
|
|
19
|
-
* ── THE PRECEDENCE, most specific first ──────────────────────────────────────
|
|
20
|
-
* 1. `props.name` an explicit identifier the author typed (Hero Slide's
|
|
21
|
-
* "Slide name", Gallery Item's "Heading").
|
|
22
|
-
* 2. `props.altName` a card-local override of the name below it
|
|
23
|
-
* (Collection Card's "Alt name").
|
|
24
|
-
* 3. `props.collection` the LINKED category's snapshot name — the source the
|
|
25
|
-
* override above overrides.
|
|
26
|
-
* 3b. `props.source` the LINKED post's snapshot headline (Post card). The
|
|
27
|
-
* SAME rung as `collection` and deliberately beside it:
|
|
28
|
-
* both are "the thing this block is linked to, named by
|
|
29
|
-
* its own snapshot", and both are overridable by the two
|
|
30
|
-
* rungs above. A Post card is the first slot child that
|
|
31
|
-
* links to a post — Featured cover and Long read link to
|
|
32
|
-
* one too, but they are top-level sections and never
|
|
33
|
-
* reach this rule — so without it four cards in a Box
|
|
34
|
-
* all read "Post card" and a merchant cannot tell which
|
|
35
|
-
* one they are dragging.
|
|
36
|
-
* 4. `props.code` a catalog slug (Product Ref stores only this), resolved
|
|
37
|
-
* through `wheelName` when a caller supplies one.
|
|
38
|
-
* 5. the caller's own fallback — see {@link slotChildRowName}.
|
|
39
|
-
*
|
|
40
|
-
* `name` and `altName` may be hidable values (`{text,hidden}`) rather than bare
|
|
41
|
-
* strings, so both read through `hidableText`: an object reaching a tree row
|
|
42
|
-
* crashes it ("Objects are not valid as a React child").
|
|
43
|
-
*
|
|
44
|
-
* Rungs 1–3 are authored copy and may carry the shop's editorial marks. A TREE
|
|
45
|
-
* ROW unwraps them ({@link slotChildRowName}); the published card does not, and
|
|
46
|
-
* must not — that rung's own comment carries the reasoning (card 66202). How a
|
|
47
|
-
* mark is unwrapped is the grammar's, so the row is handed the function that
|
|
48
|
-
* does it, as it is handed the catalog: this module goes into efficient-easel
|
|
49
|
-
* with the screen (doc/adr/0004), and the grammar is the layer's.
|
|
50
|
-
*
|
|
51
|
-
* ── WHY THE CATALOG RESOLVER IS AN ARGUMENT ──────────────────────────────────
|
|
52
|
-
* The two trees genuinely differ at rung 4, and always have: the page editor has
|
|
53
|
-
* the product catalog loaded and shows a Product Ref as "Turbine II", while the
|
|
54
|
-
* standalone shell has no catalog and shows the raw slug `turbine-ii`. That
|
|
55
|
-
* asymmetry shipped with card 66186 and is real behaviour, NOT a defect this
|
|
56
|
-
* module quietly repairs. Taking the resolver as a parameter makes it an
|
|
57
|
-
* explicit argument instead of an accident: the shell passes none, so it shows
|
|
58
|
-
* the slug, and a reader sees that on the call line rather than discovering it.
|
|
59
|
-
* (Same reasoning as `content-tree.ts`, which takes the config as an argument
|
|
60
|
-
* rather than importing it.)
|
|
61
|
-
*
|
|
62
|
-
* `scripts/test-slot-child-name.tsx` pins the behaviour — the precedence, the
|
|
63
|
-
* resolver contract, and that every existing row name is unchanged.
|
|
64
|
-
* `scripts/test-slot-child-lists.tsx` §5 pins that this stays the ONE home.
|
|
65
|
-
*/
|
|
66
|
-
/**
|
|
67
|
-
* A Puck content node as this rule reads it. Deliberately looser than
|
|
68
|
-
* `TreeItem` (no required `id`): `CollectionCard.render` names itself from the
|
|
69
|
-
* props it was handed, and never has a node in hand.
|
|
70
|
-
*/
|
|
71
|
-
type SlotChild = {
|
|
72
|
-
type: string;
|
|
73
|
-
props: Record<string, unknown>;
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* The name a slot child carries in its OWN data — rungs 1–4 above — or `""` when
|
|
77
|
-
* it carries none.
|
|
78
|
-
*
|
|
79
|
-
* `wheelName` resolves a `props.code` catalog slug to a wheel's design name; a
|
|
80
|
-
* caller with no catalog omits it and the slug stands.
|
|
81
|
-
*
|
|
82
|
-
* Callers that need a word for an unnamed child add their own last rung; they do
|
|
83
|
-
* not agree on what it should be, which is exactly why it is not in here. The
|
|
84
|
-
* two trees fall back to the component's label ({@link slotChildRowName}), while
|
|
85
|
-
* `CollectionCard.render` falls back to an editor-only placeholder — an unlinked
|
|
86
|
-
* card must not publish the words "Collection Card".
|
|
87
|
-
*/
|
|
88
|
-
declare function slotChildName(child: SlotChild, wheelName?: (code: string) => string | undefined): string;
|
|
89
|
-
/**
|
|
90
|
-
* The full five-rung rule as a TREE ROW reads it: {@link slotChildName} with its
|
|
91
|
-
* markup unwrapped, else the component's friendly label. `compLabel` is the
|
|
92
|
-
* host's own config-backed lookup (`config.components[type].label ?? type`) —
|
|
93
|
-
* passed in, because this module has no config and importing one would make the
|
|
94
|
-
* editor's naming rule a dependency of the config that describes it.
|
|
95
|
-
*
|
|
96
|
-
* `plainText` unwraps the markup: the plain words of authored copy in the
|
|
97
|
-
* layer's grammar, which the screen holds as `ScreenBlockLook.plainText`
|
|
98
|
-
* (lib/screen-parts). The website's is lib/markup `stripMarkup`. Passed in for
|
|
99
|
-
* the reason `compLabel` is: the grammar is the layer's, and an email's is not
|
|
100
|
-
* a website's.
|
|
101
|
-
*
|
|
102
|
-
* ── WHY THE STRIP IS HERE AND NOT ONE RUNG DOWN (card 66202) ─────────────────
|
|
103
|
-
* A slot child's name is AUTHORED COPY. Rungs 1–3 are boxes a merchant types
|
|
104
|
-
* into, so they may carry any mark in the shop's grammar, and a tree row printed
|
|
105
|
-
* them verbatim: `Precision== Forged==` in a list that is plain text end to end.
|
|
106
|
-
* It reads as broken, and it is expensive — `.sf-subtree` costs 25px a nesting
|
|
107
|
-
* level, so a depth-2 row has roughly 172px of a 288px panel to spell a name in
|
|
108
|
-
* and truncates. Four delimiters come out of that budget before a word does.
|
|
109
|
-
*
|
|
110
|
-
* `slotChildName` deliberately does NOT strip, and that asymmetry is the whole
|
|
111
|
-
* point of putting this on the row rung instead. Its third caller is
|
|
112
|
-
* `CollectionCard.render`, which puts the word on a customer's LIVE page, where
|
|
113
|
-
* `<CollectionCard/>` routes `name` through `renderHeadline` — so `==phrase==`
|
|
114
|
-
* there is the merchant's accent colour, not noise. Stripping one rung lower
|
|
115
|
-
* would have flattened it on every published card that uses one. A tree row is
|
|
116
|
-
* the surface that cannot draw a mark; it is the surface that drops it.
|
|
117
|
-
*
|
|
118
|
-
* Through the grammar's own stripper (the website's `stripMarkup`), never by
|
|
119
|
-
* deleting delimiter characters: that unwraps a PAIR and leaves a lone
|
|
120
|
-
* delimiter exactly where the renderer leaves it, so a half-typed name — which
|
|
121
|
-
* is what mid-edit data actually looks like — keeps its whole line. It also
|
|
122
|
-
* means a mark the grammar grows is handled here with no edit, because this
|
|
123
|
-
* file names no delimiter of its own.
|
|
124
|
-
*
|
|
125
|
-
* The fallback still fires only for a genuinely nameless child: the grammar
|
|
126
|
-
* needs at least one character between a pair, so a name that is non-empty
|
|
127
|
-
* cannot strip to nothing and be renamed into its component's label.
|
|
128
|
-
*/
|
|
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;
|
|
142
|
-
/**
|
|
143
|
-
* WHICH PROP A RENAME WRITES — the write side of the rule above, and here for
|
|
144
|
-
* the reason the read side is: naming a slot child has ONE home (card 66194).
|
|
145
|
-
* A rename that picked its own prop would be a sixth opinion about what a child
|
|
146
|
-
* is called, and the day it disagreed a merchant would rename a row and watch
|
|
147
|
-
* the row not change.
|
|
148
|
-
*
|
|
149
|
-
* Returns the prop key, or `null` when this component has no name to write —
|
|
150
|
-
* and a `null` is what takes `Rename` out of the menu, rather than a menu item
|
|
151
|
-
* that does nothing.
|
|
152
|
-
*
|
|
153
|
-
* ── ONLY A DECLARED IDENTIFIER, AND THIS IS THE WHOLE TRAP ───────────────────
|
|
154
|
-
* `GalleryItem.name` is keyed `name`, it IS what its Layers row says, and it is
|
|
155
|
-
* an ordinary `Heading` a merchant writes — copy, printed on the page. A rename
|
|
156
|
-
* keyed on the prop NAME would quietly rewrite that heading from a menu item
|
|
157
|
-
* called "Rename". So the field must DECLARE itself an identifier
|
|
158
|
-
* (`withIdentifier`, see `lib/puck/controls`), which is the same declaration the
|
|
159
|
-
* settings panel reads to keep these rows out of the copy list.
|
|
160
|
-
*
|
|
161
|
-
* `fields` is taken as an argument rather than imported, exactly like the
|
|
162
|
-
* `wheelName` resolver above: this module has no config, and importing one would
|
|
163
|
-
* make the editor's naming rule a dependency of the config that describes it.
|
|
164
|
-
*
|
|
165
|
-
* The order matches {@link slotChildName}'s precedence, so the prop a rename
|
|
166
|
-
* writes is the prop the row then reads. `altName` before `name` cannot happen
|
|
167
|
-
* in today's config — no component declares both — and the order is written out
|
|
168
|
-
* anyway so the answer does not depend on that staying true.
|
|
169
|
-
*/
|
|
170
|
-
declare function slotChildRenameProp(fields: Record<string, unknown> | undefined): "name" | "altName" | null;
|
|
171
|
-
/**
|
|
172
|
-
* WHICH PROP A SECTION'S RENAME WRITES (0.105.0) — the write side of
|
|
173
|
-
* {@link rootRowName} below, as {@link slotChildRenameProp} is the write side of
|
|
174
|
-
* a slot child's name, and here for the same reason: one home for what a node
|
|
175
|
-
* is called.
|
|
176
|
-
*
|
|
177
|
-
* Owner ruling R11 (Victor Mau, 2026-10-09): Rename works on top-level sections
|
|
178
|
-
* in both editors. A section's row reads rung 1 and nothing below it — its own
|
|
179
|
-
* `name`, else its type's label — so `name` is what a rename writes, and the row
|
|
180
|
-
* then reads it back. Until the ruling a root node had no Rename at all: its row
|
|
181
|
-
* was taken to say only its type, which stopped being true the day the row
|
|
182
|
-
* started reading the `name` the presets seed ("Brand Text", a split's
|
|
183
|
-
* "<Section> section"), and that name had no way to be changed.
|
|
184
|
-
*
|
|
185
|
-
* ── `name` IS WRITTEN UNLESS IT IS COPY — the slot child's trap, at the root ──
|
|
186
|
-
* A section whose fields do not declare `name` carries it only as the editor's
|
|
187
|
-
* label for it: the presets write it, the Layers row reads it, and no page draws
|
|
188
|
-
* it. One that declares it an identifier (`withIdentifier`) is the same. But a
|
|
189
|
-
* field keyed `name` that is ordinary copy — `GalleryItem.name` is a Heading
|
|
190
|
-
* printed on the page — is not a name, and a menu item called "Rename" must not
|
|
191
|
-
* rewrite it: null, and the section gets no Rename. No section of the website's
|
|
192
|
-
* registry declares `name` at all today, so every one of them is renamed.
|
|
193
|
-
*/
|
|
194
|
-
declare function sectionRenameProp(fields: Record<string, unknown> | undefined): "name" | null;
|
|
195
|
-
/**
|
|
196
|
-
* What a ROOT-level node is called in the trees — rung 1 of the same precedence
|
|
197
|
-
* above, and nothing below it.
|
|
198
|
-
*
|
|
199
|
-
* A root node is not a slot child: it has no linked collection, no card-local
|
|
200
|
-
* override and no catalog slug, so four of the five rungs have nothing to say
|
|
201
|
-
* about it. What it CAN carry is rung 1 — an explicit name the author (or the
|
|
202
|
-
* seeding) wrote — and before this function nothing at the root read it.
|
|
203
|
-
*
|
|
204
|
-
* ⚠️ THE DEFECT THAT PUT THIS HERE. `addSection` seeds a split pair as a Box
|
|
205
|
-
* carrying `name: "<Section> section"`, and the comment beside that line says
|
|
206
|
-
* the rename seam reads `name`. At the root both trees named a node by its TYPE
|
|
207
|
-
* alone, and a Box's type name at section level is the literal "Blank section" —
|
|
208
|
-
* so every pair a merchant added arrived in Layers as "Blank section", with the
|
|
209
|
-
* stored name read by nobody. A value written and never read is the same defect
|
|
210
|
-
* as a control that reaches nothing.
|
|
211
|
-
*
|
|
212
|
-
* It lives HERE, beside the rule it is a rung of, rather than in the chrome that
|
|
213
|
-
* calls it: two files deciding what a node is called is exactly what card 66194
|
|
214
|
-
* collapsed into this module, and a root rule written in the component would be
|
|
215
|
-
* the fourth copy.
|
|
216
|
-
*
|
|
217
|
-
* `fallback` is the caller's type-level label (`sectionLabel(type)`), which is
|
|
218
|
-
* what every published page reads today and what an unnamed node keeps reading.
|
|
219
|
-
*
|
|
220
|
-
* `rowName` is the layer's last word ({@link RowNameRule}), asked at the
|
|
221
|
-
* SECTION level with what this rung answered.
|
|
222
|
-
*/
|
|
223
|
-
declare function rootRowName<N extends SlotChild>(node: N, fallback: string, rowName?: RowNameRule<N>): string;
|
|
224
|
-
|
|
225
|
-
export { type RowNameRule, type SlotChild, rootRowName, sectionRenameProp, slotChildName, slotChildRenameProp, slotChildRowName };
|
|
1
|
+
export { RowNameRule, SlotChild, rootRowName, sectionRenameProp, slotChildName, slotChildRenameProp, slotChildRowName } from '../document/slot-child-name.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{rootRowName,sectionRenameProp,slotChildName,slotChildRenameProp,slotChildRowName}from"../../../chunk-
|
|
1
|
+
export{rootRowName,sectionRenameProp,slotChildName,slotChildRenameProp,slotChildRowName}from"../../../chunk-SSRYU3YG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-6UAEFOJ4.js";
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
declare function dedupeSlotChildren(item: TreeItem, slots: string[]): TreeItem["props"] | null;
|
|
4
|
-
|
|
5
|
-
export { dedupeSlotChildren };
|
|
1
|
+
export { dedupeSlotChildren } from '../document/slot-heal.js';
|
|
2
|
+
import '../document/content-tree.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{dedupeSlotChildren}from"../../../chunk-
|
|
1
|
+
export{dedupeSlotChildren}from"../../../chunk-7OCEPOEJ.js";
|