@fusion.dev/helix-headless 0.161.0 → 0.162.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +110 -4
- package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +3 -1
- package/dist/breadcrumbs/root/breadcrumbs-root.js +2 -1
- package/dist/chat/root/chat-root.d.ts +6 -1
- package/dist/chat/root/chat-root.js +2 -1
- package/dist/checkbox-group/root/checkbox-group-root.d.ts +3 -1
- package/dist/checkbox-group/root/checkbox-group-root.js +2 -1
- package/dist/combobox/root/combobox-root.d.ts +8 -1
- package/dist/combobox/root/combobox-root.js +5 -1
- package/dist/list/root/list-root.d.ts +3 -1
- package/dist/list/root/list-root.js +2 -1
- package/dist/listbox/root/listbox-root.d.ts +2 -1
- package/dist/listbox/root/listbox-root.js +2 -1
- package/dist/notifications/group/notification-group.d.ts +4 -1
- package/dist/notifications/group/notification-group.js +5 -3
- package/dist/notifications/root/notifications-root.d.ts +7 -2
- package/dist/notifications/root/notifications-root.js +2 -1
- package/dist/radio/group/radio-group.d.ts +2 -1
- package/dist/radio/group/radio-group.js +2 -1
- package/dist/select/root/select-root.d.ts +8 -1
- package/dist/select/root/select-root.js +5 -1
- package/dist/tag/group/tag-group.d.ts +3 -1
- package/dist/tag/group/tag-group.js +2 -1
- package/dist/toggle/group/toggle-group.d.ts +2 -1
- package/dist/toggle/group/toggle-group.js +4 -1
- package/dist/tree/root/tree-root.d.ts +2 -1
- package/dist/tree/root/tree-root.js +4 -1
- package/lint.json +1 -1
- package/package.json +5 -5
package/custom-elements.json
CHANGED
|
@@ -9988,6 +9988,14 @@
|
|
|
9988
9988
|
"readonly": true,
|
|
9989
9989
|
"description": "New crumbs fold again, as a new `items` does."
|
|
9990
9990
|
},
|
|
9991
|
+
{
|
|
9992
|
+
"kind": "field",
|
|
9993
|
+
"name": "upgradeWatch",
|
|
9994
|
+
"privacy": "protected",
|
|
9995
|
+
"readonly": true,
|
|
9996
|
+
"default": "new UpgradeController(this, this.handleSlotChange)",
|
|
9997
|
+
"description": "Reads a crumb again once it upgrades, so the current one is marked."
|
|
9998
|
+
},
|
|
9991
9999
|
{
|
|
9992
10000
|
"kind": "method",
|
|
9993
10001
|
"name": "renderItems",
|
|
@@ -25299,6 +25307,14 @@
|
|
|
25299
25307
|
"default": "new ChildrenController(this, () => this.handleSlotChange())",
|
|
25300
25308
|
"description": "Watches for turns arriving, since a manual slot hears nothing about them.\n\n**A turn that arrives after first paint reaches nothing on its own.**\nSlots are assigned by hand here, so appending a child assigns it to\nnothing, fires no `slotchange`, and schedules no render: the transcript\nwent on showing \"Nothing to show\" over six children it already had, and\nthe one thing a conversation does is grow. Measured with\n`assignedElements()` at zero against `children` at nine. Children only,\nnever a turn's own text, which a streaming turn rewrites every frame."
|
|
25301
25309
|
},
|
|
25310
|
+
{
|
|
25311
|
+
"kind": "field",
|
|
25312
|
+
"name": "upgradeWatch",
|
|
25313
|
+
"privacy": "protected",
|
|
25314
|
+
"readonly": true,
|
|
25315
|
+
"default": "new UpgradeController(this, () => this.handleSlotChange())",
|
|
25316
|
+
"description": "Hears a message upgrade after it arrived. A message is known by its marker,\nwhich an element that has not upgraded lacks, so it was assigned nowhere."
|
|
25317
|
+
},
|
|
25302
25318
|
{
|
|
25303
25319
|
"kind": "field",
|
|
25304
25320
|
"name": "settling",
|
|
@@ -26947,6 +26963,14 @@
|
|
|
26947
26963
|
"privacy": "private",
|
|
26948
26964
|
"description": "Watches for boxes arriving inside a wrapper, which no slot reports."
|
|
26949
26965
|
},
|
|
26966
|
+
{
|
|
26967
|
+
"kind": "field",
|
|
26968
|
+
"name": "upgradeWatch",
|
|
26969
|
+
"privacy": "protected",
|
|
26970
|
+
"readonly": true,
|
|
26971
|
+
"default": "new UpgradeController(this, undefined, { subtree: true })",
|
|
26972
|
+
"description": "Reads a box again once it upgrades, so it takes the group's name and value."
|
|
26973
|
+
},
|
|
26950
26974
|
{
|
|
26951
26975
|
"kind": "field",
|
|
26952
26976
|
"name": "judged",
|
|
@@ -38568,6 +38592,14 @@
|
|
|
38568
38592
|
"privacy": "private",
|
|
38569
38593
|
"readonly": true
|
|
38570
38594
|
},
|
|
38595
|
+
{
|
|
38596
|
+
"kind": "field",
|
|
38597
|
+
"name": "upgradeWatch",
|
|
38598
|
+
"privacy": "protected",
|
|
38599
|
+
"readonly": true,
|
|
38600
|
+
"default": "new UpgradeController( this, () => { this.listbox?.requestUpdate() this.requestUpdate() }, { subtree: true }, )",
|
|
38601
|
+
"description": "Hears an option upgrade after it arrived. The options are this element's\nchildren, which the listbox reaches through a slot and does not watch, so\nboth read them again: the listbox to select the one `value` names, and this\nelement for the words in its field."
|
|
38602
|
+
},
|
|
38571
38603
|
{
|
|
38572
38604
|
"kind": "field",
|
|
38573
38605
|
"name": "panel",
|
|
@@ -91710,6 +91742,14 @@
|
|
|
91710
91742
|
"privacy": "private",
|
|
91711
91743
|
"readonly": true
|
|
91712
91744
|
},
|
|
91745
|
+
{
|
|
91746
|
+
"kind": "field",
|
|
91747
|
+
"name": "upgradeWatch",
|
|
91748
|
+
"privacy": "protected",
|
|
91749
|
+
"readonly": true,
|
|
91750
|
+
"default": "new UpgradeController(this, this.handleSlotChange)",
|
|
91751
|
+
"description": "Reads an item again once it upgrades, so it takes the role the list gives its rows."
|
|
91752
|
+
},
|
|
91713
91753
|
{
|
|
91714
91754
|
"kind": "field",
|
|
91715
91755
|
"name": "tier",
|
|
@@ -93208,6 +93248,13 @@
|
|
|
93208
93248
|
"description": "Every option, in the order they appear.\n\nDescendants rather than children, because a group puts a level between the\nlist and its options and the keyboard has to move through a grouped list\nexactly as it moves through a flat one.",
|
|
93209
93249
|
"readonly": true
|
|
93210
93250
|
},
|
|
93251
|
+
{
|
|
93252
|
+
"kind": "field",
|
|
93253
|
+
"name": "upgradeWatch",
|
|
93254
|
+
"privacy": "protected",
|
|
93255
|
+
"readonly": true,
|
|
93256
|
+
"default": "new UpgradeController(this, undefined, { subtree: true })"
|
|
93257
|
+
},
|
|
93211
93258
|
{
|
|
93212
93259
|
"kind": "method",
|
|
93213
93260
|
"name": "among",
|
|
@@ -111540,13 +111587,27 @@
|
|
|
111540
111587
|
},
|
|
111541
111588
|
"description": "Puts the rows the group is showing into the slot, and the rest nowhere.\n\n**Assignment rather than hiding, which is what makes this work with no\nstylesheet.** A row that is not assigned to a slot renders nothing at all:\nit is out of the layout, out of the tab order and out of the accessibility\ntree, in both tiers, without a rule anywhere. `hidden` would do the first\nthree and `inert` only the last two, and either would put the collapse in a\nplace a headless consumer has to re-implement.\n\nCollapsed keeps the first row rather than none, because a group folded to\nnothing is a heading with a number after it and no reason to believe there\nis anything behind it. The one row is the evidence."
|
|
111542
111589
|
},
|
|
111590
|
+
{
|
|
111591
|
+
"kind": "field",
|
|
111592
|
+
"name": "recount",
|
|
111593
|
+
"privacy": "private",
|
|
111594
|
+
"readonly": true,
|
|
111595
|
+
"description": "Hears a row arrive after the render. The slot is assigned by hand, so a\nnew row is in no slot and sends no `slotchange` to say it came. The feed\nthe group is in is asked to update as well, since it counts the group's\nrows and does not watch inside the group."
|
|
111596
|
+
},
|
|
111543
111597
|
{
|
|
111544
111598
|
"kind": "field",
|
|
111545
111599
|
"name": "childWatch",
|
|
111546
111600
|
"privacy": "protected",
|
|
111547
111601
|
"readonly": true,
|
|
111548
|
-
"default": "new ChildrenController(this,
|
|
111549
|
-
|
|
111602
|
+
"default": "new ChildrenController(this, this.recount)"
|
|
111603
|
+
},
|
|
111604
|
+
{
|
|
111605
|
+
"kind": "field",
|
|
111606
|
+
"name": "upgradeWatch",
|
|
111607
|
+
"privacy": "protected",
|
|
111608
|
+
"readonly": true,
|
|
111609
|
+
"default": "new UpgradeController(this, this.recount)",
|
|
111610
|
+
"description": "Hears a row upgrade after it arrived, which neither the slot nor `childWatch` reports."
|
|
111550
111611
|
},
|
|
111551
111612
|
{
|
|
111552
111613
|
"kind": "field",
|
|
@@ -113424,6 +113485,14 @@
|
|
|
113424
113485
|
"default": "new ChildrenController(this, this.handleSlotChange)",
|
|
113425
113486
|
"description": "Hears a row arrive after the render. The list slot is assigned by hand, so\na new row is in no slot and sends no `slotchange`: without this it was\ndrawn nowhere and an emptied feed kept saying it was empty. A row added to\na group is the group's to hear, and the group asks the feed to count again."
|
|
113426
113487
|
},
|
|
113488
|
+
{
|
|
113489
|
+
"kind": "field",
|
|
113490
|
+
"name": "upgradeWatch",
|
|
113491
|
+
"privacy": "protected",
|
|
113492
|
+
"readonly": true,
|
|
113493
|
+
"default": "new UpgradeController(this, this.handleSlotChange)",
|
|
113494
|
+
"description": "Hears a row upgrade after it arrived. A row is known by its marker, which\nan element that has not upgraded lacks, so the row was assigned nowhere."
|
|
113495
|
+
},
|
|
113427
113496
|
{
|
|
113428
113497
|
"kind": "field",
|
|
113429
113498
|
"name": "handleRead",
|
|
@@ -113616,7 +113685,7 @@
|
|
|
113616
113685
|
"text": "void"
|
|
113617
113686
|
}
|
|
113618
113687
|
},
|
|
113619
|
-
"description": "Says whether anything in the feed has media, so every item can hold the\ncolumn open whether or not it has one of its own.\n\n**A fact no item can answer for itself**, which is why it is here. An item\nknows about its own media slot and nothing about its neighbors, so a feed\nwhere some rows have an avatar and some do not draws two different left\nedges for its text: measured on a four item feed, the rows without media\nstarted their text 32 pixels to the left of the rows with it. The styled\ntier turns this into a width; this tier ships no stylesheet and is\nunaffected.\n\n**What is asked of each row is its light DOM, not the row.** A notification\npublishes no property for this, and asking one would make the answer depend\non the row having drawn itself; a `[slot=\"media\"]` child is there from the\nmoment the markup is parsed. The rows themselves come from `items`, which\ndoes need them upgraded, and that is the honest limit rather than a claim\nthis had made the other way: a row that upgrades late is counted on the next\nupdate, which
|
|
113688
|
+
"description": "Says whether anything in the feed has media, so every item can hold the\ncolumn open whether or not it has one of its own.\n\n**A fact no item can answer for itself**, which is why it is here. An item\nknows about its own media slot and nothing about its neighbors, so a feed\nwhere some rows have an avatar and some do not draws two different left\nedges for its text: measured on a four item feed, the rows without media\nstarted their text 32 pixels to the left of the rows with it. The styled\ntier turns this into a width; this tier ships no stylesheet and is\nunaffected.\n\n**What is asked of each row is its light DOM, not the row.** A notification\npublishes no property for this, and asking one would make the answer depend\non the row having drawn itself; a `[slot=\"media\"]` child is there from the\nmoment the markup is parsed. The rows themselves come from `items`, which\ndoes need them upgraded, and that is the honest limit rather than a claim\nthis had made the other way: a row that upgrades late is counted on the next\nupdate, which `UpgradeController` asks for when its definition arrives."
|
|
113620
113689
|
},
|
|
113621
113690
|
{
|
|
113622
113691
|
"kind": "method",
|
|
@@ -130370,6 +130439,13 @@
|
|
|
130370
130439
|
},
|
|
130371
130440
|
"privacy": "private"
|
|
130372
130441
|
},
|
|
130442
|
+
{
|
|
130443
|
+
"kind": "field",
|
|
130444
|
+
"name": "upgradeWatch",
|
|
130445
|
+
"privacy": "protected",
|
|
130446
|
+
"readonly": true,
|
|
130447
|
+
"default": "new UpgradeController(this, undefined, { subtree: true })"
|
|
130448
|
+
},
|
|
130373
130449
|
{
|
|
130374
130450
|
"kind": "field",
|
|
130375
130451
|
"name": "handleSelection",
|
|
@@ -138065,6 +138141,14 @@
|
|
|
138065
138141
|
"description": "The list inside the surface, or nothing where there is no DOM to hold one.\n\nThe optional chain is the server. `renderRoot` is a property Lit's element\nshim does not carry, and this getter is reached from `display`, which is\nread during `render`: without it the select throws on every server render\nand cannot be served at all.\n\nThe other reads of `renderRoot` here are inside callbacks the controllers\ninvoke, and a controller only runs on a connected element, so they cannot\nbe reached from the server and are left plain.",
|
|
138066
138142
|
"readonly": true
|
|
138067
138143
|
},
|
|
138144
|
+
{
|
|
138145
|
+
"kind": "field",
|
|
138146
|
+
"name": "upgradeWatch",
|
|
138147
|
+
"privacy": "protected",
|
|
138148
|
+
"readonly": true,
|
|
138149
|
+
"default": "new UpgradeController( this, () => { this.listbox?.requestUpdate() this.requestUpdate() }, { subtree: true }, )",
|
|
138150
|
+
"description": "Hears an option upgrade after it arrived. The options are this element's\nchildren, which the listbox reaches through a slot and does not watch, so\nboth read them again: the listbox to select the one `value` names, and this\nelement for the words on its trigger."
|
|
138151
|
+
},
|
|
138068
138152
|
{
|
|
138069
138153
|
"kind": "field",
|
|
138070
138154
|
"name": "panel",
|
|
@@ -160781,6 +160865,14 @@
|
|
|
160781
160865
|
"privacy": "private",
|
|
160782
160866
|
"readonly": true
|
|
160783
160867
|
},
|
|
160868
|
+
{
|
|
160869
|
+
"kind": "field",
|
|
160870
|
+
"name": "upgradeWatch",
|
|
160871
|
+
"privacy": "protected",
|
|
160872
|
+
"readonly": true,
|
|
160873
|
+
"default": "new UpgradeController(this, this.handleSlotchange)",
|
|
160874
|
+
"description": "Reads a tag again once it upgrades, so it takes its role and its place."
|
|
160875
|
+
},
|
|
160784
160876
|
{
|
|
160785
160877
|
"kind": "field",
|
|
160786
160878
|
"name": "handleFocusin",
|
|
@@ -174583,6 +174675,13 @@
|
|
|
174583
174675
|
},
|
|
174584
174676
|
"privacy": "private"
|
|
174585
174677
|
},
|
|
174678
|
+
{
|
|
174679
|
+
"kind": "field",
|
|
174680
|
+
"name": "upgradeWatch",
|
|
174681
|
+
"privacy": "protected",
|
|
174682
|
+
"readonly": true,
|
|
174683
|
+
"default": "new UpgradeController(this, () => this.handleItems(), { subtree: true, })"
|
|
174684
|
+
},
|
|
174586
174685
|
{
|
|
174587
174686
|
"kind": "field",
|
|
174588
174687
|
"name": "handleSelection",
|
|
@@ -182498,6 +182597,13 @@
|
|
|
182498
182597
|
},
|
|
182499
182598
|
"privacy": "private"
|
|
182500
182599
|
},
|
|
182600
|
+
{
|
|
182601
|
+
"kind": "field",
|
|
182602
|
+
"name": "upgradeWatch",
|
|
182603
|
+
"privacy": "protected",
|
|
182604
|
+
"readonly": true,
|
|
182605
|
+
"default": "new UpgradeController(this, () => this.syncItems(), { subtree: true, })"
|
|
182606
|
+
},
|
|
182501
182607
|
{
|
|
182502
182608
|
"kind": "field",
|
|
182503
182609
|
"name": "focused",
|
|
@@ -192314,6 +192420,6 @@
|
|
|
192314
192420
|
],
|
|
192315
192421
|
"helix": {
|
|
192316
192422
|
"package": "@fusion.dev/helix-headless",
|
|
192317
|
-
"version": "0.
|
|
192423
|
+
"version": "0.162.1"
|
|
192318
192424
|
}
|
|
192319
192425
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HelixElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { HelixElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
/** One step of a trail written as data, for `items`. */
|
|
4
4
|
export interface BreadcrumbItem {
|
|
@@ -120,6 +120,8 @@ export declare class HelixHeadlessBreadcrumbs extends HelixElement {
|
|
|
120
120
|
private readonly markLast;
|
|
121
121
|
/** New crumbs fold again, as a new `items` does. */
|
|
122
122
|
private readonly handleSlotChange;
|
|
123
|
+
/** Reads a crumb again once it upgrades, so the current one is marked. */
|
|
124
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
123
125
|
/** The crumbs `items` describes, each a crumb of this tier. */
|
|
124
126
|
protected renderItems(): TemplateResult | typeof nothing;
|
|
125
127
|
protected render(): TemplateResult;
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, formatWords, HelixElement, hostAria, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { customElement, formatWords, HelixElement, hostAria, UpgradeController, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { nothing } from 'lit';
|
|
9
9
|
import { property, state } from 'lit/decorators.js';
|
|
10
10
|
import { repeat } from 'lit/directives/repeat.js';
|
|
@@ -55,6 +55,7 @@ let HelixHeadlessBreadcrumbs = class HelixHeadlessBreadcrumbs extends HelixEleme
|
|
|
55
55
|
this.expanded = false;
|
|
56
56
|
this.markLast();
|
|
57
57
|
};
|
|
58
|
+
this.upgradeWatch = new UpgradeController(this, this.handleSlotChange);
|
|
58
59
|
}
|
|
59
60
|
static { this.words = 'helix-breadcrumbs'; }
|
|
60
61
|
get slotted() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChildrenController, HelixElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { ChildrenController, HelixElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import type { HelixHeadlessChatMessage } from '../message/chat-message.js';
|
|
4
4
|
/** One turn handed over as data, which is what `turns` holds. */
|
|
@@ -308,6 +308,11 @@ export declare class HelixHeadlessChat extends HelixHeadlessChat_base {
|
|
|
308
308
|
* never a turn's own text, which a streaming turn rewrites every frame.
|
|
309
309
|
*/
|
|
310
310
|
protected readonly childWatch: ChildrenController;
|
|
311
|
+
/**
|
|
312
|
+
* Hears a message upgrade after it arrived. A message is known by its marker,
|
|
313
|
+
* which an element that has not upgraded lacks, so it was assigned nowhere.
|
|
314
|
+
*/
|
|
315
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
311
316
|
/** Watches the turns' own `state`, which is when one of them settles. */
|
|
312
317
|
private settling;
|
|
313
318
|
/** Watches the turns and the log for size, which scrolling does not report. */
|
|
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
var HelixHeadlessChat_1;
|
|
8
|
-
import { ChildrenController, customElement, drawIcon, focusableElements, formatWords, HelixBeforePinEvent, HelixElement, HelixHistoryEvent, HelixPinEvent, hostAria, MixinCollection, onUnlessFalse, requestChange, VirtualizeController, whenHydrated, words, wordsConverter, } from '@fusion.dev/helix-core';
|
|
8
|
+
import { ChildrenController, customElement, drawIcon, focusableElements, formatWords, HelixBeforePinEvent, HelixElement, HelixHistoryEvent, HelixPinEvent, hostAria, MixinCollection, onUnlessFalse, requestChange, UpgradeController, VirtualizeController, whenHydrated, words, wordsConverter, } from '@fusion.dev/helix-core';
|
|
9
9
|
import { arrowDown } from '@fusion.dev/helix-icons';
|
|
10
10
|
import { nothing } from 'lit';
|
|
11
11
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -63,6 +63,7 @@ let HelixHeadlessChat = class HelixHeadlessChat extends MixinCollection(HelixEle
|
|
|
63
63
|
this.said = 0;
|
|
64
64
|
this.words = TURN_WORDS;
|
|
65
65
|
this.childWatch = new ChildrenController(this, () => this.handleSlotChange());
|
|
66
|
+
this.upgradeWatch = new UpgradeController(this, () => this.handleSlotChange());
|
|
66
67
|
this.settling = undefined;
|
|
67
68
|
this.grower = undefined;
|
|
68
69
|
this.watched = [];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DisabledCascadeController, HelixFormElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { DisabledCascadeController, HelixFormElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { HelixHeadlessCheckbox } from '../../checkbox/root/checkbox-root.js';
|
|
4
4
|
import '../../checkbox/index.js';
|
|
@@ -132,6 +132,8 @@ export declare class HelixHeadlessCheckboxGroup extends HelixHeadlessCheckboxGro
|
|
|
132
132
|
private pending;
|
|
133
133
|
/** Watches for boxes arriving inside a wrapper, which no slot reports. */
|
|
134
134
|
private observer;
|
|
135
|
+
/** Reads a box again once it upgrades, so it takes the group's name and value. */
|
|
136
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
135
137
|
/** The value the required check last judged. */
|
|
136
138
|
private judged;
|
|
137
139
|
/** The boxes `member` is added to. */
|
|
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
var HelixHeadlessCheckboxGroup_1;
|
|
8
|
-
import { commaList, customElement, DisabledCascadeController, HelixBeforeChangeEvent, HelixFormElement, hostAria, MixinField, words, } from '@fusion.dev/helix-core';
|
|
8
|
+
import { commaList, customElement, DisabledCascadeController, HelixBeforeChangeEvent, HelixFormElement, hostAria, MixinField, UpgradeController, words, } from '@fusion.dev/helix-core';
|
|
9
9
|
import { nothing } from 'lit';
|
|
10
10
|
import { property } from 'lit/decorators.js';
|
|
11
11
|
import { html } from 'lit/static-html.js';
|
|
@@ -21,6 +21,7 @@ let HelixHeadlessCheckboxGroup = class HelixHeadlessCheckboxGroup extends MixinF
|
|
|
21
21
|
this.declared = [];
|
|
22
22
|
this.checking = undefined;
|
|
23
23
|
this.pending = false;
|
|
24
|
+
this.upgradeWatch = new UpgradeController(this, undefined, { subtree: true });
|
|
24
25
|
this.watched = new Set();
|
|
25
26
|
this.member = {
|
|
26
27
|
hostUpdated: () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AriaForwardController, HelixFormElement, PopoverController } from '@fusion.dev/helix-core';
|
|
1
|
+
import { AriaForwardController, HelixFormElement, PopoverController, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import '../../listbox/index.js';
|
|
4
4
|
import '../../tag/index.js';
|
|
@@ -376,6 +376,13 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
|
|
|
376
376
|
*/
|
|
377
377
|
get type(): string;
|
|
378
378
|
private get listbox();
|
|
379
|
+
/**
|
|
380
|
+
* Hears an option upgrade after it arrived. The options are this element's
|
|
381
|
+
* children, which the listbox reaches through a slot and does not watch, so
|
|
382
|
+
* both read them again: the listbox to select the one `value` names, and this
|
|
383
|
+
* element for the words in its field.
|
|
384
|
+
*/
|
|
385
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
379
386
|
protected readonly panel: PopoverController;
|
|
380
387
|
/** The values chosen, in the order they were chosen. */
|
|
381
388
|
private get values();
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { AriaForwardController, afterLinkFollowed, countLabel, customElement, DelayController, drawAutofill, drawStatus, formatWords, HelixCreateEvent, HelixFilterEvent, HelixFormElement, handedLocale, MixinControllerOpen, MixinControllerValue, MixinField, MixinTokens, onApple, PopoverController, reportValues, StatusController, submitImplicitly, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { AriaForwardController, afterLinkFollowed, countLabel, customElement, DelayController, drawAutofill, drawStatus, formatWords, HelixCreateEvent, HelixFilterEvent, HelixFormElement, handedLocale, MixinControllerOpen, MixinControllerValue, MixinField, MixinTokens, onApple, PopoverController, reportValues, StatusController, submitImplicitly, UpgradeController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { caretDown } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -50,6 +50,10 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
|
|
|
50
50
|
this.emptied = false;
|
|
51
51
|
this.opening = undefined;
|
|
52
52
|
this.watcher = undefined;
|
|
53
|
+
this.upgradeWatch = new UpgradeController(this, () => {
|
|
54
|
+
this.listbox?.requestUpdate();
|
|
55
|
+
this.requestUpdate();
|
|
56
|
+
}, { subtree: true });
|
|
53
57
|
this.panel = new PopoverController(this, {
|
|
54
58
|
anchor: () => this.partNamed('field'),
|
|
55
59
|
boundary: () => [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HelixElement, KeyboardNavigationController } from '@fusion.dev/helix-core';
|
|
1
|
+
import { HelixElement, KeyboardNavigationController, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { HelixHeadlessListItem } from '../item/list-item.js';
|
|
4
4
|
import { type ListSelectionBehavior, type ListSelectionMode } from '../selection.js';
|
|
@@ -405,6 +405,8 @@ export declare class HelixHeadlessList extends HelixElement {
|
|
|
405
405
|
private askForMore;
|
|
406
406
|
private readonly handleEmptyChange;
|
|
407
407
|
private readonly handleSlotChange;
|
|
408
|
+
/** Reads an item again once it upgrades, so it takes the role the list gives its rows. */
|
|
409
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
408
410
|
}
|
|
409
411
|
declare global {
|
|
410
412
|
interface HTMLElementTagNameMap {
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { auditName, commaList, customElement, deepActiveElement, drawStatus, focusItemOf, formatWords, HelixActionEvent, HelixElement, HelixLoadMoreEvent, hostAria, inlineStep, KeyboardNavigationController, placeKey, pressedOwnControl, ReorderController, requestReorder, requestValue, rovingStop, StatusController, scrollingAncestor, scrollRoom, selectsAll, typeaheadByWords, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { auditName, commaList, customElement, deepActiveElement, drawStatus, focusItemOf, formatWords, HelixActionEvent, HelixElement, HelixLoadMoreEvent, hostAria, inlineStep, KeyboardNavigationController, placeKey, pressedOwnControl, ReorderController, requestReorder, requestValue, rovingStop, StatusController, scrollingAncestor, scrollRoom, selectsAll, typeaheadByWords, UpgradeController, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html, nothing } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import { HelixHeadlessListItem } from '../item/list-item.js';
|
|
@@ -138,6 +138,7 @@ let HelixHeadlessList = class HelixHeadlessList extends HelixElement {
|
|
|
138
138
|
this.rowsChanged = true;
|
|
139
139
|
this.requestUpdate();
|
|
140
140
|
};
|
|
141
|
+
this.upgradeWatch = new UpgradeController(this, this.handleSlotChange);
|
|
141
142
|
}
|
|
142
143
|
static { this.words = 'helix-list'; }
|
|
143
144
|
blocked(row) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AriaForwardController, type DataOptionItem, DisabledCascadeController, HelixFormElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { AriaForwardController, type DataOptionItem, DisabledCascadeController, HelixFormElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { HelixHeadlessOption } from '../../option/root/option-root.js';
|
|
4
4
|
declare const HelixHeadlessListbox_base: (new (...args: any[]) => import("@fusion.dev/helix-core").CollectionElement) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
|
|
@@ -436,6 +436,7 @@ export declare class HelixHeadlessListbox extends HelixHeadlessListbox_base {
|
|
|
436
436
|
* exactly as it moves through a flat one.
|
|
437
437
|
*/
|
|
438
438
|
get options(): HelixHeadlessOption[];
|
|
439
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
439
440
|
/**
|
|
440
441
|
* The elements of one kind in the list: its options, its groups or its
|
|
441
442
|
* rules. Walks the tree, and walks *through* a slot when it meets one.
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { AriaForwardController, centerInView, chosenValues, columnStep, countLabel, customElement, DelayController, DisabledCascadeController, drawAutofill, endInSight, formatWords, HelixFilterEvent, HelixFormElement, HelixLoadMoreEvent, hostAria, inlineStep, MixinCollection, MixinControllerValue, MixinField, markMatches, OptionWindowController, onApple, pageRows, rangeAdd, reportValues, requestChange, scrollItemIntoView, selectsAll, Typeahead, toggleEvery, typesCharacter, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { AriaForwardController, centerInView, chosenValues, columnStep, countLabel, customElement, DelayController, DisabledCascadeController, drawAutofill, endInSight, formatWords, HelixFilterEvent, HelixFormElement, HelixLoadMoreEvent, hostAria, inlineStep, MixinCollection, MixinControllerValue, MixinField, markMatches, OptionWindowController, onApple, pageRows, rangeAdd, reportValues, requestChange, scrollItemIntoView, selectsAll, Typeahead, toggleEvery, typesCharacter, UpgradeController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { magnifyingGlass } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { html, nothing } from 'lit';
|
|
10
10
|
import { property, state } from 'lit/decorators.js';
|
|
@@ -51,6 +51,7 @@ let HelixHeadlessListbox = class HelixHeadlessListbox extends MixinCollection(Mi
|
|
|
51
51
|
items: () => this.options,
|
|
52
52
|
});
|
|
53
53
|
this.chosenAgain = undefined;
|
|
54
|
+
this.upgradeWatch = new UpgradeController(this, undefined, { subtree: true });
|
|
54
55
|
this.handleSelection = (event) => {
|
|
55
56
|
if (event.detail.href !== undefined) {
|
|
56
57
|
return;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChildrenController, HelixElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { ChildrenController, HelixElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import type { HelixHeadlessNotification } from '../notification/notification.js';
|
|
4
4
|
declare const HelixHeadlessNotificationGroup_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerOpenInterface) & typeof HelixElement;
|
|
@@ -140,7 +140,10 @@ export declare class HelixHeadlessNotificationGroup extends HelixHeadlessNotific
|
|
|
140
140
|
* the group is in is asked to update as well, since it counts the group's
|
|
141
141
|
* rows and does not watch inside the group.
|
|
142
142
|
*/
|
|
143
|
+
private readonly recount;
|
|
143
144
|
protected readonly childWatch: ChildrenController;
|
|
145
|
+
/** Hears a row upgrade after it arrived, which neither the slot nor `childWatch` reports. */
|
|
146
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
144
147
|
private readonly handleToggle;
|
|
145
148
|
protected render(): TemplateResult;
|
|
146
149
|
}
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { assignSlots, ChildrenController, customElement, HelixElement, hostAria, MixinControllerOpen, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { assignSlots, ChildrenController, customElement, HelixElement, hostAria, MixinControllerOpen, UpgradeController, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html, nothing } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
const TRIGGER_ID = 'trigger';
|
|
@@ -16,10 +16,12 @@ let HelixHeadlessNotificationGroup = class HelixHeadlessNotificationGroup extend
|
|
|
16
16
|
this.collapsible = false;
|
|
17
17
|
this.label = '';
|
|
18
18
|
this.isNotificationGroup = true;
|
|
19
|
-
this.
|
|
19
|
+
this.recount = () => {
|
|
20
20
|
this.requestUpdate();
|
|
21
21
|
this.parentElement?.requestUpdate?.();
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
|
+
this.childWatch = new ChildrenController(this, this.recount);
|
|
24
|
+
this.upgradeWatch = new UpgradeController(this, this.recount);
|
|
23
25
|
this.handleToggle = () => {
|
|
24
26
|
this.toggleOpen();
|
|
25
27
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChildrenController, HelixElement } from '@fusion.dev/helix-core';
|
|
1
|
+
import { ChildrenController, HelixElement, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { nothing, type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import type { HelixHeadlessNotificationGroup } from '../group/notification-group.js';
|
|
4
4
|
import type { HelixHeadlessNotification } from '../notification/notification.js';
|
|
@@ -239,6 +239,11 @@ export declare class HelixHeadlessNotifications extends HelixHeadlessNotificatio
|
|
|
239
239
|
* a group is the group's to hear, and the group asks the feed to count again.
|
|
240
240
|
*/
|
|
241
241
|
protected readonly childWatch: ChildrenController;
|
|
242
|
+
/**
|
|
243
|
+
* Hears a row upgrade after it arrived. A row is known by its marker, which
|
|
244
|
+
* an element that has not upgraded lacks, so the row was assigned nowhere.
|
|
245
|
+
*/
|
|
246
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
242
247
|
/**
|
|
243
248
|
* An item's own read event, heard on the way past, so the count follows.
|
|
244
249
|
*
|
|
@@ -328,7 +333,7 @@ export declare class HelixHeadlessNotifications extends HelixHeadlessNotificatio
|
|
|
328
333
|
* moment the markup is parsed. The rows themselves come from `items`, which
|
|
329
334
|
* does need them upgraded, and that is the honest limit rather than a claim
|
|
330
335
|
* this had made the other way: a row that upgrades late is counted on the next
|
|
331
|
-
* update, which
|
|
336
|
+
* update, which `UpgradeController` asks for when its definition arrives.
|
|
332
337
|
*/
|
|
333
338
|
private markMedia;
|
|
334
339
|
/**
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { assignSlots, ChildrenController, customElement, DelayController, deepContains, focusableElements, formatWords, HelixElement, HelixLoadMoreEvent, HelixReadEvent, hostAria, MixinCollection, markRegion, rovingStop, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { assignSlots, ChildrenController, customElement, DelayController, deepContains, focusableElements, formatWords, HelixElement, HelixLoadMoreEvent, HelixReadEvent, hostAria, MixinCollection, markRegion, rovingStop, UpgradeController, whenHydrated, words, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html, nothing } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import { feedStep } from '../feed-keys.js';
|
|
@@ -24,6 +24,7 @@ let HelixHeadlessNotifications = class HelixHeadlessNotifications extends MixinC
|
|
|
24
24
|
this.requestUpdate();
|
|
25
25
|
};
|
|
26
26
|
this.childWatch = new ChildrenController(this, this.handleSlotChange);
|
|
27
|
+
this.upgradeWatch = new UpgradeController(this, this.handleSlotChange);
|
|
27
28
|
this.handleRead = () => {
|
|
28
29
|
queueMicrotask(() => this.requestUpdate());
|
|
29
30
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DisabledCascadeController, HelixFormElement, KeyboardNavigationController } from '@fusion.dev/helix-core';
|
|
1
|
+
import { DisabledCascadeController, HelixFormElement, KeyboardNavigationController, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { HelixHeadlessRadio } from '../root/radio-root.js';
|
|
4
4
|
declare const HelixHeadlessRadioGroup_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
|
|
@@ -123,6 +123,7 @@ export declare class HelixHeadlessRadioGroup extends HelixHeadlessRadioGroup_bas
|
|
|
123
123
|
*/
|
|
124
124
|
get items(): HelixHeadlessRadio[];
|
|
125
125
|
private observer;
|
|
126
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
126
127
|
/**
|
|
127
128
|
* Announces before it applies, so a listener can refuse the change.
|
|
128
129
|
*
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { customElement, DisabledCascadeController, HelixFormElement, hostAria, KeyboardNavigationController, MixinControllerValue, MixinField, words, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { customElement, DisabledCascadeController, HelixFormElement, hostAria, KeyboardNavigationController, MixinControllerValue, MixinField, UpgradeController, words, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { html } from 'lit';
|
|
9
9
|
import { property } from 'lit/decorators.js';
|
|
10
10
|
import { HelixHeadlessRadio } from '../root/radio-root.js';
|
|
@@ -22,6 +22,7 @@ let HelixHeadlessRadioGroup = class HelixHeadlessRadioGroup extends MixinControl
|
|
|
22
22
|
this.cascade = new DisabledCascadeController(this, {
|
|
23
23
|
items: () => this.items,
|
|
24
24
|
});
|
|
25
|
+
this.upgradeWatch = new UpgradeController(this, undefined, { subtree: true });
|
|
25
26
|
this.handleSelection = (event) => {
|
|
26
27
|
event.stopPropagation();
|
|
27
28
|
if (this.readOnly) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AriaForwardController, type DataOptionItem, HelixFormElement, PopoverController } from '@fusion.dev/helix-core';
|
|
1
|
+
import { AriaForwardController, type DataOptionItem, HelixFormElement, PopoverController, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { type HelixHeadlessOption } from '../../option/root/option-root.js';
|
|
4
4
|
import '../../listbox/index.js';
|
|
@@ -251,6 +251,13 @@ export declare class HelixHeadlessSelect extends HelixHeadlessSelect_base {
|
|
|
251
251
|
* be reached from the server and are left plain.
|
|
252
252
|
*/
|
|
253
253
|
private get listbox();
|
|
254
|
+
/**
|
|
255
|
+
* Hears an option upgrade after it arrived. The options are this element's
|
|
256
|
+
* children, which the listbox reaches through a slot and does not watch, so
|
|
257
|
+
* both read them again: the listbox to select the one `value` names, and this
|
|
258
|
+
* element for the words on its trigger.
|
|
259
|
+
*/
|
|
260
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
254
261
|
protected readonly panel: PopoverController;
|
|
255
262
|
/**
|
|
256
263
|
* What the trigger says: the chosen options' words, or the placeholder.
|
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { AriaForwardController, afterLinkFollowed, chosenValues, customElement, dataOptions, drawAutofill, drawStatus, HelixFormElement, hostAria, hostWords, isRtl, MixinControllerOpen, MixinControllerValue, MixinField, onApple, PopoverController, reportValues, StatusController, sideOf, typesCharacter, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
7
|
+
import { AriaForwardController, afterLinkFollowed, chosenValues, customElement, dataOptions, drawAutofill, drawStatus, HelixFormElement, hostAria, hostWords, isRtl, MixinControllerOpen, MixinControllerValue, MixinField, onApple, PopoverController, reportValues, StatusController, sideOf, typesCharacter, UpgradeController, words, wordsLocale, } from '@fusion.dev/helix-core';
|
|
8
8
|
import { caretDown } from '@fusion.dev/helix-icons';
|
|
9
9
|
import { nothing } from 'lit';
|
|
10
10
|
import { property } from 'lit/decorators.js';
|
|
@@ -36,6 +36,10 @@ let HelixHeadlessSelect = class HelixHeadlessSelect extends MixinControllerOpen(
|
|
|
36
36
|
this.placeholder = 'Choose';
|
|
37
37
|
this.position = 'floating';
|
|
38
38
|
this.valueMissingMessage = 'Choose one to continue.';
|
|
39
|
+
this.upgradeWatch = new UpgradeController(this, () => {
|
|
40
|
+
this.listbox?.requestUpdate();
|
|
41
|
+
this.requestUpdate();
|
|
42
|
+
}, { subtree: true });
|
|
39
43
|
this.panel = new PopoverController(this, {
|
|
40
44
|
anchor: () => this.partNamed('trigger'),
|
|
41
45
|
boundary: () => [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HelixElement, KeyboardNavigationController, type SelectionMode } from '@fusion.dev/helix-core';
|
|
1
|
+
import { HelixElement, KeyboardNavigationController, type SelectionMode, UpgradeController } from '@fusion.dev/helix-core';
|
|
2
2
|
import { type PropertyValues, type TemplateResult } from 'lit';
|
|
3
3
|
import { HelixHeadlessTag } from '../root/tag-root.js';
|
|
4
4
|
/** How many tags a group lets a reader select: core's `SelectionMode`. */
|
|
@@ -179,6 +179,8 @@ export declare class HelixHeadlessTagGroup extends HelixElement {
|
|
|
179
179
|
*/
|
|
180
180
|
private readonly handleDismiss;
|
|
181
181
|
private readonly handleSlotchange;
|
|
182
|
+
/** Reads a tag again once it upgrades, so it takes its role and its place. */
|
|
183
|
+
protected readonly upgradeWatch: UpgradeController;
|
|
182
184
|
private readonly handleFocusin;
|
|
183
185
|
connectedCallback(): void;
|
|
184
186
|
disconnectedCallback(): void;
|