efficient-easel 0.99.2 → 0.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -17
- package/dist/autosave/index.d.ts +11 -5
- package/dist/blocks/index.d.ts +1 -1
- package/dist/canvas/index.d.ts +2 -2
- package/dist/canvas/index.js +1 -1
- package/dist/chrome/chrome.css +96 -29
- package/dist/chrome/index.d.ts +67 -18
- package/dist/chrome/index.js +25 -21
- package/dist/{chunk-JYPOOHII.js → chunk-2FZJWH24.js} +3 -3
- package/dist/chunk-3EDSDPIP.js +1 -0
- package/dist/chunk-546BBOPE.js +1 -0
- package/dist/chunk-67GNT6PF.js +1 -0
- package/dist/chunk-EOJNJCMJ.js +16 -0
- package/dist/chunk-EWVJSRRY.js +6 -0
- package/dist/chunk-FPOKPNO4.js +1 -0
- package/dist/chunk-H24N5TMZ.js +11 -0
- package/dist/chunk-IG3U5NWJ.js +1 -0
- package/dist/chunk-JUQ6YJCG.js +1 -0
- package/dist/chunk-KTVH2ZRL.js +15 -0
- package/dist/{chunk-PI26YXYD.js → chunk-L5KW4HG5.js} +16 -8
- package/dist/chunk-M6F6LS3H.js +1 -0
- package/dist/chunk-P6O363EE.js +6 -0
- package/dist/chunk-PAELDYYS.js +1 -0
- package/dist/chunk-QTLAVDJE.js +1 -0
- package/dist/chunk-UH7IGZKF.js +1 -0
- package/dist/chunk-WZ7TGAAT.js +3 -0
- package/dist/chunk-ZFDCDJNZ.js +16 -0
- package/dist/chunk-ZJEBF4NB.js +1 -0
- package/dist/chunk-ZNS7727Y.js +12 -0
- package/dist/copy/copy.css +442 -5
- package/dist/copy/index.d.ts +302 -5
- package/dist/copy/index.js +32 -10
- package/dist/drag/drag.css +10 -1
- package/dist/drag/index.d.ts +99 -8
- package/dist/drag/index.js +18 -17
- package/dist/easel/easel.css +15 -0
- package/dist/easel/index.d.ts +104 -33
- package/dist/easel/index.js +9 -1
- package/dist/edit-lock/index.d.ts +1 -3
- package/dist/edit-lock/index.js +1 -1
- package/dist/fields/fields.css +270 -38
- package/dist/fields/index.d.ts +209 -26
- package/dist/fields/index.js +22 -53
- package/dist/gold/index.js +1 -1
- package/dist/icons/index.d.ts +13 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/markup/index.d.ts +111 -10
- package/dist/markup/index.js +1 -1
- package/dist/menu/index.d.ts +58 -5
- package/dist/menu/index.js +1 -15
- package/dist/menu/menu.css +17 -6
- package/dist/node-ops/index.d.ts +1 -1
- package/dist/node-ops/index.js +1 -1
- package/dist/panel/index.d.ts +83 -4
- package/dist/panel/index.js +18 -16
- package/dist/panel/panel.css +135 -62
- package/dist/pick/index.d.ts +78 -2
- package/dist/pick/index.js +7 -14
- package/dist/pick/pick.css +197 -10
- package/dist/rail/index.d.ts +3 -7
- package/dist/rail/index.js +1 -1
- package/dist/strings/catalogue.d.ts +13 -35
- package/dist/strings/catalogue.js +1 -1
- package/dist/strings/index.d.ts +12 -18
- package/dist/strings/index.js +2 -2
- package/dist/style-clipboard/index.d.ts +1 -1
- package/dist/style-clipboard/index.js +1 -1
- package/dist/text-styles/index.d.ts +328 -0
- package/dist/text-styles/index.js +38 -0
- package/dist/text-styles/text-styles.css +309 -0
- package/dist/tree/index.d.ts +43 -2
- package/dist/tree/index.js +1 -1
- package/dist/tree/tree.css +71 -0
- package/dist/{types-p9j2Fac7.d.ts → types-DGcCsxs8.d.ts} +72 -7
- package/dist/{types-Bs_gVkVI.d.ts → types-DWS-s9z-.d.ts} +1 -9
- package/dist/{types-DO-b0LNj.d.ts → types-Djdq6Xkd.d.ts} +9 -8
- package/dist/{types-BOSGNvil.d.ts → types-E3HrTPg2.d.ts} +7 -13
- package/dist/{types-C7HFvdtk.d.ts → types-VqL6t5HH.d.ts} +82 -5
- package/dist/{watch-B5RTR-WX.d.ts → watch-BTYOJpQU.d.ts} +18 -1
- package/dist/{words-DagJdwIA.d.ts → words-AHHfiaRY.d.ts} +31 -2
- package/dist/words-BGrHZAJJ.d.ts +46 -0
- package/dist/{words-c-3h9xQQ.d.ts → words-BMzV04b1.d.ts} +1 -1
- package/dist/words-CRYvAiHX.d.ts +105 -0
- package/dist/words-D8kf071T.d.ts +93 -0
- package/dist/{words-N4ebT88_.d.ts → words-DgHcY5qB.d.ts} +9 -3
- package/dist/{words-C74EUpFr.d.ts → words-XH0TvZPg.d.ts} +60 -4
- package/package.json +8 -8
- package/dist/chunk-66CKSTXP.js +0 -14
- package/dist/chunk-672FAEKU.js +0 -1
- package/dist/chunk-67VZRQLG.js +0 -13
- package/dist/chunk-6PS6STGA.js +0 -1
- package/dist/chunk-7A7O2JWQ.js +0 -1
- package/dist/chunk-7JTL3P6P.js +0 -1
- package/dist/chunk-F2PIG3AA.js +0 -10
- package/dist/chunk-H4B72XCJ.js +0 -1
- package/dist/chunk-KDIVA6WD.js +0 -1
- package/dist/chunk-MCLBHENY.js +0 -1
- package/dist/chunk-QB3BZIRA.js +0 -5
- package/dist/chunk-SJQG5ENJ.js +0 -1
- package/dist/chunk-SUO5627P.js +0 -1
- package/dist/chunk-XUE5O62R.js +0 -3
- package/dist/chunk-ZT7M24XD.js +0 -1
- package/dist/editor/index.d.ts +0 -10
- package/dist/editor/index.js +0 -1
- package/dist/words-CD3WADyb.d.ts +0 -51
- /package/dist/{chunk-2PHD4L6A.js → chunk-OWBO4WKA.js} +0 -0
package/dist/pick/pick.css
CHANGED
|
@@ -7,12 +7,14 @@
|
|
|
7
7
|
/* The hex box and the word that stands in for it ("Auto", "Not set") are
|
|
8
8
|
ONE width. A row is right-aligned as a unit, so a word narrower than a hex
|
|
9
9
|
pushes its swatch out of line down a column of colour rows. */
|
|
10
|
-
--es-pick-readout-w:
|
|
10
|
+
--es-pick-readout-w: 68px;
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: column;
|
|
13
13
|
gap: 12px;
|
|
14
14
|
}
|
|
15
15
|
.es-pick-colour-row {
|
|
16
|
+
/* The tag is placed against the row. */
|
|
17
|
+
position: relative;
|
|
16
18
|
display: flex;
|
|
17
19
|
align-items: center;
|
|
18
20
|
gap: 8px;
|
|
@@ -46,16 +48,27 @@
|
|
|
46
48
|
.es-pick-swatch:disabled {
|
|
47
49
|
cursor: default;
|
|
48
50
|
}
|
|
51
|
+
/* THE HEX'S SLOT (Lewis 2026-10-07, option E): 68px, and down to 36px when
|
|
52
|
+
the line is short of room — after the label has given way to its 56px. The
|
|
53
|
+
hex or the word that stands in for it fills it. */
|
|
54
|
+
.es-pick-hexwrap {
|
|
55
|
+
position: relative;
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
flex: 0 1 var(--es-pick-readout-w);
|
|
59
|
+
max-width: var(--es-pick-readout-w);
|
|
60
|
+
min-width: 36px;
|
|
61
|
+
}
|
|
49
62
|
.es-pick-hex {
|
|
50
63
|
box-sizing: border-box;
|
|
51
|
-
width:
|
|
64
|
+
width: 100%;
|
|
52
65
|
min-width: 0;
|
|
53
66
|
padding: 4px 8px;
|
|
54
67
|
border: 1px solid transparent;
|
|
55
68
|
border-radius: 6px;
|
|
56
69
|
background: transparent;
|
|
57
70
|
color: var(--es-text);
|
|
58
|
-
font: 500
|
|
71
|
+
font: 500 11px/1.3 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
59
72
|
letter-spacing: 0.02em;
|
|
60
73
|
}
|
|
61
74
|
.es-pick-hex:hover {
|
|
@@ -66,13 +79,171 @@
|
|
|
66
79
|
border-color: var(--es-accent);
|
|
67
80
|
background: var(--es-panel);
|
|
68
81
|
}
|
|
82
|
+
/* The hex a row FOLLOWS, in the row's box: grey at rest, so it does not read
|
|
83
|
+
as a value of its own; normal ink while it is edited (GG for Lewis,
|
|
84
|
+
2026-10-07: pressed to copy it, or to paste over it). */
|
|
85
|
+
.es-pick-hex.is-inherited {
|
|
86
|
+
color: var(--es-muted);
|
|
87
|
+
}
|
|
88
|
+
.es-pick-hex.is-inherited:focus {
|
|
89
|
+
color: var(--es-text);
|
|
90
|
+
}
|
|
91
|
+
/* The inherited hex, while nothing is stored: grey, so it does not read as a
|
|
92
|
+
value. */
|
|
93
|
+
.es-pick-hex::placeholder {
|
|
94
|
+
color: var(--es-muted);
|
|
95
|
+
opacity: 1;
|
|
96
|
+
}
|
|
69
97
|
.es-pick-caption {
|
|
70
98
|
box-sizing: border-box;
|
|
71
|
-
width:
|
|
99
|
+
width: 100%;
|
|
100
|
+
min-width: 0;
|
|
101
|
+
overflow: hidden;
|
|
72
102
|
padding: 0 8px;
|
|
103
|
+
white-space: nowrap;
|
|
73
104
|
font-size: 12px;
|
|
74
105
|
color: var(--es-muted);
|
|
75
106
|
}
|
|
107
|
+
/* Cut text fades at its end, never cut hard. `data-clipped` is MEASURED
|
|
108
|
+
(ColourPicker): text that fits is never faded. */
|
|
109
|
+
.es-pick-hex[data-clipped],
|
|
110
|
+
.es-pick-caption[data-clipped] {
|
|
111
|
+
-webkit-mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent);
|
|
112
|
+
mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent);
|
|
113
|
+
}
|
|
114
|
+
/* EDITED IN PLACE: a press widens the hex to seven characters (`#RRGGBB`
|
|
115
|
+
with its letter-spacing, the 8px insets and the 1px border), from its own
|
|
116
|
+
left edge, so the text does not jump and the swatch and the label do not
|
|
117
|
+
move; never past the row's end (`--es-pick-edit-room`, measured). */
|
|
118
|
+
.es-pick-colour-row .es-pick-hex:focus {
|
|
119
|
+
position: absolute;
|
|
120
|
+
z-index: 2;
|
|
121
|
+
left: 0;
|
|
122
|
+
top: 50%;
|
|
123
|
+
transform: translateY(-50%);
|
|
124
|
+
width: calc(7ch + 0.14em + 18px);
|
|
125
|
+
max-width: var(--es-pick-edit-room, none);
|
|
126
|
+
-webkit-mask-image: none;
|
|
127
|
+
mask-image: none;
|
|
128
|
+
box-shadow: 0 0 0 2px var(--es-accent-tint);
|
|
129
|
+
}
|
|
130
|
+
/* 4px from the hex to the part after it (the reset): the row's 8px, less 4. */
|
|
131
|
+
.es-pick-colour-row > .es-pick-hexwrap + * {
|
|
132
|
+
margin-left: -4px;
|
|
133
|
+
}
|
|
134
|
+
/* The part after the hex steps aside ONLY when the edit box reaches it. */
|
|
135
|
+
.es-pick-colour-row[data-editing='over'] > .es-pick-hexwrap ~ * {
|
|
136
|
+
visibility: hidden;
|
|
137
|
+
}
|
|
138
|
+
/* The tag over a cut label or hex: the whole text, small and dark, above it. */
|
|
139
|
+
.es-pick-tag {
|
|
140
|
+
position: absolute;
|
|
141
|
+
z-index: 3;
|
|
142
|
+
transform: translateY(calc(-100% - 6px));
|
|
143
|
+
padding: 4px 8px;
|
|
144
|
+
border-radius: 6px;
|
|
145
|
+
background: #111827;
|
|
146
|
+
color: #fff;
|
|
147
|
+
font-size: 12px;
|
|
148
|
+
font-weight: 500;
|
|
149
|
+
line-height: 1.3;
|
|
150
|
+
white-space: nowrap;
|
|
151
|
+
pointer-events: none;
|
|
152
|
+
box-shadow: 0 4px 12px rgb(0 0 0 / 0.2);
|
|
153
|
+
}
|
|
154
|
+
/* `.es-pick-swatch.is-inherited` (no rule of its own): the swatch is painted
|
|
155
|
+
with the colour the setting follows, like any colour. The class is there
|
|
156
|
+
for a host that wants to mark it. */
|
|
157
|
+
|
|
158
|
+
/* ── A line that holds the picker ───────────────────────────────────────── */
|
|
159
|
+
/* BOTH EDITORS HOLD THE PICKER IN A LINE: `SettingsField`'s `action` slot
|
|
160
|
+
(`.es-field-head`, this package's own class), or a colour SUB-row inside one
|
|
161
|
+
setting (the email's Logo "Color 1" / "Color 2", a button's Fill / Border /
|
|
162
|
+
Text), which is not a SettingsField and takes `.es-pick-line`: the host's
|
|
163
|
+
label first, then the picker.
|
|
164
|
+
|
|
165
|
+
The picker's own box steps aside (`display: contents`), so its two halves
|
|
166
|
+
become items of that line: the swatch and hex at the line's end
|
|
167
|
+
(`margin-left: auto`), and the window wrapping onto a line of its own at the
|
|
168
|
+
FULL width. Left in the picker's box, the window opens in the few pixels the
|
|
169
|
+
action slot has.
|
|
170
|
+
|
|
171
|
+
Moved here from the storefront's stylesheet (2026-10-06), so the email does
|
|
172
|
+
not copy it: one rule for both editors. The shop's `.sf-field--row` can move
|
|
173
|
+
onto `.es-pick-line` later. */
|
|
174
|
+
.es-pick-line {
|
|
175
|
+
display: flex;
|
|
176
|
+
flex-wrap: wrap;
|
|
177
|
+
align-items: center;
|
|
178
|
+
gap: 8px;
|
|
179
|
+
}
|
|
180
|
+
/* The sub-row's label. A host may use its own instead. */
|
|
181
|
+
.es-pick-line-label {
|
|
182
|
+
min-width: 0;
|
|
183
|
+
font-size: 12px;
|
|
184
|
+
color: var(--es-text-secondary);
|
|
185
|
+
}
|
|
186
|
+
.es-field-head:has(> .es-pick-colour),
|
|
187
|
+
.es-pick-line:has(> .es-pick-colour) {
|
|
188
|
+
flex-wrap: wrap;
|
|
189
|
+
}
|
|
190
|
+
.es-field-head > .es-pick-colour,
|
|
191
|
+
.es-pick-line > .es-pick-colour {
|
|
192
|
+
display: contents;
|
|
193
|
+
}
|
|
194
|
+
/* ONE LINE (Lewis 2026-10-07, option E). The row steps aside too, so the
|
|
195
|
+
label, the swatch, the hex's slot and the part after it are items of ONE
|
|
196
|
+
line, sized by rule and never by how wide their text is:
|
|
197
|
+
- the hex's slot is laid out at its 36px (so the line never wraps) and
|
|
198
|
+
grows FIRST, to its 68px;
|
|
199
|
+
- the label takes what is left, never under 56px, so it gives way first;
|
|
200
|
+
- the swatch is pushed to the end with what follows it, so a column of
|
|
201
|
+
rows lines up. The tag is placed against the line. */
|
|
202
|
+
.es-field-head:has(> .es-pick-colour),
|
|
203
|
+
.es-pick-line:has(> .es-pick-colour) {
|
|
204
|
+
position: relative;
|
|
205
|
+
}
|
|
206
|
+
.es-field-head > .es-pick-colour > .es-pick-colour-row,
|
|
207
|
+
.es-pick-line > .es-pick-colour > .es-pick-colour-row {
|
|
208
|
+
display: contents;
|
|
209
|
+
}
|
|
210
|
+
.es-field-head > .es-pick-colour > .es-pick-colour-row > .es-pick-swatch,
|
|
211
|
+
.es-pick-line > .es-pick-colour > .es-pick-colour-row > .es-pick-swatch {
|
|
212
|
+
margin-left: auto;
|
|
213
|
+
}
|
|
214
|
+
.es-field-head > .es-pick-colour > .es-pick-colour-row > .es-pick-hexwrap,
|
|
215
|
+
.es-pick-line > .es-pick-colour > .es-pick-colour-row > .es-pick-hexwrap {
|
|
216
|
+
flex: 1000 1 0;
|
|
217
|
+
}
|
|
218
|
+
/* The label: whatever is left, never under 56px, fading at its end when cut. */
|
|
219
|
+
.es-field-head:has(> .es-pick-colour) > .es-field-name,
|
|
220
|
+
.es-pick-line:has(> .es-pick-colour) > .es-pick-line-label {
|
|
221
|
+
flex: 1 1 0;
|
|
222
|
+
min-width: 56px;
|
|
223
|
+
overflow: hidden;
|
|
224
|
+
white-space: nowrap;
|
|
225
|
+
}
|
|
226
|
+
.es-field-head:has(> .es-pick-colour) .es-field-label {
|
|
227
|
+
min-width: 0;
|
|
228
|
+
overflow: hidden;
|
|
229
|
+
white-space: nowrap;
|
|
230
|
+
}
|
|
231
|
+
.es-field-head:has(> .es-pick-colour) .es-field-label[data-clipped],
|
|
232
|
+
.es-pick-line > .es-pick-line-label[data-clipped] {
|
|
233
|
+
-webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
|
|
234
|
+
mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
|
|
235
|
+
}
|
|
236
|
+
.es-field-head > .es-pick-colour > .es-pick-window,
|
|
237
|
+
.es-pick-line > .es-pick-colour > .es-pick-window {
|
|
238
|
+
flex: 1 0 100%;
|
|
239
|
+
min-width: 0;
|
|
240
|
+
/* ⚠️ What a host puts AFTER the picker on the same line (the panel's
|
|
241
|
+
Default / Reset part, `SettingsDefaultReset`) comes after the window in
|
|
242
|
+
DOM order once the picker's box is `contents`, and the window's 100%
|
|
243
|
+
basis would push it onto a line of its own UNDER the open window. Ordered
|
|
244
|
+
last, the window keeps that control beside the swatch. */
|
|
245
|
+
order: 1;
|
|
246
|
+
}
|
|
76
247
|
|
|
77
248
|
/* ── The window under the row ───────────────────────────────────────────── */
|
|
78
249
|
.es-pick-window {
|
|
@@ -84,10 +255,13 @@
|
|
|
84
255
|
border-radius: 10px;
|
|
85
256
|
background: var(--es-panel);
|
|
86
257
|
}
|
|
258
|
+
/* ONE theme row, for the colour picker and the text box's colour window
|
|
259
|
+
(Lewis 2026-10-07). The swatches are one group: the scale's step for the
|
|
260
|
+
cells of one group. */
|
|
87
261
|
.es-pick-theme {
|
|
88
262
|
display: flex;
|
|
89
263
|
flex-wrap: wrap;
|
|
90
|
-
gap:
|
|
264
|
+
gap: 4px;
|
|
91
265
|
}
|
|
92
266
|
.es-pick-theme-swatch {
|
|
93
267
|
width: 22px;
|
|
@@ -98,11 +272,11 @@
|
|
|
98
272
|
box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);
|
|
99
273
|
cursor: pointer;
|
|
100
274
|
}
|
|
275
|
+
/* The chosen one: the ring INSIDE the swatch (Lewis 2026-10-07, option A) —
|
|
276
|
+
2px of accent, then 2px of panel before the colour. Outside, it touched the
|
|
277
|
+
next swatch. Focus is the outline, outside it, so both show at once. */
|
|
101
278
|
.es-pick-theme-swatch[aria-pressed='true'] {
|
|
102
|
-
box-shadow:
|
|
103
|
-
inset 0 0 0 1px rgb(0 0 0 / 0.1),
|
|
104
|
-
0 0 0 2px var(--es-panel),
|
|
105
|
-
0 0 0 4px var(--es-accent);
|
|
279
|
+
box-shadow: inset 0 0 0 2px var(--es-accent), inset 0 0 0 4px var(--es-panel);
|
|
106
280
|
}
|
|
107
281
|
/* The square: the hue at full strength, washed to white left-to-right and to
|
|
108
282
|
black top-to-bottom — which is what saturation and brightness ARE. */
|
|
@@ -138,7 +312,20 @@
|
|
|
138
312
|
.es-pick-hue-thumb {
|
|
139
313
|
top: 50%;
|
|
140
314
|
}
|
|
141
|
-
|
|
315
|
+
/* The hex row with its swatch (ColourWindow `swatch`, the text box's colour
|
|
316
|
+
window): the colour, then the hex. */
|
|
317
|
+
.es-pick-hex-row {
|
|
318
|
+
display: flex;
|
|
319
|
+
align-items: center;
|
|
320
|
+
gap: 8px;
|
|
321
|
+
}
|
|
322
|
+
.es-pick-hex-swatch {
|
|
323
|
+
width: 26px;
|
|
324
|
+
height: 26px;
|
|
325
|
+
flex: none;
|
|
326
|
+
border-radius: 6px;
|
|
327
|
+
box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);
|
|
328
|
+
}
|
|
142
329
|
/* ── The image box ──────────────────────────────────────────────────────── */
|
|
143
330
|
.es-pick-image {
|
|
144
331
|
display: flex;
|
package/dist/rail/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { c as EaselRailProps, E as EaselRailButtonProps } from '../types-
|
|
3
|
-
export { a as EaselRailItem, b as EaselRailOrientation
|
|
2
|
+
import { c as EaselRailProps, E as EaselRailButtonProps } from '../types-DWS-s9z-.js';
|
|
3
|
+
export { a as EaselRailItem, b as EaselRailOrientation } from '../types-DWS-s9z-.js';
|
|
4
4
|
export { AddIcon, LayersIcon, MediaIcon, PageIcon as PagesIcon, IconProps as RailIconProps, SitemapIcon, StylesIcon } from '../icons/index.js';
|
|
5
5
|
export { W as WordFit } from '../wordFit-D4S36PvB.js';
|
|
6
6
|
|
|
@@ -44,8 +44,6 @@ export { W as WordFit } from '../wordFit-D4S36PvB.js';
|
|
|
44
44
|
* passes `ariaLabel`; `TopBarRail` does it from the provider.
|
|
45
45
|
*/
|
|
46
46
|
declare function EaselRail({ items, ariaLabel, className, orientation, wordFit, }: EaselRailProps): react.JSX.Element;
|
|
47
|
-
/** @deprecated The name before the Easel rename: `EaselRail`. */
|
|
48
|
-
declare const EditorRail: typeof EaselRail;
|
|
49
47
|
|
|
50
48
|
/**
|
|
51
49
|
* A single rail button: an icon in a 34×34 square that hovers, highlights when
|
|
@@ -56,8 +54,6 @@ declare const EditorRail: typeof EaselRail;
|
|
|
56
54
|
* whose item omits `active`) stays a plain button rather than a stuck toggle.
|
|
57
55
|
*/
|
|
58
56
|
declare function EaselRailButton({ label, worded, icon, active, disabled, onSelect, className, }: EaselRailButtonProps): react.JSX.Element;
|
|
59
|
-
/** @deprecated The name before the Easel rename: `EaselRailButton`. */
|
|
60
|
-
declare const EditorRailButton: typeof EaselRailButton;
|
|
61
57
|
|
|
62
58
|
/**
|
|
63
59
|
* Rail design tokens — the ONE source both apps' rails converge on.
|
|
@@ -146,4 +142,4 @@ declare const railCssVars: {
|
|
|
146
142
|
readonly accentTint: "--es-rail-accent-tint";
|
|
147
143
|
};
|
|
148
144
|
|
|
149
|
-
export { EaselRail, EaselRailButton, EaselRailButtonProps, EaselRailProps,
|
|
145
|
+
export { EaselRail, EaselRailButton, EaselRailButtonProps, EaselRailProps, type RailTokens, railCssVars, railTokens };
|
package/dist/rail/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunk-
|
|
1
|
+
import"../chunk-OWBO4WKA.js";export{EaselRail,EaselRailButton,railCssVars,railTokens}from"../chunk-WZ7TGAAT.js";import"../chunk-2OAZYSWJ.js";import"../chunk-BZ5ASXOL.js";export{AddIcon,LayersIcon,MediaIcon,PageIcon as PagesIcon,SitemapIcon,StylesIcon}from"../chunk-L5KW4HG5.js";
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { S as SaveWords } from '../words-
|
|
2
|
-
import { N as NoticeWords, C as ChromeWords } from '../words-
|
|
3
|
-
import { C as CopyWords } from '../words-
|
|
1
|
+
import { S as SaveWords } from '../words-BMzV04b1.js';
|
|
2
|
+
import { N as NoticeWords, C as ChromeWords } from '../words-AHHfiaRY.js';
|
|
3
|
+
import { C as CopyWords } from '../words-XH0TvZPg.js';
|
|
4
4
|
import { D as DragWords } from '../words-BDignMl_.js';
|
|
5
5
|
import { LockWords } from '../edit-lock/index.js';
|
|
6
|
-
import { F as FieldsWords } from '../words-
|
|
6
|
+
import { F as FieldsWords } from '../words-D8kf071T.js';
|
|
7
7
|
import { N as NodeMenuWords } from '../words-DMG4dYq2.js';
|
|
8
|
-
import {
|
|
8
|
+
import { P as PanelWords } from '../words-BGrHZAJJ.js';
|
|
9
9
|
import { P as PickWords } from '../words-is_Vy6hn.js';
|
|
10
10
|
import { S as StyleClipboardWords } from '../words-CnnHb9jo.js';
|
|
11
|
-
import { T as
|
|
12
|
-
import '../
|
|
13
|
-
import '../types-
|
|
11
|
+
import { T as TextStylesWords } from '../words-CRYvAiHX.js';
|
|
12
|
+
import { T as TreeWords } from '../words-DgHcY5qB.js';
|
|
13
|
+
import '../types-DGcCsxs8.js';
|
|
14
|
+
import '../types-DWS-s9z-.js';
|
|
14
15
|
import '../wordFit-D4S36PvB.js';
|
|
15
16
|
import 'react';
|
|
16
17
|
import '../markup/index.js';
|
|
18
|
+
import '../buckets-CuLM47h9.js';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* The easel canvas's own words (`efficient-easel/strings`, 0.95.0). There is
|
|
@@ -26,26 +28,6 @@ type CanvasWords = {
|
|
|
26
28
|
frame: string;
|
|
27
29
|
};
|
|
28
30
|
|
|
29
|
-
/**
|
|
30
|
-
* The settings panel's own words (`efficient-easel/strings`, 0.95.0): what
|
|
31
|
-
* the tab strip is called, and what each tab SAYS.
|
|
32
|
-
*
|
|
33
|
-
* A bucket's key (`'Content'`, `'Style'`, …) is an identifier — fields name
|
|
34
|
-
* their tab with it and `SETTINGS_BUCKETS` orders them — so it never changes
|
|
35
|
-
* with the language. `buckets` is the word drawn for each key.
|
|
36
|
-
*
|
|
37
|
-
* The panel is hook-free, so nothing here is read from the strings provider:
|
|
38
|
-
* `SettingsTabs` takes its name as `ariaLabel` and each tab's word as the
|
|
39
|
-
* item's `label`, and `Inspector` (which has hooks) passes both.
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
type PanelWords = {
|
|
43
|
-
/** The tab strip's accessible name. */
|
|
44
|
-
settings: string;
|
|
45
|
-
/** The word each tab shows, by its key. */
|
|
46
|
-
buckets: Record<SettingsBucket, string>;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
31
|
/**
|
|
50
32
|
* The rail's own words. There is one: what the toolbar is called when the host
|
|
51
33
|
* does not name it (`ariaLabel`). Every other word on the rail is an item's
|
|
@@ -120,6 +102,8 @@ interface EaselStrings {
|
|
|
120
102
|
copy: CopyWords;
|
|
121
103
|
/** `efficient-easel/easel` — the canvas frame's name. */
|
|
122
104
|
canvas: CanvasWords;
|
|
105
|
+
/** `efficient-easel/text-styles` — the Email styles / Site styles list (E6). */
|
|
106
|
+
textStyles: TextStylesWords;
|
|
123
107
|
}
|
|
124
108
|
/** Today's English, word for word. */
|
|
125
109
|
declare const DEFAULT_EASEL_STRINGS: EaselStrings;
|
|
@@ -137,11 +121,5 @@ type DeepPartial<T> = T extends (...args: never[]) => unknown ? T : T extends ob
|
|
|
137
121
|
* rather than as nothing. Neither argument is changed.
|
|
138
122
|
*/
|
|
139
123
|
declare function mergeEaselStrings(defaults: EaselStrings, partial?: DeepPartial<EaselStrings> | null): EaselStrings;
|
|
140
|
-
/** @deprecated The name before the Easel rename: `EaselStrings`. */
|
|
141
|
-
type EditorStrings = EaselStrings;
|
|
142
|
-
/** @deprecated The name before the Easel rename: `DEFAULT_EASEL_STRINGS`. */
|
|
143
|
-
declare const DEFAULT_EDITOR_STRINGS: EaselStrings;
|
|
144
|
-
/** @deprecated The name before the Easel rename: `mergeEaselStrings`. */
|
|
145
|
-
declare const mergeEditorStrings: typeof mergeEaselStrings;
|
|
146
124
|
|
|
147
|
-
export { type CanvasWords, ChromeWords, CopyWords, DEFAULT_EASEL_STRINGS,
|
|
125
|
+
export { type CanvasWords, ChromeWords, CopyWords, DEFAULT_EASEL_STRINGS, type DeepPartial, DragWords, type EaselStrings, FieldsWords, LockWords, NodeMenuWords, NoticeWords, PanelWords, PickWords, type RailWords, SaveWords, StyleClipboardWords, TextStylesWords, TreeWords, mergeEaselStrings };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{DEFAULT_EASEL_STRINGS,
|
|
1
|
+
export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-IG3U5NWJ.js";import"../chunk-M6F6LS3H.js";import"../chunk-6WY6ZXJG.js";import"../chunk-AELNNAFM.js";import"../chunk-3EDSDPIP.js";import"../chunk-QTLAVDJE.js";import"../chunk-WK3AFPXY.js";import"../chunk-H6DDIBQ4.js";import"../chunk-ZJEBF4NB.js";import"../chunk-RE4LP46F.js";import"../chunk-2OAZYSWJ.js";import"../chunk-UH7IGZKF.js";import"../chunk-ZAOM6PFH.js";import"../chunk-FPOKPNO4.js";import"../chunk-546BBOPE.js";import"../chunk-O2NLQBFX.js";
|
package/dist/strings/index.d.ts
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { DeepPartial, EaselStrings } from './catalogue.js';
|
|
2
|
-
export { CanvasWords, DEFAULT_EASEL_STRINGS,
|
|
2
|
+
export { CanvasWords, DEFAULT_EASEL_STRINGS, RailWords, mergeEaselStrings } from './catalogue.js';
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
|
-
export { C as ChromeWords, N as NoticeWords } from '../words-
|
|
6
|
-
export { C as CopyWords } from '../words-
|
|
5
|
+
export { C as ChromeWords, N as NoticeWords } from '../words-AHHfiaRY.js';
|
|
6
|
+
export { C as CopyWords } from '../words-XH0TvZPg.js';
|
|
7
7
|
export { D as DragWords } from '../words-BDignMl_.js';
|
|
8
|
-
export { F as FieldsWords } from '../words-
|
|
8
|
+
export { F as FieldsWords } from '../words-D8kf071T.js';
|
|
9
9
|
export { LockWords } from '../edit-lock/index.js';
|
|
10
10
|
export { N as NodeMenuWords } from '../words-DMG4dYq2.js';
|
|
11
|
+
export { P as PanelWords } from '../words-BGrHZAJJ.js';
|
|
11
12
|
export { P as PickWords } from '../words-is_Vy6hn.js';
|
|
12
|
-
export { S as SaveWords } from '../words-
|
|
13
|
+
export { S as SaveWords } from '../words-BMzV04b1.js';
|
|
13
14
|
export { S as StyleClipboardWords } from '../words-CnnHb9jo.js';
|
|
14
|
-
export { T as
|
|
15
|
-
|
|
15
|
+
export { T as TextStylesWords } from '../words-CRYvAiHX.js';
|
|
16
|
+
export { T as TreeWords } from '../words-DgHcY5qB.js';
|
|
16
17
|
import '../markup/index.js';
|
|
17
|
-
import '../
|
|
18
|
-
import '../types-
|
|
18
|
+
import '../buckets-CuLM47h9.js';
|
|
19
|
+
import '../types-DGcCsxs8.js';
|
|
20
|
+
import '../types-DWS-s9z-.js';
|
|
19
21
|
import '../wordFit-D4S36PvB.js';
|
|
20
22
|
|
|
21
23
|
interface EaselStringsProviderProps {
|
|
@@ -52,13 +54,5 @@ declare function EaselStringsProvider({ value, locale, children }: EaselStringsP
|
|
|
52
54
|
declare function useEaselStrings(): EaselStrings;
|
|
53
55
|
/** The nearest provider's locale, or `'en'`. */
|
|
54
56
|
declare function useEaselLocale(): string;
|
|
55
|
-
/** @deprecated The name before the Easel rename: `EaselStringsProviderProps`. */
|
|
56
|
-
type EditorStringsProviderProps = EaselStringsProviderProps;
|
|
57
|
-
/** @deprecated The name before the Easel rename: `EaselStringsProvider`. */
|
|
58
|
-
declare const EditorStringsProvider: typeof EaselStringsProvider;
|
|
59
|
-
/** @deprecated The name before the Easel rename: `useEaselStrings`. */
|
|
60
|
-
declare const useEditorStrings: typeof useEaselStrings;
|
|
61
|
-
/** @deprecated The name before the Easel rename: `useEaselLocale`. */
|
|
62
|
-
declare const useEditorLocale: typeof useEaselLocale;
|
|
63
57
|
|
|
64
|
-
export { DeepPartial, EaselStrings, EaselStringsProvider, type EaselStringsProviderProps,
|
|
58
|
+
export { DeepPartial, EaselStrings, EaselStringsProvider, type EaselStringsProviderProps, useEaselLocale, useEaselStrings };
|
package/dist/strings/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DEFAULT_EASEL_STRINGS as r,mergeEaselStrings as n}from"../chunk-
|
|
2
|
-
return
|
|
1
|
+
import{DEFAULT_EASEL_STRINGS as r,mergeEaselStrings as n}from"../chunk-IG3U5NWJ.js";export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-IG3U5NWJ.js";import"../chunk-M6F6LS3H.js";import"../chunk-6WY6ZXJG.js";import"../chunk-AELNNAFM.js";import"../chunk-3EDSDPIP.js";import"../chunk-QTLAVDJE.js";import"../chunk-WK3AFPXY.js";import"../chunk-H6DDIBQ4.js";import"../chunk-ZJEBF4NB.js";import"../chunk-RE4LP46F.js";import"../chunk-2OAZYSWJ.js";import"../chunk-UH7IGZKF.js";import"../chunk-ZAOM6PFH.js";import"../chunk-FPOKPNO4.js";import"../chunk-546BBOPE.js";import{stringsContext as o}from"../chunk-MFIRYGHW.js";import"../chunk-O2NLQBFX.js";import{useContext as t,useMemo as c}from"react";import{jsx as i}from"react/jsx-runtime";function s({value:s,locale:u,children:m}){const e=o(),p=t(e),h=p?.strings??r,j=u??p?.locale??"en",k=c(()=>({strings:n(h,s),locale:j}),[h,s,j]);/* @__PURE__ */
|
|
2
|
+
return i(e.Provider,{value:k,children:m})}function u(){return t(o())?.strings??r}function m(){return t(o())?.locale??"en"}export{s as EaselStringsProvider,m as useEaselLocale,u as useEaselStrings};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DEFAULT_STYLE_CLIPBOARD_WORDS as t}from"../chunk-6WY6ZXJG.js";import{CopyStyleIcon as e,PasteStyleIcon as n}from"../chunk-
|
|
1
|
+
import{DEFAULT_STYLE_CLIPBOARD_WORDS as t}from"../chunk-6WY6ZXJG.js";import{CopyStyleIcon as e,PasteStyleIcon as n}from"../chunk-L5KW4HG5.js";import{jsx as o}from"react/jsx-runtime";var r="__styleKind";function u(t,e){return t[r]=e,t}function c(t,e){return`${t}:${e.map(t=>String(t)).sort().join("|")}`}function i(t){if(!t)return null;const e=t.indexOf(":");if(e<0)return null;const n=t.slice(0,e);return s.has(n)?{control:n,values:t.slice(e+1).split("|")}:null}var s=/* @__PURE__ */new Set(["choice","select","radio"]);function l(t){if(!t||"object"!=typeof t)return null;const e=t;return"string"==typeof e[r]?e[r]:"text"===e.type||"textarea"===e.type||"number"===e.type?e.type:"select"!==e.type&&"radio"!==e.type||!Array.isArray(e.options)?null:c(e.type,e.options.map(t=>t?.value))}function a(t){return null!=t&&""!==t}function p(t,e){let n=t;for(const t of e){if(!n||"object"!=typeof n)return;n=n[t]}return n}function f(t){return void 0===t?t:JSON.parse(JSON.stringify(t))}function d(t,e,n){const[o,...r]=e,u={...t};if(0===r.length)return void 0===n?delete u[o]:u[o]=n,u;const c=u[o],i=d(c&&"object"==typeof c?c:{},r,n);return 0===Object.keys(i).length?delete u[o]:u[o]=i,u}var y=t=>t.join("."),h="editor-shell:style-clipboard",g=null,m=!1,v=/* @__PURE__ */new Set;function S(){try{return"undefined"==typeof sessionStorage?null:sessionStorage}catch{return null}}function b(){if(!m){m=!0;try{const t=S()?.getItem(h);t&&(g=JSON.parse(t))}catch{g=null}}}function k(t){b(),g={scope:t.scope,sourceType:t.type,sourceLabel:t.label,rows:t.rows.map(e=>{const n=p(t.props,e.path);return{path:[...e.path],kind:e.kind,counted:!1!==e.counted,value:a(n)?f(n):void 0}})};try{S()?.setItem(h,JSON.stringify(g))}catch{}return v.forEach(t=>t()),g}function N(t){return b(),g&&g.scope===t?g:null}function j(t){return v.add(t),()=>{v.delete(t)}}function C(){g=null,m=!0;try{S()?.removeItem(h)}catch{}v.forEach(t=>t())}function w(t,e,n){if(t.kind===e.kind)return null!==e.kind||n;const o=i(t.kind),r=i(e.kind);return!(!o||!r||o.control!==r.control)&&(!a(t.value)||r.values.includes(String(t.value)))}function K(t,e){const n=t.sourceType===e.type,o=new Map(t.rows.map(t=>[y(t.path),t]));let r=e.props,u=0,c=!1;for(const t of e.rows){const e=o.get(y(t.path));if(!e)continue;if(!w(e,t,n))continue;const i=p(r,t.path),s=void 0===e.value?void 0:f(e.value);JSON.stringify(a(i)?i:void 0)!==JSON.stringify(s)&&(r=d(r,t.path,s),c=!0),!1!==t.counted&&(u+=1)}return{props:r,pasted:u,changed:c}}function O(e,n,o,r=t){return 0===e.pasted?r.nothing({source:n,target:o}):r.pasted({count:e.pasted,source:n})}var E="⌥⌘C",J="⌥⌘V";function T(r){const u=r.words??t,c=[];return r.canCopy&&c.push({label:u.copy,icon:/* @__PURE__ */o(e,{}),shortcut:"⌥⌘C",onClick:r.onCopy}),r.held&&c.push({label:u.paste({source:r.held.sourceLabel}),icon:/* @__PURE__ */o(n,{}),shortcut:"⌥⌘V",onClick:r.onPaste}),c}function x(t){if(!t.altKey||t.shiftKey||!t.metaKey&&!t.ctrlKey)return null;const e=t.target;return e&&(e.isContentEditable||"INPUT"===e.tagName||"TEXTAREA"===e.tagName||"SELECT"===e.tagName)?null:"KeyC"===t.code?"copy":"KeyV"===t.code?"paste":null}export{E as COPY_STYLE_SHORTCUT,J as PASTE_STYLE_SHORTCUT,r as STYLE_KIND,c as choiceKind,C as clearStyle,k as copyStyle,l as fieldKind,N as heldStyle,O as pasteMessage,K as planPaste,T as styleMenuItems,x as styleShortcut,j as subscribeStyle,u as withStyleKind};
|