efficient-easel 0.106.0 → 1.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 (168) hide show
  1. package/README.md +70 -29
  2. package/dist/{LinkPicker-W2Rtxetz.d.ts → LinkPicker-hPEr1MJx.d.ts} +6 -4
  3. package/dist/autosave/index.d.ts +5 -5
  4. package/dist/chrome/chrome.css +50 -273
  5. package/dist/chrome/index.d.ts +61 -56
  6. package/dist/chrome/index.js +1 -1
  7. package/dist/chunk-4GNPKHV4.js +64 -0
  8. package/dist/chunk-5545A3PC.js +4 -0
  9. package/dist/chunk-7SQF6LZL.js +1 -0
  10. package/dist/chunk-BXMXTO36.js +1 -0
  11. package/dist/{chunk-JWMNPRTT.js → chunk-CKEPQNSQ.js} +1 -1
  12. package/dist/{chunk-LY4K2ECT.js → chunk-DJMMTWFP.js} +1 -1
  13. package/dist/chunk-EA2HTX37.js +5 -0
  14. package/dist/{chunk-VINYARYJ.js → chunk-FEK3S6HN.js} +1 -1
  15. package/dist/chunk-FPAVNX3Y.js +6 -0
  16. package/dist/chunk-HMJS344F.js +1 -0
  17. package/dist/chunk-JLTZQ4US.js +1 -0
  18. package/dist/chunk-JMGPPXNQ.js +24 -0
  19. package/dist/chunk-K56YDHYQ.js +1 -0
  20. package/dist/chunk-LOMEH6DG.js +1 -0
  21. package/dist/{chunk-FS5BLARH.js → chunk-MAEXP3KE.js} +1 -1
  22. package/dist/chunk-MJM6SFD3.js +3 -0
  23. package/dist/chunk-NLRW4BGG.js +8 -0
  24. package/dist/chunk-OJAJVH7S.js +5 -0
  25. package/dist/chunk-ONRYLR2D.js +2 -0
  26. package/dist/{chunk-WTMHT7BI.js → chunk-ORR3Q4WV.js} +1 -1
  27. package/dist/chunk-OTEXGJDU.js +5 -0
  28. package/dist/chunk-P2VEMZH5.js +1 -0
  29. package/dist/{chunk-MHKBLPQ2.js → chunk-PT6V53OO.js} +1 -1
  30. package/dist/{chunk-6WH7FA2M.js → chunk-PYCLHOSA.js} +2 -2
  31. package/dist/chunk-Q27BB5ZC.js +14 -0
  32. package/dist/chunk-QLD57GBB.js +6 -0
  33. package/dist/{chunk-PBSEUZD6.js → chunk-QMNML7XH.js} +1 -1
  34. package/dist/chunk-QR4DLZ3P.js +5 -0
  35. package/dist/chunk-TJ7YIRWQ.js +21 -0
  36. package/dist/{chunk-3P6AMTOS.js → chunk-VPFNZ7TB.js} +1 -1
  37. package/dist/chunk-W3XX2CNW.js +16 -0
  38. package/dist/chunk-X6DQWK2C.js +1 -0
  39. package/dist/chunk-XWR5YVA7.js +9 -0
  40. package/dist/chunk-YABL4EWX.js +7 -0
  41. package/dist/chunk-ZNNATBDC.js +1 -0
  42. package/dist/chunk-ZP4G3X44.js +4 -0
  43. package/dist/copy/copy.css +66 -177
  44. package/dist/copy/index.d.ts +0 -2
  45. package/dist/copy/index.js +31 -32
  46. package/dist/drag/drag.css +31 -11
  47. package/dist/drag/index.js +1 -1
  48. package/dist/easel/index.js +1 -1
  49. package/dist/fields/fields.css +35 -304
  50. package/dist/fields/index.d.ts +87 -95
  51. package/dist/fields/index.js +1 -1
  52. package/dist/gold/gold.css +3 -3
  53. package/dist/gold/index.d.ts +6 -5
  54. package/dist/gold/index.js +1 -1
  55. package/dist/index.d.ts +3 -3
  56. package/dist/index.js +1 -1
  57. package/dist/menu/index.d.ts +49 -93
  58. package/dist/menu/index.js +1 -1
  59. package/dist/menu/menu.css +37 -246
  60. package/dist/node-ops/index.d.ts +1 -1
  61. package/dist/panel/index.d.ts +46 -72
  62. package/dist/panel/index.js +17 -18
  63. package/dist/panel/panel.css +143 -372
  64. package/dist/pick/index.d.ts +52 -33
  65. package/dist/pick/index.js +7 -7
  66. package/dist/pick/pick.css +19 -150
  67. package/dist/rail/index.d.ts +48 -90
  68. package/dist/rail/index.js +1 -1
  69. package/dist/rail/rail.css +21 -108
  70. package/dist/screen/components/AddBlockRow.d.ts +8 -2
  71. package/dist/screen/components/AddBlockRow.js +1 -1
  72. package/dist/screen/components/AddChildRow.d.ts +4 -3
  73. package/dist/screen/components/AddChildRow.js +1 -1
  74. package/dist/screen/components/AddSidePanel.js +1 -1
  75. package/dist/screen/components/MediaSidePanel.d.ts +1 -1
  76. package/dist/screen/components/MediaSidePanel.js +1 -1
  77. package/dist/screen/components/NodeContextMenu.d.ts +12 -8
  78. package/dist/screen/components/NodeContextMenu.js +1 -1
  79. package/dist/screen/components/PageEditGuardNotices.js +1 -1
  80. package/dist/screen/components/ScreenChrome.js +1 -1
  81. package/dist/screen/components/ScreenDocumentContext.d.ts +1 -1
  82. package/dist/screen/components/ScreenDocumentContext.js +1 -1
  83. package/dist/screen/components/ScreenMount.d.ts +7 -7
  84. package/dist/screen/components/ScreenMount.js +1 -1
  85. package/dist/screen/components/ScreenStoreProvider.d.ts +7 -7
  86. package/dist/screen/components/ScreenStoreProvider.js +1 -1
  87. package/dist/screen/components/SectionScreenShell.js +16 -16
  88. package/dist/screen/components/SidePanelHead.d.ts +4 -2
  89. package/dist/screen/components/SidePanelHead.js +1 -1
  90. package/dist/screen/components/UiIcon.d.ts +10 -26
  91. package/dist/screen/components/UiIcon.js +2 -1
  92. package/dist/screen/components/panel-widths.js +1 -1
  93. package/dist/screen/components/usePartBridge.d.ts +7 -7
  94. package/dist/screen/components/usePartBridge.js +1 -1
  95. package/dist/screen/index.d.ts +7 -7
  96. package/dist/screen/index.js +1 -1
  97. package/dist/screen/lib/admin-bridge.d.ts +1 -1
  98. package/dist/screen/lib/admin-bridge.js +1 -1
  99. package/dist/screen/lib/chrome-theme.d.ts +20 -12
  100. package/dist/screen/lib/chrome-theme.js +1 -1
  101. package/dist/screen/lib/document-addressing.d.ts +1 -1
  102. package/dist/screen/lib/host-chrome.d.ts +1 -1
  103. package/dist/screen/lib/host.d.ts +1 -1
  104. package/dist/screen/lib/key-scope.js +1 -1
  105. package/dist/screen/lib/links/link-filters.d.ts +1 -1
  106. package/dist/screen/lib/media-panel.d.ts +1 -1
  107. package/dist/screen/lib/media-picker.d.ts +1 -1
  108. package/dist/screen/lib/page-lock.d.ts +1 -1
  109. package/dist/screen/lib/puck/style-clipboard.d.ts +7 -7
  110. package/dist/screen/lib/puck/use-section-ops.js +1 -1
  111. package/dist/screen/lib/screen-parts.d.ts +9 -8
  112. package/dist/screen/lib/screen-parts.js +1 -1
  113. package/dist/screen/lib/section-templates.d.ts +1 -1
  114. package/dist/screen/lib/session-context.d.ts +1 -1
  115. package/dist/screen/lib/session.d.ts +1 -1
  116. package/dist/screen/screen.css +33 -206
  117. package/dist/shell/index.d.ts +134 -118
  118. package/dist/shell/index.js +1 -1
  119. package/dist/shell/shell.css +130 -88
  120. package/dist/strings/catalogue.d.ts +5 -5
  121. package/dist/strings/catalogue.js +1 -1
  122. package/dist/strings/index.d.ts +5 -5
  123. package/dist/strings/index.js +1 -1
  124. package/dist/style-clipboard/index.d.ts +1 -1
  125. package/dist/text-styles/index.d.ts +12 -3
  126. package/dist/text-styles/index.js +33 -38
  127. package/dist/text-styles/text-styles.css +39 -71
  128. package/dist/tree/index.d.ts +49 -44
  129. package/dist/tree/index.js +1 -1
  130. package/dist/tree/tree.css +31 -653
  131. package/dist/{types-DJDBtdB2.d.ts → types-BqGnUVX5.d.ts} +32 -32
  132. package/dist/types-BsyPh6EW.d.ts +99 -0
  133. package/dist/{types-DWS-s9z-.d.ts → types-CsgMwHHa.d.ts} +14 -11
  134. package/dist/{types-CqY85foL.d.ts → types-Dt1CFR1S.d.ts} +4 -2
  135. package/dist/{wordFit-D4S36PvB.d.ts → wordFit-7XpmhcaW.d.ts} +3 -5
  136. package/dist/words-Cl9xMUYY.d.ts +41 -0
  137. package/dist/{words-D_Lnw1Gr.d.ts → words-CvFnwGSr.d.ts} +1 -1
  138. package/package.json +5 -1
  139. package/dist/chunk-2UX75JDP.js +0 -1
  140. package/dist/chunk-37OCQYNX.js +0 -65
  141. package/dist/chunk-3EDSDPIP.js +0 -1
  142. package/dist/chunk-3QVB4AG2.js +0 -3
  143. package/dist/chunk-3WSPDAK2.js +0 -1
  144. package/dist/chunk-5MZ3RNQQ.js +0 -13
  145. package/dist/chunk-5ZBBXZPV.js +0 -6
  146. package/dist/chunk-BZ5ASXOL.js +0 -1
  147. package/dist/chunk-C6BJB5AC.js +0 -2
  148. package/dist/chunk-DX4XELD6.js +0 -18
  149. package/dist/chunk-EOJNJCMJ.js +0 -16
  150. package/dist/chunk-EWVJSRRY.js +0 -6
  151. package/dist/chunk-H24N5TMZ.js +0 -11
  152. package/dist/chunk-I6T4TZ5Q.js +0 -8
  153. package/dist/chunk-KTVH2ZRL.js +0 -15
  154. package/dist/chunk-M7N2V4TG.js +0 -2
  155. package/dist/chunk-MS4QRBJ6.js +0 -5
  156. package/dist/chunk-ND55LTCA.js +0 -5
  157. package/dist/chunk-OWBO4WKA.js +0 -0
  158. package/dist/chunk-P6O363EE.js +0 -6
  159. package/dist/chunk-RW4XBUUW.js +0 -1
  160. package/dist/chunk-UEVTQBM7.js +0 -10
  161. package/dist/chunk-VCQVNPTG.js +0 -22
  162. package/dist/chunk-WZ7TGAAT.js +0 -3
  163. package/dist/chunk-YC4TB3CJ.js +0 -25
  164. package/dist/chunk-Z6SOLDWV.js +0 -1
  165. package/dist/chunk-ZFDCDJNZ.js +0 -16
  166. package/dist/chunk-ZNS7727Y.js +0 -12
  167. package/dist/types-Djdq6Xkd.d.ts +0 -138
  168. package/dist/words-DgHcY5qB.d.ts +0 -33
@@ -1,136 +1,139 @@
1
1
  /**
2
- * Editor SHELL design tokens — the ONE source both editors' chrome converge on.
2
+ * Editor SHELL design tokens — the chrome's names for efficient-shell's tokens.
3
3
  *
4
4
  * Where `rail/tokens.ts` owns the slim icon-rail, this owns the rest of the
5
5
  * editor chrome theme: accent, surfaces, fields, text, lines, chips, named
6
- * chrome literals, danger/warning/success, radii, gap, shadows and font. Every
7
- * value bar one is taken verbatim from the storefront editor's `--sf-*` block
8
- * (`efficient-storefront/components/storefront-editor.css`), the visual reference the
9
- * campaign designer (`--cd-*`) and the storefront's own TS mirror (`tk`) had
10
- * each re-copied. After card 66024 they all resolve to these values instead.
11
- * The one exception is `success`, which that block has no counterpart for; see
12
- * its own note below.
6
+ * chrome literals, danger/warning/success, radii, gap, shadows and font.
7
+ *
8
+ * NOTHING HERE IS A VALUE OF OUR OWN (harness UI-24, efficient-harness#117):
9
+ * every colour, radius and the typeface is a `var()` of an efficient-shell
10
+ * token (`efficient-shell/ui.css`), or — where the shell has no token for the
11
+ * role yet, marked SHELL GAP below — a `color-mix()` of shell tokens. Up to
12
+ * 0.106.0 these were hex values mirrored from the storefront editor's `--sf-*`
13
+ * block, light only; now the editor follows the shell's theme, dark included,
14
+ * and its accent themes. The one literal colour is `frameBg`, which is canvas
15
+ * (the page's paper), not chrome.
13
16
  *
14
17
  * Exposed BOTH ways, per the same value (mirrors the rail):
15
- * - `shellTokens` — this JS object, for code that needs the numbers/colours
16
- * (e.g. the storefront's `floating-editor/tokens.ts` inline-style mirror);
18
+ * - `shellTokens` — this JS object, for code that needs the values in an
19
+ * inline style (they are CSS expressions, so they resolve only where the
20
+ * host has loaded the shell's CSS — which it must, see README);
17
21
  * - `shell.css` — the stylesheet, which declares the identical values as CSS
18
22
  * custom properties on `.es-editor` (names listed in `shellCssVars`).
19
23
  *
20
24
  * Numeric fields are pixel magnitudes (unitless) so they compose in code; the
21
- * CSS applies the `px`. Both editing surfaces are LIGHT only (no dark mode), so
22
- * there is a single palette here — no dark counterpart.
25
+ * CSS applies the `px`. Only spacing is numeric now.
23
26
  */
24
27
  declare const shellTokens: {
25
- /** `--es-accent` — blue-600. */
26
- readonly accent: "#2563eb";
27
- /** `--es-accent-tint` — blue-50. */
28
- readonly accentTint: "#eff6ff";
29
- /** `--es-accent-tint-strong` — blue-100. */
30
- readonly accentTintStrong: "#dbeafe";
31
- /** `--es-accent-line` — blue-200: a quiet accent hairline (an empty slot's outline). */
32
- readonly accentLine: "#bfdbfe";
33
- /** `--es-accent-text` — blue-700. */
34
- readonly accentText: "#1d4ed8";
35
- /** `--es-accent-ring` — focus ring wash. */
36
- readonly accentRing: "rgba(37, 99, 235, 0.25)";
37
- /** `--es-accent-shadow` — accent button shadow. */
38
- readonly accentShadow: "rgba(37, 99, 235, 0.35)";
39
- /** `--es-on-accent` — text/icon over the solid accent. */
40
- readonly onAccent: "#ffffff";
41
- /** `--es-app-bg` — gray-50, sunken canvas. */
42
- readonly appBg: "#f9fafb";
43
- /** `--es-preview-bg` — gray-100, preview well. */
44
- readonly previewBg: "#f3f4f6";
45
- /** `--es-panel` — raised cards / panels. */
46
- readonly panel: "#ffffff";
28
+ /** `--es-accent` — the custom accent (`--accent-600`, stamped by the shell's
29
+ * `useTheme()`), else the shell's themed primary fill (`--submit-bg`, which
30
+ * the pink / green / grey themes remap). */
31
+ readonly accent: "var(--accent-600, var(--submit-bg))";
32
+ /** `--es-accent-tint` — a wash of the accent on the surface. SHELL GAP: the
33
+ * shell has no accent-soft token; mixed from shell tokens until it does. */
34
+ readonly accentTint: "color-mix(in srgb, var(--es-accent) 10%, var(--surface))";
35
+ /** `--es-accent-tint-strong` — a stronger wash. SHELL GAP, as above. */
36
+ readonly accentTintStrong: "color-mix(in srgb, var(--es-accent) 18%, var(--surface))";
37
+ /** `--es-accent-line` — a quiet accent hairline (an empty slot's outline). SHELL GAP. */
38
+ readonly accentLine: "color-mix(in srgb, var(--es-accent) 32%, var(--surface))";
39
+ /** `--es-accent-text` — accent as words: darker than the fill on light,
40
+ * lighter on dark, because it leans on the ramp's strongest ink. SHELL GAP. */
41
+ readonly accentText: "color-mix(in srgb, var(--es-accent) 65%, var(--ink-strongest))";
42
+ /** `--es-accent-ring` — the shell's focus ring wash. */
43
+ readonly accentRing: "var(--rosh-focus-ring)";
44
+ /** `--es-accent-shadow` — accent button shadow. SHELL GAP. */
45
+ readonly accentShadow: "color-mix(in srgb, var(--es-accent) 35%, transparent)";
46
+ /** `--es-on-accent` — ink on a solid fill. SHELL GAP: the shell's nearest is
47
+ * the status tier's `--status-on-solid` (white in both themes). */
48
+ readonly onAccent: "var(--status-on-solid)";
49
+ /** `--es-app-bg` — the sunken ground behind the panels. */
50
+ readonly appBg: "var(--surface-sunken)";
51
+ /** `--es-preview-bg` — the well round the canvas. */
52
+ readonly previewBg: "var(--surface-raised)";
53
+ /** `--es-panel` — panels. */
54
+ readonly panel: "var(--surface)";
47
55
  /** `--es-raised` — a lifted surface. NOT the active chip since card 66302. */
48
- readonly raised: "#ffffff";
56
+ readonly raised: "var(--surface)";
49
57
  /** `--es-topbar-bg`. */
50
- readonly topbarBg: "#ffffff";
51
- /** `--es-frame-bg` — device "paper" behind the preview iframe. */
58
+ readonly topbarBg: "var(--surface)";
59
+ /** `--es-frame-bg` — the paper behind the preview iframe. CANVAS, not chrome:
60
+ * it is the page's own white in every theme (UI-24 leaves output alone). */
52
61
  readonly frameBg: "#ffffff";
53
- /** `--es-hover` — gray-100 row / icon hover. */
54
- readonly hover: "#f3f4f6";
62
+ /** `--es-hover` — row / icon hover. */
63
+ readonly hover: "var(--surface-raised)";
55
64
  /** `--es-hatch` — 45° upload-slot texture. */
56
- readonly hatch: "rgba(0, 0, 0, 0.018)";
65
+ readonly hatch: "color-mix(in srgb, var(--ink-strongest) 2%, transparent)";
57
66
  /** `--es-addcard-veil` — add-section card hover wash. */
58
- readonly addcardVeil: "rgba(248, 249, 250, 0.66)";
67
+ readonly addcardVeil: "color-mix(in srgb, var(--surface-sunken) 66%, transparent)";
59
68
  /** `--es-field-bg`. */
60
- readonly fieldBg: "#ffffff";
61
- /** `--es-track-bg` — gray-100 segmented / search track. */
62
- readonly trackBg: "#f3f4f6";
63
- /** `--es-input-border` — gray-300. */
64
- readonly inputBorder: "#d1d5db";
65
- /** `--es-field-text` — gray-800. */
66
- readonly fieldText: "#1f2937";
67
- /** `--es-field-placeholder` — gray-400. */
68
- readonly fieldPlaceholder: "#9ca3af";
69
- /** `--es-knob` — toggle knob. */
70
- readonly knob: "#ffffff";
71
- /** `--es-text` — gray-900. */
72
- readonly text: "#111827";
73
- /** `--es-text-strong` — gray-950 active labels. */
74
- readonly textStrong: "#030712";
75
- /** `--es-text-secondary` — gray-700. */
76
- readonly textSecondary: "#374151";
77
- /** `--es-muted` — gray-500. */
78
- readonly muted: "#6b7280";
79
- /** `--es-icon` — gray-500 icon buttons. */
80
- readonly icon: "#6b7280";
81
- /** `--es-disabled` — gray-400 disabled / faint glyphs. */
82
- readonly disabled: "#9ca3af";
83
- /** `--es-divider` — gray-200. */
84
- readonly divider: "#e5e7eb";
85
- /** `--es-line` — gray-200 hairlines. */
86
- readonly line: "#e5e7eb";
87
- /** `--es-btn-border` — gray-300. */
88
- readonly btnBorder: "#d1d5db";
89
- /** `--es-btn-text` — gray-700. */
90
- readonly btnText: "#374151";
91
- /** `--es-chip-bg` — gray-100. */
92
- readonly chipBg: "#f3f4f6";
93
- /** `--es-chip-fg` — gray-500. */
94
- readonly chipFg: "#6b7280";
95
- /** `--es-brand-square` — gray-900 wordmark square. */
96
- readonly brandSquare: "#111827";
97
- /** `--es-device-border` — gray-200 tablet/mobile frame. */
98
- readonly deviceBorder: "#e5e7eb";
99
- /** `--es-toast-bg` — gray-900 dark chip / seam pill. */
100
- readonly toastBg: "#111827";
101
- /** `--es-toggle-off` — gray-300 toggle track. */
102
- readonly toggleOff: "#d1d5db";
103
- /** `--es-scrollbar` — gray-300. */
104
- readonly scrollbar: "#d1d5db";
105
- /** `--es-scrollbar-hover` — gray-400. */
106
- readonly scrollbarHover: "#9ca3af";
107
- /** `--es-danger` — red-600. */
108
- readonly danger: "#dc2626";
109
- /** `--es-danger-strong` — red-700. */
110
- readonly dangerStrong: "#b91c1c";
111
- /** `--es-danger-tint` — red-50. */
112
- readonly dangerTint: "#fef2f2";
113
- /** `--es-warning` — amber-700. */
114
- readonly warning: "#b45309";
115
- /** `--es-preview-tint` — amber-100 "Preview" pill. */
116
- readonly previewTint: "#fef3c7";
117
- /**
118
- * `--es-success` — green-700. THE ONE VALUE HERE WITH NO `--sf-*` BEHIND IT:
119
- * the storefront editor's block has a red and an amber and no green, and card
120
- * 8802.g needs one for a green tick. So it is picked to sit with the block
121
- * rather than invented next to it — the same Tailwind ramp every other colour
122
- * in this file comes from, at the 700 step `--es-warning` already sits on.
123
- * 700 and not 600 for the reason amber went there: it is the darkest step
124
- * still plainly the hue, and it clears WCAG AA (5.0:1) on the shell's white
125
- * panels, so a tick may carry a label without needing a second token.
126
- */
127
- readonly success: "#15803d";
128
- /** `--es-panel-radius`. */
129
- readonly panelRadius: 12;
130
- /** `--es-row-radius`. */
131
- readonly rowRadius: 8;
132
- /** `--es-field-radius`. */
133
- readonly fieldRadius: 6;
69
+ readonly fieldBg: "var(--surface)";
70
+ /** `--es-track-bg` — segmented / search track. */
71
+ readonly trackBg: "var(--surface-raised)";
72
+ /** `--es-input-border`. */
73
+ readonly inputBorder: "var(--line-strong)";
74
+ /** `--es-field-text`. */
75
+ readonly fieldText: "var(--ink-strong)";
76
+ /** `--es-field-placeholder`. */
77
+ readonly fieldPlaceholder: "var(--ink-faintest)";
78
+ /** `--es-knob` — toggle knob (the shell's Switch draws it `bg-white`, which
79
+ * its dark theme turns into `--surface`). */
80
+ readonly knob: "var(--surface)";
81
+ /** `--es-text`. */
82
+ readonly text: "var(--ink-strongest)";
83
+ /** `--es-text-strong` — active labels (the ramp has nothing past strongest). */
84
+ readonly textStrong: "var(--ink-strongest)";
85
+ /** `--es-text-secondary`. */
86
+ readonly textSecondary: "var(--ink)";
87
+ /** `--es-muted`. */
88
+ readonly muted: "var(--ink-faint)";
89
+ /** `--es-icon` — icon buttons. */
90
+ readonly icon: "var(--ink-faint)";
91
+ /** `--es-disabled` — disabled / faint glyphs. */
92
+ readonly disabled: "var(--ink-faintest)";
93
+ /** `--es-divider`. */
94
+ readonly divider: "var(--line)";
95
+ /** `--es-line` — hairlines. */
96
+ readonly line: "var(--line)";
97
+ /** `--es-btn-border`. */
98
+ readonly btnBorder: "var(--line-strong)";
99
+ /** `--es-btn-text`. */
100
+ readonly btnText: "var(--ink)";
101
+ /** `--es-chip-bg`. */
102
+ readonly chipBg: "var(--surface-raised)";
103
+ /** `--es-chip-fg`. */
104
+ readonly chipFg: "var(--ink-faint)";
105
+ /** `--es-brand-square` — wordmark square. */
106
+ readonly brandSquare: "var(--ink-strongest)";
107
+ /** `--es-device-border` — tablet/mobile frame. */
108
+ readonly deviceBorder: "var(--line)";
109
+ /** `--es-toast-bg` — dark chip / seam pill, white ink on it in both themes:
110
+ * the shell's solid status tier (`--status-draft-solid`, 10.3:1 with white). */
111
+ readonly toastBg: "var(--status-draft-solid)";
112
+ /** `--es-toggle-off` — toggle track (the shell's Switch: `bg-gray-300`). */
113
+ readonly toggleOff: "var(--line-strong)";
114
+ /** `--es-scrollbar`. */
115
+ readonly scrollbar: "var(--line-strong)";
116
+ /** `--es-scrollbar-hover`. */
117
+ readonly scrollbarHover: "var(--ink-faintest)";
118
+ /** `--es-danger` — danger words and edges: the status tier's ink, which
119
+ * clears AA on the surface and on its own wash, light and dark. */
120
+ readonly danger: "var(--status-danger-soft-ink)";
121
+ /** `--es-danger-strong` — danger words on `--es-danger-tint`. */
122
+ readonly dangerStrong: "var(--status-danger-soft-ink)";
123
+ /** `--es-danger-tint` — the danger wash. */
124
+ readonly dangerTint: "var(--status-danger-soft)";
125
+ /** `--es-warning` — the "Preview" pill's words and edge (amber: pending). */
126
+ readonly warning: "var(--status-pending-soft-ink)";
127
+ /** `--es-preview-tint` — the "Preview" pill's wash. */
128
+ readonly previewTint: "var(--status-pending-soft)";
129
+ /** `--es-success` — a green tick and its label. */
130
+ readonly success: "var(--status-success-soft-ink)";
131
+ /** `--es-panel-radius` — 12px, `--radius-xl`. */
132
+ readonly panelRadius: "var(--radius-xl)";
133
+ /** `--es-row-radius` — 8px, `--radius-lg`. */
134
+ readonly rowRadius: "var(--radius-lg)";
135
+ /** `--es-field-radius` — 6px, `--radius-md`. */
136
+ readonly fieldRadius: "var(--radius-md)";
134
137
  /** `--es-panel-gap` — inter-pane gutter + outer frame padding, ONE token.
135
138
  * 12 since the one spacing scale (was 10, which is not a step). */
136
139
  readonly panelGap: 12;
@@ -158,10 +161,23 @@ declare const shellTokens: {
158
161
  * has to read across 3px of track without looking like a second panel.
159
162
  */
160
163
  readonly raisedShadow: "0 1px 2px rgba(16, 24, 40, 0.1)";
161
- /** `--es-font` — system sans stack. */
162
- readonly font: "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif";
164
+ /** `--es-font` — the shell's face. */
165
+ readonly font: "var(--font-sans)";
163
166
  };
164
167
  type ShellTokens = typeof shellTokens;
168
+ /**
169
+ * The tokens `shell.css` re-points under the shell's dark theme
170
+ * (`:is([data-theme="dark"], .dark) .es-editor`). Shell tokens only: the shell
171
+ * draws a track and a chip's ground with `bg-gray-100`, and its dark theme
172
+ * remaps that utility to `--surface` rather than `--surface-raised`, so these
173
+ * three follow it. Code that reads `shellTokens` for an inline style under a
174
+ * dark shell reads these over it.
175
+ */
176
+ declare const shellDarkTokens: {
177
+ readonly previewBg: "var(--surface)";
178
+ readonly trackBg: "var(--surface)";
179
+ readonly chipBg: "var(--surface)";
180
+ };
165
181
  /**
166
182
  * The one spacing scale, smallest first (owner ruling, 2026-10-02): the six
167
183
  * `space*` tokens above as a list, for code that must snap a number to it.
@@ -176,4 +192,4 @@ declare const SPACING_SCALE: readonly [2, 4, 8, 12, 16, 32];
176
192
  */
177
193
  declare const shellCssVars: Record<keyof ShellTokens, string>;
178
194
 
179
- export { SPACING_SCALE, type ShellTokens, shellCssVars, shellTokens };
195
+ export { SPACING_SCALE, type ShellTokens, shellCssVars, shellDarkTokens, shellTokens };
@@ -1 +1 @@
1
- export{SPACING_SCALE,shellCssVars,shellTokens}from"../chunk-2UX75JDP.js";
1
+ export{SPACING_SCALE,shellCssVars,shellDarkTokens,shellTokens}from"../chunk-HMJS344F.js";
@@ -1,115 +1,131 @@
1
1
  /*
2
- * efficient-easel — shell chrome tokens.
2
+ * efficient-easel — shell chrome tokens, resolved to efficient-shell (UI-24).
3
3
  *
4
- * The values here mirror `shellTokens` in tokens.ts one-for-one (both trace back
5
- * to the storefront editor's `--sf-*` block — the visual reference). They are
6
- * declared as custom properties ON `.es-editor`, not on `:root`, so importing
7
- * this stylesheet themes ONLY an editor root and never leaks variables into the
8
- * host page (the campaign designer renders INSIDE the admin DOM, so this must
9
- * not touch the surrounding app).
4
+ * Every colour, radius and the typeface below is an ALIAS of an efficient-shell
5
+ * token (`efficient-shell/ui.css`: the neutral ramp `--surface*` / `--ink*` /
6
+ * `--line*`, the `--status-*` tiers, `--submit-bg`, `--radius-*`,
7
+ * `--font-sans`). Harness UI-24 (efficient-harness#117, 2026-10-10): there is
8
+ * one UI kit and it is the shell, so this package keeps no palette, radii or
9
+ * typeface of its own — and it no longer mirrors the storefront editor's
10
+ * `--sf-*` block either (that was the rule up to 0.106.0). A value is never
11
+ * invented here: where the shell has no token for a role, the role is mixed
12
+ * from shell tokens with `color-mix()` and listed as a gap for the shell to
13
+ * fold in (efficient-easel issue 199).
10
14
  *
11
- * Both editors add the `es-editor` class to their chrome root and alias their
12
- * own `--sf-*` / `--cd-*` names onto these — e.g. `--sf-accent: var(--es-accent)`
13
- * — so the light values live ONCE, here. Re-theme by overriding any `--es-*` var
14
- * on or above the editor root.
15
+ * ⚠️ THE HOST MUST LOAD THE SHELL'S CSS FIRST — `efficient-shell/ui.css` (or
16
+ * `styles.css`, which includes it) — or none of these resolve. There are no
17
+ * hex fallbacks on purpose: a fallback is a second palette.
18
+ * `tests/es-tokens-resolve-to-shell.test.ts` holds every colour to a shell
19
+ * token.
15
20
  *
16
- * LIGHT only: both editing surfaces always render light (no dark mode), so there
17
- * is no dark counterpart block — do not add one.
21
+ * THEME. The editor follows the shell's theme, dark included: the shell
22
+ * stamps `data-theme="dark"` (or the `.dark` class) on `<html>` and swaps its
23
+ * ramp there; these aliases resolve under `.es-editor`, so they follow. The
24
+ * ACCENT follows the shell's accent themes too: `--accent-600` is what
25
+ * `useTheme()` stamps for a custom accent, and `--submit-bg` is the fill the
26
+ * pink / green / grey themes remap.
18
27
  *
28
+ * The one dark block below holds no value of its own. The shell draws a
29
+ * control's track and a chip's ground with `bg-gray-100`, and its dark theme
30
+ * remaps THAT utility to `--surface`, not to `--surface-raised` (its
31
+ * `Segmented` says so); three roles here are that utility, so they move the
32
+ * way the shell moves it. Without it a chosen chip in the accent sits on a
33
+ * track it does not stand off (2.4:1, `tests/panel-chip-contrast.test.ts`).
34
+ *
35
+ * THE CANVAS IS OUTPUT, NOT CHROME. `--es-frame-bg` (the paper behind the
36
+ * preview iframe) stays the page's white: what is drawn there is the website or
37
+ * the email, which follows harness 52-brand-surface.md and keeps its own
38
+ * colours in every theme. The shadows are black at an alpha, which composites
39
+ * on either theme; the shell has no elevation token for a flat panel yet.
40
+ *
41
+ * Declared ON `.es-editor`, not on `:root`, so importing this sheet names
42
+ * nothing in the host page outside an editor root (the campaign designer
43
+ * renders INSIDE the admin DOM). Both editors alias their `--sf-*` / `--cd-*`
44
+ * names onto these; re-theme by overriding any `--es-*` var on or above the
45
+ * editor root, or — better — the shell token it reads.
19
46
  *
20
47
  * ⛔ CUSTOM PROPERTIES ONLY IN THIS BLOCK. Never a paint property.
21
48
  *
22
49
  * `.es-editor` is not this package's own element — it is the class each editor
23
50
  * puts on ITS OWN chrome root, and the campaign designer puts it on a root that
24
- * lives INSIDE the admin portal's DOM (card 66024 made that the mechanism:
25
- * `CampaignDesigner.tsx` adds the class and `campaignBlocks.css` aliases its
26
- * `--cd-*` onto these values). A custom property here is inert until something
27
- * reads it. A `background`, a `padding`, a `font` — anything that PAINTS — is
28
- * not: it applies to that root the moment this sheet is imported, in every
29
- * editor that imports it, and in the admin portal's own document.
30
- *
31
- * ⚠️ This sheet is the one that matters most for that, because it is the one the
32
- * admin portal actually imports (`CampaignDesigner.tsx`, since card 66024).
33
- *
34
- * Audited 2026-09-02 across every sheet here that opens an `.es-editor` block,
35
- * and the honest number is zero:
36
- *
37
- * shell.css 73 declarations, 73 custom, 0 paint (6 spacing steps added 2026-10-06)
38
- * panel.css 11 declarations, 11 custom, 0 paint
39
- * menu.css 7 declarations, 7 custom, 0 paint
51
+ * lives INSIDE the admin portal's DOM. A custom property here is inert until
52
+ * something reads it. A `background`, a `padding`, a `font` — anything that
53
+ * PAINTS — is not: it applies to that root the moment this sheet is imported.
54
+ * Nothing enforces this — if you are adding a declaration here, you are the
55
+ * check.
40
56
  *
41
- * ⚠️ Nothing enforces this — a rule with no test behind it. If you are adding a
42
- * declaration here, you are the check.
43
- * Import once from a client entry / global stylesheet:
57
+ * Import once from a client entry / global stylesheet, AFTER the shell's:
58
+ * import 'efficient-shell/ui.css';
44
59
  * import 'efficient-easel/shell.css';
45
60
  */
46
61
 
47
62
  .es-editor {
48
- /* — accent (efficient-shell blue) — */
49
- --es-accent: #2563eb;
50
- --es-accent-tint: #eff6ff;
51
- --es-accent-tint-strong: #dbeafe;
52
- --es-accent-line: #bfdbfe;
53
- --es-accent-text: #1d4ed8;
54
- --es-accent-ring: rgba(37, 99, 235, 0.25);
55
- --es-accent-shadow: rgba(37, 99, 235, 0.35);
56
- --es-on-accent: #ffffff;
63
+ /* — accent: the shell's (custom accent, else the themed primary fill) — */
64
+ --es-accent: var(--accent-600, var(--submit-bg));
65
+ --es-accent-tint: color-mix(in srgb, var(--es-accent) 10%, var(--surface));
66
+ --es-accent-tint-strong: color-mix(in srgb, var(--es-accent) 18%, var(--surface));
67
+ --es-accent-line: color-mix(in srgb, var(--es-accent) 32%, var(--surface));
68
+ --es-accent-text: color-mix(in srgb, var(--es-accent) 65%, var(--ink-strongest));
69
+ --es-accent-ring: var(--rosh-focus-ring);
70
+ --es-accent-shadow: color-mix(in srgb, var(--es-accent) 35%, transparent);
71
+ --es-on-accent: var(--status-on-solid);
57
72
 
58
- /* — surfaces (cool gray ramp) — */
59
- --es-app-bg: #f9fafb;
60
- --es-preview-bg: #f3f4f6;
61
- --es-panel: #ffffff;
62
- --es-raised: #ffffff;
63
- --es-topbar-bg: #ffffff;
73
+ /* — surfaces: the shell's neutral ramp — */
74
+ --es-app-bg: var(--surface-sunken);
75
+ --es-preview-bg: var(--surface-raised);
76
+ --es-panel: var(--surface);
77
+ --es-raised: var(--surface);
78
+ --es-topbar-bg: var(--surface);
79
+ /* The canvas's paper: OUTPUT, not chrome — the page's own white. */
64
80
  --es-frame-bg: #ffffff;
65
- --es-hover: #f3f4f6;
66
- --es-hatch: rgba(0, 0, 0, 0.018);
67
- --es-addcard-veil: rgba(248, 249, 250, 0.66);
81
+ --es-hover: var(--surface-raised);
82
+ --es-hatch: color-mix(in srgb, var(--ink-strongest) 2%, transparent);
83
+ --es-addcard-veil: color-mix(in srgb, var(--surface-sunken) 66%, transparent);
68
84
 
69
85
  /* — fields — */
70
- --es-field-bg: #ffffff;
71
- --es-track-bg: #f3f4f6;
72
- --es-input-border: #d1d5db;
73
- --es-field-text: #1f2937;
74
- --es-field-placeholder: #9ca3af;
75
- --es-knob: #ffffff;
86
+ --es-field-bg: var(--surface);
87
+ --es-track-bg: var(--surface-raised);
88
+ --es-input-border: var(--line-strong);
89
+ --es-field-text: var(--ink-strong);
90
+ --es-field-placeholder: var(--ink-faintest);
91
+ --es-knob: var(--surface);
76
92
 
77
93
  /* — text — */
78
- --es-text: #111827;
79
- --es-text-strong: #030712;
80
- --es-text-secondary: #374151;
81
- --es-muted: #6b7280;
82
- --es-icon: #6b7280;
83
- --es-disabled: #9ca3af;
94
+ --es-text: var(--ink-strongest);
95
+ --es-text-strong: var(--ink-strongest);
96
+ --es-text-secondary: var(--ink);
97
+ --es-muted: var(--ink-faint);
98
+ --es-icon: var(--ink-faint);
99
+ --es-disabled: var(--ink-faintest);
84
100
 
85
101
  /* — lines / chips / buttons — */
86
- --es-divider: #e5e7eb;
87
- --es-line: #e5e7eb;
88
- --es-btn-border: #d1d5db;
89
- --es-btn-text: #374151;
90
- --es-chip-bg: #f3f4f6;
91
- --es-chip-fg: #6b7280;
102
+ --es-divider: var(--line);
103
+ --es-line: var(--line);
104
+ --es-btn-border: var(--line-strong);
105
+ --es-btn-text: var(--ink);
106
+ --es-chip-bg: var(--surface-raised);
107
+ --es-chip-fg: var(--ink-faint);
92
108
 
93
109
  /* — named chrome literals — */
94
- --es-brand-square: #111827;
95
- --es-device-border: #e5e7eb;
96
- --es-toast-bg: #111827;
97
- --es-toggle-off: #d1d5db;
98
- --es-scrollbar: #d1d5db;
99
- --es-scrollbar-hover: #9ca3af;
110
+ --es-brand-square: var(--ink-strongest);
111
+ --es-device-border: var(--line);
112
+ --es-toast-bg: var(--status-draft-solid);
113
+ --es-toggle-off: var(--line-strong);
114
+ --es-scrollbar: var(--line-strong);
115
+ --es-scrollbar-hover: var(--ink-faintest);
100
116
 
101
- /* — danger / warning / success (shell red / amber / green) — */
102
- --es-danger: #dc2626;
103
- --es-danger-strong: #b91c1c;
104
- --es-danger-tint: #fef2f2;
105
- --es-warning: #b45309;
106
- --es-preview-tint: #fef3c7;
107
- --es-success: #15803d;
117
+ /* — danger / warning / success: the shell's status tiers — */
118
+ --es-danger: var(--status-danger-soft-ink);
119
+ --es-danger-strong: var(--status-danger-soft-ink);
120
+ --es-danger-tint: var(--status-danger-soft);
121
+ --es-warning: var(--status-pending-soft-ink);
122
+ --es-preview-tint: var(--status-pending-soft);
123
+ --es-success: var(--status-success-soft-ink);
108
124
 
109
- /* — radii / shape / gap — */
110
- --es-panel-radius: 12px;
111
- --es-row-radius: 8px;
112
- --es-field-radius: 6px;
125
+ /* — radii: the shell's scale / gap — */
126
+ --es-panel-radius: var(--radius-xl);
127
+ --es-row-radius: var(--radius-lg);
128
+ --es-field-radius: var(--radius-md);
113
129
  --es-panel-gap: 12px;
114
130
 
115
131
  /* — spacing: ONE scale for every panel (owner ruling, 2026-10-02) —
@@ -122,11 +138,37 @@
122
138
  --es-space-16: 16px;
123
139
  --es-space-32: 32px;
124
140
 
125
- /* — shadows — */
141
+ /* — shadows: black at an alpha (no shell elevation token yet) — */
126
142
  --es-panel-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 10px 30px rgba(0, 0, 0, 0.06);
127
143
  --es-topbar-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
128
144
  --es-raised-shadow: 0 1px 2px rgba(16, 24, 40, 0.1);
129
145
 
130
- /* — type — */
131
- --es-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
146
+ /* — type: the shell's face — */
147
+ --es-font: var(--font-sans);
148
+ }
149
+
150
+ /* Dark: the three `bg-gray-100` roles, re-pointed exactly as the shell's dark
151
+ theme re-points `.bg-gray-100` (to `--surface`). Shell tokens only. */
152
+ :is([data-theme="dark"], .dark) .es-editor {
153
+ --es-preview-bg: var(--surface);
154
+ --es-track-bg: var(--surface);
155
+ --es-chip-bg: var(--surface);
156
+ }
157
+
158
+ /* ── Visually hidden ─────────────────────────────────────────────────────── */
159
+ /* Words a control is named by but does not draw (since efficient-easel issue 199
160
+ step 4, the shell's controls take their name from their content): the
161
+ device switch's names beside its glyphs, a drawn segment's name, a tab's
162
+ word where the panel is too narrow for it. Hidden from sight, never with
163
+ `display: none`, so they stay the control's accessible name. The one rule
164
+ of this sheet that is not a token: every easel sheet's markup may use it. */
165
+ .es-vh {
166
+ position: absolute;
167
+ width: 1px;
168
+ height: 1px;
169
+ padding: 0;
170
+ overflow: hidden;
171
+ clip: rect(0, 0, 0, 0);
172
+ white-space: nowrap;
173
+ border: 0;
132
174
  }
@@ -1,4 +1,4 @@
1
- import { S as SaveWords } from '../words-D_Lnw1Gr.js';
1
+ import { S as SaveWords } from '../words-CvFnwGSr.js';
2
2
  import { N as NoticeWords, C as ChromeWords } from '../words-AHHfiaRY.js';
3
3
  import { C as CopyWords } from '../words-XH0TvZPg.js';
4
4
  import { D as DragWords } from '../words-BDignMl_.js';
@@ -11,10 +11,10 @@ import { ScreenWords } from '../screen/words.js';
11
11
  export { ScreenAddWords } from '../screen/words.js';
12
12
  import { S as StyleClipboardWords } from '../words-CnnHb9jo.js';
13
13
  import { T as TextStylesWords } from '../words-CRYvAiHX.js';
14
- import { T as TreeWords } from '../words-DgHcY5qB.js';
15
- import '../types-CqY85foL.js';
16
- import '../types-DWS-s9z-.js';
17
- import '../wordFit-D4S36PvB.js';
14
+ import { T as TreeWords } from '../words-Cl9xMUYY.js';
15
+ import '../types-Dt1CFR1S.js';
16
+ import '../types-CsgMwHHa.js';
17
+ import '../wordFit-7XpmhcaW.js';
18
18
  import 'react';
19
19
  import '../panelWidths-D9hTLR25.js';
20
20
  import '../engine-DBxp_v6B.js';
@@ -1 +1 @@
1
- export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-Z6SOLDWV.js";import"../chunk-M6F6LS3H.js";import"../chunk-6WY6ZXJG.js";import"../chunk-WK3AFPXY.js";import"../chunk-E2O2MRZR.js";import"../chunk-AELNNAFM.js";import"../chunk-3EDSDPIP.js";import"../chunk-QTLAVDJE.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";
1
+ export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-ZNNATBDC.js";import"../chunk-M6F6LS3H.js";import"../chunk-ZAOM6PFH.js";import"../chunk-6WY6ZXJG.js";import"../chunk-E2O2MRZR.js";import"../chunk-AELNNAFM.js";import"../chunk-K56YDHYQ.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-FPOKPNO4.js";import"../chunk-546BBOPE.js";import"../chunk-O2NLQBFX.js";
@@ -10,16 +10,16 @@ export { LockWords } from '../edit-lock/index.js';
10
10
  export { N as NodeMenuWords } from '../words-DMG4dYq2.js';
11
11
  export { P as PanelWords } from '../words-BGrHZAJJ.js';
12
12
  export { P as PickWords } from '../words-is_Vy6hn.js';
13
- export { S as SaveWords } from '../words-D_Lnw1Gr.js';
13
+ export { S as SaveWords } from '../words-CvFnwGSr.js';
14
14
  export { ScreenAddWords, ScreenWords } from '../screen/words.js';
15
15
  export { S as StyleClipboardWords } from '../words-CnnHb9jo.js';
16
16
  export { T as TextStylesWords } from '../words-CRYvAiHX.js';
17
- export { T as TreeWords } from '../words-DgHcY5qB.js';
17
+ export { T as TreeWords } from '../words-Cl9xMUYY.js';
18
18
  import '../markup/index.js';
19
19
  import '../buckets-CuLM47h9.js';
20
- import '../types-CqY85foL.js';
21
- import '../types-DWS-s9z-.js';
22
- import '../wordFit-D4S36PvB.js';
20
+ import '../types-Dt1CFR1S.js';
21
+ import '../types-CsgMwHHa.js';
22
+ import '../wordFit-7XpmhcaW.js';
23
23
  import '../panelWidths-D9hTLR25.js';
24
24
  import '../engine-DBxp_v6B.js';
25
25
 
@@ -1,2 +1,2 @@
1
- import{DEFAULT_EASEL_STRINGS as r,mergeEaselStrings as n}from"../chunk-Z6SOLDWV.js";export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-Z6SOLDWV.js";import"../chunk-M6F6LS3H.js";import"../chunk-6WY6ZXJG.js";import"../chunk-WK3AFPXY.js";import"../chunk-E2O2MRZR.js";import"../chunk-AELNNAFM.js";import"../chunk-3EDSDPIP.js";import"../chunk-QTLAVDJE.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__ */
1
+ import{DEFAULT_EASEL_STRINGS as r,mergeEaselStrings as n}from"../chunk-ZNNATBDC.js";export{DEFAULT_EASEL_STRINGS,mergeEaselStrings}from"../chunk-ZNNATBDC.js";import"../chunk-M6F6LS3H.js";import"../chunk-ZAOM6PFH.js";import"../chunk-6WY6ZXJG.js";import"../chunk-E2O2MRZR.js";import"../chunk-AELNNAFM.js";import"../chunk-K56YDHYQ.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-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
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};