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,6 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { P as PickWords } from '../words-is_Vy6hn.js';
4
+ export { Hsv, hexToHsv, hsvToHex } from 'efficient-shell/ui';
4
5
 
5
6
  /** One colour the site's theme names — offered first, by name. */
6
7
  type ThemeColour = {
@@ -59,18 +60,31 @@ type ColourPickerProps = {
59
60
  };
60
61
  /**
61
62
  * ONE COLOUR ROW (blueprint step 4.6): a swatch and its hex, and — pressing
62
- * the swatch — a small window under the row with the theme's colours, a
63
+ * the swatch — the shell's colour picker with the theme's colours, a
63
64
  * saturation-and-brightness square, a hue strip and the hex again.
64
65
  *
65
66
  * ⚠️ NEVER THE SYSTEM COLOUR DIALOG. `<input type="color">` opens a different
66
67
  * window on every browser and operating system, with none of the site's theme
67
68
  * colours in it, and it is the one control in the panel a merchant cannot see
68
- * the inside of before pressing it. Everything here is drawn by this package.
69
+ * the inside of before pressing it.
69
70
  *
70
- * THE WINDOW OPENS IN THE PANEL'S OWN FLOW, under the row, not floating over
71
- * it: a settings panel scrolls, and a floating window is clipped by the edge it
72
- * scrolls under — and it would sit outside the `--es-*` token root a panel
73
- * provides (see the context menu, which has to carry that root itself).
71
+ * THE SWATCH AND WHAT IT OPENS ARE THE SHELL'S (easel#199 step 4, harness
72
+ * UI-24): the shell's `Popover` holding its `ColorPickerPanel`, the trigger
73
+ * wearing `colorSwatchClasses` and painted with `colorFill` — exactly the
74
+ * shell `ColorPicker`'s own composition. Composed here rather than taken as
75
+ * `ColorPicker` for two things it cannot carry: the swatch's NAME is the row's
76
+ * (`words.swatch`, with the caption word — "Auto", "Accent" — where the row
77
+ * prints one, in the host's language), and the trigger keeps the
78
+ * `es-pick-swatch` / `is-inherited` / `is-unset` hooks hosts read.
79
+ *
80
+ * It FLOATS now, on the shell's popup layer. It opened in the panel's own flow
81
+ * because a floating window was clipped by the scrolling panel and sat outside
82
+ * the `--es-*` root; the shell's Popover is portalled to `<body>`, follows its
83
+ * trigger as the panel scrolls, keeps inside the shell window that owns it
84
+ * (UI-11), and draws on the shell's tokens, not `--es-*`. Placement, Escape
85
+ * (focus back on the swatch), Tab and a press outside are the Popover's — and
86
+ * since nothing in the panel moves when it closes, the press outside may close
87
+ * it on its pointerdown.
74
88
  *
75
89
  * The hex box is always a box you can type into — pasting a brand colour
76
90
  * costs no clicks — live on the keystroke that makes it a colour, and put back
@@ -95,9 +109,9 @@ type ColourWindowProps = {
95
109
  value: string;
96
110
  /** Live, as the colour moves: one `#rrggbb` from every way in. */
97
111
  onChange: (next: string) => void;
98
- /** The colour's name: the window is "<label> colour", its hex box "<label> hex code". */
112
+ /** The colour's name: it names the panel's hex box ("<label> hex code"). */
99
113
  label: string;
100
- /** The theme's colours, offered first. */
114
+ /** The theme's colours, offered first — the shell panel's `presets`, each named by the theme. */
101
115
  theme?: readonly ThemeColour[];
102
116
  /** Escape in the window. The opener closes it and takes the focus back. */
103
117
  onClose?: () => void;
@@ -106,11 +120,16 @@ type ColourWindowProps = {
106
120
  /** The colour in force while `value` is `''` (see `ColourPicker`): the window starts from it, its hex a placeholder. */
107
121
  inherited?: string;
108
122
  readOnly?: boolean;
123
+ /**
124
+ * Accepted and unused since the window is the shell's: its words (the
125
+ * square, the strip, the hex box, the presets) are the shell's
126
+ * `useShellStrings().color`, translated through the host's
127
+ * `ShellStringsProvider`.
128
+ */
109
129
  words?: PickWords['colour'];
110
130
  /**
111
- * Start the hex row with a swatch of the colour, as the text box's colour
112
- * window draws it (E5b). Off by default: `ColourPicker`'s row already has its
113
- * swatch beside the hex.
131
+ * Accepted and moot: the shell's panel always starts its hex row with a
132
+ * swatch of the colour (what the text box's window asked for, E5b).
114
133
  */
115
134
  swatch?: boolean;
116
135
  /**
@@ -123,13 +142,20 @@ type ColourWindowProps = {
123
142
  dragWrites?: 'live' | 'end';
124
143
  };
125
144
  /**
126
- * THE COLOUR WINDOW on its own: the theme's colours, the saturation and
127
- * brightness square, the hue strip and the hex. `ColourPicker` opens it under
128
- * its swatch; a row that draws its own swatches (the text-styles list's Any
129
- * color, plan step E6) opens the same one, so there is one window, not two.
130
- * The opener owns when it is open and puts it in the panel's own flow.
145
+ * THE COLOUR WINDOW on its own: the shell's `ColorPickerPanel` (easel#199
146
+ * step 4, harness UI-24) — the theme's colours as its presets, named by the
147
+ * theme, the saturation and brightness square, the hue strip and the hex.
148
+ * `ColourPicker` opens it in the shell's Popover; a row that draws its own
149
+ * swatches (the text-styles list's Any color, plan step E6) opens the same one
150
+ * in its own flow, so there is one window, not two.
151
+ *
152
+ * What it maps: `theme` → `presets` (`label` = the theme colour's name),
153
+ * `inherited` → `fallback` (the panel starts from it, its hex a placeholder,
154
+ * and nothing is written until something moves), `readOnly` → `disabled`.
155
+ * A pick EQUAL to the inherited colour still writes — it pins it — because the
156
+ * panel compares with `value`, not with what is shown.
131
157
  */
132
- declare function ColourWindow({ value, onChange, label, theme, onClose, id, inherited, readOnly, words, swatch, dragWrites, }: ColourWindowProps): react.JSX.Element;
158
+ declare function ColourWindow({ value, onChange, label, theme, onClose, id, inherited, readOnly, words: _words, swatch: _swatch, dragWrites, }: ColourWindowProps): react.JSX.Element;
133
159
 
134
160
  type ImageBoxProps = {
135
161
  /** The file's URL, or `''` while the setting has none. */
@@ -182,26 +208,19 @@ declare function ImageBox({ value, onChange, label, openLibrary, kind, placehold
182
208
  * it back gives hue 0 — red — and a merchant who drags the square down to grey
183
209
  * would find the strip jumped to red. The picker therefore keeps its own HSV
184
210
  * while it is open and only reads one back from the stored hex when the value
185
- * changes from OUTSIDE (see `ColourPicker`).
211
+ * changes from OUTSIDE (the shell's `ColorPickerPanel`).
212
+ *
213
+ * What is still easel's own: the readout (`hexReadout`), the box's length, the
214
+ * point maths the shell keeps private (`svFromPoint`), `hueFromPoint` (which
215
+ * reaches 360 at the strip's end, where the shell's stops at 359) and
216
+ * `mediaName` — exported names hosts already import.
186
217
  */
187
- type Hsv = {
188
- h: number;
189
- s: number;
190
- v: number;
191
- };
218
+
219
+ declare const typedHex: (text: string) => string | null;
192
220
  /** The most a hex box takes: `#` and six digits. */
193
221
  declare const HEX_MAX_LENGTH = 7;
194
- /**
195
- * What a typed string is as a colour — `#rrggbb` — or `null` while it is not
196
- * one yet. Accepts three or six digits, with or without `#`, any case.
197
- */
198
- declare function typedHex(text: string): string | null;
199
222
  /** A stored hex as a person reads it: upper case. */
200
223
  declare const hexReadout: (hex: string) => string;
201
- /** `#rrggbb` → HSV (h 0–360, s and v 0–1). A string that is not a colour reads as black. */
202
- declare function hexToHsv(hex: string): Hsv;
203
- /** HSV → `#rrggbb`. Out-of-range input is clamped, never thrown. */
204
- declare function hsvToHex({ h, s, v }: Hsv): string;
205
224
  /**
206
225
  * A point in the saturation/brightness square → s and v. Saturation runs left
207
226
  * to right, brightness bottom to top; a point outside the square is held to
@@ -226,4 +245,4 @@ declare function hueFromPoint(x: number, box: {
226
245
  * name, so it reads as none rather than as its own bytes. */
227
246
  declare function mediaName(url: string): string;
228
247
 
229
- export { ColourPicker, type ColourPickerProps, ColourWindow, type ColourWindowProps, HEX_MAX_LENGTH, type Hsv, ImageBox, type ImageBoxProps, PickWords, type ThemeColour, hexReadout, hexToHsv, hsvToHex, hueFromPoint, mediaName, svFromPoint, typedHex };
248
+ export { ColourPicker, type ColourPickerProps, ColourWindow, type ColourWindowProps, HEX_MAX_LENGTH, ImageBox, type ImageBoxProps, PickWords, type ThemeColour, hexReadout, hueFromPoint, mediaName, svFromPoint, typedHex };
@@ -1,7 +1,7 @@
1
- import{mediaName as e}from"../chunk-H24N5TMZ.js";export{ColourPicker,ColourWindow,HEX_MAX_LENGTH,hexReadout,hexToHsv,hsvToHex,hueFromPoint,mediaName,svFromPoint,typedHex}from"../chunk-H24N5TMZ.js";import{DEFAULT_PICK_WORDS as a}from"../chunk-ZAOM6PFH.js";import{useState as i}from"react";import{jsx as l,jsxs as s}from"react/jsx-runtime";function c({value:c,onChange:n,label:o,openLibrary:r,kind:t="image",placeholder:m,readOnly:d,words:p=a.image}){const[u,h]=i(!1),[b,g]=i(!1),k=Boolean(r)&&!d,N=async()=>{if(r&&!u&&!d){h(!0),g(!1);try{const e=await r();e&&n(e)}catch{g(!0)}finally{h(!1)}}},f=u?/* @__PURE__ */l("p",{className:"es-pick-image-status",role:"status",children:p.choosing}):b?/* @__PURE__ */l("p",{className:"es-pick-image-status is-error",role:"alert",children:p.failed}):null;if(!c)/* @__PURE__ */
2
- return s("div",{className:"es-pick-image",children:[
3
- /* @__PURE__ */s("button",{type:"button",className:"es-pick-image-slot",onClick:N,disabled:!k||u,"aria-label":p.empty({label:o,kind:t,placeholder:m}),children:[
4
- /* @__PURE__ */l("span",{className:"es-pick-image-slot-name",children:m??("video"===t?p.chooseVideo:p.chooseImage)}),k?/* @__PURE__ */l("span",{className:"es-pick-image-slot-hint",children:p.hint}):null]}),f]});const v=e(c),y=v?p.named({label:o,name:v}):o;/* @__PURE__ */
5
- return s("div",{className:"es-pick-image",children:[
6
- /* @__PURE__ */s("figure",{className:"es-pick-image-figure",children:[
7
- /* @__PURE__ */l("div",{className:"es-pick-image-frame",children:"video"===t?/* @__PURE__ */l("video",{src:c,muted:!0,playsInline:!0,preload:"metadata","aria-label":y}):/* @__PURE__ */l("img",{src:c,alt:y})}),v?/* @__PURE__ */l("figcaption",{className:"es-pick-image-name",title:v,children:v}):null]}),k||!d?/* @__PURE__ */s("div",{className:"es-pick-image-actions",children:[k?/* @__PURE__ */l("button",{type:"button",className:"es-pick-image-btn",onClick:N,disabled:u,"aria-label":p.replaceNamed({label:o}),children:p.replace}):null,d?null:/* @__PURE__ */l("button",{type:"button",className:"es-pick-image-btn is-bare",onClick:()=>n(""),disabled:u,"aria-label":p.removeNamed({label:o}),children:p.remove})]}):null,f]})}export{c as ImageBox};
1
+ import{mediaName as e}from"../chunk-FPAVNX3Y.js";export{ColourPicker,ColourWindow,HEX_MAX_LENGTH,hexReadout,hexToHsv,hsvToHex,hueFromPoint,mediaName,svFromPoint,typedHex}from"../chunk-FPAVNX3Y.js";import{DEFAULT_PICK_WORDS as a}from"../chunk-ZAOM6PFH.js";import{withTip as i}from"../chunk-P2VEMZH5.js";import{useState as l}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";function n({value:n,onChange:o,label:r,openLibrary:t,kind:m="image",placeholder:d,readOnly:p,words:u=a.image}){const[h,k]=l(!1),[b,g]=l(!1),N=Boolean(t)&&!p,f=async()=>{if(t&&!h&&!p){k(!0),g(!1);try{const e=await t();e&&o(e)}catch{g(!0)}finally{k(!1)}}},v=h?/* @__PURE__ */s("p",{className:"es-pick-image-status",role:"status",children:u.choosing}):b?/* @__PURE__ */s("p",{className:"es-pick-image-status is-error",role:"alert",children:u.failed}):null;if(!n)/* @__PURE__ */
2
+ return c("div",{className:"es-pick-image",children:[
3
+ /* @__PURE__ */c("button",{type:"button",className:"es-pick-image-slot",onClick:f,disabled:!N||h,"aria-label":u.empty({label:r,kind:m,placeholder:d}),children:[
4
+ /* @__PURE__ */s("span",{className:"es-pick-image-slot-name",children:d??("video"===m?u.chooseVideo:u.chooseImage)}),N?/* @__PURE__ */s("span",{className:"es-pick-image-slot-hint",children:u.hint}):null]}),v]});const y=e(n),x=y?u.named({label:r,name:y}):r;/* @__PURE__ */
5
+ return c("div",{className:"es-pick-image",children:[
6
+ /* @__PURE__ */c("figure",{className:"es-pick-image-figure",children:[
7
+ /* @__PURE__ */s("div",{className:"es-pick-image-frame",children:"video"===m?/* @__PURE__ */s("video",{src:n,muted:!0,playsInline:!0,preload:"metadata","aria-label":x}):/* @__PURE__ */s("img",{src:n,alt:x})}),y?i(y,/* @__PURE__ */s("figcaption",{className:"es-pick-image-name",children:y})):null]}),N||!p?/* @__PURE__ */c("div",{className:"es-pick-image-actions",children:[N?/* @__PURE__ */s("button",{type:"button",className:"es-pick-image-btn",onClick:f,disabled:h,"aria-label":u.replaceNamed({label:r}),children:u.replace}):null,p?null:/* @__PURE__ */s("button",{type:"button",className:"es-pick-image-btn is-bare",onClick:()=>o(""),disabled:h,"aria-label":u.removeNamed({label:r}),children:u.remove})]}):null,v]})}export{n as ImageBox};
@@ -1,6 +1,9 @@
1
- /* efficient-easel/pick — the colour row and its window, and the image box
2
- (blueprint step 4.6). Drawn on the panel's own tokens, so both editors'
3
- panels get the same picker without a line of their own CSS. */
1
+ /* efficient-easel/pick — the colour row and the image box (blueprint step
2
+ 4.6). Drawn on the panel's own tokens, so both editors' panels get the same
3
+ picker without a line of their own CSS. The swatch and the window it opens
4
+ are efficient-shell's (`Popover`, `ColorPickerPanel`, `colorSwatchClasses`;
5
+ easel#199 step 4, harness UI-24) and draw from the shell's CSS: nothing
6
+ here styles them but where the swatch sits in the row. */
4
7
 
5
8
  /* ── The colour row ─────────────────────────────────────────────────────── */
6
9
  .es-pick-colour {
@@ -8,9 +11,6 @@
8
11
  ONE width. A row is right-aligned as a unit, so a word narrower than a hex
9
12
  pushes its swatch out of line down a column of colour rows. */
10
13
  --es-pick-readout-w: 68px;
11
- display: flex;
12
- flex-direction: column;
13
- gap: 12px;
14
14
  }
15
15
  .es-pick-colour-row {
16
16
  /* The tag is placed against the row. */
@@ -19,35 +19,6 @@
19
19
  align-items: center;
20
20
  gap: 8px;
21
21
  }
22
- /* 26 × 26, no border, 7px corner — the look the owner settled for every
23
- colour row (2026-09-04). A hairline ring inside, so a white swatch on a
24
- white panel still has an edge. */
25
- .es-pick-swatch {
26
- flex: none;
27
- width: 26px;
28
- height: 26px;
29
- padding: 0;
30
- border: 0;
31
- border-radius: 7px;
32
- box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);
33
- cursor: pointer;
34
- }
35
- .es-pick-swatch.is-unset {
36
- background:
37
- linear-gradient(135deg, transparent 46%, var(--es-danger) 46%, var(--es-danger) 54%, transparent 54%),
38
- var(--es-panel);
39
- box-shadow: inset 0 0 0 1px var(--es-input-border);
40
- }
41
- .es-pick-swatch:focus-visible,
42
- .es-pick-theme-swatch:focus-visible,
43
- .es-pick-sv:focus-visible,
44
- .es-pick-hue:focus-visible {
45
- outline: 2px solid var(--es-accent);
46
- outline-offset: 2px;
47
- }
48
- .es-pick-swatch:disabled {
49
- cursor: default;
50
- }
51
22
  /* THE HEX'S SLOT (Lewis 2026-10-07, option E): 68px, and down to 36px when
52
23
  the line is short of room — after the label has given way to its 56px. The
53
24
  hex or the word that stands in for it fills it. */
@@ -65,7 +36,7 @@
65
36
  min-width: 0;
66
37
  padding: 4px 8px;
67
38
  border: 1px solid transparent;
68
- border-radius: 6px;
39
+ border-radius: var(--radius-md);
69
40
  background: transparent;
70
41
  color: var(--es-text);
71
42
  font: 500 11px/1.3 ui-monospace, SFMono-Regular, Menlo, monospace;
@@ -141,9 +112,9 @@
141
112
  z-index: 3;
142
113
  transform: translateY(calc(-100% - 6px));
143
114
  padding: 4px 8px;
144
- border-radius: 6px;
145
- background: #111827;
146
- color: #fff;
115
+ border-radius: var(--radius-md);
116
+ background: var(--es-toast-bg, var(--status-draft-solid));
117
+ color: var(--es-on-accent, var(--status-on-solid));
147
118
  font-size: 12px;
148
119
  font-weight: 500;
149
120
  line-height: 1.3;
@@ -151,10 +122,6 @@
151
122
  pointer-events: none;
152
123
  box-shadow: 0 4px 12px rgb(0 0 0 / 0.2);
153
124
  }
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
125
  /* ── A line that holds the picker ───────────────────────────────────────── */
159
126
  /* BOTH EDITORS HOLD THE PICKER IN A LINE: `SettingsField`'s `action` slot
160
127
  (`.es-field-head`, this package's own class), or a colour SUB-row inside one
@@ -162,11 +129,10 @@
162
129
  Text), which is not a SettingsField and takes `.es-pick-line`: the host's
163
130
  label first, then the picker.
164
131
 
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.
132
+ The picker's own box steps aside (`display: contents`), so the swatch and
133
+ the hex become items of that line, at its end (`margin-left: auto`). The
134
+ window they open floats (the shell's Popover), so nothing here makes room
135
+ for it.
170
136
 
171
137
  Moved here from the storefront's stylesheet (2026-10-06), so the email does
172
138
  not copy it: one rule for both editors. The shop's `.sf-field--row` can move
@@ -183,10 +149,6 @@
183
149
  font-size: 12px;
184
150
  color: var(--es-text-secondary);
185
151
  }
186
- .es-field-head:has(> .es-pick-colour),
187
- .es-pick-line:has(> .es-pick-colour) {
188
- flex-wrap: wrap;
189
- }
190
152
  .es-field-head > .es-pick-colour,
191
153
  .es-pick-line > .es-pick-colour {
192
154
  display: contents;
@@ -207,8 +169,8 @@
207
169
  .es-pick-line > .es-pick-colour > .es-pick-colour-row {
208
170
  display: contents;
209
171
  }
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 {
172
+ .es-field-head > .es-pick-colour > .es-pick-colour-row > .es-pick-swatch-wrap,
173
+ .es-pick-line > .es-pick-colour > .es-pick-colour-row > .es-pick-swatch-wrap {
212
174
  margin-left: auto;
213
175
  }
214
176
  .es-field-head > .es-pick-colour > .es-pick-colour-row > .es-pick-hexwrap,
@@ -233,99 +195,6 @@
233
195
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
234
196
  mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
235
197
  }
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
- }
247
-
248
- /* ── The window under the row ───────────────────────────────────────────── */
249
- .es-pick-window {
250
- display: flex;
251
- flex-direction: column;
252
- gap: 12px;
253
- padding: 12px;
254
- border: 1px solid var(--es-divider);
255
- border-radius: 10px;
256
- background: var(--es-panel);
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. */
261
- .es-pick-theme {
262
- display: flex;
263
- flex-wrap: wrap;
264
- gap: 4px;
265
- }
266
- .es-pick-theme-swatch {
267
- width: 22px;
268
- height: 22px;
269
- padding: 0;
270
- border: 0;
271
- border-radius: 6px;
272
- box-shadow: inset 0 0 0 1px rgb(0 0 0 / 0.1);
273
- cursor: pointer;
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. */
278
- .es-pick-theme-swatch[aria-pressed='true'] {
279
- box-shadow: inset 0 0 0 2px var(--es-accent), inset 0 0 0 4px var(--es-panel);
280
- }
281
- /* The square: the hue at full strength, washed to white left-to-right and to
282
- black top-to-bottom — which is what saturation and brightness ARE. */
283
- .es-pick-sv {
284
- position: relative;
285
- height: 128px;
286
- border-radius: 6px;
287
- background-image:
288
- linear-gradient(to top, #000, transparent),
289
- linear-gradient(to right, #fff, transparent);
290
- cursor: crosshair;
291
- touch-action: none;
292
- }
293
- .es-pick-sv-thumb,
294
- .es-pick-hue-thumb {
295
- position: absolute;
296
- width: 12px;
297
- height: 12px;
298
- border-radius: 50%;
299
- border: 2px solid #fff;
300
- box-shadow: 0 0 0 1px rgb(0 0 0 / 0.35);
301
- transform: translate(-50%, -50%);
302
- pointer-events: none;
303
- }
304
- .es-pick-hue {
305
- position: relative;
306
- height: 12px;
307
- border-radius: 6px;
308
- background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
309
- cursor: pointer;
310
- touch-action: none;
311
- }
312
- .es-pick-hue-thumb {
313
- top: 50%;
314
- }
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
- }
329
198
  /* ── The image box ──────────────────────────────────────────────────────── */
330
199
  .es-pick-image {
331
200
  display: flex;
@@ -341,7 +210,7 @@
341
210
  min-height: 96px;
342
211
  padding: 12px;
343
212
  border: 1.5px dashed var(--es-input-border);
344
- border-radius: 8px;
213
+ border-radius: var(--radius-lg);
345
214
  background: var(--es-app-bg);
346
215
  color: var(--es-text);
347
216
  font: inherit;
@@ -373,7 +242,7 @@
373
242
  .es-pick-image-frame {
374
243
  height: 96px;
375
244
  overflow: hidden;
376
- border-radius: 8px;
245
+ border-radius: var(--radius-lg);
377
246
  background: var(--es-app-bg);
378
247
  }
379
248
  .es-pick-image-frame img,
@@ -397,7 +266,7 @@
397
266
  .es-pick-image-btn {
398
267
  padding: 4px 12px;
399
268
  border: 1px solid var(--es-input-border);
400
- border-radius: 6px;
269
+ border-radius: var(--radius-md);
401
270
  background: var(--es-panel);
402
271
  color: var(--es-text);
403
272
  font: 500 12px/1.3 var(--es-font);
@@ -1,68 +1,57 @@
1
1
  import * as react from 'react';
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';
2
+ import { c as EaselRailProps, E as EaselRailButtonProps } from '../types-CsgMwHHa.js';
3
+ export { a as EaselRailItem, b as EaselRailOrientation } from '../types-CsgMwHHa.js';
4
4
  export { AddIcon, LayersIcon, MediaIcon, PageIcon as PagesIcon, IconProps as RailIconProps, SitemapIcon, StylesIcon } from '../icons/index.js';
5
- export { W as WordFit } from '../wordFit-D4S36PvB.js';
5
+ export { W as WordFit } from '../wordFit-7XpmhcaW.js';
6
6
 
7
7
  /**
8
- * The shared icon-rail — one slim strip of icon buttons that every EFFICIENT
9
- * editor uses to switch panels (Pages / Layers / Styles / Media / Sitemap) and
10
- * to quick-add ("+"). By default it is the vertical strip down the left; pass
11
- * `orientation="row"` and the same buttons lay into a top bar instead. It is a
12
- * **pure presentational switcher**: give it `items[]`, it draws them; which one
13
- * is `active` and what each does is the host's business.
8
+ * The editors' icon rail — the panel switcher (Pages / Layers / Styles / Media
9
+ * / Sitemap) and the quick-add "+" — on the shell's `IconRail` (harness UI-24;
10
+ * since 1.0.0, efficient-easel#199). Give it `items[]`; which one is `active`
11
+ * and what each does is the host's.
14
12
  *
15
- * No `'use client'` here on purpose — the rail has no hooks or state, so it is a
16
- * plain module a Next-16 server component can import and even statically render.
17
- * It's interactive only through the `onSelect` props the host passes, and the
18
- * host owns its client boundary (both editors' chrome are already client
19
- * components), so baking a directive into this leaf would only narrow where it
20
- * can be imported.
13
+ * The toolbar — its role, its one tab stop and arrow keys along the rail, the
14
+ * toggle-or-action rule, a `Tooltip` per button — is the shell's, and so,
15
+ * since efficient-shell 4.165.0, are a ROW rail's words: `labels="beside"`
16
+ * with `labelsFit`, the settings tabs' three states (owner 2026-09-18) —
17
+ * every word while they all fit the rail's column, then only the open panel's
18
+ * word, then none — measured by the shell against the rail's parent. This
19
+ * rail used to measure them on a canvas and hand a stylesheet rule the widths
20
+ * (`wordFit`); that is gone, and `wordFit` is accepted and ignored.
21
21
  *
22
- * A `toolbar` (not a `tablist`), because the rail mixes view *toggles* with
23
- * plain *actions* like the quick-add — a toolbar of buttons models that
24
- * honestly, where a tablist would force every button to pretend to be a tab.
25
- * That is true in both directions, so `orientation` moves `aria-orientation`
26
- * and leaves the role alone: what the rail IS did not change, only which way it
27
- * runs — and a toolbar's arrow keys follow its orientation, so a row that kept
28
- * saying `vertical` would describe the wrong keys.
22
+ * What stays here: the item list (`EaselRailItem`), which the hosts build,
23
+ * and the column's card and the row's lack of one (`rail.css`).
29
24
  *
30
- * `orientation` defaults to `'column'`, and that path is byte-identical to what
31
- * this component rendered before the prop existed: same class list, same
32
- * attributes, same order. `'row'` adds ONE modifier class beside `es-rail` —
33
- * never instead of it, since every button rule and token in rail.css hangs off
34
- * the base class — and rail.css does the rest.
25
+ * Its one word is the toolbar's name, `ariaLabel` (./words): a host in another
26
+ * language passes it; `TopBarRail` does it from the provider.
35
27
  *
36
- * `wordFit` (a row only) puts every button's word in the markup beside its
37
- * glyph and hands the words' measured widths to the stylesheet, which shows
38
- * all of them, only the active one, or none — by the width of the rail's
39
- * column, the settings tabs' three states. Still no hooks: the measuring is
40
- * `TopBarRail`'s, and the choosing is CSS's.
41
- *
42
- * ITS ONE WORD is the toolbar's name, `ariaLabel` (./words). The rail reads no
43
- * strings provider — that would be a hook — so a host in another language
44
- * passes `ariaLabel`; `TopBarRail` does it from the provider.
28
+ * A CLIENT component since 1.0.0: the shell's rail keeps its tab stop and
29
+ * measures its words with layout effects. It still renders on a server
30
+ * (`renderToStaticMarkup`, icon-only until measured) and touches no browser
31
+ * global at module-eval or render.
45
32
  */
46
- declare function EaselRail({ items, ariaLabel, className, orientation, wordFit, }: EaselRailProps): react.JSX.Element;
33
+ declare function EaselRail({ items, ariaLabel, className, orientation, onLabelsShown }: EaselRailProps): react.JSX.Element;
47
34
 
48
35
  /**
49
- * A single rail button: an icon in a 34×34 square that hovers, highlights when
50
- * active, and dims when disabled. Look only — the caller owns the click.
51
- *
52
- * `aria-pressed` is emitted **only** when `active` is a real boolean, so a view
53
- * toggle announces its pressed state while an action button (the quick-add "+",
54
- * whose item omits `active`) stays a plain button rather than a stuck toggle.
36
+ * One rail button: the shell's `IconRailButton` (harness UI-24; since 1.0.0,
37
+ * efficient-easel#199). Its look, its `Tooltip` (never `title=`), its
38
+ * toggle-or-action rule — `aria-pressed` only when `active` is a boolean — and,
39
+ * in a worded row rail, its word beside the glyph (efficient-shell 4.165.0)
40
+ * are the shell's. `worded` is accepted and ignored: the rail decides. It
41
+ * keeps the `es-rail-btn` / `is-active` names as hooks.
55
42
  */
56
- declare function EaselRailButton({ label, worded, icon, active, disabled, onSelect, className, }: EaselRailButtonProps): react.JSX.Element;
43
+ declare function EaselRailButton({ label, icon, active, disabled, onSelect, className, tooltipSide }: EaselRailButtonProps): react.JSX.Element;
57
44
 
58
45
  /**
59
46
  * Rail design tokens — the ONE source both apps' rails converge on.
60
47
  *
61
- * Every value below is taken verbatim from the storefront editor's rail
62
- * (`efficient-storefront` → `storefront-editor.css`, the `.sf-rail` / `.sf-rail-btn`
63
- * rules), which is the visual reference. The admin portal's hand-rolled rail had
64
- * drifted (button 36 vs 34, icon 20 vs 18, radius 8 vs 9, a Tailwind accent
65
- * instead of a CSS var); these tokens end that drift.
48
+ * The geometry below was taken from the storefront editor's rail (`.sf-rail`).
49
+ * Since 1.0.0 (efficient-easel#199) the BUTTONS are efficient-shell's
50
+ * `IconRailButton` — 36px, its own look, hover and active — so the tokens
51
+ * describe the rail's container; the button size is the shell's, recorded.
52
+ * A row rail's words are the shell's too since efficient-shell 4.165.0, so
53
+ * the word tokens are gone. The card's colour and radius are the shell's
54
+ * tokens (harness UI-24).
66
55
  *
67
56
  * Exposed BOTH ways, per the same value:
68
57
  * - `railTokens` — this JS object, for anything that needs the numbers/colours
@@ -71,7 +60,8 @@ declare function EaselRailButton({ label, worded, icon, active, disabled, onSele
71
60
  * custom properties on `.es-rail` (names listed in `railCssVars`).
72
61
  *
73
62
  * Numeric fields are pixel magnitudes (unitless) so they compose in code; the
74
- * CSS applies the `px`.
63
+ * CSS applies the `px`. A string is a CSS value, and resolves only where the
64
+ * host has loaded the shell's CSS.
75
65
  */
76
66
  declare const railTokens: {
77
67
  /** Rail column width. `--sf-rail-w: 46px`. */
@@ -80,46 +70,24 @@ declare const railTokens: {
80
70
  readonly railPaddingY: 8;
81
71
  /** Gap between buttons. */
82
72
  readonly railGap: 4;
83
- /** Rail card corner radius. `--sf-panel-radius: 12px`. */
84
- readonly railRadius: 12;
85
- /** Button hit-area (square). */
86
- readonly buttonSize: 34;
87
- /** Button corner radius. */
88
- readonly buttonRadius: 9;
73
+ /** Rail card corner radius: the shell's `--radius-xl` (12px). */
74
+ readonly railRadius: "var(--radius-xl)";
75
+ /** The shell's `IconRailButton` (square, `h-9 w-9`). */
76
+ readonly buttonSize: 36;
89
77
  /** Icon glyph size. */
90
78
  readonly iconSize: 18;
91
- /** A worded row button (`TopBarRail`): its side padding, the gap between the
92
- * icon and its word, and the word's type. */
93
- readonly wordPaddingX: 8;
94
- readonly wordGap: 8;
95
- readonly wordFontSize: 12;
96
- readonly wordFontWeight: 500;
97
- /** Hover/active colour transition. */
98
- readonly transition: "background 0.12s, color 0.12s";
99
- /** Disabled-button opacity. */
100
- readonly disabledOpacity: 0.35;
101
79
  readonly color: {
102
- /** Rail card background. `--sf-panel`. */
103
- readonly background: "#ffffff";
104
- /** Rail card shadow. `--sf-panel-shadow`. */
80
+ /** Rail card background: the shell's surface. */
81
+ readonly background: "var(--surface)";
82
+ /** Rail card shadow, black at an alpha (no shell elevation token yet). */
105
83
  readonly shadow: "0 1px 2px rgba(0, 0, 0, 0.05), 0 10px 30px rgba(0, 0, 0, 0.06)";
106
- /** Idle icon colour. `--sf-muted` (gray-500). */
107
- readonly idle: "#6b7280";
108
- /** Hover background. `--sf-hover` (gray-100). */
109
- readonly hoverBg: "#f3f4f6";
110
- /** Hover icon colour. `--sf-text` (gray-900). */
111
- readonly hoverFg: "#111827";
112
- /** Active icon colour. `--sf-accent` (blue-600). */
113
- readonly accent: "#2563eb";
114
- /** Active background. `--sf-accent-tint` (blue-50). */
115
- readonly accentTint: "#eff6ff";
116
84
  };
117
85
  };
118
86
  type RailTokens = typeof railTokens;
119
87
  /**
120
88
  * The CSS custom-property name behind each token. `rail.css` sets these on
121
89
  * `.es-rail`; override any of them on (or above) the rail element to re-theme it
122
- * — e.g. `style={{ ['--es-rail-accent']: brand }}` — without shipping new CSS.
90
+ * — e.g. `style={{ ['--es-rail-bg']: 'transparent' }}` — without shipping new CSS.
123
91
  */
124
92
  declare const railCssVars: {
125
93
  readonly railWidth: "--es-rail-w";
@@ -127,19 +95,9 @@ declare const railCssVars: {
127
95
  readonly railGap: "--es-rail-gap";
128
96
  readonly railRadius: "--es-rail-radius";
129
97
  readonly buttonSize: "--es-rail-btn-size";
130
- readonly buttonRadius: "--es-rail-btn-radius";
131
98
  readonly iconSize: "--es-rail-icon-size";
132
- readonly wordPaddingX: "--es-rail-word-pad-x";
133
- readonly wordGap: "--es-rail-word-gap";
134
- readonly wordFontSize: "--es-rail-word-size";
135
- readonly wordFontWeight: "--es-rail-word-weight";
136
99
  readonly background: "--es-rail-bg";
137
100
  readonly shadow: "--es-rail-shadow";
138
- readonly idle: "--es-rail-fg";
139
- readonly hoverBg: "--es-rail-hover-bg";
140
- readonly hoverFg: "--es-rail-hover-fg";
141
- readonly accent: "--es-rail-accent";
142
- readonly accentTint: "--es-rail-accent-tint";
143
101
  };
144
102
 
145
103
  export { EaselRail, EaselRailButton, EaselRailButtonProps, EaselRailProps, type RailTokens, railCssVars, railTokens };
@@ -1 +1 @@
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
+ export{railCssVars,railTokens}from"../chunk-X6DQWK2C.js";export{EaselRail,EaselRailButton}from"../chunk-MJM6SFD3.js";import"../chunk-2OAZYSWJ.js";export{AddIcon,LayersIcon,MediaIcon,PageIcon as PagesIcon,SitemapIcon,StylesIcon}from"../chunk-L5KW4HG5.js";