@vaadin/tabsheet 24.4.0-alpha9 → 24.4.0-beta2
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/README.md +0 -1
- package/package.json +8 -8
- package/src/vaadin-tabsheet-mixin.js +39 -12
- package/web-types.json +1 -1
- package/web-types.lit.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,6 @@ A web component for organizing and grouping content into sections.
|
|
|
5
5
|
[Documentation + Live Demo ↗](https://vaadin.com/docs/latest/components/tabs/#tab-sheet)
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@vaadin/tabsheet)
|
|
8
|
-
[](https://discord.gg/PHmkCKC)
|
|
9
8
|
|
|
10
9
|
```html
|
|
11
10
|
<vaadin-tabsheet>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/tabsheet",
|
|
3
|
-
"version": "24.4.0-
|
|
3
|
+
"version": "24.4.0-beta2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -37,12 +37,12 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
39
39
|
"@polymer/polymer": "^3.0.0",
|
|
40
|
-
"@vaadin/component-base": "24.4.0-
|
|
41
|
-
"@vaadin/scroller": "24.4.0-
|
|
42
|
-
"@vaadin/tabs": "24.4.0-
|
|
43
|
-
"@vaadin/vaadin-lumo-styles": "24.4.0-
|
|
44
|
-
"@vaadin/vaadin-material-styles": "24.4.0-
|
|
45
|
-
"@vaadin/vaadin-themable-mixin": "24.4.0-
|
|
40
|
+
"@vaadin/component-base": "24.4.0-beta2",
|
|
41
|
+
"@vaadin/scroller": "24.4.0-beta2",
|
|
42
|
+
"@vaadin/tabs": "24.4.0-beta2",
|
|
43
|
+
"@vaadin/vaadin-lumo-styles": "24.4.0-beta2",
|
|
44
|
+
"@vaadin/vaadin-material-styles": "24.4.0-beta2",
|
|
45
|
+
"@vaadin/vaadin-themable-mixin": "24.4.0-beta2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@esm-bundle/chai": "^4.3.4",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"web-types.json",
|
|
54
54
|
"web-types.lit.json"
|
|
55
55
|
],
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "886ab2e7ccb8353ac3b7a42ebb96dfe2d1211556"
|
|
57
57
|
}
|
|
@@ -18,11 +18,29 @@ class TabsSlotController extends SlotController {
|
|
|
18
18
|
super(host, 'tabs');
|
|
19
19
|
this.__tabsItemsChangedListener = this.__tabsItemsChangedListener.bind(this);
|
|
20
20
|
this.__tabsSelectedChangedListener = this.__tabsSelectedChangedListener.bind(this);
|
|
21
|
+
this.__tabIdObserver = new MutationObserver((mutations) => {
|
|
22
|
+
mutations.forEach((mutation) => {
|
|
23
|
+
const tab = mutation.target;
|
|
24
|
+
|
|
25
|
+
host.__linkTabAndPanel(tab);
|
|
26
|
+
|
|
27
|
+
if (tab.selected) {
|
|
28
|
+
host.__togglePanels(tab);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
21
32
|
}
|
|
22
33
|
|
|
23
34
|
/** @private */
|
|
24
35
|
__tabsItemsChangedListener() {
|
|
25
|
-
this.
|
|
36
|
+
this.__tabIdObserver.disconnect();
|
|
37
|
+
const items = this.tabs.items || [];
|
|
38
|
+
items.forEach((tab) => {
|
|
39
|
+
this.__tabIdObserver.observe(tab, {
|
|
40
|
+
attributeFilter: ['id'],
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
this.host._setItems(items);
|
|
26
44
|
}
|
|
27
45
|
|
|
28
46
|
/** @private */
|
|
@@ -142,15 +160,7 @@ export const TabSheetMixin = (superClass) =>
|
|
|
142
160
|
return;
|
|
143
161
|
}
|
|
144
162
|
items.forEach((tabItem) => {
|
|
145
|
-
|
|
146
|
-
if (panel) {
|
|
147
|
-
panel.role = 'tabpanel';
|
|
148
|
-
if (!panel.id) {
|
|
149
|
-
panel.id = `tabsheet-panel-${generateUniqueId()}`;
|
|
150
|
-
}
|
|
151
|
-
panel.setAttribute('aria-labelledby', tabItem.id);
|
|
152
|
-
tabItem.setAttribute('aria-controls', panel.id);
|
|
153
|
-
}
|
|
163
|
+
this.__linkTabAndPanel(tabItem, panels);
|
|
154
164
|
});
|
|
155
165
|
}
|
|
156
166
|
|
|
@@ -162,10 +172,14 @@ export const TabSheetMixin = (superClass) =>
|
|
|
162
172
|
if (!items || !panels || selected === undefined) {
|
|
163
173
|
return;
|
|
164
174
|
}
|
|
165
|
-
|
|
166
|
-
|
|
175
|
+
this.__togglePanels(items[selected], panels);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** @private */
|
|
179
|
+
__togglePanels(selectedTab, panels = this.__panels) {
|
|
167
180
|
const selectedTabId = selectedTab ? selectedTab.id : '';
|
|
168
181
|
const selectedPanel = panels.find((panel) => panel.getAttribute('tab') === selectedTabId);
|
|
182
|
+
const content = this.shadowRoot.querySelector('[part="content"]');
|
|
169
183
|
|
|
170
184
|
// Mark loading state if a selected panel is not found.
|
|
171
185
|
this.toggleAttribute('loading', !selectedPanel);
|
|
@@ -183,4 +197,17 @@ export const TabSheetMixin = (superClass) =>
|
|
|
183
197
|
panel.hidden = panel !== selectedPanel;
|
|
184
198
|
});
|
|
185
199
|
}
|
|
200
|
+
|
|
201
|
+
/** @private */
|
|
202
|
+
__linkTabAndPanel(tab, panels = this.__panels) {
|
|
203
|
+
const panel = panels.find((panel) => panel.getAttribute('tab') === tab.id);
|
|
204
|
+
if (panel) {
|
|
205
|
+
panel.role = 'tabpanel';
|
|
206
|
+
if (!panel.id) {
|
|
207
|
+
panel.id = `tabsheet-panel-${generateUniqueId()}`;
|
|
208
|
+
}
|
|
209
|
+
panel.setAttribute('aria-labelledby', tab.id);
|
|
210
|
+
tab.setAttribute('aria-controls', panel.id);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
186
213
|
};
|
package/web-types.json
CHANGED