@fusion.dev/helix 0.0.0-dev → 0.0.2

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 (227) hide show
  1. package/custom-elements.json +5565 -5519
  2. package/dist/accordion/item/accordion-item.css.js +1 -19
  3. package/dist/accordion/root/accordion-root.css.js +1 -1
  4. package/dist/accordion/root/accordion-root.d.ts +1 -1
  5. package/dist/accordion/root/accordion-root.js +1 -1
  6. package/dist/announcement/root/announcement-root.css.js +1 -7
  7. package/dist/app-header/root/app-header-root.css.js +1 -7
  8. package/dist/app-header/root/app-header-root.d.ts +20 -23
  9. package/dist/app-header/root/app-header-root.js +4 -4
  10. package/dist/aura/root/aura-axis.d.ts +5 -7
  11. package/dist/aura/root/aura-axis.js +5 -7
  12. package/dist/aura/root/aura-root.css.js +1 -1
  13. package/dist/aura/root/aura-root.d.ts +75 -87
  14. package/dist/aura/root/aura-root.js +100 -109
  15. package/dist/aura/root/aura-shader.d.ts +10 -13
  16. package/dist/aura/root/aura-shader.js +165 -238
  17. package/dist/avatar/group/avatar-group.css.js +1 -1
  18. package/dist/avatar/root/avatar-root.css.js +1 -1
  19. package/dist/badge/root/badge-root.css.js +1 -13
  20. package/dist/badge/root/badge-root.d.ts +4 -5
  21. package/dist/bar-chart/root/bar-chart-root.css.js +1 -13
  22. package/dist/bar-chart/root/bar-chart-root.d.ts +51 -60
  23. package/dist/bar-chart/root/bar-chart-root.js +10 -17
  24. package/dist/blockquote/root/blockquote-root.css.js +1 -1
  25. package/dist/breadcrumbs/breadcrumb/breadcrumb.css.js +1 -7
  26. package/dist/breadcrumbs/root/breadcrumbs-root.css.js +1 -1
  27. package/dist/button/root/button-root.css.js +1 -7
  28. package/dist/button/root/button-root.d.ts +16 -25
  29. package/dist/button/root/button-root.js +3 -3
  30. package/dist/button-group/root/button-group-root.css.js +1 -1
  31. package/dist/button-group/root/button-group-root.d.ts +5 -7
  32. package/dist/callout/root/callout-root.css.js +1 -1
  33. package/dist/callout/root/callout-root.d.ts +4 -4
  34. package/dist/callout/root/callout-root.js +4 -4
  35. package/dist/card/root/card-root.css.js +2 -2
  36. package/dist/card/root/card-root.d.ts +38 -48
  37. package/dist/card/root/card-root.js +8 -11
  38. package/dist/carousel/root/carousel-root.css.js +1 -11
  39. package/dist/carousel/root/carousel-root.d.ts +39 -43
  40. package/dist/carousel/root/carousel-root.js +7 -7
  41. package/dist/chat/composer/chat-composer.css.js +1 -1
  42. package/dist/chat/message/chat-message.css.js +1 -7
  43. package/dist/chat/message/chat-message.d.ts +8 -13
  44. package/dist/chat/root/chat-root.css.js +1 -1
  45. package/dist/checkbox/root/checkbox-root.css.js +1 -14
  46. package/dist/checkbox-group/root/checkbox-group-root.css.js +1 -1
  47. package/dist/code/root/code-root.css.js +9 -7
  48. package/dist/code/root/code-root.d.ts +4 -0
  49. package/dist/code/root/code-root.js +4 -0
  50. package/dist/code-block/root/code-block-root.css.js +1 -1
  51. package/dist/color-input/root/color-input-root.css.js +2 -2
  52. package/dist/color-input/root/color-input-root.js +3 -3
  53. package/dist/color-picker/root/color-picker-root.css.js +1 -9
  54. package/dist/color-picker/root/color-picker-root.js +3 -3
  55. package/dist/combobox/root/combobox-root.css.js +1 -8
  56. package/dist/combobox/root/combobox-root.js +1 -1
  57. package/dist/command/root/command-root.css.js +1 -1
  58. package/dist/copy-button/root/copy-button-root.css.js +1 -1
  59. package/dist/data-table/root/data-table-root.css.js +9 -3
  60. package/dist/data-table/root/data-table-root.d.ts +4 -1
  61. package/dist/data-table/root/data-table-root.js +4 -1
  62. package/dist/date-input/root/date-input-root.css.js +1 -1
  63. package/dist/date-picker/root/date-picker-root.css.js +1 -7
  64. package/dist/date-picker/root/date-picker-root.d.ts +1 -1
  65. package/dist/date-picker/root/date-picker-root.js +1 -1
  66. package/dist/dialog/root/dialog-root.css.js +1 -1
  67. package/dist/dialog/root/dialog-root.d.ts +15 -20
  68. package/dist/dialog/root/dialog-root.js +2 -2
  69. package/dist/divider/root/divider-root.css.js +1 -1
  70. package/dist/donut-chart/root/donut-chart-root.css.js +2 -20
  71. package/dist/donut-chart/root/donut-chart-root.d.ts +14 -19
  72. package/dist/donut-chart/root/donut-chart-root.js +6 -7
  73. package/dist/drawer/root/drawer-root.css.js +1 -11
  74. package/dist/drawer/root/drawer-root.d.ts +3 -7
  75. package/dist/drilldown/item/drilldown-item.css.js +1 -1
  76. package/dist/drilldown/root/drilldown-root.css.js +1 -1
  77. package/dist/element-events.generated.js +1 -1
  78. package/dist/empty/root/empty-root.css.js +1 -1
  79. package/dist/file-input/root/file-input-root.css.js +1 -1
  80. package/dist/file-input/root/file-input-root.js +1 -2
  81. package/dist/flex/root/flex-root.css.js +1 -1
  82. package/dist/flex/root/flex-root.d.ts +6 -6
  83. package/dist/flex/root/flex-root.js +9 -9
  84. package/dist/format-date/root/format-date-root.css.js +1 -1
  85. package/dist/grid/root/grid-root.css.js +1 -1
  86. package/dist/grid/root/grid-root.d.ts +8 -8
  87. package/dist/grid/root/grid-root.js +8 -9
  88. package/dist/heatmap/root/heatmap-root.css.js +2 -2
  89. package/dist/heatmap/root/heatmap-root.d.ts +11 -12
  90. package/dist/heatmap/root/heatmap-root.js +11 -12
  91. package/dist/icon/glyph.css.js +1 -1
  92. package/dist/icon/root/icon-root.css.js +1 -1
  93. package/dist/icon-button/root/icon-button-root.css.js +1 -7
  94. package/dist/icon-button/root/icon-button-root.d.ts +10 -10
  95. package/dist/icon-button/root/icon-button-root.js +4 -4
  96. package/dist/image/root/image-root.css.js +1 -7
  97. package/dist/input/root/input-root.css.js +1 -9
  98. package/dist/kbd/root/kbd-root.css.js +1 -1
  99. package/dist/legend/root/legend-root.css.js +1 -1
  100. package/dist/legend/root/legend-root.d.ts +34 -37
  101. package/dist/legend/root/legend-root.js +10 -10
  102. package/dist/line-chart/root/line-chart-root.css.js +1 -8
  103. package/dist/line-chart/root/line-chart-root.d.ts +6 -9
  104. package/dist/list/item/list-item.css.js +1 -1
  105. package/dist/list/root/list-root.css.js +1 -1
  106. package/dist/list/root/list-root.d.ts +4 -7
  107. package/dist/listbox/root/listbox-root.css.js +3 -3
  108. package/dist/listbox/root/listbox-root.d.ts +2 -0
  109. package/dist/listbox/root/listbox-root.js +2 -0
  110. package/dist/loader/root/loader-root.css.js +1 -1
  111. package/dist/loader/root/loader-root.d.ts +5 -9
  112. package/dist/loader/root/loader-root.js +2 -2
  113. package/dist/megamenu/root/megamenu-root.css.js +3 -2
  114. package/dist/menu/item/menu-item.css.js +1 -7
  115. package/dist/menu/root/menu-root.css.js +1 -1
  116. package/dist/meter/root/meter-root.css.js +1 -14
  117. package/dist/meter/root/meter-root.d.ts +18 -18
  118. package/dist/meter/root/meter-root.js +6 -8
  119. package/dist/mixins/mixin-control-surface/mixin-control-surface.d.ts +1 -1
  120. package/dist/navigation/root/navigation-root.css.js +1 -7
  121. package/dist/notifications/notification/notification.css.js +1 -7
  122. package/dist/notifications/root/notifications-root.css.js +1 -1
  123. package/dist/number-input/root/number-input-root.css.js +1 -9
  124. package/dist/option/group/option-group.css.js +1 -1
  125. package/dist/option/root/option-root.css.js +1 -1
  126. package/dist/outline/root/outline-root.css.js +1 -14
  127. package/dist/outline/root/outline-root.d.ts +1 -1
  128. package/dist/outline/root/outline-root.js +1 -1
  129. package/dist/pagination/root/pagination-root.css.js +1 -12
  130. package/dist/pagination/size/pagination-size.css.js +1 -1
  131. package/dist/pagination/summary/pagination-summary.css.js +1 -1
  132. package/dist/pin-input/root/pin-input-root.css.js +1 -7
  133. package/dist/popover/root/popover-root.css.js +4 -2
  134. package/dist/progress/root/progress-root.css.js +1 -7
  135. package/dist/progress/root/progress-root.d.ts +10 -9
  136. package/dist/qr-code/root/qr-code-root.css.js +1 -1
  137. package/dist/qr-code/root/qr-code-root.d.ts +1 -1
  138. package/dist/qr-code/root/qr-code-root.js +1 -1
  139. package/dist/quote/root/quote-root.css.js +1 -1
  140. package/dist/radio/group/radio-group.css.js +1 -1
  141. package/dist/radio/root/radio-root.css.js +1 -14
  142. package/dist/radio/root/radio-root.d.ts +20 -18
  143. package/dist/radio/root/radio-root.js +5 -6
  144. package/dist/rating/root/rating-root.css.js +1 -1
  145. package/dist/rating/root/rating-root.d.ts +4 -5
  146. package/dist/sandbox/preview/sandbox-preview.css.js +1 -1
  147. package/dist/sandbox/preview/sandbox-preview.d.ts +48 -44
  148. package/dist/sandbox/preview/sandbox-preview.js +63 -50
  149. package/dist/sandbox/root/sandbox-root.css.js +1 -2
  150. package/dist/sandbox/root/sandbox-root.d.ts +50 -59
  151. package/dist/sandbox/root/sandbox-root.js +75 -91
  152. package/dist/sandbox/source/sandbox-source.css.js +1 -1
  153. package/dist/sandbox/source/sandbox-source.d.ts +21 -29
  154. package/dist/sandbox/source/sandbox-source.js +26 -34
  155. package/dist/sandbox/status-bar/sandbox-status-bar.css.js +1 -1
  156. package/dist/sandbox/terminal/sandbox-terminal.css.js +1 -1
  157. package/dist/sandbox/toolbar/sandbox-toolbar.css.js +1 -1
  158. package/dist/scroll-area/root/scroll-area-root.css.js +5 -5
  159. package/dist/select/root/select-root.css.js +2 -15
  160. package/dist/select/root/select-root.d.ts +4 -4
  161. package/dist/select/root/select-root.js +5 -7
  162. package/dist/shared/chart/series.css.js +1 -1
  163. package/dist/shared/chart/terminus.css.js +1 -1
  164. package/dist/shared/field/field-inline.css.js +1 -1
  165. package/dist/shared/field/field-stacked.css.js +1 -1
  166. package/dist/shared/field/field.css.js +1 -1
  167. package/dist/skeleton/root/skeleton-root.css.js +1 -1
  168. package/dist/slider/root/slider-root.css.js +1 -3
  169. package/dist/sparkline/root/sparkline-root.css.js +1 -1
  170. package/dist/sparkline/root/sparkline-root.d.ts +22 -24
  171. package/dist/sparkline/root/sparkline-root.js +6 -6
  172. package/dist/speed-dial/item/speed-dial-item.css.js +1 -7
  173. package/dist/speed-dial/root/speed-dial-root.css.js +1 -1
  174. package/dist/splitter/root/splitter-root.css.js +1 -14
  175. package/dist/stat/group/stat-group.css.js +1 -1
  176. package/dist/stat/root/stat-root.css.js +1 -1
  177. package/dist/steps/root/steps-root.css.js +1 -1
  178. package/dist/steps/step/step.css.js +1 -8
  179. package/dist/steps/step/step.js +1 -1
  180. package/dist/switch/root/switch-root.css.js +1 -8
  181. package/dist/table/cell/table-cell.css.js +1 -1
  182. package/dist/table/column/table-column.css.js +1 -1
  183. package/dist/table/root/table-root.css.js +1 -1
  184. package/dist/table/row/table-row.css.js +1 -1
  185. package/dist/tabs/panel/tab-panel.css.js +1 -1
  186. package/dist/tabs/root/tabs-root.css.js +1 -7
  187. package/dist/tabs/tab/tab.css.js +2 -8
  188. package/dist/tag/root/tag-root.css.js +1 -1
  189. package/dist/tag/root/tag-root.d.ts +10 -19
  190. package/dist/tag/root/tag-root.js +3 -3
  191. package/dist/text/root/text-root.css.js +1 -1
  192. package/dist/text/root/text-root.d.ts +13 -14
  193. package/dist/text/root/text-root.js +6 -6
  194. package/dist/textarea/root/textarea-root.css.js +1 -7
  195. package/dist/time-input/root/time-input-root.css.js +1 -1
  196. package/dist/time-input/root/time-input-root.js +1 -1
  197. package/dist/time-picker/root/time-picker-root.css.js +1 -7
  198. package/dist/time-picker/root/time-picker-root.js +1 -1
  199. package/dist/timeline/item/timeline-item.css.js +1 -1
  200. package/dist/timeline/root/timeline-root.css.js +1 -1
  201. package/dist/toast/item/toast-item.css.js +1 -1
  202. package/dist/toast/root/toast-root.css.js +1 -1
  203. package/dist/toggle/group/toggle-group.css.js +1 -7
  204. package/dist/toggle/group/toggle-group.d.ts +6 -9
  205. package/dist/toggle/root/toggle-root.css.js +1 -1
  206. package/dist/toolbar/root/toolbar-root.css.js +1 -1
  207. package/dist/tooltip/root/tooltip-root.css.js +1 -1
  208. package/dist/tooltip/root/tooltip-root.d.ts +6 -7
  209. package/dist/tour/root/tour-root.css.js +1 -7
  210. package/dist/tour/stop/tour-stop.css.js +2 -2
  211. package/dist/tree/item/tree-item.css.js +1 -17
  212. package/dist/tree/root/tree-root.css.js +1 -1
  213. package/dist/tree/root/tree-root.d.ts +0 -2
  214. package/dist/trend/root/trend-root.css.js +1 -1
  215. package/dist/trend/root/trend-root.d.ts +4 -7
  216. package/dist/trend/root/trend-root.js +4 -7
  217. package/dist/video/root/video-root.css.js +1 -12
  218. package/dist/video/root/video-root.d.ts +3 -8
  219. package/dist/video-playlist/item/video-playlist-item.css.js +1 -7
  220. package/dist/video-playlist/menu/video-playlist-menu.css.js +1 -1
  221. package/dist/video-playlist/root/video-playlist-root.css.js +1 -1
  222. package/dist/virtual-list/root/virtual-list-root.css.js +1 -1
  223. package/elements.css +4 -5
  224. package/helix.css +31 -0
  225. package/jsx.d.ts +11625 -14561
  226. package/package.json +10 -8
  227. package/vue.d.ts +3594 -4231
@@ -10,14 +10,13 @@ import { html } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
11
11
  import { styles } from './sandbox-root.css.js';
12
12
  /** Where the divider sits, and how tall the panel is, before anyone moves them.
13
- Named because the properties default to them and `applyPanel` falls back to
14
- them, and two copies of a default drift. */
13
+ Named because the properties default to them and the getters that reset them
14
+ fall back to them, and two copies of a default drift. */
15
15
  const DEFAULT_SPLIT = 50;
16
- /* One hundred and sixty, not one hundred and ninety-two. The panel is a console
17
- a reader glances at, and at 192 it opened taking forty-two percent of the
18
- sandbox: the thing being previewed had less room than the log of it. Its own
19
- tab bar is forty-eight of that, so this leaves about five lines, which is what
20
- a console is read in. Dragging it taller is one gesture and it is remembered. */
16
+ /* One hundred and sixty, not one hundred and ninety-two. At 192 the panel opened
17
+ taking forty-two percent of the sandbox: the thing being previewed had less
18
+ room than the log of it. Its own tab bar is forty-eight of that, so this
19
+ leaves about five lines, which is what a console is read in. */
21
20
  const DEFAULT_PANEL = 160;
22
21
  /** The most of the sandbox the panel may take, leaving the panes above it. */
23
22
  const PANEL_MAX = 0.8;
@@ -38,12 +37,9 @@ const PANEL_MAX = 0.8;
38
37
  * a React component into the preview.
39
38
  *
40
39
  * **The dividers are two nested `helix-splitter`s, not a grid this element
41
- * drags itself.** It had its own: a five row grid, a stylesheet written to on
42
- * every pointer move, three pointer handlers, a keyboard handler reading which
43
- * axes each divider was allowed to move, and a corner placed by hand into the
44
- * cell where two tracks met. All of it is the splitter's now, including the
45
- * corner, which arrives on its own wherever a nested splitter crosses the one it
46
- * is in.
40
+ * drags itself.** The pointer handling, the keyboard handling and the corner are
41
+ * all the splitter's, and the corner arrives on its own wherever a nested
42
+ * splitter crosses the one it is in.
47
43
  *
48
44
  * The panes are the inner splitter and the panel is the outer one, which is the
49
45
  * order that makes the panel span the full width: the outer divider runs edge to
@@ -93,6 +89,30 @@ const PANEL_MAX = 0.8;
93
89
  let HelixSandbox = class HelixSandbox extends HelixElement {
94
90
  constructor() {
95
91
  super(...arguments);
92
+ /**
93
+ * Accessible name for the divider that moves both at once.
94
+ */
95
+ this.cornerLabel = 'Resize panes and panel';
96
+ /**
97
+ * What a reset makes the panel, in pixels.
98
+ *
99
+ * The pair to `panel-size`.
100
+ */
101
+ this.defaultPanelSize = DEFAULT_PANEL;
102
+ /**
103
+ * Where a reset puts the divider, where nothing declared it.
104
+ *
105
+ * Separate from `split` for the reason `Splitter` keeps `default-position`
106
+ * separate from `position`. Resetting to whatever `split` held on the first
107
+ * render is the declared arrangement only where nobody owns the property: the
108
+ * workbench does, and restores it from the address bar and from storage, so the
109
+ * first value it holds is the reader's last session and a reset puts the
110
+ * sandbox back to the size it already was.
111
+ *
112
+ * Declared rather than captured, so it is a number a consumer states and can
113
+ * change, and it needs no first frame to be read on.
114
+ */
115
+ this.defaultSplit = DEFAULT_SPLIT;
96
116
  /**
97
117
  * Which pane comes first, before the divider.
98
118
  *
@@ -111,36 +131,6 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
111
131
  * the same thing in both directions: thirty percent to whatever comes first.
112
132
  */
113
133
  this.lead = 'source';
114
- /**
115
- * Percentage of the sandbox given to the source pane.
116
- */
117
- this.split = DEFAULT_SPLIT;
118
- /**
119
- * Where a reset puts the divider, where nothing declared it.
120
- *
121
- * Separate from `split` for the reason `Splitter` keeps `default-position`
122
- * separate from `position`, and the bug is worth recording because this
123
- * element had it after that one was fixed. A double click reset to whatever
124
- * `split` held on the first render, which is the declared arrangement only
125
- * when nobody owns the property. The workbench owns it, restores it from the
126
- * address bar and from storage, so the first value it ever held was the
127
- * reader's last session: double clicking reset the sandbox to the size it
128
- * already was, which is to say it did nothing at all.
129
- *
130
- * Declared rather than captured, so it is a number a consumer states and can
131
- * change, and it needs no first frame to be read on.
132
- */
133
- this.defaultSplit = DEFAULT_SPLIT;
134
- /**
135
- * Height of the panel, in pixels.
136
- */
137
- this.panelSize = DEFAULT_PANEL;
138
- /**
139
- * What a reset makes the panel, in pixels.
140
- *
141
- * The pair to `panel-size`.
142
- */
143
- this.defaultPanelSize = DEFAULT_PANEL;
144
134
  /**
145
135
  * What the panel's height becomes when it is closed.
146
136
  *
@@ -154,13 +144,17 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
154
144
  */
155
145
  this.panelLabel = 'Resize panel';
156
146
  /**
157
- * Accessible name for the divider that moves both at once.
147
+ * Height of the panel, in pixels.
158
148
  */
159
- this.cornerLabel = 'Resize panes and panel';
149
+ this.panelSize = DEFAULT_PANEL;
160
150
  /**
161
151
  * Accessible name for the divider.
162
152
  */
163
153
  this.separatorLabel = 'Resize source pane';
154
+ /**
155
+ * Percentage of the sandbox given to the source pane.
156
+ */
157
+ this.split = DEFAULT_SPLIT;
164
158
  /**
165
159
  * Whether anything is in the panel region.
166
160
  *
@@ -178,16 +172,14 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
178
172
  * panel asked for at 192px quietly keeps whatever share of the old height that
179
173
  * was.
180
174
  *
181
- * **Measured at render rather than cached from the observer**, which is the
182
- * second design here. The first held the number the observer last reported and
183
- * was correct only while the observer was firing, and a `ResizeObserver`
184
- * callback is delivered from the rendering lifecycle: a background tab runs
185
- * none, so the value went stale with nothing to say so. Reading the box at
186
- * render leaves one source of truth, and the observer's only job is to say
187
- * that a render is due.
175
+ * **Measured at render rather than cached from the observer.** A
176
+ * `ResizeObserver` callback is delivered from the rendering lifecycle and a
177
+ * background tab runs none, so a cached number goes stale with nothing to say
178
+ * so. Reading the box at render leaves one source of truth, and the observer's
179
+ * only job is to say that a render is due.
188
180
  *
189
- * Cheap, because renders are rare. A drag no longer goes through this element
190
- * at all: the splitter follows the pointer itself and announces once, when it
181
+ * Cheap, because renders are rare: a drag does not go through this element at
182
+ * all, the splitter following the pointer itself and announcing once, when it
191
183
  * settles.
192
184
  */
193
185
  this.bodyHeight = 0;
@@ -219,15 +211,10 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
219
211
  than `event.target`, which is retargeted to the outermost host once the
220
212
  event has crossed a shadow boundary.
221
213
 
222
- Named, not guessed. The rule was that `css` is the stylesheet and
223
- anything else is markup, which was true while there were two panes and
224
- wrong the moment there was a third: a pane showing the example as JSX
225
- announced itself the same way, and the preview rendered the text of a
226
- React component as though it were markup.
227
-
228
- The name used to arrive in the detail, where it was one of four different
229
- things that field carried. It is on the pane, which is where a name
230
- belongs. */
214
+ Named, not guessed. Treating anything that is not `css` as markup holds
215
+ only while there are two panes: a pane showing the example as JSX
216
+ announces itself the same way, and the preview renders the text of a React
217
+ component as though it were markup. */
231
218
  const pane = event.composedPath()[0];
232
219
  if (pane?.name !== 'css' && pane?.name !== 'html') {
233
220
  return;
@@ -285,7 +272,8 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
285
272
  * `target` against `currentTarget`, because a source pane's own change bubbles
286
273
  * up through these same elements on its way to the host. Only a splitter
287
274
  * speaking for itself is one of ours, and only those are stopped: the sandbox
288
- * announces `arrangement` and a consumer never sees the two inside it.
275
+ * announces `helix-before-split` and `helix-before-panel-resize` in their
276
+ * place, and a consumer never sees the two splitters inside it.
289
277
  */
290
278
  this.handlePanesChange = (event) => {
291
279
  if (event.target !== event.currentTarget) {
@@ -361,12 +349,11 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
361
349
  /**
362
350
  * Whether a change came from inside this sandbox's source region.
363
351
  *
364
- * Structural rather than a type check. It was `instanceof
365
- * HelixSandboxSource`, which was right until there was a second kind of
366
- * pane: the editor is `@fusion.dev/helix-sandbox/editor`, on its own path because it
367
- * carries CodeMirror, and naming its class here would pull that back into
368
- * this module for every consumer. Where the event came from is a question
369
- * about the tree, and the tree can answer it.
352
+ * Structural rather than a type check. There is more than one kind of pane and
353
+ * the editor is `@fusion.dev/helix-sandbox/editor`, on its own path because it
354
+ * carries CodeMirror, so naming its class here would pull that back into this
355
+ * module for every consumer. Where the event came from is a question about the
356
+ * tree, and the tree can answer it.
370
357
  */
371
358
  fromSource(target) {
372
359
  if (!(target instanceof Node)) {
@@ -418,11 +405,9 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
418
405
  * wrote to storage on its own would be deciding for all of them under a key
419
406
  * it chose.
420
407
  *
421
- * **A verb each, where this was one `helix-before-resize` carrying which of the
422
- * two had moved.** Both dividers are this element's, so `composedPath()[0]` is
423
- * the same host for either and the name is the only thing that can separate
424
- * them. It was the last caller of a field every request in the library carried
425
- * for it. See 306.
408
+ * **A verb each, rather than one `helix-before-resize` naming which of the two
409
+ * moved.** Both dividers are this element's, so `composedPath()[0]` is the same
410
+ * host for either and the event name is the only thing that can separate them.
426
411
  */
427
412
  splitSettled() {
428
413
  this.dispatchEvent(new HelixBeforeSplitEvent({ value: String(this.split) }));
@@ -439,9 +424,8 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
439
424
  /* And the body is watched again, because `disconnectedCallback` stopped
440
425
  watching it. The observer itself survives, being a field rather than
441
426
  something `firstUpdated` built, but a disconnected one reports nothing
442
- until something calls `observe` again, and only `firstUpdated` did. So a
443
- sandbox moved in the DOM came back with its panel sizes frozen.
444
- `check:observers` holds this. */
427
+ until something calls `observe` again. Left to `firstUpdated` alone, a
428
+ sandbox moved in the DOM comes back with its panel sizes frozen. */
445
429
  if (this.hasUpdated) {
446
430
  this.watchBody();
447
431
  }
@@ -531,23 +515,20 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
531
515
  static { this.styles = styles; }
532
516
  };
533
517
  __decorate([
534
- property({ reflect: true })
535
- ], HelixSandbox.prototype, "orientation", void 0);
536
- __decorate([
537
- property()
538
- ], HelixSandbox.prototype, "lead", void 0);
518
+ property({ attribute: 'corner-label' })
519
+ ], HelixSandbox.prototype, "cornerLabel", void 0);
539
520
  __decorate([
540
- property({ attribute: 'split', type: Number })
541
- ], HelixSandbox.prototype, "split", void 0);
521
+ property({ attribute: 'default-panel-size', type: Number })
522
+ ], HelixSandbox.prototype, "defaultPanelSize", void 0);
542
523
  __decorate([
543
524
  property({ attribute: 'default-split', type: Number })
544
525
  ], HelixSandbox.prototype, "defaultSplit", void 0);
545
526
  __decorate([
546
- property({ attribute: 'panel-size', type: Number })
547
- ], HelixSandbox.prototype, "panelSize", void 0);
527
+ property()
528
+ ], HelixSandbox.prototype, "lead", void 0);
548
529
  __decorate([
549
- property({ attribute: 'default-panel-size', type: Number })
550
- ], HelixSandbox.prototype, "defaultPanelSize", void 0);
530
+ property({ reflect: true })
531
+ ], HelixSandbox.prototype, "orientation", void 0);
551
532
  __decorate([
552
533
  property({ attribute: 'panel-collapsed-size', type: Number })
553
534
  ], HelixSandbox.prototype, "panelCollapsedSize", void 0);
@@ -555,11 +536,14 @@ __decorate([
555
536
  property({ attribute: 'panel-label' })
556
537
  ], HelixSandbox.prototype, "panelLabel", void 0);
557
538
  __decorate([
558
- property({ attribute: 'corner-label' })
559
- ], HelixSandbox.prototype, "cornerLabel", void 0);
539
+ property({ attribute: 'panel-size', type: Number })
540
+ ], HelixSandbox.prototype, "panelSize", void 0);
560
541
  __decorate([
561
542
  property({ attribute: 'separator-label' })
562
543
  ], HelixSandbox.prototype, "separatorLabel", void 0);
544
+ __decorate([
545
+ property({ attribute: 'split', type: Number })
546
+ ], HelixSandbox.prototype, "split", void 0);
563
547
  __decorate([
564
548
  state()
565
549
  ], HelixSandbox.prototype, "hasPanel", void 0);
@@ -1,4 +1,4 @@
1
- // Generated from src/sandbox/source/sandbox-source.css by `bun run styles`. Do not edit.
1
+ // Generated from src/sandbox/source/sandbox-source.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  display: block;
@@ -28,9 +28,9 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
28
28
  */
29
29
  export declare class HelixSandboxSource extends HelixElement {
30
30
  /**
31
- * The source being edited.
31
+ * Accessible name for the editable region.
32
32
  */
33
- value: string;
33
+ fieldLabel: string;
34
34
  /**
35
35
  * Which source this pane holds, echoed in every `helix-before-edit`.
36
36
  *
@@ -40,32 +40,27 @@ export declare class HelixSandboxSource extends HelixElement {
40
40
  * Not reflected: nothing selects on it, so it keeps a real default instead.
41
41
  */
42
42
  name: string;
43
- /**
44
- * Accessible name for the editable region.
45
- */
46
- fieldLabel: string;
47
43
  /**
48
44
  * Whether Tab indents rather than moving focus.
49
45
  */
50
46
  tabIndents: boolean;
47
+ /**
48
+ * The source being edited.
49
+ */
50
+ value: string;
51
51
  /** Set by Escape, so the next Tab leaves the field. */
52
52
  private escaped;
53
53
  /**
54
54
  * Reports where the cursor is, for a status bar to read.
55
55
  *
56
- * **The shipped shell could not fill its own readout before this.**
57
- * `SandboxRoot` binds a `helix-caret` listener and writes `line` and `column`
58
- * onto every slotted status bar, and `SandboxStatusBar` renders a `caret` part
59
- * as soon as it has both, and both of those ship from `@fusion.dev/helix`. The one
60
- * pane that reported a position was `SandboxEditor`, which is in
61
- * `@fusion.dev/helix-sandbox` and is `private` while Helix is pre-release. So a
62
- * consumer taking the published shell and this pane got a status bar that
63
- * could never show a position, and the only fix available to them was a
64
- * package they cannot install.
65
- *
66
- * That is the gap rather than a dead event: the editor has dispatched this
67
- * since it was written, and `check:events` has always seen it. What was
68
- * missing was the half of the pair that ships.
56
+ * **This pane has to send it, not only `SandboxEditor`.** `SandboxRoot` binds
57
+ * a `helix-caret` listener and writes `line` and `column` onto every slotted
58
+ * status bar, and `SandboxStatusBar` renders a `caret` part as soon as it has
59
+ * both; all of that ships from `@fusion.dev/helix`, while the editor is in
60
+ * `@fusion.dev/helix-sandbox` and is `private` while Helix is pre-release. A
61
+ * consumer taking the published shell and this pane would otherwise get a
62
+ * status bar that can never show a position, fixable only with a package they
63
+ * cannot install.
69
64
  *
70
65
  * The textarea is the only thing that knows, so this is where it belongs.
71
66
  * One-based on both axes, which is what an editor shows and what the detail's
@@ -75,12 +70,11 @@ export declare class HelixSandboxSource extends HelixElement {
75
70
  /**
76
71
  * Announces the edit, then applies it if nobody refused.
77
72
  *
78
- * **This was the other way round, so `helix-before-edit` was a `before` event
79
- * that had already happened.** The value was assigned and the request
80
- * dispatched after it, which means `preventDefault()` was accepted and
81
- * ignored: a consumer refusing an edit kept the old value in their handler and
82
- * the pane held the new one. Every other `before` event in this library is
83
- * announced first and applied only if the request stands, and this is that.
73
+ * **Never the other way round.** Assigning the value and dispatching the
74
+ * request after it accepts `preventDefault()` and ignores it: a consumer
75
+ * refusing an edit keeps the old value in their handler while the pane holds
76
+ * the new one, and `helix-before-edit` becomes a `before` event that has
77
+ * already happened.
84
78
  *
85
79
  * `restoreValue` because the textarea has already taken the character
86
80
  * whichever way it goes, so a refusal has to put the text back, and it does so
@@ -88,10 +82,8 @@ export declare class HelixSandboxSource extends HelixElement {
88
82
  * same helper for the same reason. */
89
83
  private readonly handleInput;
90
84
  /**
91
- * The one place an edit is taken, so a refusal cannot be forgotten at one of them.
92
- *
93
- * Two paths reach it, a keystroke and the tab that indents, and the second had
94
- * the same fault as the first with its own copy of the code.
85
+ * The one place an edit is taken, so a refusal cannot be forgotten at one of
86
+ * them. Two paths reach it, a keystroke and the tab that indents.
95
87
  */
96
88
  private edit;
97
89
  private readonly handleKeydown;
@@ -38,9 +38,9 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
38
38
  constructor() {
39
39
  super(...arguments);
40
40
  /**
41
- * The source being edited.
41
+ * Accessible name for the editable region.
42
42
  */
43
- this.value = '';
43
+ this.fieldLabel = 'Example source';
44
44
  /**
45
45
  * Which source this pane holds, echoed in every `helix-before-edit`.
46
46
  *
@@ -50,32 +50,27 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
50
50
  * Not reflected: nothing selects on it, so it keeps a real default instead.
51
51
  */
52
52
  this.name = 'html';
53
- /**
54
- * Accessible name for the editable region.
55
- */
56
- this.fieldLabel = 'Example source';
57
53
  /**
58
54
  * Whether Tab indents rather than moving focus.
59
55
  */
60
56
  this.tabIndents = true;
57
+ /**
58
+ * The source being edited.
59
+ */
60
+ this.value = '';
61
61
  /** Set by Escape, so the next Tab leaves the field. */
62
62
  this.escaped = false;
63
63
  /**
64
64
  * Reports where the cursor is, for a status bar to read.
65
65
  *
66
- * **The shipped shell could not fill its own readout before this.**
67
- * `SandboxRoot` binds a `helix-caret` listener and writes `line` and `column`
68
- * onto every slotted status bar, and `SandboxStatusBar` renders a `caret` part
69
- * as soon as it has both, and both of those ship from `@fusion.dev/helix`. The one
70
- * pane that reported a position was `SandboxEditor`, which is in
71
- * `@fusion.dev/helix-sandbox` and is `private` while Helix is pre-release. So a
72
- * consumer taking the published shell and this pane got a status bar that
73
- * could never show a position, and the only fix available to them was a
74
- * package they cannot install.
75
- *
76
- * That is the gap rather than a dead event: the editor has dispatched this
77
- * since it was written, and `check:events` has always seen it. What was
78
- * missing was the half of the pair that ships.
66
+ * **This pane has to send it, not only `SandboxEditor`.** `SandboxRoot` binds
67
+ * a `helix-caret` listener and writes `line` and `column` onto every slotted
68
+ * status bar, and `SandboxStatusBar` renders a `caret` part as soon as it has
69
+ * both; all of that ships from `@fusion.dev/helix`, while the editor is in
70
+ * `@fusion.dev/helix-sandbox` and is `private` while Helix is pre-release. A
71
+ * consumer taking the published shell and this pane would otherwise get a
72
+ * status bar that can never show a position, fixable only with a package they
73
+ * cannot install.
79
74
  *
80
75
  * The textarea is the only thing that knows, so this is where it belongs.
81
76
  * One-based on both axes, which is what an editor shows and what the detail's
@@ -93,12 +88,11 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
93
88
  /**
94
89
  * Announces the edit, then applies it if nobody refused.
95
90
  *
96
- * **This was the other way round, so `helix-before-edit` was a `before` event
97
- * that had already happened.** The value was assigned and the request
98
- * dispatched after it, which means `preventDefault()` was accepted and
99
- * ignored: a consumer refusing an edit kept the old value in their handler and
100
- * the pane held the new one. Every other `before` event in this library is
101
- * announced first and applied only if the request stands, and this is that.
91
+ * **Never the other way round.** Assigning the value and dispatching the
92
+ * request after it accepts `preventDefault()` and ignores it: a consumer
93
+ * refusing an edit keeps the old value in their handler while the pane holds
94
+ * the new one, and `helix-before-edit` becomes a `before` event that has
95
+ * already happened.
102
96
  *
103
97
  * `restoreValue` because the textarea has already taken the character
104
98
  * whichever way it goes, so a refusal has to put the text back, and it does so
@@ -128,10 +122,8 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
128
122
  };
129
123
  }
130
124
  /**
131
- * The one place an edit is taken, so a refusal cannot be forgotten at one of them.
132
- *
133
- * Two paths reach it, a keystroke and the tab that indents, and the second had
134
- * the same fault as the first with its own copy of the code.
125
+ * The one place an edit is taken, so a refusal cannot be forgotten at one of
126
+ * them. Two paths reach it, a keystroke and the tab that indents.
135
127
  */
136
128
  edit(field, next) {
137
129
  const request = new HelixBeforeEditEvent({ value: next });
@@ -156,17 +148,17 @@ let HelixSandboxSource = class HelixSandboxSource extends HelixElement {
156
148
  static { this.styles = styles; }
157
149
  };
158
150
  __decorate([
159
- property()
160
- ], HelixSandboxSource.prototype, "value", void 0);
151
+ property({ attribute: 'field-label' })
152
+ ], HelixSandboxSource.prototype, "fieldLabel", void 0);
161
153
  __decorate([
162
154
  property()
163
155
  ], HelixSandboxSource.prototype, "name", void 0);
164
- __decorate([
165
- property({ attribute: 'field-label' })
166
- ], HelixSandboxSource.prototype, "fieldLabel", void 0);
167
156
  __decorate([
168
157
  property({ attribute: 'tab-indents', converter: onUnlessFalse })
169
158
  ], HelixSandboxSource.prototype, "tabIndents", void 0);
159
+ __decorate([
160
+ property()
161
+ ], HelixSandboxSource.prototype, "value", void 0);
170
162
  HelixSandboxSource = __decorate([
171
163
  customElement('helix-sandbox-source')
172
164
  ], HelixSandboxSource);
@@ -1,4 +1,4 @@
1
- // Generated from src/sandbox/status-bar/sandbox-status-bar.css by `bun run styles`. Do not edit.
1
+ // Generated from src/sandbox/status-bar/sandbox-status-bar.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  align-items: center;
@@ -1,4 +1,4 @@
1
- // Generated from src/sandbox/terminal/sandbox-terminal.css by `bun run styles`. Do not edit.
1
+ // Generated from src/sandbox/terminal/sandbox-terminal.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
 
@@ -1,4 +1,4 @@
1
- // Generated from src/sandbox/toolbar/sandbox-toolbar.css by `bun run styles`. Do not edit.
1
+ // Generated from src/sandbox/toolbar/sandbox-toolbar.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
 
@@ -1,4 +1,4 @@
1
- // Generated from src/scroll-area/root/scroll-area-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/scroll-area/root/scroll-area-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  display: block;
@@ -54,8 +54,8 @@ inset-block-end: 0;
54
54
  inset-inline: 0;
55
55
  }
56
56
 
57
- :host([data-more~="block-start"])::before,
58
- :host([data-more~="block-end"])::after {
57
+ :host(:state(more-block-start))::before,
58
+ :host(:state(more-block-end))::after {
59
59
  opacity: 1;
60
60
  }
61
61
 
@@ -95,8 +95,8 @@ inline-size: var(--scroll-area-fade-inline-end, var(--scroll-area-fade, var(--he
95
95
  inset-inline-end: 0;
96
96
  }
97
97
 
98
- :host([data-more~="inline-start"]) [part="edges"]::before,
99
- :host([data-more~="inline-end"]) [part="edges"]::after {
98
+ :host(:state(more-inline-start)) [part="edges"]::before,
99
+ :host(:state(more-inline-end)) [part="edges"]::after {
100
100
  opacity: 1;
101
101
  }
102
102
 
@@ -1,4 +1,4 @@
1
- // Generated from src/select/root/select-root.css by `bun run styles`. Do not edit.
1
+ // Generated from src/select/root/select-root.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  display: flex;
@@ -82,7 +82,7 @@ white-space: nowrap;
82
82
 
83
83
  background-color: var(--helix-color-surface-overlay);
84
84
 
85
- border-radius: var(--helix-radii-md);
85
+ border-radius: var(--helix-radii-sm);
86
86
  box-shadow: var(--select-shadow, var(--helix-shadow-floating));
87
87
 
88
88
  inline-size: var(--floating-anchor-inline-size, 100%);
@@ -151,13 +151,6 @@ transition: scale var(--helix-duration-fast) var(--helix-easing-standard);
151
151
  scale: 1 -1;
152
152
  }
153
153
 
154
- @media (prefers-reduced-motion: reduce) {
155
- [part="indicator"],
156
- ::slotted([slot="indicator"]) {
157
- transition: none;
158
- }
159
- }
160
-
161
154
  [part="surface"][hidden],
162
155
  [part="surface"]:not(:popover-open) {
163
156
  display: none;
@@ -176,12 +169,6 @@ padding: var(--helix-space-none);
176
169
  outline: none;
177
170
  }
178
171
 
179
- @media (prefers-reduced-motion: reduce) {
180
- [part="trigger"] {
181
- transition: none;
182
- }
183
- }
184
-
185
172
  [part="indicator"] {
186
173
  block-size: var(--helix-size-icon-tight);
187
174
  color: var(--helix-color-foreground-muted);
@@ -50,10 +50,10 @@ export declare class HelixSelect extends HelixHeadlessSelect {
50
50
  *
51
51
  * **`emphasis` and not `separation`, which the registry decides rather than
52
52
  * taste.** Emphasis is asked of controls, how loud this one is; separation is
53
- * asked of containers, where the surface ends. A trigger is a control, and
54
- * `check:axes` refuses a family that declares both. Two of the four values are
55
- * taken: `solid` and `subtle` are a button's way of being the one thing to
56
- * press, which is not a thing an answer should ever be.
53
+ * asked of containers, where the surface ends. A trigger is a control, and a
54
+ * family may not declare both. Two of the four values are refused: `solid` and
55
+ * `subtle` are a button's way of being the one thing to press, which is not a
56
+ * thing an answer should ever be.
57
57
  *
58
58
  * **The other three fields want this too and do not have it yet.** `Input`,
59
59
  * `Textarea` and `Combobox` wear the same frame from the same shared
@@ -12,13 +12,11 @@ import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.c
12
12
  import { styles } from './select-root.css.js';
13
13
  /* Side-effect imports, because this renders `<helix-listbox>` in its own shadow
14
14
  root and a custom element registers on import. Without them a consumer who
15
- imported `@fusion.dev/helix/select` and nothing else got a select whose panel
16
- never upgraded: an unknown element with unstyled options inside it, and no
17
- error anywhere, because an unknown element is legal HTML.
18
-
19
- The same rule the React wrappers follow, for the same reason. It surfaced
20
- first as a spec that passed in the suite and failed alone, which is what a
21
- missing registration looks like when some other file happens to supply it. */
15
+ imports `@fusion.dev/helix/select` and nothing else gets a select whose panel
16
+ never upgrades: an unknown element with unstyled options inside it, and no
17
+ error anywhere, because an unknown element is legal HTML. The suite hides it
18
+ too, some other file happening to supply the registration, so it shows as a
19
+ spec that passes together and fails alone. */
22
20
  import '../../listbox/index.js';
23
21
  import '../../option/index.js';
24
22
  /**
@@ -1,4 +1,4 @@
1
- // Generated from src/shared/chart/series.css by `bun run styles`. Do not edit.
1
+ // Generated from src/shared/chart/series.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`:host {
4
4
  --chart-series-1: var(--helix-color-series-1);
@@ -1,4 +1,4 @@
1
- // Generated from src/shared/chart/terminus.css by `bun run styles`. Do not edit.
1
+ // Generated from src/shared/chart/terminus.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`[part="terminus"] {
4
4
  background-color: currentColor;
@@ -1,4 +1,4 @@
1
- // Generated from src/shared/field/field-inline.css by `bun run styles`. Do not edit.
1
+ // Generated from src/shared/field/field-inline.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`[part="hint"],
4
4
  [part="feedback"] {
@@ -1,4 +1,4 @@
1
- // Generated from src/shared/field/field-stacked.css by `bun run styles`. Do not edit.
1
+ // Generated from src/shared/field/field-stacked.css by `turbo run styles`. Do not edit.
2
2
  import { createSheet } from '@fusion.dev/helix-core';
3
3
  export const styles = createSheet(`[part="label"] {
4
4
  display: block;