efficient-easel 0.97.0 → 0.98.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 +2 -2
- package/dist/autosave/index.d.ts +4 -4
- package/dist/{buckets-1vRlQceY.d.ts → buckets-CuLM47h9.d.ts} +1 -1
- package/dist/chrome/chrome.css +25 -16
- package/dist/chrome/index.d.ts +6 -6
- package/dist/chrome/index.js +6 -6
- package/dist/chunk-2UX75JDP.js +1 -0
- package/dist/{chunk-STFMZJKU.js → chunk-66CKSTXP.js} +6 -6
- package/dist/{chunk-YIMRTIBN.js → chunk-IBOFSS56.js} +1 -1
- package/dist/chunk-PI26YXYD.js +462 -0
- package/dist/copy/copy.css +5 -5
- package/dist/copy/index.d.ts +5 -5
- package/dist/copy/index.js +10 -10
- package/dist/drag/drag.css +15 -15
- package/dist/drag/index.js +5 -5
- package/dist/edit-lock/index.d.ts +1 -1
- package/dist/editor/index.d.ts +2 -2
- package/dist/fields/fields.css +126 -12
- package/dist/fields/index.d.ts +59 -11
- package/dist/fields/index.js +40 -33
- package/dist/gold/index.d.ts +1 -1
- package/dist/icons/index.d.ts +26 -5
- package/dist/icons/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/menu/menu.css +4 -4
- package/dist/node-ops/index.js +1 -1
- package/dist/panel/index.d.ts +10 -10
- package/dist/panel/panel.css +34 -25
- package/dist/pick/pick.css +8 -8
- package/dist/rail/index.d.ts +2 -2
- package/dist/rail/index.js +1 -1
- package/dist/rail/rail.css +1 -1
- package/dist/render/index.d.ts +1 -1
- package/dist/shell/index.d.ts +24 -4
- package/dist/shell/index.js +1 -1
- package/dist/shell/shell.css +12 -2
- package/dist/strings/catalogue.d.ts +4 -4
- package/dist/strings/index.d.ts +4 -4
- package/dist/style-clipboard/index.js +1 -1
- package/dist/tree/index.d.ts +1 -1
- package/dist/tree/index.js +1 -1
- package/dist/tree/tree.css +11 -11
- package/dist/{types-CEqUFH2j.d.ts → types-C7HFvdtk.d.ts} +26 -4
- package/dist/{types-CuNiSnX6.d.ts → types-CnRzp9oc.d.ts} +1 -1
- package/dist/{words-CsRWXkY4.d.ts → words-Cqmyey0s.d.ts} +2 -2
- package/dist/{words-DfxEp_RH.d.ts → words-bOMsUJk9.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-FI23ALVJ.js +0 -1
- package/dist/chunk-YNZZYHA4.js +0 -450
package/dist/panel/panel.css
CHANGED
|
@@ -7,13 +7,15 @@
|
|
|
7
7
|
* dark mode.
|
|
8
8
|
*
|
|
9
9
|
* Two details are deliberate and were decided by measurement, not taste:
|
|
10
|
-
* · rows sit
|
|
10
|
+
* · rows sit 32px apart while a label sits 12px from its own control, so a
|
|
11
11
|
* setting reads as ONE thing with air around it. That inside gap is the
|
|
12
12
|
* ONLY thing saying which label owns which control, and the two are a
|
|
13
13
|
* RATIO rather than a pair of numbers: measured at 28 and 7 (card 8802.d,
|
|
14
|
-
* approved from mockups/8802e-settings-spacing-mockup.html)
|
|
15
|
-
* together to 38 and 11 (card 66301),
|
|
16
|
-
*
|
|
14
|
+
* approved from mockups/8802e-settings-spacing-mockup.html), re-scaled
|
|
15
|
+
* together to 38 and 11 (card 66301, 3.5x), and moved onto the ONE
|
|
16
|
+
* spacing scale as 32 and 12 (owner ruling 2026-10-02). The rule that
|
|
17
|
+
* survives every re-scale: the gap between settings stays at least TWICE
|
|
18
|
+
* the gap inside one. On the scale it is 8:3, about 2.7x;
|
|
17
19
|
* · the label is small and grey, the value is larger and dark. Before that
|
|
18
20
|
* contrast existed, a merchant could not tell a name from a number.
|
|
19
21
|
*/
|
|
@@ -85,7 +87,7 @@
|
|
|
85
87
|
the storefront's Layers tree needs in order to "follow the shell's spacing"
|
|
86
88
|
is the RHYTHM — 38 between two settings against 11 inside one. Under the floor
|
|
87
89
|
those were bare literals, so the only way to follow them was to COPY them
|
|
88
|
-
into `efficient-
|
|
90
|
+
into `efficient-storefront/components/storefront-editor.css`: a second source of
|
|
89
91
|
truth for numbers this sheet was already the source of.
|
|
90
92
|
|
|
91
93
|
THE VALUES DID NOT CHANGE WHEN THEY WERE NAMED. Every one was the number
|
|
@@ -121,25 +123,32 @@
|
|
|
121
123
|
shell.css 67/67 custom, panel.css 11/11, menu.css 7/7 — zero paint in all
|
|
122
124
|
three. ⚠️ Nothing enforces it. If you are adding a declaration here, you are
|
|
123
125
|
the check. */
|
|
126
|
+
/* ON THE ONE SCALE (owner ruling 2026-10-02). Lewis ruled six spacing steps
|
|
127
|
+
for every panel — 2 / 4 / 8 / 12 / 16 / 32, declared once in `shell.css` as
|
|
128
|
+
`--es-space-*` — and no seventh. So every number below now READS a step
|
|
129
|
+
instead of holding its own: the floor and "a heading to its first row" are
|
|
130
|
+
12 (his "between rows under one heading"), every gap between two settings,
|
|
131
|
+
one-line rows included, is 32, and the gap inside a setting is 12. The notes
|
|
132
|
+
above say how the old numbers were reached; these are the numbers now. */
|
|
124
133
|
.es-editor {
|
|
125
134
|
/* THE FLOOR (card 66206) — no row-to-row gap on this panel resolves below it. */
|
|
126
|
-
--es-row-gap:
|
|
135
|
+
--es-row-gap: var(--es-space-12);
|
|
127
136
|
|
|
128
137
|
/* THE RHYTHMS. All five are declared in THIS rule and not a second
|
|
129
138
|
`.es-editor` block: the panel has ONE root, and a second block would put
|
|
130
139
|
half the panel's spacing somewhere a reader — and the spec, which reads the
|
|
131
140
|
root by selector — would not look. */
|
|
132
141
|
/* between one group heading and whatever is above it */
|
|
133
|
-
--es-rhythm-group:
|
|
142
|
+
--es-rhythm-group: var(--es-space-32);
|
|
134
143
|
/* between a group heading and the first setting under it — closer, because
|
|
135
144
|
that setting belongs to that heading */
|
|
136
|
-
--es-rhythm-group-first:
|
|
145
|
+
--es-rhythm-group-first: var(--es-space-12);
|
|
137
146
|
/* BETWEEN two settings */
|
|
138
|
-
--es-rhythm-between:
|
|
147
|
+
--es-rhythm-between: var(--es-space-32);
|
|
139
148
|
/* between two one-line rows, which are one line tall and need less air */
|
|
140
|
-
--es-rhythm-between-tight:
|
|
149
|
+
--es-rhythm-between-tight: var(--es-space-32);
|
|
141
150
|
/* WITHIN one setting: its label to its own control */
|
|
142
|
-
--es-rhythm-within:
|
|
151
|
+
--es-rhythm-within: var(--es-space-12);
|
|
143
152
|
|
|
144
153
|
/* ── THE CHIP'S OWN METRICS (card 66248) ───────────────────────────────────
|
|
145
154
|
|
|
@@ -160,9 +169,9 @@
|
|
|
160
169
|
cannot be named here is the width of a WORD — see `.es-segs` below. */
|
|
161
170
|
--es-chip-pad-x: 8px;
|
|
162
171
|
--es-chip-icon: 16px;
|
|
163
|
-
--es-chip-icon-gap:
|
|
164
|
-
--es-track-pad:
|
|
165
|
-
--es-track-gap:
|
|
172
|
+
--es-chip-icon-gap: 4px;
|
|
173
|
+
--es-track-pad: 2px;
|
|
174
|
+
--es-track-gap: 2px;
|
|
166
175
|
}
|
|
167
176
|
|
|
168
177
|
/* ── the tab strip: a segmented control ────────────────────────────────────── */
|
|
@@ -292,7 +301,7 @@
|
|
|
292
301
|
border: 0;
|
|
293
302
|
background: transparent;
|
|
294
303
|
border-radius: 6px;
|
|
295
|
-
padding:
|
|
304
|
+
padding: 4px var(--es-chip-pad-x);
|
|
296
305
|
font: inherit;
|
|
297
306
|
font-size: 12px;
|
|
298
307
|
font-weight: 600;
|
|
@@ -381,7 +390,7 @@
|
|
|
381
390
|
.es-tab-badge {
|
|
382
391
|
min-width: 16px;
|
|
383
392
|
height: 16px;
|
|
384
|
-
padding: 0
|
|
393
|
+
padding: 0 4px;
|
|
385
394
|
border-radius: 999px;
|
|
386
395
|
background: var(--es-accent);
|
|
387
396
|
color: var(--es-on-accent);
|
|
@@ -738,7 +747,7 @@
|
|
|
738
747
|
color: var(--es-text);
|
|
739
748
|
background: var(--es-hover);
|
|
740
749
|
border-radius: var(--es-row-radius);
|
|
741
|
-
padding: 8px
|
|
750
|
+
padding: 8px 12px;
|
|
742
751
|
/* A heading needs more air above it than the settings it heads have between
|
|
743
752
|
them (38px), or it reads as one more row. Floored on `--es-row-gap` so it
|
|
744
753
|
rises with the rest of the panel (card 66203). */
|
|
@@ -755,7 +764,7 @@
|
|
|
755
764
|
"these lines, I still find them annoying to look at".
|
|
756
765
|
|
|
757
766
|
THE TYPE IS NOT INVENTED HERE. It is `.sf-field-group` and `.sf-group-label`
|
|
758
|
-
from `efficient-
|
|
767
|
+
from `efficient-storefront`, which are the same look to the decimal, hand-rolled in
|
|
759
768
|
two panels of one editor. Owning it here is what stops a third copy.
|
|
760
769
|
|
|
761
770
|
FLUSH, not inset. `.es-field` has no horizontal padding, so a heading that
|
|
@@ -794,7 +803,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
794
803
|
.es-group-count {
|
|
795
804
|
min-width: 16px;
|
|
796
805
|
height: 16px;
|
|
797
|
-
padding: 0
|
|
806
|
+
padding: 0 4px;
|
|
798
807
|
border-radius: 999px;
|
|
799
808
|
background: var(--es-accent);
|
|
800
809
|
color: var(--es-on-accent);
|
|
@@ -903,7 +912,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
903
912
|
}
|
|
904
913
|
|
|
905
914
|
.es-field-hint {
|
|
906
|
-
margin:
|
|
915
|
+
margin: 8px 0 0;
|
|
907
916
|
padding-left: 24px;
|
|
908
917
|
font-size: 11px;
|
|
909
918
|
line-height: 1.45;
|
|
@@ -1022,7 +1031,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
1022
1031
|
width: 100%;
|
|
1023
1032
|
display: flex;
|
|
1024
1033
|
align-items: center;
|
|
1025
|
-
gap:
|
|
1034
|
+
gap: 12px;
|
|
1026
1035
|
border: 0;
|
|
1027
1036
|
text-align: left;
|
|
1028
1037
|
font: inherit;
|
|
@@ -1062,7 +1071,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
1062
1071
|
something each row owns on its own side. So the gap stays padding — it just reads the token now, which is the whole point: before
|
|
1063
1072
|
this, raising the panel's rhythm moved every other row and left the drill
|
|
1064
1073
|
list exactly where it was. */
|
|
1065
|
-
padding: var(--es-row-gap)
|
|
1074
|
+
padding: var(--es-row-gap) 12px;
|
|
1066
1075
|
cursor: pointer;
|
|
1067
1076
|
transition: background 0.12s;
|
|
1068
1077
|
}
|
|
@@ -1148,7 +1157,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
1148
1157
|
cropped picture stays in view, and where on the thing behind it a block sits.
|
|
1149
1158
|
Both are one of nine positions, and both want the corner PRESSED.
|
|
1150
1159
|
|
|
1151
|
-
Promoted out of efficient-
|
|
1160
|
+
Promoted out of efficient-storefront (`.sf-focal`) the day its own rule fired —
|
|
1152
1161
|
card 66189 wrote "the day a second section wants it, that is the card that
|
|
1153
1162
|
promotes it"; 66214 declined it early and said why; the sections that hold
|
|
1154
1163
|
boxes take it past six callers. The values below are the shop's, token for
|
|
@@ -1366,7 +1375,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
1366
1375
|
align-items: center;
|
|
1367
1376
|
justify-content: center;
|
|
1368
1377
|
gap: 8px;
|
|
1369
|
-
padding:
|
|
1378
|
+
padding: 12px;
|
|
1370
1379
|
border: 1px solid var(--es-btn-border);
|
|
1371
1380
|
border-radius: var(--es-row-radius);
|
|
1372
1381
|
background: var(--es-field-bg);
|
|
@@ -1431,7 +1440,7 @@ button.es-group-head:hover { background: var(--es-chip-bg); }
|
|
|
1431
1440
|
the button, and wrapped — this is a clause, not a name, the same split
|
|
1432
1441
|
`.es-field-hint` makes. */
|
|
1433
1442
|
.es-action-note {
|
|
1434
|
-
margin:
|
|
1443
|
+
margin: 8px 0 0;
|
|
1435
1444
|
font-size: 11px;
|
|
1436
1445
|
line-height: 1.4;
|
|
1437
1446
|
color: var(--es-muted);
|
package/dist/pick/pick.css
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
--es-pick-readout-w: 80px;
|
|
11
11
|
display: flex;
|
|
12
12
|
flex-direction: column;
|
|
13
|
-
gap:
|
|
13
|
+
gap: 12px;
|
|
14
14
|
}
|
|
15
15
|
.es-pick-colour-row {
|
|
16
16
|
display: flex;
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
box-sizing: border-box;
|
|
51
51
|
width: var(--es-pick-readout-w);
|
|
52
52
|
min-width: 0;
|
|
53
|
-
padding: 4px
|
|
53
|
+
padding: 4px 8px;
|
|
54
54
|
border: 1px solid transparent;
|
|
55
55
|
border-radius: 6px;
|
|
56
56
|
background: transparent;
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
.es-pick-caption {
|
|
70
70
|
box-sizing: border-box;
|
|
71
71
|
width: var(--es-pick-readout-w);
|
|
72
|
-
padding: 0
|
|
72
|
+
padding: 0 8px;
|
|
73
73
|
font-size: 12px;
|
|
74
74
|
color: var(--es-muted);
|
|
75
75
|
}
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
.es-pick-window {
|
|
79
79
|
display: flex;
|
|
80
80
|
flex-direction: column;
|
|
81
|
-
gap:
|
|
82
|
-
padding:
|
|
81
|
+
gap: 12px;
|
|
82
|
+
padding: 12px;
|
|
83
83
|
border: 1px solid var(--es-divider);
|
|
84
84
|
border-radius: 10px;
|
|
85
85
|
background: var(--es-panel);
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
.es-pick-theme {
|
|
88
88
|
display: flex;
|
|
89
89
|
flex-wrap: wrap;
|
|
90
|
-
gap:
|
|
90
|
+
gap: 8px;
|
|
91
91
|
}
|
|
92
92
|
.es-pick-theme-swatch {
|
|
93
93
|
width: 22px;
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
margin: 0;
|
|
182
182
|
display: flex;
|
|
183
183
|
flex-direction: column;
|
|
184
|
-
gap:
|
|
184
|
+
gap: 8px;
|
|
185
185
|
}
|
|
186
186
|
.es-pick-image-frame {
|
|
187
187
|
height: 96px;
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
gap: 8px;
|
|
209
209
|
}
|
|
210
210
|
.es-pick-image-btn {
|
|
211
|
-
padding:
|
|
211
|
+
padding: 4px 12px;
|
|
212
212
|
border: 1px solid var(--es-input-border);
|
|
213
213
|
border-radius: 6px;
|
|
214
214
|
background: var(--es-panel);
|
package/dist/rail/index.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ declare function EditorRailButton({ label, worded, icon, active, disabled, onSel
|
|
|
59
59
|
* Rail design tokens — the ONE source both apps' rails converge on.
|
|
60
60
|
*
|
|
61
61
|
* Every value below is taken verbatim from the storefront editor's rail
|
|
62
|
-
* (`efficient-
|
|
62
|
+
* (`efficient-storefront` → `storefront-editor.css`, the `.sf-rail` / `.sf-rail-btn`
|
|
63
63
|
* rules), which is the visual reference. The admin portal's hand-rolled rail had
|
|
64
64
|
* drifted (button 36 vs 34, icon 20 vs 18, radius 8 vs 9, a Tailwind accent
|
|
65
65
|
* instead of a CSS var); these tokens end that drift.
|
|
@@ -91,7 +91,7 @@ declare const railTokens: {
|
|
|
91
91
|
/** A worded row button (`TopBarRail`): its side padding, the gap between the
|
|
92
92
|
* icon and its word, and the word's type. */
|
|
93
93
|
readonly wordPaddingX: 8;
|
|
94
|
-
readonly wordGap:
|
|
94
|
+
readonly wordGap: 8;
|
|
95
95
|
readonly wordFontSize: 12;
|
|
96
96
|
readonly wordFontWeight: 500;
|
|
97
97
|
/** Hover/active colour transition. */
|
package/dist/rail/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../chunk-OWBO4WKA.js";export{EditorRail,EditorRailButton,railCssVars,railTokens}from"../chunk-
|
|
1
|
+
import"../chunk-OWBO4WKA.js";export{EditorRail,EditorRailButton,railCssVars,railTokens}from"../chunk-IBOFSS56.js";import"../chunk-2OAZYSWJ.js";import"../chunk-BZ5ASXOL.js";export{AddIcon,LayersIcon,MediaIcon,PageIcon as PagesIcon,SitemapIcon,StylesIcon}from"../chunk-PI26YXYD.js";
|
package/dist/rail/rail.css
CHANGED
package/dist/render/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { B as BlockShape, D as Data } from '../types-41704JE4.js';
|
|
|
6
6
|
*
|
|
7
7
|
* Step 1.2 of the engine that replaces Puck (blueprint "Puck From The Ground
|
|
8
8
|
* Up For Efficient Editor", 2026-09-29). The published storefront draws every
|
|
9
|
-
* page through Puck's `<Render>` today (efficient-
|
|
9
|
+
* page through Puck's `<Render>` today (efficient-storefront `lib/puck/render-client.tsx`
|
|
10
10
|
* and `components/PublishedFooter.tsx`); this is the drop-in for it: the same
|
|
11
11
|
* config, the same document, THE SAME HTML — `tests/render-puck-parity.test.tsx`
|
|
12
12
|
* renders both and compares the markup byte for byte.
|
package/dist/shell/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* editor chrome theme: accent, surfaces, fields, text, lines, chips, named
|
|
6
6
|
* chrome literals, danger/warning/success, radii, gap, shadows and font. Every
|
|
7
7
|
* value bar one is taken verbatim from the storefront editor's `--sf-*` block
|
|
8
|
-
* (`efficient-
|
|
8
|
+
* (`efficient-storefront/components/storefront-editor.css`), the visual reference the
|
|
9
9
|
* campaign designer (`--cd-*`) and the storefront's own TS mirror (`tk`) had
|
|
10
10
|
* each re-copied. After card 66024 they all resolve to these values instead.
|
|
11
11
|
* The one exception is `success`, which that block has no counterpart for; see
|
|
@@ -131,8 +131,22 @@ declare const shellTokens: {
|
|
|
131
131
|
readonly rowRadius: 8;
|
|
132
132
|
/** `--es-field-radius`. */
|
|
133
133
|
readonly fieldRadius: 6;
|
|
134
|
-
/** `--es-panel-gap` — inter-pane gutter + outer frame padding, ONE token.
|
|
135
|
-
|
|
134
|
+
/** `--es-panel-gap` — inter-pane gutter + outer frame padding, ONE token.
|
|
135
|
+
* 12 since the one spacing scale (was 10, which is not a step). */
|
|
136
|
+
readonly panelGap: 12;
|
|
137
|
+
/** `--es-space-2` — between the buttons of one group (B · I · U · S). */
|
|
138
|
+
readonly space2: 2;
|
|
139
|
+
/** `--es-space-4` — a sub-name to its control; between the cells of one group. */
|
|
140
|
+
readonly space4: 4;
|
|
141
|
+
/** `--es-space-8` — between the layers of ONE setting (bar → box → Show marks). */
|
|
142
|
+
readonly space8: 8;
|
|
143
|
+
/** `--es-space-12` — between rows under one heading; inside one setting;
|
|
144
|
+
* the panel's padding when it is narrower than 260px. */
|
|
145
|
+
readonly space12: 12;
|
|
146
|
+
/** `--es-space-16` — the panel's own padding. */
|
|
147
|
+
readonly space16: 16;
|
|
148
|
+
/** `--es-space-32` — between two settings. */
|
|
149
|
+
readonly space32: 32;
|
|
136
150
|
/** `--es-panel-shadow`. */
|
|
137
151
|
readonly panelShadow: "0 1px 2px rgba(0, 0, 0, 0.05), 0 10px 30px rgba(0, 0, 0, 0.06)";
|
|
138
152
|
/** `--es-topbar-shadow`. */
|
|
@@ -148,6 +162,12 @@ declare const shellTokens: {
|
|
|
148
162
|
readonly font: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif";
|
|
149
163
|
};
|
|
150
164
|
type ShellTokens = typeof shellTokens;
|
|
165
|
+
/**
|
|
166
|
+
* The one spacing scale, smallest first (owner ruling, 2026-10-02): the six
|
|
167
|
+
* `space*` tokens above as a list, for code that must snap a number to it.
|
|
168
|
+
* A seventh step is a new ruling, not a new entry.
|
|
169
|
+
*/
|
|
170
|
+
declare const SPACING_SCALE: readonly [2, 4, 8, 12, 16, 32];
|
|
151
171
|
/**
|
|
152
172
|
* The CSS custom-property name behind each `shellTokens` key. `shell.css` sets
|
|
153
173
|
* these on `.es-editor`; override any of them on (or above) the editor root to
|
|
@@ -156,4 +176,4 @@ type ShellTokens = typeof shellTokens;
|
|
|
156
176
|
*/
|
|
157
177
|
declare const shellCssVars: Record<keyof ShellTokens, string>;
|
|
158
178
|
|
|
159
|
-
export { type ShellTokens, shellCssVars, shellTokens };
|
|
179
|
+
export { SPACING_SCALE, type ShellTokens, shellCssVars, shellTokens };
|
package/dist/shell/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{shellCssVars,shellTokens}from"../chunk-
|
|
1
|
+
export{SPACING_SCALE,shellCssVars,shellTokens}from"../chunk-2UX75JDP.js";
|
package/dist/shell/shell.css
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* Audited 2026-09-02 across every sheet here that opens an `.es-editor` block,
|
|
35
35
|
* and the honest number is zero:
|
|
36
36
|
*
|
|
37
|
-
* shell.css
|
|
37
|
+
* shell.css 73 declarations, 73 custom, 0 paint (6 spacing steps added 2026-10-06)
|
|
38
38
|
* panel.css 11 declarations, 11 custom, 0 paint
|
|
39
39
|
* menu.css 7 declarations, 7 custom, 0 paint
|
|
40
40
|
*
|
|
@@ -110,7 +110,17 @@
|
|
|
110
110
|
--es-panel-radius: 12px;
|
|
111
111
|
--es-row-radius: 8px;
|
|
112
112
|
--es-field-radius: 6px;
|
|
113
|
-
--es-panel-gap:
|
|
113
|
+
--es-panel-gap: 12px;
|
|
114
|
+
|
|
115
|
+
/* — spacing: ONE scale for every panel (owner ruling, 2026-10-02) —
|
|
116
|
+
Six steps and no seventh. Every margin, padding and gap in this package
|
|
117
|
+
is one of them; `tests/spacing-scale.test.ts` holds every sheet to it. */
|
|
118
|
+
--es-space-2: 2px;
|
|
119
|
+
--es-space-4: 4px;
|
|
120
|
+
--es-space-8: 8px;
|
|
121
|
+
--es-space-12: 12px;
|
|
122
|
+
--es-space-16: 16px;
|
|
123
|
+
--es-space-32: 32px;
|
|
114
124
|
|
|
115
125
|
/* — shadows — */
|
|
116
126
|
--es-panel-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 10px 30px rgba(0, 0, 0, 0.06);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { S as SaveWords } from '../words-
|
|
1
|
+
import { S as SaveWords } from '../words-Cqmyey0s.js';
|
|
2
2
|
import { N as NoticeWords, C as ChromeWords } from '../words-DagJdwIA.js';
|
|
3
|
-
import { C as CopyWords } from '../words-
|
|
3
|
+
import { C as CopyWords } from '../words-bOMsUJk9.js';
|
|
4
4
|
import { D as DragWords } from '../words-D9ChvbNC.js';
|
|
5
5
|
import { LockWords } from '../edit-lock/index.js';
|
|
6
6
|
import { F as FieldsWords } from '../words-CD3WADyb.js';
|
|
7
7
|
import { N as NodeMenuWords } from '../words-DOhF-4D4.js';
|
|
8
|
-
import { S as SettingsBucket } from '../buckets-
|
|
8
|
+
import { S as SettingsBucket } from '../buckets-CuLM47h9.js';
|
|
9
9
|
import { P as PickWords } from '../words-B87GIFWH.js';
|
|
10
10
|
import { S as StyleClipboardWords } from '../words-B2YLaKEr.js';
|
|
11
11
|
import { T as TreeWords } from '../words-BK-npta-.js';
|
|
12
|
-
import '../types-
|
|
12
|
+
import '../types-CnRzp9oc.js';
|
|
13
13
|
import '../types-DNrn_w4V.js';
|
|
14
14
|
import '../wordFit-9B9nqyf3.js';
|
|
15
15
|
import 'react';
|
package/dist/strings/index.d.ts
CHANGED
|
@@ -3,18 +3,18 @@ export { CanvasWords, DEFAULT_EDITOR_STRINGS, PanelWords, RailWords, mergeEditor
|
|
|
3
3
|
import * as react from 'react';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
export { C as ChromeWords, N as NoticeWords } from '../words-DagJdwIA.js';
|
|
6
|
-
export { C as CopyWords } from '../words-
|
|
6
|
+
export { C as CopyWords } from '../words-bOMsUJk9.js';
|
|
7
7
|
export { D as DragWords } from '../words-D9ChvbNC.js';
|
|
8
8
|
export { F as FieldsWords } from '../words-CD3WADyb.js';
|
|
9
9
|
export { LockWords } from '../edit-lock/index.js';
|
|
10
10
|
export { N as NodeMenuWords } from '../words-DOhF-4D4.js';
|
|
11
11
|
export { P as PickWords } from '../words-B87GIFWH.js';
|
|
12
|
-
export { S as SaveWords } from '../words-
|
|
12
|
+
export { S as SaveWords } from '../words-Cqmyey0s.js';
|
|
13
13
|
export { S as StyleClipboardWords } from '../words-B2YLaKEr.js';
|
|
14
14
|
export { T as TreeWords } from '../words-BK-npta-.js';
|
|
15
|
-
import '../buckets-
|
|
15
|
+
import '../buckets-CuLM47h9.js';
|
|
16
16
|
import '../markup/index.js';
|
|
17
|
-
import '../types-
|
|
17
|
+
import '../types-CnRzp9oc.js';
|
|
18
18
|
import '../types-DNrn_w4V.js';
|
|
19
19
|
import '../wordFit-9B9nqyf3.js';
|
|
20
20
|
|
|
@@ -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-PI26YXYD.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 O(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 E(e,n,o,r=t){return 0===e.pasted?r.nothing({source:n,target:o}):r.pasted({count:e.pasted,source:n})}var J="⌥⌘C",K="⌥⌘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{J as COPY_STYLE_SHORTCUT,K as PASTE_STYLE_SHORTCUT,r as STYLE_KIND,c as choiceKind,C as clearStyle,k as copyStyle,l as fieldKind,N as heldStyle,E as pasteMessage,O as planPaste,T as styleMenuItems,x as styleShortcut,j as subscribeStyle,u as withStyleKind};
|
package/dist/tree/index.d.ts
CHANGED
|
@@ -143,7 +143,7 @@ declare const TREE_DRAG_HINT: string;
|
|
|
143
143
|
/**
|
|
144
144
|
* ONE row, at every depth (the owner's "One Ladder", 2026-09-04).
|
|
145
145
|
*
|
|
146
|
-
* Lifted from the website editor's `.sf-row` (efficient-
|
|
146
|
+
* Lifted from the website editor's `.sf-row` (efficient-storefront). Left to right:
|
|
147
147
|
* the drag handle (out of flow, in the row's left padding), the caret — or a
|
|
148
148
|
* spacer holding its column open, so every glyph below lines up whether its row
|
|
149
149
|
* folds or not — the type glyph, then the name box. The actions are laid over
|
package/dist/tree/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LayersTree,Subtree,TREE_DRAG_HINT,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-
|
|
1
|
+
export{LayersTree,Subtree,TREE_DRAG_HINT,TreeGroupLabel,TreeRow,TreeRowAction,TreeSeam}from"../chunk-66CKSTXP.js";import"../chunk-H4B72XCJ.js";import"../chunk-PI26YXYD.js";
|
package/dist/tree/tree.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* efficient-easel/tree.css — the Layers tree: one row shape at every depth.
|
|
3
3
|
*
|
|
4
|
-
* EVERY VALUE HERE WAS READ OFF `efficient-
|
|
4
|
+
* EVERY VALUE HERE WAS READ OFF `efficient-storefront/components/storefront-editor.css`
|
|
5
5
|
* on origin/main (release 14.24.0, 2026-09-17), where the website editor drew
|
|
6
6
|
* the tree as `.sf-tree` / `.sf-row` / `.sf-subtree` / `.sf-group-label` (the
|
|
7
7
|
* owner's "One Ladder", 2026-09-04). Its `--sf-*` tokens alias the `--es-*`
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
/* LEFT 8 — the inset a rounded row needs. RIGHT 11 — the room a real,
|
|
18
18
|
space-taking 11px scrollbar takes, so nothing at a row's end sits under
|
|
19
19
|
the thumb. Words inside start on one 11px column down the panel. */
|
|
20
|
-
padding: 0
|
|
20
|
+
padding: 0 12px 12px 8px;
|
|
21
21
|
/* THE TREE'S RHYTHM, under the shell's names, at the tree's own density: the
|
|
22
22
|
owner picked 10 between groups and 6 between rows by eye (2026-08-31). They
|
|
23
23
|
are declared HERE, not on the editor root, so the settings panel beside the
|
|
24
24
|
tree keeps its own values for the same names. */
|
|
25
|
-
--es-rhythm-group:
|
|
26
|
-
--es-rhythm-between:
|
|
25
|
+
--es-rhythm-group: 12px;
|
|
26
|
+
--es-rhythm-between: 8px;
|
|
27
27
|
}
|
|
28
28
|
/* Every seam the tree stacks, spelled out: labels and subtrees interleave with
|
|
29
29
|
rows, and a rule that knew only rows would leave those seams to chance. */
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
letter-spacing: 0.07em;
|
|
39
39
|
text-transform: uppercase;
|
|
40
40
|
color: var(--es-muted);
|
|
41
|
-
padding: var(--es-rhythm-group)
|
|
41
|
+
padding: var(--es-rhythm-group) 12px var(--es-rhythm-between);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/* THE ONLY THING IN THE TREE THAT SAYS DEPTH: 16px of indent and a hairline
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
rows outside, so the ladder reads as one list at several depths. */
|
|
47
47
|
.es-subtree {
|
|
48
48
|
margin: var(--es-rhythm-between) 0 var(--es-rhythm-between) 16px;
|
|
49
|
-
padding-left:
|
|
49
|
+
padding-left: 8px;
|
|
50
50
|
border-left: 1px solid var(--es-line);
|
|
51
51
|
display: flex;
|
|
52
52
|
flex-direction: column;
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
display: flex;
|
|
58
58
|
align-items: center;
|
|
59
59
|
gap: 8px;
|
|
60
|
-
padding:
|
|
60
|
+
padding: 8px 12px;
|
|
61
61
|
border-radius: var(--es-row-radius);
|
|
62
62
|
cursor: pointer;
|
|
63
63
|
transition: background 0.12s;
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
STOCK NOW" — quieter than the name, and the first thing to be cut when the
|
|
159
159
|
panel is narrow (it sits inside the name's own ellipsis). */
|
|
160
160
|
.es-tree-preview {
|
|
161
|
-
margin-left:
|
|
161
|
+
margin-left: 8px;
|
|
162
162
|
font-weight: 400;
|
|
163
163
|
color: var(--es-muted);
|
|
164
164
|
}
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
min-width: 0;
|
|
338
338
|
display: flex;
|
|
339
339
|
align-items: center;
|
|
340
|
-
gap:
|
|
340
|
+
gap: 8px;
|
|
341
341
|
cursor: pointer;
|
|
342
342
|
border-radius: 4px;
|
|
343
343
|
}
|
|
@@ -371,7 +371,7 @@
|
|
|
371
371
|
color: var(--es-muted);
|
|
372
372
|
background: var(--es-chip-bg);
|
|
373
373
|
border-radius: 4px;
|
|
374
|
-
padding:
|
|
374
|
+
padding: 2px 4px;
|
|
375
375
|
}
|
|
376
376
|
.es-tree-trailing {
|
|
377
377
|
flex: none;
|
|
@@ -490,7 +490,7 @@
|
|
|
490
490
|
left: 24px;
|
|
491
491
|
top: calc(100% + 4px);
|
|
492
492
|
z-index: 5;
|
|
493
|
-
padding:
|
|
493
|
+
padding: 4px 8px;
|
|
494
494
|
border-radius: 6px;
|
|
495
495
|
background: var(--es-toast-bg);
|
|
496
496
|
color: var(--es-on-accent);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { S as SettingsBucket } from './buckets-
|
|
2
|
+
import { S as SettingsBucket } from './buckets-CuLM47h9.js';
|
|
3
3
|
|
|
4
4
|
/** What every control shares: an id for its label, a name for screen readers, and a read-only switch. */
|
|
5
5
|
interface ControlBase {
|
|
@@ -22,13 +22,35 @@ interface FieldNumberProps extends ControlBase {
|
|
|
22
22
|
onChange: (value: number | undefined) => void;
|
|
23
23
|
min?: number;
|
|
24
24
|
max?: number;
|
|
25
|
+
/** What an arrow or ↑↓ moves by. Default 1. */
|
|
25
26
|
step?: number;
|
|
26
|
-
/**
|
|
27
|
+
/** What Shift + an arrow or ↑↓ moves by. Default ten steps. */
|
|
28
|
+
shiftStep?: number;
|
|
29
|
+
/**
|
|
30
|
+
* The style's number. While the value is `undefined` it shows in the box,
|
|
31
|
+
* grey, and a step starts from it; a typed value beats it until cleared.
|
|
32
|
+
*/
|
|
33
|
+
styleValue?: number;
|
|
34
|
+
/** Drawn first in the cell, e.g. the font-size glyph. */
|
|
35
|
+
icon?: ReactNode;
|
|
36
|
+
/** Shown after the number, inside the cell, e.g. `px`. */
|
|
27
37
|
unit?: string;
|
|
28
|
-
/**
|
|
38
|
+
/** Two small stacked arrows at the cell's end. */
|
|
29
39
|
steppers?: boolean;
|
|
30
40
|
placeholder?: string;
|
|
31
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* A slider row (Site styles, Email styles): the name left and the typed value
|
|
44
|
+
* right on one line, the slider under them. `sliderMin` / `sliderMax` are the
|
|
45
|
+
* slider's travel only; a typed value may go past them, held only by `min` /
|
|
46
|
+
* `max`.
|
|
47
|
+
*/
|
|
48
|
+
interface FieldSliderProps extends Omit<FieldNumberProps, 'icon' | 'steppers' | 'placeholder' | 'ariaLabel' | 'ariaLabelledBy'> {
|
|
49
|
+
/** The row's name; it labels both the value and the slider. */
|
|
50
|
+
label: string;
|
|
51
|
+
sliderMin: number;
|
|
52
|
+
sliderMax: number;
|
|
53
|
+
}
|
|
32
54
|
interface FieldOption<V = unknown> {
|
|
33
55
|
label: string;
|
|
34
56
|
value: V;
|
|
@@ -126,4 +148,4 @@ type FieldRenderer = (props: {
|
|
|
126
148
|
readOnly?: boolean;
|
|
127
149
|
}) => ReactNode;
|
|
128
150
|
|
|
129
|
-
export type { ArrayFieldDef as A, CustomFieldDef as C, FieldRenderer as F, InspectorFields as I, NumberFieldDef as N, ObjectFieldDef as O, RadioFieldDef as R, SelectFieldDef as S, TextFieldDef as T, InspectorFieldDef as a, FieldTextProps as b, FieldNumberProps as c,
|
|
151
|
+
export type { ArrayFieldDef as A, CustomFieldDef as C, FieldRenderer as F, InspectorFields as I, NumberFieldDef as N, ObjectFieldDef as O, RadioFieldDef as R, SelectFieldDef as S, TextFieldDef as T, InspectorFieldDef as a, FieldTextProps as b, FieldNumberProps as c, FieldSliderProps as d, FieldSelectProps as e, FieldOption as f, CustomFieldRenderProps as g, SlotFieldDef as h, TextareaFieldDef as i };
|
|
@@ -5,7 +5,7 @@ import { EditAccess, SaveConflict } from './edit-lock/index.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* The side-panel widths every editor opens on and drags between (px).
|
|
7
7
|
*
|
|
8
|
-
* Lifted from `efficient-
|
|
8
|
+
* Lifted from `efficient-storefront/components/panel-widths.ts`, where the website
|
|
9
9
|
* editor measured them:
|
|
10
10
|
*
|
|
11
11
|
* RIGHT is 320, not 308 (card 8810). At 308 the settings tab strip was left
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as SaveTone } from './types-
|
|
1
|
+
import { S as SaveTone } from './types-CnRzp9oc.js';
|
|
2
2
|
|
|
3
3
|
/** Time and timers, passed in so a test can run minutes in a millisecond. */
|
|
4
4
|
type AutosaveClock = {
|
|
@@ -76,7 +76,7 @@ declare function createAutosave<T>(options?: AutosaveOptions<T>): Autosave<T>;
|
|
|
76
76
|
*
|
|
77
77
|
* There were three: the campaign designer's `saveStatusLabel`
|
|
78
78
|
* (efficient-admin-portal `src/components/email/autosaveStatus.ts`), the
|
|
79
|
-
* website editor's `autosaveStatusLabel` (efficient-
|
|
79
|
+
* website editor's `autosaveStatusLabel` (efficient-storefront
|
|
80
80
|
* `lib/editor/autosave-status.ts`, which said of the first "a MIRRORED copy …
|
|
81
81
|
* whether that pair should collapse into `efficient-easel` is called out
|
|
82
82
|
* rather than decided here") and the website chrome's own words for its
|
|
@@ -61,7 +61,7 @@ declare const COPY_ALIGN_GLYPHS: Record<CopyAlign, ReactNode>;
|
|
|
61
61
|
* An over-estimate is safe (the words drop a little early); an under-estimate
|
|
62
62
|
* draws a button past the strip's edge.
|
|
63
63
|
*
|
|
64
|
-
* THREE is measured, not guessed — `efficient-
|
|
64
|
+
* THREE is measured, not guessed — `efficient-storefront/components/PartSettingsPanel`
|
|
65
65
|
* had this exact pair as its own `ALIGN_FIT`, produced by
|
|
66
66
|
* `tests/fixtures/segmented-fit.html`. It moves here so the one alignment strip
|
|
67
67
|
* carries its own measurement, and that constant is deleted when the panel
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-easel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.98.0",
|
|
4
4
|
"description": "Efficient Easel: the EFFICIENT editors' shared engine and chrome: the saved document as pure functions, the published renderer, and the editor frame, panels, Layers tree, text grammar and type-in-place box. Published as editor-shell up to 0.66.0 and as efficient-editor up to 0.95.0.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Efficient Pty Ltd",
|
package/dist/chunk-FI23ALVJ.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={accent:"#2563eb",accentTint:"#eff6ff",accentTintStrong:"#dbeafe",accentLine:"#bfdbfe",accentText:"#1d4ed8",accentRing:"rgba(37, 99, 235, 0.25)",accentShadow:"rgba(37, 99, 235, 0.35)",onAccent:"#ffffff",appBg:"#f9fafb",previewBg:"#f3f4f6",panel:"#ffffff",raised:"#ffffff",topbarBg:"#ffffff",frameBg:"#ffffff",hover:"#f3f4f6",hatch:"rgba(0, 0, 0, 0.018)",addcardVeil:"rgba(248, 249, 250, 0.66)",fieldBg:"#ffffff",trackBg:"#f3f4f6",inputBorder:"#d1d5db",fieldText:"#1f2937",fieldPlaceholder:"#9ca3af",knob:"#ffffff",text:"#111827",textStrong:"#030712",textSecondary:"#374151",muted:"#6b7280",icon:"#6b7280",disabled:"#9ca3af",divider:"#e5e7eb",line:"#e5e7eb",btnBorder:"#d1d5db",btnText:"#374151",chipBg:"#f3f4f6",chipFg:"#6b7280",brandSquare:"#111827",deviceBorder:"#e5e7eb",toastBg:"#111827",toggleOff:"#d1d5db",scrollbar:"#d1d5db",scrollbarHover:"#9ca3af",danger:"#dc2626",dangerStrong:"#b91c1c",dangerTint:"#fef2f2",warning:"#b45309",previewTint:"#fef3c7",success:"#15803d",panelRadius:12,rowRadius:8,fieldRadius:6,panelGap:10,panelShadow:"0 1px 2px rgba(0, 0, 0, 0.05), 0 10px 30px rgba(0, 0, 0, 0.06)",topbarShadow:"0 1px 3px rgba(0, 0, 0, 0.06)",raisedShadow:"0 1px 2px rgba(16, 24, 40, 0.1)",font:'-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif'},a={accent:"--es-accent",accentTint:"--es-accent-tint",accentTintStrong:"--es-accent-tint-strong",accentLine:"--es-accent-line",accentText:"--es-accent-text",accentRing:"--es-accent-ring",accentShadow:"--es-accent-shadow",onAccent:"--es-on-accent",appBg:"--es-app-bg",previewBg:"--es-preview-bg",panel:"--es-panel",raised:"--es-raised",topbarBg:"--es-topbar-bg",frameBg:"--es-frame-bg",hover:"--es-hover",hatch:"--es-hatch",addcardVeil:"--es-addcard-veil",fieldBg:"--es-field-bg",trackBg:"--es-track-bg",inputBorder:"--es-input-border",fieldText:"--es-field-text",fieldPlaceholder:"--es-field-placeholder",knob:"--es-knob",text:"--es-text",textStrong:"--es-text-strong",textSecondary:"--es-text-secondary",muted:"--es-muted",icon:"--es-icon",disabled:"--es-disabled",divider:"--es-divider",line:"--es-line",btnBorder:"--es-btn-border",btnText:"--es-btn-text",chipBg:"--es-chip-bg",chipFg:"--es-chip-fg",brandSquare:"--es-brand-square",deviceBorder:"--es-device-border",toastBg:"--es-toast-bg",toggleOff:"--es-toggle-off",scrollbar:"--es-scrollbar",scrollbarHover:"--es-scrollbar-hover",danger:"--es-danger",dangerStrong:"--es-danger-strong",dangerTint:"--es-danger-tint",warning:"--es-warning",previewTint:"--es-preview-tint",success:"--es-success",panelRadius:"--es-panel-radius",rowRadius:"--es-row-radius",fieldRadius:"--es-field-radius",panelGap:"--es-panel-gap",panelShadow:"--es-panel-shadow",topbarShadow:"--es-topbar-shadow",raisedShadow:"--es-raised-shadow",font:"--es-font"};export{a as shellCssVars,e as shellTokens};
|