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.
Files changed (233) hide show
  1. package/README.md +15 -3
  2. package/dist/{CanvasDragLayer-Cd1o0HQf.d.ts → CanvasDragLayer-CFUcBbgc.d.ts} +1 -1
  3. package/dist/{ScreenDocumentContext-CFJeqqKk.d.ts → ScreenDocumentContext-1RgtGKWR.d.ts} +4 -0
  4. package/dist/blocks/index.d.ts +5 -3
  5. package/dist/{buckets-Tj-nkBpg.d.ts → buckets-Sw94ll9I.d.ts} +1 -1
  6. package/dist/canvas/index.d.ts +8 -6
  7. package/dist/canvas/index.js +1 -1
  8. package/dist/chunk-2C7W64S5.js +8 -0
  9. package/dist/chunk-2L6KWUBC.js +1 -0
  10. package/dist/chunk-467WWV4I.js +1 -0
  11. package/dist/chunk-4FD7TAOE.js +1 -0
  12. package/dist/chunk-67HCYOW4.js +1 -0
  13. package/dist/chunk-A2VVB4RH.js +0 -0
  14. package/dist/{chunk-2GVCAIPX.js → chunk-BDSLF5BR.js} +1 -1
  15. package/dist/{chunk-U66YKDAR.js → chunk-BIK3AO2V.js} +1 -1
  16. package/dist/chunk-BTDI7JAA.js +2 -0
  17. package/dist/chunk-DDH2DYQP.js +1 -0
  18. package/dist/{chunk-HGCGIRVA.js → chunk-DNQ7AF6K.js} +1 -1
  19. package/dist/{chunk-66JNVRQM.js → chunk-GWYNMSIP.js} +1 -1
  20. package/dist/{chunk-V2ULLALL.js → chunk-I67UW5UG.js} +3 -3
  21. package/dist/{chunk-MSGZ56QL.js → chunk-KWLHKKZO.js} +1 -1
  22. package/dist/{chunk-FOHHXSOL.js → chunk-MLQKNED6.js} +1 -1
  23. package/dist/{chunk-43AEUUNQ.js → chunk-N3MJOHAG.js} +1 -1
  24. package/dist/{chunk-BVN33R76.js → chunk-N7E6264U.js} +1 -1
  25. package/dist/chunk-OHZHYROJ.js +5 -0
  26. package/dist/{chunk-YHFKWV7H.js → chunk-PFFH7ASD.js} +13 -13
  27. package/dist/chunk-PRHBWA5V.js +0 -0
  28. package/dist/chunk-SNF5764Q.js +1 -0
  29. package/dist/chunk-SSRYU3YG.js +1 -0
  30. package/dist/{chunk-R4QJ6DC5.js → chunk-SWBADIQT.js} +1 -1
  31. package/dist/{chunk-GOTN2KY4.js → chunk-TIAWIOGD.js} +1 -1
  32. package/dist/chunk-TUXLORVR.js +15 -0
  33. package/dist/{chunk-FGNR22NY.js → chunk-U5DNBT63.js} +1 -1
  34. package/dist/{chunk-EZTP6E2M.js → chunk-U7TFWHST.js} +1 -1
  35. package/dist/{chunk-2M4T27BI.js → chunk-WJJ7H42G.js} +7 -7
  36. package/dist/chunk-YIUE4US7.js +0 -0
  37. package/dist/{chunk-O7Q4DDJT.js → chunk-YM4UEGBV.js} +1 -1
  38. package/dist/chunk-YVFYWAYU.js +65 -0
  39. package/dist/{chunk-N2RISV46.js → chunk-ZOSEBPAI.js} +1 -1
  40. package/dist/copy/index.d.ts +2 -2
  41. package/dist/copy/index.js +11 -11
  42. package/dist/drag/index.d.ts +2 -2
  43. package/dist/drag/index.js +1 -1
  44. package/dist/draw/client.d.ts +1 -1
  45. package/dist/draw/client.js +1 -1
  46. package/dist/draw/index.d.ts +8 -8
  47. package/dist/draw/index.js +1 -1
  48. package/dist/easel/easel.css +3 -1
  49. package/dist/easel/index.d.ts +2 -2
  50. package/dist/easel/index.js +1 -1
  51. package/dist/fields/index.d.ts +4 -4
  52. package/dist/fields/index.js +1 -1
  53. package/dist/panel/index.d.ts +2 -2
  54. package/dist/render/index.d.ts +2 -2
  55. package/dist/render/index.js +5 -5
  56. package/dist/{repeat-Czi-6zPX.d.ts → repeat-BNgSq2Nw.d.ts} +1 -1
  57. package/dist/screen/components/AddBlockRow.d.ts +1 -1
  58. package/dist/screen/components/AddBlockRow.js +1 -1
  59. package/dist/screen/components/AddSidePanel.d.ts +2 -2
  60. package/dist/screen/components/AddSidePanel.js +1 -1
  61. package/dist/screen/components/NodeContextMenu.d.ts +13 -13
  62. package/dist/screen/components/NodeContextMenu.js +1 -1
  63. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  64. package/dist/screen/components/PreviewPartsContext.d.ts +2 -2
  65. package/dist/screen/components/PreviewPartsContext.js +1 -1
  66. package/dist/screen/components/SaveControls.d.ts +7 -7
  67. package/dist/screen/components/ScreenChrome.js +1 -1
  68. package/dist/screen/components/ScreenDocumentContext.d.ts +2 -2
  69. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  70. package/dist/screen/components/ScreenMount.d.ts +7 -7
  71. package/dist/screen/components/ScreenMount.js +1 -1
  72. package/dist/screen/components/ScreenStoreProvider.d.ts +7 -7
  73. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  74. package/dist/screen/components/SectionScreenShell.js +17 -17
  75. package/dist/screen/components/SlotChildActionsContext.d.ts +1 -1
  76. package/dist/screen/components/usePartBridge.d.ts +7 -7
  77. package/dist/screen/components/usePartBridge.js +1 -1
  78. package/dist/screen/index.d.ts +8 -8
  79. package/dist/screen/index.js +1 -1
  80. package/dist/screen/lib/admin-bridge.d.ts +1 -1
  81. package/dist/screen/lib/admin-bridge.js +1 -1
  82. package/dist/screen/lib/content/view-tiers.d.ts +1 -1
  83. package/dist/screen/lib/document/add-target-types.d.ts +55 -0
  84. package/dist/screen/lib/document/add-target-types.js +1 -0
  85. package/dist/screen/lib/document/block-choice.d.ts +64 -0
  86. package/dist/screen/lib/document/block-choice.js +1 -0
  87. package/dist/screen/lib/document/block-types-in.d.ts +39 -0
  88. package/dist/screen/lib/document/block-types-in.js +1 -0
  89. package/dist/screen/lib/document/content-tree.d.ts +222 -0
  90. package/dist/screen/lib/document/content-tree.js +1 -0
  91. package/dist/screen/lib/document/device-fields.d.ts +128 -0
  92. package/dist/screen/lib/document/device-fields.js +1 -0
  93. package/dist/screen/lib/document/field-buckets.d.ts +36 -0
  94. package/dist/screen/lib/document/field-buckets.js +1 -0
  95. package/dist/screen/lib/document/field-markers.d.ts +205 -0
  96. package/dist/screen/lib/document/field-markers.js +1 -0
  97. package/dist/screen/lib/document/hidable.d.ts +44 -0
  98. package/dist/screen/lib/document/hidable.js +1 -0
  99. package/dist/screen/lib/document/palette-sections.d.ts +103 -0
  100. package/dist/screen/lib/document/palette-sections.js +1 -0
  101. package/dist/screen/lib/document/panel-fields.d.ts +47 -0
  102. package/dist/screen/lib/document/panel-fields.js +1 -0
  103. package/dist/screen/lib/document/panel-no-control-mark.d.ts +74 -0
  104. package/dist/screen/lib/document/panel-no-control-mark.js +1 -0
  105. package/dist/screen/lib/document/part-id.d.ts +23 -0
  106. package/dist/screen/lib/document/part-id.js +1 -0
  107. package/dist/screen/lib/document/preview-click.d.ts +49 -0
  108. package/dist/screen/lib/document/preview-click.js +1 -0
  109. package/dist/screen/lib/document/preview-dom.d.ts +8 -0
  110. package/dist/screen/lib/document/preview-dom.js +1 -0
  111. package/dist/screen/lib/document/preview-events.d.ts +25 -0
  112. package/dist/screen/lib/document/preview-events.js +1 -0
  113. package/dist/screen/lib/document/preview-selection-context.d.ts +72 -0
  114. package/dist/screen/lib/document/preview-selection-context.js +1 -0
  115. package/dist/screen/lib/document/section-doc.d.ts +24 -0
  116. package/dist/screen/lib/document/section-doc.js +1 -0
  117. package/dist/screen/lib/document/slot-child-name.d.ts +225 -0
  118. package/dist/screen/lib/document/slot-child-name.js +1 -0
  119. package/dist/screen/lib/document/slot-heal.d.ts +5 -0
  120. package/dist/screen/lib/document/slot-heal.js +1 -0
  121. package/dist/screen/lib/document/slot-section-spec.d.ts +96 -0
  122. package/dist/screen/lib/document/slot-section-spec.js +1 -0
  123. package/dist/screen/lib/document/style-clipboard.d.ts +144 -0
  124. package/dist/screen/lib/document/style-clipboard.js +1 -0
  125. package/dist/screen/lib/document/text-control-kinds.d.ts +71 -0
  126. package/dist/screen/lib/document/text-control-kinds.js +1 -0
  127. package/dist/screen/lib/document/tree-reveal.d.ts +62 -0
  128. package/dist/screen/lib/document/tree-reveal.js +1 -0
  129. package/dist/screen/lib/document/use-section-ops.d.ts +110 -0
  130. package/dist/screen/lib/document/use-section-ops.js +1 -0
  131. package/dist/screen/lib/document-addressing.d.ts +2 -2
  132. package/dist/screen/lib/document-switch.d.ts +1 -1
  133. package/dist/screen/lib/host.d.ts +2 -2
  134. package/dist/screen/lib/key-scope.d.ts +1 -1
  135. package/dist/screen/lib/key-scope.js +1 -1
  136. package/dist/screen/lib/media-panel.d.ts +2 -2
  137. package/dist/screen/lib/media-picker.d.ts +2 -2
  138. package/dist/screen/lib/page-lock.d.ts +1 -1
  139. package/dist/screen/lib/puck/add-target-types.d.ts +3 -55
  140. package/dist/screen/lib/puck/add-target-types.js +1 -0
  141. package/dist/screen/lib/puck/block-choice.d.ts +1 -64
  142. package/dist/screen/lib/puck/block-choice.js +1 -1
  143. package/dist/screen/lib/puck/block-types-in.d.ts +1 -39
  144. package/dist/screen/lib/puck/block-types-in.js +1 -1
  145. package/dist/screen/lib/puck/content-tree.d.ts +1 -222
  146. package/dist/screen/lib/puck/content-tree.js +1 -1
  147. package/dist/screen/lib/puck/device-fields.d.ts +3 -127
  148. package/dist/screen/lib/puck/device-fields.js +1 -1
  149. package/dist/screen/lib/puck/field-buckets.d.ts +2 -36
  150. package/dist/screen/lib/puck/field-buckets.js +1 -1
  151. package/dist/screen/lib/puck/field-markers.d.ts +2 -205
  152. package/dist/screen/lib/puck/field-markers.js +1 -1
  153. package/dist/screen/lib/puck/hidable.d.ts +1 -44
  154. package/dist/screen/lib/puck/hidable.js +1 -1
  155. package/dist/screen/lib/puck/palette-sections.d.ts +2 -97
  156. package/dist/screen/lib/puck/palette-sections.js +1 -1
  157. package/dist/screen/lib/puck/panel-fields.d.ts +1 -47
  158. package/dist/screen/lib/puck/panel-fields.js +1 -1
  159. package/dist/screen/lib/puck/panel-no-control-mark.d.ts +2 -74
  160. package/dist/screen/lib/puck/panel-no-control-mark.js +1 -1
  161. package/dist/screen/lib/puck/part-id.d.ts +1 -23
  162. package/dist/screen/lib/puck/part-id.js +1 -1
  163. package/dist/screen/lib/puck/preview-click.d.ts +1 -49
  164. package/dist/screen/lib/puck/preview-click.js +1 -1
  165. package/dist/screen/lib/puck/preview-dom.d.ts +1 -8
  166. package/dist/screen/lib/puck/preview-dom.js +1 -1
  167. package/dist/screen/lib/puck/preview-events.d.ts +1 -25
  168. package/dist/screen/lib/puck/preview-events.js +1 -1
  169. package/dist/screen/lib/puck/preview-selection-context.d.ts +2 -72
  170. package/dist/screen/lib/puck/preview-selection-context.js +1 -1
  171. package/dist/screen/lib/puck/section-doc.d.ts +3 -18
  172. package/dist/screen/lib/puck/section-doc.js +1 -1
  173. package/dist/screen/lib/puck/slot-child-name.d.ts +1 -225
  174. package/dist/screen/lib/puck/slot-child-name.js +1 -1
  175. package/dist/screen/lib/puck/slot-heal.d.ts +2 -5
  176. package/dist/screen/lib/puck/slot-heal.js +1 -1
  177. package/dist/screen/lib/puck/slot-section-spec.d.ts +1 -96
  178. package/dist/screen/lib/puck/slot-section-spec.js +1 -0
  179. package/dist/screen/lib/puck/style-clipboard.d.ts +12 -114
  180. package/dist/screen/lib/puck/style-clipboard.js +1 -1
  181. package/dist/screen/lib/puck/text-control-kinds.d.ts +1 -71
  182. package/dist/screen/lib/puck/text-control-kinds.js +1 -1
  183. package/dist/screen/lib/puck/tree-reveal.d.ts +1 -62
  184. package/dist/screen/lib/puck/tree-reveal.js +1 -1
  185. package/dist/screen/lib/puck/use-section-ops.d.ts +4 -105
  186. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  187. package/dist/screen/lib/screen-parts.d.ts +25 -18
  188. package/dist/screen/lib/screen-parts.js +1 -1
  189. package/dist/screen/lib/section-template-types.d.ts +1 -1
  190. package/dist/screen/lib/section-templates.d.ts +1 -1
  191. package/dist/screen/lib/section-templates.js +1 -1
  192. package/dist/screen/lib/session-context.d.ts +1 -1
  193. package/dist/screen/lib/session-context.js +1 -1
  194. package/dist/screen/lib/session.d.ts +3 -3
  195. package/dist/screen/lib/session.js +1 -1
  196. package/dist/screen/lib/shared-section-types.d.ts +1 -1
  197. package/dist/screen/lib/shared-sections.d.ts +1 -1
  198. package/dist/screen/lib/shared-sections.js +1 -1
  199. package/dist/screen/screen.css +2 -2
  200. package/dist/strings/index.d.ts +2 -2
  201. package/dist/strings/index.js +1 -1
  202. package/dist/text-styles/index.js +21 -21
  203. package/dist/tree/index.d.ts +1 -1
  204. package/dist/{types-CDX6vd6A.d.ts → types-B8NwXKlE.d.ts} +1 -1
  205. package/dist/{watch-BTYOJpQU.d.ts → watch-D8xZow3y.d.ts} +2 -2
  206. package/dist/{words-BeX5eGq7.d.ts → words-CmEnDoOe.d.ts} +1 -1
  207. package/package.json +154 -10
  208. package/dist/chunk-2E2SXDYQ.js +0 -1
  209. package/dist/chunk-4IJVV7DA.js +0 -1
  210. package/dist/chunk-7L3NKHEC.js +0 -15
  211. package/dist/chunk-APVUYICP.js +0 -65
  212. package/dist/chunk-BHRC3ASL.js +0 -1
  213. package/dist/chunk-I54UCYOU.js +0 -1
  214. package/dist/chunk-LXTM2OLQ.js +0 -2
  215. package/dist/chunk-NA3GMA43.js +0 -5
  216. package/dist/chunk-OBWDHKLI.js +0 -8
  217. package/dist/chunk-Q2A7RHG2.js +0 -1
  218. package/dist/chunk-QIDRJH3S.js +0 -1
  219. package/dist/chunk-RSCMJIWS.js +0 -1
  220. /package/dist/{chunk-MQNBD6AB.js → chunk-3QB2ZQXK.js} +0 -0
  221. /package/dist/{chunk-LER7RKTO.js → chunk-5XL2RXFU.js} +0 -0
  222. /package/dist/{chunk-6W7WLPZH.js → chunk-6UAEFOJ4.js} +0 -0
  223. /package/dist/{chunk-26OOWIJJ.js → chunk-7OCEPOEJ.js} +0 -0
  224. /package/dist/{chunk-IQ5TA7AM.js → chunk-AJ2SUSET.js} +0 -0
  225. /package/dist/{chunk-DUVRZ456.js → chunk-ANPOR6EY.js} +0 -0
  226. /package/dist/{chunk-5ZBY24K7.js → chunk-CPL43ZLJ.js} +0 -0
  227. /package/dist/{chunk-PIND6KE7.js → chunk-I6SK6ZDT.js} +0 -0
  228. /package/dist/{chunk-7F52SZOI.js → chunk-INRERJU4.js} +0 -0
  229. /package/dist/{chunk-R5L2E7JX.js → chunk-MGVI67QV.js} +0 -0
  230. /package/dist/{chunk-IYT6NN2J.js → chunk-R4AUZVA3.js} +0 -0
  231. /package/dist/{chunk-M2Z775ZC.js → chunk-RUQOIQWI.js} +0 -0
  232. /package/dist/{chunk-PLVEGYK6.js → chunk-TCAAOYQY.js} +0 -0
  233. /package/dist/{chunk-PA3PNTVV.js → chunk-VKPOH6MK.js} +0 -0
@@ -1,96 +1 @@
1
- /**
2
- * A component type's own `defaultProps`, looked up in the Puck config.
3
- *
4
- * Handed IN rather than imported: `lib/puck/config` imports the seed
5
- * registry's neighbours, and a seed registry that reached back into the config
6
- * would close the loop. Both callers of `seeds()` already hold the config
7
- * (`components/ScreenChrome`, `components/StandaloneSectionEditor`),
8
- * so the lookup travels the short way.
9
- *
10
- * ⚠️ IT IS OPTIONAL, AND THE FIVE SPECS THAT PREDATE IT IGNORE IT. They
11
- * seed ONE flat child whose every field is content, so a missing default changes
12
- * nothing they draw. Image & Text Columns seeds a Box holding blocks, and a Box
13
- * without its `direction` / `justify` / `align` / `wrap` is a different shape on
14
- * the page — see `boxColumnSeed` in lib/puck/slot-specs.
15
- */
16
- type NodeDefaults = (type: string) => Record<string, unknown>;
17
- interface SlotSectionSpec {
18
- /** The primary slot field on the section (e.g. Hero's `slides`). */
19
- slot: string;
20
- /** The child component type the slot holds. */
21
- childType: string;
22
- /** The "Add …" affordance label. */
23
- addLabel: string;
24
- /**
25
- * The children ARE the section, and no surface offers to add one.
26
- *
27
- * ⚠️ NOT THE SAME THING AS `addBlocked`, AND THE DIFFERENCE IS WHY IT EXISTS.
28
- * `addBlocked` is a reason adding is impossible RIGHT NOW — a hero anchor
29
- * already holds four — so the row stays, greyed, with the sentence on it, and
30
- * the merchant can act on it (re-place a group and Add comes back). A fixed
31
- * set has no such state: the row would be permanently dead furniture, and
32
- * `NodeContextMenu`'s own rule says it plainest — a row must never be a button
33
- * that does nothing.
34
- *
35
- * Both surfaces that draw an Add row read this. `addBlocked` is still declared
36
- * beside it, because the DROP path asks that one and never this.
37
- */
38
- fixed?: boolean;
39
- /** Children render as a HORIZONTAL slider (selection must advance it). */
40
- slider?: boolean;
41
- /**
42
- * Prop bags for the default children a fresh section is seeded with.
43
- *
44
- * `defaultsFor` is {@link NodeDefaults} — present when the caller holds the
45
- * config, absent otherwise, and every spec that seeds a plain content child
46
- * simply declines it.
47
- */
48
- seeds: (defaultsFor?: NodeDefaults) => Record<string, unknown>[];
49
- /**
50
- * Convert a section's LEGACY props (an older inline-array field) into slot
51
- * children at load-time — the chrome-only migration for pages saved before the
52
- * field became a slot. Returns [] when there's nothing to migrate, in which
53
- * case the seeder falls back to `seeds()`.
54
- */
55
- legacy?: (props: Record<string, unknown>) => Record<string, unknown>[];
56
- /**
57
- * Why this section cannot take another child right now — a sentence the
58
- * merchant reads — or `null` when it can (card 66189).
59
- *
60
- * Optional, and only the Hero slide answers it today: a group is placed on one
61
- * of nine anchors, an anchor stacks at most four, and a fifth would be drawn
62
- * ON TOP of the fourth. The rule lives on the SPEC rather than inside
63
- * `SlotChildRows` because the list is shared by five sections and this is one
64
- * section's arithmetic — the list asks, the spec answers.
65
- */
66
- addBlocked?: (children: readonly unknown[], incoming?: unknown) => string | null;
67
- /**
68
- * Why this section must NOT be seeded at all, read off its OWN stored props.
69
- *
70
- * The seeder's existing guard is "the slot already has children" — right for a
71
- * section whose only shape is the slot, and blind to a section that still
72
- * carries an OLDER one. Image & Text Columns is the first of those: its
73
- * columns used to be a `steps` ARRAY, the owner ruled on 2026-09-05 that
74
- * nothing is migrated, and a stored page therefore has a full `steps` and an
75
- * empty `boxes`. Without this the seeder would drop three fresh Boxes into a
76
- * published page that already draws three columns, and the merchant would find
77
- * six.
78
- *
79
- * Deliberately a question about the PARENT'S props, not about the slot — the
80
- * slot is what the existing guard already reads, and answering "is there an
81
- * older shape here" from the same place is what makes this a second question
82
- * rather than a second opinion on the first.
83
- */
84
- skipSeed?: (props: Record<string, unknown>) => boolean;
85
- /**
86
- * What the list says about the children it ALREADY holds, or `null`.
87
- *
88
- * The counterpart to `addBlocked`, and deliberately a second question rather
89
- * than a second answer from the first: `addBlocked` is about a group that has
90
- * not arrived yet, this is about the ones that are already here and cannot all
91
- * be drawn. A section that cannot get into that state simply declares neither.
92
- */
93
- notice?: (children: readonly unknown[]) => string | null;
94
- }
95
-
96
- export type { NodeDefaults, SlotSectionSpec };
1
+ export { NodeDefaults, SlotSectionSpec } from '../document/slot-section-spec.js';
@@ -0,0 +1 @@
1
+ import"../../../chunk-A2VVB4RH.js";
@@ -1,22 +1,22 @@
1
- import { StyleRow } from '../../../style-clipboard/index.js';
2
- import { S as StyleClipboardWords } from '../../../words-CnnHb9jo.js';
3
- import { ScreenStyleDocument, ScreenNode, ScreenStylePastePlan, ScreenStyleClipboard } from '../screen-parts.js';
4
- import { panelFieldsOf } from './panel-fields.js';
1
+ export { ResolvedStyleClipboard, copyNodeStyle, nodeStyleRows, planNodePaste, shopFieldKind, siteStyleScope, styleClipboardOf } from '../document/style-clipboard.js';
2
+ import '../../../style-clipboard/index.js';
5
3
  import '../../../types-BbOBWXMP.js';
6
4
  import 'react';
5
+ import '../../../words-CnnHb9jo.js';
6
+ import '../screen-parts.js';
7
7
  import '../../../blocks/index.js';
8
8
  import '../../../types-Cq53lL8d.js';
9
9
  import '../../../data/index.js';
10
10
  import '../../../types-41704JE4.js';
11
11
  import '../../../resolve-D68pb3Bx.js';
12
12
  import '../../../plan-CZS902DV.js';
13
- import '../../../watch-BTYOJpQU.js';
13
+ import '../../../watch-D8xZow3y.js';
14
14
  import '../../../types-B3iSHX-w.js';
15
15
  import '../../../types-Cy7rdmXt.js';
16
16
  import '../../../wordFit-7XpmhcaW.js';
17
17
  import '../../../edit-lock/index.js';
18
18
  import '../../../panelWidths-DgQXiPXU.js';
19
- import '../../../CanvasDragLayer-Cd1o0HQf.js';
19
+ import '../../../CanvasDragLayer-CFUcBbgc.js';
20
20
  import '../../../session-DSQFmIvx.js';
21
21
  import '../../../words-SD4neL0n.js';
22
22
  import '../../../types-DBy3L69b.js';
@@ -24,10 +24,10 @@ import 'efficient-shell/ui';
24
24
  import '../../../words-Cl9xMUYY.js';
25
25
  import '../../components/AddSidePanel.js';
26
26
  import '../section-template-types.js';
27
- import './content-tree.js';
27
+ import '../document/content-tree.js';
28
28
  import '../shared-section-types.js';
29
- import './block-choice.js';
30
- import '../../../ScreenDocumentContext-CFJeqqKk.js';
29
+ import '../document/block-choice.js';
30
+ import '../../../ScreenDocumentContext-1RgtGKWR.js';
31
31
  import '../document-contract.js';
32
32
  import '../document-switch.js';
33
33
  import '../../../engine-CvXpFE86.js';
@@ -37,108 +37,6 @@ import '../backend-error.js';
37
37
  import '../host-chrome.js';
38
38
  import '../links/link-filters.js';
39
39
  import '../document-hooks.js';
40
- import './add-target-types.js';
41
- import './slot-section-spec.js';
42
-
43
- /**
44
- * lib/puck/style-clipboard.ts — COPY STYLE / PASTE STYLE in the website editor
45
- * (card [ADD] Copy Style And Paste Style, owner 2026-09-19).
46
- *
47
- * The clipboard, the matching rule, the menu rows, the words and the shortcut
48
- * test are `efficient-easel/style-clipboard`'s — written once for both editors;
49
- * the campaign designer draws the same two rows from the same module. This file
50
- * answers only the two questions that are the website editor's own:
51
- *
52
- * 1. WHICH ROWS of a node are its look — {@link nodeStyleRows};
53
- * 2. WHAT KIND each row is — {@link shopFieldKind}.
54
- *
55
- * ── WHICH ROWS ──────────────────────────────────────────────────────────────
56
- * Owner's rule 3 was "the Style and Layout tabs, never Content". Since 4.0.0
57
- * the panel has two tabs, Design and Animation (owner, final 2026-10-10), and
58
- * what was the Content tab sits at the top of Design — so the rule is read off
59
- * the Design GROUPS instead of the tabs: the rows under Size, Design, Layout or
60
- * Position are a look and are copied. Never the Content group (its
61
- * `_dContent` marker, and every row of Design before the first group heading),
62
- * never Anchor, never Animation.
63
- *
64
- * The panel after `assignSectionGroups` is a flat list in which each bucket
65
- * header (`BUCKET_KEY`) opens its run — the same reading the tab strip hides
66
- * rows by — and inside Design each group heading (`DESIGN_GROUP_KEY`) opens
67
- * its own; a row belongs to the headers above it. A group heading counts only
68
- * inside Design.
69
- *
70
- * Left out even in those groups (the list GG approved on 2026-09-19):
71
- * · every picture (`__media`) — Media folded into Style on 2026-09-14, and a
72
- * picture is Content;
73
- * · words and links (`__text`, `__link`);
74
- * · headings, bucket headers and notes — `__fold`, and every `_`-key (the
75
- * panel's own furniture, as in the campaign designer) — which store nothing;
76
- * · the Anchor rows — a deep-link id must be unique on the page;
77
- * · slots (Boxes, children) — structure, not a look;
78
- * · a picture's focal point (`focal`, `imageFocal`) — a point ON ONE picture,
79
- * meaningless on another, like the campaign logo's colour map.
80
- * A text part's own look (`partStyles`) is no row at all, so it is never read.
81
- *
82
- * ── THE PHONE VALUE ─────────────────────────────────────────────────────────
83
- * Stored as its own row (`<key>Phone`, ./phone-override), on the same tab, so it
84
- * travels like any row. It is not COUNTED: the merchant sees one row per
85
- * device, and the number is the rows they see.
86
- */
87
-
88
- type Props = Record<string, unknown>;
89
- type NodeLike = {
90
- type: string;
91
- props: Props;
92
- };
93
- type ConfigLike = Parameters<typeof panelFieldsOf>[0];
94
- /** The clipboard's scope: one site (GG, 2026-09-19) — across its pages. */
95
- declare function siteStyleScope(siteId: string | null | undefined): string;
96
- /**
97
- * The kind of one website-editor row.
98
- *
99
- * · a tag (a shared builder's `section:<key>`, ../controls `sharedStyleKinds`)
100
- * wins, on the gate or on the control it wraps;
101
- * · a CHOICE row (it declares `options`) is `choice:` plus its sorted values;
102
- * · anything else is the shell's reading, which answers `null` for an
103
- * untagged custom control: it pastes only onto the same section type.
104
- */
105
- declare function shopFieldKind(field: unknown): string | null;
106
- /** A node's look, as rows the shell's clipboard can hold and match. */
107
- declare function nodeStyleRows(config: ConfigLike, node: NodeLike): StyleRow[];
108
- /** Copy one node's look into the site's clipboard. */
109
- declare function copyNodeStyle(config: ConfigLike, scope: string, node: NodeLike, label: string): void;
110
- /**
111
- * What a paste onto this node would do: the new props, and the words the
112
- * merchant reads. Null when nothing is held for this site. The caller writes
113
- * `props` through its one replace op only when `changed`, and always shows
114
- * `message` — "nothing matched" is an answer, not a silence.
115
- */
116
- declare function planNodePaste(config: ConfigLike, scope: string, node: NodeLike, label: string, words?: StyleClipboardWords): {
117
- props: Props;
118
- changed: boolean;
119
- pasted: number;
120
- message: string;
121
- } | null;
122
- /** A style clipboard with every member answered: the screen's reading of a
123
- * layer's {@link ScreenStyleClipboard}. */
124
- interface ResolvedStyleClipboard {
125
- scope: (doc: ScreenStyleDocument) => string;
126
- rows: (config: unknown, node: ScreenNode) => StyleRow[];
127
- copy: (scope: string, node: ScreenNode, label: string, config: unknown) => void;
128
- plan: (scope: string, node: ScreenNode, label: string, config: unknown) => ScreenStylePastePlan | null;
129
- }
130
- /**
131
- * COPY STYLE / PASTE STYLE AS THE SCREEN RUNS THEM (0.105.0): a layer's
132
- * clipboard (lib/screen-parts `styleClipboard`) with every member it left out
133
- * answered the website's way. A layer's `copy` and `plan`, where it hands none,
134
- * read the rows it handed (`rows`), so a layer with its own look and nothing
135
- * else still copies and pastes. With no layer's: exactly the website's —
136
- * `siteStyleScope(siteId)`, `nodeStyleRows`, `copyNodeStyle`, `planNodePaste`.
137
- */
138
- declare function styleClipboardOf(part: ScreenStyleClipboard | null | undefined,
139
- /** What the screen's own `plan` says after a paste, in the host's language
140
- * (`EaselStrings.styleClipboard`, 3.1.0). A layer's own `plan` says its own
141
- * words. Left out: English. */
142
- words?: StyleClipboardWords): ResolvedStyleClipboard;
143
-
144
- export { type ResolvedStyleClipboard, copyNodeStyle, nodeStyleRows, planNodePaste, shopFieldKind, siteStyleScope, styleClipboardOf };
40
+ import '../document/add-target-types.js';
41
+ import '../document/slot-section-spec.js';
42
+ import '../document/panel-fields.js';
@@ -1 +1 @@
1
- export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-R4QJ6DC5.js";import"../../../chunk-LER7RKTO.js";import"../../../chunk-MSGZ56QL.js";import"../../../chunk-7F52SZOI.js";import"../../../chunk-MQNBD6AB.js";import"../../../chunk-EB6NI2VK.js";import"../../../chunk-V7U33NF2.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-DUVRZ456.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
1
+ export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-SWBADIQT.js";import"../../../chunk-5XL2RXFU.js";import"../../../chunk-KWLHKKZO.js";import"../../../chunk-INRERJU4.js";import"../../../chunk-3QB2ZQXK.js";import"../../../chunk-EB6NI2VK.js";import"../../../chunk-V7U33NF2.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
@@ -1,71 +1 @@
1
- /**
2
- * text-control-kinds — the authored-text control kinds, and the ONE fact about
3
- * each that three separate lists used to hold by hand (card 66286).
4
- *
5
- * A LEAF ON PURPOSE: it imports nothing. `lib/puck/controls` is nine hops deep in
6
- * a require cycle back to `lib/puck/part-text`
7
- * (controls → MediaUploadField → ScreenDocumentContext →
8
- * catalog-default-layout → ProductGridSection → goldPhrases → PartStyledText →
9
- * part-styles → part-rows → part-text), so a list defined in `controls` and read
10
- * at another module's INIT time throws "Cannot access before initialization".
11
- * The cycle never bit before because the values `part-text` takes from `controls`
12
- * — `TEXT_FIELD_MARKER`, `readHidable` — are only read inside functions. A
13
- * single source has to be readable at init, so it lives here, on its own, where
14
- * nothing can be in flight ahead of it.
15
- *
16
- * `lib/puck/controls` re-exports every name below, because that is where the rest
17
- * of the text-field vocabulary lives (`TEXT_FIELD_MARKER`, `TextFieldMeta`, the
18
- * builders) and every existing caller already reads it from there. The
19
- * definitions are here and only here.
20
- */
21
- /**
22
- * Every authored-text control kind, as recorded on `TEXT_FIELD_MARKER`
23
- * (`lib/puck/controls`),
24
- * and the one fact three separate lists used to hold by hand (card 66286):
25
- * whether the kind's value is ONE string a merchant edits as a single box
26
- * (`"scalar"`), or N of them a control adds, removes and reorders (`"list"`).
27
- *
28
- * ⚠️ THIS IS THE SOURCE. {@link TextControlKind} and {@link SCALAR_TEXT_CONTROLS}
29
- * are both read off it, so a sixth kind cannot be added without answering the
30
- * scalar/list question once, here, where the answer is. Until this card it was
31
- * answered THREE times in three files, kept in step by a comment asking the next
32
- * reader to remember: which parts get an entry row on the section screen
33
- * (`ENTRY_CONTROLS`), which copy boxes move to the drill (`DRILL_TEXT_CONTROLS`),
34
- * and which parts a caret may be opened in (`TYPE_IN_PLACE_KINDS`). All three
35
- * were the same question and nothing went red when they disagreed — card 66282
36
- * added `copyText` to one of them first and the drift surfaced afterwards as
37
- * `1 unreachable: altName`.
38
- *
39
- * `control` also fixes the STORED VALUE SHAPE the neutralizer must preserve, so
40
- * each kind names its own shape beside it.
41
- */
42
- declare const TEXT_CONTROL_KINDS: {
43
- readonly text: "scalar";
44
- readonly textarea: "scalar";
45
- readonly plainText: "scalar";
46
- readonly copyText: "scalar";
47
- readonly plainTextarea: "scalar";
48
- readonly textList: "list";
49
- };
50
- /** The authored-text control kinds — the keys of {@link TEXT_CONTROL_KINDS}. */
51
- type TextControlKind = keyof typeof TEXT_CONTROL_KINDS;
52
- /** The kinds whose value is ONE string, as a type — so a caller may hold one of
53
- * those and not the list kind, which the compiler then keeps it to. */
54
- type ScalarTextControlKind = {
55
- [K in TextControlKind]: (typeof TEXT_CONTROL_KINDS)[K] extends "scalar" ? K : never;
56
- }[TextControlKind];
57
- /**
58
- * THE SCALAR CONTROLS, derived — one string each, so one box, so one row.
59
- *
60
- * The three lists this replaces all named exactly these and each stated the same
61
- * reason for leaving `textList` out: its control manages ROW STRUCTURE (add,
62
- * remove, reorder), which a per-row box cannot, so it keeps its place on the
63
- * section screen. That reason is now the `"list"` beside it above, stated once.
64
- *
65
- * Order is declaration order, and the section screen's rows are built by walking
66
- * a section's FIELDS rather than this list, so nothing merchant-facing reads it
67
- * as an ordering.
68
- */
69
- declare const SCALAR_TEXT_CONTROLS: readonly ScalarTextControlKind[];
70
-
71
- export { SCALAR_TEXT_CONTROLS, type ScalarTextControlKind, TEXT_CONTROL_KINDS, type TextControlKind };
1
+ export { SCALAR_TEXT_CONTROLS, ScalarTextControlKind, TEXT_CONTROL_KINDS, TextControlKind } from '../document/text-control-kinds.js';
@@ -1 +1 @@
1
- export{SCALAR_TEXT_CONTROLS,TEXT_CONTROL_KINDS}from"../../../chunk-PIND6KE7.js";
1
+ export{SCALAR_TEXT_CONTROLS,TEXT_CONTROL_KINDS}from"../../../chunk-I6SK6ZDT.js";
@@ -1,62 +1 @@
1
- /** Puck's index-based address, as `use-section-ops` spells it (zone omitted at root). */
2
- type Selector = {
3
- index: number;
4
- zone?: string;
5
- } | null;
6
- /**
7
- * Do these two addresses name the same node?
8
- *
9
- * `ops.select` omits the zone for a top-level node (Puck's reducer falls back to
10
- * the root zone), while `getSelectorForId` always fills it in — so the two
11
- * spellings of one top-level node differ, and the comparison has to normalise
12
- * before it can answer. Exported for `scripts/test-tree-reveal.ts`.
13
- */
14
- declare function sameSelector(a: Selector, b: Selector, rootZone: string): boolean;
15
- /**
16
- * Bring the selected Layers row into view. Returns whether a row was found —
17
- * false whenever the panel is collapsed or on another view, which is a no-op and
18
- * not a failure. A row that is already fully visible is found and left alone:
19
- * the return says "there is a row", not "the panel moved".
20
- */
21
- declare function revealSelectedTreeRow(doc?: Document | undefined): boolean;
22
- /**
23
- * Which node's Layers row is the MARKED one — the row that draws `is-selected`,
24
- * and so the row {@link revealSelectedTreeRow} scrolls to.
25
- *
26
- * TWO SOURCES, ONE ANSWER. Normally it is the Puck selection. While a PART
27
- * panel is open it is that part's OWNER, because `usePartBridge` deliberately
28
- * leaves the Puck selection where it was — "the Layers tree, undo, redo and
29
- * autosave therefore see nothing at all", which is that bridge's own cheapest
30
- * proof that they still behave. The chrome asked `isPuckMode && selectedItem`
31
- * instead, and `isPuckMode` is false in part mode, so opening a part put the
32
- * mark out on EVERY row at once: a merchant who clicked a run of text in the
33
- * canvas was left looking at a Layers list with nothing lit, which had also not
34
- * moved (owner, 2026-09-09 — the "SHOP" tag on a Collections card). The bridge
35
- * has returned `openPartId` for exactly this since card 66268 and no shell ever
36
- * read it.
37
- *
38
- * EVERY OTHER OVERRIDE STILL ANSWERS `null` — Header, Website, Live chat and the
39
- * ticker. Those panels are not about a node in this tree at all, and the rows
40
- * that DO mark them (`inspectorMode.kind === "header"`, `tickerHeroId === secId`,
41
- * …) read their own state, which is why widening this to them would light two
42
- * rows for one panel.
43
- *
44
- * ⚠️ THE HERO'S `Text` / `Background` WERE ON THIS LIST AND ARE GONE
45
- * ([ADD] The Hero Takes Boxes). They were two SYNTHETIC rows standing for the
46
- * section's own copy and media; the owner put the background back in the hero's
47
- * settings on 2026-09-09 and deleted the built-in copy, so both panels and both
48
- * `…SectionId` derivations went with them. The example above named
49
- * `heroTextSectionId`, a variable that no longer exists — corrected to the ticker
50
- * rather than dropped, because the RULE it illustrates is unchanged and this is
51
- * the only place that states it.
52
- *
53
- * The mode is taken structurally rather than as `InspectorMode`: that union
54
- * lives in a component (SectionEditor) and this is `lib`, so a named import
55
- * here would point the dependency the wrong way for one field.
56
- */
57
- declare function markedTreeNodeId(mode: {
58
- kind: string;
59
- nodeId?: string;
60
- }, selectedId: string | null | undefined): string | null;
61
-
62
- export { markedTreeNodeId, revealSelectedTreeRow, sameSelector };
1
+ export { markedTreeNodeId, revealSelectedTreeRow, sameSelector } from '../document/tree-reveal.js';
@@ -1 +1 @@
1
- export{markedTreeNodeId,revealSelectedTreeRow,sameSelector}from"../../../chunk-FGNR22NY.js";
1
+ export{markedTreeNodeId,revealSelectedTreeRow,sameSelector}from"../../../chunk-U5DNBT63.js";
@@ -1,110 +1,9 @@
1
- import { N as NodeSelection } from '../../../plan-CZS902DV.js';
2
- import { Data } from '../../../blocks/index.js';
3
- import { TreeItem } from './content-tree.js';
1
+ export { NodeSelector, SectionOps, SectionOpsOptions, useSectionOps } from '../document/use-section-ops.js';
2
+ import '../../../plan-CZS902DV.js';
4
3
  import '../../../types-41704JE4.js';
4
+ import '../../../blocks/index.js';
5
5
  import 'react';
6
6
  import '../../../types-Cq53lL8d.js';
7
7
  import '../../../data/index.js';
8
8
  import '../../../resolve-D68pb3Bx.js';
9
-
10
- type NodeSelector = {
11
- index: number;
12
- zone?: string;
13
- } | null;
14
- type ComponentData = TreeItem;
15
- type SectionOps = {
16
- /** Insert a component into a zone at an index; returns the generated id. */
17
- insertComponent: (zone: string, type: string, index: number) => string;
18
- /** Insert into ROOT_ZONE (top-level section); returns the generated id. */
19
- insertSection: (type: string, index: number) => string;
20
- /** Atomically replace the node at (zone, index) — heal, reseed, hide toggle. */
21
- replaceComponent: (zone: string, index: number, data: ComponentData) => void;
22
- /** Seed a freshly-inserted slot child's props (insert THEN replace at a stable id). */
23
- seedChild: (zone: string, index: number, childType: string, props: Record<string, unknown>) => void;
24
- /**
25
- * Insert a FULL node — type + props, including inline slot children — at
26
- * (zone, index); returns its id. The same insert-then-replace pattern as
27
- * seedChild, one level up: how a saved section template lands in a page.
28
- * Callers pass a node whose ids are already fresh (cloneNodeWithFreshIds).
29
- */
30
- insertNode: (zone: string, index: number, node: TreeItem) => string;
31
- /** Remove the node at (zone, index). A normal dispatch, so Undo restores it. */
32
- removeComponent: (zone: string, index: number) => void;
33
- /**
34
- * Move the node at (zone, sourceIndex) to destinationIndex WITHIN THE SAME
35
- * zone. `destinationIndex` is the node's final resting index in the array
36
- * (Puck's `reorder` reducer splices it out then back in), so a caller moving a
37
- * node DOWN must account for the one-slot shift itself.
38
- */
39
- reorderComponent: (zone: string, sourceIndex: number, destinationIndex: number) => void;
40
- /** Duplicate the node at (zone, index). */
41
- duplicateComponent: (zone: string, index: number) => void;
42
- /** Set (or clear) the Puck selection by index-based address. */
43
- select: (selector: NodeSelector) => void;
44
- /** Replace the whole working document (used by Reset). */
45
- setDocument: (data: Data) => void;
46
- /**
47
- * Write the next document, and what to select in it, as ONE undo step — the
48
- * commit behind the block operations (`efficient-easel/node-ops`, blueprint
49
- * step 2.4b: the menu's Delete, Duplicate, Move, Copy / Cut / Paste and Hide,
50
- * and the rows' hover-delete). Each of those is planned whole and lands here
51
- * once, instead of the two or three dispatches it used to be.
52
- *
53
- * `select` is BY ID, in `data` (`undefined` leaves the selection as it is),
54
- * and goes in with the document through the store's `run` (0.105.1). Until
55
- * then the chrome selected first, by position (`setUi { itemSelector }`),
56
- * which the store reads in the document it still holds: a paste or a
57
- * Duplicate selected the node after its copy, and a Move the node it passed.
58
- * Behind the read-only gate like every other mutation here.
59
- */
60
- commitDocument: (data: Data, select?: NodeSelection) => void;
61
- };
62
- type SectionOpsOptions = {
63
- /**
64
- * SOMEBODY ELSE holds the open document: every MUTATION below becomes a no-op.
65
- *
66
- * This is the one place the editor's read-only state is enforced on the
67
- * document, and it is here rather than on each button because this hook is
68
- * already the single source of truth for every mutation — the tree rows, the
69
- * canvas "+" seams, the inspector head buttons and the lifecycle effects all
70
- * come through it. A gate on the buttons would be a gate on the ones somebody
71
- * remembered.
72
- *
73
- * `select` and `setUi` are NOT mutations and stay live: a read-only viewer must
74
- * still be able to click a section and read its settings.
75
- *
76
- * Deliberately keyed on "somebody else has it" and NOT on the wider save gate.
77
- * The save gate is also false while the lock claim is still `checking`, and the
78
- * pinned Header/Footer seed runs in the chrome's mount commit, inside that
79
- * window, through these very ops. Its WRITE is what is held there — by
80
- * `onChange`, released by the claim if it is granted — so the seed must be
81
- * allowed to lay the node down (card 1096). Blocking it here would silently
82
- * un-fix that card.
83
- */
84
- readOnly?: boolean;
85
- /**
86
- * Resolve each node an op puts in (`easel.resolveNode`, trigger `"insert"`).
87
- * Default: the layer's rule (`ScreenBlockRules.resolveOnInsert`), else
88
- * false — no op resolves anything, as before 0.103.0.
89
- */
90
- resolveOnInsert?: boolean;
91
- /**
92
- * NOT AN UNDO STEP: every write is folded into the history entry it happens
93
- * in (the store's `recordHistory: false`), as the store folds a resolver's
94
- * write (`resolveAll`), instead of being recorded as a step of its own.
95
- *
96
- * For the passes the screen runs over a document AS IT OPENS — the slot
97
- * seeding, the duplicate-id heal, and the layer's own pass (the website's
98
- * pinned Header and Footer). Recorded, each was the first entry of the
99
- * history: Undo was offered the moment the page opened, and ONE press took
100
- * the seeded slides and cards (or the Header) back out of the page, which
101
- * autosave then wrote (1.0.1). Folded, the document opens as the history's
102
- * first entry; a pass that runs after an edit (a section just inserted,
103
- * seeded) lands in that edit's step, so one Undo takes both out together.
104
- * Autosave still hears every write (the store's `onChange` fires on a fold).
105
- */
106
- foldIntoHistory?: boolean;
107
- };
108
- declare function useSectionOps(options?: SectionOpsOptions): SectionOps;
109
-
110
- export { type NodeSelector, type SectionOps, type SectionOpsOptions, useSectionOps };
9
+ import '../document/content-tree.js';
@@ -1 +1 @@
1
- export{useSectionOps}from"../../../chunk-FOHHXSOL.js";import"../../../chunk-NA3GMA43.js";import"../../../chunk-FHCKFOCD.js";import"../../../chunk-MQA7OFRA.js";import"../../../chunk-PLVEGYK6.js";import"../../../chunk-7L3NKHEC.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YHFKWV7H.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-ZEH6QLBH.js";import"../../../chunk-IWCKVZHS.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-FM6JO4WF.js";import"../../../chunk-KFV7N2DJ.js";import"../../../chunk-BSHIQIZC.js";import"../../../chunk-MZ5GSSZ3.js";import"../../../chunk-KRL3IUV3.js";import"../../../chunk-Y2T3JX7K.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-S3DUFDQ6.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-3S5N4HLJ.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-K7BTCBWD.js";import"../../../chunk-L55YIXDC.js";import"../../../chunk-QIDRJH3S.js";import"../../../chunk-LF3FUSCQ.js";
1
+ export{useSectionOps}from"../../../chunk-MLQKNED6.js";import"../../../chunk-OHZHYROJ.js";import"../../../chunk-PRHBWA5V.js";import"../../../chunk-FHCKFOCD.js";import"../../../chunk-MQA7OFRA.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-TUXLORVR.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-PFFH7ASD.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-ZEH6QLBH.js";import"../../../chunk-FM6JO4WF.js";import"../../../chunk-KFV7N2DJ.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-IWCKVZHS.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-BSHIQIZC.js";import"../../../chunk-MZ5GSSZ3.js";import"../../../chunk-KRL3IUV3.js";import"../../../chunk-Y2T3JX7K.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-S3DUFDQ6.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-3S5N4HLJ.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-4FD7TAOE.js";import"../../../chunk-LF3FUSCQ.js";import"../../../chunk-K7BTCBWD.js";import"../../../chunk-L55YIXDC.js";