@fusion.dev/helix-headless 0.12.3 → 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/custom-elements.json +1243 -0
- package/dist/element-events.generated.js +1 -0
- package/dist/filter-input/index.d.ts +1 -0
- package/dist/filter-input/index.js +1 -0
- package/dist/filter-input/root/filter-input-root.d.ts +129 -0
- package/dist/filter-input/root/filter-input-root.js +140 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +5 -5
- package/types/jsx.d.ts +527 -0
- package/types/svelte.d.ts +1 -0
- package/types/vue.d.ts +92 -0
package/custom-elements.json
CHANGED
|
@@ -26467,6 +26467,1241 @@
|
|
|
26467
26467
|
}
|
|
26468
26468
|
]
|
|
26469
26469
|
},
|
|
26470
|
+
{
|
|
26471
|
+
"kind": "javascript-module",
|
|
26472
|
+
"path": "src/filter-input/index.ts",
|
|
26473
|
+
"declarations": [],
|
|
26474
|
+
"exports": [
|
|
26475
|
+
{
|
|
26476
|
+
"kind": "js",
|
|
26477
|
+
"name": "*",
|
|
26478
|
+
"declaration": {
|
|
26479
|
+
"name": "*",
|
|
26480
|
+
"module": "src/filter-input/root/filter-input-root.js"
|
|
26481
|
+
}
|
|
26482
|
+
}
|
|
26483
|
+
]
|
|
26484
|
+
},
|
|
26485
|
+
{
|
|
26486
|
+
"kind": "javascript-module",
|
|
26487
|
+
"path": "src/filter-input/root/filter-input-root.ts",
|
|
26488
|
+
"declarations": [
|
|
26489
|
+
{
|
|
26490
|
+
"kind": "class",
|
|
26491
|
+
"description": "**The tokens are the consumer's own elements, slotted.** What a filter narrows\nby belongs to the consumer's model rather than to this element: a facet with a\nprefix, a saved query, a range. So they are slotted rather than rendered from\na list of strings, and removing one is a request this element makes rather\nthan a change it applies. Combobox is the other way round, and that is the\ndifference between the two: its tokens are a view of a selection it owns,\ndrawn from options it was handed.\n\n**`value` is the text being typed, not the tokens**, which is what makes this\na field a consumer can listen to. Every keystroke announces `input` with the\ntext on the element, so a table narrows as the reader types. The tokens need\nno reporting back, being markup the consumer already holds.\n\nBackspace on an empty field asks the last token to go, through the same\n`helix-dismiss` its own remove control fires, so a consumer who handled the\npointer has already handled the keyboard.",
|
|
26492
|
+
"name": "HelixHeadlessFilterInput",
|
|
26493
|
+
"cssParts": [
|
|
26494
|
+
{
|
|
26495
|
+
"description": "The button that empties the field.",
|
|
26496
|
+
"name": "clear"
|
|
26497
|
+
},
|
|
26498
|
+
{
|
|
26499
|
+
"description": "The input itself.",
|
|
26500
|
+
"name": "control"
|
|
26501
|
+
},
|
|
26502
|
+
{
|
|
26503
|
+
"description": "What is wrong with it.",
|
|
26504
|
+
"name": "feedback"
|
|
26505
|
+
},
|
|
26506
|
+
{
|
|
26507
|
+
"description": "The box holding everything.",
|
|
26508
|
+
"name": "field"
|
|
26509
|
+
},
|
|
26510
|
+
{
|
|
26511
|
+
"description": "Help under the field, while nothing is wrong.",
|
|
26512
|
+
"name": "hint"
|
|
26513
|
+
},
|
|
26514
|
+
{
|
|
26515
|
+
"description": "The question, over the field.",
|
|
26516
|
+
"name": "label"
|
|
26517
|
+
},
|
|
26518
|
+
{
|
|
26519
|
+
"description": "How many tokens did not fit.",
|
|
26520
|
+
"name": "rest"
|
|
26521
|
+
},
|
|
26522
|
+
{
|
|
26523
|
+
"description": "The row the tokens sit in.",
|
|
26524
|
+
"name": "tags"
|
|
26525
|
+
}
|
|
26526
|
+
],
|
|
26527
|
+
"slots": [
|
|
26528
|
+
{
|
|
26529
|
+
"description": "After the text, for a count or a control.",
|
|
26530
|
+
"name": "end"
|
|
26531
|
+
},
|
|
26532
|
+
{
|
|
26533
|
+
"description": "Before the text, for a search icon.",
|
|
26534
|
+
"name": "start"
|
|
26535
|
+
},
|
|
26536
|
+
{
|
|
26537
|
+
"description": "What is already narrowing the results, as `Tag`s.",
|
|
26538
|
+
"name": "tags"
|
|
26539
|
+
}
|
|
26540
|
+
],
|
|
26541
|
+
"members": [
|
|
26542
|
+
{
|
|
26543
|
+
"kind": "field",
|
|
26544
|
+
"name": "aria",
|
|
26545
|
+
"privacy": "protected",
|
|
26546
|
+
"readonly": true,
|
|
26547
|
+
"default": "new AriaForwardController(this, { target: () => this.renderRoot?.querySelector<HTMLElement>('[part=\"control\"]') ?? null, })"
|
|
26548
|
+
},
|
|
26549
|
+
{
|
|
26550
|
+
"kind": "field",
|
|
26551
|
+
"name": "announcesInput",
|
|
26552
|
+
"type": {
|
|
26553
|
+
"text": "boolean"
|
|
26554
|
+
},
|
|
26555
|
+
"privacy": "protected",
|
|
26556
|
+
"readonly": true,
|
|
26557
|
+
"default": "true",
|
|
26558
|
+
"description": "Typed, so every keystroke is announced. See `announcesInput`.",
|
|
26559
|
+
"inheritedFrom": {
|
|
26560
|
+
"name": "MixinControllerValue",
|
|
26561
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26562
|
+
}
|
|
26563
|
+
},
|
|
26564
|
+
{
|
|
26565
|
+
"kind": "field",
|
|
26566
|
+
"name": "clearable",
|
|
26567
|
+
"type": {
|
|
26568
|
+
"text": "boolean"
|
|
26569
|
+
},
|
|
26570
|
+
"default": "false",
|
|
26571
|
+
"description": "Whether the field offers a button that empties it.\n\nThe text only. The tokens are the consumer's markup and this element is not\nentitled to take them out of the document, which is the same reason\n`hideOverflow` marks the ones over the cap `hidden` rather than removing\nthem.",
|
|
26572
|
+
"attribute": "clearable"
|
|
26573
|
+
},
|
|
26574
|
+
{
|
|
26575
|
+
"kind": "field",
|
|
26576
|
+
"name": "clearLabel",
|
|
26577
|
+
"type": {
|
|
26578
|
+
"text": "string"
|
|
26579
|
+
},
|
|
26580
|
+
"default": "'Clear'",
|
|
26581
|
+
"description": "What the clear button is called, since an icon has no name of its own.",
|
|
26582
|
+
"attribute": "clear-label"
|
|
26583
|
+
},
|
|
26584
|
+
{
|
|
26585
|
+
"kind": "field",
|
|
26586
|
+
"name": "placeholder",
|
|
26587
|
+
"type": {
|
|
26588
|
+
"text": "string"
|
|
26589
|
+
},
|
|
26590
|
+
"default": "''",
|
|
26591
|
+
"description": "Shown while the field is empty.\n\nNot a label: it goes when typing starts.",
|
|
26592
|
+
"attribute": "placeholder"
|
|
26593
|
+
},
|
|
26594
|
+
{
|
|
26595
|
+
"kind": "field",
|
|
26596
|
+
"name": "over",
|
|
26597
|
+
"type": {
|
|
26598
|
+
"text": "number"
|
|
26599
|
+
},
|
|
26600
|
+
"privacy": "private",
|
|
26601
|
+
"default": "0",
|
|
26602
|
+
"description": "How many tokens did not fit, which is what the row's count renders."
|
|
26603
|
+
},
|
|
26604
|
+
{
|
|
26605
|
+
"kind": "field",
|
|
26606
|
+
"name": "releaseCaret",
|
|
26607
|
+
"type": {
|
|
26608
|
+
"text": "(() => void) | undefined"
|
|
26609
|
+
},
|
|
26610
|
+
"privacy": "private",
|
|
26611
|
+
"description": "The caret, held across a value the consumer wrote rather than the reader.\n\nSet in `willUpdate` and spent in `updated`, because Lit's `.value` binding\nlands between the two and takes the selection with it. See `holdCaret`."
|
|
26612
|
+
},
|
|
26613
|
+
{
|
|
26614
|
+
"kind": "field",
|
|
26615
|
+
"name": "shadowRootOptions",
|
|
26616
|
+
"type": {
|
|
26617
|
+
"text": "ShadowRootInit"
|
|
26618
|
+
},
|
|
26619
|
+
"static": true,
|
|
26620
|
+
"default": "{ ...HelixFormElement.shadowRootOptions, delegatesFocus: true, }",
|
|
26621
|
+
"description": "Focus is delegated to the input, so the host is never the focus target."
|
|
26622
|
+
},
|
|
26623
|
+
{
|
|
26624
|
+
"kind": "field",
|
|
26625
|
+
"name": "control",
|
|
26626
|
+
"type": {
|
|
26627
|
+
"text": "HTMLInputElement | null"
|
|
26628
|
+
},
|
|
26629
|
+
"privacy": "private",
|
|
26630
|
+
"readonly": true
|
|
26631
|
+
},
|
|
26632
|
+
{
|
|
26633
|
+
"kind": "field",
|
|
26634
|
+
"name": "tokens",
|
|
26635
|
+
"type": {
|
|
26636
|
+
"text": "HTMLSlotElement | null"
|
|
26637
|
+
},
|
|
26638
|
+
"privacy": "private",
|
|
26639
|
+
"readonly": true
|
|
26640
|
+
},
|
|
26641
|
+
{
|
|
26642
|
+
"kind": "field",
|
|
26643
|
+
"name": "showsClear",
|
|
26644
|
+
"type": {
|
|
26645
|
+
"text": "boolean"
|
|
26646
|
+
},
|
|
26647
|
+
"privacy": "private",
|
|
26648
|
+
"description": "Whether there is a clear button on screen right now.",
|
|
26649
|
+
"readonly": true
|
|
26650
|
+
},
|
|
26651
|
+
{
|
|
26652
|
+
"kind": "field",
|
|
26653
|
+
"name": "handleInput",
|
|
26654
|
+
"privacy": "private",
|
|
26655
|
+
"readonly": true,
|
|
26656
|
+
"description": "Every keystroke, cancelable, and put back where it is refused.\n\nStopped for the reason `Input` gives: `input` is composed, so the inner\ncontrol's own would arrive beside the one the mixin announces and a consumer\nwould hear one keystroke twice, once carrying the value from before it."
|
|
26657
|
+
},
|
|
26658
|
+
{
|
|
26659
|
+
"kind": "field",
|
|
26660
|
+
"name": "handleChange",
|
|
26661
|
+
"privacy": "private",
|
|
26662
|
+
"readonly": true,
|
|
26663
|
+
"description": "Relayed, because `change` does not cross a shadow boundary on its own."
|
|
26664
|
+
},
|
|
26665
|
+
{
|
|
26666
|
+
"kind": "field",
|
|
26667
|
+
"name": "handleClear",
|
|
26668
|
+
"privacy": "private",
|
|
26669
|
+
"readonly": true,
|
|
26670
|
+
"description": "Empties the text and gives the caret back.\n\nFocus returns to the input rather than staying on a button that is about to\ndisappear, which would otherwise land on the body."
|
|
26671
|
+
},
|
|
26672
|
+
{
|
|
26673
|
+
"kind": "field",
|
|
26674
|
+
"name": "handleKeydown",
|
|
26675
|
+
"privacy": "private",
|
|
26676
|
+
"readonly": true
|
|
26677
|
+
},
|
|
26678
|
+
{
|
|
26679
|
+
"kind": "field",
|
|
26680
|
+
"name": "handleTokens",
|
|
26681
|
+
"privacy": "private",
|
|
26682
|
+
"readonly": true,
|
|
26683
|
+
"description": "The row again, whenever what is in it changes."
|
|
26684
|
+
},
|
|
26685
|
+
{
|
|
26686
|
+
"kind": "method",
|
|
26687
|
+
"name": "removeLastToken",
|
|
26688
|
+
"privacy": "protected",
|
|
26689
|
+
"return": {
|
|
26690
|
+
"type": {
|
|
26691
|
+
"text": "void"
|
|
26692
|
+
}
|
|
26693
|
+
},
|
|
26694
|
+
"description": "Asks the last token to go, rather than taking it.\n\n`dismiss()` is the tag's own, so this is the code path its remove control\nalready runs on a press: the consumer hears one `helix-dismiss`, cancels it\nor removes the element, and never learns which of the two asked. A slotted\nnode that is not a `Tag` has no such method and is left alone, because\nhiding a consumer's element on Backspace would be this element deciding\nsomething it was never given.",
|
|
26695
|
+
"inheritedFrom": {
|
|
26696
|
+
"name": "MixinTokens",
|
|
26697
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
26698
|
+
}
|
|
26699
|
+
},
|
|
26700
|
+
{
|
|
26701
|
+
"kind": "method",
|
|
26702
|
+
"name": "focus",
|
|
26703
|
+
"return": {
|
|
26704
|
+
"type": {
|
|
26705
|
+
"text": "void"
|
|
26706
|
+
}
|
|
26707
|
+
},
|
|
26708
|
+
"parameters": [
|
|
26709
|
+
{
|
|
26710
|
+
"name": "options",
|
|
26711
|
+
"optional": true,
|
|
26712
|
+
"type": {
|
|
26713
|
+
"text": "FocusOptions"
|
|
26714
|
+
}
|
|
26715
|
+
}
|
|
26716
|
+
],
|
|
26717
|
+
"description": "Puts the caret in the field, the way a label pointing at one would.",
|
|
26718
|
+
"type": {
|
|
26719
|
+
"text": "focus(options?: FocusOptions) => void"
|
|
26720
|
+
}
|
|
26721
|
+
},
|
|
26722
|
+
{
|
|
26723
|
+
"kind": "field",
|
|
26724
|
+
"name": "maxTags",
|
|
26725
|
+
"type": {
|
|
26726
|
+
"text": "number"
|
|
26727
|
+
},
|
|
26728
|
+
"default": "0",
|
|
26729
|
+
"description": "How many tokens to show before the rest become a count.",
|
|
26730
|
+
"attribute": "max-tags",
|
|
26731
|
+
"inheritedFrom": {
|
|
26732
|
+
"name": "MixinTokens",
|
|
26733
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
26734
|
+
}
|
|
26735
|
+
},
|
|
26736
|
+
{
|
|
26737
|
+
"kind": "method",
|
|
26738
|
+
"name": "renderTokenRow",
|
|
26739
|
+
"privacy": "protected",
|
|
26740
|
+
"return": {
|
|
26741
|
+
"type": {
|
|
26742
|
+
"text": "TemplateResult | typeof nothing"
|
|
26743
|
+
}
|
|
26744
|
+
},
|
|
26745
|
+
"parameters": [
|
|
26746
|
+
{
|
|
26747
|
+
"name": "content",
|
|
26748
|
+
"type": {
|
|
26749
|
+
"text": "unknown"
|
|
26750
|
+
}
|
|
26751
|
+
},
|
|
26752
|
+
{
|
|
26753
|
+
"name": "over",
|
|
26754
|
+
"type": {
|
|
26755
|
+
"text": "number"
|
|
26756
|
+
}
|
|
26757
|
+
}
|
|
26758
|
+
],
|
|
26759
|
+
"inheritedFrom": {
|
|
26760
|
+
"name": "MixinTokens",
|
|
26761
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
26762
|
+
}
|
|
26763
|
+
},
|
|
26764
|
+
{
|
|
26765
|
+
"kind": "method",
|
|
26766
|
+
"name": "hideOverflow",
|
|
26767
|
+
"privacy": "protected",
|
|
26768
|
+
"return": {
|
|
26769
|
+
"type": {
|
|
26770
|
+
"text": "number"
|
|
26771
|
+
}
|
|
26772
|
+
},
|
|
26773
|
+
"parameters": [
|
|
26774
|
+
{
|
|
26775
|
+
"name": "slot",
|
|
26776
|
+
"type": {
|
|
26777
|
+
"text": "HTMLSlotElement | null | undefined"
|
|
26778
|
+
}
|
|
26779
|
+
}
|
|
26780
|
+
],
|
|
26781
|
+
"inheritedFrom": {
|
|
26782
|
+
"name": "MixinTokens",
|
|
26783
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
26784
|
+
}
|
|
26785
|
+
},
|
|
26786
|
+
{
|
|
26787
|
+
"kind": "method",
|
|
26788
|
+
"name": "tokenKeydown",
|
|
26789
|
+
"privacy": "protected",
|
|
26790
|
+
"return": {
|
|
26791
|
+
"type": {
|
|
26792
|
+
"text": "boolean"
|
|
26793
|
+
}
|
|
26794
|
+
},
|
|
26795
|
+
"parameters": [
|
|
26796
|
+
{
|
|
26797
|
+
"name": "event",
|
|
26798
|
+
"type": {
|
|
26799
|
+
"text": "KeyboardEvent"
|
|
26800
|
+
}
|
|
26801
|
+
},
|
|
26802
|
+
{
|
|
26803
|
+
"name": "typed",
|
|
26804
|
+
"type": {
|
|
26805
|
+
"text": "string"
|
|
26806
|
+
}
|
|
26807
|
+
}
|
|
26808
|
+
],
|
|
26809
|
+
"inheritedFrom": {
|
|
26810
|
+
"name": "MixinTokens",
|
|
26811
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
26812
|
+
}
|
|
26813
|
+
},
|
|
26814
|
+
{
|
|
26815
|
+
"kind": "field",
|
|
26816
|
+
"name": "defaultValue",
|
|
26817
|
+
"type": {
|
|
26818
|
+
"text": "string"
|
|
26819
|
+
},
|
|
26820
|
+
"default": "''",
|
|
26821
|
+
"description": "The value the markup declared, which is where a reset returns to.",
|
|
26822
|
+
"attribute": "default-value",
|
|
26823
|
+
"inheritedFrom": {
|
|
26824
|
+
"name": "MixinControllerValue",
|
|
26825
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26826
|
+
}
|
|
26827
|
+
},
|
|
26828
|
+
{
|
|
26829
|
+
"kind": "field",
|
|
26830
|
+
"name": "value",
|
|
26831
|
+
"type": {
|
|
26832
|
+
"text": "string"
|
|
26833
|
+
},
|
|
26834
|
+
"description": "What the control holds now, and what its form submits.\n\nOne property, not two, so `input.value` answers the question anyone\nasking it meant. Writing always applies; `<helix-input value=\"x\">` is the\nsame statement in markup, and `default-value` is how markup seeds a value\na reset should return to.",
|
|
26835
|
+
"attribute": "value",
|
|
26836
|
+
"inheritedFrom": {
|
|
26837
|
+
"name": "MixinControllerValue",
|
|
26838
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26839
|
+
}
|
|
26840
|
+
},
|
|
26841
|
+
{
|
|
26842
|
+
"kind": "field",
|
|
26843
|
+
"name": "valueState",
|
|
26844
|
+
"type": {
|
|
26845
|
+
"text": "string | undefined"
|
|
26846
|
+
},
|
|
26847
|
+
"privacy": "private",
|
|
26848
|
+
"default": "undefined",
|
|
26849
|
+
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it.",
|
|
26850
|
+
"inheritedFrom": {
|
|
26851
|
+
"name": "MixinControllerValue",
|
|
26852
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26853
|
+
}
|
|
26854
|
+
},
|
|
26855
|
+
{
|
|
26856
|
+
"kind": "method",
|
|
26857
|
+
"name": "announceNatively",
|
|
26858
|
+
"privacy": "private",
|
|
26859
|
+
"return": {
|
|
26860
|
+
"type": {
|
|
26861
|
+
"text": "void"
|
|
26862
|
+
}
|
|
26863
|
+
},
|
|
26864
|
+
"description": "Announces the applied value under the platform's own name.\n\n**After `apply`, never before**, which is the whole reason this is\nseparate from the request event: a native handler reads\n`event.target.value`, and it has to be the value that was just applied.\n\n**Both, for a discrete control, because that is what the platform does.**\nA native `<select>` sends `input` and then `change` from one choice: the\nvalue moved, and the reader is also done. A continuous control announces\n`input` here and relays `change` from its inner control when the reader\nis done, so the pair keeps the platform's timings rather than reporting a\ncommit on every keystroke.",
|
|
26865
|
+
"inheritedFrom": {
|
|
26866
|
+
"name": "MixinControllerValue",
|
|
26867
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26868
|
+
}
|
|
26869
|
+
},
|
|
26870
|
+
{
|
|
26871
|
+
"kind": "method",
|
|
26872
|
+
"name": "requestValue",
|
|
26873
|
+
"return": {
|
|
26874
|
+
"type": {
|
|
26875
|
+
"text": "boolean"
|
|
26876
|
+
}
|
|
26877
|
+
},
|
|
26878
|
+
"parameters": [
|
|
26879
|
+
{
|
|
26880
|
+
"name": "next",
|
|
26881
|
+
"type": {
|
|
26882
|
+
"text": "string"
|
|
26883
|
+
}
|
|
26884
|
+
}
|
|
26885
|
+
],
|
|
26886
|
+
"description": "Requests a new value, and reports whether the request stood.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-change` is\na refusal and nothing moves. Nobody refusing means the control updates\nitself, whether or not a consumer declared `value`: a declared property\nis a seed and a correction, the way `<input value>` is, and a consumer\nwho wants the change for themselves refuses it and assigns their own.",
|
|
26887
|
+
"inheritedFrom": {
|
|
26888
|
+
"name": "MixinControllerValue",
|
|
26889
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26890
|
+
},
|
|
26891
|
+
"type": {
|
|
26892
|
+
"text": "requestValue(next: string) => boolean"
|
|
26893
|
+
}
|
|
26894
|
+
},
|
|
26895
|
+
{
|
|
26896
|
+
"kind": "method",
|
|
26897
|
+
"name": "formResetCallback",
|
|
26898
|
+
"return": {
|
|
26899
|
+
"type": {
|
|
26900
|
+
"text": "void"
|
|
26901
|
+
}
|
|
26902
|
+
},
|
|
26903
|
+
"description": "Returns the control to the value its markup declared.\n\nBoth halves are dropped, the consumer's and the control's, because a\nreset means the form is as it was served. Clearing only the internal one\nwould leave a control that had been written to stuck at that value.",
|
|
26904
|
+
"inheritedFrom": {
|
|
26905
|
+
"name": "MixinControllerValue",
|
|
26906
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26907
|
+
},
|
|
26908
|
+
"type": {
|
|
26909
|
+
"text": "formResetCallback() => void"
|
|
26910
|
+
}
|
|
26911
|
+
},
|
|
26912
|
+
{
|
|
26913
|
+
"kind": "method",
|
|
26914
|
+
"name": "formStateRestoreCallback",
|
|
26915
|
+
"return": {
|
|
26916
|
+
"type": {
|
|
26917
|
+
"text": "void"
|
|
26918
|
+
}
|
|
26919
|
+
},
|
|
26920
|
+
"parameters": [
|
|
26921
|
+
{
|
|
26922
|
+
"name": "state",
|
|
26923
|
+
"type": {
|
|
26924
|
+
"text": "string | null"
|
|
26925
|
+
}
|
|
26926
|
+
}
|
|
26927
|
+
],
|
|
26928
|
+
"description": "Restores the value when the browser brings a form back.\n\nFalling back to `defaultValue` rather than to empty, because a restore\nwith no state is a form the browser has nothing recorded for, which is\nthe same situation as a fresh one.",
|
|
26929
|
+
"inheritedFrom": {
|
|
26930
|
+
"name": "MixinControllerValue",
|
|
26931
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
26932
|
+
},
|
|
26933
|
+
"type": {
|
|
26934
|
+
"text": "formStateRestoreCallback(state: string | null) => void"
|
|
26935
|
+
}
|
|
26936
|
+
},
|
|
26937
|
+
{
|
|
26938
|
+
"kind": "field",
|
|
26939
|
+
"name": "feedback",
|
|
26940
|
+
"type": {
|
|
26941
|
+
"text": "string"
|
|
26942
|
+
},
|
|
26943
|
+
"default": "''",
|
|
26944
|
+
"description": "What is wrong, in the reader's words rather than the browser's.",
|
|
26945
|
+
"attribute": "feedback",
|
|
26946
|
+
"inheritedFrom": {
|
|
26947
|
+
"name": "MixinField",
|
|
26948
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
26949
|
+
}
|
|
26950
|
+
},
|
|
26951
|
+
{
|
|
26952
|
+
"kind": "field",
|
|
26953
|
+
"name": "hint",
|
|
26954
|
+
"type": {
|
|
26955
|
+
"text": "string"
|
|
26956
|
+
},
|
|
26957
|
+
"default": "''",
|
|
26958
|
+
"description": "Help under the control, shown while there is nothing wrong.",
|
|
26959
|
+
"attribute": "hint",
|
|
26960
|
+
"inheritedFrom": {
|
|
26961
|
+
"name": "MixinField",
|
|
26962
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
26963
|
+
}
|
|
26964
|
+
},
|
|
26965
|
+
{
|
|
26966
|
+
"kind": "field",
|
|
26967
|
+
"name": "label",
|
|
26968
|
+
"type": {
|
|
26969
|
+
"text": "string"
|
|
26970
|
+
},
|
|
26971
|
+
"default": "''",
|
|
26972
|
+
"description": "The accessible name, and the fallback for the `label` slot.",
|
|
26973
|
+
"attribute": "label",
|
|
26974
|
+
"inheritedFrom": {
|
|
26975
|
+
"name": "MixinField",
|
|
26976
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
26977
|
+
}
|
|
26978
|
+
},
|
|
26979
|
+
{
|
|
26980
|
+
"kind": "field",
|
|
26981
|
+
"name": "required",
|
|
26982
|
+
"type": {
|
|
26983
|
+
"text": "boolean"
|
|
26984
|
+
},
|
|
26985
|
+
"default": "false",
|
|
26986
|
+
"description": "Whether the form refuses to submit without it.",
|
|
26987
|
+
"attribute": "required",
|
|
26988
|
+
"reflects": true,
|
|
26989
|
+
"inheritedFrom": {
|
|
26990
|
+
"name": "MixinField",
|
|
26991
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
26992
|
+
}
|
|
26993
|
+
},
|
|
26994
|
+
{
|
|
26995
|
+
"kind": "field",
|
|
26996
|
+
"name": "touched",
|
|
26997
|
+
"type": {
|
|
26998
|
+
"text": "boolean"
|
|
26999
|
+
},
|
|
27000
|
+
"privacy": "private",
|
|
27001
|
+
"default": "false",
|
|
27002
|
+
"description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
|
|
27003
|
+
"inheritedFrom": {
|
|
27004
|
+
"name": "MixinField",
|
|
27005
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27006
|
+
}
|
|
27007
|
+
},
|
|
27008
|
+
{
|
|
27009
|
+
"kind": "field",
|
|
27010
|
+
"name": "validates",
|
|
27011
|
+
"type": {
|
|
27012
|
+
"text": "boolean"
|
|
27013
|
+
},
|
|
27014
|
+
"privacy": "private",
|
|
27015
|
+
"description": "Whether this element may be asked about its own validity at all.\n\nReading the static the platform itself reads to decide, rather than\nprobing: `validity` and `validationMessage` throw `NotSupportedError` on\nan element that is not form-associated, and a group whose members each\nsubmit themselves is not. Such a control still shows a message, it just\nhas to be given one.",
|
|
27016
|
+
"readonly": true,
|
|
27017
|
+
"inheritedFrom": {
|
|
27018
|
+
"name": "MixinField",
|
|
27019
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27020
|
+
}
|
|
27021
|
+
},
|
|
27022
|
+
{
|
|
27023
|
+
"kind": "method",
|
|
27024
|
+
"name": "renderGroupLabel",
|
|
27025
|
+
"privacy": "protected",
|
|
27026
|
+
"return": {
|
|
27027
|
+
"type": {
|
|
27028
|
+
"text": "TemplateResult | typeof nothing"
|
|
27029
|
+
}
|
|
27030
|
+
},
|
|
27031
|
+
"description": "A label over a set rather than beside a control.\n\nA plain element and not a `<label for>`, because a group is not a single\ncontrol and there is nothing for `for` to point at. What names the group\nis `linkHost`, pointing the host's internals at this element.",
|
|
27032
|
+
"inheritedFrom": {
|
|
27033
|
+
"name": "MixinField",
|
|
27034
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27035
|
+
}
|
|
27036
|
+
},
|
|
27037
|
+
{
|
|
27038
|
+
"kind": "method",
|
|
27039
|
+
"name": "renderLabel",
|
|
27040
|
+
"privacy": "protected",
|
|
27041
|
+
"return": {
|
|
27042
|
+
"type": {
|
|
27043
|
+
"text": "TemplateResult | typeof nothing"
|
|
27044
|
+
}
|
|
27045
|
+
},
|
|
27046
|
+
"description": "A label above the control, pointing at it.\n\nA real `<label for>`, so pressing the words focuses the field and the\nbrowser does the forwarding. It resolves because `for` looks within the\nsame tree, and the control it names is in this shadow root.\n\n**Nothing at all when there is no label**, which is the same rule the\nhint and the feedback follow: none of the three is always used, and an\nelement rendered empty is not free. It still generates a box, so it still\ntakes a row of the grid and a gap on either side of it, which is a field\nthat has moved down the page for a label nobody wrote. `nothing` leaves\ncomment markers rather than a node, so the gap has nothing to sit between.\n\n**`aria-label` names without showing**, and it is forwarded rather than\nleft where the consumer put it. A custom element has no way to delegate a\nlabel to the control inside it, so an `aria-label` on the host reaches\nnothing: measured, the inner input came back with no label and no name of\nits own while the attribute sat on the wrapper. What happens instead is\nthat the label is rendered and clipped, so the name arrives through the\nsame `<label for>` a visible one does.\n\nThe rule is that `label` means a label, `aria-label` means a name, and\nneither means an unnamed field a screen reader announces as \"edit text\".",
|
|
27047
|
+
"inheritedFrom": {
|
|
27048
|
+
"name": "MixinField",
|
|
27049
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27050
|
+
}
|
|
27051
|
+
},
|
|
27052
|
+
{
|
|
27053
|
+
"kind": "method",
|
|
27054
|
+
"name": "renderHint",
|
|
27055
|
+
"privacy": "protected",
|
|
27056
|
+
"return": {
|
|
27057
|
+
"type": {
|
|
27058
|
+
"text": "TemplateResult | typeof nothing"
|
|
27059
|
+
}
|
|
27060
|
+
},
|
|
27061
|
+
"description": "Help under the control, unless something has gone wrong.\n\nThe two share a place rather than stacking, so a field is one line of\nsmall text either way and nothing below it moves when the message\nchanges. What the reader needs at that moment is what is wrong, and a\nhint that survives the error it describes is a second line to read before\ngetting to the one that matters.",
|
|
27062
|
+
"inheritedFrom": {
|
|
27063
|
+
"name": "MixinField",
|
|
27064
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27065
|
+
}
|
|
27066
|
+
},
|
|
27067
|
+
{
|
|
27068
|
+
"kind": "method",
|
|
27069
|
+
"name": "renderFeedback",
|
|
27070
|
+
"privacy": "protected",
|
|
27071
|
+
"return": {
|
|
27072
|
+
"type": {
|
|
27073
|
+
"text": "TemplateResult | typeof nothing"
|
|
27074
|
+
}
|
|
27075
|
+
},
|
|
27076
|
+
"description": "The validation message, in the hint's place.\n\n`role=\"alert\"` rather than a live region on the whole field, so what is\nannounced is the message and not the label and help along with it.",
|
|
27077
|
+
"inheritedFrom": {
|
|
27078
|
+
"name": "MixinField",
|
|
27079
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27080
|
+
}
|
|
27081
|
+
},
|
|
27082
|
+
{
|
|
27083
|
+
"kind": "method",
|
|
27084
|
+
"name": "linkHost",
|
|
27085
|
+
"privacy": "protected",
|
|
27086
|
+
"return": {
|
|
27087
|
+
"type": {
|
|
27088
|
+
"text": "void"
|
|
27089
|
+
}
|
|
27090
|
+
},
|
|
27091
|
+
"description": "Points the host at its own label and description nodes, for a group.\n\nA control's `<input>` and its hint are both in the shadow root, so a\nplain `aria-describedby` resolves between them. A group's host is in the\nlight DOM and its hint is not, so the IDREF cannot reach and\n`element.ariaDescribedByElements` drops the reference outright. Only the\n`ElementInternals` form keeps it, measured in Chrome 148: two of two\nkept through internals, zero of one through the element.\n\nClient only, and deliberately, because element references need the nodes\nto exist and on the server they do not. The name is therefore also set as\na plain string by the component, which a server can write, and the\nreference here overrides it wherever a consumer slotted something richer\nthan a string. A group with only a property for a label reads the same\neither way.",
|
|
27092
|
+
"inheritedFrom": {
|
|
27093
|
+
"name": "MixinField",
|
|
27094
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27095
|
+
}
|
|
27096
|
+
},
|
|
27097
|
+
{
|
|
27098
|
+
"kind": "field",
|
|
27099
|
+
"name": "shownFeedback",
|
|
27100
|
+
"type": {
|
|
27101
|
+
"text": "string"
|
|
27102
|
+
},
|
|
27103
|
+
"privacy": "private",
|
|
27104
|
+
"default": "''",
|
|
27105
|
+
"description": "What the last render put on screen, so a change can be noticed.",
|
|
27106
|
+
"inheritedFrom": {
|
|
27107
|
+
"name": "MixinField",
|
|
27108
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27109
|
+
}
|
|
27110
|
+
},
|
|
27111
|
+
{
|
|
27112
|
+
"kind": "method",
|
|
27113
|
+
"name": "refreshFeedback",
|
|
27114
|
+
"privacy": "protected",
|
|
27115
|
+
"return": {
|
|
27116
|
+
"type": {
|
|
27117
|
+
"text": "void"
|
|
27118
|
+
}
|
|
27119
|
+
},
|
|
27120
|
+
"description": "Re-reads the platform's verdict, for a control that has just reported one.\n\nValidity changes through `ElementInternals` rather than through a\nproperty, so nothing schedules an update for it. Worse, the order is\nagainst us: this mixin sits above the control in the prototype chain, so\nits `updated` runs before the control's own, which is where `setValidity`\nis called. Reading the verdict here would always read the previous one,\nwhich is what left a corrected field still showing the error it had\nbefore. So the control says when it has reported, and this schedules the\none further update that needs. It converges because the second pass finds\nnothing changed.",
|
|
27121
|
+
"inheritedFrom": {
|
|
27122
|
+
"name": "MixinField",
|
|
27123
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27124
|
+
}
|
|
27125
|
+
},
|
|
27126
|
+
{
|
|
27127
|
+
"kind": "method",
|
|
27128
|
+
"name": "reportRequired",
|
|
27129
|
+
"privacy": "protected",
|
|
27130
|
+
"return": {
|
|
27131
|
+
"type": {
|
|
27132
|
+
"text": "void"
|
|
27133
|
+
}
|
|
27134
|
+
},
|
|
27135
|
+
"parameters": [
|
|
27136
|
+
{
|
|
27137
|
+
"name": "empty",
|
|
27138
|
+
"type": {
|
|
27139
|
+
"text": "boolean"
|
|
27140
|
+
}
|
|
27141
|
+
},
|
|
27142
|
+
{
|
|
27143
|
+
"name": "message",
|
|
27144
|
+
"type": {
|
|
27145
|
+
"text": "string"
|
|
27146
|
+
}
|
|
27147
|
+
},
|
|
27148
|
+
{
|
|
27149
|
+
"name": "anchor",
|
|
27150
|
+
"type": {
|
|
27151
|
+
"text": "string"
|
|
27152
|
+
}
|
|
27153
|
+
}
|
|
27154
|
+
],
|
|
27155
|
+
"description": "Reports \"required and empty\" and refreshes the message, or clears both.\n\nTwo things differ between the controls that call this, so those are the\narguments: whether the control is empty, which only it can say, and the\nsentence to say about it, which is different for a box, a switch and a\nset. The anchor is looked up here because every one of them anchors on a\nrendered part and the browser needs somewhere to point the bubble.\n\nThe message is not derived from the control's kind, deliberately. \"Tick\nthis box\" and \"Choose one\" are not the same instruction and a lookup\ntable would be one more thing to keep in step with the components.",
|
|
27156
|
+
"inheritedFrom": {
|
|
27157
|
+
"name": "MixinField",
|
|
27158
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27159
|
+
}
|
|
27160
|
+
},
|
|
27161
|
+
{
|
|
27162
|
+
"kind": "field",
|
|
27163
|
+
"name": "formAssociated",
|
|
27164
|
+
"type": {
|
|
27165
|
+
"text": "boolean"
|
|
27166
|
+
},
|
|
27167
|
+
"static": true,
|
|
27168
|
+
"readonly": true,
|
|
27169
|
+
"default": "true",
|
|
27170
|
+
"description": "Opts the element into form ownership, labels, and submission.",
|
|
27171
|
+
"inheritedFrom": {
|
|
27172
|
+
"name": "HelixFormElement",
|
|
27173
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27174
|
+
}
|
|
27175
|
+
},
|
|
27176
|
+
{
|
|
27177
|
+
"kind": "field",
|
|
27178
|
+
"name": "disabled",
|
|
27179
|
+
"type": {
|
|
27180
|
+
"text": "boolean"
|
|
27181
|
+
},
|
|
27182
|
+
"default": "false",
|
|
27183
|
+
"description": "Whether the control is non-interactive.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
27184
|
+
"attribute": "disabled",
|
|
27185
|
+
"reflects": true,
|
|
27186
|
+
"inheritedFrom": {
|
|
27187
|
+
"name": "HelixFormElement",
|
|
27188
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27189
|
+
}
|
|
27190
|
+
},
|
|
27191
|
+
{
|
|
27192
|
+
"kind": "field",
|
|
27193
|
+
"name": "formDisabled",
|
|
27194
|
+
"type": {
|
|
27195
|
+
"text": "boolean"
|
|
27196
|
+
},
|
|
27197
|
+
"privacy": "protected",
|
|
27198
|
+
"default": "false",
|
|
27199
|
+
"description": "Whether an ancestor `<fieldset disabled>` has switched this control off.\n\nThe platform tells a form-associated element through `formDisabledCallback`\nand nothing else does, so without this a control inside a disabled fieldset\nstays fully typeable and announces itself as enabled.\n\nThe submission half is already the platform's: measured, the fieldset's\ncontrols are absent from the form's entry list and the host matches\n`:disabled`, so the value never goes anywhere. What is missing without this\nis everything a reader can see or touch.\n\nState rather than the `disabled` property. Writing that would reflect an\nattribute the consumer's server markup does not have, which React reports\non hydration and does not patch up, and it would also silently overwrite\nwhat the consumer set.",
|
|
27200
|
+
"inheritedFrom": {
|
|
27201
|
+
"name": "HelixFormElement",
|
|
27202
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27203
|
+
}
|
|
27204
|
+
},
|
|
27205
|
+
{
|
|
27206
|
+
"kind": "method",
|
|
27207
|
+
"name": "formDisabledCallback",
|
|
27208
|
+
"return": {
|
|
27209
|
+
"type": {
|
|
27210
|
+
"text": "void"
|
|
27211
|
+
}
|
|
27212
|
+
},
|
|
27213
|
+
"parameters": [
|
|
27214
|
+
{
|
|
27215
|
+
"name": "disabled",
|
|
27216
|
+
"type": {
|
|
27217
|
+
"text": "boolean"
|
|
27218
|
+
}
|
|
27219
|
+
}
|
|
27220
|
+
],
|
|
27221
|
+
"description": "The platform's notice that an ancestor fieldset changed.\n\n**The argument is the effective state, and taking it whole is what latched\nevery control in the library.** The platform calls this for the element's\nown `disabled` as well as for a fieldset, and our own arrives here at the\nworst possible moment: reflecting `disabled` to the attribute happens\ninside Lit's `update()`, the UA fires this synchronously from that write,\nand a reactive write during an update is a change-in-update Lit does not\nre-render for. So `formDisabled` ran exactly one update behind forever.\n\nMeasured on Slider, logging what `render` saw:\n\n```\nset true disabled true formDisabled false isDisabled true\nset false disabled false formDisabled true isDisabled true <- stale\n(no third render)\n```\n\nThe host came out right every time, `disabled` false, `:disabled` not\nmatching, and the inner control kept the attribute, so a control disabled\nonce could never be re-enabled. It only shows when something re-enables,\nwhich is the same shape of bug `inheritDisabled` was written for.\n\nOur own half is already in `this.disabled` and `isDisabled` is an or, so\nthis records only what the fieldset adds. That also removes the write\nentirely on the own-disabled path rather than moving it.\n\nThe one case this cannot see is a control that is disabled itself *and*\ninside a disabled fieldset, whose own `disabled` is then removed: the\neffective state does not change, so the platform does not call again, and\nthe fieldset's hold is not recorded. There is no callback to learn it from\nand reading `:disabled` here would answer about the attribute we are in the\nmiddle of removing.",
|
|
27222
|
+
"inheritedFrom": {
|
|
27223
|
+
"name": "HelixFormElement",
|
|
27224
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27225
|
+
},
|
|
27226
|
+
"type": {
|
|
27227
|
+
"text": "formDisabledCallback(disabled: boolean) => void"
|
|
27228
|
+
}
|
|
27229
|
+
},
|
|
27230
|
+
{
|
|
27231
|
+
"kind": "field",
|
|
27232
|
+
"name": "name",
|
|
27233
|
+
"type": {
|
|
27234
|
+
"text": "string"
|
|
27235
|
+
},
|
|
27236
|
+
"default": "''",
|
|
27237
|
+
"description": "Name submitted with the form.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
27238
|
+
"attribute": "name",
|
|
27239
|
+
"reflects": true,
|
|
27240
|
+
"inheritedFrom": {
|
|
27241
|
+
"name": "HelixFormElement",
|
|
27242
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27243
|
+
}
|
|
27244
|
+
},
|
|
27245
|
+
{
|
|
27246
|
+
"kind": "field",
|
|
27247
|
+
"name": "form",
|
|
27248
|
+
"type": {
|
|
27249
|
+
"text": "HTMLFormElement | null"
|
|
27250
|
+
},
|
|
27251
|
+
"description": "The form this control belongs to, if any.",
|
|
27252
|
+
"readonly": true,
|
|
27253
|
+
"helix": {
|
|
27254
|
+
"references": [
|
|
27255
|
+
{
|
|
27256
|
+
"label": "form-associated custom elements",
|
|
27257
|
+
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
27258
|
+
}
|
|
27259
|
+
]
|
|
27260
|
+
},
|
|
27261
|
+
"inheritedFrom": {
|
|
27262
|
+
"name": "HelixFormElement",
|
|
27263
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27264
|
+
}
|
|
27265
|
+
},
|
|
27266
|
+
{
|
|
27267
|
+
"kind": "field",
|
|
27268
|
+
"name": "labels",
|
|
27269
|
+
"type": {
|
|
27270
|
+
"text": "NodeList"
|
|
27271
|
+
},
|
|
27272
|
+
"description": "Labels associated with this control.",
|
|
27273
|
+
"readonly": true,
|
|
27274
|
+
"helix": {
|
|
27275
|
+
"references": [
|
|
27276
|
+
{
|
|
27277
|
+
"label": "form-associated custom elements",
|
|
27278
|
+
"url": "https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements"
|
|
27279
|
+
}
|
|
27280
|
+
]
|
|
27281
|
+
},
|
|
27282
|
+
"inheritedFrom": {
|
|
27283
|
+
"name": "HelixFormElement",
|
|
27284
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27285
|
+
}
|
|
27286
|
+
},
|
|
27287
|
+
{
|
|
27288
|
+
"kind": "field",
|
|
27289
|
+
"name": "tier",
|
|
27290
|
+
"type": {
|
|
27291
|
+
"text": "string"
|
|
27292
|
+
},
|
|
27293
|
+
"static": true,
|
|
27294
|
+
"default": "'helix-headless-'",
|
|
27295
|
+
"description": "The prefix this tier registers its elements under.\n\n**A component that renders another renders its own tier's version of it**,\nso `helix-headless-pagination-size` composes `helix-headless-select` and\n`helix-pagination-size` composes `helix-select`. One template says\n`${this.tag('select')}` and each tier answers with its own name.\n\n**The public tag may not be the composed one, in either tier.** Using it\ncosts three things: the name means two different things depending on what a\nconsumer imported, the headless tier composes an element it does not ship,\nand the composition cannot be tested there at all, because there is no\n`helix-select` on that tier to test it against.\n\n**A prefix rather than an override per composition**, which was the first\nplan and does not compile. An override re-renders the fragment from the\nsubclass, and the fragment reads members the base keeps private:\n`PaginationSize` alone would have had to widen `options`, `current` and\n`handleChange` to `protected` so a subclass could say the same thing again.\nSixteen families of that is a lot of encapsulation spent on saying one\nword differently.",
|
|
27296
|
+
"inheritedFrom": {
|
|
27297
|
+
"name": "HelixElement",
|
|
27298
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27299
|
+
}
|
|
27300
|
+
},
|
|
27301
|
+
{
|
|
27302
|
+
"kind": "method",
|
|
27303
|
+
"name": "tag",
|
|
27304
|
+
"privacy": "protected",
|
|
27305
|
+
"return": {
|
|
27306
|
+
"type": {
|
|
27307
|
+
"text": "StaticValue"
|
|
27308
|
+
}
|
|
27309
|
+
},
|
|
27310
|
+
"parameters": [
|
|
27311
|
+
{
|
|
27312
|
+
"name": "name",
|
|
27313
|
+
"type": {
|
|
27314
|
+
"text": "string"
|
|
27315
|
+
}
|
|
27316
|
+
}
|
|
27317
|
+
],
|
|
27318
|
+
"description": "One composed tag, as a static value a template can interpolate.\n\n`unsafeStatic` is safe by construction: the name is a literal in our own\nsource and the prefix is one of two strings this class defines. Called per\nrender and not cached, which costs nothing, because `static-html` keys its\ntemplate cache on the joined string rather than on the object.",
|
|
27319
|
+
"inheritedFrom": {
|
|
27320
|
+
"name": "HelixElement",
|
|
27321
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27322
|
+
}
|
|
27323
|
+
},
|
|
27324
|
+
{
|
|
27325
|
+
"kind": "field",
|
|
27326
|
+
"name": "internals",
|
|
27327
|
+
"type": {
|
|
27328
|
+
"text": "ElementInternals"
|
|
27329
|
+
},
|
|
27330
|
+
"privacy": "protected",
|
|
27331
|
+
"readonly": true,
|
|
27332
|
+
"description": "The element's semantics, set without touching the DOM.\n\n`ElementInternals` sets the implicit role, which an author's own `role`\nattribute still overrides, and it writes no attribute. Setting `role` on the\nhost directly would: that is an attribute the element gives itself after it\nupgrades, which a React consumer's server markup never had, and hydration\nreports it as a mismatch.\n\nAvailable during server rendering. Lit's shim implements `attachInternals`,\nso nothing here needs a guard.",
|
|
27333
|
+
"inheritedFrom": {
|
|
27334
|
+
"name": "HelixElement",
|
|
27335
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27336
|
+
}
|
|
27337
|
+
},
|
|
27338
|
+
{
|
|
27339
|
+
"kind": "method",
|
|
27340
|
+
"name": "toggleState",
|
|
27341
|
+
"privacy": "protected",
|
|
27342
|
+
"return": {
|
|
27343
|
+
"type": {
|
|
27344
|
+
"text": "void"
|
|
27345
|
+
}
|
|
27346
|
+
},
|
|
27347
|
+
"parameters": [
|
|
27348
|
+
{
|
|
27349
|
+
"name": "name",
|
|
27350
|
+
"type": {
|
|
27351
|
+
"text": "string"
|
|
27352
|
+
}
|
|
27353
|
+
},
|
|
27354
|
+
{
|
|
27355
|
+
"name": "on",
|
|
27356
|
+
"type": {
|
|
27357
|
+
"text": "boolean"
|
|
27358
|
+
}
|
|
27359
|
+
}
|
|
27360
|
+
],
|
|
27361
|
+
"description": "Records a boolean fact about this element as a custom state.\n\n**The host belongs to whoever rendered it, and a component's own\nbookkeeping may not be kept there.** An attribute written on the first\nupdate is markup a consumer's server never sent, so a React consumer\nhydrates a DOM that has gained attributes since and reports a mismatch it\nwill not patch up. A custom state is not in the DOM at all: it carries the\nfact to a stylesheet through `:state()` and leaves the markup alone, so the\nserver's output and the client's agree by construction.\n\n`SETTLED` carries the long version of that argument; `checked`, `open`,\n`invalid` and `has-label` are recorded the same way, each of them a state a\n`default-*` attribute resolves before React reaches the node.\n\n**Deferring the definitions is not a fix and could not be.** Importing them\nfrom an effect so the upgrades fall the other side of hydration works only\nwhile hydration is one pass: anything that splits it, a streamed segment or\na suspended boundary, puts an upgrade back inside the window. Timing cannot\nbe the guarantee when the fact is kept somewhere React reconciles.\n\nFeature-tested rather than assumed, the way `hostAria` tests element\nreferences. An engine without `CustomStateSet` records nothing and keeps\nwhatever the resting rule draws, which is the safe direction to fail.\n\n**The engines the test is for are browsers**: Safari below 17.4 and Firefox\nbelow 126, where the write is a `TypeError`, so a component bypassing this\nfails to render rather than rendering without whatever the state draws.\nLit's server shim sets `states`, so the guard passes there and records a\nstate nothing reads, which is harmless.",
|
|
27362
|
+
"inheritedFrom": {
|
|
27363
|
+
"name": "HelixElement",
|
|
27364
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27365
|
+
}
|
|
27366
|
+
},
|
|
27367
|
+
{
|
|
27368
|
+
"kind": "field",
|
|
27369
|
+
"name": "whenSettled",
|
|
27370
|
+
"type": {
|
|
27371
|
+
"text": "Promise<void>"
|
|
27372
|
+
},
|
|
27373
|
+
"readonly": true,
|
|
27374
|
+
"description": "Resolves a frame after the first update, when transitions are switched on.\n\n**Named `whenSettled` because `settled` is taken four times over**, by\nImage, Splitter and both color controls, none of them about transitions. A\nbase class takes the name every subclass then cannot use.\n\n**The state it reports cannot be watched, which is why this exists.** A\ncustom state is deliberately not in the DOM, so there is no\n`MutationObserver` equivalent for `ElementInternals.states`. Await this\ninstead.\n\nSeparate from `updateComplete`, which resolves in the microtask checkpoint\nthe suppression is still active in. That is the distinction `readyToMove`\nin `@fusion.dev/helix-testing` is written around.\n\nIt never resolves where `requestAnimationFrame` never fires, which is a\nserver, a hidden tab, and happy-dom. Callers that must not hang race it\nagainst a timeout; `readyToMove` does exactly that.",
|
|
27375
|
+
"default": "new Promise<void>((resolve) => { this.resolveSettled = resolve })",
|
|
27376
|
+
"inheritedFrom": {
|
|
27377
|
+
"name": "HelixElement",
|
|
27378
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27379
|
+
}
|
|
27380
|
+
},
|
|
27381
|
+
{
|
|
27382
|
+
"kind": "field",
|
|
27383
|
+
"name": "resolveSettled",
|
|
27384
|
+
"type": {
|
|
27385
|
+
"text": "() => void"
|
|
27386
|
+
},
|
|
27387
|
+
"privacy": "private",
|
|
27388
|
+
"description": "Resolves `whenSettled`, once, from the frame that records the state.",
|
|
27389
|
+
"inheritedFrom": {
|
|
27390
|
+
"name": "HelixElement",
|
|
27391
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27392
|
+
}
|
|
27393
|
+
},
|
|
27394
|
+
{
|
|
27395
|
+
"kind": "field",
|
|
27396
|
+
"name": "stopInner",
|
|
27397
|
+
"privacy": "protected",
|
|
27398
|
+
"readonly": true,
|
|
27399
|
+
"description": "Stops an inner control's own announcement at this element's boundary.\n\n**A composed control is one control to a consumer, and the natives had no\nequivalent of the stop the prefixed events already get.** `<helix-select>`\nrenders a `<helix-listbox>`, and both announce: the listbox dispatches\n`input` and `change` from its own host, `input` is composed by\nspecification, and a consumer listening on the select therefore heard one\nchoice twice. Measured before this existed, on the styled tier, one choice\non the inner listbox: select `input` twice and `change` three times,\ncombobox, date input, time input and color input twice each. `Command` was\nthe only one that was right, because it happened to reach for\n`stopImmediatePropagation` for a different reason.\n\nBound on the child in the parent's template, so it runs while the event is\nstill at the child and before it can cross. The guard is for the case where\na component binds this on itself: an element must never stop its own\nannouncement, which is the one it exists to make.\n\nThis is the same job the `helix-before-*` handlers do with their own\n`stopPropagation`, and it is separate rather than folded into them because\na consumer may legitimately refuse a request without the notification ever\nhappening: the two travel at different times and one can be absent.",
|
|
27400
|
+
"inheritedFrom": {
|
|
27401
|
+
"name": "HelixElement",
|
|
27402
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27403
|
+
}
|
|
27404
|
+
},
|
|
27405
|
+
{
|
|
27406
|
+
"kind": "method",
|
|
27407
|
+
"name": "relayNativeEvent",
|
|
27408
|
+
"privacy": "protected",
|
|
27409
|
+
"return": {
|
|
27410
|
+
"type": {
|
|
27411
|
+
"text": "void"
|
|
27412
|
+
}
|
|
27413
|
+
},
|
|
27414
|
+
"parameters": [
|
|
27415
|
+
{
|
|
27416
|
+
"name": "event",
|
|
27417
|
+
"type": {
|
|
27418
|
+
"text": "Event"
|
|
27419
|
+
}
|
|
27420
|
+
},
|
|
27421
|
+
{
|
|
27422
|
+
"name": "init",
|
|
27423
|
+
"optional": true,
|
|
27424
|
+
"type": {
|
|
27425
|
+
"text": "EventInit"
|
|
27426
|
+
}
|
|
27427
|
+
}
|
|
27428
|
+
],
|
|
27429
|
+
"description": "Re-emits a native event from the host, under its own name.\n\nA native event fired by an inner `<input>` or `<textarea>` is not composed,\nso it stops at the shadow boundary and a consumer listening on\n`<helix-input>` hears nothing. Re-dispatching it from the host is what\nmakes the component behave like the control it wraps.\n\nThe relayed event keeps the native name deliberately. `change` is `change`,\nwhich is what a consumer already knows to listen for, and it is what\nreaches React: its synthetic system claims `onChange` and wires it to that\nname, so a prefixed one would never arrive.\n\n`composed` is not forced. It defaults to the original event's own value, so\na relayed `change` stops at the next shadow boundary exactly as a native\none would. Pass it explicitly only where escaping is the intent, and say so\nwhere you do.",
|
|
27430
|
+
"inheritedFrom": {
|
|
27431
|
+
"name": "HelixElement",
|
|
27432
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27433
|
+
}
|
|
27434
|
+
},
|
|
27435
|
+
{
|
|
27436
|
+
"kind": "method",
|
|
27437
|
+
"name": "finalizeStyles",
|
|
27438
|
+
"privacy": "protected",
|
|
27439
|
+
"static": true,
|
|
27440
|
+
"return": {
|
|
27441
|
+
"type": {
|
|
27442
|
+
"text": "CSSResultOrNative[]"
|
|
27443
|
+
}
|
|
27444
|
+
},
|
|
27445
|
+
"parameters": [
|
|
27446
|
+
{
|
|
27447
|
+
"name": "styles",
|
|
27448
|
+
"optional": true,
|
|
27449
|
+
"type": {
|
|
27450
|
+
"text": "CSSResultOrNative | CSSResultOrNative[]"
|
|
27451
|
+
}
|
|
27452
|
+
}
|
|
27453
|
+
],
|
|
27454
|
+
"description": "Prepends the shadow-root reset to every subclass's styles, so no component\nhas to remember to include it.",
|
|
27455
|
+
"inheritedFrom": {
|
|
27456
|
+
"name": "HelixElement",
|
|
27457
|
+
"module": "src/helix-element/helix-element.ts"
|
|
27458
|
+
}
|
|
27459
|
+
}
|
|
27460
|
+
],
|
|
27461
|
+
"events": [
|
|
27462
|
+
{
|
|
27463
|
+
"name": "change",
|
|
27464
|
+
"type": {
|
|
27465
|
+
"text": "Event"
|
|
27466
|
+
},
|
|
27467
|
+
"description": "Relayed from the input once the reader has finished.",
|
|
27468
|
+
"inheritedFrom": {
|
|
27469
|
+
"name": "MixinControllerValue",
|
|
27470
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
27471
|
+
},
|
|
27472
|
+
"reactProp": "onchange"
|
|
27473
|
+
},
|
|
27474
|
+
{
|
|
27475
|
+
"type": {
|
|
27476
|
+
"text": "HelixBeforeChangeEvent"
|
|
27477
|
+
},
|
|
27478
|
+
"description": "Fired as the text changes, and cancelable.",
|
|
27479
|
+
"name": "helix-before-change",
|
|
27480
|
+
"reactProp": "onhelix-before-change"
|
|
27481
|
+
},
|
|
27482
|
+
{
|
|
27483
|
+
"name": "input",
|
|
27484
|
+
"type": {
|
|
27485
|
+
"text": "Event"
|
|
27486
|
+
},
|
|
27487
|
+
"description": "Announced once the text has moved.",
|
|
27488
|
+
"inheritedFrom": {
|
|
27489
|
+
"name": "MixinControllerValue",
|
|
27490
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
27491
|
+
},
|
|
27492
|
+
"reactProp": "oninput"
|
|
27493
|
+
}
|
|
27494
|
+
],
|
|
27495
|
+
"attributes": [
|
|
27496
|
+
{
|
|
27497
|
+
"name": "clearable",
|
|
27498
|
+
"type": {
|
|
27499
|
+
"text": "boolean"
|
|
27500
|
+
},
|
|
27501
|
+
"default": "false",
|
|
27502
|
+
"description": "Whether the field offers a button that empties it.\n\nThe text only. The tokens are the consumer's markup and this element is not\nentitled to take them out of the document, which is the same reason\n`hideOverflow` marks the ones over the cap `hidden` rather than removing\nthem.",
|
|
27503
|
+
"fieldName": "clearable"
|
|
27504
|
+
},
|
|
27505
|
+
{
|
|
27506
|
+
"name": "clear-label",
|
|
27507
|
+
"type": {
|
|
27508
|
+
"text": "string"
|
|
27509
|
+
},
|
|
27510
|
+
"default": "'Clear'",
|
|
27511
|
+
"description": "What the clear button is called, since an icon has no name of its own.",
|
|
27512
|
+
"fieldName": "clearLabel"
|
|
27513
|
+
},
|
|
27514
|
+
{
|
|
27515
|
+
"name": "placeholder",
|
|
27516
|
+
"type": {
|
|
27517
|
+
"text": "string"
|
|
27518
|
+
},
|
|
27519
|
+
"default": "''",
|
|
27520
|
+
"description": "Shown while the field is empty.\n\nNot a label: it goes when typing starts.",
|
|
27521
|
+
"fieldName": "placeholder"
|
|
27522
|
+
},
|
|
27523
|
+
{
|
|
27524
|
+
"name": "max-tags",
|
|
27525
|
+
"type": {
|
|
27526
|
+
"text": "number"
|
|
27527
|
+
},
|
|
27528
|
+
"default": "0",
|
|
27529
|
+
"description": "How many tokens to show before the rest become a count.",
|
|
27530
|
+
"fieldName": "maxTags",
|
|
27531
|
+
"inheritedFrom": {
|
|
27532
|
+
"name": "MixinTokens",
|
|
27533
|
+
"module": "src/mixins/mixin-tokens/mixin-tokens.ts"
|
|
27534
|
+
}
|
|
27535
|
+
},
|
|
27536
|
+
{
|
|
27537
|
+
"name": "default-value",
|
|
27538
|
+
"type": {
|
|
27539
|
+
"text": "string"
|
|
27540
|
+
},
|
|
27541
|
+
"default": "''",
|
|
27542
|
+
"description": "The value the markup declared, which is where a reset returns to.",
|
|
27543
|
+
"fieldName": "defaultValue",
|
|
27544
|
+
"inheritedFrom": {
|
|
27545
|
+
"name": "MixinControllerValue",
|
|
27546
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
27547
|
+
}
|
|
27548
|
+
},
|
|
27549
|
+
{
|
|
27550
|
+
"name": "value",
|
|
27551
|
+
"type": {
|
|
27552
|
+
"text": "string"
|
|
27553
|
+
},
|
|
27554
|
+
"description": "What the control holds now, and what its form submits.\n\nOne property, not two, so `input.value` answers the question anyone\nasking it meant. Writing always applies; `<helix-input value=\"x\">` is the\nsame statement in markup, and `default-value` is how markup seeds a value\na reset should return to.",
|
|
27555
|
+
"fieldName": "value",
|
|
27556
|
+
"inheritedFrom": {
|
|
27557
|
+
"name": "MixinControllerValue",
|
|
27558
|
+
"module": "src/mixins/mixin-controller-value/mixin-controller-value.ts"
|
|
27559
|
+
}
|
|
27560
|
+
},
|
|
27561
|
+
{
|
|
27562
|
+
"name": "feedback",
|
|
27563
|
+
"type": {
|
|
27564
|
+
"text": "string"
|
|
27565
|
+
},
|
|
27566
|
+
"default": "''",
|
|
27567
|
+
"description": "What is wrong, in the reader's words rather than the browser's.",
|
|
27568
|
+
"fieldName": "feedback",
|
|
27569
|
+
"inheritedFrom": {
|
|
27570
|
+
"name": "MixinField",
|
|
27571
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27572
|
+
}
|
|
27573
|
+
},
|
|
27574
|
+
{
|
|
27575
|
+
"name": "hint",
|
|
27576
|
+
"type": {
|
|
27577
|
+
"text": "string"
|
|
27578
|
+
},
|
|
27579
|
+
"default": "''",
|
|
27580
|
+
"description": "Help under the control, shown while there is nothing wrong.",
|
|
27581
|
+
"fieldName": "hint",
|
|
27582
|
+
"inheritedFrom": {
|
|
27583
|
+
"name": "MixinField",
|
|
27584
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27585
|
+
}
|
|
27586
|
+
},
|
|
27587
|
+
{
|
|
27588
|
+
"name": "label",
|
|
27589
|
+
"type": {
|
|
27590
|
+
"text": "string"
|
|
27591
|
+
},
|
|
27592
|
+
"default": "''",
|
|
27593
|
+
"description": "The accessible name, and the fallback for the `label` slot.",
|
|
27594
|
+
"fieldName": "label",
|
|
27595
|
+
"inheritedFrom": {
|
|
27596
|
+
"name": "MixinField",
|
|
27597
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27598
|
+
}
|
|
27599
|
+
},
|
|
27600
|
+
{
|
|
27601
|
+
"name": "required",
|
|
27602
|
+
"type": {
|
|
27603
|
+
"text": "boolean"
|
|
27604
|
+
},
|
|
27605
|
+
"default": "false",
|
|
27606
|
+
"description": "Whether the form refuses to submit without it.",
|
|
27607
|
+
"fieldName": "required",
|
|
27608
|
+
"inheritedFrom": {
|
|
27609
|
+
"name": "MixinField",
|
|
27610
|
+
"module": "src/mixins/mixin-field/mixin-field.ts"
|
|
27611
|
+
}
|
|
27612
|
+
},
|
|
27613
|
+
{
|
|
27614
|
+
"name": "disabled",
|
|
27615
|
+
"type": {
|
|
27616
|
+
"text": "boolean"
|
|
27617
|
+
},
|
|
27618
|
+
"default": "false",
|
|
27619
|
+
"description": "Whether the control is non-interactive.\n\nReflected, because the styled tier selects on it, and mirrored to\n`aria-disabled` rather than removing the element from the accessibility\ntree, so a screen reader can still announce that the control exists.\n\nThe mirror itself is in `willUpdate` below, here rather than in each\ncontrol, because here is where `disabled` is.",
|
|
27620
|
+
"fieldName": "disabled",
|
|
27621
|
+
"inheritedFrom": {
|
|
27622
|
+
"name": "HelixFormElement",
|
|
27623
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27624
|
+
}
|
|
27625
|
+
},
|
|
27626
|
+
{
|
|
27627
|
+
"name": "name",
|
|
27628
|
+
"type": {
|
|
27629
|
+
"text": "string"
|
|
27630
|
+
},
|
|
27631
|
+
"default": "''",
|
|
27632
|
+
"description": "Name submitted with the form.\n\n**Reflected, and it is the exception to \"reflect only what CSS selects\non\".** The platform builds a form's entry list from the `name` *content\nattribute*, not from the property, so a control named through the property\nsubmitted under no name at all and was silently dropped. Measured: two\ninputs in one form, one named by attribute and one by property, and the\nform carried a single entry.\n\nSafe for a React consumer, which is what the rule is protecting: React\nrenders a custom element's props as attributes on the server, so the name\nis already in the markup being hydrated and reflecting it writes what is\nthere. It is only a change to the markup when a consumer assigns it\nimperatively later, and nothing is hydrating by then.\n\nHere rather than on each control.",
|
|
27633
|
+
"fieldName": "name",
|
|
27634
|
+
"inheritedFrom": {
|
|
27635
|
+
"name": "HelixFormElement",
|
|
27636
|
+
"module": "src/helix-form-element/helix-form-element.ts"
|
|
27637
|
+
}
|
|
27638
|
+
}
|
|
27639
|
+
],
|
|
27640
|
+
"mixins": [
|
|
27641
|
+
{
|
|
27642
|
+
"name": "MixinTokens",
|
|
27643
|
+
"package": "@fusion.dev/helix-core"
|
|
27644
|
+
},
|
|
27645
|
+
{
|
|
27646
|
+
"name": "MixinControllerValue",
|
|
27647
|
+
"package": "@fusion.dev/helix-core"
|
|
27648
|
+
},
|
|
27649
|
+
{
|
|
27650
|
+
"name": "MixinField",
|
|
27651
|
+
"package": "@fusion.dev/helix-core"
|
|
27652
|
+
}
|
|
27653
|
+
],
|
|
27654
|
+
"superclass": {
|
|
27655
|
+
"name": "HelixFormElement",
|
|
27656
|
+
"package": "@fusion.dev/helix-core"
|
|
27657
|
+
},
|
|
27658
|
+
"summary": "A field that narrows something else, beside what is already narrowing it.",
|
|
27659
|
+
"helix": {
|
|
27660
|
+
"category": "forms",
|
|
27661
|
+
"since": "0.1.0",
|
|
27662
|
+
"status": "experimental",
|
|
27663
|
+
"documentation": "https://helix.fusion.dev/components/filter-input",
|
|
27664
|
+
"aliases": [
|
|
27665
|
+
"SearchField",
|
|
27666
|
+
"FacetInput",
|
|
27667
|
+
"TokenInput"
|
|
27668
|
+
],
|
|
27669
|
+
"tier": "headless",
|
|
27670
|
+
"group": "BaseFilterInput",
|
|
27671
|
+
"part": "Root",
|
|
27672
|
+
"examples": [
|
|
27673
|
+
{
|
|
27674
|
+
"description": "The same filter field on the headless tier, with every rule written by hand.",
|
|
27675
|
+
"slug": "preview"
|
|
27676
|
+
}
|
|
27677
|
+
],
|
|
27678
|
+
"source": "helix/headless/src/filter-input"
|
|
27679
|
+
},
|
|
27680
|
+
"tagName": "helix-headless-filter-input",
|
|
27681
|
+
"customElement": true,
|
|
27682
|
+
"modulePath": "src/filter-input/root/filter-input-root.ts",
|
|
27683
|
+
"definitionPath": "src/filter-input/root/filter-input-root.ts"
|
|
27684
|
+
}
|
|
27685
|
+
],
|
|
27686
|
+
"exports": [
|
|
27687
|
+
{
|
|
27688
|
+
"kind": "js",
|
|
27689
|
+
"name": "HelixHeadlessFilterInput",
|
|
27690
|
+
"declaration": {
|
|
27691
|
+
"name": "HelixHeadlessFilterInput",
|
|
27692
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
27693
|
+
}
|
|
27694
|
+
},
|
|
27695
|
+
{
|
|
27696
|
+
"kind": "custom-element-definition",
|
|
27697
|
+
"name": "helix-headless-filter-input",
|
|
27698
|
+
"declaration": {
|
|
27699
|
+
"name": "HelixHeadlessFilterInput",
|
|
27700
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
27701
|
+
}
|
|
27702
|
+
}
|
|
27703
|
+
]
|
|
27704
|
+
},
|
|
26470
27705
|
{
|
|
26471
27706
|
"kind": "javascript-module",
|
|
26472
27707
|
"path": "src/format-date/index.ts",
|
|
@@ -30080,6 +31315,14 @@
|
|
|
30080
31315
|
"module": "src/file-input/index.js"
|
|
30081
31316
|
}
|
|
30082
31317
|
},
|
|
31318
|
+
{
|
|
31319
|
+
"kind": "js",
|
|
31320
|
+
"name": "*",
|
|
31321
|
+
"declaration": {
|
|
31322
|
+
"name": "*",
|
|
31323
|
+
"module": "src/filter-input/index.js"
|
|
31324
|
+
}
|
|
31325
|
+
},
|
|
30083
31326
|
{
|
|
30084
31327
|
"kind": "js",
|
|
30085
31328
|
"name": "*",
|