@fusion.dev/helix 0.14.0 → 0.15.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 +450 -1
- package/dist/element-events.generated.js +8 -1
- package/dist/filter-input/root/filter-input-root.css.js +64 -0
- package/dist/filter-input/root/filter-input-root.d.ts +13 -0
- package/dist/filter-input/root/filter-input-root.js +1 -0
- package/package.json +6 -6
- package/types/jsx.d.ts +172 -0
- package/types/vue.d.ts +38 -1
package/custom-elements.json
CHANGED
|
@@ -34556,23 +34556,145 @@
|
|
|
34556
34556
|
"declarations": [
|
|
34557
34557
|
{
|
|
34558
34558
|
"kind": "class",
|
|
34559
|
-
"description": "The frame is the field rather than the input, so the tokens sit inside the\nsame box as the text and the focus ring is drawn once around the whole\ncontrol. It grows down a line at a time as tokens are added, which is the\narrangement Combobox takes when it is holding a selection.\n\n**The tokens are the consumer's own elements**, so the only thing said about\nthem here is to keep their size and not run past the field. A `Tag` slotted\ninto `tags` already looks like one; anything else looks like whatever it is.\n\nHeight comes from the region, like every other control: `data-density` on\nwhatever holds it, not a `size` here.",
|
|
34559
|
+
"description": "The frame is the field rather than the input, so the tokens sit inside the\nsame box as the text and the focus ring is drawn once around the whole\ncontrol. It grows down a line at a time as tokens are added, which is the\narrangement Combobox takes when it is holding a selection.\n\n**The tokens are the consumer's own elements**, so the only thing said about\nthem here is to keep their size and not run past the field. A `Tag` slotted\ninto `tags` already looks like one; anything else looks like whatever it is.\n\n**The suggestion panel is this element's own box, not a listbox's.** Combobox\nputs a `helix-listbox` in its panel because the options there are a selection\nit owns; these are the consumer's suggestions, so the panel is a plain\n`role=\"listbox\"` region and the options pass their own `helix-select`\nstraight through it. That is why this surface scrolls where Combobox's does\nnot: there is no list inside to do it.\n\nHeight comes from the region, like every other control: `data-density` on\nwhatever holds it, not a `size` here.",
|
|
34560
34560
|
"name": "HelixFilterInput",
|
|
34561
34561
|
"cssProperties": [
|
|
34562
34562
|
{
|
|
34563
34563
|
"description": "Fill behind the field.",
|
|
34564
34564
|
"name": "--filter-input-background-color"
|
|
34565
34565
|
},
|
|
34566
|
+
{
|
|
34567
|
+
"description": "Color of the suggestion panel's edge.",
|
|
34568
|
+
"name": "--filter-input-border-color"
|
|
34569
|
+
},
|
|
34570
|
+
{
|
|
34571
|
+
"description": "Width of that edge. Follows `--helix-border-floating`.",
|
|
34572
|
+
"name": "--filter-input-border-width"
|
|
34573
|
+
},
|
|
34566
34574
|
{
|
|
34567
34575
|
"description": "Smallest the text keeps as tokens fill the line, before it wraps to its own.",
|
|
34568
34576
|
"name": "--filter-input-control-size"
|
|
34569
34577
|
},
|
|
34578
|
+
{
|
|
34579
|
+
"description": "Width of the suggestion panel. Follows the field by default.",
|
|
34580
|
+
"name": "--filter-input-panel-size"
|
|
34581
|
+
},
|
|
34582
|
+
{
|
|
34583
|
+
"description": "Lift under the panel. Follows `--helix-shadow-floating`: a floating surface sits over content nobody can predict, so it keeps a lift by default.",
|
|
34584
|
+
"name": "--filter-input-shadow"
|
|
34585
|
+
},
|
|
34570
34586
|
{
|
|
34571
34587
|
"description": "Height of the field with nothing in it, which it grows from.",
|
|
34572
34588
|
"name": "--filter-input-size"
|
|
34573
34589
|
}
|
|
34574
34590
|
],
|
|
34575
34591
|
"members": [
|
|
34592
|
+
{
|
|
34593
|
+
"kind": "field",
|
|
34594
|
+
"name": "open",
|
|
34595
|
+
"type": {
|
|
34596
|
+
"text": "boolean"
|
|
34597
|
+
},
|
|
34598
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
34599
|
+
"attribute": "open",
|
|
34600
|
+
"inheritedFrom": {
|
|
34601
|
+
"name": "MixinControllerOpen",
|
|
34602
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34603
|
+
}
|
|
34604
|
+
},
|
|
34605
|
+
{
|
|
34606
|
+
"kind": "field",
|
|
34607
|
+
"name": "defaultOpen",
|
|
34608
|
+
"type": {
|
|
34609
|
+
"text": "boolean"
|
|
34610
|
+
},
|
|
34611
|
+
"default": "false",
|
|
34612
|
+
"description": "Initial open state for uncontrolled use, where nothing declared one.",
|
|
34613
|
+
"attribute": "default-open",
|
|
34614
|
+
"inheritedFrom": {
|
|
34615
|
+
"name": "MixinControllerOpen",
|
|
34616
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34617
|
+
}
|
|
34618
|
+
},
|
|
34619
|
+
{
|
|
34620
|
+
"kind": "field",
|
|
34621
|
+
"name": "openState",
|
|
34622
|
+
"type": {
|
|
34623
|
+
"text": "boolean | undefined"
|
|
34624
|
+
},
|
|
34625
|
+
"privacy": "private",
|
|
34626
|
+
"default": "undefined",
|
|
34627
|
+
"description": "The state, whoever set it, and `undefined` until somebody has.\n\nPrefixed, and it has to be. These mixins compose onto one prototype\nchain, `Select` takes this one and `MixinControllerValue` together, and\nTypeScript's `private` is a compile-time fiction: two mixins with a field\ncalled `state` share one property on the instance, and the second one\nsilently overwrites the first. Measured, as a select whose `value` came\nback holding its `open` boolean.\n\nOne field and not two. Writing always applies, the way a native control\ndoes when a script assigns to it.",
|
|
34628
|
+
"inheritedFrom": {
|
|
34629
|
+
"name": "MixinControllerOpen",
|
|
34630
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34631
|
+
}
|
|
34632
|
+
},
|
|
34633
|
+
{
|
|
34634
|
+
"kind": "method",
|
|
34635
|
+
"name": "requestOpen",
|
|
34636
|
+
"return": {
|
|
34637
|
+
"type": {
|
|
34638
|
+
"text": "boolean"
|
|
34639
|
+
}
|
|
34640
|
+
},
|
|
34641
|
+
"parameters": [
|
|
34642
|
+
{
|
|
34643
|
+
"name": "next",
|
|
34644
|
+
"type": {
|
|
34645
|
+
"text": "boolean"
|
|
34646
|
+
}
|
|
34647
|
+
}
|
|
34648
|
+
],
|
|
34649
|
+
"description": "Requests an open-state change, and reports whether it was applied.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-open` or\n`helix-before-close` is a refusal and nothing moves. Nobody refusing means the\nelement opens or closes itself, whether or not a consumer declared\n`open`: a declared property is a seed and a correction, and a consumer\nwho wants the decision for themselves refuses it and assigns their own.",
|
|
34650
|
+
"inheritedFrom": {
|
|
34651
|
+
"name": "MixinControllerOpen",
|
|
34652
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34653
|
+
},
|
|
34654
|
+
"type": {
|
|
34655
|
+
"text": "requestOpen(next: boolean) => boolean"
|
|
34656
|
+
}
|
|
34657
|
+
},
|
|
34658
|
+
{
|
|
34659
|
+
"kind": "method",
|
|
34660
|
+
"name": "announceToggle",
|
|
34661
|
+
"privacy": "private",
|
|
34662
|
+
"return": {
|
|
34663
|
+
"type": {
|
|
34664
|
+
"text": "void"
|
|
34665
|
+
}
|
|
34666
|
+
},
|
|
34667
|
+
"parameters": [
|
|
34668
|
+
{
|
|
34669
|
+
"name": "open",
|
|
34670
|
+
"type": {
|
|
34671
|
+
"text": "boolean"
|
|
34672
|
+
}
|
|
34673
|
+
}
|
|
34674
|
+
],
|
|
34675
|
+
"description": "Says the state moved, under the platform's own name and in its shape.\n\n**A native `toggle` from inside a shadow root reaches nobody**, because\nit neither bubbles nor composes, so the ten families showing a\n`popover=\"manual\"` panel and the two rendering a real `<dialog>` announce\nnothing to a consumer. The disclosures have no native element to fire\nanything at all: `AccordionItem` and `TreeItem` are `aria-expanded` and\n`hidden` written by hand, which is `<details>`'s job done manually.\n\n**From here rather than from `PopoverController`.** The controller covers\neleven families and the mixin covers sixteen, so announcing from both\nwould announce twice on the ten they share. What `toggle` reports is the\n*state*, and the state is this mixin's; the controller is a way of\nputting a panel on the screen.\n\n**`newState` and `oldState`, because that is the platform's shape**, so a\nconsumer arriving from `<details>` reads the same two words. Not\ncancelable: the before events are the request, and a second cancelable\nevent for one transition is two answers to one question.",
|
|
34676
|
+
"inheritedFrom": {
|
|
34677
|
+
"name": "MixinControllerOpen",
|
|
34678
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34679
|
+
}
|
|
34680
|
+
},
|
|
34681
|
+
{
|
|
34682
|
+
"kind": "method",
|
|
34683
|
+
"name": "toggleOpen",
|
|
34684
|
+
"return": {
|
|
34685
|
+
"type": {
|
|
34686
|
+
"text": "boolean"
|
|
34687
|
+
}
|
|
34688
|
+
},
|
|
34689
|
+
"description": "Requests the opposite of the current state.",
|
|
34690
|
+
"inheritedFrom": {
|
|
34691
|
+
"name": "MixinControllerOpen",
|
|
34692
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
34693
|
+
},
|
|
34694
|
+
"type": {
|
|
34695
|
+
"text": "toggleOpen() => boolean"
|
|
34696
|
+
}
|
|
34697
|
+
},
|
|
34576
34698
|
{
|
|
34577
34699
|
"kind": "field",
|
|
34578
34700
|
"name": "collapseLabel",
|
|
@@ -35212,6 +35334,59 @@
|
|
|
35212
35334
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35213
35335
|
}
|
|
35214
35336
|
},
|
|
35337
|
+
{
|
|
35338
|
+
"kind": "field",
|
|
35339
|
+
"name": "activeAt",
|
|
35340
|
+
"type": {
|
|
35341
|
+
"text": "number"
|
|
35342
|
+
},
|
|
35343
|
+
"privacy": "private",
|
|
35344
|
+
"default": "-1",
|
|
35345
|
+
"description": "Which suggestion the keyboard is on, or `-1` for none.\n\nAn index rather than a value, unlike Listbox's: these are the consumer's\nown list and two of them may legitimately carry the same value, a `label`\nand an `assignee` both called `ada`. Position is what a reader is moving\nthrough and it is what stays right when they do.",
|
|
35346
|
+
"inheritedFrom": {
|
|
35347
|
+
"name": "HelixHeadlessFilterInput",
|
|
35348
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35349
|
+
}
|
|
35350
|
+
},
|
|
35351
|
+
{
|
|
35352
|
+
"kind": "field",
|
|
35353
|
+
"name": "suggesting",
|
|
35354
|
+
"type": {
|
|
35355
|
+
"text": "boolean"
|
|
35356
|
+
},
|
|
35357
|
+
"privacy": "private",
|
|
35358
|
+
"default": "false",
|
|
35359
|
+
"description": "Whether anything is offering itself to be suggested.\n\n**The ARIA follows this rather than being declared once.** A text field\ncarrying `role=\"combobox\"` promises a popup; a filter field that no consumer\never gives options to has none, and saying otherwise sends a screen reader\nlooking for a list that does not exist. So the role, `aria-expanded` and\n`aria-controls` all arrive with the first option and leave with the last.",
|
|
35360
|
+
"inheritedFrom": {
|
|
35361
|
+
"name": "HelixHeadlessFilterInput",
|
|
35362
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35363
|
+
}
|
|
35364
|
+
},
|
|
35365
|
+
{
|
|
35366
|
+
"kind": "field",
|
|
35367
|
+
"name": "dismissed",
|
|
35368
|
+
"type": {
|
|
35369
|
+
"text": "boolean"
|
|
35370
|
+
},
|
|
35371
|
+
"privacy": "private",
|
|
35372
|
+
"default": "false",
|
|
35373
|
+
"description": "Whether Escape has closed the panel over text that still has suggestions.\n\nWithout it the panel is open whenever there is something to show, so Escape\nwould close it and the next render would put it straight back. Cleared by\nthe next keystroke, because that is the reader saying something new.",
|
|
35374
|
+
"inheritedFrom": {
|
|
35375
|
+
"name": "HelixHeadlessFilterInput",
|
|
35376
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35377
|
+
}
|
|
35378
|
+
},
|
|
35379
|
+
{
|
|
35380
|
+
"kind": "field",
|
|
35381
|
+
"name": "panel",
|
|
35382
|
+
"privacy": "protected",
|
|
35383
|
+
"readonly": true,
|
|
35384
|
+
"default": "new PopoverController(this, { anchor: () => this.renderRoot?.querySelector<HTMLElement>('[part=\"field\"]'), boundary: (): readonly (Element | null | undefined)[] => [ this.renderRoot?.querySelector<HTMLElement>('[part=\"surface\"]'), this.renderRoot?.querySelector<HTMLElement>('[part=\"field\"]'), ], offset: () => 4, onDismiss: () => this.requestOpen(false), placement: 'bottom-start', surface: () => this.renderRoot?.querySelector<HTMLElement>('[part=\"surface\"]'), })",
|
|
35385
|
+
"inheritedFrom": {
|
|
35386
|
+
"name": "HelixHeadlessFilterInput",
|
|
35387
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35388
|
+
}
|
|
35389
|
+
},
|
|
35215
35390
|
{
|
|
35216
35391
|
"kind": "field",
|
|
35217
35392
|
"name": "releaseCaret",
|
|
@@ -35279,6 +35454,97 @@
|
|
|
35279
35454
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35280
35455
|
}
|
|
35281
35456
|
},
|
|
35457
|
+
{
|
|
35458
|
+
"kind": "field",
|
|
35459
|
+
"name": "suggestions",
|
|
35460
|
+
"type": {
|
|
35461
|
+
"text": "SuggestionOption[]"
|
|
35462
|
+
},
|
|
35463
|
+
"privacy": "private",
|
|
35464
|
+
"description": "The suggestions, in the order a reader moves through them.\n\n**Groups are opened out rather than walked into.** A slot assigns the group\nelement, not the options inside it, so a panel that read only what was\nassigned would offer nothing at all the moment a consumer reached for\n`option-group` to say what a run of values belongs to.\n\nA disabled option keeps its place on screen and is skipped here, which is\nthe difference between a list that explains why something cannot be chosen\nand one that pretends it was never there.",
|
|
35465
|
+
"readonly": true,
|
|
35466
|
+
"inheritedFrom": {
|
|
35467
|
+
"name": "HelixHeadlessFilterInput",
|
|
35468
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35469
|
+
}
|
|
35470
|
+
},
|
|
35471
|
+
{
|
|
35472
|
+
"kind": "field",
|
|
35473
|
+
"name": "selectionDirection",
|
|
35474
|
+
"type": {
|
|
35475
|
+
"text": "'backward' | 'forward' | 'none'"
|
|
35476
|
+
},
|
|
35477
|
+
"description": "The caret and the selection, under the platform's own names.\n\n**Published for the reason `Input` publishes them, and this element needs\nthem more.** The `<input>` is inside this shadow root, so a consumer has no\nway to ask where the caret is: `querySelector` does not cross the boundary.\nA grammar that completes what is being typed cannot work without it, because\n\"what is being typed\" is the term the caret is in, and after writing a\ncompletion back the caret has to be put after it or the next parse reads the\nwrong term.\n\nZero before there is a control, which is where an empty field's caret would\nbe anyway.",
|
|
35478
|
+
"readonly": true,
|
|
35479
|
+
"inheritedFrom": {
|
|
35480
|
+
"name": "HelixHeadlessFilterInput",
|
|
35481
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35482
|
+
}
|
|
35483
|
+
},
|
|
35484
|
+
{
|
|
35485
|
+
"kind": "field",
|
|
35486
|
+
"name": "selectionEnd",
|
|
35487
|
+
"type": {
|
|
35488
|
+
"text": "number"
|
|
35489
|
+
},
|
|
35490
|
+
"description": "Where the selection ends, which is the caret when nothing is selected.",
|
|
35491
|
+
"readonly": true,
|
|
35492
|
+
"inheritedFrom": {
|
|
35493
|
+
"name": "HelixHeadlessFilterInput",
|
|
35494
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35495
|
+
}
|
|
35496
|
+
},
|
|
35497
|
+
{
|
|
35498
|
+
"kind": "field",
|
|
35499
|
+
"name": "selectionStart",
|
|
35500
|
+
"type": {
|
|
35501
|
+
"text": "number"
|
|
35502
|
+
},
|
|
35503
|
+
"description": "Where the selection starts, which is the caret when nothing is selected.",
|
|
35504
|
+
"readonly": true,
|
|
35505
|
+
"inheritedFrom": {
|
|
35506
|
+
"name": "HelixHeadlessFilterInput",
|
|
35507
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35508
|
+
}
|
|
35509
|
+
},
|
|
35510
|
+
{
|
|
35511
|
+
"kind": "method",
|
|
35512
|
+
"name": "setSelectionRange",
|
|
35513
|
+
"return": {
|
|
35514
|
+
"type": {
|
|
35515
|
+
"text": "void"
|
|
35516
|
+
}
|
|
35517
|
+
},
|
|
35518
|
+
"parameters": [
|
|
35519
|
+
{
|
|
35520
|
+
"name": "start",
|
|
35521
|
+
"type": {
|
|
35522
|
+
"text": "number"
|
|
35523
|
+
}
|
|
35524
|
+
},
|
|
35525
|
+
{
|
|
35526
|
+
"name": "end",
|
|
35527
|
+
"type": {
|
|
35528
|
+
"text": "number"
|
|
35529
|
+
}
|
|
35530
|
+
},
|
|
35531
|
+
{
|
|
35532
|
+
"name": "direction",
|
|
35533
|
+
"optional": true,
|
|
35534
|
+
"type": {
|
|
35535
|
+
"text": "'backward' | 'forward' | 'none'"
|
|
35536
|
+
}
|
|
35537
|
+
}
|
|
35538
|
+
],
|
|
35539
|
+
"description": "Moves the caret, or selects a run of the text.",
|
|
35540
|
+
"type": {
|
|
35541
|
+
"text": "setSelectionRange(start: number, end: number, direction?: 'backward' | 'forward' | 'none') => void"
|
|
35542
|
+
},
|
|
35543
|
+
"inheritedFrom": {
|
|
35544
|
+
"name": "HelixHeadlessFilterInput",
|
|
35545
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35546
|
+
}
|
|
35547
|
+
},
|
|
35282
35548
|
{
|
|
35283
35549
|
"kind": "field",
|
|
35284
35550
|
"name": "handleInput",
|
|
@@ -35312,6 +35578,44 @@
|
|
|
35312
35578
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35313
35579
|
}
|
|
35314
35580
|
},
|
|
35581
|
+
{
|
|
35582
|
+
"kind": "method",
|
|
35583
|
+
"name": "settleOpen",
|
|
35584
|
+
"privacy": "private",
|
|
35585
|
+
"return": {
|
|
35586
|
+
"type": {
|
|
35587
|
+
"text": "void"
|
|
35588
|
+
}
|
|
35589
|
+
},
|
|
35590
|
+
"description": "Opens the panel when there is something in it, and closes it when there is\nnot.\n\n**Derived rather than commanded, which is the whole of how two levels\nwork.** A reader who picks `disposition` wants its values next, and the\nconsumer answers by rendering those values; if picking closed the panel it\nwould shut and reopen between two renders, which a reader sees as a flicker\nand a screen reader hears as a list going away. Nothing here closes on a\nchoice: the panel goes when the consumer stops offering, which is exactly\nwhen a value has been completed and there is nothing left to say.\n\nThrough `requestOpen` for both directions, so `helix-before-open` and\n`helix-before-close` still gate it and a consumer who refuses is obeyed.\n**No guard of its own**, because that method already returns early when the\nanswer has not moved: this runs after every render, and a second guard here\nwould only be a copy of that one going stale.",
|
|
35591
|
+
"inheritedFrom": {
|
|
35592
|
+
"name": "HelixHeadlessFilterInput",
|
|
35593
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35594
|
+
}
|
|
35595
|
+
},
|
|
35596
|
+
{
|
|
35597
|
+
"kind": "method",
|
|
35598
|
+
"name": "move",
|
|
35599
|
+
"privacy": "private",
|
|
35600
|
+
"return": {
|
|
35601
|
+
"type": {
|
|
35602
|
+
"text": "void"
|
|
35603
|
+
}
|
|
35604
|
+
},
|
|
35605
|
+
"parameters": [
|
|
35606
|
+
{
|
|
35607
|
+
"name": "by",
|
|
35608
|
+
"type": {
|
|
35609
|
+
"text": "number"
|
|
35610
|
+
}
|
|
35611
|
+
}
|
|
35612
|
+
],
|
|
35613
|
+
"description": "Moves the highlight, wrapping, and opens the panel if it was closed.",
|
|
35614
|
+
"inheritedFrom": {
|
|
35615
|
+
"name": "HelixHeadlessFilterInput",
|
|
35616
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35617
|
+
}
|
|
35618
|
+
},
|
|
35315
35619
|
{
|
|
35316
35620
|
"kind": "field",
|
|
35317
35621
|
"name": "handleKeydown",
|
|
@@ -35322,6 +35626,54 @@
|
|
|
35322
35626
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35323
35627
|
}
|
|
35324
35628
|
},
|
|
35629
|
+
{
|
|
35630
|
+
"kind": "method",
|
|
35631
|
+
"name": "refreshSuggesting",
|
|
35632
|
+
"privacy": "private",
|
|
35633
|
+
"return": {
|
|
35634
|
+
"type": {
|
|
35635
|
+
"text": "void"
|
|
35636
|
+
}
|
|
35637
|
+
},
|
|
35638
|
+
"description": "What is on offer, settled before the render that draws it.\n\n**Not left to `slotchange`, for the reason the token row is not.** That\nevent reports the assignment moving and nothing else, and it does not fire\nat all under the harness these are tested in, so a panel that learned only\nfrom it would be a panel that never opened. Reading the slot every update is\nwhat makes the answer true whenever anyone asks.\n\nState only. Opening is an announcement and belongs after the render, which\nis why `settleOpen` is not called from here.",
|
|
35639
|
+
"inheritedFrom": {
|
|
35640
|
+
"name": "HelixHeadlessFilterInput",
|
|
35641
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35642
|
+
}
|
|
35643
|
+
},
|
|
35644
|
+
{
|
|
35645
|
+
"kind": "field",
|
|
35646
|
+
"name": "handleSuggestions",
|
|
35647
|
+
"privacy": "private",
|
|
35648
|
+
"readonly": true,
|
|
35649
|
+
"description": "The panel again, whenever what is in it changes.",
|
|
35650
|
+
"inheritedFrom": {
|
|
35651
|
+
"name": "HelixHeadlessFilterInput",
|
|
35652
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35653
|
+
}
|
|
35654
|
+
},
|
|
35655
|
+
{
|
|
35656
|
+
"kind": "field",
|
|
35657
|
+
"name": "handleFocusIn",
|
|
35658
|
+
"privacy": "private",
|
|
35659
|
+
"readonly": true,
|
|
35660
|
+
"description": "Focus arriving in the field is a reader asking what they can type.",
|
|
35661
|
+
"inheritedFrom": {
|
|
35662
|
+
"name": "HelixHeadlessFilterInput",
|
|
35663
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35664
|
+
}
|
|
35665
|
+
},
|
|
35666
|
+
{
|
|
35667
|
+
"kind": "field",
|
|
35668
|
+
"name": "handleFocusOut",
|
|
35669
|
+
"privacy": "private",
|
|
35670
|
+
"readonly": true,
|
|
35671
|
+
"description": "Focus leaving the element closes it.\n\n`relatedTarget` and not a timer: a press inside the panel moves focus within\nthis element and must not close what is being pressed.",
|
|
35672
|
+
"inheritedFrom": {
|
|
35673
|
+
"name": "HelixHeadlessFilterInput",
|
|
35674
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35675
|
+
}
|
|
35676
|
+
},
|
|
35325
35677
|
{
|
|
35326
35678
|
"kind": "field",
|
|
35327
35679
|
"name": "handleTokens",
|
|
@@ -35333,6 +35685,21 @@
|
|
|
35333
35685
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35334
35686
|
}
|
|
35335
35687
|
},
|
|
35688
|
+
{
|
|
35689
|
+
"kind": "method",
|
|
35690
|
+
"name": "markActive",
|
|
35691
|
+
"privacy": "private",
|
|
35692
|
+
"return": {
|
|
35693
|
+
"type": {
|
|
35694
|
+
"text": "void"
|
|
35695
|
+
}
|
|
35696
|
+
},
|
|
35697
|
+
"description": "Marks the highlighted suggestion, and tells the control which one it is.\n\n**Two halves, and neither does the other's job.** `active` is the option's\nown published flag and is what a stylesheet draws from. The control carries\n`aria-activedescendant`, because focus never leaves the text: a screen\nreader is told what is highlighted by the field the caret is in, not by the\nlist.\n\nThrough `ariaActiveDescendantElement` rather than an id, which is what\n`Listbox` reaches for and for the same two reasons: it crosses a shadow\nboundary, where an `aria-activedescendant` naming an id cannot, and it needs\nno ids invented for the consumer's own elements. Feature-tested, because\nwhere it is missing the assignment is a silent no-op rather than an error,\nand the highlight is still drawn.",
|
|
35698
|
+
"inheritedFrom": {
|
|
35699
|
+
"name": "HelixHeadlessFilterInput",
|
|
35700
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35701
|
+
}
|
|
35702
|
+
},
|
|
35336
35703
|
{
|
|
35337
35704
|
"kind": "method",
|
|
35338
35705
|
"name": "focus",
|
|
@@ -35697,6 +36064,11 @@
|
|
|
35697
36064
|
{
|
|
35698
36065
|
"description": "A cap for a field in a row, where the rest becomes a count.",
|
|
35699
36066
|
"slug": "max-tags"
|
|
36067
|
+
},
|
|
36068
|
+
{
|
|
36069
|
+
"description": "Keys before the colon, values after it, in one panel.",
|
|
36070
|
+
"min": 420,
|
|
36071
|
+
"slug": "suggesting"
|
|
35700
36072
|
}
|
|
35701
36073
|
],
|
|
35702
36074
|
"source": "helix/styled/src/filter-input"
|
|
@@ -35704,6 +36076,31 @@
|
|
|
35704
36076
|
"tagName": "helix-filter-input",
|
|
35705
36077
|
"customElement": true,
|
|
35706
36078
|
"attributes": [
|
|
36079
|
+
{
|
|
36080
|
+
"name": "open",
|
|
36081
|
+
"type": {
|
|
36082
|
+
"text": "boolean"
|
|
36083
|
+
},
|
|
36084
|
+
"description": "Whether the element is open.\n\nOne property, not two, so `dialog.open` answers the question anyone\nasking it meant. Writing always applies; `<helix-dialog open>` is the\nsame statement in markup.\n\n**Not reflected, and that is required rather than tidy.** Reflection\nwrites the resolved state back as an attribute, so an element that opened\nitself would put `open` on its own host: cloned, serialized for\nhydration, or diffed by a framework, it comes back holding whatever the\nlast reader did rather than what the author wrote. `:state(open)` carries\nthe resolved state for stylesheets, which is what the mirror is for.",
|
|
36085
|
+
"fieldName": "open",
|
|
36086
|
+
"inheritedFrom": {
|
|
36087
|
+
"name": "MixinControllerOpen",
|
|
36088
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
36089
|
+
}
|
|
36090
|
+
},
|
|
36091
|
+
{
|
|
36092
|
+
"name": "default-open",
|
|
36093
|
+
"type": {
|
|
36094
|
+
"text": "boolean"
|
|
36095
|
+
},
|
|
36096
|
+
"default": "false",
|
|
36097
|
+
"description": "Initial open state for uncontrolled use, where nothing declared one.",
|
|
36098
|
+
"fieldName": "defaultOpen",
|
|
36099
|
+
"inheritedFrom": {
|
|
36100
|
+
"name": "MixinControllerOpen",
|
|
36101
|
+
"module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
|
|
36102
|
+
}
|
|
36103
|
+
},
|
|
35707
36104
|
{
|
|
35708
36105
|
"name": "collapse-label",
|
|
35709
36106
|
"type": {
|
|
@@ -35935,6 +36332,42 @@
|
|
|
35935
36332
|
"name": "HelixHeadlessFilterInput",
|
|
35936
36333
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35937
36334
|
}
|
|
36335
|
+
},
|
|
36336
|
+
{
|
|
36337
|
+
"type": {
|
|
36338
|
+
"text": "HelixBeforeCloseEvent"
|
|
36339
|
+
},
|
|
36340
|
+
"description": "Fired before the suggestions go, and cancelable.",
|
|
36341
|
+
"name": "helix-before-close",
|
|
36342
|
+
"reactProp": "onhelix-before-close",
|
|
36343
|
+
"inheritedFrom": {
|
|
36344
|
+
"name": "HelixHeadlessFilterInput",
|
|
36345
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36346
|
+
}
|
|
36347
|
+
},
|
|
36348
|
+
{
|
|
36349
|
+
"type": {
|
|
36350
|
+
"text": "HelixBeforeOpenEvent"
|
|
36351
|
+
},
|
|
36352
|
+
"description": "Fired before the suggestions show, and cancelable.",
|
|
36353
|
+
"name": "helix-before-open",
|
|
36354
|
+
"reactProp": "onhelix-before-open",
|
|
36355
|
+
"inheritedFrom": {
|
|
36356
|
+
"name": "HelixHeadlessFilterInput",
|
|
36357
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36358
|
+
}
|
|
36359
|
+
},
|
|
36360
|
+
{
|
|
36361
|
+
"type": {
|
|
36362
|
+
"text": "Event"
|
|
36363
|
+
},
|
|
36364
|
+
"description": "Says the panel moved, carrying `newState` and `oldState`.",
|
|
36365
|
+
"name": "toggle",
|
|
36366
|
+
"reactProp": "ontoggle",
|
|
36367
|
+
"inheritedFrom": {
|
|
36368
|
+
"name": "HelixHeadlessFilterInput",
|
|
36369
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36370
|
+
}
|
|
35938
36371
|
}
|
|
35939
36372
|
],
|
|
35940
36373
|
"slots": [
|
|
@@ -35954,6 +36387,14 @@
|
|
|
35954
36387
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
35955
36388
|
}
|
|
35956
36389
|
},
|
|
36390
|
+
{
|
|
36391
|
+
"description": "What could be typed next, as `Option`s, and `Option.Group`s of them.",
|
|
36392
|
+
"name": "suggestions",
|
|
36393
|
+
"inheritedFrom": {
|
|
36394
|
+
"name": "HelixHeadlessFilterInput",
|
|
36395
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36396
|
+
}
|
|
36397
|
+
},
|
|
35957
36398
|
{
|
|
35958
36399
|
"description": "What is already narrowing the results, as `Tag`s.",
|
|
35959
36400
|
"name": "tags",
|
|
@@ -36020,6 +36461,14 @@
|
|
|
36020
36461
|
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36021
36462
|
}
|
|
36022
36463
|
},
|
|
36464
|
+
{
|
|
36465
|
+
"description": "The floating panel the suggestions sit in.",
|
|
36466
|
+
"name": "surface",
|
|
36467
|
+
"inheritedFrom": {
|
|
36468
|
+
"name": "HelixHeadlessFilterInput",
|
|
36469
|
+
"module": "src/filter-input/root/filter-input-root.ts"
|
|
36470
|
+
}
|
|
36471
|
+
},
|
|
36023
36472
|
{
|
|
36024
36473
|
"description": "The row the tokens sit in.",
|
|
36025
36474
|
"name": "tags",
|
|
@@ -53,7 +53,14 @@ registerElementEvents({
|
|
|
53
53
|
'helix-drilldown': ['helix-select'],
|
|
54
54
|
'helix-drilldown-item': ['helix-select'],
|
|
55
55
|
'helix-file-input': ['change', 'helix-before-change', 'input'],
|
|
56
|
-
'helix-filter-input': [
|
|
56
|
+
'helix-filter-input': [
|
|
57
|
+
'change',
|
|
58
|
+
'helix-before-change',
|
|
59
|
+
'helix-before-close',
|
|
60
|
+
'helix-before-open',
|
|
61
|
+
'input',
|
|
62
|
+
'toggle',
|
|
63
|
+
],
|
|
57
64
|
'helix-heatmap': ['helix-resize'],
|
|
58
65
|
'helix-image': ['error', 'load'],
|
|
59
66
|
'helix-input': ['change', 'helix-before-change', 'input'],
|
|
@@ -102,4 +102,68 @@ opacity: 0.5;
|
|
|
102
102
|
box-shadow: none;
|
|
103
103
|
print-color-adjust: exact;
|
|
104
104
|
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
[part="surface"] {
|
|
108
|
+
background-color: var(--helix-color-surface-overlay);
|
|
109
|
+
border: var(--filter-input-border-width, var(--helix-border-floating)) solid
|
|
110
|
+
var(--filter-input-border-color, var(--helix-color-border));
|
|
111
|
+
border-radius: var(--helix-radii-sm);
|
|
112
|
+
box-shadow: var(--filter-input-shadow, var(--helix-shadow-floating));
|
|
113
|
+
box-sizing: border-box;
|
|
114
|
+
inline-size: var(--filter-input-panel-size, var(--floating-anchor-inline-size, 100%));
|
|
115
|
+
inset: auto;
|
|
116
|
+
margin: var(--helix-space-none);
|
|
117
|
+
|
|
118
|
+
max-block-size: var(--floating-available-block-size, 20rem);
|
|
119
|
+
min-inline-size: max-content;
|
|
120
|
+
overflow-y: auto;
|
|
121
|
+
padding-block: var(--helix-space-2xs);
|
|
122
|
+
padding-inline: var(--helix-space-none);
|
|
123
|
+
position: absolute;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
[part="surface"] {
|
|
127
|
+
--_travel: calc(var(--helix-space-2xs) * -1);
|
|
128
|
+
|
|
129
|
+
opacity: 0;
|
|
130
|
+
scale: 0.96;
|
|
131
|
+
transform: translateY(var(--_travel));
|
|
132
|
+
transition:
|
|
133
|
+
opacity var(--helix-duration-fast) var(--helix-easing-standard),
|
|
134
|
+
scale var(--helix-duration-fast) var(--helix-easing-emphasized),
|
|
135
|
+
transform var(--helix-duration-fast) var(--helix-easing-emphasized),
|
|
136
|
+
display var(--helix-duration-fast) allow-discrete,
|
|
137
|
+
overlay var(--helix-duration-fast) allow-discrete;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
[part="surface"][data-placement^="top"] {
|
|
141
|
+
--_travel: var(--helix-space-2xs);
|
|
142
|
+
|
|
143
|
+
transform-origin: var(--floating-arrow-x, 50%) 100%;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
[part="surface"][data-placement^="bottom"] {
|
|
147
|
+
transform-origin: var(--floating-arrow-x, 50%) 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
[part="surface"][data-placed] {
|
|
151
|
+
opacity: 1;
|
|
152
|
+
scale: 1;
|
|
153
|
+
transform: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
[part="surface"][hidden],
|
|
157
|
+
[part="surface"]:not(:popover-open) {
|
|
158
|
+
display: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@media (prefers-reduced-motion: reduce) {
|
|
162
|
+
|
|
163
|
+
[part="surface"],
|
|
164
|
+
[part="surface"][data-placed] {
|
|
165
|
+
scale: 1;
|
|
166
|
+
transform: none;
|
|
167
|
+
transition: none;
|
|
168
|
+
}
|
|
105
169
|
}`);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HelixHeadlessFilterInput } from '@fusion.dev/helix-headless/filter-input';
|
|
2
2
|
import type { CSSResultGroup } from 'lit';
|
|
3
3
|
import '../../icon/index.js';
|
|
4
|
+
import '../../option/index.js';
|
|
4
5
|
/**
|
|
5
6
|
* @summary A field that narrows something else, beside what is already narrowing it.
|
|
6
7
|
*
|
|
@@ -14,6 +15,13 @@ import '../../icon/index.js';
|
|
|
14
15
|
* them here is to keep their size and not run past the field. A `Tag` slotted
|
|
15
16
|
* into `tags` already looks like one; anything else looks like whatever it is.
|
|
16
17
|
*
|
|
18
|
+
* **The suggestion panel is this element's own box, not a listbox's.** Combobox
|
|
19
|
+
* puts a `helix-listbox` in its panel because the options there are a selection
|
|
20
|
+
* it owns; these are the consumer's suggestions, so the panel is a plain
|
|
21
|
+
* `role="listbox"` region and the options pass their own `helix-select`
|
|
22
|
+
* straight through it. That is why this surface scrolls where Combobox's does
|
|
23
|
+
* not: there is no list inside to do it.
|
|
24
|
+
*
|
|
17
25
|
* Height comes from the region, like every other control: `data-density` on
|
|
18
26
|
* whatever holds it, not a `size` here.
|
|
19
27
|
*
|
|
@@ -24,7 +32,12 @@ import '../../icon/index.js';
|
|
|
24
32
|
* @documentation https://helix.fusion.dev/components/filter-input
|
|
25
33
|
*
|
|
26
34
|
* @cssproperty --filter-input-background-color - Fill behind the field.
|
|
35
|
+
* @cssproperty --filter-input-border-color - Color of the suggestion panel's edge.
|
|
36
|
+
* @cssproperty --filter-input-border-width - Width of that edge. Follows `--helix-border-floating`.
|
|
27
37
|
* @cssproperty --filter-input-control-size - Smallest the text keeps as tokens fill the line, before it wraps to its own.
|
|
38
|
+
* @cssproperty --filter-input-panel-size - Width of the suggestion panel. Follows the field by default.
|
|
39
|
+
* @cssproperty --filter-input-shadow - Lift under the panel. Follows `--helix-shadow-floating`: a
|
|
40
|
+
* floating surface sits over content nobody can predict, so it keeps a lift by default.
|
|
28
41
|
* @cssproperty --filter-input-size - Height of the field with nothing in it, which it grows from.
|
|
29
42
|
*/
|
|
30
43
|
export declare class HelixFilterInput extends HelixHeadlessFilterInput {
|
|
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { customElement } from '@fusion.dev/helix-core';
|
|
8
8
|
import { HelixHeadlessFilterInput } from '@fusion.dev/helix-headless/filter-input';
|
|
9
9
|
import '../../icon/index.js';
|
|
10
|
+
import '../../option/index.js';
|
|
10
11
|
import { styles as glyphStyles } from '../../icon/glyph.css.js';
|
|
11
12
|
import { styles as fieldStyles } from '../../shared/field/field.css.js';
|
|
12
13
|
import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.css.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion.dev/helix",
|
|
3
3
|
"description": "Styled component tier. Extends the headless tier with token-driven presentation.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.15.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ross Sheppard <ross.sheppard@fusion.dev>",
|
|
7
7
|
"repository": {
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
},
|
|
47
47
|
"bugs": "https://github.com/project-fusion/fusion/issues",
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@fusion.dev/helix-core": "0.
|
|
50
|
-
"@fusion.dev/helix-headless": "0.
|
|
51
|
-
"@fusion.dev/helix-styles": "0.
|
|
49
|
+
"@fusion.dev/helix-core": "0.15.0",
|
|
50
|
+
"@fusion.dev/helix-headless": "0.15.0",
|
|
51
|
+
"@fusion.dev/helix-styles": "0.15.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@custom-elements-manifest/analyzer": "^0.11.0",
|
|
55
|
-
"@fusion.dev/helix-cem": "0.
|
|
56
|
-
"@fusion.dev/helix-testing": "0.
|
|
55
|
+
"@fusion.dev/helix-cem": "0.15.0",
|
|
56
|
+
"@fusion.dev/helix-testing": "0.15.0",
|
|
57
57
|
"@fusion.dev/scripts": "0.0.0-dev",
|
|
58
58
|
"@happy-dom/global-registrator": "^20.0.0",
|
|
59
59
|
"@lit-labs/ssr": "^3.3.0",
|
package/types/jsx.d.ts
CHANGED
|
@@ -6977,8 +6977,31 @@ export type HelixFilterInputElementEvent<E = Event> = TypedEvent<
|
|
|
6977
6977
|
/** `helix-before-change` event type */
|
|
6978
6978
|
export type HelixFilterInputHelixBeforeChangeElementEvent =
|
|
6979
6979
|
HelixFilterInputElementEvent<HelixBeforeChangeEvent>;
|
|
6980
|
+
/** `helix-before-close` event type */
|
|
6981
|
+
export type HelixFilterInputHelixBeforeCloseElementEvent =
|
|
6982
|
+
HelixFilterInputElementEvent<HelixBeforeCloseEvent>;
|
|
6983
|
+
/** `helix-before-open` event type */
|
|
6984
|
+
export type HelixFilterInputHelixBeforeOpenElementEvent =
|
|
6985
|
+
HelixFilterInputElementEvent<HelixBeforeOpenEvent>;
|
|
6980
6986
|
|
|
6981
6987
|
export type HelixFilterInputProps = {
|
|
6988
|
+
/** Whether the element is open.
|
|
6989
|
+
|
|
6990
|
+
One property, not two, so `dialog.open` answers the question anyone
|
|
6991
|
+
asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
6992
|
+
same statement in markup.
|
|
6993
|
+
|
|
6994
|
+
**Not reflected, and that is required rather than tidy.** Reflection
|
|
6995
|
+
writes the resolved state back as an attribute, so an element that opened
|
|
6996
|
+
itself would put `open` on its own host: cloned, serialized for
|
|
6997
|
+
hydration, or diffed by a framework, it comes back holding whatever the
|
|
6998
|
+
last reader did rather than what the author wrote. `:state(open)` carries
|
|
6999
|
+
the resolved state for stylesheets, which is what the mirror is for. */
|
|
7000
|
+
open?: (HelixFilterInput["open"]) | undefined;
|
|
7001
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
7002
|
+
"default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
7003
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
7004
|
+
defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
6982
7005
|
/** What the control says once everything is showing. */
|
|
6983
7006
|
"collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
|
|
6984
7007
|
/** What the control says once everything is showing. */
|
|
@@ -7062,9 +7085,36 @@ Here rather than on each control. */
|
|
|
7062
7085
|
"onhelix-before-change"?: ((
|
|
7063
7086
|
e: HelixFilterInputHelixBeforeChangeElementEvent,
|
|
7064
7087
|
) => void) | undefined;
|
|
7088
|
+
/** Fired before the suggestions go, and cancelable. */
|
|
7089
|
+
"onhelix-before-close"?: ((
|
|
7090
|
+
e: HelixFilterInputHelixBeforeCloseElementEvent,
|
|
7091
|
+
) => void) | undefined;
|
|
7092
|
+
/** Fired before the suggestions show, and cancelable. */
|
|
7093
|
+
"onhelix-before-open"?: ((
|
|
7094
|
+
e: HelixFilterInputHelixBeforeOpenElementEvent,
|
|
7095
|
+
) => void) | undefined;
|
|
7096
|
+
/** Says the panel moved, carrying `newState` and `oldState`. */
|
|
7097
|
+
ontoggle?: ((e: HelixFilterInputElementEvent) => void) | undefined;
|
|
7065
7098
|
};
|
|
7066
7099
|
|
|
7067
7100
|
export type HelixFilterInputSolidJsProps = {
|
|
7101
|
+
/** Whether the element is open.
|
|
7102
|
+
|
|
7103
|
+
One property, not two, so `dialog.open` answers the question anyone
|
|
7104
|
+
asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
7105
|
+
same statement in markup.
|
|
7106
|
+
|
|
7107
|
+
**Not reflected, and that is required rather than tidy.** Reflection
|
|
7108
|
+
writes the resolved state back as an attribute, so an element that opened
|
|
7109
|
+
itself would put `open` on its own host: cloned, serialized for
|
|
7110
|
+
hydration, or diffed by a framework, it comes back holding whatever the
|
|
7111
|
+
last reader did rather than what the author wrote. `:state(open)` carries
|
|
7112
|
+
the resolved state for stylesheets, which is what the mirror is for. */
|
|
7113
|
+
"prop:open"?: (HelixFilterInput["open"]) | undefined;
|
|
7114
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
7115
|
+
"bool:default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
7116
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
7117
|
+
"prop:defaultOpen"?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
7068
7118
|
/** What the control says once everything is showing. */
|
|
7069
7119
|
"attr:collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
|
|
7070
7120
|
/** What the control says once everything is showing. */
|
|
@@ -7147,6 +7197,16 @@ Here rather than on each control. */
|
|
|
7147
7197
|
"on:helix-before-change"?: ((
|
|
7148
7198
|
e: HelixFilterInputHelixBeforeChangeElementEvent,
|
|
7149
7199
|
) => void) | undefined;
|
|
7200
|
+
/** Fired before the suggestions go, and cancelable. */
|
|
7201
|
+
"on:helix-before-close"?: ((
|
|
7202
|
+
e: HelixFilterInputHelixBeforeCloseElementEvent,
|
|
7203
|
+
) => void) | undefined;
|
|
7204
|
+
/** Fired before the suggestions show, and cancelable. */
|
|
7205
|
+
"on:helix-before-open"?: ((
|
|
7206
|
+
e: HelixFilterInputHelixBeforeOpenElementEvent,
|
|
7207
|
+
) => void) | undefined;
|
|
7208
|
+
/** Says the panel moved, carrying `newState` and `oldState`. */
|
|
7209
|
+
"on:toggle"?: ((e: HelixFilterInputElementEvent) => void) | undefined;
|
|
7150
7210
|
|
|
7151
7211
|
/** Set the innerHTML of the element */
|
|
7152
7212
|
innerHTML?: (string) | undefined;
|
|
@@ -23756,6 +23816,13 @@ export type CustomElements = {
|
|
|
23756
23816
|
* them here is to keep their size and not run past the field. A `Tag` slotted
|
|
23757
23817
|
* into `tags` already looks like one; anything else looks like whatever it is.
|
|
23758
23818
|
*
|
|
23819
|
+
* **The suggestion panel is this element's own box, not a listbox's.** Combobox
|
|
23820
|
+
* puts a `helix-listbox` in its panel because the options there are a selection
|
|
23821
|
+
* it owns; these are the consumer's suggestions, so the panel is a plain
|
|
23822
|
+
* `role="listbox"` region and the options pass their own `helix-select`
|
|
23823
|
+
* straight through it. That is why this surface scrolls where Combobox's does
|
|
23824
|
+
* not: there is no list inside to do it.
|
|
23825
|
+
*
|
|
23759
23826
|
* Height comes from the region, like every other control: `data-density` on
|
|
23760
23827
|
* whatever holds it, not a `size` here.
|
|
23761
23828
|
*
|
|
@@ -23763,6 +23830,19 @@ export type CustomElements = {
|
|
|
23763
23830
|
*
|
|
23764
23831
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
23765
23832
|
*
|
|
23833
|
+
* - `open`: Whether the element is open.
|
|
23834
|
+
*
|
|
23835
|
+
* One property, not two, so `dialog.open` answers the question anyone
|
|
23836
|
+
* asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
23837
|
+
* same statement in markup.
|
|
23838
|
+
*
|
|
23839
|
+
* **Not reflected, and that is required rather than tidy.** Reflection
|
|
23840
|
+
* writes the resolved state back as an attribute, so an element that opened
|
|
23841
|
+
* itself would put `open` on its own host: cloned, serialized for
|
|
23842
|
+
* hydration, or diffed by a framework, it comes back holding whatever the
|
|
23843
|
+
* last reader did rather than what the author wrote. `:state(open)` carries
|
|
23844
|
+
* the resolved state for stylesheets, which is what the mirror is for.
|
|
23845
|
+
* - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
|
|
23766
23846
|
* - `collapse-label`/`collapseLabel`: What the control says once everything is showing.
|
|
23767
23847
|
* - `expandable`: Whether the count is a control that shows the rest.
|
|
23768
23848
|
* - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
|
|
@@ -23812,6 +23892,20 @@ export type CustomElements = {
|
|
|
23812
23892
|
* imperatively later, and nothing is hydrating by then.
|
|
23813
23893
|
*
|
|
23814
23894
|
* Here rather than on each control.
|
|
23895
|
+
* - `selectionDirection`: The caret and the selection, under the platform's own names.
|
|
23896
|
+
*
|
|
23897
|
+
* **Published for the reason `Input` publishes them, and this element needs
|
|
23898
|
+
* them more.** The `<input>` is inside this shadow root, so a consumer has no
|
|
23899
|
+
* way to ask where the caret is: `querySelector` does not cross the boundary.
|
|
23900
|
+
* A grammar that completes what is being typed cannot work without it, because
|
|
23901
|
+
* "what is being typed" is the term the caret is in, and after writing a
|
|
23902
|
+
* completion back the caret has to be put after it or the next parse reads the
|
|
23903
|
+
* wrong term.
|
|
23904
|
+
*
|
|
23905
|
+
* Zero before there is a control, which is where an empty field's caret would
|
|
23906
|
+
* be anyway. (property only) (readonly)
|
|
23907
|
+
* - `selectionEnd`: Where the selection ends, which is the caret when nothing is selected. (property only) (readonly)
|
|
23908
|
+
* - `selectionStart`: Where the selection starts, which is the caret when nothing is selected. (property only) (readonly)
|
|
23815
23909
|
* - `form`: The form this control belongs to, if any. (property only) (readonly)
|
|
23816
23910
|
* - `labels`: Labels associated with this control. (property only) (readonly)
|
|
23817
23911
|
* - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
|
|
@@ -23840,6 +23934,9 @@ export type CustomElements = {
|
|
|
23840
23934
|
* - `input`: Announced once the text has moved.
|
|
23841
23935
|
* - `change`: Relayed from the input once the reader has finished.
|
|
23842
23936
|
* - `helix-before-change`: Fired as the text changes, and cancelable.
|
|
23937
|
+
* - `helix-before-close`: Fired before the suggestions go, and cancelable.
|
|
23938
|
+
* - `helix-before-open`: Fired before the suggestions show, and cancelable.
|
|
23939
|
+
* - `toggle`: Says the panel moved, carrying `newState` and `oldState`.
|
|
23843
23940
|
*
|
|
23844
23941
|
* ## Slots
|
|
23845
23942
|
*
|
|
@@ -23847,12 +23944,21 @@ export type CustomElements = {
|
|
|
23847
23944
|
*
|
|
23848
23945
|
* - `end`: After the text, for a count or a control.
|
|
23849
23946
|
* - `start`: Before the text, for a search icon.
|
|
23947
|
+
* - `suggestions`: What could be typed next, as `Option`s, and `Option.Group`s of them.
|
|
23850
23948
|
* - `tags`: What is already narrowing the results, as `Tag`s.
|
|
23851
23949
|
*
|
|
23852
23950
|
* ## Methods
|
|
23853
23951
|
*
|
|
23854
23952
|
* Methods that can be called to access component functionality.
|
|
23855
23953
|
*
|
|
23954
|
+
* - `requestOpen(next: boolean) => boolean`: Requests an open-state change, and reports whether it was applied.
|
|
23955
|
+
*
|
|
23956
|
+
* Announces before it acts, so `preventDefault()` on the `helix-before-open` or
|
|
23957
|
+
* `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
|
|
23958
|
+
* element opens or closes itself, whether or not a consumer declared
|
|
23959
|
+
* `open`: a declared property is a seed and a correction, and a consumer
|
|
23960
|
+
* who wants the decision for themselves refuses it and assigns their own.
|
|
23961
|
+
* - `toggleOpen() => boolean`: Requests the opposite of the current state.
|
|
23856
23962
|
* - `requestValue(next: string) => boolean`: Requests a new value, and reports whether the request stood.
|
|
23857
23963
|
*
|
|
23858
23964
|
* Announces before it acts, so `preventDefault()` on the `helix-before-change` is
|
|
@@ -23870,6 +23976,7 @@ export type CustomElements = {
|
|
|
23870
23976
|
* Falling back to `defaultValue` rather than to empty, because a restore
|
|
23871
23977
|
* with no state is a form the browser has nothing recorded for, which is
|
|
23872
23978
|
* the same situation as a fresh one.
|
|
23979
|
+
* - `setSelectionRange(start: number, end: number, direction?: 'backward' | 'forward' | 'none') => void`: Moves the caret, or selects a run of the text.
|
|
23873
23980
|
* - `focus(options?: FocusOptions) => void`: Puts the caret in the field, the way a label pointing at one would.
|
|
23874
23981
|
* - `formDisabledCallback(disabled: boolean) => void`: The platform's notice that an ancestor fieldset changed.
|
|
23875
23982
|
*
|
|
@@ -23910,7 +24017,11 @@ export type CustomElements = {
|
|
|
23910
24017
|
* CSS variables available for styling the component.
|
|
23911
24018
|
*
|
|
23912
24019
|
* - `--filter-input-background-color`: Fill behind the field. (default: `undefined`)
|
|
24020
|
+
* - `--filter-input-border-color`: Color of the suggestion panel's edge. (default: `undefined`)
|
|
24021
|
+
* - `--filter-input-border-width`: Width of that edge. Follows `--helix-border-floating`. (default: `undefined`)
|
|
23913
24022
|
* - `--filter-input-control-size`: Smallest the text keeps as tokens fill the line, before it wraps to its own. (default: `undefined`)
|
|
24023
|
+
* - `--filter-input-panel-size`: Width of the suggestion panel. Follows the field by default. (default: `undefined`)
|
|
24024
|
+
* - `--filter-input-shadow`: Lift under the panel. Follows `--helix-shadow-floating`: a floating surface sits over content nobody can predict, so it keeps a lift by default. (default: `undefined`)
|
|
23914
24025
|
* - `--filter-input-size`: Height of the field with nothing in it, which it grows from. (default: `undefined`)
|
|
23915
24026
|
*
|
|
23916
24027
|
* ## CSS Parts
|
|
@@ -23924,6 +24035,7 @@ export type CustomElements = {
|
|
|
23924
24035
|
* - `hint`: Help under the field, while nothing is wrong.
|
|
23925
24036
|
* - `label`: The question, over the field.
|
|
23926
24037
|
* - `rest`: How many tokens did not fit. A `<button>` with `expandable`, a `<span>` without it.
|
|
24038
|
+
* - `surface`: The floating panel the suggestions sit in.
|
|
23927
24039
|
* - `tags`: The row the tokens sit in.
|
|
23928
24040
|
*/
|
|
23929
24041
|
"helix-filter-input": Partial<
|
|
@@ -39759,6 +39871,13 @@ export type CustomElementsSolidJs = {
|
|
|
39759
39871
|
* them here is to keep their size and not run past the field. A `Tag` slotted
|
|
39760
39872
|
* into `tags` already looks like one; anything else looks like whatever it is.
|
|
39761
39873
|
*
|
|
39874
|
+
* **The suggestion panel is this element's own box, not a listbox's.** Combobox
|
|
39875
|
+
* puts a `helix-listbox` in its panel because the options there are a selection
|
|
39876
|
+
* it owns; these are the consumer's suggestions, so the panel is a plain
|
|
39877
|
+
* `role="listbox"` region and the options pass their own `helix-select`
|
|
39878
|
+
* straight through it. That is why this surface scrolls where Combobox's does
|
|
39879
|
+
* not: there is no list inside to do it.
|
|
39880
|
+
*
|
|
39762
39881
|
* Height comes from the region, like every other control: `data-density` on
|
|
39763
39882
|
* whatever holds it, not a `size` here.
|
|
39764
39883
|
*
|
|
@@ -39766,6 +39885,19 @@ export type CustomElementsSolidJs = {
|
|
|
39766
39885
|
*
|
|
39767
39886
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
39768
39887
|
*
|
|
39888
|
+
* - `open`: Whether the element is open.
|
|
39889
|
+
*
|
|
39890
|
+
* One property, not two, so `dialog.open` answers the question anyone
|
|
39891
|
+
* asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
39892
|
+
* same statement in markup.
|
|
39893
|
+
*
|
|
39894
|
+
* **Not reflected, and that is required rather than tidy.** Reflection
|
|
39895
|
+
* writes the resolved state back as an attribute, so an element that opened
|
|
39896
|
+
* itself would put `open` on its own host: cloned, serialized for
|
|
39897
|
+
* hydration, or diffed by a framework, it comes back holding whatever the
|
|
39898
|
+
* last reader did rather than what the author wrote. `:state(open)` carries
|
|
39899
|
+
* the resolved state for stylesheets, which is what the mirror is for.
|
|
39900
|
+
* - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
|
|
39769
39901
|
* - `collapse-label`/`collapseLabel`: What the control says once everything is showing.
|
|
39770
39902
|
* - `expandable`: Whether the count is a control that shows the rest.
|
|
39771
39903
|
* - `expand-label`/`expandLabel`: What the collapsed count is called, since `+3` names nothing.
|
|
@@ -39815,6 +39947,20 @@ export type CustomElementsSolidJs = {
|
|
|
39815
39947
|
* imperatively later, and nothing is hydrating by then.
|
|
39816
39948
|
*
|
|
39817
39949
|
* Here rather than on each control.
|
|
39950
|
+
* - `selectionDirection`: The caret and the selection, under the platform's own names.
|
|
39951
|
+
*
|
|
39952
|
+
* **Published for the reason `Input` publishes them, and this element needs
|
|
39953
|
+
* them more.** The `<input>` is inside this shadow root, so a consumer has no
|
|
39954
|
+
* way to ask where the caret is: `querySelector` does not cross the boundary.
|
|
39955
|
+
* A grammar that completes what is being typed cannot work without it, because
|
|
39956
|
+
* "what is being typed" is the term the caret is in, and after writing a
|
|
39957
|
+
* completion back the caret has to be put after it or the next parse reads the
|
|
39958
|
+
* wrong term.
|
|
39959
|
+
*
|
|
39960
|
+
* Zero before there is a control, which is where an empty field's caret would
|
|
39961
|
+
* be anyway. (property only) (readonly)
|
|
39962
|
+
* - `selectionEnd`: Where the selection ends, which is the caret when nothing is selected. (property only) (readonly)
|
|
39963
|
+
* - `selectionStart`: Where the selection starts, which is the caret when nothing is selected. (property only) (readonly)
|
|
39818
39964
|
* - `form`: The form this control belongs to, if any. (property only) (readonly)
|
|
39819
39965
|
* - `labels`: Labels associated with this control. (property only) (readonly)
|
|
39820
39966
|
* - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
|
|
@@ -39843,6 +39989,9 @@ export type CustomElementsSolidJs = {
|
|
|
39843
39989
|
* - `input`: Announced once the text has moved.
|
|
39844
39990
|
* - `change`: Relayed from the input once the reader has finished.
|
|
39845
39991
|
* - `helix-before-change`: Fired as the text changes, and cancelable.
|
|
39992
|
+
* - `helix-before-close`: Fired before the suggestions go, and cancelable.
|
|
39993
|
+
* - `helix-before-open`: Fired before the suggestions show, and cancelable.
|
|
39994
|
+
* - `toggle`: Says the panel moved, carrying `newState` and `oldState`.
|
|
39846
39995
|
*
|
|
39847
39996
|
* ## Slots
|
|
39848
39997
|
*
|
|
@@ -39850,12 +39999,21 @@ export type CustomElementsSolidJs = {
|
|
|
39850
39999
|
*
|
|
39851
40000
|
* - `end`: After the text, for a count or a control.
|
|
39852
40001
|
* - `start`: Before the text, for a search icon.
|
|
40002
|
+
* - `suggestions`: What could be typed next, as `Option`s, and `Option.Group`s of them.
|
|
39853
40003
|
* - `tags`: What is already narrowing the results, as `Tag`s.
|
|
39854
40004
|
*
|
|
39855
40005
|
* ## Methods
|
|
39856
40006
|
*
|
|
39857
40007
|
* Methods that can be called to access component functionality.
|
|
39858
40008
|
*
|
|
40009
|
+
* - `requestOpen(next: boolean) => boolean`: Requests an open-state change, and reports whether it was applied.
|
|
40010
|
+
*
|
|
40011
|
+
* Announces before it acts, so `preventDefault()` on the `helix-before-open` or
|
|
40012
|
+
* `helix-before-close` is a refusal and nothing moves. Nobody refusing means the
|
|
40013
|
+
* element opens or closes itself, whether or not a consumer declared
|
|
40014
|
+
* `open`: a declared property is a seed and a correction, and a consumer
|
|
40015
|
+
* who wants the decision for themselves refuses it and assigns their own.
|
|
40016
|
+
* - `toggleOpen() => boolean`: Requests the opposite of the current state.
|
|
39859
40017
|
* - `requestValue(next: string) => boolean`: Requests a new value, and reports whether the request stood.
|
|
39860
40018
|
*
|
|
39861
40019
|
* Announces before it acts, so `preventDefault()` on the `helix-before-change` is
|
|
@@ -39873,6 +40031,7 @@ export type CustomElementsSolidJs = {
|
|
|
39873
40031
|
* Falling back to `defaultValue` rather than to empty, because a restore
|
|
39874
40032
|
* with no state is a form the browser has nothing recorded for, which is
|
|
39875
40033
|
* the same situation as a fresh one.
|
|
40034
|
+
* - `setSelectionRange(start: number, end: number, direction?: 'backward' | 'forward' | 'none') => void`: Moves the caret, or selects a run of the text.
|
|
39876
40035
|
* - `focus(options?: FocusOptions) => void`: Puts the caret in the field, the way a label pointing at one would.
|
|
39877
40036
|
* - `formDisabledCallback(disabled: boolean) => void`: The platform's notice that an ancestor fieldset changed.
|
|
39878
40037
|
*
|
|
@@ -39913,7 +40072,11 @@ export type CustomElementsSolidJs = {
|
|
|
39913
40072
|
* CSS variables available for styling the component.
|
|
39914
40073
|
*
|
|
39915
40074
|
* - `--filter-input-background-color`: Fill behind the field. (default: `undefined`)
|
|
40075
|
+
* - `--filter-input-border-color`: Color of the suggestion panel's edge. (default: `undefined`)
|
|
40076
|
+
* - `--filter-input-border-width`: Width of that edge. Follows `--helix-border-floating`. (default: `undefined`)
|
|
39916
40077
|
* - `--filter-input-control-size`: Smallest the text keeps as tokens fill the line, before it wraps to its own. (default: `undefined`)
|
|
40078
|
+
* - `--filter-input-panel-size`: Width of the suggestion panel. Follows the field by default. (default: `undefined`)
|
|
40079
|
+
* - `--filter-input-shadow`: Lift under the panel. Follows `--helix-shadow-floating`: a floating surface sits over content nobody can predict, so it keeps a lift by default. (default: `undefined`)
|
|
39917
40080
|
* - `--filter-input-size`: Height of the field with nothing in it, which it grows from. (default: `undefined`)
|
|
39918
40081
|
*
|
|
39919
40082
|
* ## CSS Parts
|
|
@@ -39927,6 +40090,7 @@ export type CustomElementsSolidJs = {
|
|
|
39927
40090
|
* - `hint`: Help under the field, while nothing is wrong.
|
|
39928
40091
|
* - `label`: The question, over the field.
|
|
39929
40092
|
* - `rest`: How many tokens did not fit. A `<button>` with `expandable`, a `<span>` without it.
|
|
40093
|
+
* - `surface`: The floating panel the suggestions sit in.
|
|
39930
40094
|
* - `tags`: The row the tokens sit in.
|
|
39931
40095
|
*/
|
|
39932
40096
|
"helix-filter-input": Partial<
|
|
@@ -50709,8 +50873,16 @@ export type CustomCssProperties = {
|
|
|
50709
50873
|
"--file-input-padding"?: (string) | undefined;
|
|
50710
50874
|
/** Fill behind the field. */
|
|
50711
50875
|
"--filter-input-background-color"?: (string) | undefined;
|
|
50876
|
+
/** Color of the suggestion panel's edge. */
|
|
50877
|
+
"--filter-input-border-color"?: (string) | undefined;
|
|
50878
|
+
/** Width of that edge. Follows `--helix-border-floating`. */
|
|
50879
|
+
"--filter-input-border-width"?: (string) | undefined;
|
|
50712
50880
|
/** Smallest the text keeps as tokens fill the line, before it wraps to its own. */
|
|
50713
50881
|
"--filter-input-control-size"?: (string) | undefined;
|
|
50882
|
+
/** Width of the suggestion panel. Follows the field by default. */
|
|
50883
|
+
"--filter-input-panel-size"?: (string) | undefined;
|
|
50884
|
+
/** Lift under the panel. Follows `--helix-shadow-floating`: a floating surface sits over content nobody can predict, so it keeps a lift by default. */
|
|
50885
|
+
"--filter-input-shadow"?: (string) | undefined;
|
|
50714
50886
|
/** Height of the field with nothing in it, which it grows from. */
|
|
50715
50887
|
"--filter-input-size"?: (string) | undefined;
|
|
50716
50888
|
/** An explicit track list, which wins over `min` and `columns`. For a layout of unequal tracks, which neither attribute can say. */
|
package/types/vue.d.ts
CHANGED
|
@@ -3578,8 +3578,31 @@ export type HelixFilterInputElementEvent<E = Event> = TypedEvent<
|
|
|
3578
3578
|
/** `helix-before-change` event type */
|
|
3579
3579
|
export type HelixFilterInputHelixBeforeChangeElementEvent =
|
|
3580
3580
|
HelixFilterInputElementEvent<HelixBeforeChangeEvent>;
|
|
3581
|
+
/** `helix-before-close` event type */
|
|
3582
|
+
export type HelixFilterInputHelixBeforeCloseElementEvent =
|
|
3583
|
+
HelixFilterInputElementEvent<HelixBeforeCloseEvent>;
|
|
3584
|
+
/** `helix-before-open` event type */
|
|
3585
|
+
export type HelixFilterInputHelixBeforeOpenElementEvent =
|
|
3586
|
+
HelixFilterInputElementEvent<HelixBeforeOpenEvent>;
|
|
3581
3587
|
|
|
3582
3588
|
export type HelixFilterInputVueProps = {
|
|
3589
|
+
/** Whether the element is open.
|
|
3590
|
+
|
|
3591
|
+
One property, not two, so `dialog.open` answers the question anyone
|
|
3592
|
+
asking it meant. Writing always applies; `<helix-dialog open>` is the
|
|
3593
|
+
same statement in markup.
|
|
3594
|
+
|
|
3595
|
+
**Not reflected, and that is required rather than tidy.** Reflection
|
|
3596
|
+
writes the resolved state back as an attribute, so an element that opened
|
|
3597
|
+
itself would put `open` on its own host: cloned, serialized for
|
|
3598
|
+
hydration, or diffed by a framework, it comes back holding whatever the
|
|
3599
|
+
last reader did rather than what the author wrote. `:state(open)` carries
|
|
3600
|
+
the resolved state for stylesheets, which is what the mirror is for. */
|
|
3601
|
+
open?: (HelixFilterInput["open"]) | undefined;
|
|
3602
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
3603
|
+
"default-open"?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
3604
|
+
/** Initial open state for uncontrolled use, where nothing declared one. */
|
|
3605
|
+
defaultOpen?: (HelixFilterInput["defaultOpen"]) | undefined;
|
|
3583
3606
|
/** What the control says once everything is showing. */
|
|
3584
3607
|
"collapse-label"?: (HelixFilterInput["collapseLabel"]) | undefined;
|
|
3585
3608
|
/** What the control says once everything is showing. */
|
|
@@ -3663,6 +3686,12 @@ export type HelixFilterInputVueEvents = {
|
|
|
3663
3686
|
change: HelixFilterInputElementEvent;
|
|
3664
3687
|
/** Fired as the text changes, and cancelable. */
|
|
3665
3688
|
"helix-before-change": HelixFilterInputHelixBeforeChangeElementEvent;
|
|
3689
|
+
/** Fired before the suggestions go, and cancelable. */
|
|
3690
|
+
"helix-before-close": HelixFilterInputHelixBeforeCloseElementEvent;
|
|
3691
|
+
/** Fired before the suggestions show, and cancelable. */
|
|
3692
|
+
"helix-before-open": HelixFilterInputHelixBeforeOpenElementEvent;
|
|
3693
|
+
/** Says the panel moved, carrying `newState` and `oldState`. */
|
|
3694
|
+
toggle: HelixFilterInputElementEvent;
|
|
3666
3695
|
};
|
|
3667
3696
|
|
|
3668
3697
|
export type HelixFlexVueProps = {
|
|
@@ -9669,8 +9698,16 @@ export type CustomCssProperties = {
|
|
|
9669
9698
|
"--file-input-padding"?: (string) | undefined;
|
|
9670
9699
|
/** Fill behind the field. */
|
|
9671
9700
|
"--filter-input-background-color"?: (string) | undefined;
|
|
9701
|
+
/** Color of the suggestion panel's edge. */
|
|
9702
|
+
"--filter-input-border-color"?: (string) | undefined;
|
|
9703
|
+
/** Width of that edge. Follows `--helix-border-floating`. */
|
|
9704
|
+
"--filter-input-border-width"?: (string) | undefined;
|
|
9672
9705
|
/** Smallest the text keeps as tokens fill the line, before it wraps to its own. */
|
|
9673
9706
|
"--filter-input-control-size"?: (string) | undefined;
|
|
9707
|
+
/** Width of the suggestion panel. Follows the field by default. */
|
|
9708
|
+
"--filter-input-panel-size"?: (string) | undefined;
|
|
9709
|
+
/** Lift under the panel. Follows `--helix-shadow-floating`: a floating surface sits over content nobody can predict, so it keeps a lift by default. */
|
|
9710
|
+
"--filter-input-shadow"?: (string) | undefined;
|
|
9674
9711
|
/** Height of the field with nothing in it, which it grows from. */
|
|
9675
9712
|
"--filter-input-size"?: (string) | undefined;
|
|
9676
9713
|
/** An explicit track list, which wins over `min` and `columns`. For a layout of unequal tracks, which neither attribute can say. */
|
|
@@ -10487,7 +10524,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
10487
10524
|
HelixFileInputVueProps,
|
|
10488
10525
|
HelixFileInputVueEvents
|
|
10489
10526
|
>;
|
|
10490
|
-
/** 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. */
|
|
10527
|
+
/** 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. **The suggestion panel is this element's own box, not a listbox's.** Combobox puts a 'helix-listbox' in its panel because the options there are a selection it owns; these are the consumer's suggestions, so the panel is a plain 'role="listbox"' region and the options pass their own 'helix-select' straight through it. That is why this surface scrolls where Combobox's does not: there is no list inside to do it. Height comes from the region, like every other control: 'data-density' on whatever holds it, not a 'size' here. */
|
|
10491
10528
|
"helix-filter-input": DefineCustomElement<
|
|
10492
10529
|
HelixFilterInput,
|
|
10493
10530
|
HelixFilterInputVueProps,
|