@fusion.dev/helix-headless 0.47.0 → 0.48.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.
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
@@ -1622,6 +1664,67 @@ answer to which one is authoritative or which has the caret. Do not close it
1622
1664
  the other way round, with Color Input dropping its own field: the value
1623
1665
  would then be unreadable and unpasteable without opening a panel. */
1624
1666
  noValue?: (HelixHeadlessColorPicker["noValue"]) | undefined;
1667
+ /** Whether the control refuses changes while still submitting its value.
1668
+
1669
+ **Enforced by refusing every request in one place**, which is the seam this
1670
+ component already has: `requestValue` is what every path here comes through,
1671
+ and gating it once is what stops the next call site from being written
1672
+ without the check.
1673
+
1674
+ Not `disabled`, which is the confusion worth naming: a disabled control
1675
+ submits nothing and leaves the tab order, and a read-only one submits its
1676
+ value and stays reachable, which is what a form showing a color somebody
1677
+ else set needs.
1678
+
1679
+ **One gate is not enough here, and the second is `move`.** This picker
1680
+ holds a model beside its value, which Date Picker and Time Picker do not:
1681
+ `moved` is the HSB the square is drawn from, and it is written before the
1682
+ value is requested. Gating only the request would leave the square under
1683
+ the reader's pointer and the value where it was, which is a control that
1684
+ refuses and looks like it accepted. */
1685
+ readonly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
1686
+ /** Whether the control refuses changes while still submitting its value.
1687
+
1688
+ **Enforced by refusing every request in one place**, which is the seam this
1689
+ component already has: `requestValue` is what every path here comes through,
1690
+ and gating it once is what stops the next call site from being written
1691
+ without the check.
1692
+
1693
+ Not `disabled`, which is the confusion worth naming: a disabled control
1694
+ submits nothing and leaves the tab order, and a read-only one submits its
1695
+ value and stays reachable, which is what a form showing a color somebody
1696
+ else set needs.
1697
+
1698
+ **One gate is not enough here, and the second is `move`.** This picker
1699
+ holds a model beside its value, which Date Picker and Time Picker do not:
1700
+ `moved` is the HSB the square is drawn from, and it is written before the
1701
+ value is requested. Gating only the request would leave the square under
1702
+ the reader's pointer and the value where it was, which is a control that
1703
+ refuses and looks like it accepted. */
1704
+ readOnly?: (HelixHeadlessColorPicker["readOnly"]) | undefined;
1705
+ /** Whether the form refuses to submit while no color is chosen.
1706
+
1707
+ **A color is exactly as requirable as a date**, which is the comparison
1708
+ that settles it: this element extends `HelixFormElement`, carries `name`
1709
+ and reports its value, so a consumer writing
1710
+ `<helix-color-picker name="brand" required>` inside a form has every reason
1711
+ to expect the form to refuse an empty one. Its two siblings in the same
1712
+ composition position, Date Picker and Time Picker, both check it.
1713
+
1714
+ Written out rather than taken from `MixinField`, for the reason those two
1715
+ record: the mixin brings a label, a hint and a feedback region, and this is
1716
+ a panel composed *into* a field that already has all three, so taking it
1717
+ would give one control two of each. What is left is the validity call and
1718
+ the anchor the browser points its bubble at.
1719
+
1720
+ **Emptiness is the only fault reported, and bad input deliberately is
1721
+ not.** The value row is typed into a character at a time and every
1722
+ keystroke reaches `requestValue`, so `#0`, `#00` and `#00f` would each be a
1723
+ reported fault on the way to `#00ff00`. Date Picker and Time Picker can
1724
+ report bad input because their value moves only on a commit. Color Input
1725
+ reports it for this family instead, once, against the field the reader
1726
+ typed into. */
1727
+ required?: (HelixHeadlessColorPicker["required"]) | undefined;
1625
1728
  /** Colors offered under the picker, as a comma-separated list. */
1626
1729
  swatches?: (HelixHeadlessColorPicker["swatches"]) | undefined;
1627
1730
  /** The value the markup declared, which is where a reset returns to. */
@@ -6063,7 +6166,41 @@ export type HelixHeadlessRatingVueProps = {
6063
6166
  Zero rather than one, because "no rating" and "the worst rating" are
6064
6167
  different answers and a control that cannot express the first has to
6065
6168
  pretend the second. A survey that requires an answer says so with
6066
- `required`, not by making one unreachable. */
6169
+ `required`, not by making one unreachable.
6170
+
6171
+ **It is the floor of the scale, and every edge follows from that.**
6172
+
6173
+ *Clearing* returns the row to it. An empty rating, a value nothing can
6174
+ parse, and a form reset with nothing declared are all the same situation,
6175
+ and all three draw `min` filled: at the default of zero that is the empty
6176
+ row this always drew, and at `min="2"` it is two marks, the way an empty
6177
+ `Slider` sits at its own minimum rather than at zero. The value is still
6178
+ `""` through all of it, so `required` still refuses it and `valueAsNumber`
6179
+ is still `NaN`: what the row shows is the bottom of the scale, not an
6180
+ answer somebody gave.
6181
+
6182
+ *The steps* are the scores from `step` up to `max` that are not below it,
6183
+ so `min="2"` on five marks offers 2 to 5 and leaves the first two marks
6184
+ filled and unpressable. At zero nothing is dropped, which is why the
6185
+ default row is unchanged.
6186
+
6187
+ *The keyboard* moves through those steps and no others. `wrap` is already
6188
+ false here, so arrowing down from the lowest one holds its ground rather
6189
+ than reaching a score this property forbids, and the tab stop an unrated
6190
+ rating carries sits on the lowest score offered rather than on the first
6191
+ mark.
6192
+
6193
+ *A `min` between two steps* is a floor and not a step: `min="1.5"` with
6194
+ whole marks clamps the value at 1.5 and offers 2 upward, since 1.5 is not
6195
+ somewhere the row can be pressed. That is a real thing to ask for and is
6196
+ left to mean what it says.
6197
+
6198
+ *A `min` outside the marks is refused rather than obeyed*, and says so
6199
+ once on the console. Below zero and anything that is not a number are read
6200
+ as zero, there being no mark to draw for a negative score; above `max` is
6201
+ read as `max`, which collapses the scale to its top score rather than
6202
+ leaving a rating with nothing to press. A property that silently accepts
6203
+ nonsense is the fault this pays off, so neither case is quietly ignored. */
6067
6204
  min?: (HelixHeadlessRating["min"]) | undefined;
6068
6205
  /** Whether this shows a score rather than asks for one.
6069
6206
 
@@ -8914,6 +9051,8 @@ export type CustomCssProperties = {
8914
9051
  "--carousel-gap"?: (string) | undefined;
8915
9052
  /** The size one pane is laid out at. A sheet sets it and the component measures the run with it. */
8916
9053
  "--carousel-pane"?: (string) | undefined;
9054
+ /** 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`. */
9055
+ "--carousel-per-view"?: (string) | undefined;
8917
9056
  /** 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
9057
  "--carousel-run-end"?: (string) | undefined;
8919
9058
  /** The chosen color, to paint over the transparency check. */
@@ -8994,9 +9133,9 @@ export type CustomCssProperties = {
8994
9133
  "--rating-full"?: (string) | undefined;
8995
9134
  /** How much of the next mark is filled, 0 to 1. */
8996
9135
  "--rating-part"?: (string) | undefined;
8997
- /** The width of one step, as a fraction of a mark. */
9136
+ /** Which step along the row a target is, counting from one, whatever `min` leaves open. */
8998
9137
  "--rating-step"?: (string) | undefined;
8999
- /** How many steps one mark is divided into. */
9138
+ /** How many steps the whole row holds, which is `max` over `step`. */
9000
9139
  "--rating-steps"?: (string) | undefined;
9001
9140
  /** Where a point sits across, as a percentage. Written by the component. */
9002
9141
  "--chart-point-x"?: (string) | undefined;
@@ -9690,7 +9829,7 @@ export interface WcToolkitVueGlobalComponents {
9690
9829
  HelixHeadlessTimeInputVueProps,
9691
9830
  HelixHeadlessTimeInputVueEvents
9692
9831
  >;
9693
- /** **A list rather than three wheels**, and the reason is what a list already is. 'helix-listbox' brings the keyboard, the typeahead, the scroll into view and the announcement of a set of options, and a time at a step is a set of options. Three little wheels for hours, minutes and a meridiem are three controls to build, three to test, and a tab stop each for something a reader answers once. **A step is what makes it a list at all.** Fifteen minutes is ninety-six rows, which a reader scrolls or types into; one minute is one thousand four hundred and forty, which is a listbox in name only. So the list is for the times a product actually offers, and arbitrary times are the field's job in Input Time, the same division Date Input draws between typing a date and using the calendar. **The value is 'HH:mm' on a twenty-four hour clock, always.** That is what a form submits and what 'min' and 'max' compare against, and it sorts as a string, which is the whole reason the shape is that one. What each row *says* is the reader's own convention, from 'Intl'. */
9832
+ /** **A list rather than three wheels**, and the reason is what a list already is. 'helix-listbox' brings the keyboard, the typeahead, the scroll into view and the announcement of a set of options, and a time at a step is a set of options. Three little wheels for hours, minutes and a meridiem are three controls to build, three to test, and a tab stop each for something a reader answers once. **A step is what makes it a list at all.** Fifteen minutes is ninety-six rows, which a reader scrolls or types into; one minute is one thousand four hundred and forty, which is a listbox in name only. So the list is for the times a product actually offers, and arbitrary times are the field's job in Input Time, the same division Date Input draws between typing a date and using the calendar. **The value is 'HH:mm' on a twenty-four hour clock, always.** That is what a form submits and what 'min' and 'max' compare against, and it sorts as a string, which is the whole reason the shape is that one. What each row *says* is the reader's own convention, from 'Intl'. **The chosen row is marked in the markup, not worked out on upgrade.** The listbox is handed the answer as '.value', and lit-ssr serializes no property binding, so a served 'value="09:30"' shipped ninety-six rows with nothing on any of them saying which one it was: the mark arrived when the listbox upgraded and ran 'place'. So each option is given 'selected' as well, which is an attribute binding and does serve, and which the listbox then agrees with rather than fights, 'place' writing the same answer from the same value. 'selected' is the declaration a consumer writes on 'Option' anywhere else in the library, and Date Picker expresses its own choice as markup for the same reason: a picker whose answer is invisible until a script runs is a picker whose answer is not served at all. Both readings do it, the list and the wheels, a wheel being a listbox like the list is. */
9694
9833
  "helix-headless-time-picker": DefineCustomElement<
9695
9834
  HelixHeadlessTimePicker,
9696
9835
  HelixHeadlessTimePickerVueProps,