efficient-easel 24.2.0 → 25.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 (147) hide show
  1. package/README.md +43 -2
  2. package/dist/{CanvasDragLayer-NZpaX6aq.d.ts → CanvasDragLayer-DXeQGrwJ.d.ts} +42 -3
  3. package/dist/canvas/index.d.ts +2 -139
  4. package/dist/canvas/index.js +1 -1
  5. package/dist/chrome/index.js +1 -1
  6. package/dist/{chunk-6NJHYXJM.js → chunk-3XECMGXX.js} +1 -1
  7. package/dist/{chunk-FRAIEWRC.js → chunk-62UGN7VM.js} +1 -1
  8. package/dist/{chunk-HNKB2ZYR.js → chunk-6ATIYLUL.js} +1 -1
  9. package/dist/{chunk-Y53EKN35.js → chunk-6EDVZBUO.js} +1 -1
  10. package/dist/{chunk-JMAOCKB2.js → chunk-6WTWYHC2.js} +3 -3
  11. package/dist/chunk-7UFKEX72.js +1 -0
  12. package/dist/chunk-BBD3FLU3.js +16 -0
  13. package/dist/chunk-CEC5XLN4.js +1 -0
  14. package/dist/chunk-CWELHADJ.js +1 -0
  15. package/dist/chunk-DX3VILZ3.js +6 -0
  16. package/dist/chunk-ERB6FAZT.js +2 -0
  17. package/dist/{chunk-TGZCD6IP.js → chunk-EUFDQ4KL.js} +1 -1
  18. package/dist/chunk-FEP6XMNX.js +1 -0
  19. package/dist/chunk-FR7EEKFF.js +1 -0
  20. package/dist/chunk-GDO4QJ4G.js +1 -0
  21. package/dist/{chunk-GMCZXMOV.js → chunk-GR3XRILS.js} +1 -1
  22. package/dist/chunk-H6BER2EU.js +1 -0
  23. package/dist/{chunk-G67G63O5.js → chunk-ITIVCER6.js} +1 -1
  24. package/dist/chunk-IW5QXREH.js +64 -0
  25. package/dist/chunk-JIP5JNRB.js +1 -0
  26. package/dist/chunk-JQQFB7EZ.js +1 -0
  27. package/dist/{chunk-AGWKB77Q.js → chunk-K53PQAMP.js} +1 -1
  28. package/dist/{chunk-4ESG53BH.js → chunk-KF3LT7J2.js} +1 -1
  29. package/dist/{chunk-CLOS6SSX.js → chunk-KO47WAWR.js} +1 -1
  30. package/dist/chunk-KVIEUWTX.js +11 -0
  31. package/dist/{chunk-QORC32JO.js → chunk-LUHGBFOD.js} +3 -3
  32. package/dist/{chunk-DDH2DYQP.js → chunk-LUOY3A3Q.js} +1 -1
  33. package/dist/chunk-MIX7EGRG.js +2 -0
  34. package/dist/{chunk-2FYFAAAK.js → chunk-OXOUGEAT.js} +1 -1
  35. package/dist/chunk-PMRN5Z3T.js +1 -0
  36. package/dist/{chunk-55KKGABA.js → chunk-PVBDKBJB.js} +1 -1
  37. package/dist/{chunk-RPMSET77.js → chunk-QTHQPJWA.js} +1 -1
  38. package/dist/{chunk-ISS72IKO.js → chunk-QZJKWKGH.js} +1 -1
  39. package/dist/{chunk-IYHO4XQX.js → chunk-S6YOIRXQ.js} +1 -1
  40. package/dist/{chunk-5PXVT7JY.js → chunk-SBVIW3KJ.js} +1 -1
  41. package/dist/chunk-SC6E3UUS.js +13 -0
  42. package/dist/{chunk-LN43DP2A.js → chunk-SQTVXE5D.js} +13 -13
  43. package/dist/chunk-TOKMFZPB.js +1 -0
  44. package/dist/chunk-U3LTJSBU.js +20 -0
  45. package/dist/{chunk-75C6WFNF.js → chunk-UCZQWQNS.js} +1 -1
  46. package/dist/chunk-UDWXBS46.js +1 -0
  47. package/dist/{chunk-WYTPBF3Q.js → chunk-VBEVZZTV.js} +11 -11
  48. package/dist/{chunk-OITNWE52.js → chunk-XLC7HWW3.js} +1 -1
  49. package/dist/chunk-XTDOSL2M.js +8 -0
  50. package/dist/chunk-YYD257TD.js +1 -0
  51. package/dist/copy/index.js +13 -13
  52. package/dist/copy-place-CQIemdtU.d.ts +25 -0
  53. package/dist/data/index.d.ts +4 -1
  54. package/dist/data/index.js +1 -1
  55. package/dist/dom-BpxMcHFP.d.ts +200 -0
  56. package/dist/drag/index.d.ts +2 -3
  57. package/dist/drag/index.js +1 -1
  58. package/dist/draw/index.d.ts +1 -1
  59. package/dist/draw/index.js +1 -1
  60. package/dist/easel/index.d.ts +67 -1
  61. package/dist/easel/index.js +1 -1
  62. package/dist/edit-lock/index.d.ts +0 -46
  63. package/dist/edit-lock/index.js +1 -1
  64. package/dist/fields/fields.css +6 -40
  65. package/dist/fields/index.d.ts +1 -6
  66. package/dist/fields/index.js +1 -1
  67. package/dist/node-ops/index.js +1 -1
  68. package/dist/page-copy/index.d.ts +110 -0
  69. package/dist/page-copy/index.js +5 -0
  70. package/dist/panel/index.d.ts +29 -34
  71. package/dist/panel/index.js +1 -1
  72. package/dist/panel/panel.css +0 -78
  73. package/dist/screen/components/AddBlockRow.js +1 -1
  74. package/dist/screen/components/AddSidePanel.d.ts +37 -57
  75. package/dist/screen/components/AddSidePanel.js +1 -1
  76. package/dist/screen/components/NodeContextMenu.d.ts +19 -11
  77. package/dist/screen/components/NodeContextMenu.js +1 -1
  78. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  79. package/dist/screen/components/SaveControls.d.ts +10 -11
  80. package/dist/screen/components/SaveControls.js +1 -1
  81. package/dist/screen/components/ScreenChrome.js +1 -1
  82. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  83. package/dist/screen/components/ScreenMount.d.ts +5 -6
  84. package/dist/screen/components/ScreenMount.js +1 -1
  85. package/dist/screen/components/ScreenStoreProvider.d.ts +8 -9
  86. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  87. package/dist/screen/components/SectionScreenShell.js +17 -17
  88. package/dist/screen/components/SidePanelHead.js +1 -1
  89. package/dist/screen/components/panel-widths.js +1 -1
  90. package/dist/screen/components/usePartBridge.d.ts +10 -11
  91. package/dist/screen/components/usePartBridge.js +1 -1
  92. package/dist/screen/index.d.ts +9 -10
  93. package/dist/screen/index.js +1 -1
  94. package/dist/screen/lib/document/block-set-host.d.ts +55 -0
  95. package/dist/screen/lib/document/block-set-host.js +1 -0
  96. package/dist/screen/lib/document/block-types-in.js +1 -1
  97. package/dist/screen/lib/document/box-fields.d.ts +160 -5
  98. package/dist/screen/lib/document/box-fields.js +1 -9
  99. package/dist/screen/lib/document/device-fields.js +1 -1
  100. package/dist/screen/lib/document/palette-sections.d.ts +33 -97
  101. package/dist/screen/lib/document/palette-sections.js +1 -1
  102. package/dist/screen/lib/document/preview-dom.js +1 -1
  103. package/dist/screen/lib/document/section-doc.js +1 -1
  104. package/dist/screen/lib/document/style-clipboard.d.ts +10 -11
  105. package/dist/screen/lib/document/style-clipboard.js +1 -1
  106. package/dist/screen/lib/document/use-section-ops.js +1 -1
  107. package/dist/screen/lib/document-switch.js +1 -1
  108. package/dist/screen/lib/failure.js +1 -1
  109. package/dist/screen/lib/host-inbound.js +1 -1
  110. package/dist/screen/lib/key-scope.js +1 -1
  111. package/dist/screen/lib/media-picker.js +1 -1
  112. package/dist/screen/lib/page-lock.js +1 -1
  113. package/dist/screen/lib/screen-parts.d.ts +251 -12
  114. package/dist/screen/lib/screen-parts.js +1 -1
  115. package/dist/screen/screen.css +6 -0
  116. package/dist/screen/words.d.ts +9 -0
  117. package/dist/screen/words.js +1 -1
  118. package/dist/strings/index.d.ts +4 -1
  119. package/dist/strings/index.js +2 -2
  120. package/dist/style-clipboard/index.d.ts +0 -32
  121. package/dist/style-clipboard/index.js +1 -1
  122. package/dist/text-styles/index.d.ts +7 -6
  123. package/dist/text-styles/index.js +37 -36
  124. package/dist/text-styles/text-styles.css +5 -53
  125. package/dist/tree/index.d.ts +2 -2
  126. package/dist/{types-DBy3L69b.d.ts → types-CoUTWUwB.d.ts} +1 -1
  127. package/dist/words-Dl8Qja4K.d.ts +32 -0
  128. package/package.json +15 -3
  129. package/dist/chunk-3FIS2FRS.js +0 -1
  130. package/dist/chunk-7RSE6KKY.js +0 -1
  131. package/dist/chunk-CMPFUJ26.js +0 -8
  132. package/dist/chunk-CZAAGBVL.js +0 -7
  133. package/dist/chunk-DSKNJXB4.js +0 -1
  134. package/dist/chunk-FJTCSQWK.js +0 -16
  135. package/dist/chunk-G7ISR6DI.js +0 -1
  136. package/dist/chunk-H4Z2V56N.js +0 -21
  137. package/dist/chunk-K7MMLCTT.js +0 -2
  138. package/dist/chunk-KRL3IUV3.js +0 -1
  139. package/dist/chunk-LF3FUSCQ.js +0 -1
  140. package/dist/chunk-THWO5YVZ.js +0 -1
  141. package/dist/chunk-TOHOGVAE.js +0 -15
  142. package/dist/chunk-UKPZ2YWE.js +0 -64
  143. package/dist/chunk-V7U33NF2.js +0 -1
  144. package/dist/chunk-VKPOH6MK.js +0 -1
  145. package/dist/chunk-YU3WHLGI.js +0 -1
  146. package/dist/repeat-D65bJS8d.d.ts +0 -49
  147. package/dist/session-EsjORLQ0.d.ts +0 -43
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactElement, ReactNode } from 'react';
3
3
  import { ShowWhenRule } from 'efficient-shell/format';
4
- import { PositionValue, SidesValue } from 'efficient-shell/ui';
4
+ import { TextAlign, PositionValue, SidesValue } from 'efficient-shell/ui';
5
5
  export { F as FIELD_DESCRIPTION_MARKER, o as describedAs } from '../../../ScreenDocumentContext-DPW_6gOC.js';
6
6
  import '../../../blocks/index.js';
7
7
  import '../../../types-BljCVdzR.js';
@@ -57,6 +57,15 @@ type BoxFieldRenderProps<V> = {
57
57
  * by value: a node that stores nothing holds `undefined`.
58
58
  */
59
59
  storedValue?: unknown;
60
+ /** The editor is read-only (a sent campaign opens so): the row draws its
61
+ * controls disabled. */
62
+ readOnly?: boolean;
63
+ /**
64
+ * The value this row's EMPTY state follows, when it is a phone twin
65
+ * ({@link phoneTwinFields}): the desktop value. Tested by KEY: a desktop
66
+ * that stores nothing passes `undefined`.
67
+ */
68
+ follows?: unknown;
60
69
  id?: string;
61
70
  name?: string;
62
71
  };
@@ -152,7 +161,7 @@ type BoxPlacement = (typeof BOX_PLACEMENTS)[number];
152
161
  /** Where an absent stored value puts a Box: where the copy already sits. */
153
162
  declare const BOX_PLACEMENT_DEFAULT: BoxPlacement;
154
163
  /** What each anchor is CALLED in the panel. */
155
- declare const BOX_PLACEMENT_LABELS: Readonly<Record<BoxPlacement, string>>;
164
+ declare const ANCHOR_LABELS: Readonly<Record<BoxPlacement, string>>;
156
165
  /** One square of the grid: shut, with the reason, when it cannot be picked. */
157
166
  type PlacementPoint = {
158
167
  value: string;
@@ -180,6 +189,76 @@ declare const SIDE_PAD_KEYS: Record<PadSide, string>;
180
189
  /** The props one edit of the row writes: only the sides that changed, each to
181
190
  * its number or to `undefined` (cleared: the side follows again). */
182
191
  declare function sidesPaddingPatch(keys: Record<PadSide, string>, before: SidesValue, next: SidesValue): Record<string, number | undefined>;
192
+ /** A padding stored as ONE object (the email designer's `padding`), as the
193
+ * row's four sides. A bare number is every side (an old Group's shape); a
194
+ * side that is not a number is empty — it follows. */
195
+ declare function sidesFromObject(stored: unknown): SidesValue;
196
+ /** What the row writes to a padding object: only the sides that hold a
197
+ * number (0 is a number), and `undefined` — nothing stored, the padding
198
+ * follows — when none does. */
199
+ declare function sidesToObject(sides: SidesValue): Partial<Record<PadSide, number>> | undefined;
200
+ /**
201
+ * Where a host keeps a row's PHONE value (twins plan E2). The website keeps
202
+ * it beside the desktop key (`gapPhone`, {@link PHONE_KEY_ACCESS}); the email
203
+ * designer keeps every phone value in one object (`mobile.gap`,
204
+ * {@link phoneObjectAccess}). The row is the same; only this differs, and no
205
+ * stored key moves.
206
+ */
207
+ interface PhoneValueAccess {
208
+ /** The key the phone row is declared under in the host's fields. */
209
+ fieldKey: (key: string) => string;
210
+ /** The phone value is stored under `fieldKey` itself, so the row reads and
211
+ * writes through its own field (`value` / `onChange`), as any row does. */
212
+ ownField?: boolean;
213
+ /** The phone value stored for `key` on a node. */
214
+ read: (values: Record<string, unknown>, key: string) => unknown;
215
+ /** The props one write of the phone value makes (`undefined`: a clear). */
216
+ write: (values: Record<string, unknown>, key: string, next: unknown) => Record<string, unknown>;
217
+ }
218
+ /** The website's phone values: `phoneKey(key)`, beside the desktop key. */
219
+ declare const PHONE_KEY_ACCESS: PhoneValueAccess;
220
+ /**
221
+ * Phone values kept in ONE object prop (the email designer's `mobile`). A
222
+ * write keeps the object's other keys; a clear removes only its own, and an
223
+ * object left empty is removed too. The phone row is declared under
224
+ * `_<objectKey>_<key>`, a key nothing stores.
225
+ */
226
+ declare function phoneObjectAccess(objectKey: string): PhoneValueAccess;
227
+ /**
228
+ * A row WITH its phone value (twins plan E2: "phone values in phone view, on
229
+ * the same row", Lewis 2026-10-27): the row under `key` (Desktop view only)
230
+ * and its twin (Phone view only) under `access.fieldKey(key)`. The twin is the
231
+ * same row given `follows`, the desktop value: empty, it rests on that and
232
+ * says so. A clear writes nothing — never a copy of the desktop value.
233
+ */
234
+ declare function phoneTwinFields<V>(key: string, row: BoxField<V>, access?: PhoneValueAccess): Record<string, BoxField<V>>;
235
+ /** A slider's label-line mark, as a function of the STORED value. */
236
+ type SliderAction = (value: unknown, onChange: (v: unknown) => void) => ReactNode;
237
+ /**
238
+ * A slider whose value may be EMPTY, and what empty means (twins plan E2,
239
+ * 2026-10-30: the email designer's number rows). An empty value follows a
240
+ * number from above — the style's, the campaign's — so the box shows that
241
+ * number in grey, the track rests on it, and the label line names the state
242
+ * (`SettingsDefaultReset`: Default while it follows, Reset once it does not).
243
+ * Emptying the box and Reset both write `undefined`, never the hint.
244
+ */
245
+ interface SliderClear {
246
+ /** The number an empty value follows. A function is given the render's
247
+ * props, for a hint that is live: it rides the field object (the way
248
+ * `currentValue` does), so it stays a pure read. */
249
+ hint: number | ((props: BoxFieldRenderProps<unknown>) => number);
250
+ /** The word the empty box shows instead of the number, when what it
251
+ * follows is not one ("Auto": a picture's own height). */
252
+ emptyLabel?: string;
253
+ }
254
+ /** What {@link boxFieldBuilders}' `slider` is told past its numbers. */
255
+ interface SliderOptions {
256
+ /** The label line's mark ({@link SliderAction}). A clear draws its own. */
257
+ action?: SliderAction;
258
+ clear?: SliderClear;
259
+ /** The typed box's ceiling, when a typed number may go past the track. */
260
+ inputMax?: number;
261
+ }
183
262
  /** What {@link directionField} is told: the directions this container offers,
184
263
  * in the order the strip draws them, and the one an absent value means. */
185
264
  interface DirectionFieldOptions<V extends string = string> {
@@ -237,6 +316,15 @@ type PositionOptions = {
237
316
  type SidesPaddingOptions = {
238
317
  /** The four stored keys (default {@link SIDE_PAD_KEYS}). The phone twins are `phoneKey(key)`. */
239
318
  keys?: Partial<Record<PadSide, string>>;
319
+ /**
320
+ * The padding is stored as ONE object under `key` (`{ top, right, bottom,
321
+ * left }`, the email designer's shape) instead of four keys. Its phone
322
+ * value is kept where `phone` says (default {@link PHONE_KEY_ACCESS}).
323
+ */
324
+ object?: {
325
+ key: string;
326
+ phone?: PhoneValueAccess;
327
+ };
240
328
  /** Give the row a phone twin (shown in phone view only). Default true. */
241
329
  phone?: boolean;
242
330
  /** What an EMPTY side draws, per side, shown in grey (default 0). */
@@ -274,6 +362,37 @@ interface BoxFieldSetOptions {
274
362
  };
275
363
  padding?: SidesPaddingOptions;
276
364
  }
365
+ /** What a host says about an Alignment row: which answers it can honour (the
366
+ * shell's closed list; Justify only when named) and, rarely, its own label. */
367
+ interface AlignmentOptions {
368
+ allow?: readonly TextAlign[];
369
+ label?: string;
370
+ /** What the desktop row rests on when nothing is stored. Left, unless the
371
+ * block has always drawn another (the Title with buttons' buttons: right). */
372
+ fallback?: TextAlign;
373
+ /** The word of a first answer that means "no choice of my own" (value
374
+ * empty), for a block that follows its parent: `Inherit`. It is a word, not
375
+ * a direction, so it draws no glyph; the shell's list has none (`inherit` is
376
+ * the absence of an answer). */
377
+ inherit?: string;
378
+ /** This is the phone's row: its first answer is Match desktop, drawn as the
379
+ * desktop glyph (a word does not fit a 288px strip beside the other glyphs)
380
+ * and named by the word. It takes the place of `inherit` when both are set. */
381
+ phone?: boolean;
382
+ }
383
+ /** What a host says about a Block alignment row: where the block sits in its
384
+ * parent. Always Left / Center / Right (the three places a block can stand). */
385
+ interface BlockAlignmentOptions {
386
+ /** The places the host can honour; Left, Center and Right unless it names fewer. */
387
+ allow?: readonly TextAlign[];
388
+ label?: string;
389
+ /** What the desktop row rests on when nothing is stored. */
390
+ fallback?: TextAlign;
391
+ /** The word of a first answer that means "no choice of my own" (value empty). */
392
+ inherit?: string;
393
+ /** This is the phone's row: its first answer is Match desktop, as a glyph. */
394
+ phone?: boolean;
395
+ }
277
396
  /**
278
397
  * The segmented strip: easel's `SettingsSegmented`, with an option's `value`
279
398
  * as the strip's `id`. An option that IS a shape passes its `picture`, and the
@@ -313,7 +432,7 @@ declare function placementGridView(say: BoxFieldSay, { label, value, onChange, p
313
432
  * builders exported below are this with no `say`, in English.
314
433
  */
315
434
  declare function boxFieldBuilders(say?: BoxFieldSay): {
316
- slider: (label: string, icon: ReactElement, min: number, max: number, step: number, fallback: number, suffix?: string, action?: (value: unknown, onChange: (v: unknown) => void) => ReactNode) => BoxField<number>;
435
+ slider: (label: string, icon: ReactElement, min: number, max: number, step: number, fallback: number, suffix?: string, actionOrOptions?: SliderAction | SliderOptions) => BoxField<number>;
317
436
  select: (label: string, icon: ReactElement, options: readonly SelectOption[], fallback: string, note?: string) => SelectField;
318
437
  Segmented: <V = string>(props: Parameters<typeof segmentedStrip<V>>[1]) => react.JSX.Element;
319
438
  segmented: {
@@ -337,6 +456,24 @@ declare function boxFieldBuilders(say?: BoxFieldSay): {
337
456
  PlacementGridView: (props: Parameters<typeof placementGridView>[1]) => react.JSX.Element;
338
457
  positionFields: (o: PositionOptions) => Record<string, BoxField<number>>;
339
458
  sidesPaddingFields: (opts?: SidesPaddingOptions) => Record<string, BoxField<undefined> | BoxField<number>>;
459
+ alignmentField: (opts?: AlignmentOptions, fallback?: string) => BoxField<string>;
460
+ alignmentFields: (key?: string, opts?: AlignmentOptions) => Record<string, BoxField<string>>;
461
+ AlignmentStrip: ({ opts, value, onChange, ariaLabel, disabled, }: {
462
+ opts?: AlignmentOptions;
463
+ value: string;
464
+ onChange: (next: string) => void;
465
+ ariaLabel: string;
466
+ disabled?: boolean;
467
+ }) => react.JSX.Element;
468
+ blockAlignmentField: (opts?: BlockAlignmentOptions, fallback?: string) => BoxField<string>;
469
+ blockAlignmentFields: (key?: string, opts?: BlockAlignmentOptions) => Record<string, BoxField<string>>;
470
+ BlockAlignmentStrip: ({ opts, value, onChange, ariaLabel, disabled, }: {
471
+ opts?: BlockAlignmentOptions;
472
+ value: string;
473
+ onChange: (next: string) => void;
474
+ ariaLabel: string;
475
+ disabled?: boolean;
476
+ }) => react.JSX.Element;
340
477
  boxFieldSet: (opts?: BoxFieldSetOptions) => {
341
478
  _gLayout: BoxField<undefined>;
342
479
  placement: BoxField<string>;
@@ -350,7 +487,7 @@ declare function boxFieldBuilders(say?: BoxFieldSay): {
350
487
  };
351
488
  };
352
489
  /** The builders in English (no host's `say`). */
353
- declare const slider: (label: string, icon: ReactElement, min: number, max: number, step: number, fallback: number, suffix?: string, action?: (value: unknown, onChange: (v: unknown) => void) => ReactNode) => BoxField<number>;
490
+ declare const slider: (label: string, icon: ReactElement, min: number, max: number, step: number, fallback: number, suffix?: string, actionOrOptions?: SliderAction | SliderOptions) => BoxField<number>;
354
491
  declare const select: (label: string, icon: ReactElement, options: readonly SelectOption[], fallback: string, note?: string) => SelectField;
355
492
  declare const Segmented: <V = string>(props: Parameters<typeof segmentedStrip<V>>[1]) => react.JSX.Element;
356
493
  declare const segmented: {
@@ -374,6 +511,24 @@ declare const placementField: (label: string, { fallback, pointsFor }?: Placemen
374
511
  declare const PlacementGridView: (props: Parameters<typeof placementGridView>[1]) => react.JSX.Element;
375
512
  declare const positionFields: (o: PositionOptions) => Record<string, BoxField<number>>;
376
513
  declare const sidesPaddingFields: (opts?: SidesPaddingOptions) => Record<string, BoxField<undefined> | BoxField<number>>;
514
+ declare const alignmentField: (opts?: AlignmentOptions, fallback?: string) => BoxField<string>;
515
+ declare const alignmentFields: (key?: string, opts?: AlignmentOptions) => Record<string, BoxField<string>>;
516
+ declare const AlignmentStrip: ({ opts, value, onChange, ariaLabel, disabled, }: {
517
+ opts?: AlignmentOptions;
518
+ value: string;
519
+ onChange: (next: string) => void;
520
+ ariaLabel: string;
521
+ disabled?: boolean;
522
+ }) => react.JSX.Element;
523
+ declare const blockAlignmentField: (opts?: BlockAlignmentOptions, fallback?: string) => BoxField<string>;
524
+ declare const blockAlignmentFields: (key?: string, opts?: BlockAlignmentOptions) => Record<string, BoxField<string>>;
525
+ declare const BlockAlignmentStrip: ({ opts, value, onChange, ariaLabel, disabled, }: {
526
+ opts?: BlockAlignmentOptions;
527
+ value: string;
528
+ onChange: (next: string) => void;
529
+ ariaLabel: string;
530
+ disabled?: boolean;
531
+ }) => react.JSX.Element;
377
532
  declare const boxFieldSet: (opts?: BoxFieldSetOptions) => {
378
533
  _gLayout: BoxField<undefined>;
379
534
  placement: BoxField<string>;
@@ -386,4 +541,4 @@ declare const boxFieldSet: (opts?: BoxFieldSetOptions) => {
386
541
  _gNudge: BoxField<undefined>;
387
542
  };
388
543
 
389
- export { BOX_ALIGN_POINTS, BOX_DIRECTIONS, BOX_DIRECTION_LABEL, BOX_GAP, BOX_JUSTIFY_POINTS, BOX_NUDGE_LIMIT, BOX_PLACEMENTS, BOX_PLACEMENT_DEFAULT, BOX_PLACEMENT_LABELS, BOX_WIDTH, BOX_WRAP_LABEL, BOX_WRAP_POINTS, type BoxAlign, type BoxField, type BoxFieldRenderProps, type BoxFieldSay, type BoxFieldSetOptions, type BoxFlexRowOptions, type BoxJustify, type BoxPlacement, type BoxWrap, type DirectionFieldOptions, type GapFieldOptions, OPEN_PLACEMENT_POINTS, type PlacementFieldOptions, PlacementGridView, type PlacementPoint, type PositionOptions, SIDE_PAD_KEYS, Segmented, type SelectField, type SelectOption, type SidesPaddingOptions, boxAlignField, boxFieldBuilders, boxFieldSet, boxJustifyField, boxWrapField, directionField, gapField, group, iconOf, isNoGlyph, noGlyph, normaliseBoxPlacement, placementField, positionFields, positionPatch, section, segmented, select, sharedStyleKinds, sidesPaddingFields, sidesPaddingPatch, slider };
544
+ export { ANCHOR_LABELS, type AlignmentOptions, AlignmentStrip, BOX_ALIGN_POINTS, BOX_DIRECTIONS, BOX_DIRECTION_LABEL, BOX_GAP, BOX_JUSTIFY_POINTS, BOX_NUDGE_LIMIT, BOX_PLACEMENTS, BOX_PLACEMENT_DEFAULT, BOX_WIDTH, BOX_WRAP_LABEL, BOX_WRAP_POINTS, type BlockAlignmentOptions, BlockAlignmentStrip, type BoxAlign, type BoxField, type BoxFieldRenderProps, type BoxFieldSay, type BoxFieldSetOptions, type BoxFlexRowOptions, type BoxJustify, type BoxPlacement, type BoxWrap, type DirectionFieldOptions, type GapFieldOptions, OPEN_PLACEMENT_POINTS, PHONE_KEY_ACCESS, type PhoneValueAccess, type PlacementFieldOptions, PlacementGridView, type PlacementPoint, type PositionOptions, SIDE_PAD_KEYS, Segmented, type SelectField, type SelectOption, type SidesPaddingOptions, type SliderAction, type SliderClear, type SliderOptions, alignmentField, alignmentFields, blockAlignmentField, blockAlignmentFields, boxAlignField, boxFieldBuilders, boxFieldSet, boxJustifyField, boxWrapField, directionField, gapField, group, iconOf, isNoGlyph, noGlyph, normaliseBoxPlacement, phoneObjectAccess, phoneTwinFields, placementField, positionFields, positionPatch, section, segmented, select, sharedStyleKinds, sidesFromObject, sidesPaddingFields, sidesPaddingPatch, sidesToObject, slider };
@@ -1,9 +1 @@
1
- import{deviceField as e}from"../../../chunk-2FYFAAAK.js";import{noControlField as t,NoControlMark as n}from"../../../chunk-22I55W37.js";import{describedAs as o}from"../../../chunk-LX23TCTP.js";export{FIELD_DESCRIPTION_MARKER,describedAs}from"../../../chunk-LX23TCTP.js";import"../../../chunk-IYHO4XQX.js";import{withStyleKind as l}from"../../../chunk-V7U33NF2.js";import"../../../chunk-6WY6ZXJG.js";import{phoneKey as a}from"../../../chunk-E52W3M5I.js";import{foldMetaOf as i,FOLD_FIELD_MARKER as r}from"../../../chunk-ANPOR6EY.js";import{useEasel as s,useSelectedFields as u}from"../../../chunk-FJTCSQWK.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-AGWKB77Q.js";import"../../../chunk-RPMSET77.js";import{SettingsDefaultReset as c,sidesStartEach as d,SidesInput as p,SidesEachToggle as m}from"../../../chunk-TOHOGVAE.js";import"../../../chunk-FM6JO4WF.js";import{DEFAULT_PANEL_WORDS as b}from"../../../chunk-KFV7N2DJ.js";import"../../../chunk-HZSZT3BE.js";import"../../../chunk-KRL3IUV3.js";import{FieldSelect as f}from"../../../chunk-KFWNGPW3.js";import"../../../chunk-JACEEVVF.js";import{SettingsSwitch as h}from"../../../chunk-OECWLNKJ.js";import{SettingsField as g,SettingsSegmented as v}from"../../../chunk-CZAAGBVL.js";import{useWords as y}from"../../../chunk-MFIRYGHW.js";import"../../../chunk-YU3WHLGI.js";import"../../../chunk-LF3FUSCQ.js";import"../../../chunk-TGZCD6IP.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";import{useState as k}from"react";import{BoxJustifyIcon as C,WrapIcon as j,GapIcon as x,WidthIcon as F,PlacementIcon as w,NudgeIcon as P,PaddingAllIcon as S,BoxYBetweenIcon as E,BoxYStretchIcon as L,BoxYEndIcon as I,BoxYCenterIcon as O,BoxYStartIcon as T,BoxXBetweenIcon as W,BoxXStretchIcon as K,BoxXEndIcon as A,BoxXCenterIcon as G,BoxXStartIcon as R,BoxItemAlignmentIcon as B}from"efficient-shell/icons/efficient";import{Slider as N,AlignmentGrid as V,PositionInput as Y}from"efficient-shell/ui";import{jsx as J,Fragment as M,jsxs as D}from"react/jsx-runtime";var X=e=>e;function Z(){return null}function H(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");/* @__PURE__ */
2
- return J(Z,{},e)}function U(e){return e.type===Z}function _(e){return U(e)?void 0:e}function Q(e){for(const[t,n]of Object.entries(e))n&&"object"==typeof n&&!i(n)&&l(n,`section:${t}`);return e}function z(e,t){return{type:"custom",[r]:{label:e,level:t},marker:!0,fold:e,render:()=>/* @__PURE__ */J(M,{})}}function $(e){return z(e,2)}function q(e){return z(e,1)}var ee=[{label:"Start",value:"start"},{label:"Center",value:"center"},{label:"Space between",value:"between"},{label:"End",value:"end"}],te=[{label:"Start",value:"start"},{label:"Center",value:"center"},{label:"End",value:"end"},{label:"Stretch",value:"stretch"}],ne="Wrap",oe=[{label:"Wrap",value:"wrap"},{label:"No wrap",value:"nowrap"}],le="Direction",ae=[{label:"Stacked",value:"column"},{label:"One row",value:"row"}],ie={min:-32,max:64,step:2,builtIn:0},re={min:30,max:100,step:5,fallback:60},se=["top-left","top-center","top-right","left","center","right","bottom-left","bottom-center","bottom-right"],ue="bottom-left",ce={"top-left":"Top left","top-center":"Top center","top-right":"Top right",left:"Left",center:"Center",right:"Right","bottom-left":"Bottom left","bottom-center":"Bottom center","bottom-right":"Bottom right"},de=se.map(e=>({value:e,label:ce[e]}));function pe(e,t=ue){return se.includes(e)?e:t}var me=40,be=e=>"number"==typeof e?e:null;function fe(e,t,n){const o={};for(const l of["x","y"])n[l]!==t[l]&&(o[e[l]]=n[l]??void 0);return o}var he=["top","right","bottom","left"],ge={top:"sectionPaddingTop",right:"sectionPaddingRight",bottom:"sectionPaddingBottom",left:"sectionPaddingLeft"},ve=e=>"number"==typeof e?e:null;function ye(e,t,n){const o={};for(const l of he)n[l]!==t[l]&&(o[e[l]]=n[l]??void 0);return o}function ke(e,{options:t,value:n,onChange:o,ariaLabel:l,disabled:a=!1}){/* @__PURE__ */
3
- return J(v,{options:t.map(t=>t.picture?{id:t.value,label:t.picture,title:e(t.title??t.label)}:{id:t.value,label:e(t.label),title:void 0===t.title?void 0:e(t.title)}),value:n,onChange:o,ariaLabel:e(l),disabled:a})}function Ce(e,{label:t,value:n,onChange:o,points:l}){const a=l.find(e=>e.disabled),i=l.map(t=>({...t,label:e(t.label),...t.title?{title:e(t.title)}:null}));/* @__PURE__ */
4
- return J(g,{label:e(t),icon:/* @__PURE__ */J(w,{}),hint:a?.title?e(a.title):void 0,children:/* @__PURE__ */J(V,{label:e(t),value:n,points:i,onChange:o})})}function je({say:e,label:t,value:n,onChange:o,pointsFor:l}){const{appState:a,selectedItem:i}=s(e=>e),r=i?.props?.id?String(i.props.id):void 0;return Ce(e,{label:t,value:n,onChange:o,points:l(a?.data,r)})}function xe(){try{return u()}catch{return null}}function Fe({say:e,o:t}){const n=xe(),o=y("panel",b),l=n?.values??{},a={x:be(l[t.keys.x]),y:be(l[t.keys.y])},i=e(t.label??"Position"),r=Boolean(a.x||a.y),s=e=>{const o=fe(t.keys,a,e);Object.keys(o).length&&n?.onChangeMany(o)},u=/* @__PURE__ */J(Y,{label:i,value:a,onChange:s,words:{x:e("Left and right"),y:e("Up and down"),unit:"px"},placeholder:{x:"0",y:"0"},min:t.min,max:t.max,step:t.step??1}),d=/* @__PURE__ */J(c,{words:o,label:i,changed:r,detail:"0 px, 0 px",onReset:()=>s({x:null,y:null})});return null===t.label?/* @__PURE__ */D("div",{className:"sf-position-line",children:[u,d]}):/* @__PURE__ */J(g,{label:i,icon:/* @__PURE__ */J(P,{}),changed:r,action:d,children:u})}var we={x:{start:/* @__PURE__ */J(R,{}),center:/* @__PURE__ */J(G,{}),end:/* @__PURE__ */J(A,{}),stretch:/* @__PURE__ */J(K,{}),between:/* @__PURE__ */J(W,{})},y:{start:/* @__PURE__ */J(T,{}),center:/* @__PURE__ */J(O,{}),end:/* @__PURE__ */J(I,{}),stretch:/* @__PURE__ */J(L,{}),between:/* @__PURE__ */J(E,{})}},Pe=e=>"row"===e?"row":"column";function Se({say:e,kind:t,label:n,options:o,value:l,onChange:a,o:i}){const r=xe(),s="justify"===t==("row"===(i.runs??Pe)(r?.values?.[i.directionKey??"direction"]))?"x":"y";return ke(e,{options:o.map(e=>({label:e.label,value:e.value,picture:we[s][e.value]})),value:l,onChange:a,ariaLabel:n})}function Ee({say:e,tier:t,o:n}){const o=xe(),l=o?.values??{},a="mobile"===t?n.phoneKeys:n.keys,i=Object.fromEntries(he.map(e=>[e,ve(l[a[e]])])),r=Object.fromEntries(he.map(e=>[e,String("mobile"===t?ve(l[n.keys[e]])??n.fallback[e]:n.fallback[e])])),[s,u]=k(()=>d(i,r));/* @__PURE__ */
5
- return J(g,{label:e("Padding"),icon:/* @__PURE__ */J(S,{}),action:/* @__PURE__ */J(m,{each:s,label:e("Each side"),onChange:u}),children:/* @__PURE__ */J(p,{label:e("Padding"),each:s,value:i,placeholder:r,min:n.min,max:n.max,step:n.step,onChange:e=>{const t=ye(a,i,e);Object.keys(t).length&&o?.onChangeMany(t)},words:{sides:{top:e("Padding top"),right:e("Padding right"),bottom:e("Padding bottom"),left:e("Padding left")},vertical:e("Top and bottom"),horizontal:e("Left and right"),unit:"px"}})})}function Le(l=X){function i(e,t,n,a,i,r,s="",u){return{type:"custom",...o({},{type:"number",label:e}),render:o=>{const c="number"==typeof o.value?o.value:r;/* @__PURE__ */
6
- return J(g,{label:l(e),icon:_(t),action:u?u("storedValue"in o?o.storedValue:o.value,o.onChange):void 0,children:/* @__PURE__ */J("div",{className:"sf-slider",children:/* @__PURE__ */J(N,{min:n,max:a,step:i,value:c,suffix:s||void 0,showInput:!0,label:l(e),disabled:!1,size:"sm",boxSize:"md",className:"sf-slider-track",onChange:e=>{null!==e&&e!==c&&o.onChange(e)}})})})}}}function r(e){return ke(l,e)}function s(e,t,n,a){const i=n.map(e=>"string"==typeof e?{label:e,value:e}:e);return{type:"custom",...o({},{type:"radio",label:e,options:i.map(e=>({value:e.value,label:e.label}))}),render:({value:n,onChange:o,field:s})=>/* @__PURE__ */J(g,{label:l(e),icon:_(t),children:r({options:i,value:i.some(e=>e.value===n)?n:n||s?.currentValue||a,onChange:o,ariaLabel:e})})}}function u(e,t,n,a,i,r){return{type:"custom",options:a,fallback:i,...o({},{type:"radio",label:t,options:a.map(e=>({value:e.value,label:e.label}))}),render:({value:o,onChange:s,field:u})=>{const c=u.options??a,d=u.fallback??i,p=c.some(e=>e.value===o)?o:d;/* @__PURE__ */
7
- return J(g,{label:l(t),icon:_(n),children:/* @__PURE__ */J(Se,{say:l,kind:e,label:t,options:c,value:p,onChange:s,o:r})})}}}function c(e={}){return u("justify","Justify",/* @__PURE__ */J(C,{}),ee,ee[0].value,e)}function d(e={}){return u("align","Item alignment",/* @__PURE__ */J(B,{}),te,"stretch",e)}function p(){const e=ne;return{type:"custom",options:oe,fallback:oe[1].value,...o({},{type:"radio",label:e,options:oe.map(e=>({value:e.value,label:e.label}))}),render:({value:t,onChange:n,id:o,name:a})=>{const i=`${o??a??e}-label`;/* @__PURE__ */
8
- return J(g,{label:l(e),labelId:i,icon:/* @__PURE__ */J(j,{}),action:/* @__PURE__ */J(h,{checked:(r=t,!0===r||"wrap"===r),onChange:e=>n(e?oe[0].value:oe[1].value),ariaLabelledBy:i})});var r}}}function m({offered:e,fallback:t,resolve:n}){const o=n??(n=>e.some(e=>e.value===n)?n:t),l=s(le,H("`Direction` names how a container’s children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; the shell’s own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),e.map(e=>({label:e.label,value:e.value})),o(void 0));return{type:"custom",render:e=>l.render({...e,value:o(e.value),onChange:t=>e.onChange(t)})}}function b({min:e,max:t,step:n,builtIn:o,resolve:l,action:a,mark:r}){const s=i("Gap",/* @__PURE__ */J(x,{}),e,t,n,o,"px",a),u=l??(e=>"number"==typeof e?e:o);return{...r,type:"custom",render:e=>s.render({...e,value:u(e.value,e.field),storedValue:e.value,onChange:t=>e.onChange(t)})}}function v(e,{fallback:t=ue,pointsFor:n}={}){return{type:"custom",render:({value:o,onChange:a})=>{const i=pe(o,t);return n?/* @__PURE__ */J(je,{say:l,label:e,value:i,onChange:a,pointsFor:n}):Ce(l,{label:e,value:i,onChange:a,points:de})}}}function y(e){return{[e.keys.x]:{type:"custom",render:()=>/* @__PURE__ */J(Fe,{say:l,o:e})},[e.keys.y]:{...t({type:"custom",render:()=>/* @__PURE__ */J(n,{})},"always"),reachedBy:e.keys.x}}}function k(o={}){const i={...ge,...o.keys},r={keys:i,phoneKeys:Object.fromEntries(he.map(e=>[e,a(i[e])])),fallback:{top:0,right:0,bottom:0,left:0,...o.fallback},min:o.min??0,max:o.max??200,step:o.step??4},s=!1!==o.phone,u=t=>{const n={type:"custom",render:()=>/* @__PURE__ */J(Ee,{say:l,tier:t,o:r})};return s?e(t,n):n},c=()=>t({type:"custom",render:()=>/* @__PURE__ */J(n,{})},"always"),d=he.filter(e=>"top"!==e);return Q({...!1===o.group?{}:{_gSpacing:$("Padding")},[r.keys.top]:u("desktop"),...s?{[r.phoneKeys.top]:u("mobile")}:{},...Object.fromEntries(d.map(e=>[r.keys[e],{...c(),reachedBy:r.keys.top}])),...s?Object.fromEntries(d.map(t=>[r.phoneKeys[t],e("mobile",c())])):{}})}return{slider:i,select:function(e,t,n,a,i){return{type:"custom",options:n,fallback:a,...i?{note:i}:{},...o({},{type:"select",label:e}),render:({value:o,onChange:r,field:s})=>{const u=s.options??n,c=s.fallback??a,d=u.some(e=>e.value===o)?o:c;/* @__PURE__ */
9
- return J(g,{label:l(e),icon:_(t),children:/* @__PURE__ */J(f,{value:d,ariaLabel:l(e),onChange:r,options:[...i?[{label:l(i),value:"\0note",disabled:!0}]:[],...u.map(e=>({label:l(e.label),value:e.value}))]})})}}},Segmented:r,segmented:s,boxJustifyField:c,boxAlignField:d,boxWrapField:p,directionField:m,gapField:b,placementField:v,PlacementGridView:function(e){return Ce(l,e)},positionFields:y,sidesPaddingFields:k,boxFieldSet:function(e={}){const t=e.width??re,n=e.nudge?.limit??40,o=e.direction??{offered:ae,fallback:"column"},l=o.resolve??(e=>o.offered.some(t=>t.value===e)?e:o.fallback),a={runs:e=>"row"===l(e)?"row":"column"};return{_gLayout:$("Layout"),placement:v("Placement",e.placement),width:i("Width",/* @__PURE__ */J(F,{}),t.min,t.max,t.step,t.fallback,"%"),direction:m(o),gap:b(e.gap??ie),justify:c(a),align:d(a),wrap:p(),_gNudge:$("Nudge"),...y({keys:e.nudge?.keys??{x:"nudgeX",y:"nudgeY"},min:-n,max:n,label:null}),...k(e.padding)}}}}var{slider:Ie,select:Oe,Segmented:Te,segmented:We,boxJustifyField:Ke,boxAlignField:Ae,boxWrapField:Ge,directionField:Re,gapField:Be,placementField:Ne,PlacementGridView:Ve,positionFields:Ye,sidesPaddingFields:Je,boxFieldSet:Me}=Le();export{te as BOX_ALIGN_POINTS,ae as BOX_DIRECTIONS,le as BOX_DIRECTION_LABEL,ie as BOX_GAP,ee as BOX_JUSTIFY_POINTS,me as BOX_NUDGE_LIMIT,se as BOX_PLACEMENTS,ue as BOX_PLACEMENT_DEFAULT,ce as BOX_PLACEMENT_LABELS,re as BOX_WIDTH,ne as BOX_WRAP_LABEL,oe as BOX_WRAP_POINTS,de as OPEN_PLACEMENT_POINTS,Ve as PlacementGridView,ge as SIDE_PAD_KEYS,Te as Segmented,Ae as boxAlignField,Le as boxFieldBuilders,Me as boxFieldSet,Ke as boxJustifyField,Ge as boxWrapField,Re as directionField,Be as gapField,$ as group,_ as iconOf,U as isNoGlyph,H as noGlyph,pe as normaliseBoxPlacement,Ne as placementField,Ye as positionFields,fe as positionPatch,q as section,We as segmented,Oe as select,Q as sharedStyleKinds,Je as sidesPaddingFields,ye as sidesPaddingPatch,Ie as slider};
1
+ export{ANCHOR_LABELS,AlignmentStrip,BOX_ALIGN_POINTS,BOX_DIRECTIONS,BOX_DIRECTION_LABEL,BOX_GAP,BOX_JUSTIFY_POINTS,BOX_NUDGE_LIMIT,BOX_PLACEMENTS,BOX_PLACEMENT_DEFAULT,BOX_WIDTH,BOX_WRAP_LABEL,BOX_WRAP_POINTS,BlockAlignmentStrip,OPEN_PLACEMENT_POINTS,PHONE_KEY_ACCESS,PlacementGridView,SIDE_PAD_KEYS,Segmented,alignmentField,alignmentFields,blockAlignmentField,blockAlignmentFields,boxAlignField,boxFieldBuilders,boxFieldSet,boxJustifyField,boxWrapField,directionField,gapField,group,iconOf,isNoGlyph,noGlyph,normaliseBoxPlacement,phoneObjectAccess,phoneTwinFields,placementField,positionFields,positionPatch,section,segmented,select,sharedStyleKinds,sidesFromObject,sidesPaddingFields,sidesPaddingPatch,sidesToObject,slider}from"../../../chunk-KVIEUWTX.js";import"../../../chunk-SC6E3UUS.js";import"../../../chunk-OXOUGEAT.js";import"../../../chunk-22I55W37.js";export{FIELD_DESCRIPTION_MARKER,describedAs}from"../../../chunk-LX23TCTP.js";import"../../../chunk-S6YOIRXQ.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-E52W3M5I.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BBD3FLU3.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-FM6JO4WF.js";import"../../../chunk-KFV7N2DJ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-OECWLNKJ.js";import"../../../chunk-HZSZT3BE.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1 +1 @@
1
- export{DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-2FYFAAAK.js";import"../../../chunk-22I55W37.js";import"../../../chunk-IYHO4XQX.js";export{DEVICE_FIELD_MARKER,deviceMetaOf}from"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
1
+ export{DEVICE_HIDDEN_ATTR,DEVICE_NOTE,deviceField,deviceNote,shownTier,withoutDeviceGate}from"../../../chunk-OXOUGEAT.js";import"../../../chunk-22I55W37.js";import"../../../chunk-S6YOIRXQ.js";export{DEVICE_FIELD_MARKER,deviceMetaOf}from"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
@@ -1,103 +1,39 @@
1
- import { Config } from '../../../blocks/index.js';
1
+ import '../../../blocks/index.js';
2
+ export { P as PaletteLook, a as PalettePreset, b as PaletteSection, c as buildPaletteSections, d as categoryLabel, m as matchesQuery, p as paletteWithoutPinned, e as pinnedSection } from '../screen-parts.js';
2
3
  import 'react';
3
4
  import '../../../types-BljCVdzR.js';
4
5
  import '../../../data/index.js';
5
6
  import '../../../types-Dq180WRV.js';
6
7
  import '../../../resolve-Bz4mszpL.js';
7
8
  import '../../../plan-D0DgSLnY.js';
8
-
9
- /** One offerable section, with the category it is grouped under. */
10
- type PaletteSection = {
11
- type: string;
12
- cat: string;
13
- name: string;
14
- desc: string;
15
- /**
16
- * The heading of the category this section sits under, resolved once at build
17
- * time — SEARCHED, and already SHOWN as the nav row this card sits beneath.
18
- *
19
- * ⚠️ IT IS HERE BECAUSE THE NAV AND THE SEARCH DISAGREED. Seven of the
20
- * thirteen category names returned NOTHING when typed: "Blog & journal" reads
21
- * 5 in the nav, and "blog" found 0, because not one of Issue Header, Featured
22
- * Cover, Article Text, Recurring Columns or Latest Posts carries the word. Same
23
- * for shop, about, promotions, navigation, legal and layout. A merchant reads
24
- * the word off the screen, types it, and is told no section matches.
25
- *
26
- * Resolved HERE, not in `matchesQuery`, because the label needs the `config`
27
- * (`categoryLabel`) and the matcher is given only a section — passing config
28
- * into the matcher would make every caller carry it.
29
- */
30
- catLabel: string;
31
- /**
32
- * Another word this section is known by, searched but never shown.
33
- *
34
- * ⚠️ THIS EXISTS FOR ONE NODE AND ONE REASON. `Flex` is offered here as
35
- * "Blank section" and is called "Box" everywhere it is nested — so a merchant
36
- * who met it in a Layers row, or in last week's handoff, types "box" and must
37
- * still find it. Without this they would find NOTHING: the card is pinned out
38
- * of its group, so a search that misses it misses it completely.
39
- */
40
- alias?: string;
41
- };
42
- /**
43
- * What the layer says of its sections for the palette: the word for a type at
44
- * a level, a group's short heading where it has one, and the blurbs. The
45
- * screen's `blockLook` is one (lib/screen-parts); so is the website's own
46
- * (lib/document/add-palette).
47
- */
48
- interface PaletteLook {
49
- /** What a node of `type` is called at a level, given the label the config
50
- * holds for it. */
51
- labelAtLevel: (type: string, level: "section" | "block", base: string) => string;
52
- /** A group's short heading, by its key, where the layer has one; undefined,
53
- * and the config's own title is the heading. */
54
- categoryLabel: (id: string) => string | undefined;
55
- /** The one-line blurb for a section, by type. */
56
- descriptions: Record<string, string>;
57
- }
58
- /**
59
- * Flatten `config.categories` into an ordered section list.
60
- *
61
- * Grouping and order ARE the category order in the config — which is the
62
- * catalog's order — so this adds no opinion of its own. A component listed in a
63
- * category but absent from `components` is skipped: a stale catalog row cannot
64
- * render and certainly cannot insert, so offering it would be a card that fails
65
- * on click.
66
- *
67
- * Child-only blocks (HeroSlide / CollectionCard / ProductRef) and the four
68
- * generic primitives (Heading / Text / ImageBlock / ButtonBlock) sit in NO
69
- * category on purpose, so they never appear here — they are added from their
70
- * parent's slot instead. See the note above `categories:` in lib/document/config.tsx.
71
- *
72
- * A category the config marks `visible: false` is NOT offered (0.105.0, seam
73
- * E9): it is a registry's way of keeping blocks it has out of the picker — the
74
- * campaign designer's Product parts, its retired blocks, its Sections — and a
75
- * palette that listed them would offer things that may not be put on a page.
76
- * The old library's own palette read the flag the same way. No website category carries
77
- * it, so the website's palette is the list it was.
78
- */
79
- declare function buildPaletteSections(config: Config, look: PaletteLook): PaletteSection[];
80
- /** A category's display label — the layer's short one where there is one, else the config's title. */
81
- declare function categoryLabel(config: Config, id: string, shortLabel: (id: string) => string | undefined): string;
82
- /**
83
- * Does a section match a search query?
84
- *
85
- * The query is matched against the NAME, any ALIAS, the blurb, the component
86
- * TYPE and the CATEGORY HEADING — the type because a merchant who knows the
87
- * section by the word they saw in a handoff should still find it, the alias
88
- * because one node is called something else everywhere it is nested (see
89
- * `PaletteSection.alias`), and the category because it is PRINTED IN THE NAV
90
- * BESIDE THE RESULTS: seven of thirteen headings used to match nothing at all
91
- * (see `PaletteSection.catLabel`). A word a merchant can read off this screen
92
- * must find what it is labelling.
93
- *
94
- * `q` is expected already lower-cased and trimmed; an empty query matches
95
- * everything.
96
- */
97
- declare function matchesQuery(s: PaletteSection, q: string): boolean;
98
- /** The pinned section, or `null` if the layer pins none or the config does not offer it. */
99
- declare function pinnedSection(sections: PaletteSection[], pinned: string | null): PaletteSection | null;
100
- /** Every OTHER section — what the grouped grid below the pinned card draws. */
101
- declare function paletteWithoutPinned(sections: PaletteSection[], pinned: string | null): PaletteSection[];
102
-
103
- export { type PaletteLook, type PaletteSection, buildPaletteSections, categoryLabel, matchesQuery, paletteWithoutPinned, pinnedSection };
9
+ import '../../../CanvasDragLayer-DXeQGrwJ.js';
10
+ import '../../../watch-Unf6SfUf.js';
11
+ import '../../../words-SD4neL0n.js';
12
+ import '../section-template-types.js';
13
+ import './content-tree.js';
14
+ import '../shared-section-types.js';
15
+ import './block-choice.js';
16
+ import '../../../types-SrGNzYeO.js';
17
+ import '../../../types-Cy7rdmXt.js';
18
+ import '../../../wordFit-7XpmhcaW.js';
19
+ import '../../../edit-lock/index.js';
20
+ import '../../../panelWidths-DgQXiPXU.js';
21
+ import '../../../copy-place-CQIemdtU.js';
22
+ import '../../../types-BbOBWXMP.js';
23
+ import '../../../style-clipboard/index.js';
24
+ import '../../../words-CnnHb9jo.js';
25
+ import '../../../types-CoUTWUwB.js';
26
+ import 'efficient-shell/ui';
27
+ import '../../../words-Cl9xMUYY.js';
28
+ import '../../../ScreenDocumentContext-DPW_6gOC.js';
29
+ import '../document-contract.js';
30
+ import '../document-switch.js';
31
+ import '../../../engine-CvXpFE86.js';
32
+ import '../admin-bridge.js';
33
+ import '../session.js';
34
+ import '../backend-error.js';
35
+ import '../host-chrome.js';
36
+ import '../links/link-filters.js';
37
+ import '../document-hooks.js';
38
+ import './add-target-types.js';
39
+ import './slot-section-spec.js';
@@ -1 +1 @@
1
- export{buildPaletteSections,categoryLabel,matchesQuery,paletteWithoutPinned,pinnedSection}from"../../../chunk-VKPOH6MK.js";
1
+ export{buildPaletteSections,categoryLabel,matchesQuery,paletteWithoutPinned,pinnedSection}from"../../../chunk-GDO4QJ4G.js";
@@ -1 +1 @@
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
+ export{gotoPreviewSlide,pinPreviewToBottom,pinPreviewToSection,previewFrame,scrollPreviewToSection,scrollPreviewToTop}from"../../../chunk-LUOY3A3Q.js";import"../../../chunk-AJ2SUSET.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-MGVI67QV.js";
@@ -1 +1 @@
1
- export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-OXZDSOZV.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-TGZCD6IP.js";import"../../../chunk-KXM6YRG2.js";
1
+ export{cloneNodeWithFreshIds,docToNode,nodeToDoc}from"../../../chunk-OXZDSOZV.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";
@@ -4,29 +4,28 @@ import { ScreenStyleDocument, ScreenNode, ScreenStylePastePlan, ScreenStyleClipb
4
4
  import { panelFieldsOf } from './panel-fields.js';
5
5
  import '../../../types-BbOBWXMP.js';
6
6
  import 'react';
7
+ import '../../../CanvasDragLayer-DXeQGrwJ.js';
8
+ import '../../../watch-Unf6SfUf.js';
9
+ import '../../../types-Dq180WRV.js';
10
+ import '../../../words-SD4neL0n.js';
11
+ import '../section-template-types.js';
12
+ import './content-tree.js';
13
+ import '../shared-section-types.js';
14
+ import './block-choice.js';
7
15
  import '../../../blocks/index.js';
8
16
  import '../../../types-BljCVdzR.js';
9
17
  import '../../../data/index.js';
10
- import '../../../types-Dq180WRV.js';
11
18
  import '../../../resolve-Bz4mszpL.js';
12
19
  import '../../../plan-D0DgSLnY.js';
13
- import '../../../watch-Unf6SfUf.js';
14
20
  import '../../../types-SrGNzYeO.js';
15
21
  import '../../../types-Cy7rdmXt.js';
16
22
  import '../../../wordFit-7XpmhcaW.js';
17
23
  import '../../../edit-lock/index.js';
18
24
  import '../../../panelWidths-DgQXiPXU.js';
19
- import '../../../CanvasDragLayer-NZpaX6aq.js';
20
- import '../../../session-EsjORLQ0.js';
21
- import '../../../words-SD4neL0n.js';
22
- import '../../../types-DBy3L69b.js';
25
+ import '../../../copy-place-CQIemdtU.js';
26
+ import '../../../types-CoUTWUwB.js';
23
27
  import 'efficient-shell/ui';
24
28
  import '../../../words-Cl9xMUYY.js';
25
- import '../../components/AddSidePanel.js';
26
- import '../section-template-types.js';
27
- import './content-tree.js';
28
- import '../shared-section-types.js';
29
- import './block-choice.js';
30
29
  import '../../../ScreenDocumentContext-DPW_6gOC.js';
31
30
  import '../document-contract.js';
32
31
  import '../document-switch.js';
@@ -1 +1 @@
1
- export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-DSKNJXB4.js";import"../../../chunk-5XL2RXFU.js";import"../../../chunk-2FYFAAAK.js";import"../../../chunk-22I55W37.js";import"../../../chunk-3QB2ZQXK.js";import"../../../chunk-IYHO4XQX.js";import"../../../chunk-V7U33NF2.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-BSPCSC45.js";
1
+ export{copyNodeStyle,nodeStyleRows,planNodePaste,shopFieldKind,siteStyleScope,styleClipboardOf}from"../../../chunk-H6BER2EU.js";import"../../../chunk-3QB2ZQXK.js";import"../../../chunk-5XL2RXFU.js";import"../../../chunk-OXOUGEAT.js";import"../../../chunk-22I55W37.js";import"../../../chunk-S6YOIRXQ.js";import"../../../chunk-CWELHADJ.js";import"../../../chunk-6WY6ZXJG.js";import"../../../chunk-ANPOR6EY.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";import"../../../chunk-BSPCSC45.js";
@@ -1 +1 @@
1
- export{useSectionOps}from"../../../chunk-OITNWE52.js";import"../../../chunk-QORC32JO.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-FJTCSQWK.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-H4Z2V56N.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-ZEH6QLBH.js";import"../../../chunk-AGWKB77Q.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-RPMSET77.js";import"../../../chunk-FM6JO4WF.js";import"../../../chunk-KFV7N2DJ.js";import"../../../chunk-HZSZT3BE.js";import"../../../chunk-KRL3IUV3.js";import"../../../chunk-Y2T3JX7K.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-CZAAGBVL.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-6NJHYXJM.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-YU3WHLGI.js";import"../../../chunk-LF3FUSCQ.js";import"../../../chunk-TGZCD6IP.js";import"../../../chunk-KXM6YRG2.js";
1
+ export{useSectionOps}from"../../../chunk-XLC7HWW3.js";import"../../../chunk-LUHGBFOD.js";import"../../../chunk-NCXYC7WI.js";import"../../../chunk-LX23TCTP.js";import"../../../chunk-TCAAOYQY.js";import"../../../chunk-BBD3FLU3.js";import"../../../chunk-JQQFB7EZ.js";import"../../../chunk-TBY3DFKS.js";import"../../../chunk-U3LTJSBU.js";import"../../../chunk-BPXEFVSQ.js";import"../../../chunk-YCSZAP7T.js";import"../../../chunk-ZEH6QLBH.js";import"../../../chunk-WHS6Y55E.js";import"../../../chunk-FM6JO4WF.js";import"../../../chunk-K56YDHYQ.js";import"../../../chunk-KFV7N2DJ.js";import"../../../chunk-K53PQAMP.js";import"../../../chunk-FIVU2COQ.js";import"../../../chunk-QTHQPJWA.js";import"../../../chunk-HZSZT3BE.js";import"../../../chunk-PMRN5Z3T.js";import"../../../chunk-Y2T3JX7K.js";import"../../../chunk-KFWNGPW3.js";import"../../../chunk-MIX7EGRG.js";import"../../../chunk-DX3VILZ3.js";import"../../../chunk-JACEEVVF.js";import"../../../chunk-MFIRYGHW.js";import"../../../chunk-3XECMGXX.js";import"../../../chunk-P2VEMZH5.js";import"../../../chunk-TOKMFZPB.js";import"../../../chunk-FR7EEKFF.js";import"../../../chunk-7UFKEX72.js";import"../../../chunk-EUFDQ4KL.js";import"../../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{resetForDocumentSwitch,saveStatusForNewDocument,saveStatusOf}from"../../chunk-HNKB2ZYR.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";
1
+ export{resetForDocumentSwitch,saveStatusForNewDocument,saveStatusOf}from"../../chunk-6ATIYLUL.js";import"../../chunk-YYD257TD.js";import"../../chunk-RE4LP46F.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{PAGE_CONFLICT_CODE,isExpiredSession,readEaselFailure}from"../../chunk-CLOS6SSX.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";
1
+ export{PAGE_CONFLICT_CODE,isExpiredSession,readEaselFailure}from"../../chunk-KO47WAWR.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-YYD257TD.js";import"../../chunk-RE4LP46F.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{routeSharedHostMessage}from"../../chunk-ISS72IKO.js";import"../../chunk-3FIS2FRS.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";
1
+ export{routeSharedHostMessage}from"../../chunk-QZJKWKGH.js";import"../../chunk-JIP5JNRB.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{editorRootFocus,isSaveShortcut,useEaselKeyTarget,useEaselSaveKey,useEaselUndoKeys}from"../../chunk-75C6WFNF.js";import"../../chunk-LX23TCTP.js";import"../../chunk-FJTCSQWK.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-AGWKB77Q.js";import"../../chunk-RPMSET77.js";import"../../chunk-HZSZT3BE.js";import"../../chunk-KRL3IUV3.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-YU3WHLGI.js";import"../../chunk-LF3FUSCQ.js";import"../../chunk-TGZCD6IP.js";import"../../chunk-KXM6YRG2.js";
1
+ export{editorRootFocus,isSaveShortcut,useEaselKeyTarget,useEaselSaveKey,useEaselUndoKeys}from"../../chunk-UCZQWQNS.js";import"../../chunk-LX23TCTP.js";import"../../chunk-BBD3FLU3.js";import"../../chunk-JQQFB7EZ.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-K53PQAMP.js";import"../../chunk-QTHQPJWA.js";import"../../chunk-HZSZT3BE.js";import"../../chunk-PMRN5Z3T.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-TOKMFZPB.js";import"../../chunk-FR7EEKFF.js";import"../../chunk-7UFKEX72.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{requestMediaPick,resolveMediaPick}from"../../chunk-3FIS2FRS.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";
1
+ export{requestMediaPick,resolveMediaPick}from"../../chunk-JIP5JNRB.js";import"../../chunk-NCXYC7WI.js";import"../../chunk-LX23TCTP.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";
@@ -1 +1 @@
1
- export{editLockOf,pageEditLock}from"../../chunk-GMCZXMOV.js";import"../../chunk-CLOS6SSX.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";
1
+ export{editLockOf,pageEditLock}from"../../chunk-GR3XRILS.js";import"../../chunk-KO47WAWR.js";import"../../chunk-KCOBHPN6.js";import"../../chunk-YYD257TD.js";import"../../chunk-RE4LP46F.js";import"../../chunk-EUFDQ4KL.js";import"../../chunk-KXM6YRG2.js";