efficient-easel 18.2.0 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +26 -1
  2. package/dist/{CanvasDragLayer-dZCPbQCP.d.ts → CanvasDragLayer-ARfaivCu.d.ts} +21 -3
  3. package/dist/{host-epHo7r8P.d.ts → ScreenDocumentContext-D55vIrG3.d.ts} +208 -208
  4. package/dist/autosave/index.d.ts +4 -4
  5. package/dist/{canvas-typing-BsNigaCa.d.ts → canvas-typing-Be4FO4q7.d.ts} +5 -5
  6. package/dist/chrome/chrome.css +2 -18
  7. package/dist/chrome/index.d.ts +5 -39
  8. package/dist/chrome/index.js +1 -1
  9. package/dist/{chunk-C2RHV42O.js → chunk-23DYNW6S.js} +1 -1
  10. package/dist/chunk-324PHMLC.js +8 -0
  11. package/dist/{chunk-HGV3FWOB.js → chunk-5DPIGWUL.js} +1 -1
  12. package/dist/{chunk-YLQYEDUQ.js → chunk-6DNDTEF6.js} +1 -1
  13. package/dist/chunk-AJSDWWJW.js +1 -0
  14. package/dist/chunk-C56MPJBH.js +1 -0
  15. package/dist/{chunk-N5AN2RF2.js → chunk-CM732ENS.js} +1 -1
  16. package/dist/{chunk-QEAUF632.js → chunk-CPFDJMFD.js} +12 -12
  17. package/dist/{chunk-S4AWJX4Q.js → chunk-EZG3TGQ7.js} +1 -1
  18. package/dist/chunk-EZKUTVQP.js +62 -0
  19. package/dist/{chunk-XHHVMAGM.js → chunk-FGYJ5DJY.js} +1 -1
  20. package/dist/chunk-J4MHNAED.js +5 -0
  21. package/dist/{chunk-VEZPDGDQ.js → chunk-JBOSEHIX.js} +1 -1
  22. package/dist/chunk-JC34NH4G.js +1 -0
  23. package/dist/chunk-KRL3IUV3.js +1 -0
  24. package/dist/chunk-LNHT2KPX.js +2 -0
  25. package/dist/{chunk-SNB4LQMK.js → chunk-LUBJKUVV.js} +1 -1
  26. package/dist/chunk-M62P4IQK.js +2 -0
  27. package/dist/chunk-MS2U6MV5.js +1 -0
  28. package/dist/{chunk-7TOQCTHV.js → chunk-PY7OOQEZ.js} +3 -3
  29. package/dist/{chunk-KG7RJWOK.js → chunk-RYNBSKE7.js} +1 -1
  30. package/dist/{chunk-XDZHKYQX.js → chunk-SINAM2IT.js} +1 -1
  31. package/dist/{chunk-DXROGLB5.js → chunk-SP3TRDKA.js} +1 -1
  32. package/dist/{chunk-X52NFKUS.js → chunk-T5WDR5IE.js} +1 -1
  33. package/dist/chunk-WMQKV3DK.js +7 -0
  34. package/dist/chunk-Z2V3TTAR.js +18 -0
  35. package/dist/chunk-ZG6PVMC3.js +19 -0
  36. package/dist/copy/index.d.ts +7 -7
  37. package/dist/copy/index.js +29 -29
  38. package/dist/drag/drag.css +23 -0
  39. package/dist/drag/index.d.ts +1 -1
  40. package/dist/drag/index.js +1 -1
  41. package/dist/easel/index.d.ts +2 -2
  42. package/dist/easel/index.js +1 -1
  43. package/dist/fields/fields.css +3 -3
  44. package/dist/fields/index.d.ts +1 -1
  45. package/dist/panel/index.d.ts +17 -84
  46. package/dist/panel/index.js +13 -19
  47. package/dist/panel/panel.css +41 -137
  48. package/dist/{panelWidths-D9hTLR25.d.ts → panelWidths-DgQXiPXU.d.ts} +34 -6
  49. package/dist/screen/components/AddBlockRow.js +1 -1
  50. package/dist/screen/components/AddSidePanel.js +1 -1
  51. package/dist/screen/components/MediaPopup.d.ts +21 -0
  52. package/dist/screen/components/MediaPopup.js +1 -0
  53. package/dist/screen/components/NodeContextMenu.d.ts +4 -4
  54. package/dist/screen/components/NodeContextMenu.js +1 -1
  55. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  56. package/dist/screen/components/SaveControls.d.ts +6 -6
  57. package/dist/screen/components/SaveControls.js +1 -1
  58. package/dist/screen/components/ScreenChrome.js +1 -1
  59. package/dist/screen/components/ScreenDocumentContext.d.ts +1 -1
  60. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  61. package/dist/screen/components/ScreenMount.d.ts +8 -8
  62. package/dist/screen/components/ScreenMount.js +1 -1
  63. package/dist/screen/components/ScreenStoreProvider.d.ts +7 -7
  64. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  65. package/dist/screen/components/SectionScreenShell.js +17 -16
  66. package/dist/screen/components/SidePanelHead.js +1 -1
  67. package/dist/screen/components/panel-widths.d.ts +7 -6
  68. package/dist/screen/components/panel-widths.js +1 -1
  69. package/dist/screen/components/usePartBridge.d.ts +7 -7
  70. package/dist/screen/components/usePartBridge.js +1 -1
  71. package/dist/screen/index.d.ts +5 -5
  72. package/dist/screen/index.js +1 -1
  73. package/dist/screen/lib/document-addressing.d.ts +1 -1
  74. package/dist/screen/lib/host-inbound.js +1 -1
  75. package/dist/screen/lib/host.d.ts +5 -5
  76. package/dist/screen/lib/key-scope.js +1 -1
  77. package/dist/screen/lib/media-panel.d.ts +74 -37
  78. package/dist/screen/lib/media-panel.js +1 -1
  79. package/dist/screen/lib/media-picker.d.ts +5 -5
  80. package/dist/screen/lib/media-picker.js +1 -1
  81. package/dist/screen/lib/puck/device-fields.js +1 -1
  82. package/dist/screen/lib/puck/style-clipboard.d.ts +7 -7
  83. package/dist/screen/lib/puck/style-clipboard.js +1 -1
  84. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  85. package/dist/screen/lib/save-status.d.ts +2 -2
  86. package/dist/screen/lib/screen-parts.d.ts +52 -11
  87. package/dist/screen/lib/screen-parts.js +1 -1
  88. package/dist/screen/screen.css +5 -4
  89. package/dist/screen/words.d.ts +3 -0
  90. package/dist/screen/words.js +1 -1
  91. package/dist/strings/index.d.ts +6 -6
  92. package/dist/strings/index.js +2 -2
  93. package/dist/{types-DT8ywrFQ.d.ts → types-B3iSHX-w.d.ts} +2 -22
  94. package/dist/{words-zH1H0WFw.d.ts → words-BeX5eGq7.d.ts} +2 -2
  95. package/dist/words-BpTjCfqO.d.ts +89 -0
  96. package/dist/{words-DkWcK1rh.d.ts → words-Cm8PMYn0.d.ts} +1 -1
  97. package/dist/{words-BpiVrsW5.d.ts → words-DYu4iBrR.d.ts} +1 -21
  98. package/package.json +8 -8
  99. package/dist/chunk-2ZWA6ARJ.js +0 -8
  100. package/dist/chunk-5EZ5Z3K7.js +0 -7
  101. package/dist/chunk-B4JN227A.js +0 -1
  102. package/dist/chunk-GWIVPLOX.js +0 -23
  103. package/dist/chunk-LIRNQXAY.js +0 -1
  104. package/dist/chunk-LLDHIBYG.js +0 -18
  105. package/dist/chunk-OBIL7BZO.js +0 -4
  106. package/dist/chunk-R6WTQWAC.js +0 -2
  107. package/dist/chunk-SEVGZP36.js +0 -62
  108. package/dist/chunk-STWSCR25.js +0 -2
  109. package/dist/chunk-U277UX5I.js +0 -1
  110. package/dist/chunk-W6SDWCOL.js +0 -5
  111. package/dist/chunk-Z6PVRXVY.js +0 -1
  112. package/dist/screen/components/MediaSidePanel.d.ts +0 -49
  113. package/dist/screen/components/MediaSidePanel.js +0 -1
  114. package/dist/words-D-yhjdOg.d.ts +0 -183
@@ -1,49 +0,0 @@
1
- import * as react from 'react';
2
- import { MediaPanelComponent, MediaPickRequest } from '../lib/media-panel.js';
3
- import '../../host-epHo7r8P.js';
4
- import '../../blocks/index.js';
5
- import '../../types-Cq53lL8d.js';
6
- import '../../data/index.js';
7
- import '../../types-41704JE4.js';
8
- import '../../resolve-D68pb3Bx.js';
9
- import '../../plan-CZS902DV.js';
10
- import '../lib/document-contract.js';
11
- import '../lib/session.js';
12
- import '../lib/backend-error.js';
13
- import '../../edit-lock/index.js';
14
- import '../lib/host-chrome.js';
15
- import '../lib/links/link-filters.js';
16
- import 'efficient-shell/ui';
17
- import '../lib/document-hooks.js';
18
- import '../lib/section-template-types.js';
19
- import '../lib/puck/content-tree.js';
20
- import '../lib/shared-section-types.js';
21
- import '../lib/document-switch.js';
22
- import '../../engine-CvXpFE86.js';
23
- import '../lib/admin-bridge.js';
24
-
25
- /**
26
- * The left panel's MEDIA view: efficient-easel's `MediaPanelHead` over the
27
- * HOST's media library (lib/media-panel), the host's one Media Library
28
- * drawn narrow.
29
- *
30
- * The head is the engine's, the same one the campaign designer draws over the
31
- * same library (card [MERGE] One Media Panel Head For Both Editors, owner
32
- * ruling 2026-10-06: a part exists once, in efficient-easel). Its words, its
33
- * two states and its Cancel are all there; this file only maps the request:
34
- *
35
- * • Browsing (`pick` null): "Media library", the website under it, and the
36
- * hide button every panel ends with.
37
- * • Choosing for a field: "Choose image / For Background image", and
38
- * "Cancel" (the field gets nothing and the panel goes back to what it
39
- * showed before). Hiding the panel cancels too.
40
- */
41
- declare function MediaSidePanel({ panel: Panel, pick, onHide, }: {
42
- panel: MediaPanelComponent;
43
- pick: MediaPickRequest | null;
44
- /** Hide the panel. Omitted where it cannot be hidden (the standalone section
45
- * editor), and then the head draws no hide button. */
46
- onHide?: () => void;
47
- }): react.JSX.Element;
48
-
49
- export { MediaSidePanel as default };
@@ -1 +0,0 @@
1
- export{MediaSidePanel as default}from"../../chunk-OBIL7BZO.js";import"../../chunk-W6SDWCOL.js";import"../../chunk-R6WTQWAC.js";import"../../chunk-U3JP4VGF.js";import"../../chunk-PLVEGYK6.js";import"../../chunk-QEAUF632.js";import"../../chunk-TBY3DFKS.js";import"../../chunk-5ZBV5RA6.js";import"../../chunk-BPXEFVSQ.js";import"../../chunk-A6Z4SD3I.js";import"../../chunk-K56YDHYQ.js";import"../../chunk-XWFH2NHZ.js";import"../../chunk-YRLPFZW3.js";import"../../chunk-X3TYRF5V.js";import"../../chunk-BALFHI3G.js";import"../../chunk-RC25EGHD.js";import"../../chunk-KFV7N2DJ.js";import"../../chunk-GWIVPLOX.js";import"../../chunk-MJM6SFD3.js";import"../../chunk-Z6PVRXVY.js";import"../../chunk-2OAZYSWJ.js";import"../../chunk-THWO5YVZ.js";import"../../chunk-RE4LP46F.js";import"../../chunk-23VM4PMV.js";import"../../chunk-B4JN227A.js";import"../../chunk-2XMHLXMA.js";import"../../chunk-G3GWAP5R.js";import"../../chunk-WRFD4EXD.js";import"../../chunk-36LVP5WD.js";import"../../chunk-MFIRYGHW.js";import"../../chunk-67GNT6PF.js";import"../../chunk-P2VEMZH5.js";import"../../chunk-X4T6JT3M.js";import"../../chunk-KRXQM65X.js";import"../../chunk-NKB3KVAB.js";
@@ -1,183 +0,0 @@
1
- import { MarkStyle, MarkPlaceholders } from 'efficient-shell/markup';
2
- import { ReactNode } from 'react';
3
-
4
- /**
5
- * WHICH WAY the text is pointed — the closed vocabulary, in the shell, once.
6
- *
7
- * The owner's words on 2026-09-26, and they are the specification rather than
8
- * the motivation: "I am really fed up that these features are scattered with no
9
- * fixed format."
10
- *
11
- * ── What was measured before this existed ────────────────────────────────────
12
- * The campaign designer had ONE builder (`alignmentField`) and FIVE option
13
- * tables behind it. The storefront had SIXTEEN alignment rows written THREE
14
- * ways: a house `alignField()` (5 rows), four hand-written `segmented(
15
- * "Alignment", …)` that bypassed it, and one `select`. They did not agree on the
16
- * words — Left / Center / Right in fourteen rows, Start / Center / End in two —
17
- * and they did not agree on the STORED value either: one row stores
18
- * `start` / `center` / `end` where every other stores `left` / `center` /
19
- * `right`.
20
- *
21
- * Two vocabularies on screen and two in storage, for one question.
22
- *
23
- * ── The two rules ────────────────────────────────────────────────────────────
24
- * 1. ONE WORD SET: Left / Center / Right, plus Justify where a host can honour
25
- * it. Not Start/End. It is what fourteen of the sixteen rows already show and
26
- * what the campaign already uses.
27
- * 2. ONE STORED VOCABULARY: `left` / `center` / `right` / `justify`. A host with
28
- * a different stored spelling migrates to this one; it does not teach this
29
- * module a second name for the same direction.
30
- *
31
- * ── Why the host still picks a SUBSET ────────────────────────────────────────
32
- * A closed vocabulary is not the same as a fixed strip. `justify` reads as
33
- * ragged, word-gapped nonsense in a ~320px email column, and a block whose
34
- * renderer cannot honour a direction must not offer it. So the host names which
35
- * of these four apply — and cannot name a fifth, which is the part that was
36
- * missing.
37
- *
38
- * Deliberately NOT here: `inherit`. It is not a direction, it is the absence of
39
- * an answer, and it is a property of the row a host draws (an empty value
40
- * presses nothing — see `SettingsSegmented`'s `value`) rather than a segment
41
- * with a glyph. A strip that drew it would be offering "no answer" as an answer.
42
- */
43
-
44
- /** Every direction this package knows, in reading order. */
45
- declare const COPY_ALIGNS: readonly ["left", "center", "right", "justify"];
46
- type CopyAlign = (typeof COPY_ALIGNS)[number];
47
- /** The word each direction is called. American spelling, per the product's own
48
- * rule (British is for client-facing design work, not the product). The words
49
- * themselves are ./words' (`EaselStrings.copy.align`); this is their English. */
50
- declare const COPY_ALIGN_LABELS: Record<CopyAlign, string>;
51
- /** The mark each direction draws. `justify` is `align-justify` (E5b, design
52
- * final 2026-10-06): rows run edge to edge. Until then it borrowed
53
- * `align-separate`, whose own entry says it is NOT justify. */
54
- declare const COPY_ALIGN_GLYPHS: Record<CopyAlign, ReactNode>;
55
- /**
56
- * How wide this strip's WORDS are, for the drop-to-glyphs threshold.
57
- *
58
- * The number is the measurement `SettingsSegmented` asks for and nothing else:
59
- * the chip's padding, glyph and gaps are the shell's, and `panel.css` adds them.
60
- * An over-estimate is safe (the words drop a little early); an under-estimate
61
- * draws a button past the strip's edge.
62
- *
63
- * THREE is measured, not guessed — `efficient-storefront/components/PartSettingsPanel`
64
- * had this exact pair as its own `ALIGN_FIT`, produced by
65
- * `tests/fixtures/segmented-fit.html`. It moves here so the one alignment strip
66
- * carries its own measurement, and that constant is deleted when the panel
67
- * adopts this control.
68
- *
69
- * FOUR is an over-estimate, deliberately: "Justify" has never been drawn in a
70
- * strip on this desk, so there is no measurement to move. Re-run the fixture and
71
- * replace this pair with the real numbers the first time a host offers it.
72
- */
73
- declare const COPY_ALIGN_FIT: {
74
- readonly three: {
75
- readonly labelsPx: 94.5;
76
- readonly widestLabelPx: 39.94;
77
- };
78
- readonly four: {
79
- readonly labelsPx: 140;
80
- readonly widestLabelPx: 44;
81
- };
82
- };
83
- /** The strip's options, for the subset a host can honour. Order is always this
84
- * module's, never the caller's array order — so two hosts offering the same
85
- * three directions cannot draw them in two orders. `labels` is the words in
86
- * the host's language (`useEaselStrings().copy.align`, 0.95.0); left out,
87
- * English. */
88
- declare function copyAlignOptions(allow: readonly CopyAlign[], labels?: Record<CopyAlign, string>): {
89
- id: "left" | "right" | "center" | "justify";
90
- label: string;
91
- icon: ReactNode;
92
- title: string;
93
- }[];
94
-
95
- /**
96
- * The copy box's own words (`efficient-easel/strings`, 0.95.0): the bar's and
97
- * the alignment strip's names, the four directions, each mark button's name
98
- * and tooltip, and the words a mark writes when nothing is selected. The link
99
- * window is efficient-shell's `LinkPicker`: its words are the shell
100
- * catalogue's (`ShellStringsProvider`, `link`).
101
- *
102
- * NO REACT here, and no import but the grammar: the marks' names, tooltips and
103
- * placeholders are READ from `efficient-shell/markup` (`MARKUP_TOOLS`,
104
- * `MARK_PLACEHOLDERS`) rather than typed a second time, so the English lives
105
- * once, in the grammar, where the campaign designer's own toolbar reads it too.
106
- */
107
-
108
- type CopyWords = {
109
- /** The formatting bar's accessible name. */
110
- formatting: string;
111
- /** The alignment strip's accessible name. */
112
- alignment: string;
113
- /** The word each direction is called. */
114
- align: Record<CopyAlign, string>;
115
- /**
116
- * Each mark button, for a bar handed STYLES (`tools={['bold', 'link']}`).
117
- * `name` is what the button is called; `title` its tooltip, which also says
118
- * what the mark writes and its shortcut. A host's own descriptors
119
- * (`MarkupTool[]`) are used as given and never read these.
120
- *
121
- * @deprecated Read by nothing since the copy box's one bar became the shell's
122
- * `TextToolbar`, which names its buttons in the shell catalogue
123
- * (`ShellStringsProvider`, `textToolbar`). Removed in 12.0.0.
124
- */
125
- marks: Record<MarkStyle, {
126
- name: string;
127
- title: string;
128
- }>;
129
- /** What a mark writes when nothing is selected — typed over at once. */
130
- placeholders: MarkPlaceholders;
131
- /** The switch under a many-line box that shows the raw text with its marks
132
- * (E5a). Optional, so a host's words from before still type; English when
133
- * left out. */
134
- showMarks?: string;
135
- /** The colour window: its name, the theme row's label, and Remove. */
136
- colors?: {
137
- title: string;
138
- theme: string;
139
- remove: string;
140
- /** "Any color": the square, the hue bar and the hex box under the theme. */
141
- any: string;
142
- square: string;
143
- hue: string;
144
- hex: string;
145
- };
146
- /** The one text panel's rows (`TextPartPanel`, text panel v3) and their
147
- * answers. Optional, so a host's words from before still type; English when left
148
- * out. */
149
- panel?: {
150
- style: string;
151
- editStyles: string;
152
- updateStyle: string;
153
- font: string;
154
- italic: string;
155
- list: string;
156
- lists: {
157
- none: string;
158
- bullet: string;
159
- number: string;
160
- };
161
- capitalization: string;
162
- cases: {
163
- none: string;
164
- upper: string;
165
- capitalize: string;
166
- lower: string;
167
- };
168
- };
169
- /** The number cells' names, and the tooltip each one carries. */
170
- cells?: {
171
- fontSize: string;
172
- lineHeight: string;
173
- letterSpacing: string;
174
- paragraphSpacing: string;
175
- tip: (v: {
176
- name: string;
177
- step: number;
178
- unit: string;
179
- }) => string;
180
- };
181
- };
182
-
183
- export { type CopyWords as C, type CopyAlign as a, COPY_ALIGNS as b, COPY_ALIGN_FIT as c, COPY_ALIGN_GLYPHS as d, COPY_ALIGN_LABELS as e, copyAlignOptions as f };