@fusion.dev/helix 0.12.3 → 0.13.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.
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,
@@ -2072,6 +2073,9 @@ export type HelixComboboxHelixBeforeOpenElementEvent =
2072
2073
  /** `helix-create` event type */
2073
2074
  export type HelixComboboxHelixCreateElementEvent =
2074
2075
  HelixComboboxElementEvent<HelixCreateEvent>;
2076
+ /** `helix-filter` event type */
2077
+ export type HelixComboboxHelixFilterElementEvent =
2078
+ HelixComboboxElementEvent<HelixFilterEvent>;
2075
2079
 
2076
2080
  export type HelixComboboxVueProps = {
2077
2081
  /** Whether the element is open.
@@ -2219,6 +2223,8 @@ export type HelixComboboxVueEvents = {
2219
2223
  "helix-before-open": HelixComboboxHelixBeforeOpenElementEvent;
2220
2224
  /** Fired when the reader asks for something the list does not hold, and cancelable. */
2221
2225
  "helix-create": HelixComboboxHelixCreateElementEvent;
2226
+ /** Fired as the reader types, carrying the text the list is being narrowed to. Cancelable: refusing it leaves the list whole, and is how a consumer takes the filtering for themselves. */
2227
+ "helix-filter": HelixComboboxHelixFilterElementEvent;
2222
2228
  /** Says the state moved, carrying `newState` and `oldState`. */
2223
2229
  toggle: HelixComboboxElementEvent;
2224
2230
  };
@@ -3554,6 +3560,91 @@ export type HelixFileInputVueEvents = {
3554
3560
  "helix-before-change": HelixFileInputHelixBeforeChangeElementEvent;
3555
3561
  };
3556
3562
 
3563
+ /** `HelixFilterInput` component event */
3564
+ export type HelixFilterInputElementEvent<E = Event> = TypedEvent<
3565
+ HelixFilterInput,
3566
+ E
3567
+ >;
3568
+ /** `helix-before-change` event type */
3569
+ export type HelixFilterInputHelixBeforeChangeElementEvent =
3570
+ HelixFilterInputElementEvent<HelixBeforeChangeEvent>;
3571
+
3572
+ export type HelixFilterInputVueProps = {
3573
+ /** How many tokens to show before the rest become a count. */
3574
+ "max-tags"?: (HelixFilterInput["maxTags"]) | undefined;
3575
+ /** How many tokens to show before the rest become a count. */
3576
+ maxTags?: (HelixFilterInput["maxTags"]) | undefined;
3577
+ /** The value the markup declared, which is where a reset returns to. */
3578
+ "default-value"?: (HelixFilterInput["defaultValue"]) | undefined;
3579
+ /** The value the markup declared, which is where a reset returns to. */
3580
+ defaultValue?: (HelixFilterInput["defaultValue"]) | undefined;
3581
+ /** What the control holds now, and what its form submits.
3582
+
3583
+ One property, not two, so `input.value` answers the question anyone
3584
+ asking it meant. Writing always applies; `<helix-input value="x">` is the
3585
+ same statement in markup, and `default-value` is how markup seeds a value
3586
+ a reset should return to. */
3587
+ value?: (HelixFilterInput["value"]) | undefined;
3588
+ /** What is wrong, in the reader's words rather than the browser's. */
3589
+ feedback?: (HelixFilterInput["feedback"]) | undefined;
3590
+ /** Help under the control, shown while there is nothing wrong. */
3591
+ hint?: (HelixFilterInput["hint"]) | undefined;
3592
+ /** The accessible name, and the fallback for the `label` slot. */
3593
+ label?: (HelixFilterInput["label"]) | undefined;
3594
+ /** Whether the form refuses to submit without it. */
3595
+ required?: (HelixFilterInput["required"]) | undefined;
3596
+ /** Whether the field offers a button that empties it.
3597
+
3598
+ The text only. The tokens are the consumer's markup and this element is not
3599
+ entitled to take them out of the document, which is the same reason
3600
+ `hideOverflow` marks the ones over the cap `hidden` rather than removing
3601
+ them. */
3602
+ clearable?: (HelixFilterInput["clearable"]) | undefined;
3603
+ /** What the clear button is called, since an icon has no name of its own. */
3604
+ "clear-label"?: (HelixFilterInput["clearLabel"]) | undefined;
3605
+ /** What the clear button is called, since an icon has no name of its own. */
3606
+ clearLabel?: (HelixFilterInput["clearLabel"]) | undefined;
3607
+ /** Shown while the field is empty.
3608
+
3609
+ Not a label: it goes when typing starts. */
3610
+ placeholder?: (HelixFilterInput["placeholder"]) | undefined;
3611
+ /** Whether the control is non-interactive.
3612
+
3613
+ Reflected, because the styled tier selects on it, and mirrored to
3614
+ `aria-disabled` rather than removing the element from the accessibility
3615
+ tree, so a screen reader can still announce that the control exists.
3616
+
3617
+ The mirror itself is in `willUpdate` below, here rather than in each
3618
+ control, because here is where `disabled` is. */
3619
+ disabled?: (HelixFilterInput["disabled"]) | undefined;
3620
+ /** Name submitted with the form.
3621
+
3622
+ **Reflected, and it is the exception to "reflect only what CSS selects
3623
+ on".** The platform builds a form's entry list from the `name` *content
3624
+ attribute*, not from the property, so a control named through the property
3625
+ submitted under no name at all and was silently dropped. Measured: two
3626
+ inputs in one form, one named by attribute and one by property, and the
3627
+ form carried a single entry.
3628
+
3629
+ Safe for a React consumer, which is what the rule is protecting: React
3630
+ renders a custom element's props as attributes on the server, so the name
3631
+ is already in the markup being hydrated and reflecting it writes what is
3632
+ there. It is only a change to the markup when a consumer assigns it
3633
+ imperatively later, and nothing is hydrating by then.
3634
+
3635
+ Here rather than on each control. */
3636
+ name?: (HelixFilterInput["name"]) | undefined;
3637
+ };
3638
+
3639
+ export type HelixFilterInputVueEvents = {
3640
+ /** Announced once the text has moved. */
3641
+ input: HelixFilterInputElementEvent;
3642
+ /** Relayed from the input once the reader has finished. */
3643
+ change: HelixFilterInputElementEvent;
3644
+ /** Fired as the text changes, and cancelable. */
3645
+ "helix-before-change": HelixFilterInputHelixBeforeChangeElementEvent;
3646
+ };
3647
+
3557
3648
  export type HelixFlexVueProps = {
3558
3649
  /** Alignment across the direction. */
3559
3650
  align?: (HelixFlex["align"]) | undefined;
@@ -9556,6 +9647,12 @@ export type CustomCssProperties = {
9556
9647
  "--file-input-background-color"?: (string) | undefined;
9557
9648
  /** Padding inside the field. */
9558
9649
  "--file-input-padding"?: (string) | undefined;
9650
+ /** Fill behind the field. */
9651
+ "--filter-input-background-color"?: (string) | undefined;
9652
+ /** Smallest the text keeps as tokens fill the line, before it wraps to its own. */
9653
+ "--filter-input-control-size"?: (string) | undefined;
9654
+ /** Height of the field with nothing in it, which it grows from. */
9655
+ "--filter-input-size"?: (string) | undefined;
9559
9656
  /** An explicit track list, which wins over `min` and `columns`. For a layout of unequal tracks, which neither attribute can say. */
9560
9657
  "--grid-columns"?: (string) | undefined;
9561
9658
  /** How tall a cell is. A row of a tall thin cell is what a status page draws. */
@@ -10370,6 +10467,12 @@ export interface WcToolkitVueGlobalComponents {
10370
10467
  HelixFileInputVueProps,
10371
10468
  HelixFileInputVueEvents
10372
10469
  >;
10470
+ /** 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. */
10471
+ "helix-filter-input": DefineCustomElement<
10472
+ HelixFilterInput,
10473
+ HelixFilterInputVueProps,
10474
+ HelixFilterInputVueEvents
10475
+ >;
10373
10476
  /** 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. */
10374
10477
  "helix-flex": DefineCustomElement<
10375
10478
  HelixFlex,