@fusion.dev/helix-headless 0.49.1 → 0.51.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.
@@ -25,7 +25,7 @@ declare const HelixHeadlessColorPicker_base: (new (...args: any[]) => import("@f
25
25
  * model once.
26
26
  *
27
27
  * @since 0.1.0
28
- * @status experimental
28
+ * @status stable
29
29
  * @category forms
30
30
  * @aliases Color, ColorArea, Swatch picker
31
31
  * @documentation https://fusion.dev/helix/components/color-picker
@@ -147,6 +147,12 @@ export declare class HelixHeadlessColorPicker extends HelixHeadlessColorPicker_b
147
147
  * value is requested. Gating only the request would leave the square under
148
148
  * the reader's pointer and the value where it was, which is a control that
149
149
  * refuses and looks like it accepted.
150
+ *
151
+ * **Two controls are refused whole rather than at either seam**, because
152
+ * both do something before they ask. The syntax toggle rewrites the value, so
153
+ * letting it move would show `rgb` over a hex it is no longer allowed to
154
+ * restate. The eyedropper clears the screen and runs a system sampler, so
155
+ * letting it open would take a color from the reader and drop it.
150
156
  */
151
157
  readOnly: boolean;
152
158
  /**
@@ -68,6 +68,9 @@ let HelixHeadlessColorPicker = class HelixHeadlessColorPicker extends MixinContr
68
68
  }
69
69
  };
70
70
  this.handleEyeDropper = async () => {
71
+ if (this.readOnly) {
72
+ return;
73
+ }
71
74
  const Dropper = globalThis.EyeDropper;
72
75
  if (!Dropper) {
73
76
  return;
@@ -19,7 +19,7 @@ declare const HelixHeadlessRating_base: (new (...args: any[]) => import("@fusion
19
19
  * input, and it is announced as one.
20
20
  *
21
21
  * @since 0.1.0
22
- * @status experimental
22
+ * @status stable
23
23
  * @category forms
24
24
  * @aliases Stars, Score, Review score
25
25
  * @documentation https://fusion.dev/helix/components/rating
@@ -41,8 +41,8 @@ import { type PropertyValues, type TemplateResult } from 'lit';
41
41
  * @slot end - The pane after it.
42
42
  * @slot start - The pane before the divider.
43
43
  *
44
- * @event {HelixBeforeCollapseEvent} 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.
45
- * @event {HelixBeforeResizeEvent} 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.
44
+ * @event {HelixBeforeCollapseEvent} 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.
45
+ * @event {HelixBeforeResizeEvent} 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.
46
46
  *
47
47
  * @csspart corner - The handle where two dividers cross, added on the client.
48
48
  * @csspart end - The box holding the second.
@@ -331,21 +331,36 @@ export declare class HelixHeadlessSplitter extends HelixElement {
331
331
  * Through the audited path, so a consumer who owns `position` is told what was
332
332
  * asked for and decides, and one who does not has already had it applied.
333
333
  *
334
- * **The second announcement is conditional on the first, because it is derived
335
- * from it.** `shutAt` reads the position the gesture ended on, so a refused
336
- * `helix-before-resize` leaves a collapse computed from a number that was
337
- * refused. Announced anyway, the refusal produced the outcome it was refusing:
338
- * measured on a divider at 40 with a listener calling `preventDefault`, Home
339
- * left `position` reporting 0 and `collapsed` reporting `start`, because the
340
- * collapse applied and `position` reads the sliver once a pane is shut. The
341
- * return of the first request is what says so, and it was being dropped: a
342
- * cancelable event dispatched as a bare statement with nothing reading the
343
- * answer, which is the shape the navigation cohort named on `Outline` and left.
334
+ * **A refused resize ends the resize and not the gesture.** `shutAt` reads the
335
+ * position the gesture ended on, so the collapse is computed from a number the
336
+ * consumer may have declined, and the reading this replaces was that the two
337
+ * are therefore one decision: refuse the first and the second cannot stand.
338
+ * That is a reasonable thing to believe about a splitter nobody else owns, and
339
+ * it takes "no" to mean the gesture is over. What it misses is that a consumer
340
+ * who owns the position refuses in order to *take* the decision, not to end
341
+ * it. The sandbox two folders away refuses every `helix-before-resize` from
342
+ * the splitter inside it, re-announces the same move in its own vocabulary and
343
+ * writes the answer back through `position`, which is what makes it the single
344
+ * decision point; returning on its refusal left `panel-collapsed-size` inert
345
+ * there, the shipped `with-a-panel` example measuring a 0px panel against the
346
+ * 36 its summary promises. So the collapse is reached either way and is
347
+ * refused, or not, on its own.
348
+ *
349
+ * **Which is honest because the collapse carries its own position.** A shut
350
+ * pane sits at `collapsed-size`, which is where `position` reads it from once
351
+ * `collapsed` is set, and never at the number the resize named: refuse a drag
352
+ * to 100 on a splitter with `collapsed-size="10"`, allow the collapse, and the
353
+ * divider is at 90. Nothing writes the refused number either, `requestChange`
354
+ * applying nothing when it is refused and the collapse below writing the open
355
+ * position back over whatever a drag had already drawn, so a consumer who says
356
+ * no to the position and yes to the collapse gets the pane shut and keeps the
357
+ * number they had to reopen to. The two coincide only where `collapsed-size`
358
+ * is zero, and the states differ even there: a shut pane knows where to open
359
+ * back to and a divider parked at the edge does not.
344
360
  *
345
361
  * Refusing the collapse alone still leaves the resize, which is the other way
346
362
  * round and is coherent: the divider goes where the drag put it and the pane
347
- * is not declared shut. What a consumer cannot have is a pane that collapses
348
- * out from under a position they said no to.
363
+ * is not declared shut.
349
364
  *
350
365
  * **A gesture that moved nothing announces nothing, and this is the one place
351
366
  * that can say so.** A change carrying the position the divider already had
@@ -305,7 +305,7 @@ let HelixHeadlessSplitter = HelixHeadlessSplitter_1 = class HelixHeadlessSplitte
305
305
  if (wanted === began && shut === this.collapsed) {
306
306
  return;
307
307
  }
308
- const moved = requestChange({
308
+ requestChange({
309
309
  apply: (value) => {
310
310
  const previous = this.position;
311
311
  this.positionState = value;
@@ -315,9 +315,6 @@ let HelixHeadlessSplitter = HelixHeadlessSplitter_1 = class HelixHeadlessSplitte
315
315
  host: this,
316
316
  next: wanted,
317
317
  });
318
- if (!moved) {
319
- return;
320
- }
321
318
  if (shut !== this.collapsed) {
322
319
  requestChange({
323
320
  apply: (value) => {
@@ -57,7 +57,7 @@ declare const HelixHeadlessTimePicker_base: (new (...args: any[]) => import("@fu
57
57
  * wheels, a wheel being a listbox like the list is.
58
58
  *
59
59
  * @since 0.1.0
60
- * @status experimental
60
+ * @status stable
61
61
  * @category forms
62
62
  * @aliases Time, TimeList
63
63
  * @documentation https://fusion.dev/helix/components/time-picker
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.49.1",
4
+ "version": "0.51.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -46,14 +46,14 @@
46
46
  },
47
47
  "bugs": "https://github.com/project-fusion/fusion/issues",
48
48
  "dependencies": {
49
- "@fusion.dev/helix-core": "0.49.1",
50
- "@fusion.dev/helix-icons": "0.49.1",
49
+ "@fusion.dev/helix-core": "0.51.0",
50
+ "@fusion.dev/helix-icons": "0.51.0",
51
51
  "uqr": "^0.1.3"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@custom-elements-manifest/analyzer": "^0.11.0",
55
- "@fusion.dev/helix-cem": "0.49.1",
56
- "@fusion.dev/helix-testing": "0.49.1",
55
+ "@fusion.dev/helix-cem": "0.51.0",
56
+ "@fusion.dev/helix-testing": "0.51.0",
57
57
  "@fusion.dev/scripts": "0.0.0-dev",
58
58
  "@happy-dom/global-registrator": "^20.0.0",
59
59
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -1861,6 +1861,29 @@ attribute is the one answer to how wide a pane is.
1861
1861
  A value the track cannot honor is taken to the nearest one it can, by
1862
1862
  `across`, and both tiers read that rather than this.
1863
1863
 
1864
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
1865
+ apiece, and nothing is written onto the track: the count is the sheet's,
1866
+ and the sheet's alone, because it is the one number here CSS can work out
1867
+ for itself. Everything it takes is a length the sheet already has, so the
1868
+ panes are laid out at their final width by the first rule that runs, on a
1869
+ server's markup as on the client's, and no script is waited on. That is the
1870
+ whole reason a declared count was ever the only option: a carousel that
1871
+ asks how wide its container is can only ask on the client, so the panes go
1872
+ down at one width and move to another when the answer arrives. Written
1873
+ inline the count would outrank the sheet that computes it, which is why an
1874
+ `auto` track is handed nothing. A count stays for the design that calls for
1875
+ exactly three.
1876
+
1877
+ The styled sheet says how it divides, and the headless `auto` example
1878
+ carries the same three lines for a consumer writing their own.
1879
+
1880
+ **A value rather than the resting behavior**, which is what the
1881
+ responsiveness policy asks of every axis that a box decides: a splitter
1882
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
1883
+ changes what the carousel *does*, since how many are across is how many
1884
+ places the track can stop, so a carousel that had not asked for it would
1885
+ find its position count moving with the window.
1886
+
1864
1887
  No default, because it reflects. A reflected property with a value writes
1865
1888
  its attribute on upgrade, and the host then carries something a consumer's
1866
1889
  server markup never had, which React reports as a mismatch. The one-across
@@ -1898,6 +1921,29 @@ attribute is the one answer to how wide a pane is.
1898
1921
  A value the track cannot honor is taken to the nearest one it can, by
1899
1922
  `across`, and both tiers read that rather than this.
1900
1923
 
1924
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
1925
+ apiece, and nothing is written onto the track: the count is the sheet's,
1926
+ and the sheet's alone, because it is the one number here CSS can work out
1927
+ for itself. Everything it takes is a length the sheet already has, so the
1928
+ panes are laid out at their final width by the first rule that runs, on a
1929
+ server's markup as on the client's, and no script is waited on. That is the
1930
+ whole reason a declared count was ever the only option: a carousel that
1931
+ asks how wide its container is can only ask on the client, so the panes go
1932
+ down at one width and move to another when the answer arrives. Written
1933
+ inline the count would outrank the sheet that computes it, which is why an
1934
+ `auto` track is handed nothing. A count stays for the design that calls for
1935
+ exactly three.
1936
+
1937
+ The styled sheet says how it divides, and the headless `auto` example
1938
+ carries the same three lines for a consumer writing their own.
1939
+
1940
+ **A value rather than the resting behavior**, which is what the
1941
+ responsiveness policy asks of every axis that a box decides: a splitter
1942
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
1943
+ changes what the carousel *does*, since how many are across is how many
1944
+ places the track can stop, so a carousel that had not asked for it would
1945
+ find its position count moving with the window.
1946
+
1901
1947
  No default, because it reflects. A reflected property with a value writes
1902
1948
  its attribute on upgrade, and the host then carries something a consumer's
1903
1949
  server markup never had, which React reports as a mismatch. The one-across
@@ -2004,6 +2050,29 @@ attribute is the one answer to how wide a pane is.
2004
2050
  A value the track cannot honor is taken to the nearest one it can, by
2005
2051
  `across`, and both tiers read that rather than this.
2006
2052
 
2053
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
2054
+ apiece, and nothing is written onto the track: the count is the sheet's,
2055
+ and the sheet's alone, because it is the one number here CSS can work out
2056
+ for itself. Everything it takes is a length the sheet already has, so the
2057
+ panes are laid out at their final width by the first rule that runs, on a
2058
+ server's markup as on the client's, and no script is waited on. That is the
2059
+ whole reason a declared count was ever the only option: a carousel that
2060
+ asks how wide its container is can only ask on the client, so the panes go
2061
+ down at one width and move to another when the answer arrives. Written
2062
+ inline the count would outrank the sheet that computes it, which is why an
2063
+ `auto` track is handed nothing. A count stays for the design that calls for
2064
+ exactly three.
2065
+
2066
+ The styled sheet says how it divides, and the headless `auto` example
2067
+ carries the same three lines for a consumer writing their own.
2068
+
2069
+ **A value rather than the resting behavior**, which is what the
2070
+ responsiveness policy asks of every axis that a box decides: a splitter
2071
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
2072
+ changes what the carousel *does*, since how many are across is how many
2073
+ places the track can stop, so a carousel that had not asked for it would
2074
+ find its position count moving with the window.
2075
+
2007
2076
  No default, because it reflects. A reflected property with a value writes
2008
2077
  its attribute on upgrade, and the host then carries something a consumer's
2009
2078
  server markup never had, which React reports as a mismatch. The one-across
@@ -2041,6 +2110,29 @@ attribute is the one answer to how wide a pane is.
2041
2110
  A value the track cannot honor is taken to the nearest one it can, by
2042
2111
  `across`, and both tiers read that rather than this.
2043
2112
 
2113
+ **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
2114
+ apiece, and nothing is written onto the track: the count is the sheet's,
2115
+ and the sheet's alone, because it is the one number here CSS can work out
2116
+ for itself. Everything it takes is a length the sheet already has, so the
2117
+ panes are laid out at their final width by the first rule that runs, on a
2118
+ server's markup as on the client's, and no script is waited on. That is the
2119
+ whole reason a declared count was ever the only option: a carousel that
2120
+ asks how wide its container is can only ask on the client, so the panes go
2121
+ down at one width and move to another when the answer arrives. Written
2122
+ inline the count would outrank the sheet that computes it, which is why an
2123
+ `auto` track is handed nothing. A count stays for the design that calls for
2124
+ exactly three.
2125
+
2126
+ The styled sheet says how it divides, and the headless `auto` example
2127
+ carries the same three lines for a consumer writing their own.
2128
+
2129
+ **A value rather than the resting behavior**, which is what the
2130
+ responsiveness policy asks of every axis that a box decides: a splitter
2131
+ turns on `orientation="auto"` and a plain one does not turn at all. Fitting
2132
+ changes what the carousel *does*, since how many are across is how many
2133
+ places the track can stop, so a carousel that had not asked for it would
2134
+ find its position count moving with the window.
2135
+
2044
2136
  No default, because it reflects. A reflected property with a value writes
2045
2137
  its attribute on upgrade, and the host then carries something a consumer's
2046
2138
  server markup never had, which React reports as a mismatch. The one-across
@@ -3172,7 +3264,13 @@ holds a model beside its value, which Date Picker and Time Picker do not:
3172
3264
  `moved` is the HSB the square is drawn from, and it is written before the
3173
3265
  value is requested. Gating only the request would leave the square under
3174
3266
  the reader's pointer and the value where it was, which is a control that
3175
- refuses and looks like it accepted. */
3267
+ refuses and looks like it accepted.
3268
+
3269
+ **Two controls are refused whole rather than at either seam**, because
3270
+ both do something before they ask. The syntax toggle rewrites the value, so
3271
+ letting it move would show `rgb` over a hex it is no longer allowed to
3272
+ restate. The eyedropper clears the screen and runs a system sampler, so
3273
+ letting it open would take a color from the reader and drop it. */
3176
3274
  readonly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3177
3275
  /** Whether the control refuses changes while still submitting its value.
3178
3276
 
@@ -3191,7 +3289,13 @@ holds a model beside its value, which Date Picker and Time Picker do not:
3191
3289
  `moved` is the HSB the square is drawn from, and it is written before the
3192
3290
  value is requested. Gating only the request would leave the square under
3193
3291
  the reader's pointer and the value where it was, which is a control that
3194
- refuses and looks like it accepted. */
3292
+ refuses and looks like it accepted.
3293
+
3294
+ **Two controls are refused whole rather than at either seam**, because
3295
+ both do something before they ask. The syntax toggle rewrites the value, so
3296
+ letting it move would show `rgb` over a hex it is no longer allowed to
3297
+ restate. The eyedropper clears the screen and runs a system sampler, so
3298
+ letting it open would take a color from the reader and drop it. */
3195
3299
  readOnly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3196
3300
  /** Whether the form refuses to submit while no color is chosen.
3197
3301
 
@@ -3353,7 +3457,13 @@ holds a model beside its value, which Date Picker and Time Picker do not:
3353
3457
  `moved` is the HSB the square is drawn from, and it is written before the
3354
3458
  value is requested. Gating only the request would leave the square under
3355
3459
  the reader's pointer and the value where it was, which is a control that
3356
- refuses and looks like it accepted. */
3460
+ refuses and looks like it accepted.
3461
+
3462
+ **Two controls are refused whole rather than at either seam**, because
3463
+ both do something before they ask. The syntax toggle rewrites the value, so
3464
+ letting it move would show `rgb` over a hex it is no longer allowed to
3465
+ restate. The eyedropper clears the screen and runs a system sampler, so
3466
+ letting it open would take a color from the reader and drop it. */
3357
3467
  "bool:readonly"?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3358
3468
  /** Whether the control refuses changes while still submitting its value.
3359
3469
 
@@ -3372,7 +3482,13 @@ holds a model beside its value, which Date Picker and Time Picker do not:
3372
3482
  `moved` is the HSB the square is drawn from, and it is written before the
3373
3483
  value is requested. Gating only the request would leave the square under
3374
3484
  the reader's pointer and the value where it was, which is a control that
3375
- refuses and looks like it accepted. */
3485
+ refuses and looks like it accepted.
3486
+
3487
+ **Two controls are refused whole rather than at either seam**, because
3488
+ both do something before they ask. The syntax toggle rewrites the value, so
3489
+ letting it move would show `rgb` over a hex it is no longer allowed to
3490
+ restate. The eyedropper clears the screen and runs a system sampler, so
3491
+ letting it open would take a color from the reader and drop it. */
3376
3492
  "prop:readOnly"?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
3377
3493
  /** Whether the form refuses to submit while no color is chosen.
3378
3494
 
@@ -13334,11 +13450,11 @@ has an honest answer. */
13334
13450
  /** How far one arrow press moves it, as a percentage. */
13335
13451
  step?: (HelixHeadlessSplitter["step"]) | undefined;
13336
13452
 
13337
- /** 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. */
13453
+ /** 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. */
13338
13454
  "onhelix-before-collapse"?: ((
13339
13455
  e: HelixHeadlessSplitterHelixBeforeCollapseElementEvent,
13340
13456
  ) => void) | undefined;
13341
- /** 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. */
13457
+ /** 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. */
13342
13458
  "onhelix-before-resize"?: ((
13343
13459
  e: HelixHeadlessSplitterHelixBeforeResizeElementEvent,
13344
13460
  ) => void) | undefined;
@@ -13438,11 +13554,11 @@ has an honest answer. */
13438
13554
  "prop:orientation"?: (HelixHeadlessSplitter["orientation"]) | undefined;
13439
13555
  /** How far one arrow press moves it, as a percentage. */
13440
13556
  "prop:step"?: (HelixHeadlessSplitter["step"]) | undefined;
13441
- /** 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. */
13557
+ /** 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. */
13442
13558
  "on:helix-before-collapse"?: ((
13443
13559
  e: HelixHeadlessSplitterHelixBeforeCollapseElementEvent,
13444
13560
  ) => void) | undefined;
13445
- /** 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. */
13561
+ /** 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. */
13446
13562
  "on:helix-before-resize"?: ((
13447
13563
  e: HelixHeadlessSplitterHelixBeforeResizeElementEvent,
13448
13564
  ) => void) | undefined;
@@ -19492,6 +19608,29 @@ export type CustomElements = {
19492
19608
  * A value the track cannot honor is taken to the nearest one it can, by
19493
19609
  * `across`, and both tiers read that rather than this.
19494
19610
  *
19611
+ * **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
19612
+ * apiece, and nothing is written onto the track: the count is the sheet's,
19613
+ * and the sheet's alone, because it is the one number here CSS can work out
19614
+ * for itself. Everything it takes is a length the sheet already has, so the
19615
+ * panes are laid out at their final width by the first rule that runs, on a
19616
+ * server's markup as on the client's, and no script is waited on. That is the
19617
+ * whole reason a declared count was ever the only option: a carousel that
19618
+ * asks how wide its container is can only ask on the client, so the panes go
19619
+ * down at one width and move to another when the answer arrives. Written
19620
+ * inline the count would outrank the sheet that computes it, which is why an
19621
+ * `auto` track is handed nothing. A count stays for the design that calls for
19622
+ * exactly three.
19623
+ *
19624
+ * The styled sheet says how it divides, and the headless `auto` example
19625
+ * carries the same three lines for a consumer writing their own.
19626
+ *
19627
+ * **A value rather than the resting behavior**, which is what the
19628
+ * responsiveness policy asks of every axis that a box decides: a splitter
19629
+ * turns on `orientation="auto"` and a plain one does not turn at all. Fitting
19630
+ * changes what the carousel *does*, since how many are across is how many
19631
+ * places the track can stop, so a carousel that had not asked for it would
19632
+ * find its position count moving with the window.
19633
+ *
19495
19634
  * No default, because it reflects. A reflected property with a value writes
19496
19635
  * its attribute on upgrade, and the host then carries something a consumer's
19497
19636
  * server markup never had, which React reports as a mismatch. The one-across
@@ -19501,7 +19640,11 @@ export type CustomElements = {
19501
19640
  * A window of `perView` slides sliding one at a time over `n` of them stops
19502
19641
  * `n - perView + 1` times, so six slides four across is three: 0 to 3, 1 to 4,
19503
19642
  * 2 to 5. One at minimum, since a carousel showing everything it has still
19504
- * has the one place to be. (property only) (readonly)
19643
+ * has the one place to be.
19644
+ *
19645
+ * One across until a fitted track has been laid out, which is the same answer
19646
+ * a carousel that has never been told anything gives, and the dots are
19647
+ * withheld rather than counted from it. See `across`. (property only) (readonly)
19505
19648
  * - `slides`: The slides, in light-DOM order. Empty on the server, which has no tree. (property only) (readonly)
19506
19649
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
19507
19650
  *
@@ -19548,8 +19691,9 @@ export type CustomElements = {
19548
19691
  *
19549
19692
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
19550
19693
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
19551
- * - `--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`)
19694
+ * - `--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`)
19552
19695
  * - `--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`)
19696
+ * - `--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`)
19553
19697
  *
19554
19698
  * ## CSS Parts
19555
19699
  *
@@ -20880,6 +21024,12 @@ export type CustomElements = {
20880
21024
  * value is requested. Gating only the request would leave the square under
20881
21025
  * the reader's pointer and the value where it was, which is a control that
20882
21026
  * refuses and looks like it accepted.
21027
+ *
21028
+ * **Two controls are refused whole rather than at either seam**, because
21029
+ * both do something before they ask. The syntax toggle rewrites the value, so
21030
+ * letting it move would show `rgb` over a hex it is no longer allowed to
21031
+ * restate. The eyedropper clears the screen and runs a system sampler, so
21032
+ * letting it open would take a color from the reader and drop it.
20883
21033
  * - `required`: Whether the form refuses to submit while no color is chosen.
20884
21034
  *
20885
21035
  * **A color is exactly as requirable as a date**, which is the comparison
@@ -31145,8 +31295,8 @@ export type CustomElements = {
31145
31295
  *
31146
31296
  * Events that will be emitted by the component.
31147
31297
  *
31148
- * - `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.
31149
- * - `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.
31298
+ * - `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.
31299
+ * - `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.
31150
31300
  *
31151
31301
  * ## Slots
31152
31302
  *
@@ -37373,6 +37523,29 @@ export type CustomElementsSolidJs = {
37373
37523
  * A value the track cannot honor is taken to the nearest one it can, by
37374
37524
  * `across`, and both tiers read that rather than this.
37375
37525
  *
37526
+ * **`auto` fits as many as the track can hold**, at `--carousel-slide-min`
37527
+ * apiece, and nothing is written onto the track: the count is the sheet's,
37528
+ * and the sheet's alone, because it is the one number here CSS can work out
37529
+ * for itself. Everything it takes is a length the sheet already has, so the
37530
+ * panes are laid out at their final width by the first rule that runs, on a
37531
+ * server's markup as on the client's, and no script is waited on. That is the
37532
+ * whole reason a declared count was ever the only option: a carousel that
37533
+ * asks how wide its container is can only ask on the client, so the panes go
37534
+ * down at one width and move to another when the answer arrives. Written
37535
+ * inline the count would outrank the sheet that computes it, which is why an
37536
+ * `auto` track is handed nothing. A count stays for the design that calls for
37537
+ * exactly three.
37538
+ *
37539
+ * The styled sheet says how it divides, and the headless `auto` example
37540
+ * carries the same three lines for a consumer writing their own.
37541
+ *
37542
+ * **A value rather than the resting behavior**, which is what the
37543
+ * responsiveness policy asks of every axis that a box decides: a splitter
37544
+ * turns on `orientation="auto"` and a plain one does not turn at all. Fitting
37545
+ * changes what the carousel *does*, since how many are across is how many
37546
+ * places the track can stop, so a carousel that had not asked for it would
37547
+ * find its position count moving with the window.
37548
+ *
37376
37549
  * No default, because it reflects. A reflected property with a value writes
37377
37550
  * its attribute on upgrade, and the host then carries something a consumer's
37378
37551
  * server markup never had, which React reports as a mismatch. The one-across
@@ -37382,7 +37555,11 @@ export type CustomElementsSolidJs = {
37382
37555
  * A window of `perView` slides sliding one at a time over `n` of them stops
37383
37556
  * `n - perView + 1` times, so six slides four across is three: 0 to 3, 1 to 4,
37384
37557
  * 2 to 5. One at minimum, since a carousel showing everything it has still
37385
- * has the one place to be. (property only) (readonly)
37558
+ * has the one place to be.
37559
+ *
37560
+ * One across until a fitted track has been laid out, which is the same answer
37561
+ * a carousel that has never been told anything gives, and the dots are
37562
+ * withheld rather than counted from it. See `across`. (property only) (readonly)
37386
37563
  * - `slides`: The slides, in light-DOM order. Empty on the server, which has no tree. (property only) (readonly)
37387
37564
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
37388
37565
  *
@@ -37429,8 +37606,9 @@ export type CustomElementsSolidJs = {
37429
37606
  *
37430
37607
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
37431
37608
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
37432
- * - `--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`)
37609
+ * - `--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`)
37433
37610
  * - `--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`)
37611
+ * - `--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`)
37434
37612
  *
37435
37613
  * ## CSS Parts
37436
37614
  *
@@ -38780,6 +38958,12 @@ export type CustomElementsSolidJs = {
38780
38958
  * value is requested. Gating only the request would leave the square under
38781
38959
  * the reader's pointer and the value where it was, which is a control that
38782
38960
  * refuses and looks like it accepted.
38961
+ *
38962
+ * **Two controls are refused whole rather than at either seam**, because
38963
+ * both do something before they ask. The syntax toggle rewrites the value, so
38964
+ * letting it move would show `rgb` over a hex it is no longer allowed to
38965
+ * restate. The eyedropper clears the screen and runs a system sampler, so
38966
+ * letting it open would take a color from the reader and drop it.
38783
38967
  * - `required`: Whether the form refuses to submit while no color is chosen.
38784
38968
  *
38785
38969
  * **A color is exactly as requirable as a date**, which is the comparison
@@ -49193,8 +49377,8 @@ export type CustomElementsSolidJs = {
49193
49377
  *
49194
49378
  * Events that will be emitted by the component.
49195
49379
  *
49196
- * - `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.
49197
- * - `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.
49380
+ * - `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.
49381
+ * - `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.
49198
49382
  *
49199
49383
  * ## Slots
49200
49384
  *
@@ -53615,10 +53799,12 @@ export type CustomCssProperties = {
53615
53799
  "--carousel-gap"?: (string) | undefined;
53616
53800
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
53617
53801
  "--carousel-pane"?: (string) | undefined;
53618
- /** 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`. */
53802
+ /** 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`. */
53619
53803
  "--carousel-per-view"?: (string) | undefined;
53620
53804
  /** 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`. */
53621
53805
  "--carousel-run-end"?: (string) | undefined;
53806
+ /** 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. */
53807
+ "--carousel-slide-min"?: (string) | undefined;
53622
53808
  /** The chosen color, to paint over the transparency check. */
53623
53809
  "--color-input-swatch"?: (string) | undefined;
53624
53810
  /** The chosen brightness, 0 to 100, as a percentage. */