@sekiui/elements 0.1.6 → 0.1.7
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/dist/cjs/accordion-ids-Cjq6aIVd.js +42 -0
- package/dist/cjs/direction-Dt-r6_ec.js +14 -0
- package/dist/cjs/host-id-C3XieWsk.js +32 -0
- package/dist/cjs/layout-DR0fTNAb.js +109 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/seki-accordion-content.cjs.entry.js +27 -25
- package/dist/cjs/seki-accordion-item.cjs.entry.js +13 -29
- package/dist/cjs/seki-accordion-trigger.cjs.entry.js +36 -28
- package/dist/cjs/seki-accordion.cjs.entry.js +18 -12
- package/dist/cjs/seki-carousel-dots.cjs.entry.js +15 -7
- package/dist/cjs/seki-carousel-next.cjs.entry.js +1 -1
- package/dist/cjs/seki-carousel-previous.cjs.entry.js +1 -1
- package/dist/cjs/seki-carousel.cjs.entry.js +51 -6
- package/dist/cjs/seki-combobox.cjs.entry.js +80 -1
- package/dist/cjs/seki-context-menu-content.cjs.entry.js +13 -16
- package/dist/cjs/seki-context-menu.cjs.entry.js +14 -9
- package/dist/cjs/seki-dropdown-menu-content.cjs.entry.js +13 -16
- package/dist/cjs/seki-dropdown-menu-trigger.cjs.entry.js +7 -15
- package/dist/cjs/seki-dropdown-menu.cjs.entry.js +14 -9
- package/dist/cjs/seki-hover-card-content.cjs.entry.js +27 -33
- package/dist/cjs/seki-hover-card-trigger.cjs.entry.js +10 -25
- package/dist/cjs/seki-hover-card.cjs.entry.js +7 -6
- package/dist/cjs/seki-radio-group-item.cjs.entry.js +18 -1
- package/dist/cjs/seki-radio-group.cjs.entry.js +8 -1
- package/dist/cjs/seki-resizable-handle.cjs.entry.js +72 -15
- package/dist/cjs/seki-resizable-panel-group.cjs.entry.js +11 -107
- package/dist/cjs/seki-resizable-panel.cjs.entry.js +5 -3
- package/dist/cjs/seki-tabs-content.cjs.entry.js +21 -19
- package/dist/cjs/seki-tabs-list.cjs.entry.js +8 -24
- package/dist/cjs/seki-tabs-trigger.cjs.entry.js +23 -31
- package/dist/cjs/seki-tabs.cjs.entry.js +15 -18
- package/dist/cjs/sekiui.cjs.js +1 -1
- package/dist/cjs/{tab-ids-BzpIZnUS.js → tab-ids-BOdn1Fu2.js} +14 -0
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/accordion/accordion-ids.js +36 -0
- package/dist/collection/components/accordion/seki-accordion-content.js +27 -25
- package/dist/collection/components/accordion/seki-accordion-item.js +12 -29
- package/dist/collection/components/accordion/seki-accordion-trigger.css +6 -2
- package/dist/collection/components/accordion/seki-accordion-trigger.js +37 -28
- package/dist/collection/components/accordion/seki-accordion.js +40 -11
- package/dist/collection/components/carousel/seki-carousel-dots.js +15 -7
- package/dist/collection/components/carousel/seki-carousel-navigation.css +9 -4
- package/dist/collection/components/carousel/seki-carousel.js +51 -6
- package/dist/collection/components/combobox/seki-combobox.js +103 -1
- package/dist/collection/components/context-menu/seki-context-menu-content.js +13 -16
- package/dist/collection/components/context-menu/seki-context-menu.js +31 -9
- package/dist/collection/components/dropdown-menu/seki-dropdown-menu-content.js +13 -16
- package/dist/collection/components/dropdown-menu/seki-dropdown-menu-trigger.js +7 -15
- package/dist/collection/components/dropdown-menu/seki-dropdown-menu.js +31 -9
- package/dist/collection/components/hover-card/seki-hover-card-content.js +27 -33
- package/dist/collection/components/hover-card/seki-hover-card-trigger.js +10 -25
- package/dist/collection/components/hover-card/seki-hover-card.js +24 -6
- package/dist/collection/components/radio-group/seki-radio-group-item.js +18 -1
- package/dist/collection/components/radio-group/seki-radio-group.js +25 -1
- package/dist/collection/components/resizable/layout.js +2 -0
- package/dist/collection/components/resizable/seki-resizable-handle.css +6 -2
- package/dist/collection/components/resizable/seki-resizable-handle.js +71 -14
- package/dist/collection/components/resizable/seki-resizable-panel-group.js +5 -2
- package/dist/collection/components/resizable/seki-resizable-panel.js +5 -3
- package/dist/collection/components/tabs/seki-tabs-content.js +24 -19
- package/dist/collection/components/tabs/seki-tabs-list.js +8 -24
- package/dist/collection/components/tabs/seki-tabs-trigger.js +24 -19
- package/dist/collection/components/tabs/seki-tabs.js +34 -18
- package/dist/collection/components/tabs/tab-ids.js +13 -0
- package/dist/collection/utils/host-id.js +27 -0
- package/dist/components/p-BD28aG2U.js +12 -0
- package/dist/components/p-BuvZJ6_r.js +39 -0
- package/dist/components/p-DmN32Mrm.js +103 -0
- package/dist/components/{p-CmuSriLz.js → p-bxPJJ6k4.js} +14 -1
- package/dist/components/p-ppXRAghy.js +29 -0
- package/dist/components/seki-accordion-content.js +27 -25
- package/dist/components/seki-accordion-item.js +12 -29
- package/dist/components/seki-accordion-trigger.js +38 -29
- package/dist/components/seki-accordion.js +22 -13
- package/dist/components/seki-carousel-dots.js +15 -7
- package/dist/components/seki-carousel-next.js +1 -1
- package/dist/components/seki-carousel-previous.js +1 -1
- package/dist/components/seki-carousel.js +51 -6
- package/dist/components/seki-combobox.js +81 -2
- package/dist/components/seki-context-menu-content.js +13 -16
- package/dist/components/seki-context-menu.js +14 -9
- package/dist/components/seki-dropdown-menu-content.js +13 -16
- package/dist/components/seki-dropdown-menu-trigger.js +7 -15
- package/dist/components/seki-dropdown-menu.js +14 -9
- package/dist/components/seki-hover-card-content.js +27 -33
- package/dist/components/seki-hover-card-trigger.js +10 -25
- package/dist/components/seki-hover-card.js +7 -6
- package/dist/components/seki-radio-group-item.js +18 -1
- package/dist/components/seki-radio-group.js +8 -1
- package/dist/components/seki-resizable-handle.js +72 -15
- package/dist/components/seki-resizable-panel-group.js +6 -102
- package/dist/components/seki-resizable-panel.js +5 -3
- package/dist/components/seki-tabs-content.js +23 -19
- package/dist/components/seki-tabs-list.js +8 -24
- package/dist/components/seki-tabs-trigger.js +25 -31
- package/dist/components/seki-tabs.js +16 -18
- package/dist/esm/accordion-ids-D58tRFZv.js +39 -0
- package/dist/esm/direction-BD28aG2U.js +12 -0
- package/dist/esm/host-id-ppXRAghy.js +29 -0
- package/dist/esm/layout-DmN32Mrm.js +103 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/seki-accordion-content.entry.js +27 -25
- package/dist/esm/seki-accordion-item.entry.js +13 -29
- package/dist/esm/seki-accordion-trigger.entry.js +36 -28
- package/dist/esm/seki-accordion.entry.js +18 -12
- package/dist/esm/seki-carousel-dots.entry.js +15 -7
- package/dist/esm/seki-carousel-next.entry.js +1 -1
- package/dist/esm/seki-carousel-previous.entry.js +1 -1
- package/dist/esm/seki-carousel.entry.js +51 -6
- package/dist/esm/seki-combobox.entry.js +80 -1
- package/dist/esm/seki-context-menu-content.entry.js +13 -16
- package/dist/esm/seki-context-menu.entry.js +14 -9
- package/dist/esm/seki-dropdown-menu-content.entry.js +13 -16
- package/dist/esm/seki-dropdown-menu-trigger.entry.js +7 -15
- package/dist/esm/seki-dropdown-menu.entry.js +14 -9
- package/dist/esm/seki-hover-card-content.entry.js +27 -33
- package/dist/esm/seki-hover-card-trigger.entry.js +10 -25
- package/dist/esm/seki-hover-card.entry.js +7 -6
- package/dist/esm/seki-radio-group-item.entry.js +18 -1
- package/dist/esm/seki-radio-group.entry.js +8 -1
- package/dist/esm/seki-resizable-handle.entry.js +72 -15
- package/dist/esm/seki-resizable-panel-group.entry.js +6 -102
- package/dist/esm/seki-resizable-panel.entry.js +5 -3
- package/dist/esm/seki-tabs-content.entry.js +21 -19
- package/dist/esm/seki-tabs-list.entry.js +8 -24
- package/dist/esm/seki-tabs-trigger.entry.js +22 -30
- package/dist/esm/seki-tabs.entry.js +15 -18
- package/dist/esm/sekiui.js +1 -1
- package/dist/esm/{tab-ids-CmuSriLz.js → tab-ids-bxPJJ6k4.js} +14 -1
- package/dist/sekiui/p-05646b3d.entry.js +1 -0
- package/dist/sekiui/p-06307251.entry.js +1 -0
- package/dist/sekiui/p-13206751.entry.js +1 -0
- package/dist/sekiui/p-2681547f.entry.js +1 -0
- package/dist/sekiui/p-34880473.entry.js +1 -0
- package/dist/sekiui/{p-3a950a93.entry.js → p-44c4e0ca.entry.js} +1 -1
- package/dist/sekiui/p-45d3e21b.entry.js +1 -0
- package/dist/sekiui/p-5a222bfa.entry.js +1 -0
- package/dist/sekiui/p-68d2ef55.entry.js +1 -0
- package/dist/sekiui/p-78df4dc1.entry.js +1 -0
- package/dist/sekiui/p-81e180e1.entry.js +1 -0
- package/dist/sekiui/{p-5cb2a9fc.entry.js → p-99aba093.entry.js} +1 -1
- package/dist/sekiui/p-BD28aG2U.js +1 -0
- package/dist/sekiui/p-BuvZJ6_r.js +1 -0
- package/dist/sekiui/p-DmN32Mrm.js +1 -0
- package/dist/sekiui/p-ad26ccd9.entry.js +1 -0
- package/dist/sekiui/p-b3260d62.entry.js +1 -0
- package/dist/sekiui/p-bxPJJ6k4.js +1 -0
- package/dist/sekiui/{p-d26b63d0.entry.js → p-c906ad1e.entry.js} +1 -1
- package/dist/sekiui/p-cb621f86.entry.js +1 -0
- package/dist/sekiui/p-d4863b02.entry.js +1 -0
- package/dist/sekiui/p-d81d442f.entry.js +1 -0
- package/dist/sekiui/p-d9a625f4.entry.js +1 -0
- package/dist/sekiui/p-db922f6f.entry.js +1 -0
- package/dist/sekiui/p-e1fbadc1.entry.js +1 -0
- package/dist/sekiui/p-e3dc7f49.entry.js +1 -0
- package/dist/sekiui/{p-8a96f54c.entry.js → p-ea8654dc.entry.js} +1 -1
- package/dist/sekiui/p-eb76021c.entry.js +1 -0
- package/dist/sekiui/p-f049f47a.entry.js +1 -0
- package/dist/sekiui/p-f0650660.entry.js +1 -0
- package/dist/sekiui/p-ppXRAghy.js +1 -0
- package/dist/sekiui/sekiui.esm.js +1 -1
- package/dist/types/components/accordion/accordion-ids.d.ts +17 -0
- package/dist/types/components/accordion/seki-accordion-content.d.ts +3 -3
- package/dist/types/components/accordion/seki-accordion-item.d.ts +2 -9
- package/dist/types/components/accordion/seki-accordion-trigger.d.ts +4 -4
- package/dist/types/components/accordion/seki-accordion.d.ts +7 -2
- package/dist/types/components/carousel/seki-carousel.d.ts +10 -0
- package/dist/types/components/combobox/seki-combobox.d.ts +13 -0
- package/dist/types/components/context-menu/seki-context-menu-content.d.ts +3 -3
- package/dist/types/components/context-menu/seki-context-menu.d.ts +6 -0
- package/dist/types/components/dropdown-menu/seki-dropdown-menu-content.d.ts +3 -3
- package/dist/types/components/dropdown-menu/seki-dropdown-menu-trigger.d.ts +2 -4
- package/dist/types/components/dropdown-menu/seki-dropdown-menu.d.ts +6 -0
- package/dist/types/components/hover-card/seki-hover-card-content.d.ts +3 -1
- package/dist/types/components/hover-card/seki-hover-card-trigger.d.ts +2 -2
- package/dist/types/components/hover-card/seki-hover-card.d.ts +5 -1
- package/dist/types/components/radio-group/seki-radio-group-item.d.ts +3 -0
- package/dist/types/components/radio-group/seki-radio-group.d.ts +14 -0
- package/dist/types/components/resizable/layout.d.ts +2 -0
- package/dist/types/components/resizable/seki-resizable-handle.d.ts +13 -0
- package/dist/types/components/resizable/seki-resizable-panel-group.d.ts +1 -0
- package/dist/types/components/resizable/types.d.ts +2 -0
- package/dist/types/components/tabs/seki-tabs-content.d.ts +3 -4
- package/dist/types/components/tabs/seki-tabs-list.d.ts +2 -5
- package/dist/types/components/tabs/seki-tabs-trigger.d.ts +3 -4
- package/dist/types/components/tabs/seki-tabs.d.ts +8 -2
- package/dist/types/components/tabs/tab-ids.d.ts +5 -0
- package/dist/types/components.d.ts +14 -0
- package/dist/types/utils/host-id.d.ts +7 -0
- package/package.json +1 -1
- package/dist/sekiui/p-00ed0a52.entry.js +0 -1
- package/dist/sekiui/p-02fe58f7.entry.js +0 -1
- package/dist/sekiui/p-044e875d.entry.js +0 -1
- package/dist/sekiui/p-1971d77d.entry.js +0 -1
- package/dist/sekiui/p-233a4393.entry.js +0 -1
- package/dist/sekiui/p-2622ca4c.entry.js +0 -1
- package/dist/sekiui/p-28c64e07.entry.js +0 -1
- package/dist/sekiui/p-2bd22398.entry.js +0 -1
- package/dist/sekiui/p-368d2d15.entry.js +0 -1
- package/dist/sekiui/p-49742de9.entry.js +0 -1
- package/dist/sekiui/p-5bfb96fd.entry.js +0 -1
- package/dist/sekiui/p-5e596590.entry.js +0 -1
- package/dist/sekiui/p-78c8c4bf.entry.js +0 -1
- package/dist/sekiui/p-88ba7051.entry.js +0 -1
- package/dist/sekiui/p-90387022.entry.js +0 -1
- package/dist/sekiui/p-CmuSriLz.js +0 -1
- package/dist/sekiui/p-af71afe5.entry.js +0 -1
- package/dist/sekiui/p-b26b3102.entry.js +0 -1
- package/dist/sekiui/p-b43f6733.entry.js +0 -1
- package/dist/sekiui/p-bf687983.entry.js +0 -1
- package/dist/sekiui/p-eafe8a84.entry.js +0 -1
- package/dist/sekiui/p-ec0d8978.entry.js +0 -1
- package/dist/sekiui/p-f418ba3a.entry.js +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { composedContains, getDeepActiveElement } from "../../utils/menu-navigation";
|
|
3
3
|
import { OverlayLayer } from "../../utils/overlay";
|
|
4
|
+
import { publishContext } from "../../utils/context-bridge";
|
|
4
5
|
/**
|
|
5
6
|
* Context Menu component - right-click context menu with items
|
|
6
7
|
*
|
|
@@ -42,6 +43,9 @@ export class SekiContextMenu {
|
|
|
42
43
|
}
|
|
43
44
|
componentWillLoad() {
|
|
44
45
|
this._isOpen = this.open;
|
|
46
|
+
// Parts already upgraded hear this; parts that upgrade later read it when
|
|
47
|
+
// they connect (#384).
|
|
48
|
+
this.publish();
|
|
45
49
|
}
|
|
46
50
|
openChanged(newValue) {
|
|
47
51
|
this._isOpen = newValue;
|
|
@@ -55,6 +59,7 @@ export class SekiContextMenu {
|
|
|
55
59
|
}
|
|
56
60
|
// Programmatic `menuEl.open = x` must notify already-mounted children the
|
|
57
61
|
// same way openMenu()/closeMenu() do (found during the #261 audit).
|
|
62
|
+
this.publish();
|
|
58
63
|
this.sekiOpenChange.emit(newValue);
|
|
59
64
|
}
|
|
60
65
|
/**
|
|
@@ -71,8 +76,7 @@ export class SekiContextMenu {
|
|
|
71
76
|
// Context must be refreshed BEFORE `this.open = true` below — same
|
|
72
77
|
// ordering reason as seki-dropdown-menu.tsx's openMenu() (found during
|
|
73
78
|
// #268; see that file's comment for the full explanation).
|
|
74
|
-
|
|
75
|
-
this.el._contextMenuContext = this.getContext();
|
|
79
|
+
this.publish();
|
|
76
80
|
this.open = true;
|
|
77
81
|
this.setupClickOutside();
|
|
78
82
|
}
|
|
@@ -84,8 +88,7 @@ export class SekiContextMenu {
|
|
|
84
88
|
return;
|
|
85
89
|
this._isOpen = false;
|
|
86
90
|
// Same reordering as openMenu() above, same reason.
|
|
87
|
-
|
|
88
|
-
this.el._contextMenuContext = this.getContext();
|
|
91
|
+
this.publish();
|
|
89
92
|
this.open = false;
|
|
90
93
|
this.removeClickOutside();
|
|
91
94
|
}
|
|
@@ -145,6 +148,9 @@ export class SekiContextMenu {
|
|
|
145
148
|
this.clickOutsideHandler = undefined;
|
|
146
149
|
}
|
|
147
150
|
}
|
|
151
|
+
publish() {
|
|
152
|
+
publishContext(this.el, '_contextMenuContext', this.getContext(), this.contextChange);
|
|
153
|
+
}
|
|
148
154
|
getContext() {
|
|
149
155
|
return {
|
|
150
156
|
isOpen: this._isOpen,
|
|
@@ -155,15 +161,13 @@ export class SekiContextMenu {
|
|
|
155
161
|
};
|
|
156
162
|
}
|
|
157
163
|
componentDidLoad() {
|
|
158
|
-
|
|
159
|
-
this.el._contextMenuContext = this.getContext();
|
|
164
|
+
this.publish();
|
|
160
165
|
if (this._isOpen) {
|
|
161
166
|
this.setupClickOutside();
|
|
162
167
|
}
|
|
163
168
|
}
|
|
164
169
|
componentDidUpdate() {
|
|
165
|
-
|
|
166
|
-
this.el._contextMenuContext = this.getContext();
|
|
170
|
+
this.publish();
|
|
167
171
|
}
|
|
168
172
|
componentDidRender() {
|
|
169
173
|
this.layer.setActive(this._isOpen);
|
|
@@ -173,7 +177,7 @@ export class SekiContextMenu {
|
|
|
173
177
|
this.layer.setActive(false);
|
|
174
178
|
}
|
|
175
179
|
render() {
|
|
176
|
-
return (h(Host, { key: '
|
|
180
|
+
return (h(Host, { key: '98e6c7a6214ca112d2f81bf3a9e09fc62eacdd14', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: '2a9b0153bc1bff0950b67c5ef0b0c13ffe75ee35', part: "context-menu", class: "context-menu" }, h("slot", { key: '5d7589d88883ba9d02d9d9489635f6a65d9b3a8e' }))));
|
|
177
181
|
}
|
|
178
182
|
static get is() { return "seki-context-menu"; }
|
|
179
183
|
static get encapsulation() { return "shadow"; }
|
|
@@ -249,6 +253,24 @@ export class SekiContextMenu {
|
|
|
249
253
|
"resolved": "string",
|
|
250
254
|
"references": {}
|
|
251
255
|
}
|
|
256
|
+
}, {
|
|
257
|
+
"method": "contextChange",
|
|
258
|
+
"name": "sekiContextChange",
|
|
259
|
+
"bubbles": true,
|
|
260
|
+
"cancelable": true,
|
|
261
|
+
"composed": true,
|
|
262
|
+
"docs": {
|
|
263
|
+
"tags": [{
|
|
264
|
+
"name": "internal",
|
|
265
|
+
"text": undefined
|
|
266
|
+
}],
|
|
267
|
+
"text": "Internal: notifies the context menu parts that the published context changed."
|
|
268
|
+
},
|
|
269
|
+
"complexType": {
|
|
270
|
+
"original": "void",
|
|
271
|
+
"resolved": "void",
|
|
272
|
+
"references": {}
|
|
273
|
+
}
|
|
252
274
|
}];
|
|
253
275
|
}
|
|
254
276
|
static get methods() {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { computeAnchoredPosition } from "../../utils/positioning";
|
|
3
3
|
import { clearTypeahead, focusFirstMenuItem, handleMenuKeyDown } from "../../utils/menu-navigation";
|
|
4
|
+
import { ContextConsumer } from "../../utils/context-bridge";
|
|
4
5
|
const NAV_CONFIG = {
|
|
5
6
|
itemSelector: 'seki-dropdown-menu-item, seki-dropdown-menu-checkbox, seki-dropdown-menu-radio, seki-dropdown-menu-sub',
|
|
6
7
|
subContentSelector: 'seki-dropdown-menu-sub [slot="content"]',
|
|
@@ -15,17 +16,20 @@ const NAV_CONFIG = {
|
|
|
15
16
|
export class SekiDropdownMenuContent {
|
|
16
17
|
constructor() {
|
|
17
18
|
this.typeahead = { buffer: '' };
|
|
18
|
-
this.
|
|
19
|
+
this.hasLoaded = false;
|
|
20
|
+
this.menu = new ContextConsumer('seki-dropdown-menu', '_dropdownMenuContext', (context) => {
|
|
19
21
|
var _a;
|
|
20
|
-
const
|
|
22
|
+
const wasOpen = this._isOpen;
|
|
21
23
|
this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
|
|
22
|
-
|
|
24
|
+
// Focus the first item when the menu opens after mount; an initially open
|
|
25
|
+
// menu keeps focus where it is, as before.
|
|
26
|
+
if (this.hasLoaded && this._isOpen && !wasOpen) {
|
|
23
27
|
requestAnimationFrame(() => {
|
|
24
28
|
this.updatePosition();
|
|
25
29
|
void focusFirstMenuItem(this.el, NAV_CONFIG);
|
|
26
30
|
});
|
|
27
31
|
}
|
|
28
|
-
};
|
|
32
|
+
});
|
|
29
33
|
/**
|
|
30
34
|
* Offset from trigger
|
|
31
35
|
*/
|
|
@@ -34,19 +38,13 @@ export class SekiDropdownMenuContent {
|
|
|
34
38
|
this._position = { top: '0', left: '0' };
|
|
35
39
|
}
|
|
36
40
|
getContext() {
|
|
37
|
-
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
-
return menu ? menu._dropdownMenuContext : null;
|
|
41
|
+
return this.menu.context;
|
|
40
42
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const context = this.getContext();
|
|
44
|
-
this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
|
|
43
|
+
connectedCallback() {
|
|
44
|
+
this.menu.connect(this.el);
|
|
45
45
|
}
|
|
46
46
|
componentDidLoad() {
|
|
47
|
-
|
|
48
|
-
this.menuEl = (_a = this.el.closest('seki-dropdown-menu')) !== null && _a !== void 0 ? _a : undefined;
|
|
49
|
-
(_b = this.menuEl) === null || _b === void 0 ? void 0 : _b.addEventListener('sekiOpenChange', this.onMenuOpenChange);
|
|
47
|
+
this.hasLoaded = true;
|
|
50
48
|
}
|
|
51
49
|
componentDidRender() {
|
|
52
50
|
if (this._isOpen) {
|
|
@@ -89,9 +87,8 @@ export class SekiDropdownMenuContent {
|
|
|
89
87
|
this._position = next;
|
|
90
88
|
}
|
|
91
89
|
disconnectedCallback() {
|
|
92
|
-
var _a;
|
|
93
90
|
clearTypeahead(this.typeahead);
|
|
94
|
-
|
|
91
|
+
this.menu.disconnect();
|
|
95
92
|
}
|
|
96
93
|
render() {
|
|
97
94
|
if (!this._isOpen) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
|
+
import { ContextConsumer } from "../../utils/context-bridge";
|
|
2
3
|
/**
|
|
3
4
|
* Dropdown Menu trigger button
|
|
4
5
|
*
|
|
@@ -9,32 +10,23 @@ import { h, Host } from "@stencil/core";
|
|
|
9
10
|
export class SekiDropdownMenuTrigger {
|
|
10
11
|
constructor() {
|
|
11
12
|
this._isOpen = false;
|
|
12
|
-
this.
|
|
13
|
+
this.menu = new ContextConsumer('seki-dropdown-menu', '_dropdownMenuContext', (context) => {
|
|
13
14
|
var _a;
|
|
14
|
-
const context = this.getContext();
|
|
15
15
|
this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
getContext() {
|
|
19
|
-
const menu = this.el.closest('seki-dropdown-menu');
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
return menu ? menu._dropdownMenuContext : null;
|
|
16
|
+
});
|
|
22
17
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.menuEl = (_a = this.el.closest('seki-dropdown-menu')) !== null && _a !== void 0 ? _a : undefined;
|
|
26
|
-
(_b = this.menuEl) === null || _b === void 0 ? void 0 : _b.addEventListener('sekiOpenChange', this.onMenuOpenChange);
|
|
18
|
+
connectedCallback() {
|
|
19
|
+
this.menu.connect(this.el);
|
|
27
20
|
}
|
|
28
21
|
handleClick(event) {
|
|
29
22
|
event.stopPropagation();
|
|
30
23
|
this.triggerClick.emit();
|
|
31
24
|
}
|
|
32
25
|
disconnectedCallback() {
|
|
33
|
-
|
|
34
|
-
(_a = this.menuEl) === null || _a === void 0 ? void 0 : _a.removeEventListener('sekiOpenChange', this.onMenuOpenChange);
|
|
26
|
+
this.menu.disconnect();
|
|
35
27
|
}
|
|
36
28
|
render() {
|
|
37
|
-
return (h(Host, { key: '
|
|
29
|
+
return (h(Host, { key: '62faab5af2d089c1bae1b6a56187b81f8799444d', "data-state": this._isOpen ? 'open' : 'closed' }, h("span", { key: '0164812df07f1ed2f7d423852a1daf3bf972c43d', part: "trigger", class: "dropdown-menu-trigger", "aria-haspopup": "menu", "aria-expanded": this._isOpen ? 'true' : 'false' }, h("slot", { key: 'c04d209c3aea27373c2fcd09e0d99f9dfd6e0692' }))));
|
|
38
30
|
}
|
|
39
31
|
static get is() { return "seki-dropdown-menu-trigger"; }
|
|
40
32
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { composedContains, getDeepActiveElement } from "../../utils/menu-navigation";
|
|
3
3
|
import { OverlayLayer } from "../../utils/overlay";
|
|
4
|
+
import { publishContext } from "../../utils/context-bridge";
|
|
4
5
|
/**
|
|
5
6
|
* Dropdown Menu component - context menu with items
|
|
6
7
|
*
|
|
@@ -50,6 +51,9 @@ export class SekiDropdownMenu {
|
|
|
50
51
|
}
|
|
51
52
|
componentWillLoad() {
|
|
52
53
|
this._isOpen = this.open || this.defaultOpen;
|
|
54
|
+
// Parts already upgraded hear this; parts that upgrade later read it when
|
|
55
|
+
// they connect (#384).
|
|
56
|
+
this.publish();
|
|
53
57
|
}
|
|
54
58
|
openChanged(newValue) {
|
|
55
59
|
this._isOpen = newValue;
|
|
@@ -63,6 +67,7 @@ export class SekiDropdownMenu {
|
|
|
63
67
|
}
|
|
64
68
|
// Programmatic `menuEl.open = x` must notify already-mounted children the
|
|
65
69
|
// same way openMenu()/closeMenu() do (found during the #261 audit).
|
|
70
|
+
this.publish();
|
|
66
71
|
this.sekiOpenChange.emit(newValue);
|
|
67
72
|
}
|
|
68
73
|
/**
|
|
@@ -80,8 +85,7 @@ export class SekiDropdownMenu {
|
|
|
80
85
|
// #268 — the previous double-emit accidentally masked this ordering gap,
|
|
81
86
|
// since the second, later emit always ran after a second, redundant
|
|
82
87
|
// refresh).
|
|
83
|
-
|
|
84
|
-
this.el._dropdownMenuContext = this.getContext();
|
|
88
|
+
this.publish();
|
|
85
89
|
this.open = true;
|
|
86
90
|
this.setupClickOutside();
|
|
87
91
|
}
|
|
@@ -93,8 +97,7 @@ export class SekiDropdownMenu {
|
|
|
93
97
|
return;
|
|
94
98
|
this._isOpen = false;
|
|
95
99
|
// Same reordering as openMenu() above, same reason.
|
|
96
|
-
|
|
97
|
-
this.el._dropdownMenuContext = this.getContext();
|
|
100
|
+
this.publish();
|
|
98
101
|
this.open = false;
|
|
99
102
|
this.removeClickOutside();
|
|
100
103
|
}
|
|
@@ -155,6 +158,9 @@ export class SekiDropdownMenu {
|
|
|
155
158
|
this.clickOutsideHandler = undefined;
|
|
156
159
|
}
|
|
157
160
|
}
|
|
161
|
+
publish() {
|
|
162
|
+
publishContext(this.el, '_dropdownMenuContext', this.getContext(), this.contextChange);
|
|
163
|
+
}
|
|
158
164
|
getContext() {
|
|
159
165
|
return {
|
|
160
166
|
isOpen: this._isOpen,
|
|
@@ -169,15 +175,13 @@ export class SekiDropdownMenu {
|
|
|
169
175
|
};
|
|
170
176
|
}
|
|
171
177
|
componentDidLoad() {
|
|
172
|
-
|
|
173
|
-
this.el._dropdownMenuContext = this.getContext();
|
|
178
|
+
this.publish();
|
|
174
179
|
if (this._isOpen) {
|
|
175
180
|
this.setupClickOutside();
|
|
176
181
|
}
|
|
177
182
|
}
|
|
178
183
|
componentDidUpdate() {
|
|
179
|
-
|
|
180
|
-
this.el._dropdownMenuContext = this.getContext();
|
|
184
|
+
this.publish();
|
|
181
185
|
}
|
|
182
186
|
componentDidRender() {
|
|
183
187
|
this.layer.setActive(this._isOpen);
|
|
@@ -187,7 +191,7 @@ export class SekiDropdownMenu {
|
|
|
187
191
|
this.layer.setActive(false);
|
|
188
192
|
}
|
|
189
193
|
render() {
|
|
190
|
-
return (h(Host, { key: '
|
|
194
|
+
return (h(Host, { key: 'e9cee0f28a94987325d2d07001bd9f841f84f241', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: '556d58f58bd0cbe07fccf2def100db11c5e43e9d', part: "dropdown-menu", class: "dropdown-menu" }, h("slot", { key: '0befc30be19c45fb3975bc31cc7565716f183171' }))));
|
|
191
195
|
}
|
|
192
196
|
static get is() { return "seki-dropdown-menu"; }
|
|
193
197
|
static get encapsulation() { return "shadow"; }
|
|
@@ -353,6 +357,24 @@ export class SekiDropdownMenu {
|
|
|
353
357
|
"resolved": "string",
|
|
354
358
|
"references": {}
|
|
355
359
|
}
|
|
360
|
+
}, {
|
|
361
|
+
"method": "contextChange",
|
|
362
|
+
"name": "sekiContextChange",
|
|
363
|
+
"bubbles": true,
|
|
364
|
+
"cancelable": true,
|
|
365
|
+
"composed": true,
|
|
366
|
+
"docs": {
|
|
367
|
+
"tags": [{
|
|
368
|
+
"name": "internal",
|
|
369
|
+
"text": undefined
|
|
370
|
+
}],
|
|
371
|
+
"text": "Internal: notifies the dropdown menu parts that the published context changed."
|
|
372
|
+
},
|
|
373
|
+
"complexType": {
|
|
374
|
+
"original": "void",
|
|
375
|
+
"resolved": "void",
|
|
376
|
+
"references": {}
|
|
377
|
+
}
|
|
356
378
|
}];
|
|
357
379
|
}
|
|
358
380
|
static get methods() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
|
+
import { ContextConsumer } from "../../utils/context-bridge";
|
|
2
3
|
/**
|
|
3
4
|
* Hover Card Content Component
|
|
4
5
|
*
|
|
@@ -42,6 +43,26 @@ export class SekiHoverCardContent {
|
|
|
42
43
|
* The actual side after collision detection (string primitive — safe as @State, no infinite loop)
|
|
43
44
|
*/
|
|
44
45
|
this._actualSide = 'bottom';
|
|
46
|
+
this.hasLoaded = false;
|
|
47
|
+
this.hoverCard = new ContextConsumer('seki-hover-card', '_hoverCardContext', (context) => {
|
|
48
|
+
var _a;
|
|
49
|
+
const wasOpen = this._isOpen;
|
|
50
|
+
this._isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
|
|
51
|
+
// Before the first render only the state is taken over (an initially open
|
|
52
|
+
// card needs no listeners set up by a transition).
|
|
53
|
+
if (!this.hasLoaded || this._isOpen === wasOpen)
|
|
54
|
+
return;
|
|
55
|
+
if (this._isOpen) {
|
|
56
|
+
requestAnimationFrame(() => this.updatePosition());
|
|
57
|
+
// Setup click-outside listener for touch devices
|
|
58
|
+
if (this.isTouchDevice()) {
|
|
59
|
+
this.setupClickOutsideListener();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.removeClickOutsideListener();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
45
66
|
/**
|
|
46
67
|
* Handle mouse enter - cancel any pending close
|
|
47
68
|
*/
|
|
@@ -91,33 +112,13 @@ export class SekiHoverCardContent {
|
|
|
91
112
|
* Get the hover card context from the parent container
|
|
92
113
|
*/
|
|
93
114
|
getContext() {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
115
|
+
return this.hoverCard.context;
|
|
116
|
+
}
|
|
117
|
+
connectedCallback() {
|
|
118
|
+
this.hoverCard.connect(this.el);
|
|
100
119
|
}
|
|
101
120
|
componentDidLoad() {
|
|
102
|
-
|
|
103
|
-
const hoverCard = this.el.closest('seki-hover-card');
|
|
104
|
-
if (hoverCard) {
|
|
105
|
-
this.openChangeHandler = (e) => {
|
|
106
|
-
const open = e.detail;
|
|
107
|
-
this._isOpen = open;
|
|
108
|
-
if (this._isOpen) {
|
|
109
|
-
requestAnimationFrame(() => this.updatePosition());
|
|
110
|
-
// Setup click-outside listener for touch devices
|
|
111
|
-
if (this.isTouchDevice()) {
|
|
112
|
-
this.setupClickOutsideListener();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
this.removeClickOutsideListener();
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
hoverCard.addEventListener('sekiOpenChange', this.openChangeHandler);
|
|
120
|
-
}
|
|
121
|
+
this.hasLoaded = true;
|
|
121
122
|
}
|
|
122
123
|
componentDidRender() {
|
|
123
124
|
if (this._isOpen && this.contentRef) {
|
|
@@ -126,14 +127,7 @@ export class SekiHoverCardContent {
|
|
|
126
127
|
}
|
|
127
128
|
disconnectedCallback() {
|
|
128
129
|
this.removeClickOutsideListener();
|
|
129
|
-
|
|
130
|
-
if (this.openChangeHandler) {
|
|
131
|
-
const hoverCard = this.el.closest('seki-hover-card');
|
|
132
|
-
if (hoverCard) {
|
|
133
|
-
hoverCard.removeEventListener('sekiOpenChange', this.openChangeHandler);
|
|
134
|
-
}
|
|
135
|
-
this.openChangeHandler = undefined;
|
|
136
|
-
}
|
|
130
|
+
this.hoverCard.disconnect();
|
|
137
131
|
}
|
|
138
132
|
/**
|
|
139
133
|
* Setup click-outside listener for touch devices to close on tap outside
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
|
+
import { ContextConsumer } from "../../utils/context-bridge";
|
|
2
3
|
/**
|
|
3
4
|
* Hover Card Trigger Component
|
|
4
5
|
*
|
|
@@ -22,6 +23,10 @@ export class SekiHoverCardTrigger {
|
|
|
22
23
|
* Internal state tracking whether the hover card is open (for aria-expanded)
|
|
23
24
|
*/
|
|
24
25
|
this.isOpen = false;
|
|
26
|
+
this.hoverCard = new ContextConsumer('seki-hover-card', '_hoverCardContext', (context) => {
|
|
27
|
+
var _a;
|
|
28
|
+
this.isOpen = (_a = context === null || context === void 0 ? void 0 : context.isOpen) !== null && _a !== void 0 ? _a : false;
|
|
29
|
+
});
|
|
25
30
|
/**
|
|
26
31
|
* Handle mouse enter - request open (non-touch devices only)
|
|
27
32
|
*/
|
|
@@ -95,36 +100,16 @@ export class SekiHoverCardTrigger {
|
|
|
95
100
|
* Get the hover card context from the parent container
|
|
96
101
|
*/
|
|
97
102
|
getContext() {
|
|
98
|
-
|
|
99
|
-
if (parent) {
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
101
|
-
return parent._hoverCardContext || null;
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
103
|
+
return this.hoverCard.context;
|
|
104
104
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const hoverCard = this.el.closest('seki-hover-card');
|
|
108
|
-
if (hoverCard) {
|
|
109
|
-
this.openChangeHandler = (e) => {
|
|
110
|
-
const open = e.detail;
|
|
111
|
-
this.isOpen = open;
|
|
112
|
-
};
|
|
113
|
-
hoverCard.addEventListener('sekiOpenChange', this.openChangeHandler);
|
|
114
|
-
}
|
|
105
|
+
connectedCallback() {
|
|
106
|
+
this.hoverCard.connect(this.el);
|
|
115
107
|
}
|
|
116
108
|
disconnectedCallback() {
|
|
117
|
-
|
|
118
|
-
if (this.openChangeHandler) {
|
|
119
|
-
const hoverCard = this.el.closest('seki-hover-card');
|
|
120
|
-
if (hoverCard) {
|
|
121
|
-
hoverCard.removeEventListener('sekiOpenChange', this.openChangeHandler);
|
|
122
|
-
}
|
|
123
|
-
this.openChangeHandler = undefined;
|
|
124
|
-
}
|
|
109
|
+
this.hoverCard.disconnect();
|
|
125
110
|
}
|
|
126
111
|
render() {
|
|
127
|
-
return (h(Host, { key: '
|
|
112
|
+
return (h(Host, { key: '5e2612d5b7f94f66413bd2c8cc64e1f24de2621e' }, h("span", { key: 'fa875d7a1a941eeffa38f681d6f4c5ee2aaff267', part: "trigger", class: "hover-card-trigger", "aria-haspopup": "dialog", "aria-expanded": this.isOpen ? 'true' : 'false', onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onFocus: this.handleFocus, onBlur: this.handleBlur, onClick: this.handleClick }, h("slot", { key: '01856b11d54bdf534b1d3cc8db1d99314e84fc14' }))));
|
|
128
113
|
}
|
|
129
114
|
static get is() { return "seki-hover-card-trigger"; }
|
|
130
115
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { OverlayLayer } from "../../utils/overlay";
|
|
3
|
+
import { publishContext } from "../../utils/context-bridge";
|
|
3
4
|
/**
|
|
4
5
|
* Hover Card Container Component
|
|
5
6
|
*
|
|
@@ -142,6 +143,9 @@ export class SekiHoverCard {
|
|
|
142
143
|
// `disabled` wins over a requested initial open state.
|
|
143
144
|
this._isOpen = (this.open || this.defaultOpen) && !this.disabled;
|
|
144
145
|
this.open = this._isOpen;
|
|
146
|
+
// Parts already upgraded hear this; parts that upgrade later read it when
|
|
147
|
+
// they connect (#384).
|
|
148
|
+
this.updateContext();
|
|
145
149
|
}
|
|
146
150
|
openChanged(newValue) {
|
|
147
151
|
// An outside assignment (`card.open = true`) has to win after first render;
|
|
@@ -255,8 +259,7 @@ export class SekiHoverCard {
|
|
|
255
259
|
* Update the context on the element for child components to access
|
|
256
260
|
*/
|
|
257
261
|
updateContext() {
|
|
258
|
-
|
|
259
|
-
this.el._hoverCardContext = this.getContext();
|
|
262
|
+
publishContext(this.el, '_hoverCardContext', this.getContext(), this.contextChange);
|
|
260
263
|
}
|
|
261
264
|
// Listen for custom events from child components
|
|
262
265
|
handleRequestOpen() {
|
|
@@ -274,9 +277,6 @@ export class SekiHoverCard {
|
|
|
274
277
|
componentDidRender() {
|
|
275
278
|
this.layer.setActive(this._isOpen);
|
|
276
279
|
}
|
|
277
|
-
componentDidLoad() {
|
|
278
|
-
this.updateContext();
|
|
279
|
-
}
|
|
280
280
|
componentDidUpdate() {
|
|
281
281
|
this.updateContext();
|
|
282
282
|
}
|
|
@@ -289,7 +289,7 @@ export class SekiHoverCard {
|
|
|
289
289
|
this.layer.setActive(false);
|
|
290
290
|
}
|
|
291
291
|
render() {
|
|
292
|
-
return (h(Host, { key: '
|
|
292
|
+
return (h(Host, { key: 'ed09850d3514e29311629a54d02056b27e817e5a', "data-state": this._isOpen ? 'open' : 'closed' }, h("div", { key: '6cbccba00a0fd2fca3816b25898d672618d74b62', class: "hover-card" }, h("slot", { key: 'adea6048e83def42318c736a9def3efe418a92de' }))));
|
|
293
293
|
}
|
|
294
294
|
static get is() { return "seki-hover-card"; }
|
|
295
295
|
static get encapsulation() { return "shadow"; }
|
|
@@ -501,6 +501,24 @@ export class SekiHoverCard {
|
|
|
501
501
|
"resolved": "boolean",
|
|
502
502
|
"references": {}
|
|
503
503
|
}
|
|
504
|
+
}, {
|
|
505
|
+
"method": "contextChange",
|
|
506
|
+
"name": "sekiContextChange",
|
|
507
|
+
"bubbles": true,
|
|
508
|
+
"cancelable": true,
|
|
509
|
+
"composed": true,
|
|
510
|
+
"docs": {
|
|
511
|
+
"tags": [{
|
|
512
|
+
"name": "internal",
|
|
513
|
+
"text": undefined
|
|
514
|
+
}],
|
|
515
|
+
"text": "Internal: notifies the hover card parts that the published context changed."
|
|
516
|
+
},
|
|
517
|
+
"complexType": {
|
|
518
|
+
"original": "void",
|
|
519
|
+
"resolved": "void",
|
|
520
|
+
"references": {}
|
|
521
|
+
}
|
|
504
522
|
}];
|
|
505
523
|
}
|
|
506
524
|
static get methods() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
|
+
import { ContextConsumer } from "../../utils/context-bridge";
|
|
2
3
|
/**
|
|
3
4
|
* @component seki-radio-group-item
|
|
4
5
|
* @description An individual radio button item within a seki-radio-group.
|
|
@@ -7,6 +8,16 @@ import { h, Host } from "@stencil/core";
|
|
|
7
8
|
*/
|
|
8
9
|
export class SekiRadioGroupItem {
|
|
9
10
|
constructor() {
|
|
11
|
+
// Pull the group's state: the group pushes `checked` onto items it can see,
|
|
12
|
+
// but an item that upgrades after the group (one-module-per-tag loading) was
|
|
13
|
+
// not an upgraded element yet, so it must read the group's state itself.
|
|
14
|
+
this.group = new ContextConsumer('seki-radio-group', '_radioGroupItemsContext', (context) => {
|
|
15
|
+
if (!context)
|
|
16
|
+
return;
|
|
17
|
+
this.checked = context.value !== undefined && context.value === this.value;
|
|
18
|
+
if (context.disabled)
|
|
19
|
+
this.disabled = true;
|
|
20
|
+
});
|
|
10
21
|
/**
|
|
11
22
|
* Whether this item is checked. Managed by parent radio group.
|
|
12
23
|
*/
|
|
@@ -38,6 +49,12 @@ export class SekiRadioGroupItem {
|
|
|
38
49
|
}
|
|
39
50
|
};
|
|
40
51
|
}
|
|
52
|
+
connectedCallback() {
|
|
53
|
+
this.group.connect(this.el);
|
|
54
|
+
}
|
|
55
|
+
disconnectedCallback() {
|
|
56
|
+
this.group.disconnect();
|
|
57
|
+
}
|
|
41
58
|
/**
|
|
42
59
|
* Focus this radio item.
|
|
43
60
|
*/
|
|
@@ -47,7 +64,7 @@ export class SekiRadioGroupItem {
|
|
|
47
64
|
}
|
|
48
65
|
render() {
|
|
49
66
|
const dataState = this.checked ? 'checked' : 'unchecked';
|
|
50
|
-
return (h(Host, { key: '
|
|
67
|
+
return (h(Host, { key: 'ce2f71b19a5e58670e4f2a8ecd50f38480027b6e', "data-state": dataState, "data-disabled": this.disabled ? '' : null }, h("button", { key: 'b4216874c9102c333091b888bcc5285e2f038223', type: "button", role: "radio", class: "radio", part: "radio", ref: el => this.buttonEl = el, "aria-checked": this.checked ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel || undefined, "aria-describedby": this.ariaDescribedby || undefined, tabindex: this.checked ? 0 : -1, disabled: this.disabled, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, this.checked && (h("span", { key: '09cb9ea7c3ae16bbe103ea59313ab253fe31bcbf', class: "indicator", part: "indicator" })))));
|
|
51
68
|
}
|
|
52
69
|
static get is() { return "seki-radio-group-item"; }
|
|
53
70
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { FormControl } from "../../utils/form-control";
|
|
3
|
+
import { publishContext } from "../../utils/context-bridge";
|
|
3
4
|
/**
|
|
4
5
|
* @component seki-radio-group
|
|
5
6
|
* @description A set of radio buttons where only one can be selected at a time.
|
|
@@ -51,6 +52,7 @@ export class SekiRadioGroup {
|
|
|
51
52
|
});
|
|
52
53
|
this.formControl.captureInitial(this.internalValue);
|
|
53
54
|
this.formControl.sync();
|
|
55
|
+
this.publish();
|
|
54
56
|
}
|
|
55
57
|
handleFormStateChange() {
|
|
56
58
|
var _a;
|
|
@@ -163,7 +165,11 @@ export class SekiRadioGroup {
|
|
|
163
165
|
/**
|
|
164
166
|
* Update child items with current selection state
|
|
165
167
|
*/
|
|
168
|
+
publish() {
|
|
169
|
+
publishContext(this.el, '_radioGroupItemsContext', { value: this.selectedValue, disabled: this.disabled }, this.contextChange);
|
|
170
|
+
}
|
|
166
171
|
updateChildItems() {
|
|
172
|
+
this.publish();
|
|
167
173
|
const selectedValue = this.selectedValue;
|
|
168
174
|
const items = this.getRadioItems();
|
|
169
175
|
items.forEach(item => {
|
|
@@ -180,7 +186,7 @@ export class SekiRadioGroup {
|
|
|
180
186
|
this.updateChildItems();
|
|
181
187
|
}
|
|
182
188
|
render() {
|
|
183
|
-
return (h(Host, { key: '
|
|
189
|
+
return (h(Host, { key: 'c4210abc0444bb3fcefc3c0e3f6fa6fd7e218543', role: "radiogroup", "aria-label": this.ariaLabel, "aria-required": this.required ? 'true' : undefined, "aria-disabled": this.disabled ? 'true' : undefined, "aria-orientation": this.orientation, "data-orientation": this.orientation, "data-disabled": this.disabled ? '' : null }, h("slot", { key: 'd3d1603e53818cc9015b2ede0a44fa495c7f08be' })));
|
|
184
190
|
}
|
|
185
191
|
static get is() { return "seki-radio-group"; }
|
|
186
192
|
static get encapsulation() { return "shadow"; }
|
|
@@ -356,6 +362,24 @@ export class SekiRadioGroup {
|
|
|
356
362
|
"resolved": "{ value: string; }",
|
|
357
363
|
"references": {}
|
|
358
364
|
}
|
|
365
|
+
}, {
|
|
366
|
+
"method": "contextChange",
|
|
367
|
+
"name": "sekiContextChange",
|
|
368
|
+
"bubbles": true,
|
|
369
|
+
"cancelable": true,
|
|
370
|
+
"composed": true,
|
|
371
|
+
"docs": {
|
|
372
|
+
"tags": [{
|
|
373
|
+
"name": "internal",
|
|
374
|
+
"text": undefined
|
|
375
|
+
}],
|
|
376
|
+
"text": "Internal: notifies items that the published group state changed."
|
|
377
|
+
},
|
|
378
|
+
"complexType": {
|
|
379
|
+
"original": "void",
|
|
380
|
+
"resolved": "void",
|
|
381
|
+
"references": {}
|
|
382
|
+
}
|
|
359
383
|
}];
|
|
360
384
|
}
|
|
361
385
|
static get elementRef() { return "el"; }
|
|
@@ -97,3 +97,5 @@ export function computeHandleRange(before, after) {
|
|
|
97
97
|
const max = Math.min(before.constraints.maxSize, total - lowerBound(after));
|
|
98
98
|
return { now: before.size, min: Math.min(min, before.size), max: Math.max(max, before.size) };
|
|
99
99
|
}
|
|
100
|
+
/** Generated host id for a panel; the handle derives the same id for `aria-controls`. */
|
|
101
|
+
export const panelHostId = (panelId) => `seki-resizable-${panelId}`;
|