@fusion.dev/helix 0.12.2 → 0.13.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/svelte.d.ts CHANGED
@@ -47,6 +47,7 @@ declare module 'svelte/elements' {
47
47
  'helix-drilldown': CustomElements['helix-drilldown']
48
48
  'helix-empty': CustomElements['helix-empty']
49
49
  'helix-file-input': CustomElements['helix-file-input']
50
+ 'helix-filter-input': CustomElements['helix-filter-input']
50
51
  'helix-flex': CustomElements['helix-flex']
51
52
  'helix-format-date': CustomElements['helix-format-date']
52
53
  'helix-grid': CustomElements['helix-grid']
package/types/vue.d.ts CHANGED
@@ -39,6 +39,7 @@ import type {
39
39
  HelixDrilldown,
40
40
  HelixEmpty,
41
41
  HelixFileInput,
42
+ HelixFilterInput,
42
43
  HelixFlex,
43
44
  HelixFormatDate,
44
45
  HelixGrid,
@@ -2091,6 +2092,10 @@ the resolved state for stylesheets, which is what the mirror is for. */
2091
2092
  "default-open"?: (HelixCombobox["defaultOpen"]) | undefined;
2092
2093
  /** Initial open state for uncontrolled use, where nothing declared one. */
2093
2094
  defaultOpen?: (HelixCombobox["defaultOpen"]) | undefined;
2095
+ /** How many tokens to show before the rest become a count. */
2096
+ "max-tags"?: (HelixCombobox["maxTags"]) | undefined;
2097
+ /** How many tokens to show before the rest become a count. */
2098
+ maxTags?: (HelixCombobox["maxTags"]) | undefined;
2094
2099
  /** The value the markup declared, which is where a reset returns to. */
2095
2100
  "default-value"?: (HelixCombobox["defaultValue"]) | undefined;
2096
2101
  /** The value the markup declared, which is where a reset returns to. */
@@ -2145,32 +2150,6 @@ message belongs. */
2145
2150
  "loading-text"?: (HelixCombobox["loadingText"]) | undefined;
2146
2151
  /** What the list says while they are on their way. */
2147
2152
  loadingText?: (HelixCombobox["loadingText"]) | undefined;
2148
- /** How many tags to draw before the rest become a count. `multiple` only.
2149
-
2150
- `0` is all of them, and is the default: a cap that guesses is worse than no
2151
- cap, because the number that fits depends on the width of the field and the
2152
- length of what is in it, neither of which this element knows. What a cap is
2153
- genuinely for is a field in a row or a table cell, where a set of twelve
2154
- choices would push everything below it down a line at a time.
2155
-
2156
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
2157
- on, where a row that silently stops is a field that appears to have lost
2158
- what was put in it. Date Input and Time Input carry the same property and
2159
- the same reasoning. */
2160
- "max-tags"?: (HelixCombobox["maxTags"]) | undefined;
2161
- /** How many tags to draw before the rest become a count. `multiple` only.
2162
-
2163
- `0` is all of them, and is the default: a cap that guesses is worse than no
2164
- cap, because the number that fits depends on the width of the field and the
2165
- length of what is in it, neither of which this element knows. What a cap is
2166
- genuinely for is a field in a row or a table cell, where a set of twelve
2167
- choices would push everything below it down a line at a time.
2168
-
2169
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
2170
- on, where a row that silently stops is a field that appears to have lost
2171
- what was put in it. Date Input and Time Input carry the same property and
2172
- the same reasoning. */
2173
- maxTags?: (HelixCombobox["maxTags"]) | undefined;
2174
2153
  /** Whether more than one option can be chosen.
2175
2154
 
2176
2155
  The list already does the work: `value` comes apart on commas, a press
@@ -3576,6 +3555,91 @@ export type HelixFileInputVueEvents = {
3576
3555
  "helix-before-change": HelixFileInputHelixBeforeChangeElementEvent;
3577
3556
  };
3578
3557
 
3558
+ /** `HelixFilterInput` component event */
3559
+ export type HelixFilterInputElementEvent<E = Event> = TypedEvent<
3560
+ HelixFilterInput,
3561
+ E
3562
+ >;
3563
+ /** `helix-before-change` event type */
3564
+ export type HelixFilterInputHelixBeforeChangeElementEvent =
3565
+ HelixFilterInputElementEvent<HelixBeforeChangeEvent>;
3566
+
3567
+ export type HelixFilterInputVueProps = {
3568
+ /** How many tokens to show before the rest become a count. */
3569
+ "max-tags"?: (HelixFilterInput["maxTags"]) | undefined;
3570
+ /** How many tokens to show before the rest become a count. */
3571
+ maxTags?: (HelixFilterInput["maxTags"]) | undefined;
3572
+ /** The value the markup declared, which is where a reset returns to. */
3573
+ "default-value"?: (HelixFilterInput["defaultValue"]) | undefined;
3574
+ /** The value the markup declared, which is where a reset returns to. */
3575
+ defaultValue?: (HelixFilterInput["defaultValue"]) | undefined;
3576
+ /** What the control holds now, and what its form submits.
3577
+
3578
+ One property, not two, so `input.value` answers the question anyone
3579
+ asking it meant. Writing always applies; `<helix-input value="x">` is the
3580
+ same statement in markup, and `default-value` is how markup seeds a value
3581
+ a reset should return to. */
3582
+ value?: (HelixFilterInput["value"]) | undefined;
3583
+ /** What is wrong, in the reader's words rather than the browser's. */
3584
+ feedback?: (HelixFilterInput["feedback"]) | undefined;
3585
+ /** Help under the control, shown while there is nothing wrong. */
3586
+ hint?: (HelixFilterInput["hint"]) | undefined;
3587
+ /** The accessible name, and the fallback for the `label` slot. */
3588
+ label?: (HelixFilterInput["label"]) | undefined;
3589
+ /** Whether the form refuses to submit without it. */
3590
+ required?: (HelixFilterInput["required"]) | undefined;
3591
+ /** Whether the field offers a button that empties it.
3592
+
3593
+ The text only. The tokens are the consumer's markup and this element is not
3594
+ entitled to take them out of the document, which is the same reason
3595
+ `hideOverflow` marks the ones over the cap `hidden` rather than removing
3596
+ them. */
3597
+ clearable?: (HelixFilterInput["clearable"]) | undefined;
3598
+ /** What the clear button is called, since an icon has no name of its own. */
3599
+ "clear-label"?: (HelixFilterInput["clearLabel"]) | undefined;
3600
+ /** What the clear button is called, since an icon has no name of its own. */
3601
+ clearLabel?: (HelixFilterInput["clearLabel"]) | undefined;
3602
+ /** Shown while the field is empty.
3603
+
3604
+ Not a label: it goes when typing starts. */
3605
+ placeholder?: (HelixFilterInput["placeholder"]) | undefined;
3606
+ /** Whether the control is non-interactive.
3607
+
3608
+ Reflected, because the styled tier selects on it, and mirrored to
3609
+ `aria-disabled` rather than removing the element from the accessibility
3610
+ tree, so a screen reader can still announce that the control exists.
3611
+
3612
+ The mirror itself is in `willUpdate` below, here rather than in each
3613
+ control, because here is where `disabled` is. */
3614
+ disabled?: (HelixFilterInput["disabled"]) | undefined;
3615
+ /** Name submitted with the form.
3616
+
3617
+ **Reflected, and it is the exception to "reflect only what CSS selects
3618
+ on".** The platform builds a form's entry list from the `name` *content
3619
+ attribute*, not from the property, so a control named through the property
3620
+ submitted under no name at all and was silently dropped. Measured: two
3621
+ inputs in one form, one named by attribute and one by property, and the
3622
+ form carried a single entry.
3623
+
3624
+ Safe for a React consumer, which is what the rule is protecting: React
3625
+ renders a custom element's props as attributes on the server, so the name
3626
+ is already in the markup being hydrated and reflecting it writes what is
3627
+ there. It is only a change to the markup when a consumer assigns it
3628
+ imperatively later, and nothing is hydrating by then.
3629
+
3630
+ Here rather than on each control. */
3631
+ name?: (HelixFilterInput["name"]) | undefined;
3632
+ };
3633
+
3634
+ export type HelixFilterInputVueEvents = {
3635
+ /** Announced once the text has moved. */
3636
+ input: HelixFilterInputElementEvent;
3637
+ /** Relayed from the input once the reader has finished. */
3638
+ change: HelixFilterInputElementEvent;
3639
+ /** Fired as the text changes, and cancelable. */
3640
+ "helix-before-change": HelixFilterInputHelixBeforeChangeElementEvent;
3641
+ };
3642
+
3579
3643
  export type HelixFlexVueProps = {
3580
3644
  /** Alignment across the direction. */
3581
3645
  align?: (HelixFlex["align"]) | undefined;
@@ -9578,6 +9642,12 @@ export type CustomCssProperties = {
9578
9642
  "--file-input-background-color"?: (string) | undefined;
9579
9643
  /** Padding inside the field. */
9580
9644
  "--file-input-padding"?: (string) | undefined;
9645
+ /** Fill behind the field. */
9646
+ "--filter-input-background-color"?: (string) | undefined;
9647
+ /** Smallest the text keeps as tokens fill the line, before it wraps to its own. */
9648
+ "--filter-input-control-size"?: (string) | undefined;
9649
+ /** Height of the field with nothing in it, which it grows from. */
9650
+ "--filter-input-size"?: (string) | undefined;
9581
9651
  /** An explicit track list, which wins over `min` and `columns`. For a layout of unequal tracks, which neither attribute can say. */
9582
9652
  "--grid-columns"?: (string) | undefined;
9583
9653
  /** How tall a cell is. A row of a tall thin cell is what a status page draws. */
@@ -10392,6 +10462,12 @@ export interface WcToolkitVueGlobalComponents {
10392
10462
  HelixFileInputVueProps,
10393
10463
  HelixFileInputVueEvents
10394
10464
  >;
10465
+ /** The frame is the field rather than the input, so the tokens sit inside the same box as the text and the focus ring is drawn once around the whole control. It grows down a line at a time as tokens are added, which is the arrangement Combobox takes when it is holding a selection. **The tokens are the consumer's own elements**, so the only thing said about them here is to keep their size and not run past the field. A 'Tag' slotted into 'tags' already looks like one; anything else looks like whatever it is. Height comes from the region, like every other control: 'data-density' on whatever holds it, not a 'size' here. */
10466
+ "helix-filter-input": DefineCustomElement<
10467
+ HelixFilterInput,
10468
+ HelixFilterInputVueProps,
10469
+ HelixFilterInputVueEvents
10470
+ >;
10395
10471
  /** The host is the flex container itself and the only child is a slot, so the element adds no box of its own: '<helix-flex>' costs exactly the '<div>' it replaces. There is no separate Stack. A stack is this with 'direction="column"', and a second element whose whole definition is one default of the first is a name to learn rather than a capability to gain. Gap takes a space token name rather than a length, so spacing stays on the scale. A layout that can say 'gap="13px"' is one that will. Presentation only, so there is no headless tier: the split exists to keep behavior separate from styling, and this is entirely styling. */
10396
10472
  "helix-flex": DefineCustomElement<
10397
10473
  HelixFlex,