@fusion.dev/helix-headless 0.164.0 → 0.165.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/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.164.0",
4
+ "version": "0.165.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -49,13 +49,13 @@
49
49
  },
50
50
  "bugs": "https://github.com/project-fusion/fusion/issues",
51
51
  "dependencies": {
52
- "@fusion.dev/helix-core": "0.164.0",
53
- "@fusion.dev/helix-icons": "0.164.0",
52
+ "@fusion.dev/helix-core": "0.165.0",
53
+ "@fusion.dev/helix-icons": "0.165.0",
54
54
  "uqr": "^0.1.3"
55
55
  },
56
56
  "devDependencies": {
57
- "@fusion.dev/helix-cem": "0.164.0",
58
- "@fusion.dev/helix-testing": "0.164.0",
57
+ "@fusion.dev/helix-cem": "0.165.0",
58
+ "@fusion.dev/helix-testing": "0.165.0",
59
59
  "@fusion.dev/scripts": "0.0.0-dev",
60
60
  "@happy-dom/global-registrator": "^20.14.5",
61
61
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -14258,7 +14258,9 @@ place of the date: `long` ("3 hours ago"), `short` ("3 hr. ago") or
14258
14258
  `narrow` ("3h ago").
14259
14259
 
14260
14260
  The reading refreshes as it goes stale, as `elapsed` does, and the whole
14261
- date is its title. `elapsed` wins where both are set. */
14261
+ date is its title. `elapsed` wins where both are set. Written with no
14262
+ value, as `elapsed` is, or with a style `Intl` does not know, it reads
14263
+ `long`. */
14262
14264
  relative?: (HelixHeadlessFormatDate["relative"]) | undefined;
14263
14265
  /** How the second is written, where a time of day is shown. */
14264
14266
  second?: (HelixHeadlessFormatDate["second"]) | undefined;
@@ -14400,7 +14402,9 @@ place of the date: `long` ("3 hours ago"), `short` ("3 hr. ago") or
14400
14402
  `narrow` ("3h ago").
14401
14403
 
14402
14404
  The reading refreshes as it goes stale, as `elapsed` does, and the whole
14403
- date is its title. `elapsed` wins where both are set. */
14405
+ date is its title. `elapsed` wins where both are set. Written with no
14406
+ value, as `elapsed` is, or with a style `Intl` does not know, it reads
14407
+ `long`. */
14404
14408
  "prop:relative"?: (HelixHeadlessFormatDate["relative"]) | undefined;
14405
14409
  /** How the second is written, where a time of day is shown. */
14406
14410
  "prop:second"?: (HelixHeadlessFormatDate["second"]) | undefined;
@@ -22042,10 +22046,11 @@ one they already know. */
22042
22046
  invalid, as it is in a native number field.
22043
22047
 
22044
22048
  Unset, a step moves by one, or by one percent under a percent format, and
22045
- a typed number is rounded to the smallest amount `format-options` shows
22046
- rather than to whole steps, as React Aria's NumberField does: a field
22047
- showing dollars keeps the cents typed into it. Without `format-options`
22048
- the grid is whole numbers, as in a native number field. */
22049
+ a typed number is rounded to the smallest amount the format shows, as
22050
+ React Aria's NumberField does: a field showing dollars keeps the cents
22051
+ typed into it, and one with no `format-options` keeps three decimal
22052
+ places. `any` puts the number on no grid, as it does in a native number
22053
+ field: a step moves by one, and any number in range is valid. */
22049
22054
  step?: (HelixHeadlessNumberInput["step"]) | undefined;
22050
22055
  /** The message the browser shows when the number is off the step grid, with
22051
22056
  `{below}` and `{above}` filled in with the nearest valid values, written in
@@ -22320,10 +22325,11 @@ one they already know. */
22320
22325
  invalid, as it is in a native number field.
22321
22326
 
22322
22327
  Unset, a step moves by one, or by one percent under a percent format, and
22323
- a typed number is rounded to the smallest amount `format-options` shows
22324
- rather than to whole steps, as React Aria's NumberField does: a field
22325
- showing dollars keeps the cents typed into it. Without `format-options`
22326
- the grid is whole numbers, as in a native number field. */
22328
+ a typed number is rounded to the smallest amount the format shows, as
22329
+ React Aria's NumberField does: a field showing dollars keeps the cents
22330
+ typed into it, and one with no `format-options` keeps three decimal
22331
+ places. `any` puts the number on no grid, as it does in a native number
22332
+ field: a step moves by one, and any number in range is valid. */
22327
22333
  "prop:step"?: (HelixHeadlessNumberInput["step"]) | undefined;
22328
22334
  /** The message the browser shows when the number is off the step grid, with
22329
22335
  `{below}` and `{above}` filled in with the nearest valid values, written in
@@ -46941,7 +46947,9 @@ export type CustomElements = {
46941
46947
  * `narrow` ("3h ago").
46942
46948
  *
46943
46949
  * The reading refreshes as it goes stale, as `elapsed` does, and the whole
46944
- * date is its title. `elapsed` wins where both are set.
46950
+ * date is its title. `elapsed` wins where both are set. Written with no
46951
+ * value, as `elapsed` is, or with a style `Intl` does not know, it reads
46952
+ * `long`.
46945
46953
  * - `second`: How the second is written, where a time of day is shown.
46946
46954
  * - `time-style`/`timeStyle`: The locale's own pattern for the time of day: `full`, `long`, `medium`, or
46947
46955
  * `short`. Set, it stands in for `hour`, `minute`, `second` and
@@ -53007,7 +53015,7 @@ export type CustomElements = {
53007
53015
  * A separate family from `Input`'s `type="number"`. It renders two buttons,
53008
53016
  * binds four keys `Input` does not, and handles clamping and stepping.
53009
53017
  *
53010
- * The field is `type="text"` with `inputmode="decimal"`. Tested in a real
53018
+ * The field is `type="text"` with an `inputmode` for a number. Tested in a real
53011
53019
  * browser, `type="number"` fails in three ways:
53012
53020
  * - Typing `12e` gives a `.value` of `""`, so the element cannot see what you
53013
53021
  * typed. A `type="text"` field keeps `"12e"`.
@@ -53015,7 +53023,11 @@ export type CustomElements = {
53015
53023
  * to 4, when you only meant to scroll the page.
53016
53024
  * - `selectionStart` is `null`, so the caret cannot be managed.
53017
53025
  *
53018
- * `inputmode="decimal"` keeps the numeric keypad on phones.
53026
+ * `inputmode` keeps a numeric keypad on phones, chosen as React Aria's
53027
+ * NumberField chooses it: a keypad with a minus key where the number can be
53028
+ * negative, and one with a decimal separator where the format shows a
53029
+ * fraction. An iPhone has no keypad with a minus key, so a field that can be
53030
+ * negative takes the full keyboard there.
53019
53031
  *
53020
53032
  * `format-options` shows the number with `Intl.NumberFormat` in `locale`, as a
53021
53033
  * currency, a percent or a unit, while the field is not being edited. Focus
@@ -53126,10 +53138,11 @@ export type CustomElements = {
53126
53138
  * invalid, as it is in a native number field.
53127
53139
  *
53128
53140
  * Unset, a step moves by one, or by one percent under a percent format, and
53129
- * a typed number is rounded to the smallest amount `format-options` shows
53130
- * rather than to whole steps, as React Aria's NumberField does: a field
53131
- * showing dollars keeps the cents typed into it. Without `format-options`
53132
- * the grid is whole numbers, as in a native number field.
53141
+ * a typed number is rounded to the smallest amount the format shows, as
53142
+ * React Aria's NumberField does: a field showing dollars keeps the cents
53143
+ * typed into it, and one with no `format-options` keeps three decimal
53144
+ * places. `any` puts the number on no grid, as it does in a native number
53145
+ * field: a step moves by one, and any number in range is valid.
53133
53146
  * - `step-mismatch-message`/`stepMismatchMessage`: The message the browser shows when the number is off the step grid, with
53134
53147
  * `{below}` and `{above}` filled in with the nearest valid values, written in
53135
53148
  * the locale.
@@ -53351,6 +53364,8 @@ export type CustomElements = {
53351
53364
  *
53352
53365
  * These can be used to apply styling when a component is in a given state.
53353
53366
  *
53367
+ * - `at-max`: The number is at `max`, so it cannot step up, as React Aria's NumberField says with `canIncrement`.
53368
+ * - `at-min`: The number is at `min`, so it cannot step down.
53354
53369
  * - `invalid`: The control has an error to show, from the browser's validation or from your `feedback`.
53355
53370
  * - `scrubbing`: The label is being dragged to change the value, under `scrub`, as Zag's scrubber says while it is held.
53356
53371
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
@@ -75789,7 +75804,9 @@ export type CustomElementsSolidJs = {
75789
75804
  * `narrow` ("3h ago").
75790
75805
  *
75791
75806
  * The reading refreshes as it goes stale, as `elapsed` does, and the whole
75792
- * date is its title. `elapsed` wins where both are set.
75807
+ * date is its title. `elapsed` wins where both are set. Written with no
75808
+ * value, as `elapsed` is, or with a style `Intl` does not know, it reads
75809
+ * `long`.
75793
75810
  * - `second`: How the second is written, where a time of day is shown.
75794
75811
  * - `time-style`/`timeStyle`: The locale's own pattern for the time of day: `full`, `long`, `medium`, or
75795
75812
  * `short`. Set, it stands in for `hour`, `minute`, `second` and
@@ -81937,7 +81954,7 @@ export type CustomElementsSolidJs = {
81937
81954
  * A separate family from `Input`'s `type="number"`. It renders two buttons,
81938
81955
  * binds four keys `Input` does not, and handles clamping and stepping.
81939
81956
  *
81940
- * The field is `type="text"` with `inputmode="decimal"`. Tested in a real
81957
+ * The field is `type="text"` with an `inputmode` for a number. Tested in a real
81941
81958
  * browser, `type="number"` fails in three ways:
81942
81959
  * - Typing `12e` gives a `.value` of `""`, so the element cannot see what you
81943
81960
  * typed. A `type="text"` field keeps `"12e"`.
@@ -81945,7 +81962,11 @@ export type CustomElementsSolidJs = {
81945
81962
  * to 4, when you only meant to scroll the page.
81946
81963
  * - `selectionStart` is `null`, so the caret cannot be managed.
81947
81964
  *
81948
- * `inputmode="decimal"` keeps the numeric keypad on phones.
81965
+ * `inputmode` keeps a numeric keypad on phones, chosen as React Aria's
81966
+ * NumberField chooses it: a keypad with a minus key where the number can be
81967
+ * negative, and one with a decimal separator where the format shows a
81968
+ * fraction. An iPhone has no keypad with a minus key, so a field that can be
81969
+ * negative takes the full keyboard there.
81949
81970
  *
81950
81971
  * `format-options` shows the number with `Intl.NumberFormat` in `locale`, as a
81951
81972
  * currency, a percent or a unit, while the field is not being edited. Focus
@@ -82056,10 +82077,11 @@ export type CustomElementsSolidJs = {
82056
82077
  * invalid, as it is in a native number field.
82057
82078
  *
82058
82079
  * Unset, a step moves by one, or by one percent under a percent format, and
82059
- * a typed number is rounded to the smallest amount `format-options` shows
82060
- * rather than to whole steps, as React Aria's NumberField does: a field
82061
- * showing dollars keeps the cents typed into it. Without `format-options`
82062
- * the grid is whole numbers, as in a native number field.
82080
+ * a typed number is rounded to the smallest amount the format shows, as
82081
+ * React Aria's NumberField does: a field showing dollars keeps the cents
82082
+ * typed into it, and one with no `format-options` keeps three decimal
82083
+ * places. `any` puts the number on no grid, as it does in a native number
82084
+ * field: a step moves by one, and any number in range is valid.
82063
82085
  * - `step-mismatch-message`/`stepMismatchMessage`: The message the browser shows when the number is off the step grid, with
82064
82086
  * `{below}` and `{above}` filled in with the nearest valid values, written in
82065
82087
  * the locale.
@@ -82281,6 +82303,8 @@ export type CustomElementsSolidJs = {
82281
82303
  *
82282
82304
  * These can be used to apply styling when a component is in a given state.
82283
82305
  *
82306
+ * - `at-max`: The number is at `max`, so it cannot step up, as React Aria's NumberField says with `canIncrement`.
82307
+ * - `at-min`: The number is at `min`, so it cannot step down.
82284
82308
  * - `invalid`: The control has an error to show, from the browser's validation or from your `feedback`.
82285
82309
  * - `scrubbing`: The label is being dragged to change the value, under `scrub`, as Zag's scrubber says while it is held.
82286
82310
  * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
package/types/vue.d.ts CHANGED
@@ -7349,7 +7349,9 @@ place of the date: `long` ("3 hours ago"), `short` ("3 hr. ago") or
7349
7349
  `narrow` ("3h ago").
7350
7350
 
7351
7351
  The reading refreshes as it goes stale, as `elapsed` does, and the whole
7352
- date is its title. `elapsed` wins where both are set. */
7352
+ date is its title. `elapsed` wins where both are set. Written with no
7353
+ value, as `elapsed` is, or with a style `Intl` does not know, it reads
7354
+ `long`. */
7353
7355
  relative?: (HelixHeadlessFormatDate["relative"]) | undefined;
7354
7356
  /** How the second is written, where a time of day is shown. */
7355
7357
  second?: (HelixHeadlessFormatDate["second"]) | undefined;
@@ -11354,10 +11356,11 @@ one they already know. */
11354
11356
  invalid, as it is in a native number field.
11355
11357
 
11356
11358
  Unset, a step moves by one, or by one percent under a percent format, and
11357
- a typed number is rounded to the smallest amount `format-options` shows
11358
- rather than to whole steps, as React Aria's NumberField does: a field
11359
- showing dollars keeps the cents typed into it. Without `format-options`
11360
- the grid is whole numbers, as in a native number field. */
11359
+ a typed number is rounded to the smallest amount the format shows, as
11360
+ React Aria's NumberField does: a field showing dollars keeps the cents
11361
+ typed into it, and one with no `format-options` keeps three decimal
11362
+ places. `any` puts the number on no grid, as it does in a native number
11363
+ field: a step moves by one, and any number in range is valid. */
11361
11364
  step?: (HelixHeadlessNumberInput["step"]) | undefined;
11362
11365
  /** The message the browser shows when the number is off the step grid, with
11363
11366
  `{below}` and `{above}` filled in with the nearest valid values, written in
@@ -19219,7 +19222,7 @@ export interface WcToolkitVueGlobalComponents {
19219
19222
  HelixHeadlessNotificationsVueProps,
19220
19223
  HelixHeadlessNotificationsVueEvents
19221
19224
  >;
19222
- /** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with 'inputmode="decimal"'. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode="decimal"' keeps the numeric keypad on phones. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. The field and its two buttons sit in a 'role="group"' named by the label, and the field carries 'role-label', "number field" in English, as its 'aria-roledescription', as React Aria's NumberField does. On iOS and iPadOS the field is a plain text field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in, and no role description, so VoiceOver says the field is required. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. While you type, the form holds the number the text reads as, so a field showing '$2,500.50' gives the form 2500.5, and text that is not a number gives it nothing, as a native number field does. Holding a stepper button down steps once, then again after 400 milliseconds, then every 60 milliseconds until you let go, as React Aria's NumberField does. **Keyboard.** The field is one tab stop, and the stepper buttons are not in the tab order. | Key | What it does | |---|---| | Up, Down | Steps the value up or down by 'step'. | | Page Up, Page Down | Steps by 'large-step' steps, ten by default. | | Home, End | Goes to 'min' or 'max', where there is one. Without one, moves the caret. | | Enter | Commits the typed number and submits the form, as a native field does. | The field has 'role="spinbutton"' with 'aria-valuenow', 'aria-valuemin', 'aria-valuemax', and the formatted text in 'aria-valuetext'. */
19225
+ /** A separate family from 'Input''s 'type="number"'. It renders two buttons, binds four keys 'Input' does not, and handles clamping and stepping. The field is 'type="text"' with an 'inputmode' for a number. Tested in a real browser, 'type="number"' fails in three ways: - Typing '12e' gives a '.value' of '""', so the element cannot see what you typed. A 'type="text"' field keeps '"12e"'. - The mouse wheel over a focused field changes the value, for example from 5 to 4, when you only meant to scroll the page. - 'selectionStart' is 'null', so the caret cannot be managed. 'inputmode' keeps a numeric keypad on phones, chosen as React Aria's NumberField chooses it: a keypad with a minus key where the number can be negative, and one with a decimal separator where the format shows a fraction. An iPhone has no keypad with a minus key, so a field that can be negative takes the full keyboard there. 'format-options' shows the number with 'Intl.NumberFormat' in 'locale', as a currency, a percent or a unit, while the field is not being edited. Focus shows the number itself, and a typed '$1,200' or '25%' is read back with the same options. The value stays the plain number: '1200', or '0.25' for 25%. The locale's group separators are read in every field, so '1,234' is a number in 'en-US'. The field and its two buttons sit in a 'role="group"' named by the label, and the field carries 'role-label', "number field" in English, as its 'aria-roledescription', as React Aria's NumberField does. On iOS and iPadOS the field is a plain text field, with no 'role="spinbutton"', which VoiceOver reads as a slider you cannot type in, and no role description, so VoiceOver says the field is required. React Aria's NumberField does the same. Validity follows the platform's rules: 'min', 'max', and 'step' are checked and reported through the host's own 'setValidity', under the platform's flag names. Stepping is separate from typing, so a number is not corrected while you type it. While you type, the form holds the number the text reads as, so a field showing '$2,500.50' gives the form 2500.5, and text that is not a number gives it nothing, as a native number field does. Holding a stepper button down steps once, then again after 400 milliseconds, then every 60 milliseconds until you let go, as React Aria's NumberField does. **Keyboard.** The field is one tab stop, and the stepper buttons are not in the tab order. | Key | What it does | |---|---| | Up, Down | Steps the value up or down by 'step'. | | Page Up, Page Down | Steps by 'large-step' steps, ten by default. | | Home, End | Goes to 'min' or 'max', where there is one. Without one, moves the caret. | | Enter | Commits the typed number and submits the form, as a native field does. | The field has 'role="spinbutton"' with 'aria-valuenow', 'aria-valuemin', 'aria-valuemax', and the formatted text in 'aria-valuetext'. */
19223
19226
  "helix-headless-number-input": DefineCustomElement<
19224
19227
  HelixHeadlessNumberInput,
19225
19228
  HelixHeadlessNumberInputVueProps,