@fusion.dev/helix-headless 0.47.0 → 0.47.1

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.
@@ -9611,6 +9611,10 @@
9611
9611
  "description": "The size one pane is laid out at. A sheet sets it and the component measures the run with it.",
9612
9612
  "name": "--carousel-pane"
9613
9613
  },
9614
+ {
9615
+ "description": "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`.",
9616
+ "name": "--carousel-per-view"
9617
+ },
9614
9618
  {
9615
9619
  "description": "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`.",
9616
9620
  "name": "--carousel-run-end"
@@ -9806,10 +9810,20 @@
9806
9810
  "type": {
9807
9811
  "text": "number | undefined"
9808
9812
  },
9809
- "description": "How many slides are shown across the track at once. Absent shows one.\n\n**Here rather than on the styled tier, because it decides how many places\nthe track can stop.** From the stylesheet it looks like a width, one rule\nper value setting a custom property that the slides divide the track by.\nBut a carousel showing four of six slides has three positions, not six, and\neverything that counts positions is in this file. Declared up there, `goTo`\nclamps to the last *slide*, so three of the six indicators point at an\noffset the track has already reached: pressing next walks the dots to the\nend while the slides stop moving a third of the way through.\n\nNo default, because it reflects. A reflected property with a value writes\nits attribute on upgrade, and the host then carries something a consumer's\nserver markup never had, which React reports as a mismatch. The one-across\ncase is the absent attribute, and the styles read it that way.",
9813
+ "description": "How many slides are shown across the track at once. Absent shows one.\n\n**Here rather than on the styled tier, because it decides how many places\nthe track can stop.** From the stylesheet it looks like a width, one rule\nper value setting a custom property that the slides divide the track by.\nBut a carousel showing four of six slides has three positions, not six, and\neverything that counts positions is in this file. Declared up there, `goTo`\nclamps to the last *slide*, so three of the six indicators point at an\noffset the track has already reached: pressing next walks the dots to the\nend while the slides stop moving a third of the way through.\n\n**The number is published to the styles rather than enumerated by them**,\nas `--carousel-per-view` on the track, which is what keeps a width and a\ncount from disagreeing. A sheet can only name a value it wrote a rule for,\nso the styled tier enumerated `per-view=\"2\"` through `5` and called five a\njudgment; above it the pane fell back to one across while this file went on\ncounting positions. Measured in Chromium over eight slides, six across gave\nthree dots, a pane taking the whole track and five slides reachable only by\ndragging. Written from here there is no ceiling to exceed, and a consumer's\nown sheet reads the same declaration the styled one does. `runEnd` publishes\nits correction the same way and for the same reason.\n\n**On the track and not on the host.** A custom property on the host is a\nreflected attribute by another name: it would arrive on upgrade, and a\nconsumer's server markup never had it. Inside the component's own shadow\nroot it serializes with the rest of the template on the server, and the\ntrack's own declaration beats anything a consumer inherits in, so the\nattribute is the one answer to how wide a pane is.\n\nA value the track cannot honor is taken to the nearest one it can, by\n`across`, and both tiers read that rather than this.\n\nNo default, because it reflects. A reflected property with a value writes\nits attribute on upgrade, and the host then carries something a consumer's\nserver markup never had, which React reports as a mismatch. The one-across\ncase is the absent attribute, and the styles read it that way.",
9810
9814
  "attribute": "per-view",
9811
9815
  "reflects": true
9812
9816
  },
9817
+ {
9818
+ "kind": "field",
9819
+ "name": "across",
9820
+ "type": {
9821
+ "text": "number"
9822
+ },
9823
+ "privacy": "private",
9824
+ "description": "`perView` as both tiers use it: a whole number of slides, one at least.\n\n**The clamp is here because the arithmetic is here**, and the two readers\nof this number have to be given the same one. A fraction is floored, since\na position is a whole slide along: one and a half across leaves a last\nposition the track runs out before reaching, which is the fault `goTo`\nalready carries a comment about. Zero and a negative divide the track into\nnothing and into a pane facing the wrong way, and a non-numeric attribute\nparses to `NaN`, which `Math.max` propagates: it counted `NaN` positions,\ndrew no indicators at all and left `index` at `NaN`. All of them read as\none across, which is what a carousel with nothing sayable asked for.\n\nNot clamped to the number of slides. Six across four slides is four panes\nat a sixth of the track each and the one place to stand, which is what was\nasked for as nearly as it can be had, and the slide count is a fact the\nserver does not have: clamping to it would draw one width there and another\non upgrade.",
9825
+ "readonly": true
9826
+ },
9813
9827
  {
9814
9828
  "kind": "field",
9815
9829
  "name": "positions",
@@ -10477,7 +10491,7 @@
10477
10491
  "type": {
10478
10492
  "text": "number | undefined"
10479
10493
  },
10480
- "description": "How many slides are shown across the track at once. Absent shows one.\n\n**Here rather than on the styled tier, because it decides how many places\nthe track can stop.** From the stylesheet it looks like a width, one rule\nper value setting a custom property that the slides divide the track by.\nBut a carousel showing four of six slides has three positions, not six, and\neverything that counts positions is in this file. Declared up there, `goTo`\nclamps to the last *slide*, so three of the six indicators point at an\noffset the track has already reached: pressing next walks the dots to the\nend while the slides stop moving a third of the way through.\n\nNo default, because it reflects. A reflected property with a value writes\nits attribute on upgrade, and the host then carries something a consumer's\nserver markup never had, which React reports as a mismatch. The one-across\ncase is the absent attribute, and the styles read it that way.",
10494
+ "description": "How many slides are shown across the track at once. Absent shows one.\n\n**Here rather than on the styled tier, because it decides how many places\nthe track can stop.** From the stylesheet it looks like a width, one rule\nper value setting a custom property that the slides divide the track by.\nBut a carousel showing four of six slides has three positions, not six, and\neverything that counts positions is in this file. Declared up there, `goTo`\nclamps to the last *slide*, so three of the six indicators point at an\noffset the track has already reached: pressing next walks the dots to the\nend while the slides stop moving a third of the way through.\n\n**The number is published to the styles rather than enumerated by them**,\nas `--carousel-per-view` on the track, which is what keeps a width and a\ncount from disagreeing. A sheet can only name a value it wrote a rule for,\nso the styled tier enumerated `per-view=\"2\"` through `5` and called five a\njudgment; above it the pane fell back to one across while this file went on\ncounting positions. Measured in Chromium over eight slides, six across gave\nthree dots, a pane taking the whole track and five slides reachable only by\ndragging. Written from here there is no ceiling to exceed, and a consumer's\nown sheet reads the same declaration the styled one does. `runEnd` publishes\nits correction the same way and for the same reason.\n\n**On the track and not on the host.** A custom property on the host is a\nreflected attribute by another name: it would arrive on upgrade, and a\nconsumer's server markup never had it. Inside the component's own shadow\nroot it serializes with the rest of the template on the server, and the\ntrack's own declaration beats anything a consumer inherits in, so the\nattribute is the one answer to how wide a pane is.\n\nA value the track cannot honor is taken to the nearest one it can, by\n`across`, and both tiers read that rather than this.\n\nNo default, because it reflects. A reflected property with a value writes\nits attribute on upgrade, and the host then carries something a consumer's\nserver markup never had, which React reports as a mismatch. The one-across\ncase is the absent attribute, and the styles read it that way.",
10481
10495
  "fieldName": "perView"
10482
10496
  }
10483
10497
  ],
@@ -44,6 +44,7 @@ import { type PropertyValues, type TemplateResult } from 'lit';
44
44
  *
45
45
  * @cssproperty --carousel-gap - Space between slides. A sheet sets it and the component measures the run with it.
46
46
  * @cssproperty --carousel-pane - The size one pane is laid out at. A sheet sets it and the component measures the run with it.
47
+ * @cssproperty --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`.
47
48
  * @cssproperty --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`.
48
49
  */
49
50
  export declare class HelixHeadlessCarousel extends HelixElement {
@@ -161,12 +162,53 @@ export declare class HelixHeadlessCarousel extends HelixElement {
161
162
  * offset the track has already reached: pressing next walks the dots to the
162
163
  * end while the slides stop moving a third of the way through.
163
164
  *
165
+ * **The number is published to the styles rather than enumerated by them**,
166
+ * as `--carousel-per-view` on the track, which is what keeps a width and a
167
+ * count from disagreeing. A sheet can only name a value it wrote a rule for,
168
+ * so the styled tier enumerated `per-view="2"` through `5` and called five a
169
+ * judgment; above it the pane fell back to one across while this file went on
170
+ * counting positions. Measured in Chromium over eight slides, six across gave
171
+ * three dots, a pane taking the whole track and five slides reachable only by
172
+ * dragging. Written from here there is no ceiling to exceed, and a consumer's
173
+ * own sheet reads the same declaration the styled one does. `runEnd` publishes
174
+ * its correction the same way and for the same reason.
175
+ *
176
+ * **On the track and not on the host.** A custom property on the host is a
177
+ * reflected attribute by another name: it would arrive on upgrade, and a
178
+ * consumer's server markup never had it. Inside the component's own shadow
179
+ * root it serializes with the rest of the template on the server, and the
180
+ * track's own declaration beats anything a consumer inherits in, so the
181
+ * attribute is the one answer to how wide a pane is.
182
+ *
183
+ * A value the track cannot honor is taken to the nearest one it can, by
184
+ * `across`, and both tiers read that rather than this.
185
+ *
164
186
  * No default, because it reflects. A reflected property with a value writes
165
187
  * its attribute on upgrade, and the host then carries something a consumer's
166
188
  * server markup never had, which React reports as a mismatch. The one-across
167
189
  * case is the absent attribute, and the styles read it that way.
168
190
  */
169
191
  perView?: number;
192
+ /**
193
+ * `perView` as both tiers use it: a whole number of slides, one at least.
194
+ *
195
+ * **The clamp is here because the arithmetic is here**, and the two readers
196
+ * of this number have to be given the same one. A fraction is floored, since
197
+ * a position is a whole slide along: one and a half across leaves a last
198
+ * position the track runs out before reaching, which is the fault `goTo`
199
+ * already carries a comment about. Zero and a negative divide the track into
200
+ * nothing and into a pane facing the wrong way, and a non-numeric attribute
201
+ * parses to `NaN`, which `Math.max` propagates: it counted `NaN` positions,
202
+ * drew no indicators at all and left `index` at `NaN`. All of them read as
203
+ * one across, which is what a carousel with nothing sayable asked for.
204
+ *
205
+ * Not clamped to the number of slides. Six across four slides is four panes
206
+ * at a sixth of the track each and the one place to stand, which is what was
207
+ * asked for as nearly as it can be had, and the slide count is a fact the
208
+ * server does not have: clamping to it would draw one width there and another
209
+ * on upgrade.
210
+ */
211
+ private get across();
170
212
  /**
171
213
  * How many distinct views the track holds, which is what the indicators count.
172
214
  *
@@ -95,9 +95,12 @@ let HelixHeadlessCarousel = class HelixHeadlessCarousel extends HelixElement {
95
95
  this.indexState = next;
96
96
  this.requestUpdate('index', previous);
97
97
  }
98
+ get across() {
99
+ const asked = this.perView ?? 1;
100
+ return Number.isFinite(asked) ? Math.max(1, Math.floor(asked)) : 1;
101
+ }
98
102
  get positions() {
99
- const across = Math.max(1, Math.floor(this.perView ?? 1));
100
- return Math.max(1, this.slides.length - across + 1);
103
+ return Math.max(1, this.slides.length - this.across + 1);
101
104
  }
102
105
  get panes() {
103
106
  return [...(this.renderRoot?.querySelectorAll?.('[part="slide"]') ?? [])];
@@ -305,6 +308,7 @@ let HelixHeadlessCarousel = class HelixHeadlessCarousel extends HelixElement {
305
308
  <div
306
309
  data-scroller
307
310
  part="track"
311
+ style=${`--carousel-per-view: ${this.across}`}
308
312
  @scroll=${this.handleTrackScroll}
309
313
  @scrollend=${this.handleScroll}
310
314
  @pointerdown=${this.handleTake}
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.47.0",
4
+ "version": "0.47.1",
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.47.0",
50
- "@fusion.dev/helix-icons": "0.47.0",
49
+ "@fusion.dev/helix-core": "0.47.1",
50
+ "@fusion.dev/helix-icons": "0.47.1",
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.47.0",
56
- "@fusion.dev/helix-testing": "0.47.0",
55
+ "@fusion.dev/helix-cem": "0.47.1",
56
+ "@fusion.dev/helix-testing": "0.47.1",
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
@@ -1839,6 +1839,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1839
1839
  offset the track has already reached: pressing next walks the dots to the
1840
1840
  end while the slides stop moving a third of the way through.
1841
1841
 
1842
+ **The number is published to the styles rather than enumerated by them**,
1843
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1844
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1845
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1846
+ judgment; above it the pane fell back to one across while this file went on
1847
+ counting positions. Measured in Chromium over eight slides, six across gave
1848
+ three dots, a pane taking the whole track and five slides reachable only by
1849
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1850
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1851
+ its correction the same way and for the same reason.
1852
+
1853
+ **On the track and not on the host.** A custom property on the host is a
1854
+ reflected attribute by another name: it would arrive on upgrade, and a
1855
+ consumer's server markup never had it. Inside the component's own shadow
1856
+ root it serializes with the rest of the template on the server, and the
1857
+ track's own declaration beats anything a consumer inherits in, so the
1858
+ attribute is the one answer to how wide a pane is.
1859
+
1860
+ A value the track cannot honor is taken to the nearest one it can, by
1861
+ `across`, and both tiers read that rather than this.
1862
+
1842
1863
  No default, because it reflects. A reflected property with a value writes
1843
1864
  its attribute on upgrade, and the host then carries something a consumer's
1844
1865
  server markup never had, which React reports as a mismatch. The one-across
@@ -1855,6 +1876,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1855
1876
  offset the track has already reached: pressing next walks the dots to the
1856
1877
  end while the slides stop moving a third of the way through.
1857
1878
 
1879
+ **The number is published to the styles rather than enumerated by them**,
1880
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1881
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1882
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1883
+ judgment; above it the pane fell back to one across while this file went on
1884
+ counting positions. Measured in Chromium over eight slides, six across gave
1885
+ three dots, a pane taking the whole track and five slides reachable only by
1886
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1887
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1888
+ its correction the same way and for the same reason.
1889
+
1890
+ **On the track and not on the host.** A custom property on the host is a
1891
+ reflected attribute by another name: it would arrive on upgrade, and a
1892
+ consumer's server markup never had it. Inside the component's own shadow
1893
+ root it serializes with the rest of the template on the server, and the
1894
+ track's own declaration beats anything a consumer inherits in, so the
1895
+ attribute is the one answer to how wide a pane is.
1896
+
1897
+ A value the track cannot honor is taken to the nearest one it can, by
1898
+ `across`, and both tiers read that rather than this.
1899
+
1858
1900
  No default, because it reflects. A reflected property with a value writes
1859
1901
  its attribute on upgrade, and the host then carries something a consumer's
1860
1902
  server markup never had, which React reports as a mismatch. The one-across
@@ -1940,6 +1982,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1940
1982
  offset the track has already reached: pressing next walks the dots to the
1941
1983
  end while the slides stop moving a third of the way through.
1942
1984
 
1985
+ **The number is published to the styles rather than enumerated by them**,
1986
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1987
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1988
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1989
+ judgment; above it the pane fell back to one across while this file went on
1990
+ counting positions. Measured in Chromium over eight slides, six across gave
1991
+ three dots, a pane taking the whole track and five slides reachable only by
1992
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1993
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1994
+ its correction the same way and for the same reason.
1995
+
1996
+ **On the track and not on the host.** A custom property on the host is a
1997
+ reflected attribute by another name: it would arrive on upgrade, and a
1998
+ consumer's server markup never had it. Inside the component's own shadow
1999
+ root it serializes with the rest of the template on the server, and the
2000
+ track's own declaration beats anything a consumer inherits in, so the
2001
+ attribute is the one answer to how wide a pane is.
2002
+
2003
+ A value the track cannot honor is taken to the nearest one it can, by
2004
+ `across`, and both tiers read that rather than this.
2005
+
1943
2006
  No default, because it reflects. A reflected property with a value writes
1944
2007
  its attribute on upgrade, and the host then carries something a consumer's
1945
2008
  server markup never had, which React reports as a mismatch. The one-across
@@ -1956,6 +2019,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1956
2019
  offset the track has already reached: pressing next walks the dots to the
1957
2020
  end while the slides stop moving a third of the way through.
1958
2021
 
2022
+ **The number is published to the styles rather than enumerated by them**,
2023
+ as `--carousel-per-view` on the track, which is what keeps a width and a
2024
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
2025
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
2026
+ judgment; above it the pane fell back to one across while this file went on
2027
+ counting positions. Measured in Chromium over eight slides, six across gave
2028
+ three dots, a pane taking the whole track and five slides reachable only by
2029
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
2030
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
2031
+ its correction the same way and for the same reason.
2032
+
2033
+ **On the track and not on the host.** A custom property on the host is a
2034
+ reflected attribute by another name: it would arrive on upgrade, and a
2035
+ consumer's server markup never had it. Inside the component's own shadow
2036
+ root it serializes with the rest of the template on the server, and the
2037
+ track's own declaration beats anything a consumer inherits in, so the
2038
+ attribute is the one answer to how wide a pane is.
2039
+
2040
+ A value the track cannot honor is taken to the nearest one it can, by
2041
+ `across`, and both tiers read that rather than this.
2042
+
1959
2043
  No default, because it reflects. A reflected property with a value writes
1960
2044
  its attribute on upgrade, and the host then carries something a consumer's
1961
2045
  server markup never had, which React reports as a mismatch. The one-across
@@ -19196,6 +19280,27 @@ export type CustomElements = {
19196
19280
  * offset the track has already reached: pressing next walks the dots to the
19197
19281
  * end while the slides stop moving a third of the way through.
19198
19282
  *
19283
+ * **The number is published to the styles rather than enumerated by them**,
19284
+ * as `--carousel-per-view` on the track, which is what keeps a width and a
19285
+ * count from disagreeing. A sheet can only name a value it wrote a rule for,
19286
+ * so the styled tier enumerated `per-view="2"` through `5` and called five a
19287
+ * judgment; above it the pane fell back to one across while this file went on
19288
+ * counting positions. Measured in Chromium over eight slides, six across gave
19289
+ * three dots, a pane taking the whole track and five slides reachable only by
19290
+ * dragging. Written from here there is no ceiling to exceed, and a consumer's
19291
+ * own sheet reads the same declaration the styled one does. `runEnd` publishes
19292
+ * its correction the same way and for the same reason.
19293
+ *
19294
+ * **On the track and not on the host.** A custom property on the host is a
19295
+ * reflected attribute by another name: it would arrive on upgrade, and a
19296
+ * consumer's server markup never had it. Inside the component's own shadow
19297
+ * root it serializes with the rest of the template on the server, and the
19298
+ * track's own declaration beats anything a consumer inherits in, so the
19299
+ * attribute is the one answer to how wide a pane is.
19300
+ *
19301
+ * A value the track cannot honor is taken to the nearest one it can, by
19302
+ * `across`, and both tiers read that rather than this.
19303
+ *
19199
19304
  * No default, because it reflects. A reflected property with a value writes
19200
19305
  * its attribute on upgrade, and the host then carries something a consumer's
19201
19306
  * server markup never had, which React reports as a mismatch. The one-across
@@ -19252,6 +19357,7 @@ export type CustomElements = {
19252
19357
  *
19253
19358
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
19254
19359
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
19360
+ * - `--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`)
19255
19361
  * - `--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`)
19256
19362
  *
19257
19363
  * ## CSS Parts
@@ -36973,6 +37079,27 @@ export type CustomElementsSolidJs = {
36973
37079
  * offset the track has already reached: pressing next walks the dots to the
36974
37080
  * end while the slides stop moving a third of the way through.
36975
37081
  *
37082
+ * **The number is published to the styles rather than enumerated by them**,
37083
+ * as `--carousel-per-view` on the track, which is what keeps a width and a
37084
+ * count from disagreeing. A sheet can only name a value it wrote a rule for,
37085
+ * so the styled tier enumerated `per-view="2"` through `5` and called five a
37086
+ * judgment; above it the pane fell back to one across while this file went on
37087
+ * counting positions. Measured in Chromium over eight slides, six across gave
37088
+ * three dots, a pane taking the whole track and five slides reachable only by
37089
+ * dragging. Written from here there is no ceiling to exceed, and a consumer's
37090
+ * own sheet reads the same declaration the styled one does. `runEnd` publishes
37091
+ * its correction the same way and for the same reason.
37092
+ *
37093
+ * **On the track and not on the host.** A custom property on the host is a
37094
+ * reflected attribute by another name: it would arrive on upgrade, and a
37095
+ * consumer's server markup never had it. Inside the component's own shadow
37096
+ * root it serializes with the rest of the template on the server, and the
37097
+ * track's own declaration beats anything a consumer inherits in, so the
37098
+ * attribute is the one answer to how wide a pane is.
37099
+ *
37100
+ * A value the track cannot honor is taken to the nearest one it can, by
37101
+ * `across`, and both tiers read that rather than this.
37102
+ *
36976
37103
  * No default, because it reflects. A reflected property with a value writes
36977
37104
  * its attribute on upgrade, and the host then carries something a consumer's
36978
37105
  * server markup never had, which React reports as a mismatch. The one-across
@@ -37029,6 +37156,7 @@ export type CustomElementsSolidJs = {
37029
37156
  *
37030
37157
  * - `--carousel-gap`: Space between slides. A sheet sets it and the component measures the run with it. (default: `undefined`)
37031
37158
  * - `--carousel-pane`: The size one pane is laid out at. A sheet sets it and the component measures the run with it. (default: `undefined`)
37159
+ * - `--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`)
37032
37160
  * - `--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`)
37033
37161
  *
37034
37162
  * ## CSS Parts
@@ -53132,6 +53260,8 @@ export type CustomCssProperties = {
53132
53260
  "--carousel-gap"?: (string) | undefined;
53133
53261
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
53134
53262
  "--carousel-pane"?: (string) | undefined;
53263
+ /** 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`. */
53264
+ "--carousel-per-view"?: (string) | undefined;
53135
53265
  /** 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`. */
53136
53266
  "--carousel-run-end"?: (string) | undefined;
53137
53267
  /** The chosen color, to paint over the transparency check. */
package/types/vue.d.ts CHANGED
@@ -985,6 +985,27 @@ clamps to the last *slide*, so three of the six indicators point at an
985
985
  offset the track has already reached: pressing next walks the dots to the
986
986
  end while the slides stop moving a third of the way through.
987
987
 
988
+ **The number is published to the styles rather than enumerated by them**,
989
+ as `--carousel-per-view` on the track, which is what keeps a width and a
990
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
991
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
992
+ judgment; above it the pane fell back to one across while this file went on
993
+ counting positions. Measured in Chromium over eight slides, six across gave
994
+ three dots, a pane taking the whole track and five slides reachable only by
995
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
996
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
997
+ its correction the same way and for the same reason.
998
+
999
+ **On the track and not on the host.** A custom property on the host is a
1000
+ reflected attribute by another name: it would arrive on upgrade, and a
1001
+ consumer's server markup never had it. Inside the component's own shadow
1002
+ root it serializes with the rest of the template on the server, and the
1003
+ track's own declaration beats anything a consumer inherits in, so the
1004
+ attribute is the one answer to how wide a pane is.
1005
+
1006
+ A value the track cannot honor is taken to the nearest one it can, by
1007
+ `across`, and both tiers read that rather than this.
1008
+
988
1009
  No default, because it reflects. A reflected property with a value writes
989
1010
  its attribute on upgrade, and the host then carries something a consumer's
990
1011
  server markup never had, which React reports as a mismatch. The one-across
@@ -1001,6 +1022,27 @@ clamps to the last *slide*, so three of the six indicators point at an
1001
1022
  offset the track has already reached: pressing next walks the dots to the
1002
1023
  end while the slides stop moving a third of the way through.
1003
1024
 
1025
+ **The number is published to the styles rather than enumerated by them**,
1026
+ as `--carousel-per-view` on the track, which is what keeps a width and a
1027
+ count from disagreeing. A sheet can only name a value it wrote a rule for,
1028
+ so the styled tier enumerated `per-view="2"` through `5` and called five a
1029
+ judgment; above it the pane fell back to one across while this file went on
1030
+ counting positions. Measured in Chromium over eight slides, six across gave
1031
+ three dots, a pane taking the whole track and five slides reachable only by
1032
+ dragging. Written from here there is no ceiling to exceed, and a consumer's
1033
+ own sheet reads the same declaration the styled one does. `runEnd` publishes
1034
+ its correction the same way and for the same reason.
1035
+
1036
+ **On the track and not on the host.** A custom property on the host is a
1037
+ reflected attribute by another name: it would arrive on upgrade, and a
1038
+ consumer's server markup never had it. Inside the component's own shadow
1039
+ root it serializes with the rest of the template on the server, and the
1040
+ track's own declaration beats anything a consumer inherits in, so the
1041
+ attribute is the one answer to how wide a pane is.
1042
+
1043
+ A value the track cannot honor is taken to the nearest one it can, by
1044
+ `across`, and both tiers read that rather than this.
1045
+
1004
1046
  No default, because it reflects. A reflected property with a value writes
1005
1047
  its attribute on upgrade, and the host then carries something a consumer's
1006
1048
  server markup never had, which React reports as a mismatch. The one-across
@@ -8914,6 +8956,8 @@ export type CustomCssProperties = {
8914
8956
  "--carousel-gap"?: (string) | undefined;
8915
8957
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
8916
8958
  "--carousel-pane"?: (string) | undefined;
8959
+ /** 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`. */
8960
+ "--carousel-per-view"?: (string) | undefined;
8917
8961
  /** 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`. */
8918
8962
  "--carousel-run-end"?: (string) | undefined;
8919
8963
  /** The chosen color, to paint over the transparency check. */