@u-elements/u-tabs 0.0.12 → 0.1.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/dist/u-tabs.cjs +58 -36
- package/dist/u-tabs.d.cts +5 -2
- package/dist/u-tabs.d.ts +5 -2
- package/dist/u-tabs.js +58 -36
- package/dist/u-tabs.manifest.json +6 -2
- package/package.json +1 -1
package/dist/u-tabs.cjs
CHANGED
|
@@ -46,9 +46,11 @@ var mutationObserver = (element, options) => {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
var asButton = (event) => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (isClick
|
|
49
|
+
var _a2;
|
|
50
|
+
const isClick = event.key === " " || event.key === "Enter";
|
|
51
|
+
if (isClick) (_a2 = event.preventDefault) == null ? void 0 : _a2.call(event);
|
|
52
|
+
if (isClick && event.target instanceof HTMLElement)
|
|
53
|
+
event.target.dispatchEvent(new MouseEvent("click", event));
|
|
52
54
|
return isClick;
|
|
53
55
|
};
|
|
54
56
|
var getRoot = (node) => {
|
|
@@ -62,9 +64,9 @@ var useId = (el) => {
|
|
|
62
64
|
if (!el.id) el.id = `:${el.nodeName.toLowerCase()}${(++id).toString(32)}`;
|
|
63
65
|
return el.id;
|
|
64
66
|
};
|
|
65
|
-
var createElement = (tagName,
|
|
67
|
+
var createElement = (tagName, content, attrs) => {
|
|
66
68
|
const el = document.createElement(tagName);
|
|
67
|
-
if (
|
|
69
|
+
if (content) el[tagName === "style" ? "textContent" : "innerHTML"] = content;
|
|
68
70
|
return el;
|
|
69
71
|
};
|
|
70
72
|
var customElements = {
|
|
@@ -83,13 +85,30 @@ var UHTMLTabShadowRoot = declarativeShadowRoot(UHTMLTabStyle);
|
|
|
83
85
|
var UHTMLTabPanelShadowRoot = declarativeShadowRoot(UHTMLTabPanelStyle);
|
|
84
86
|
var ARIA_CONTROLS = "aria-controls";
|
|
85
87
|
var ARIA_SELECTED = "aria-selected";
|
|
88
|
+
var ATTR_TABS = "data-utabs";
|
|
86
89
|
var UHTMLTabsElement = class extends UHTMLElement {
|
|
87
90
|
constructor() {
|
|
88
91
|
super();
|
|
92
|
+
attr(this, ATTR_TABS, "");
|
|
89
93
|
attachStyle(this, UHTMLTabsStyle);
|
|
90
94
|
}
|
|
95
|
+
connectedCallback() {
|
|
96
|
+
mutationObserver(this, {
|
|
97
|
+
attributeFilter: ["role"],
|
|
98
|
+
attributes: true,
|
|
99
|
+
childList: true,
|
|
100
|
+
subtree: true
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
handleEvent() {
|
|
104
|
+
var _a2;
|
|
105
|
+
(_a2 = this.tabList) == null ? void 0 : _a2.handleEvent();
|
|
106
|
+
}
|
|
107
|
+
disconnectedCallback() {
|
|
108
|
+
mutationObserver(this, false);
|
|
109
|
+
}
|
|
91
110
|
get tabList() {
|
|
92
|
-
return queryWithoutNested("
|
|
111
|
+
return queryWithoutNested("tablist", this)[0] || null;
|
|
93
112
|
}
|
|
94
113
|
get selectedIndex() {
|
|
95
114
|
return getSelectedIndex(this.tabs);
|
|
@@ -98,10 +117,10 @@ var UHTMLTabsElement = class extends UHTMLElement {
|
|
|
98
117
|
setSelected(this.tabs[index]);
|
|
99
118
|
}
|
|
100
119
|
get tabs() {
|
|
101
|
-
return queryWithoutNested("
|
|
120
|
+
return queryWithoutNested("tab", this);
|
|
102
121
|
}
|
|
103
122
|
get panels() {
|
|
104
|
-
return queryWithoutNested("
|
|
123
|
+
return queryWithoutNested("tabpanel", this);
|
|
105
124
|
}
|
|
106
125
|
};
|
|
107
126
|
var UHTMLTabListElement = class extends UHTMLElement {
|
|
@@ -113,13 +132,14 @@ var UHTMLTabListElement = class extends UHTMLElement {
|
|
|
113
132
|
attr(this, "role", "tablist");
|
|
114
133
|
on(this, "click,keydown", this);
|
|
115
134
|
mutationObserver(this, { childList: true });
|
|
116
|
-
|
|
135
|
+
requestAnimationFrame(() => this.handleEvent());
|
|
117
136
|
}
|
|
118
137
|
disconnectedCallback() {
|
|
119
138
|
off(this, "click,keydown", this);
|
|
120
139
|
mutationObserver(this, false);
|
|
121
140
|
}
|
|
122
141
|
handleEvent(event) {
|
|
142
|
+
var _a2, _b;
|
|
123
143
|
if (!event || event.type === "mutation") {
|
|
124
144
|
const tab = this.tabs[Math.max(this.selectedIndex, 0)];
|
|
125
145
|
return tab == null ? void 0 : tab.setAttribute(ARIA_SELECTED, "true");
|
|
@@ -140,20 +160,20 @@ var UHTMLTabListElement = class extends UHTMLElement {
|
|
|
140
160
|
else if (key === "Tab") next = getSelectedIndex(tabs);
|
|
141
161
|
else return;
|
|
142
162
|
setTimeout(() => {
|
|
143
|
-
tabs[prev]
|
|
144
|
-
tabs[next]
|
|
163
|
+
attr(tabs[prev], "tabindex", "-1");
|
|
164
|
+
attr(tabs[next], "tabindex", "0");
|
|
145
165
|
});
|
|
146
166
|
if (key !== "Tab") {
|
|
147
167
|
event.preventDefault();
|
|
148
|
-
tabs[next].focus();
|
|
168
|
+
(_b = (_a2 = tabs[next]).focus) == null ? void 0 : _b.call(_a2);
|
|
149
169
|
}
|
|
150
170
|
}
|
|
151
171
|
}
|
|
152
172
|
get tabsElement() {
|
|
153
|
-
return this
|
|
173
|
+
return getTabsElement(this);
|
|
154
174
|
}
|
|
155
175
|
get tabs() {
|
|
156
|
-
return this
|
|
176
|
+
return getTabs(this);
|
|
157
177
|
}
|
|
158
178
|
get selectedIndex() {
|
|
159
179
|
return getSelectedIndex(this.tabs);
|
|
@@ -174,31 +194,32 @@ var UHTMLTabElement = class extends UHTMLElement {
|
|
|
174
194
|
}
|
|
175
195
|
connectedCallback() {
|
|
176
196
|
attr(this, "role", "tab");
|
|
177
|
-
this
|
|
197
|
+
attr(this, "tabindex", this.selected ? "0" : "-1");
|
|
178
198
|
}
|
|
179
199
|
attributeChangedCallback() {
|
|
180
200
|
if (!SKIP_ATTR_CHANGE && this.selected && this.tabList) {
|
|
181
201
|
SKIP_ATTR_CHANGE = true;
|
|
182
|
-
const tabs =
|
|
183
|
-
const panels = queryWithoutNested("
|
|
184
|
-
const nextPanel = getPanel(this, panels[tabs.indexOf(this)]);
|
|
202
|
+
const tabs = this.tabList ? getTabs(this.tabList) : [];
|
|
203
|
+
const panels = queryWithoutNested("tabpanel", this.tabsElement || this);
|
|
204
|
+
const nextPanel = getPanel(this, panels[[...tabs].indexOf(this)]);
|
|
185
205
|
if (nextPanel) attr(nextPanel, SAFE_LABELLEDBY, useId(this));
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
206
|
+
let i = 0;
|
|
207
|
+
for (const tab of tabs) {
|
|
208
|
+
const panel = getPanel(tab, panels[i++]);
|
|
209
|
+
attr(tab, "tabindex", tab === this ? "0" : "-1");
|
|
189
210
|
attr(tab, ARIA_SELECTED, `${tab === this}`);
|
|
190
|
-
|
|
211
|
+
if (panel == null ? void 0 : panel.id) attr(tab, ARIA_CONTROLS, panel.id);
|
|
191
212
|
if (panel) panel.hidden = panel !== nextPanel;
|
|
192
|
-
}
|
|
213
|
+
}
|
|
193
214
|
SKIP_ATTR_CHANGE = false;
|
|
194
215
|
}
|
|
195
216
|
}
|
|
196
217
|
get tabsElement() {
|
|
197
|
-
return this
|
|
218
|
+
return getTabsElement(this);
|
|
198
219
|
}
|
|
199
220
|
get tabList() {
|
|
200
221
|
const tablist = this.parentElement;
|
|
201
|
-
return (tablist == null ? void 0 : tablist.
|
|
222
|
+
return (tablist == null ? void 0 : tablist.getAttribute("role")) === "tablist" ? tablist : null;
|
|
202
223
|
}
|
|
203
224
|
get selected() {
|
|
204
225
|
return attr(this, ARIA_SELECTED) === "true";
|
|
@@ -208,8 +229,8 @@ var UHTMLTabElement = class extends UHTMLElement {
|
|
|
208
229
|
}
|
|
209
230
|
/** Retrieves the ordinal position of an tab in a tablist. */
|
|
210
231
|
get index() {
|
|
211
|
-
const
|
|
212
|
-
return
|
|
232
|
+
const tablist = this.tabList;
|
|
233
|
+
return tablist ? [...getTabs(tablist)].indexOf(this) : 0;
|
|
213
234
|
}
|
|
214
235
|
get panel() {
|
|
215
236
|
return getPanel(this);
|
|
@@ -235,20 +256,21 @@ var UHTMLTabPanelElement = class extends UHTMLElement {
|
|
|
235
256
|
attr(this, "tabindex", hidden || isFocusable(this.firstChild) ? null : "0");
|
|
236
257
|
}
|
|
237
258
|
get tabsElement() {
|
|
238
|
-
return this
|
|
259
|
+
return getTabsElement(this);
|
|
239
260
|
}
|
|
240
261
|
get tabs() {
|
|
241
|
-
|
|
242
|
-
|
|
262
|
+
return getRoot(this).querySelectorAll(
|
|
263
|
+
`[role="tab"][${ARIA_CONTROLS}="${this.id}"]`
|
|
264
|
+
);
|
|
243
265
|
}
|
|
244
266
|
};
|
|
245
|
-
var queryWithoutNested = (
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
return (el == null ? void 0 : el.nodeName) === "U-TABPANEL" ? el : null;
|
|
250
|
-
};
|
|
267
|
+
var queryWithoutNested = (role, self) => self.querySelectorAll(
|
|
268
|
+
`[role="${role}"]:not(:scope [role="tabpanel"] [role="${role}"])`
|
|
269
|
+
);
|
|
270
|
+
var getPanel = (tab, panel) => getRoot(tab).getElementById(attr(tab, ARIA_CONTROLS) || useId(panel));
|
|
251
271
|
var getSelectedIndex = (tabs) => [...tabs].findIndex((tab) => attr(tab, ARIA_SELECTED) === "true");
|
|
272
|
+
var getTabsElement = (self) => self.closest(`[${ATTR_TABS}]`);
|
|
273
|
+
var getTabs = (self) => self.querySelectorAll(`:scope > [role="tab"]`);
|
|
252
274
|
var setSelected = (tab) => tab && attr(tab, "aria-disabled") !== "true" && attr(tab, "aria-selected", "true");
|
|
253
275
|
var isFocusable = (el) => el instanceof Element && !el.matches(':disabled,[tabindex^="-"]') && el.matches(
|
|
254
276
|
`[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe`
|
package/dist/u-tabs.d.cts
CHANGED
|
@@ -25,6 +25,9 @@ declare const UHTMLTabPanelShadowRoot: string;
|
|
|
25
25
|
*/
|
|
26
26
|
declare class UHTMLTabsElement extends UHTMLElement {
|
|
27
27
|
constructor();
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
handleEvent(): void;
|
|
30
|
+
disconnectedCallback(): void;
|
|
28
31
|
get tabList(): UHTMLTabListElement | null;
|
|
29
32
|
get selectedIndex(): number;
|
|
30
33
|
set selectedIndex(index: number);
|
|
@@ -40,7 +43,7 @@ declare class UHTMLTabListElement extends UHTMLElement {
|
|
|
40
43
|
connectedCallback(): void;
|
|
41
44
|
disconnectedCallback(): void;
|
|
42
45
|
handleEvent(event?: Event): void;
|
|
43
|
-
get tabsElement():
|
|
46
|
+
get tabsElement(): HTMLElement | null;
|
|
44
47
|
get tabs(): NodeListOf<UHTMLTabElement>;
|
|
45
48
|
get selectedIndex(): number;
|
|
46
49
|
set selectedIndex(index: number);
|
|
@@ -56,7 +59,7 @@ declare class UHTMLTabElement extends UHTMLElement {
|
|
|
56
59
|
set selected(value: boolean);
|
|
57
60
|
/** Retrieves the ordinal position of an tab in a tablist. */
|
|
58
61
|
get index(): number;
|
|
59
|
-
get panel():
|
|
62
|
+
get panel(): HTMLElement | null;
|
|
60
63
|
}
|
|
61
64
|
/**
|
|
62
65
|
* The `<u-tabpanel>` HTML element is a container for the resources of layered content associated with a `<u-tab>`.
|
package/dist/u-tabs.d.ts
CHANGED
|
@@ -25,6 +25,9 @@ declare const UHTMLTabPanelShadowRoot: string;
|
|
|
25
25
|
*/
|
|
26
26
|
declare class UHTMLTabsElement extends UHTMLElement {
|
|
27
27
|
constructor();
|
|
28
|
+
connectedCallback(): void;
|
|
29
|
+
handleEvent(): void;
|
|
30
|
+
disconnectedCallback(): void;
|
|
28
31
|
get tabList(): UHTMLTabListElement | null;
|
|
29
32
|
get selectedIndex(): number;
|
|
30
33
|
set selectedIndex(index: number);
|
|
@@ -40,7 +43,7 @@ declare class UHTMLTabListElement extends UHTMLElement {
|
|
|
40
43
|
connectedCallback(): void;
|
|
41
44
|
disconnectedCallback(): void;
|
|
42
45
|
handleEvent(event?: Event): void;
|
|
43
|
-
get tabsElement():
|
|
46
|
+
get tabsElement(): HTMLElement | null;
|
|
44
47
|
get tabs(): NodeListOf<UHTMLTabElement>;
|
|
45
48
|
get selectedIndex(): number;
|
|
46
49
|
set selectedIndex(index: number);
|
|
@@ -56,7 +59,7 @@ declare class UHTMLTabElement extends UHTMLElement {
|
|
|
56
59
|
set selected(value: boolean);
|
|
57
60
|
/** Retrieves the ordinal position of an tab in a tablist. */
|
|
58
61
|
get index(): number;
|
|
59
|
-
get panel():
|
|
62
|
+
get panel(): HTMLElement | null;
|
|
60
63
|
}
|
|
61
64
|
/**
|
|
62
65
|
* The `<u-tabpanel>` HTML element is a container for the resources of layered content associated with a `<u-tab>`.
|
package/dist/u-tabs.js
CHANGED
|
@@ -44,9 +44,11 @@ var mutationObserver = (element, options) => {
|
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
var asButton = (event) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (isClick
|
|
47
|
+
var _a2;
|
|
48
|
+
const isClick = event.key === " " || event.key === "Enter";
|
|
49
|
+
if (isClick) (_a2 = event.preventDefault) == null ? void 0 : _a2.call(event);
|
|
50
|
+
if (isClick && event.target instanceof HTMLElement)
|
|
51
|
+
event.target.dispatchEvent(new MouseEvent("click", event));
|
|
50
52
|
return isClick;
|
|
51
53
|
};
|
|
52
54
|
var getRoot = (node) => {
|
|
@@ -60,9 +62,9 @@ var useId = (el) => {
|
|
|
60
62
|
if (!el.id) el.id = `:${el.nodeName.toLowerCase()}${(++id).toString(32)}`;
|
|
61
63
|
return el.id;
|
|
62
64
|
};
|
|
63
|
-
var createElement = (tagName,
|
|
65
|
+
var createElement = (tagName, content, attrs) => {
|
|
64
66
|
const el = document.createElement(tagName);
|
|
65
|
-
if (
|
|
67
|
+
if (content) el[tagName === "style" ? "textContent" : "innerHTML"] = content;
|
|
66
68
|
return el;
|
|
67
69
|
};
|
|
68
70
|
var customElements = {
|
|
@@ -81,13 +83,30 @@ var UHTMLTabShadowRoot = declarativeShadowRoot(UHTMLTabStyle);
|
|
|
81
83
|
var UHTMLTabPanelShadowRoot = declarativeShadowRoot(UHTMLTabPanelStyle);
|
|
82
84
|
var ARIA_CONTROLS = "aria-controls";
|
|
83
85
|
var ARIA_SELECTED = "aria-selected";
|
|
86
|
+
var ATTR_TABS = "data-utabs";
|
|
84
87
|
var UHTMLTabsElement = class extends UHTMLElement {
|
|
85
88
|
constructor() {
|
|
86
89
|
super();
|
|
90
|
+
attr(this, ATTR_TABS, "");
|
|
87
91
|
attachStyle(this, UHTMLTabsStyle);
|
|
88
92
|
}
|
|
93
|
+
connectedCallback() {
|
|
94
|
+
mutationObserver(this, {
|
|
95
|
+
attributeFilter: ["role"],
|
|
96
|
+
attributes: true,
|
|
97
|
+
childList: true,
|
|
98
|
+
subtree: true
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
handleEvent() {
|
|
102
|
+
var _a2;
|
|
103
|
+
(_a2 = this.tabList) == null ? void 0 : _a2.handleEvent();
|
|
104
|
+
}
|
|
105
|
+
disconnectedCallback() {
|
|
106
|
+
mutationObserver(this, false);
|
|
107
|
+
}
|
|
89
108
|
get tabList() {
|
|
90
|
-
return queryWithoutNested("
|
|
109
|
+
return queryWithoutNested("tablist", this)[0] || null;
|
|
91
110
|
}
|
|
92
111
|
get selectedIndex() {
|
|
93
112
|
return getSelectedIndex(this.tabs);
|
|
@@ -96,10 +115,10 @@ var UHTMLTabsElement = class extends UHTMLElement {
|
|
|
96
115
|
setSelected(this.tabs[index]);
|
|
97
116
|
}
|
|
98
117
|
get tabs() {
|
|
99
|
-
return queryWithoutNested("
|
|
118
|
+
return queryWithoutNested("tab", this);
|
|
100
119
|
}
|
|
101
120
|
get panels() {
|
|
102
|
-
return queryWithoutNested("
|
|
121
|
+
return queryWithoutNested("tabpanel", this);
|
|
103
122
|
}
|
|
104
123
|
};
|
|
105
124
|
var UHTMLTabListElement = class extends UHTMLElement {
|
|
@@ -111,13 +130,14 @@ var UHTMLTabListElement = class extends UHTMLElement {
|
|
|
111
130
|
attr(this, "role", "tablist");
|
|
112
131
|
on(this, "click,keydown", this);
|
|
113
132
|
mutationObserver(this, { childList: true });
|
|
114
|
-
|
|
133
|
+
requestAnimationFrame(() => this.handleEvent());
|
|
115
134
|
}
|
|
116
135
|
disconnectedCallback() {
|
|
117
136
|
off(this, "click,keydown", this);
|
|
118
137
|
mutationObserver(this, false);
|
|
119
138
|
}
|
|
120
139
|
handleEvent(event) {
|
|
140
|
+
var _a2, _b;
|
|
121
141
|
if (!event || event.type === "mutation") {
|
|
122
142
|
const tab = this.tabs[Math.max(this.selectedIndex, 0)];
|
|
123
143
|
return tab == null ? void 0 : tab.setAttribute(ARIA_SELECTED, "true");
|
|
@@ -138,20 +158,20 @@ var UHTMLTabListElement = class extends UHTMLElement {
|
|
|
138
158
|
else if (key === "Tab") next = getSelectedIndex(tabs);
|
|
139
159
|
else return;
|
|
140
160
|
setTimeout(() => {
|
|
141
|
-
tabs[prev]
|
|
142
|
-
tabs[next]
|
|
161
|
+
attr(tabs[prev], "tabindex", "-1");
|
|
162
|
+
attr(tabs[next], "tabindex", "0");
|
|
143
163
|
});
|
|
144
164
|
if (key !== "Tab") {
|
|
145
165
|
event.preventDefault();
|
|
146
|
-
tabs[next].focus();
|
|
166
|
+
(_b = (_a2 = tabs[next]).focus) == null ? void 0 : _b.call(_a2);
|
|
147
167
|
}
|
|
148
168
|
}
|
|
149
169
|
}
|
|
150
170
|
get tabsElement() {
|
|
151
|
-
return this
|
|
171
|
+
return getTabsElement(this);
|
|
152
172
|
}
|
|
153
173
|
get tabs() {
|
|
154
|
-
return this
|
|
174
|
+
return getTabs(this);
|
|
155
175
|
}
|
|
156
176
|
get selectedIndex() {
|
|
157
177
|
return getSelectedIndex(this.tabs);
|
|
@@ -172,31 +192,32 @@ var UHTMLTabElement = class extends UHTMLElement {
|
|
|
172
192
|
}
|
|
173
193
|
connectedCallback() {
|
|
174
194
|
attr(this, "role", "tab");
|
|
175
|
-
this
|
|
195
|
+
attr(this, "tabindex", this.selected ? "0" : "-1");
|
|
176
196
|
}
|
|
177
197
|
attributeChangedCallback() {
|
|
178
198
|
if (!SKIP_ATTR_CHANGE && this.selected && this.tabList) {
|
|
179
199
|
SKIP_ATTR_CHANGE = true;
|
|
180
|
-
const tabs =
|
|
181
|
-
const panels = queryWithoutNested("
|
|
182
|
-
const nextPanel = getPanel(this, panels[tabs.indexOf(this)]);
|
|
200
|
+
const tabs = this.tabList ? getTabs(this.tabList) : [];
|
|
201
|
+
const panels = queryWithoutNested("tabpanel", this.tabsElement || this);
|
|
202
|
+
const nextPanel = getPanel(this, panels[[...tabs].indexOf(this)]);
|
|
183
203
|
if (nextPanel) attr(nextPanel, SAFE_LABELLEDBY, useId(this));
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
204
|
+
let i = 0;
|
|
205
|
+
for (const tab of tabs) {
|
|
206
|
+
const panel = getPanel(tab, panels[i++]);
|
|
207
|
+
attr(tab, "tabindex", tab === this ? "0" : "-1");
|
|
187
208
|
attr(tab, ARIA_SELECTED, `${tab === this}`);
|
|
188
|
-
|
|
209
|
+
if (panel == null ? void 0 : panel.id) attr(tab, ARIA_CONTROLS, panel.id);
|
|
189
210
|
if (panel) panel.hidden = panel !== nextPanel;
|
|
190
|
-
}
|
|
211
|
+
}
|
|
191
212
|
SKIP_ATTR_CHANGE = false;
|
|
192
213
|
}
|
|
193
214
|
}
|
|
194
215
|
get tabsElement() {
|
|
195
|
-
return this
|
|
216
|
+
return getTabsElement(this);
|
|
196
217
|
}
|
|
197
218
|
get tabList() {
|
|
198
219
|
const tablist = this.parentElement;
|
|
199
|
-
return (tablist == null ? void 0 : tablist.
|
|
220
|
+
return (tablist == null ? void 0 : tablist.getAttribute("role")) === "tablist" ? tablist : null;
|
|
200
221
|
}
|
|
201
222
|
get selected() {
|
|
202
223
|
return attr(this, ARIA_SELECTED) === "true";
|
|
@@ -206,8 +227,8 @@ var UHTMLTabElement = class extends UHTMLElement {
|
|
|
206
227
|
}
|
|
207
228
|
/** Retrieves the ordinal position of an tab in a tablist. */
|
|
208
229
|
get index() {
|
|
209
|
-
const
|
|
210
|
-
return
|
|
230
|
+
const tablist = this.tabList;
|
|
231
|
+
return tablist ? [...getTabs(tablist)].indexOf(this) : 0;
|
|
211
232
|
}
|
|
212
233
|
get panel() {
|
|
213
234
|
return getPanel(this);
|
|
@@ -233,20 +254,21 @@ var UHTMLTabPanelElement = class extends UHTMLElement {
|
|
|
233
254
|
attr(this, "tabindex", hidden || isFocusable(this.firstChild) ? null : "0");
|
|
234
255
|
}
|
|
235
256
|
get tabsElement() {
|
|
236
|
-
return this
|
|
257
|
+
return getTabsElement(this);
|
|
237
258
|
}
|
|
238
259
|
get tabs() {
|
|
239
|
-
|
|
240
|
-
|
|
260
|
+
return getRoot(this).querySelectorAll(
|
|
261
|
+
`[role="tab"][${ARIA_CONTROLS}="${this.id}"]`
|
|
262
|
+
);
|
|
241
263
|
}
|
|
242
264
|
};
|
|
243
|
-
var queryWithoutNested = (
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return (el == null ? void 0 : el.nodeName) === "U-TABPANEL" ? el : null;
|
|
248
|
-
};
|
|
265
|
+
var queryWithoutNested = (role, self) => self.querySelectorAll(
|
|
266
|
+
`[role="${role}"]:not(:scope [role="tabpanel"] [role="${role}"])`
|
|
267
|
+
);
|
|
268
|
+
var getPanel = (tab, panel) => getRoot(tab).getElementById(attr(tab, ARIA_CONTROLS) || useId(panel));
|
|
249
269
|
var getSelectedIndex = (tabs) => [...tabs].findIndex((tab) => attr(tab, ARIA_SELECTED) === "true");
|
|
270
|
+
var getTabsElement = (self) => self.closest(`[${ATTR_TABS}]`);
|
|
271
|
+
var getTabs = (self) => self.querySelectorAll(`:scope > [role="tab"]`);
|
|
250
272
|
var setSelected = (tab) => tab && attr(tab, "aria-disabled") !== "true" && attr(tab, "aria-selected", "true");
|
|
251
273
|
var isFocusable = (el) => el instanceof Element && !el.matches(':disabled,[tabindex^="-"]') && el.matches(
|
|
252
274
|
`[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe`
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
"description": "The `<u-tabs>` HTML element is used to group a `<u-tablist>` and several `<u-tabpanel>` elements.\nNo MDN reference available.",
|
|
51
51
|
"name": "UHTMLTabsElement",
|
|
52
52
|
"members": [
|
|
53
|
+
{
|
|
54
|
+
"kind": "method",
|
|
55
|
+
"name": "handleEvent"
|
|
56
|
+
},
|
|
53
57
|
{
|
|
54
58
|
"kind": "field",
|
|
55
59
|
"name": "tabList",
|
|
@@ -111,7 +115,7 @@
|
|
|
111
115
|
"kind": "field",
|
|
112
116
|
"name": "tabsElement",
|
|
113
117
|
"type": {
|
|
114
|
-
"text": "
|
|
118
|
+
"text": "HTMLElement | null"
|
|
115
119
|
},
|
|
116
120
|
"readonly": true
|
|
117
121
|
},
|
|
@@ -179,7 +183,7 @@
|
|
|
179
183
|
"kind": "field",
|
|
180
184
|
"name": "panel",
|
|
181
185
|
"type": {
|
|
182
|
-
"text": "
|
|
186
|
+
"text": "HTMLElement | null"
|
|
183
187
|
},
|
|
184
188
|
"readonly": true
|
|
185
189
|
}
|