@fusion.dev/helix 0.170.0 → 0.171.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
@@ -4005,6 +4005,12 @@ export type HelixCodeBlockHelixToggleElementEvent =
4005
4005
  HelixCodeBlockElementEvent<HelixToggleEvent>;
4006
4006
 
4007
4007
  export type HelixCodeBlockVueProps = {
4008
+ /** The lines to mark as inserted, as numbers and ranges counted from 1, such
4009
+ as `3-4`. Drawn as `mark-lines` is, in the added color. Not for a diff. */
4010
+ "added-lines"?: (HelixCodeBlock["addedLines"]) | undefined;
4011
+ /** The lines to mark as inserted, as numbers and ranges counted from 1, such
4012
+ as `3-4`. Drawn as `mark-lines` is, in the added color. Not for a diff. */
4013
+ addedLines?: (HelixCodeBlock["addedLines"]) | undefined;
4008
4014
  /** The name of a block that scrolls, which is a tab stop while it does.
4009
4015
 
4010
4016
  Where the block has a name, the scroller says it too, such as "Code,
@@ -4163,6 +4169,12 @@ A false boolean reflects as the attribute's absence, so this costs no
4163
4169
  reflected property taking no default is satisfied by the default being
4164
4170
  `false`. */
4165
4171
  noCopy?: (HelixCodeBlock["noCopy"]) | undefined;
4172
+ /** The lines to mark as deleted, as numbers and ranges counted from 1. Drawn
4173
+ as `mark-lines` is, in the removed color. Not for a diff. */
4174
+ "removed-lines"?: (HelixCodeBlock["removedLines"]) | undefined;
4175
+ /** The lines to mark as deleted, as numbers and ranges counted from 1. Drawn
4176
+ as `mark-lines` is, in the removed color. Not for a diff. */
4177
+ removedLines?: (HelixCodeBlock["removedLines"]) | undefined;
4166
4178
  /** The words of a button that shows a folded run of unchanged lines, in a
4167
4179
  diff with `context-lines`. `{count}` is how many. */
4168
4180
  "show-unchanged-label"?: (HelixCodeBlock["showUnchangedLabel"]) | undefined;
@@ -4789,10 +4801,11 @@ would give one control two of each. What is left is the validity call and
4789
4801
  the anchor the browser points its bubble at.
4790
4802
 
4791
4803
  **Text that is not a color is bad input**, so a form does not submit
4792
- `#00` from a half-typed value. The picker draws no message of its own, so
4793
- reporting it as each keystroke arrives shows nothing until the form asks;
4794
- Color Input shows its own message against the field the reader typed
4795
- into. */
4804
+ `#00` from a half-typed value. The picker marks it, and says
4805
+ `badInputMessage` under itself, once the reader leaves the value field or
4806
+ presses Enter, and a missing color once the reader has committed one or a
4807
+ form has refused the picker. Color Input shows its own message against the
4808
+ field the reader typed into. */
4796
4809
  required?: (HelixColorPicker["required"]) | undefined;
4797
4810
  /** What the square's horizontal ramp is called. */
4798
4811
  "saturation-label"?: (HelixColorPicker["saturationLabel"]) | undefined;
@@ -5145,12 +5158,13 @@ language. */
5145
5158
  locale?: (HelixCombobox["locale"]) | undefined;
5146
5159
  /** Whether more than one option can be chosen.
5147
5160
 
5148
- The list already does the work: `value` comes apart on commas, a press
5149
- toggles rather than replaces, and the arrows move without choosing. What
5150
- this adds is the tags, and keeping the panel open between picks.
5161
+ The list already does the work: `value` is the chosen values joined with
5162
+ commas, a press toggles rather than replaces, and the arrows move without
5163
+ choosing. What this adds is the tags, and keeping the panel open between
5164
+ picks.
5151
5165
 
5152
- A comma is therefore not available inside an option's value, which is the
5153
- listbox's contract and not this element's to change.
5166
+ An option's value may hold a comma, and it is read as one value, as
5167
+ `Select` and `Listbox` read it. So may an answer the reader created.
5154
5168
 
5155
5169
  **The list is told, and the field is not.** `aria-multiselectable` belongs
5156
5170
  to `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in
@@ -5337,6 +5351,18 @@ so a palette filtered on a server sends one `helix-filter` for a word.
5337
5351
  so a palette filtered on a server sends one `helix-filter` for a word.
5338
5352
  `0` filters on every keystroke. See Listbox's `filter-delay`. */
5339
5353
  filterDelay?: (HelixCommand["filterDelay"]) | undefined;
5354
+ /** Where Home and End go from the filter field.
5355
+
5356
+ Absent, they move the caret, as APG's combobox has them. `list` moves the
5357
+ highlight to the first or the last command, as React Aria's Autocomplete
5358
+ does, and Shift with either still selects the text. */
5359
+ "home-end"?: (HelixCommand["homeEnd"]) | undefined;
5360
+ /** Where Home and End go from the filter field.
5361
+
5362
+ Absent, they move the caret, as APG's combobox has them. `list` moves the
5363
+ highlight to the first or the last command, as React Aria's Autocomplete
5364
+ does, and Shift with either still selects the text. */
5365
+ homeEnd?: (HelixCommand["homeEnd"]) | undefined;
5340
5366
  /** The key that opens the palette, written as `mod+k`, `shift+p`, or `k`,
5341
5367
  in Kbd's chord spelling: `mod` is Command or Control, `ctrl`, `cmd`,
5342
5368
  `alt` and `shift` the keys they name.
@@ -5354,6 +5380,10 @@ and `open`, `toggle` and the dialog's parts do nothing. */
5354
5380
  inline?: (HelixCommand["inline"]) | undefined;
5355
5381
  /** Accessible name for the overlay, which has no visible heading. */
5356
5382
  label?: (HelixCommand["label"]) | undefined;
5383
+ /** How the commands are laid out, as Listbox's `layout`: `grid` draws them in
5384
+ rows and columns, for a palette of icons or emoji, and the arrow keys
5385
+ follow the rows and the columns. Absent is one command under another. */
5386
+ layout?: (HelixCommand["layout"]) | undefined;
5357
5387
  /** What the list says when its commands could not be loaded, such as after a
5358
5388
  request to a server fails. Empty, null or no attribute is no error, so
5359
5389
  removing the attribute clears it. Passed to the list, which shows it
@@ -7961,6 +7991,13 @@ nothing between them, because a word every chip carries is a word nobody
7961
7991
  reads. The moment somebody picks a different comparison it appears, which
7962
7992
  makes an unusual filter look unusual. */
7963
7993
  operatorLabel?: (HelixFilterChip["operatorLabel"]) | undefined;
7994
+ /** Whether the remove button is a tab stop of its own.
7995
+
7996
+ `FilterInput` writes `false` on the chips in its `tags` slot: the field's
7997
+ text is its one tab stop, and the arrow keys move from the text to the
7998
+ chips, as in a `multiple` Combobox. No attribute: it is coordination
7999
+ between elements, as `Tag.dismissTabStop` is. */
8000
+ dismissTabStop?: (HelixFilterChip["dismissTabStop"]) | undefined;
7964
8001
  };
7965
8002
 
7966
8003
  export type HelixFilterChipVueEvents = {
@@ -8201,6 +8238,18 @@ and this one was the English a form in another language still spoke in
8201
8238
  the bubble it raises on submit: `feedback` replaces the message under
8202
8239
  the field and does not reach that one. */
8203
8240
  valueMissingMessage?: (HelixFilterInput["valueMissingMessage"]) | undefined;
8241
+ /** Whether the field keeps a `FilterChip` for each filter in its `tags` slot,
8242
+ from the `helix-facet` events it hears.
8243
+
8244
+ Off, you build the chips, which is what you do when your own model holds
8245
+ the filters. On, a filter typed, picked, or changed adds or updates the
8246
+ chip for its field, one with no values takes it away (unless its
8247
+ comparison takes none, such as "is empty"), and removing the chip clears
8248
+ the filter. A `helix-facet` you cancel changes no chip.
8249
+
8250
+ The chips are elements the field adds to its own children, so leave this
8251
+ off where a framework renders those children and would remove them. */
8252
+ chips?: (HelixFilterInput["chips"]) | undefined;
8204
8253
  /** Shows a button that empties the field.
8205
8254
 
8206
8255
  The text only. The tokens are the consumer's markup and this element is not
@@ -8222,6 +8271,29 @@ what you slot and you narrow it. */
8222
8271
  being typed, as React Aria's Autocomplete filters. Off, the panel shows
8223
8272
  what you slot and you narrow it. */
8224
8273
  filterSuggestions?: (HelixFilterInput["filterSuggestions"]) | undefined;
8274
+ /** Whether the suggestions are still loading, such as while a request for the
8275
+ values of a typed key is out.
8276
+
8277
+ The panel opens on `loading-text`, or the `loading` slot, while the field
8278
+ has focus, and a screen reader hears it. Slot the options and clear this
8279
+ when they arrive. */
8280
+ loading?: (HelixFilterInput["loading"]) | undefined;
8281
+ /** Text the panel shows while the suggestions load. */
8282
+ "loading-text"?: (HelixFilterInput["loadingText"]) | undefined;
8283
+ /** Text the panel shows while the suggestions load. */
8284
+ loadingText?: (HelixFilterInput["loadingText"]) | undefined;
8285
+ /** Text the panel shows when `filter-suggestions` hides every suggestion, such
8286
+ as "No matching filters".
8287
+
8288
+ Empty, or no `no-results` slot, and the panel closes instead, as it does
8289
+ when it has nothing to offer. */
8290
+ "no-results-text"?: (HelixFilterInput["noResultsText"]) | undefined;
8291
+ /** Text the panel shows when `filter-suggestions` hides every suggestion, such
8292
+ as "No matching filters".
8293
+
8294
+ Empty, or no `no-results` slot, and the panel closes instead, as it does
8295
+ when it has nothing to offer. */
8296
+ noResultsText?: (HelixFilterInput["noResultsText"]) | undefined;
8225
8297
  /** The text shown while the field is empty.
8226
8298
 
8227
8299
  Not a label: it goes when typing starts. */
@@ -12883,9 +12955,13 @@ speaks it: `feedback` replaces the message under the field and does not
12883
12955
  reach the bubble. Unset is the sentence registered for the page's
12884
12956
  language, then the English. */
12885
12957
  badInputMessage?: (HelixNumberInput["badInputMessage"]) | undefined;
12886
- /** The name of the step down button, read by screen readers. */
12958
+ /** The name of the step down button, read by screen readers. The field's
12959
+ label follows it, so a reader hears "Decrease Quantity", as React Aria
12960
+ names its steppers. */
12887
12961
  "decrement-label"?: (HelixNumberInput["decrementLabel"]) | undefined;
12888
- /** The name of the step down button, read by screen readers. */
12962
+ /** The name of the step down button, read by screen readers. The field's
12963
+ label follows it, so a reader hears "Decrease Quantity", as React Aria
12964
+ names its steppers. */
12889
12965
  decrementLabel?: (HelixNumberInput["decrementLabel"]) | undefined;
12890
12966
  /** `Intl.NumberFormat` options the number is shown with while the field is
12891
12967
  not being edited: a currency, a percent, a unit, or a number of decimals.
@@ -12903,9 +12979,13 @@ Written as JSON in the attribute.
12903
12979
  <helix-number-input format-options='{"style":"currency","currency":"EUR"}'></helix-number-input>
12904
12980
  ``` */
12905
12981
  formatOptions?: (HelixNumberInput["formatOptions"]) | undefined;
12906
- /** The name of the step up button, read by screen readers. */
12982
+ /** The name of the step up button, read by screen readers. The field's
12983
+ label follows it, so a reader hears "Increase Quantity", as React Aria
12984
+ names its steppers. */
12907
12985
  "increment-label"?: (HelixNumberInput["incrementLabel"]) | undefined;
12908
- /** The name of the step up button, read by screen readers. */
12986
+ /** The name of the step up button, read by screen readers. The field's
12987
+ label follows it, so a reader hears "Increase Quantity", as React Aria
12988
+ names its steppers. */
12909
12989
  incrementLabel?: (HelixNumberInput["incrementLabel"]) | undefined;
12910
12990
  /** How many steps `PageUp` and `PageDown` move.
12911
12991
 
@@ -14964,6 +15044,11 @@ it, here or anywhere: a frame is a document of its own and what is written
14964
15044
  on this host reaches nothing inside it, which is the same reason
14965
15045
  `colorMode` has to be sent rather than set. */
14966
15046
  direction?: (HelixSandboxPreview["direction"]) | undefined;
15047
+ /** The packages an example can import by name in the built-in document,
15048
+ each mapped to the address of an ES module, as an import map's `imports`.
15049
+ Set it as JSON in the attribute or as an object. Not read where `src` is
15050
+ set. */
15051
+ imports?: (HelixSandboxPreview["imports"]) | undefined;
14967
15052
  /** The frame's name, read by screen readers. */
14968
15053
  label?: (HelixSandboxPreview["label"]) | undefined;
14969
15054
  /** How the example is placed in the frame.
@@ -15231,6 +15316,10 @@ the pane's `label`. */
15231
15316
  /** The pane's file name, such as `index.html`, on its tab where a sandbox
15232
15317
  holds several panes. Empty puts the pane's `name` on the tab. */
15233
15318
  label?: (HelixSandboxSource["label"]) | undefined;
15319
+ /** Whether each line of the source is numbered, in a gutter beside it. */
15320
+ "line-numbers"?: (HelixSandboxSource["lineNumbers"]) | undefined;
15321
+ /** Whether each line of the source is numbered, in a gutter beside it. */
15322
+ lineNumbers?: (HelixSandboxSource["lineNumbers"]) | undefined;
15234
15323
  /** Which source this pane holds. Every `helix-before-edit` event includes it.
15235
15324
 
15236
15325
  `html` and `css` are what the sandbox root routes on; any other name is
@@ -16777,7 +16866,8 @@ Ignored once `active` is written. */
16777
16866
  Ignored once `active` is written. */
16778
16867
  defaultActive?: (HelixSteps["defaultActive"]) | undefined;
16779
16868
  /** Whether the arrow keys move focus between the stages' names, along the
16780
- way the steps run. Off by default, so the arrows keep scrolling the page. */
16869
+ way the steps run, and the names are one tab stop. Off by default, so the
16870
+ arrows keep scrolling the page. */
16781
16871
  arrows?: (HelixSteps["arrows"]) | undefined;
16782
16872
  /** What marks a stage `complete`.
16783
16873
 
@@ -16874,7 +16964,9 @@ with the page. */
16874
16964
  /** Whether a reader may pass the stage without finishing it, in a sequence
16875
16965
  with `linear`. Ark UI's skippable step. */
16876
16966
  optional?: (HelixStep["optional"]) | undefined;
16877
- /** The value the step sends in `helix-select`. */
16967
+ /** The value the step sends in `helix-select`, and what names the step in its
16968
+ sequence's `active`. Without one, the sequence names the step by its place,
16969
+ counted from 1. */
16878
16970
  value?: (HelixStep["value"]) | undefined;
16879
16971
  };
16880
16972
 
@@ -22889,6 +22981,8 @@ export type CustomCssProperties = {
22889
22981
  "--sandbox-source-invalid-color"?: (string) | undefined;
22890
22982
  /** Color of a `keyword` run, under `tokenize`. Defaults to `--helix-color-syntax-keyword`. */
22891
22983
  "--sandbox-source-keyword-color"?: (string) | undefined;
22984
+ /** Color of the line numbers, under `line-numbers`. Defaults to `--helix-color-foreground-subtle`. */
22985
+ "--sandbox-source-line-number-color"?: (string) | undefined;
22892
22986
  /** Minimum height of the pane. */
22893
22987
  "--sandbox-source-min-block-size"?: (string) | undefined;
22894
22988
  /** Color of a `name` run, under `tokenize`. Defaults to `--helix-color-syntax-name`. */
@@ -24301,7 +24395,7 @@ export interface WcToolkitVueGlobalComponents {
24301
24395
  HelixRatingVueProps,
24302
24396
  HelixRatingVueEvents
24303
24397
  >;
24304
- /** A sandboxed '<iframe>' that loads 'src', a document you provide. That document imports what the examples need, listens for a render message, and writes the markup into itself. **Without 'src', the frame loads a built-in document**, so a sandbox renders with nothing to host. It runs HTML, CSS, and scripts, and reports the console, uncaught errors, its height, and presses as a frame on 'servePreview' does. It defines no element, so an example that uses Helix components needs a 'src' that imports them. **Examples render in a frame**, so an example's styles and scripts do not affect the page around the sandbox, and 'position: fixed' stays inside the pane. The frame starts empty, with its own stylesheets and its own custom element registry, so 'src' must load the styles and components the examples use. **The source is untrusted, and the frame keeps it isolated.** The frame uses 'sandbox="allow-scripts"' and never 'allow-same-origin'. Together, the two let a document on the same origin remove its own sandbox, which is the same as having none. **A preview says where it is.** It is ':state(loading)' from the moment it has a 'src' until that document can take the example, and again through 'reload()'. It is ':state(failed)' once the example throws an error it does not catch, until the next source is sent, which a frame on 'servePreview' reports. A page draws its own spinner or message from either, such as a sibling shown by 'helix-sandbox-preview:state(failed) + .message'. **A failed preview shows the error over the example**, in the 'error' part, until the next source is sent. The terminal says it too, so the part is not announced. Hide it with '::part(error) { display: none }' where the page draws its own. **'controls' draws two buttons in the preview's corner**: one reloads the frame's document, as 'reload()' does, and one opens the example in a new tab, as 'open()' does. The tab runs it in a frame sandboxed as this one is. */
24398
+ /** A sandboxed '<iframe>' that loads 'src', a document you provide. That document imports what the examples need, listens for a render message, and writes the markup into itself. **Without 'src', the frame loads a built-in document**, so a sandbox renders with nothing to host. It runs HTML, CSS, and scripts, and reports the console, uncaught errors, its height, and presses as a frame on 'servePreview' does. It defines no element, so an example that uses Helix components needs a 'src' that imports them. **'imports' lets an example import packages by name** in the built-in document, as an import map: each name maps to the address of an ES module, such as '{"canvas-confetti": "https://esm.sh/canvas-confetti@1.9.3"}', and 'import confetti from 'canvas-confetti'' in the 'js' pane then loads it. A CDN that serves npm packages as modules, such as esm.sh or jsDelivr's '+esm', gives every package an address. A new map loads the document again, since a browser reads one only as a document starts. A 'src' document declares its own. **Examples render in a frame**, so an example's styles and scripts do not affect the page around the sandbox, and 'position: fixed' stays inside the pane. The frame starts empty, with its own stylesheets and its own custom element registry, so 'src' must load the styles and components the examples use. **The source is untrusted, and the frame keeps it isolated.** The frame uses 'sandbox="allow-scripts"' and never 'allow-same-origin'. Together, the two let a document on the same origin remove its own sandbox, which is the same as having none. **A preview says where it is.** It is ':state(loading)' from the moment it has a 'src' until that document can take the example, and again through 'reload()'. It is ':state(failed)' once the example throws an error it does not catch, until the next source is sent, which a frame on 'servePreview' reports. A page draws its own spinner or message from either, such as a sibling shown by 'helix-sandbox-preview:state(failed) + .message'. **A failed preview shows the error over the example**, in the 'error' part, until the next source is sent. The terminal says it too, so the part is not announced. Hide it with '::part(error) { display: none }' where the page draws its own. **'controls' draws two buttons in the preview's corner**: one reloads the frame's document, as 'reload()' does, and one opens the example in a new tab, as 'open()' does. The tab runs it in a frame sandboxed as this one is. */
24305
24399
  "helix-sandbox-preview": DefineCustomElement<
24306
24400
  HelixSandboxPreview,
24307
24401
  HelixSandboxPreviewVueProps,
@@ -24313,7 +24407,7 @@ export interface WcToolkitVueGlobalComponents {
24313
24407
  HelixSandboxVueProps,
24314
24408
  HelixSandboxVueEvents
24315
24409
  >;
24316
- /** A real '<textarea>', so undo, selection, spellcheck suppression, mobile keyboards, and screen reader support come from the platform. Tab inserts two spaces, so you can indent code. To move focus out of the field, press Escape and then Tab. Shift+Tab moves focus back as it does anywhere else. The field's description says so to a screen reader. **'tokenize' colors the source** with a highlighter you bring, such as one built on Lezer, Prism or Shiki. It is a function from the source to runs of text, each with an optional kind, and the pane draws the runs under a transparent field, so typing, selection and undo stay the textarea's. The kinds are 'callable', 'comment', 'constant', 'invalid', 'keyword', 'name', 'string' and 'tag', each colored by the '--helix-color-syntax-*' token of its name and a hook of its own, such as '--sandbox-source-keyword-color'. A run of any other kind is drawn in the field's own color. Every run with a kind is a 'token' part, and carries its kind as 'data-kind'. A 'tokenize' that throws leaves the source drawn plain and the field editable, and the error is reported to the page as an uncaught one. */
24410
+ /** A real '<textarea>', so undo, selection, spellcheck suppression, mobile keyboards, and screen reader support come from the platform. Tab inserts two spaces, so you can indent code. To move focus out of the field, press Escape and then Tab. Shift+Tab moves focus back as it does anywhere else. The field's description says so to a screen reader. **'tokenize' colors the source** with a highlighter you bring, such as one built on Lezer, Prism or Shiki. It is a function from the source to runs of text, each with an optional kind, and the pane draws the runs under a transparent field, so typing, selection and undo stay the textarea's. The kinds are 'callable', 'comment', 'constant', 'invalid', 'keyword', 'name', 'string' and 'tag', each colored by the '--helix-color-syntax-*' token of its name and a hook of its own, such as '--sandbox-source-keyword-color'. A run of any other kind is drawn in the field's own color. Every run with a kind is a 'token' part, and carries its kind as 'data-kind'. A 'tokenize' that throws leaves the source drawn plain and the field editable, and the error is reported to the page as an uncaught one. **'line-numbers' numbers each line** in a gutter beside the source. A line that wraps keeps one number. The numbers are drawn, and hidden from screen readers, which read the field. Enter keeps the indentation of the line it breaks, and the new line is undone with the next undo as typing is. **The source can be written inside the pane** where 'value' is not set: its text, or the markup of a '<template>' it holds, without the indentation the page gave it. Markup goes in a template so the page does not render it or run its scripts. Text inside the pane is read once, when it connects. */
24317
24411
  "helix-sandbox-source": DefineCustomElement<
24318
24412
  HelixSandboxSource,
24319
24413
  HelixSandboxSourceVueProps,
package/types/words.d.ts CHANGED
@@ -1886,13 +1886,17 @@ declare module '@fusion.dev/helix-core' {
1886
1886
  */
1887
1887
  badInputMessage: Message
1888
1888
  /**
1889
- * The name of the step down button, read by screen readers.
1889
+ * The name of the step down button, read by screen readers. The field's
1890
+ * label follows it, so a reader hears "Decrease Quantity", as React Aria
1891
+ * names its steppers.
1890
1892
  *
1891
1893
  * English: `Decrease`
1892
1894
  */
1893
1895
  decrementLabel: Message
1894
1896
  /**
1895
- * The name of the step up button, read by screen readers.
1897
+ * The name of the step up button, read by screen readers. The field's
1898
+ * label follows it, so a reader hears "Increase Quantity", as React Aria
1899
+ * names its steppers.
1896
1900
  *
1897
1901
  * English: `Increase`
1898
1902
  */