@vaadin/tabsheet 24.3.8 → 24.3.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/tabsheet",
3
- "version": "24.3.8",
3
+ "version": "24.3.10",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -36,12 +36,12 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "@polymer/polymer": "^3.0.0",
39
- "@vaadin/component-base": "~24.3.8",
40
- "@vaadin/scroller": "~24.3.8",
41
- "@vaadin/tabs": "~24.3.8",
42
- "@vaadin/vaadin-lumo-styles": "~24.3.8",
43
- "@vaadin/vaadin-material-styles": "~24.3.8",
44
- "@vaadin/vaadin-themable-mixin": "~24.3.8"
39
+ "@vaadin/component-base": "~24.3.10",
40
+ "@vaadin/scroller": "~24.3.10",
41
+ "@vaadin/tabs": "~24.3.10",
42
+ "@vaadin/vaadin-lumo-styles": "~24.3.10",
43
+ "@vaadin/vaadin-material-styles": "~24.3.10",
44
+ "@vaadin/vaadin-themable-mixin": "~24.3.10"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@esm-bundle/chai": "^4.3.4",
@@ -52,5 +52,5 @@
52
52
  "web-types.json",
53
53
  "web-types.lit.json"
54
54
  ],
55
- "gitHead": "144e479d60d7d52edd4d35aba032c6863c02e878"
55
+ "gitHead": "32a4f327e78490074eaefa768f58857b83ca6278"
56
56
  }
@@ -25,11 +25,29 @@ class TabsSlotController extends SlotController {
25
25
  super(host, 'tabs');
26
26
  this.__tabsItemsChangedListener = this.__tabsItemsChangedListener.bind(this);
27
27
  this.__tabsSelectedChangedListener = this.__tabsSelectedChangedListener.bind(this);
28
+ this.__tabIdObserver = new MutationObserver((mutations) => {
29
+ mutations.forEach((mutation) => {
30
+ const tab = mutation.target;
31
+
32
+ host.__linkTabAndPanel(tab);
33
+
34
+ if (tab.selected) {
35
+ host.__togglePanels(tab);
36
+ }
37
+ });
38
+ });
28
39
  }
29
40
 
30
41
  /** @private */
31
42
  __tabsItemsChangedListener() {
32
- this.host._setItems(this.tabs.items);
43
+ this.__tabIdObserver.disconnect();
44
+ const items = this.tabs.items || [];
45
+ items.forEach((tab) => {
46
+ this.__tabIdObserver.observe(tab, {
47
+ attributeFilter: ['id'],
48
+ });
49
+ });
50
+ this.host._setItems(items);
33
51
  }
34
52
 
35
53
  /** @private */
@@ -242,16 +260,7 @@ class TabSheet extends ControllerMixin(DelegateStateMixin(ElementMixin(ThemableM
242
260
  }
243
261
 
244
262
  items.forEach((tabItem) => {
245
- const panel = panels.find((panel) => panel.getAttribute('tab') === tabItem.id);
246
- if (panel) {
247
- panel.role = 'tabpanel';
248
- if (!panel.id) {
249
- panel.id = `tabsheet-panel-${generateUniqueId()}`;
250
- }
251
- panel.setAttribute('aria-labelledby', tabItem.id);
252
-
253
- tabItem.setAttribute('aria-controls', panel.id);
254
- }
263
+ this.__linkTabAndPanel(tabItem, panels);
255
264
  });
256
265
  }
257
266
 
@@ -264,11 +273,14 @@ class TabSheet extends ControllerMixin(DelegateStateMixin(ElementMixin(ThemableM
264
273
  return;
265
274
  }
266
275
 
267
- const content = this.shadowRoot.querySelector('[part="content"]');
276
+ this.__togglePanels(items[selected], panels);
277
+ }
268
278
 
269
- const selectedTab = items[selected];
279
+ /** @private */
280
+ __togglePanels(selectedTab, panels = this.__panels) {
270
281
  const selectedTabId = selectedTab ? selectedTab.id : '';
271
282
  const selectedPanel = panels.find((panel) => panel.getAttribute('tab') === selectedTabId);
283
+ const content = this.shadowRoot.querySelector('[part="content"]');
272
284
 
273
285
  // Mark loading state if a selected panel is not found.
274
286
  this.toggleAttribute('loading', !selectedPanel);
@@ -288,6 +300,19 @@ class TabSheet extends ControllerMixin(DelegateStateMixin(ElementMixin(ThemableM
288
300
  panel.hidden = panel !== selectedPanel;
289
301
  });
290
302
  }
303
+
304
+ /** @private */
305
+ __linkTabAndPanel(tab, panels = this.__panels) {
306
+ const panel = panels.find((panel) => panel.getAttribute('tab') === tab.id);
307
+ if (panel) {
308
+ panel.role = 'tabpanel';
309
+ if (!panel.id) {
310
+ panel.id = `tabsheet-panel-${generateUniqueId()}`;
311
+ }
312
+ panel.setAttribute('aria-labelledby', tab.id);
313
+ tab.setAttribute('aria-controls', panel.id);
314
+ }
315
+ }
291
316
  }
292
317
 
293
318
  defineCustomElement(TabSheet);
package/web-types.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/tabsheet",
4
- "version": "24.3.8",
4
+ "version": "24.3.10",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/tabsheet",
4
- "version": "24.3.8",
4
+ "version": "24.3.10",
5
5
  "description-markup": "markdown",
6
6
  "framework": "lit",
7
7
  "framework-config": {