@fusion.dev/helix 0.50.0 → 0.52.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.
@@ -83,10 +83,17 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
83
83
  event.stopPropagation();
84
84
  event.preventDefault();
85
85
  if (this.bodyHeight > 0) {
86
- this.requestPanelSize(Math.max(0, ((100 - Number(value)) / 100) * this.bodyHeight));
86
+ this.requestPanelSize(Math.max(this.panelFloor, ((100 - Number(value)) / 100) * this.bodyHeight));
87
87
  }
88
88
  this.answer(event.currentTarget, this.panelPosition);
89
89
  };
90
+ this.handleCollapse = (event) => {
91
+ if (event.target !== event.currentTarget) {
92
+ return;
93
+ }
94
+ event.stopPropagation();
95
+ event.preventDefault();
96
+ };
90
97
  this.readPanel = () => {
91
98
  this.hasPanel = this.querySelector(':scope > [slot="panel"]') !== null;
92
99
  };
@@ -114,6 +121,10 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
114
121
  }
115
122
  return Math.min(100, Math.max(0, (this.panelCollapsedSize / this.bodyHeight) * 100));
116
123
  }
124
+ get panelFloor() {
125
+ const size = Number.isFinite(this.panelCollapsedSize) ? this.panelCollapsedSize : 0;
126
+ return Math.min(this.bodyHeight, Math.max(0, size));
127
+ }
117
128
  fromSource(target) {
118
129
  if (!(target instanceof Node)) {
119
130
  return false;
@@ -219,6 +230,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
219
230
  default-position=${this.homePanelPosition}
220
231
  min=${100 - PANEL_MAX * 100}
221
232
  .position=${this.panelPosition}
233
+ @helix-before-collapse=${this.handleCollapse}
222
234
  @helix-before-resize=${this.handlePanelChange}
223
235
  >
224
236
  <helix-splitter
@@ -229,6 +241,7 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
229
241
  label=${this.separatorLabel}
230
242
  orientation=${vertical ? 'vertical' : 'horizontal'}
231
243
  .position=${split}
244
+ @helix-before-collapse=${this.handleCollapse}
232
245
  @helix-before-resize=${this.handlePanesChange}
233
246
  >
234
247
  ${''}
@@ -14,7 +14,7 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
14
14
  * is the documented escape hatch for exactly this trade.
15
15
  *
16
16
  * @since 0.1.0
17
- * @status experimental
17
+ * @status stable
18
18
  * @aliases Editor, Code pane
19
19
  * @documentation https://fusion.dev/helix/components/sandbox
20
20
  *
@@ -18,7 +18,7 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
18
18
  * empty, or the bar keeps a gap where a value is not.
19
19
  *
20
20
  * @since 0.1.0
21
- * @status experimental
21
+ * @status stable
22
22
  * @aliases Status line
23
23
  * @documentation https://fusion.dev/helix/components/sandbox
24
24
  *
@@ -18,7 +18,7 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
18
18
  * the whole panel being re-announced each time.
19
19
  *
20
20
  * @since 0.1.0
21
- * @status experimental
21
+ * @status stable
22
22
  * @aliases Console, Output
23
23
  * @documentation https://fusion.dev/helix/components/sandbox
24
24
  *
@@ -16,7 +16,7 @@ import type { CSSResultGroup, TemplateResult } from 'lit';
16
16
  * Both slots are bare, so an unfilled one generates no box and costs no gap.
17
17
  *
18
18
  * @since 0.1.0
19
- * @status experimental
19
+ * @status stable
20
20
  * @aliases Action bar
21
21
  * @documentation https://fusion.dev/helix/components/sandbox
22
22
  *
@@ -32,7 +32,7 @@ import type { CSSResultGroup } from 'lit';
32
32
  * gesture.
33
33
  *
34
34
  * @since 0.1.0
35
- * @status experimental
35
+ * @status stable
36
36
  * @category layout
37
37
  * @aliases SplitPane, Resizable, SplitView
38
38
  * @documentation https://fusion.dev/helix/components/splitter
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix",
3
3
  "description": "Styled component tier. Extends the headless tier with token-driven presentation.",
4
- "version": "0.50.0",
4
+ "version": "0.52.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -47,14 +47,14 @@
47
47
  },
48
48
  "bugs": "https://github.com/project-fusion/fusion/issues",
49
49
  "dependencies": {
50
- "@fusion.dev/helix-core": "0.50.0",
51
- "@fusion.dev/helix-headless": "0.50.0",
52
- "@fusion.dev/helix-styles": "0.50.0"
50
+ "@fusion.dev/helix-core": "0.52.0",
51
+ "@fusion.dev/helix-headless": "0.52.0",
52
+ "@fusion.dev/helix-styles": "0.52.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@custom-elements-manifest/analyzer": "^0.11.0",
56
- "@fusion.dev/helix-cem": "0.50.0",
57
- "@fusion.dev/helix-testing": "0.50.0",
56
+ "@fusion.dev/helix-cem": "0.52.0",
57
+ "@fusion.dev/helix-testing": "0.52.0",
58
58
  "@fusion.dev/scripts": "0.0.0-dev",
59
59
  "@happy-dom/global-registrator": "^20.0.0",
60
60
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -2838,6 +2838,29 @@ attribute is the one answer to how wide a pane is.
2838
2838
  A value the track cannot honor is taken to the nearest one it can, by
2839
2839
  `across`, and both tiers read that rather than this.
2840
2840
 
2841
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
2842
+ apiece, and nothing is written onto the track: the count is the sheet's,
2843
+ and the sheet's alone, because it is the one number here CSS can work out
2844
+ for itself. Everything it takes is a length the sheet already has, so the
2845
+ panes are laid out at their final width by the first rule that runs, on a
2846
+ server's markup as on the client's, and no script is waited on. That is the
2847
+ whole reason a declared count was ever the only option: a carousel that
2848
+ asks how wide its container is can only ask on the client, so the panes go
2849
+ down at one width and move to another when the answer arrives. Written
2850
+ inline the count would outrank the sheet that computes it, which is why an
2851
+ `auto` track is handed nothing. A count stays for the design that calls for
2852
+ exactly three.
2853
+
2854
+ The styled sheet says how it divides, and the headless `auto` example
2855
+ carries the same three lines for a consumer writing their own.
2856
+
2857
+ **A value rather than the resting behavior**, which is what the
2858
+ responsiveness policy asks of every axis that a box decides: a splitter
2859
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
2860
+ changes what the carousel *does*, since how many are across is how many
2861
+ places the track can stop, so a carousel that had not asked for it would
2862
+ find its position count moving with the window.
2863
+
2841
2864
  No default, because it reflects. A reflected property with a value writes
2842
2865
  its attribute on upgrade, and the host then carries something a consumer's
2843
2866
  server markup never had, which React reports as a mismatch. The one-across
@@ -2875,6 +2898,29 @@ attribute is the one answer to how wide a pane is.
2875
2898
  A value the track cannot honor is taken to the nearest one it can, by
2876
2899
  `across`, and both tiers read that rather than this.
2877
2900
 
2901
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
2902
+ apiece, and nothing is written onto the track: the count is the sheet's,
2903
+ and the sheet's alone, because it is the one number here CSS can work out
2904
+ for itself. Everything it takes is a length the sheet already has, so the
2905
+ panes are laid out at their final width by the first rule that runs, on a
2906
+ server's markup as on the client's, and no script is waited on. That is the
2907
+ whole reason a declared count was ever the only option: a carousel that
2908
+ asks how wide its container is can only ask on the client, so the panes go
2909
+ down at one width and move to another when the answer arrives. Written
2910
+ inline the count would outrank the sheet that computes it, which is why an
2911
+ `auto` track is handed nothing. A count stays for the design that calls for
2912
+ exactly three.
2913
+
2914
+ The styled sheet says how it divides, and the headless `auto` example
2915
+ carries the same three lines for a consumer writing their own.
2916
+
2917
+ **A value rather than the resting behavior**, which is what the
2918
+ responsiveness policy asks of every axis that a box decides: a splitter
2919
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
2920
+ changes what the carousel *does*, since how many are across is how many
2921
+ places the track can stop, so a carousel that had not asked for it would
2922
+ find its position count moving with the window.
2923
+
2878
2924
  No default, because it reflects. A reflected property with a value writes
2879
2925
  its attribute on upgrade, and the host then carries something a consumer's
2880
2926
  server markup never had, which React reports as a mismatch. The one-across
@@ -3111,6 +3157,29 @@ attribute is the one answer to how wide a pane is.
3111
3157
  A value the track cannot honor is taken to the nearest one it can, by
3112
3158
  `across`, and both tiers read that rather than this.
3113
3159
 
3160
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
3161
+ apiece, and nothing is written onto the track: the count is the sheet's,
3162
+ and the sheet's alone, because it is the one number here CSS can work out
3163
+ for itself. Everything it takes is a length the sheet already has, so the
3164
+ panes are laid out at their final width by the first rule that runs, on a
3165
+ server's markup as on the client's, and no script is waited on. That is the
3166
+ whole reason a declared count was ever the only option: a carousel that
3167
+ asks how wide its container is can only ask on the client, so the panes go
3168
+ down at one width and move to another when the answer arrives. Written
3169
+ inline the count would outrank the sheet that computes it, which is why an
3170
+ `auto` track is handed nothing. A count stays for the design that calls for
3171
+ exactly three.
3172
+
3173
+ The styled sheet says how it divides, and the headless `auto` example
3174
+ carries the same three lines for a consumer writing their own.
3175
+
3176
+ **A value rather than the resting behavior**, which is what the
3177
+ responsiveness policy asks of every axis that a box decides: a splitter
3178
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
3179
+ changes what the carousel *does*, since how many are across is how many
3180
+ places the track can stop, so a carousel that had not asked for it would
3181
+ find its position count moving with the window.
3182
+
3114
3183
  No default, because it reflects. A reflected property with a value writes
3115
3184
  its attribute on upgrade, and the host then carries something a consumer's
3116
3185
  server markup never had, which React reports as a mismatch. The one-across
@@ -3148,6 +3217,29 @@ attribute is the one answer to how wide a pane is.
3148
3217
  A value the track cannot honor is taken to the nearest one it can, by
3149
3218
  `across`, and both tiers read that rather than this.
3150
3219
 
3220
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
3221
+ apiece, and nothing is written onto the track: the count is the sheet's,
3222
+ and the sheet's alone, because it is the one number here CSS can work out
3223
+ for itself. Everything it takes is a length the sheet already has, so the
3224
+ panes are laid out at their final width by the first rule that runs, on a
3225
+ server's markup as on the client's, and no script is waited on. That is the
3226
+ whole reason a declared count was ever the only option: a carousel that
3227
+ asks how wide its container is can only ask on the client, so the panes go
3228
+ down at one width and move to another when the answer arrives. Written
3229
+ inline the count would outrank the sheet that computes it, which is why an
3230
+ `auto` track is handed nothing. A count stays for the design that calls for
3231
+ exactly three.
3232
+
3233
+ The styled sheet says how it divides, and the headless `auto` example
3234
+ carries the same three lines for a consumer writing their own.
3235
+
3236
+ **A value rather than the resting behavior**, which is what the
3237
+ responsiveness policy asks of every axis that a box decides: a splitter
3238
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
3239
+ changes what the carousel *does*, since how many are across is how many
3240
+ places the track can stop, so a carousel that had not asked for it would
3241
+ find its position count moving with the window.
3242
+
3151
3243
  No default, because it reflects. A reflected property with a value writes
3152
3244
  its attribute on upgrade, and the host then carries something a consumer's
3153
3245
  server markup never had, which React reports as a mismatch. The one-across
@@ -14599,13 +14691,27 @@ attribute at all. */
14599
14691
 
14600
14692
  Zero closes it outright. A panel whose contents include the control that
14601
14693
  reopens it, a row of tabs being the usual one, wants that row left showing,
14602
- and only whoever slotted it knows how tall that is. */
14694
+ and only whoever slotted it knows how tall that is.
14695
+
14696
+ **A floor rather than a second state**, which is what keeps `panel-size` the
14697
+ whole truth about the panel: a divider driven to the end lands here and
14698
+ `panel-size` reads this number, so "closed" is something a consumer already
14699
+ stores rather than a property they have to learn. The splitter inside has a
14700
+ `collapsed` of its own and it is refused, for the reason `handleCollapse`
14701
+ gives. */
14603
14702
  "panel-collapsed-size"?: (HelixSandbox["panelCollapsedSize"] | `${number}`) | undefined;
14604
14703
  /** What the panel's height becomes when it is closed.
14605
14704
 
14606
14705
  Zero closes it outright. A panel whose contents include the control that
14607
14706
  reopens it, a row of tabs being the usual one, wants that row left showing,
14608
- and only whoever slotted it knows how tall that is. */
14707
+ and only whoever slotted it knows how tall that is.
14708
+
14709
+ **A floor rather than a second state**, which is what keeps `panel-size` the
14710
+ whole truth about the panel: a divider driven to the end lands here and
14711
+ `panel-size` reads this number, so "closed" is something a consumer already
14712
+ stores rather than a property they have to learn. The splitter inside has a
14713
+ `collapsed` of its own and it is refused, for the reason `handleCollapse`
14714
+ gives. */
14609
14715
  panelCollapsedSize?: (HelixSandbox["panelCollapsedSize"]) | undefined;
14610
14716
  /** Accessible name for the panel's divider. */
14611
14717
  "panel-label"?: (HelixSandbox["panelLabel"]) | undefined;
@@ -14624,7 +14730,7 @@ and only whoever slotted it knows how tall that is. */
14624
14730
 
14625
14731
  /** Fired before the source is edited, by the source pane and heard here. Cancelable: refusing it takes the decision and nothing moves. */
14626
14732
  "onhelix-before-edit"?: ((e: HelixSandboxHelixBeforeEditElementEvent) => void) | undefined;
14627
- /** Fired before the panel's divider is let go, with its height in pixels. Cancelable: refusing it takes the decision and nothing moves. */
14733
+ /** Fired before the panel's divider is let go, with its height in pixels, and a panel driven shut arrives as `panel-collapsed-size`, which is the least it goes to. Cancelable: refusing it takes the decision and nothing moves. */
14628
14734
  "onhelix-before-panel-resize"?: ((
14629
14735
  e: HelixSandboxHelixBeforePanelResizeElementEvent,
14630
14736
  ) => void) | undefined;
@@ -14704,13 +14810,27 @@ attribute at all. */
14704
14810
 
14705
14811
  Zero closes it outright. A panel whose contents include the control that
14706
14812
  reopens it, a row of tabs being the usual one, wants that row left showing,
14707
- and only whoever slotted it knows how tall that is. */
14813
+ and only whoever slotted it knows how tall that is.
14814
+
14815
+ **A floor rather than a second state**, which is what keeps `panel-size` the
14816
+ whole truth about the panel: a divider driven to the end lands here and
14817
+ `panel-size` reads this number, so "closed" is something a consumer already
14818
+ stores rather than a property they have to learn. The splitter inside has a
14819
+ `collapsed` of its own and it is refused, for the reason `handleCollapse`
14820
+ gives. */
14708
14821
  "attr:panel-collapsed-size"?: (HelixSandbox["panelCollapsedSize"] | `${number}`) | undefined;
14709
14822
  /** What the panel's height becomes when it is closed.
14710
14823
 
14711
14824
  Zero closes it outright. A panel whose contents include the control that
14712
14825
  reopens it, a row of tabs being the usual one, wants that row left showing,
14713
- and only whoever slotted it knows how tall that is. */
14826
+ and only whoever slotted it knows how tall that is.
14827
+
14828
+ **A floor rather than a second state**, which is what keeps `panel-size` the
14829
+ whole truth about the panel: a divider driven to the end lands here and
14830
+ `panel-size` reads this number, so "closed" is something a consumer already
14831
+ stores rather than a property they have to learn. The splitter inside has a
14832
+ `collapsed` of its own and it is refused, for the reason `handleCollapse`
14833
+ gives. */
14714
14834
  "prop:panelCollapsedSize"?: (HelixSandbox["panelCollapsedSize"]) | undefined;
14715
14835
  /** Accessible name for the panel's divider. */
14716
14836
  "attr:panel-label"?: (HelixSandbox["panelLabel"]) | undefined;
@@ -14728,7 +14848,7 @@ and only whoever slotted it knows how tall that is. */
14728
14848
  "prop:split"?: (HelixSandbox["split"]) | undefined;
14729
14849
  /** Fired before the source is edited, by the source pane and heard here. Cancelable: refusing it takes the decision and nothing moves. */
14730
14850
  "on:helix-before-edit"?: ((e: HelixSandboxHelixBeforeEditElementEvent) => void) | undefined;
14731
- /** Fired before the panel's divider is let go, with its height in pixels. Cancelable: refusing it takes the decision and nothing moves. */
14851
+ /** Fired before the panel's divider is let go, with its height in pixels, and a panel driven shut arrives as `panel-collapsed-size`, which is the least it goes to. Cancelable: refusing it takes the decision and nothing moves. */
14732
14852
  "on:helix-before-panel-resize"?: ((
14733
14853
  e: HelixSandboxHelixBeforePanelResizeElementEvent,
14734
14854
  ) => void) | undefined;
@@ -16063,11 +16183,11 @@ has an honest answer. */
16063
16183
  /** How far one arrow press moves it, as a percentage. */
16064
16184
  step?: (HelixSplitter["step"]) | undefined;
16065
16185
 
16066
- /** Fired before a pane shuts or reopens, and only where the position it is derived from stood. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it. */
16186
+ /** Fired before a pane shuts or reopens, whether or not the resize that reached it was allowed, and carrying its own position: a shut pane sits at `collapsed-size` rather than at the number the resize named. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it. */
16067
16187
  "onhelix-before-collapse"?: ((
16068
16188
  e: HelixSplitterHelixBeforeCollapseElementEvent,
16069
16189
  ) => void) | undefined;
16070
- /** Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the whole of where the gesture ended, so no collapse follows from it either. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own. */
16190
+ /** Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the position and leaves the rest of the gesture, so a collapse the gesture reached is still announced and still yours to refuse. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own. */
16071
16191
  "onhelix-before-resize"?: ((
16072
16192
  e: HelixSplitterHelixBeforeResizeElementEvent,
16073
16193
  ) => void) | undefined;
@@ -16183,11 +16303,11 @@ has an honest answer. */
16183
16303
  "prop:orientation"?: (HelixSplitter["orientation"]) | undefined;
16184
16304
  /** How far one arrow press moves it, as a percentage. */
16185
16305
  "prop:step"?: (HelixSplitter["step"]) | undefined;
16186
- /** Fired before a pane shuts or reopens, and only where the position it is derived from stood. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it. */
16306
+ /** Fired before a pane shuts or reopens, whether or not the resize that reached it was allowed, and carrying its own position: a shut pane sits at `collapsed-size` rather than at the number the resize named. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it. */
16187
16307
  "on:helix-before-collapse"?: ((
16188
16308
  e: HelixSplitterHelixBeforeCollapseElementEvent,
16189
16309
  ) => void) | undefined;
16190
- /** Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the whole of where the gesture ended, so no collapse follows from it either. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own. */
16310
+ /** Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the position and leaves the rest of the gesture, so a collapse the gesture reached is still announced and still yours to refuse. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own. */
16191
16311
  "on:helix-before-resize"?: ((
16192
16312
  e: HelixSplitterHelixBeforeResizeElementEvent,
16193
16313
  ) => void) | undefined;
@@ -23019,6 +23139,29 @@ export type CustomElements = {
23019
23139
  * A value the track cannot honor is taken to the nearest one it can, by
23020
23140
  * `across`, and both tiers read that rather than this.
23021
23141
  *
23142
+ * **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
23143
+ * apiece, and nothing is written onto the track: the count is the sheet's,
23144
+ * and the sheet's alone, because it is the one number here CSS can work out
23145
+ * for itself. Everything it takes is a length the sheet already has, so the
23146
+ * panes are laid out at their final width by the first rule that runs, on a
23147
+ * server's markup as on the client's, and no script is waited on. That is the
23148
+ * whole reason a declared count was ever the only option: a carousel that
23149
+ * asks how wide its container is can only ask on the client, so the panes go
23150
+ * down at one width and move to another when the answer arrives. Written
23151
+ * inline the count would outrank the sheet that computes it, which is why an
23152
+ * `auto` track is handed nothing. A count stays for the design that calls for
23153
+ * exactly three.
23154
+ *
23155
+ * The styled sheet says how it divides, and the headless `auto` example
23156
+ * carries the same three lines for a consumer writing their own.
23157
+ *
23158
+ * **A value rather than the resting behavior**, which is what the
23159
+ * responsiveness policy asks of every axis that a box decides: a splitter
23160
+ * turns on `orientation="auto"` and a plain one does not turn at all. Fitting
23161
+ * changes what the carousel *does*, since how many are across is how many
23162
+ * places the track can stop, so a carousel that had not asked for it would
23163
+ * find its position count moving with the window.
23164
+ *
23022
23165
  * No default, because it reflects. A reflected property with a value writes
23023
23166
  * its attribute on upgrade, and the host then carries something a consumer's
23024
23167
  * server markup never had, which React reports as a mismatch. The one-across
@@ -23028,7 +23171,11 @@ export type CustomElements = {
23028
23171
  * A window of `perView` slides sliding one at a time over `n` of them stops
23029
23172
  * `n - perView + 1` times, so six slides four across is three: 0 to 3, 1 to 4,
23030
23173
  * 2 to 5. One at minimum, since a carousel showing everything it has still
23031
- * has the one place to be. (property only) (readonly)
23174
+ * has the one place to be.
23175
+ *
23176
+ * One across until a fitted track has been laid out, which is the same answer
23177
+ * a carousel that has never been told anything gives, and the dots are
23178
+ * withheld rather than counted from it. See `across`. (property only) (readonly)
23032
23179
  * - `slides`: The slides, in light-DOM order. Empty on the server, which has no tree. (property only) (readonly)
23033
23180
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
23034
23181
  *
@@ -23077,8 +23224,9 @@ export type CustomElements = {
23077
23224
  * - `--carousel-block-size`: Height of a vertical track. (default: `undefined`)
23078
23225
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
23079
23226
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
23080
- * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. (default: `undefined`)
23227
+ * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. Under `per-view="auto"` the component writes nothing and the sheet declares it instead, so the same name answers in both modes. See `perView`. (default: `undefined`)
23081
23228
  * - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
23229
+ * - `--carousel-slide-min`: The narrowest a slide may be laid out, which is what `per-view="auto"` fits the track with. A length, since the sheet divides by it. Unset is the whole track, which is one across. (default: `undefined`)
23082
23230
  *
23083
23231
  * ## CSS Parts
23084
23232
  *
@@ -33869,6 +34017,13 @@ export type CustomElements = {
33869
34017
  * Zero closes it outright. A panel whose contents include the control that
33870
34018
  * reopens it, a row of tabs being the usual one, wants that row left showing,
33871
34019
  * and only whoever slotted it knows how tall that is.
34020
+ *
34021
+ * **A floor rather than a second state**, which is what keeps `panel-size` the
34022
+ * whole truth about the panel: a divider driven to the end lands here and
34023
+ * `panel-size` reads this number, so "closed" is something a consumer already
34024
+ * stores rather than a property they have to learn. The splitter inside has a
34025
+ * `collapsed` of its own and it is refused, for the reason `handleCollapse`
34026
+ * gives.
33872
34027
  * - `panel-label`/`panelLabel`: Accessible name for the panel's divider.
33873
34028
  * - `panel-size`/`panelSize`: Height of the panel, in pixels.
33874
34029
  * - `separator-label`/`separatorLabel`: Accessible name for the divider.
@@ -33899,7 +34054,7 @@ export type CustomElements = {
33899
34054
  * Events that will be emitted by the component.
33900
34055
  *
33901
34056
  * - `helix-before-edit`: Fired before the source is edited, by the source pane and heard here. Cancelable: refusing it takes the decision and nothing moves.
33902
- * - `helix-before-panel-resize`: Fired before the panel's divider is let go, with its height in pixels. Cancelable: refusing it takes the decision and nothing moves.
34057
+ * - `helix-before-panel-resize`: Fired before the panel's divider is let go, with its height in pixels, and a panel driven shut arrives as `panel-collapsed-size`, which is the least it goes to. Cancelable: refusing it takes the decision and nothing moves.
33903
34058
  * - `helix-before-split`: Fired before the panes' divider is let go, with the lead pane's share. Cancelable: refusing it takes the decision and nothing moves.
33904
34059
  * - `helix-caret`: Fired when the cursor moves in the source, by the source pane and heard here.
33905
34060
  * - `helix-console`: Relayed from the frame by the preview pane, one per console call.
@@ -35654,8 +35809,8 @@ export type CustomElements = {
35654
35809
  *
35655
35810
  * Events that will be emitted by the component.
35656
35811
  *
35657
- * - `helix-before-collapse`: Fired before a pane shuts or reopens, and only where the position it is derived from stood. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it.
35658
- * - `helix-before-resize`: Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the whole of where the gesture ended, so no collapse follows from it either. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own.
35812
+ * - `helix-before-collapse`: Fired before a pane shuts or reopens, whether or not the resize that reached it was allowed, and carrying its own position: a shut pane sits at `collapsed-size` rather than at the number the resize named. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it.
35813
+ * - `helix-before-resize`: Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the position and leaves the rest of the gesture, so a collapse the gesture reached is still announced and still yours to refuse. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own.
35659
35814
  *
35660
35815
  * ## Slots
35661
35816
  *
@@ -42467,6 +42622,29 @@ export type CustomElementsSolidJs = {
42467
42622
  * A value the track cannot honor is taken to the nearest one it can, by
42468
42623
  * `across`, and both tiers read that rather than this.
42469
42624
  *
42625
+ * **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
42626
+ * apiece, and nothing is written onto the track: the count is the sheet's,
42627
+ * and the sheet's alone, because it is the one number here CSS can work out
42628
+ * for itself. Everything it takes is a length the sheet already has, so the
42629
+ * panes are laid out at their final width by the first rule that runs, on a
42630
+ * server's markup as on the client's, and no script is waited on. That is the
42631
+ * whole reason a declared count was ever the only option: a carousel that
42632
+ * asks how wide its container is can only ask on the client, so the panes go
42633
+ * down at one width and move to another when the answer arrives. Written
42634
+ * inline the count would outrank the sheet that computes it, which is why an
42635
+ * `auto` track is handed nothing. A count stays for the design that calls for
42636
+ * exactly three.
42637
+ *
42638
+ * The styled sheet says how it divides, and the headless `auto` example
42639
+ * carries the same three lines for a consumer writing their own.
42640
+ *
42641
+ * **A value rather than the resting behavior**, which is what the
42642
+ * responsiveness policy asks of every axis that a box decides: a splitter
42643
+ * turns on `orientation="auto"` and a plain one does not turn at all. Fitting
42644
+ * changes what the carousel *does*, since how many are across is how many
42645
+ * places the track can stop, so a carousel that had not asked for it would
42646
+ * find its position count moving with the window.
42647
+ *
42470
42648
  * No default, because it reflects. A reflected property with a value writes
42471
42649
  * its attribute on upgrade, and the host then carries something a consumer's
42472
42650
  * server markup never had, which React reports as a mismatch. The one-across
@@ -42476,7 +42654,11 @@ export type CustomElementsSolidJs = {
42476
42654
  * A window of `perView` slides sliding one at a time over `n` of them stops
42477
42655
  * `n - perView + 1` times, so six slides four across is three: 0 to 3, 1 to 4,
42478
42656
  * 2 to 5. One at minimum, since a carousel showing everything it has still
42479
- * has the one place to be. (property only) (readonly)
42657
+ * has the one place to be.
42658
+ *
42659
+ * One across until a fitted track has been laid out, which is the same answer
42660
+ * a carousel that has never been told anything gives, and the dots are
42661
+ * withheld rather than counted from it. See `across`. (property only) (readonly)
42480
42662
  * - `slides`: The slides, in light-DOM order. Empty on the server, which has no tree. (property only) (readonly)
42481
42663
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
42482
42664
  *
@@ -42525,8 +42707,9 @@ export type CustomElementsSolidJs = {
42525
42707
  * - `--carousel-block-size`: Height of a vertical track. (default: `undefined`)
42526
42708
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
42527
42709
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
42528
- * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. (default: `undefined`)
42710
+ * - `--carousel-per-view`: How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. Under `per-view="auto"` the component writes nothing and the sheet declares it instead, so the same name answers in both modes. See `perView`. (default: `undefined`)
42529
42711
  * - `--carousel-run-end`: How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. (default: `undefined`)
42712
+ * - `--carousel-slide-min`: The narrowest a slide may be laid out, which is what `per-view="auto"` fits the track with. A length, since the sheet divides by it. Unset is the whole track, which is one across. (default: `undefined`)
42530
42713
  *
42531
42714
  * ## CSS Parts
42532
42715
  *
@@ -53534,6 +53717,13 @@ export type CustomElementsSolidJs = {
53534
53717
  * Zero closes it outright. A panel whose contents include the control that
53535
53718
  * reopens it, a row of tabs being the usual one, wants that row left showing,
53536
53719
  * and only whoever slotted it knows how tall that is.
53720
+ *
53721
+ * **A floor rather than a second state**, which is what keeps `panel-size` the
53722
+ * whole truth about the panel: a divider driven to the end lands here and
53723
+ * `panel-size` reads this number, so "closed" is something a consumer already
53724
+ * stores rather than a property they have to learn. The splitter inside has a
53725
+ * `collapsed` of its own and it is refused, for the reason `handleCollapse`
53726
+ * gives.
53537
53727
  * - `panel-label`/`panelLabel`: Accessible name for the panel's divider.
53538
53728
  * - `panel-size`/`panelSize`: Height of the panel, in pixels.
53539
53729
  * - `separator-label`/`separatorLabel`: Accessible name for the divider.
@@ -53564,7 +53754,7 @@ export type CustomElementsSolidJs = {
53564
53754
  * Events that will be emitted by the component.
53565
53755
  *
53566
53756
  * - `helix-before-edit`: Fired before the source is edited, by the source pane and heard here. Cancelable: refusing it takes the decision and nothing moves.
53567
- * - `helix-before-panel-resize`: Fired before the panel's divider is let go, with its height in pixels. Cancelable: refusing it takes the decision and nothing moves.
53757
+ * - `helix-before-panel-resize`: Fired before the panel's divider is let go, with its height in pixels, and a panel driven shut arrives as `panel-collapsed-size`, which is the least it goes to. Cancelable: refusing it takes the decision and nothing moves.
53568
53758
  * - `helix-before-split`: Fired before the panes' divider is let go, with the lead pane's share. Cancelable: refusing it takes the decision and nothing moves.
53569
53759
  * - `helix-caret`: Fired when the cursor moves in the source, by the source pane and heard here.
53570
53760
  * - `helix-console`: Relayed from the frame by the preview pane, one per console call.
@@ -55361,8 +55551,8 @@ export type CustomElementsSolidJs = {
55361
55551
  *
55362
55552
  * Events that will be emitted by the component.
55363
55553
  *
55364
- * - `helix-before-collapse`: Fired before a pane shuts or reopens, and only where the position it is derived from stood. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it.
55365
- * - `helix-before-resize`: Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the whole of where the gesture ended, so no collapse follows from it either. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own.
55554
+ * - `helix-before-collapse`: Fired before a pane shuts or reopens, whether or not the resize that reached it was allowed, and carrying its own position: a shut pane sits at `collapsed-size` rather than at the number the resize named. Cancelable: refusing it leaves the pane as it was and the divider where the gesture put it.
55555
+ * - `helix-before-resize`: Fired before the divider settles, and only where the gesture moved it: a press that moved nothing, a drag that came back, an arrow with nowhere left to go and a corner that moved the other divider are all silent on this one. Cancelable: refusing it takes the position and leaves the rest of the gesture, so a collapse the gesture reached is still announced and still yours to refuse. A drag has already drawn itself by then and holds where it was dropped until the consumer assigns their own.
55366
55556
  *
55367
55557
  * ## Slots
55368
55558
  *
@@ -60010,10 +60200,12 @@ export type CustomCssProperties = {
60010
60200
  "--carousel-gap"?: (string) | undefined;
60011
60201
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
60012
60202
  "--carousel-pane"?: (string) | undefined;
60013
- /** How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. See `perView`. */
60203
+ /** How many slides go across, written onto the track by the component so a sheet divides the track by the same number the positions are counted from. Read it rather than selecting on `per-view`, which cannot be enumerated without a ceiling. Under `per-view="auto"` the component writes nothing and the sheet declares it instead, so the same name answers in both modes. See `perView`. */
60014
60204
  "--carousel-per-view"?: (string) | undefined;
60015
60205
  /** How far short of a whole pixel the run ends, on the last slide alone, for a sheet to take up as `margin-inline-end`. See `runEnd`. */
60016
60206
  "--carousel-run-end"?: (string) | undefined;
60207
+ /** The narrowest a slide may be laid out, which is what `per-view="auto"` fits the track with. A length, since the sheet divides by it. Unset is the whole track, which is one across. */
60208
+ "--carousel-slide-min"?: (string) | undefined;
60017
60209
  /** Fill behind the composer. */
60018
60210
  "--chat-composer-background-color"?: (string) | undefined;
60019
60211
  /** The composer's edge, so a theme can remove it. */