igniteui-webcomponents 5.4.0 → 6.0.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/components/checkbox/checkbox-base.d.ts +0 -2
  3. package/components/checkbox/checkbox-base.js.map +1 -1
  4. package/components/common/controllers/resize-observer.d.ts +37 -0
  5. package/components/common/controllers/resize-observer.js +37 -0
  6. package/components/common/controllers/resize-observer.js.map +1 -0
  7. package/components/common/definitions/defineAllComponents.js +0 -2
  8. package/components/common/definitions/defineAllComponents.js.map +1 -1
  9. package/components/common/util.d.ts +1 -17
  10. package/components/common/util.js +13 -10
  11. package/components/common/util.js.map +1 -1
  12. package/components/popover/popover.js +1 -1
  13. package/components/popover/popover.js.map +1 -1
  14. package/components/popover/themes/light/popover.base.css.js +1 -1
  15. package/components/popover/themes/light/popover.base.css.js.map +1 -1
  16. package/components/radio/radio.d.ts +0 -2
  17. package/components/radio/radio.js.map +1 -1
  18. package/components/slider/range-slider.d.ts +0 -2
  19. package/components/slider/range-slider.js.map +1 -1
  20. package/components/stepper/step.d.ts +1 -1
  21. package/components/stepper/step.js +3 -2
  22. package/components/stepper/step.js.map +1 -1
  23. package/components/stepper/stepper.common.d.ts +0 -4
  24. package/components/stepper/stepper.common.js.map +1 -1
  25. package/components/stepper/stepper.d.ts +2 -2
  26. package/components/stepper/stepper.js +2 -9
  27. package/components/stepper/stepper.js.map +1 -1
  28. package/components/tabs/tab-dom.d.ts +66 -0
  29. package/components/tabs/tab-dom.js +93 -0
  30. package/components/tabs/tab-dom.js.map +1 -0
  31. package/components/tabs/tab.d.ts +14 -15
  32. package/components/tabs/tab.js +27 -22
  33. package/components/tabs/tab.js.map +1 -1
  34. package/components/tabs/tabs.d.ts +42 -49
  35. package/components/tabs/tabs.js +178 -231
  36. package/components/tabs/tabs.js.map +1 -1
  37. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
  38. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
  39. package/components/tabs/themes/shared/tab/tab.common.css.js +1 -1
  40. package/components/tabs/themes/shared/tab/tab.common.css.js.map +1 -1
  41. package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
  42. package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
  43. package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
  44. package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
  45. package/components/tabs/themes/shared/tab/tab.material.css.js +3 -0
  46. package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -0
  47. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js +1 -1
  48. package/components/tabs/themes/shared/tabs/tabs.bootstrap.css.js.map +1 -1
  49. package/components/tabs/themes/shared/tabs/tabs.common.css.js +1 -1
  50. package/components/tabs/themes/shared/tabs/tabs.common.css.js.map +1 -1
  51. package/components/tabs/themes/shared/tabs/tabs.fluent.css.js +1 -1
  52. package/components/tabs/themes/shared/tabs/tabs.fluent.css.js.map +1 -1
  53. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
  54. package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
  55. package/components/tabs/themes/shared/tabs/tabs.material.css.d.ts +1 -0
  56. package/components/tabs/themes/shared/tabs/tabs.material.css.js +3 -0
  57. package/components/tabs/themes/shared/tabs/tabs.material.css.js.map +1 -0
  58. package/components/tabs/themes/tab-themes.js +7 -0
  59. package/components/tabs/themes/tab-themes.js.map +1 -1
  60. package/components/tabs/themes/tab.base.css.js +1 -1
  61. package/components/tabs/themes/tab.base.css.js.map +1 -1
  62. package/components/tabs/themes/tabs-themes.js +3 -2
  63. package/components/tabs/themes/tabs-themes.js.map +1 -1
  64. package/components/tabs/themes/tabs.base.css.js +1 -1
  65. package/components/tabs/themes/tabs.base.css.js.map +1 -1
  66. package/components/tabs/themes/tabs.common.css.d.ts +1 -0
  67. package/components/tabs/themes/tabs.common.css.js +3 -0
  68. package/components/tabs/themes/tabs.common.css.js.map +1 -0
  69. package/components/textarea/textarea.d.ts +2 -2
  70. package/components/textarea/textarea.js.map +1 -1
  71. package/components/tooltip/tooltip.js +1 -1
  72. package/components/tooltip/tooltip.js.map +1 -1
  73. package/components/types.d.ts +1 -1
  74. package/components/types.js.map +1 -1
  75. package/custom-elements.json +390 -360
  76. package/igniteui-webcomponents.css-data.json +1 -1
  77. package/igniteui-webcomponents.html-data.json +1 -1
  78. package/index.d.ts +0 -5
  79. package/index.js +0 -1
  80. package/index.js.map +1 -1
  81. package/package.json +4 -3
  82. package/web-types.json +2 -2
  83. package/components/tabs/tab-panel.d.ts +0 -21
  84. package/components/tabs/tab-panel.js +0 -26
  85. package/components/tabs/tab-panel.js.map +0 -1
  86. package/components/tabs/themes/tab-panel.base.css.js +0 -3
  87. package/components/tabs/themes/tab-panel.base.css.js.map +0 -1
  88. /package/components/tabs/themes/{tab-panel.base.css.d.ts → shared/tab/tab.material.css.d.ts} +0 -0
@@ -6,96 +6,67 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  var IgcTabsComponent_1;
8
8
  import { LitElement, html, nothing } from 'lit';
9
- import { eventOptions, property, query, queryAssignedElements, state, } from 'lit/decorators.js';
9
+ import { eventOptions, property, queryAssignedElements, state, } from 'lit/decorators.js';
10
+ import { cache } from 'lit/directives/cache.js';
10
11
  import { createRef, ref } from 'lit/directives/ref.js';
12
+ import { styleMap } from 'lit/directives/style-map.js';
11
13
  import { themes } from '../../theming/theming-decorator.js';
12
14
  import IgcIconButtonComponent from '../button/icon-button.js';
13
15
  import { addKeybindings, arrowLeft, arrowRight, endKey, homeKey, } from '../common/controllers/key-bindings.js';
14
16
  import { createMutationController, } from '../common/controllers/mutation-observer.js';
15
- import { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';
17
+ import { createResizeController } from '../common/controllers/resize-observer.js';
16
18
  import { watch } from '../common/decorators/watch.js';
17
19
  import { registerComponent } from '../common/definitions/register.js';
18
20
  import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
19
- import { createCounter, getOffset, isLTR, wrap } from '../common/util.js';
20
- import IgcTabPanelComponent from './tab-panel.js';
21
+ import { findElementFromEventPath, first, getRoot, isEmpty, isLTR, isString, last, partNameMap, scrollIntoView, wrap, } from '../common/util.js';
22
+ import { createTabHelpers, getTabHeader } from './tab-dom.js';
21
23
  import IgcTabComponent from './tab.js';
22
24
  import { styles as shared } from './themes/shared/tabs/tabs.common.css.js';
23
25
  import { all } from './themes/tabs-themes.js';
24
26
  import { styles } from './themes/tabs.base.css.js';
25
27
  let IgcTabsComponent = IgcTabsComponent_1 = class IgcTabsComponent extends EventEmitterMixin(LitElement) {
26
28
  static register() {
27
- registerComponent(IgcTabsComponent_1, IgcTabComponent, IgcTabPanelComponent, IgcIconButtonComponent);
29
+ registerComponent(IgcTabsComponent_1, IgcTabComponent, IgcIconButtonComponent);
28
30
  }
29
- get _closestActiveTabIndex() {
30
- const root = this.getRootNode();
31
- const tabs = this.enabledTabs;
32
- const tab = root.activeElement
33
- ? root.activeElement.closest(IgcTabComponent.tagName)
34
- : null;
35
- return tabs.indexOf(tab);
31
+ get _enabledTabs() {
32
+ return this._tabs.filter((tab) => !tab.disabled);
36
33
  }
37
- _mutationCallback({ changes: { attributes, added, removed }, }) {
38
- const ownAttributes = attributes.filter((tab) => tab.closest(this.tagName) === this);
39
- const ownAdded = added.filter(({ target }) => target.closest(this.tagName) === this);
40
- const ownRemoved = removed.filter(({ target }) => target.closest(this.tagName) === this);
41
- this.setSelectedTab(ownAttributes.find((tab) => tab.selected));
42
- if (ownRemoved.length || ownAdded.length) {
43
- for (const { node: tab } of ownRemoved) {
44
- this.resizeObserver?.unobserve(tab);
45
- if (tab.selected && tab === this.activeTab) {
46
- this.activeTab = undefined;
47
- }
48
- }
49
- for (const { node: tab } of ownAdded) {
50
- this.resizeObserver?.observe(tab);
51
- if (tab.selected) {
52
- this.setSelectedTab(tab);
53
- }
54
- }
55
- this.syncAttributes();
56
- }
57
- this.updateSelectedTab();
58
- this.activeTab?.scrollIntoView({ block: 'nearest' });
59
- this.alignIndicator();
60
- }
61
- get enabledTabs() {
62
- return this.tabs.filter((tab) => !tab.disabled);
34
+ get tabs() {
35
+ return this._tabs;
63
36
  }
64
37
  get selected() {
65
- return this.activeTab?.panel ?? '';
66
- }
67
- alignIndicator() {
68
- const styles = {
69
- visibility: this.activeTab ? 'visible' : 'hidden',
70
- transitionDuration: '0.3s',
71
- };
72
- if (this.activeTab && this.wrapper) {
73
- Object.assign(styles, {
74
- width: `${this.activeTab.offsetWidth}px`,
75
- transform: `translate(${isLTR(this)
76
- ? getOffset(this.activeTab, this.wrapper).left
77
- : getOffset(this.activeTab, this.wrapper).right}px)`,
78
- });
38
+ if (this._activeTab) {
39
+ return this._activeTab.label || this._activeTab.id;
79
40
  }
80
- Object.assign(this.selectedIndicator?.style ?? {}, styles);
41
+ return '';
42
+ }
43
+ _alignmentChanged() {
44
+ this._domHelpers.setIndicator(this._activeTab);
81
45
  }
82
46
  constructor() {
83
47
  super();
84
- this.headerRef = createRef();
85
- this.showScrollButtons = false;
86
- this.disableStartScrollButton = true;
87
- this.disableEndScrollButton = false;
48
+ this._resizeController = createResizeController(this, {
49
+ callback: this._resizeCallback,
50
+ options: { box: 'border-box' },
51
+ target: null,
52
+ });
53
+ this._headerRef = createRef();
54
+ this._indicatorRef = createRef();
55
+ this._domHelpers = createTabHelpers(this, this._headerRef, this._indicatorRef);
88
56
  this.alignment = 'start';
89
57
  this.activation = 'auto';
90
58
  addKeybindings(this, {
91
- ref: this.headerRef,
59
+ ref: this._headerRef,
60
+ skip: this._skipKeyboard,
92
61
  bindingDefaults: { preventDefault: true },
93
62
  })
94
- .set(arrowLeft, this.onArrowLeft)
95
- .set(arrowRight, this.onArrowRight)
96
- .set(homeKey, this.onHomeKey)
97
- .set(endKey, this.onEndKey)
98
- .setActivateHandler(this.onActivationKey);
63
+ .set(arrowLeft, () => this._handleArrowKeys(isLTR(this) ? -1 : 1))
64
+ .set(arrowRight, () => this._handleArrowKeys(isLTR(this) ? 1 : -1))
65
+ .set(homeKey, this._handleHomeKey)
66
+ .set(endKey, this._handleEndKey)
67
+ .setActivateHandler(this._handleActivationKeys, {
68
+ preventDefault: false,
69
+ });
99
70
  createMutationController(this, {
100
71
  callback: this._mutationCallback,
101
72
  config: {
@@ -107,209 +78,186 @@ let IgcTabsComponent = IgcTabsComponent_1 = class IgcTabsComponent extends Event
107
78
  });
108
79
  }
109
80
  async firstUpdated() {
110
- this.showScrollButtons =
111
- this.container.scrollWidth > this.container.clientWidth;
112
81
  await this.updateComplete;
113
- this.syncAttributes();
114
- this.setupObserver();
115
- this.setSelectedTab(this.tabs.filter((tab) => tab.selected).at(-1) ?? this.enabledTabs.at(0));
116
- this.updateSelectedTab();
117
- }
118
- disconnectedCallback() {
119
- this.resizeObserver?.disconnect();
120
- super.disconnectedCallback();
82
+ const selectedTab = this._tabs.findLast((tab) => tab.selected) ?? first(this._enabledTabs);
83
+ this._domHelpers.setStyleProperties();
84
+ this._domHelpers.setScrollButtonState();
85
+ this._setSelectedTab(selectedTab, false);
86
+ this._resizeController.observe(this._headerRef.value);
121
87
  }
122
- updateButtonsOnResize() {
123
- this.showScrollButtons = false;
124
- this.performUpdate();
125
- this.showScrollButtons =
126
- this.container.scrollWidth > this.container.clientWidth;
127
- this.updateScrollButtons();
88
+ connectedCallback() {
89
+ super.connectedCallback();
90
+ this.role = 'tablist';
128
91
  }
129
- updateScrollButtons() {
130
- const { scrollLeft, offsetWidth } = this.container;
131
- const { scrollWidth } = this.wrapper;
132
- this.disableEndScrollButton =
133
- scrollWidth <= Math.abs(scrollLeft) + offsetWidth;
134
- this.disableStartScrollButton = scrollLeft === 0;
92
+ updated() {
93
+ if (this._domHelpers.isLeftToRightChanged) {
94
+ this._domHelpers.setIndicator(this._activeTab);
95
+ }
135
96
  }
136
- setupObserver() {
137
- this.resizeObserver = new ResizeObserver(() => {
138
- this.updateButtonsOnResize();
139
- this.alignIndicator();
140
- });
141
- [this.container, this.wrapper, ...this.tabs].forEach((element) => this.resizeObserver.observe(element));
97
+ _resizeCallback() {
98
+ this._domHelpers.setStyleProperties();
99
+ this._domHelpers.setScrollButtonState();
100
+ this._domHelpers.setIndicator(this._activeTab);
142
101
  }
143
- updateSelectedTab() {
144
- this.tabs.forEach((tab) => {
145
- tab.selected = tab === this.activeTab;
146
- });
147
- this.panels.forEach((panel) => {
148
- panel.hidden = panel.id !== this.activeTab?.panel;
149
- });
102
+ _mutationCallback(parameters) {
103
+ this._selectedAttributeChanged(parameters);
104
+ this._handleTabsRemoved(parameters);
105
+ this._handleTabsAdded(parameters);
106
+ this._domHelpers.setStyleProperties();
107
+ this._domHelpers.setScrollButtonState();
108
+ this._domHelpers.setIndicator(this._activeTab);
150
109
  }
151
- syncAttributes() {
152
- const prefix = this.id ? `${this.id}-` : '';
153
- this.tabs.forEach((tab, index) => {
154
- if (!tab.panel) {
155
- tab.panel =
156
- this.panels.at(index)?.id ??
157
- `${prefix}tab-${IgcTabsComponent_1.increment()}`;
158
- }
159
- this.panels
160
- .find((panel) => panel.id === tab.panel)
161
- ?.setAttribute('aria-labelledby', tab.id);
162
- });
110
+ _selectedAttributeChanged({ changes, }) {
111
+ const selected = changes.attributes.find((tab) => this._tabs.includes(tab) && tab.selected);
112
+ this._setSelectedTab(selected, false);
163
113
  }
164
- setSelectedTab(tab) {
165
- if (!tab || tab === this.activeTab) {
166
- return;
114
+ _handleTabsAdded({ changes, }) {
115
+ if (!isEmpty(changes.added)) {
116
+ const lastAdded = changes.added.findLast((change) => change.target.closest(this.tagName) === this && change.node.selected)?.node;
117
+ this._setSelectedTab(lastAdded, false);
167
118
  }
168
- if (this.activeTab) {
169
- this.activeTab.selected = false;
119
+ }
120
+ _handleTabsRemoved({ changes, }) {
121
+ if (!isEmpty(changes.removed)) {
122
+ let nextSelectedTab = null;
123
+ const removed = changes.removed.filter((change) => change.target.closest(this.tagName) === this);
124
+ for (const each of removed) {
125
+ if (each.node.selected && each.node === this._activeTab) {
126
+ nextSelectedTab = first(this._enabledTabs);
127
+ break;
128
+ }
129
+ }
130
+ if (nextSelectedTab) {
131
+ this._setSelectedTab(nextSelectedTab, false);
132
+ }
170
133
  }
171
- this.activeTab = tab;
172
- this.activeTab.selected = true;
173
134
  }
174
- scrollByTabOffset(direction) {
175
- const { scrollLeft, offsetWidth } = this.container;
176
- const LTR = isLTR(this);
177
- const next = direction === 'end';
178
- const pivot = Math.abs(next ? offsetWidth + scrollLeft : scrollLeft);
179
- let amount = this.tabs
180
- .map((tab) => ({
181
- start: LTR
182
- ? getOffset(tab, this.wrapper).left
183
- : Math.abs(getOffset(tab, this.wrapper).right),
184
- width: tab.offsetWidth,
185
- }))
186
- .filter((offset) => next ? offset.start + offset.width > pivot : offset.start < pivot)
187
- .at(next ? 0 : -1).width;
188
- amount *= next ? 1 : -1;
189
- this.container.scrollBy({ left: LTR ? amount : -amount });
135
+ _getClosestActiveTabIndex() {
136
+ const active = getRoot(this).activeElement;
137
+ const tab = active ? active.closest(IgcTabComponent.tagName) : null;
138
+ return tab ? this._enabledTabs.indexOf(tab) : -1;
190
139
  }
191
- handleClick(event) {
192
- const target = event.target;
193
- const tab = target.closest('igc-tab');
194
- if (!(tab && this.contains(tab)) || tab.disabled) {
140
+ _setSelectedTab(tab, shouldEmit = true) {
141
+ if (!tab || tab === this._activeTab) {
195
142
  return;
196
143
  }
197
- tab.focus();
198
- this.setSelectedTab(tab);
199
- this.emitEvent('igcChange', { detail: tab });
200
- }
201
- _scrollToAndFocus(tab) {
202
- tab.scrollIntoView({ behavior: 'auto', block: 'nearest' });
203
- tab.focus();
144
+ if (this._activeTab) {
145
+ this._activeTab.selected = false;
146
+ }
147
+ tab.selected = true;
148
+ this._activeTab = tab;
149
+ scrollIntoView(getTabHeader(tab));
150
+ this._domHelpers.setIndicator(this._activeTab);
151
+ if (shouldEmit) {
152
+ this.emitEvent('igcChange', { detail: this._activeTab });
153
+ }
204
154
  }
205
- _kbActivateTab(tab) {
206
- this._scrollToAndFocus(tab);
155
+ _keyboardActivateTab(tab) {
156
+ const header = getTabHeader(tab);
157
+ this._domHelpers.setScrollSnap();
158
+ scrollIntoView(header);
159
+ header.focus({ preventScroll: true });
207
160
  if (this.activation === 'auto') {
208
- this.setSelectedTab(tab);
209
- this.emitEvent('igcChange', { detail: tab });
161
+ this._setSelectedTab(tab);
210
162
  }
211
163
  }
212
- onArrowLeft() {
213
- const tabs = this.enabledTabs;
214
- const delta = isLTR(this) ? -1 : 1;
215
- this._kbActivateTab(tabs[wrap(0, tabs.length - 1, this._closestActiveTabIndex + delta)]);
164
+ _skipKeyboard(node, event) {
165
+ return !(this._isEventFromTabHeader(event) &&
166
+ this._tabs.includes(node.closest(IgcTabComponent.tagName)));
167
+ }
168
+ _isEventFromTabHeader(event) {
169
+ return findElementFromEventPath('[part~="tab-header"]', event);
170
+ }
171
+ _handleArrowKeys(delta) {
172
+ const tabs = this._enabledTabs;
173
+ this._keyboardActivateTab(tabs[wrap(0, tabs.length - 1, this._getClosestActiveTabIndex() + delta)]);
216
174
  }
217
- onArrowRight() {
218
- const tabs = this.enabledTabs;
219
- const delta = isLTR(this) ? 1 : -1;
220
- this._kbActivateTab(tabs[wrap(0, tabs.length - 1, this._closestActiveTabIndex + delta)]);
175
+ _handleHomeKey() {
176
+ this._keyboardActivateTab(first(this._enabledTabs));
221
177
  }
222
- onHomeKey() {
223
- this._kbActivateTab(this.enabledTabs.at(0));
178
+ _handleEndKey() {
179
+ this._keyboardActivateTab(last(this._enabledTabs));
224
180
  }
225
- onEndKey() {
226
- this._kbActivateTab(this.enabledTabs.at(-1));
181
+ _handleActivationKeys() {
182
+ const tabs = this._enabledTabs;
183
+ const index = this._getClosestActiveTabIndex();
184
+ if (index > -1) {
185
+ this._setSelectedTab(tabs[index], false);
186
+ this._keyboardActivateTab(tabs[index]);
187
+ }
227
188
  }
228
- onActivationKey() {
229
- const tabs = this.enabledTabs;
230
- const index = this._closestActiveTabIndex;
231
- this.setSelectedTab(tabs[index]);
232
- this._kbActivateTab(tabs[index]);
189
+ _handleClick(event) {
190
+ if (!this._isEventFromTabHeader(event)) {
191
+ return;
192
+ }
193
+ const tab = findElementFromEventPath(IgcTabComponent.tagName, event);
194
+ if (!(tab && this._tabs.includes(tab)) || tab?.disabled) {
195
+ return;
196
+ }
197
+ this._domHelpers.setScrollSnap();
198
+ getTabHeader(tab).focus();
199
+ this._setSelectedTab(tab);
233
200
  }
234
- handleScroll() {
235
- this.updateScrollButtons();
201
+ _handleScroll() {
202
+ this._domHelpers.setScrollButtonState();
236
203
  }
237
- select(name) {
238
- this.setSelectedTab(this.tabs.find((el) => el.panel === name));
204
+ select(ref) {
205
+ const tab = isString(ref) ? this._tabs.find((t) => t.id === ref) : ref;
206
+ if (tab) {
207
+ this._setSelectedTab(tab, false);
208
+ }
239
209
  }
240
- renderScrollButton(direction) {
241
- const start = direction === 'start';
242
- return this.showScrollButtons
243
- ? html `<igc-icon-button
244
- tabindex="-1"
245
- aria-hidden="true"
246
- variant="flat"
247
- collection="default"
248
- part="${direction}-scroll-button"
249
- exportparts="icon"
250
- name="${start ? 'prev' : 'next'}"
251
- .disabled=${start
252
- ? this.disableStartScrollButton
253
- : this.disableEndScrollButton}
254
- @click=${() => this.scrollByTabOffset(direction)}
255
- ></igc-icon-button>`
256
- : nothing;
210
+ _renderScrollButton(direction) {
211
+ const isStart = direction === 'start';
212
+ const { start, end } = this._domHelpers.scrollButtonsDisabled;
213
+ return html `${cache(this._domHelpers.hasScrollButtons
214
+ ? html `
215
+ <igc-icon-button
216
+ tabindex="-1"
217
+ variant="flat"
218
+ collection="default"
219
+ part="${direction}-scroll-button"
220
+ exportparts="icon"
221
+ name=${isStart ? 'prev' : 'next'}
222
+ ?disabled=${isStart ? start : end}
223
+ @click=${() => this._domHelpers.scrollTabs(direction)}
224
+ >
225
+ </igc-icon-button>
226
+ `
227
+ : nothing)}`;
257
228
  }
258
229
  render() {
230
+ const part = partNameMap({
231
+ inner: true,
232
+ scrollable: this._domHelpers.hasScrollButtons,
233
+ });
259
234
  return html `
260
- <div part="headers">
261
- ${this.renderScrollButton('start')}
262
- <div part="headers-content" @scroll=${this.handleScroll}>
263
- <div part="headers-wrapper">
264
- <div
265
- ${ref(this.headerRef)}
266
- part="headers-scroll"
267
- role="tablist"
268
- @click=${this.handleClick}
269
- >
270
- <slot></slot>
271
- </div>
272
- <div part="selected-indicator"></div>
235
+ <div
236
+ ${ref(this._headerRef)}
237
+ part="tabs"
238
+ style=${styleMap(this._domHelpers.styleProperties)}
239
+ @scroll=${this._handleScroll}
240
+ >
241
+ <div part=${part}>
242
+ ${this._renderScrollButton('start')}
243
+ <slot @click=${this._handleClick}></slot>
244
+ ${this._renderScrollButton('end')}
245
+ <div part="selected-indicator">
246
+ <span ${ref(this._indicatorRef)}></span>
273
247
  </div>
274
248
  </div>
275
- ${this.renderScrollButton('end')}
276
- </div>
277
- <div part="content">
278
- <slot name="panel"></slot>
279
249
  </div>
280
250
  `;
281
251
  }
282
252
  };
283
253
  IgcTabsComponent.tagName = 'igc-tabs';
284
254
  IgcTabsComponent.styles = [styles, shared];
285
- IgcTabsComponent.increment = createCounter();
286
255
  __decorate([
287
256
  queryAssignedElements({ selector: IgcTabComponent.tagName })
288
- ], IgcTabsComponent.prototype, "tabs", void 0);
289
- __decorate([
290
- queryAssignedElements({ slot: 'panel' })
291
- ], IgcTabsComponent.prototype, "panels", void 0);
292
- __decorate([
293
- query('[part="headers-wrapper"]')
294
- ], IgcTabsComponent.prototype, "wrapper", void 0);
295
- __decorate([
296
- query('[part="headers-content"]')
297
- ], IgcTabsComponent.prototype, "container", void 0);
298
- __decorate([
299
- query('[part="selected-indicator"]')
300
- ], IgcTabsComponent.prototype, "selectedIndicator", void 0);
301
- __decorate([
302
- state()
303
- ], IgcTabsComponent.prototype, "showScrollButtons", void 0);
304
- __decorate([
305
- state()
306
- ], IgcTabsComponent.prototype, "disableStartScrollButton", void 0);
307
- __decorate([
308
- state()
309
- ], IgcTabsComponent.prototype, "disableEndScrollButton", void 0);
257
+ ], IgcTabsComponent.prototype, "_tabs", void 0);
310
258
  __decorate([
311
259
  state()
312
- ], IgcTabsComponent.prototype, "activeTab", void 0);
260
+ ], IgcTabsComponent.prototype, "_activeTab", void 0);
313
261
  __decorate([
314
262
  property({ reflect: true })
315
263
  ], IgcTabsComponent.prototype, "alignment", void 0);
@@ -318,13 +266,12 @@ __decorate([
318
266
  ], IgcTabsComponent.prototype, "activation", void 0);
319
267
  __decorate([
320
268
  watch('alignment', { waitUntilFirstUpdate: true })
321
- ], IgcTabsComponent.prototype, "alignIndicator", null);
269
+ ], IgcTabsComponent.prototype, "_alignmentChanged", null);
322
270
  __decorate([
323
271
  eventOptions({ passive: true })
324
- ], IgcTabsComponent.prototype, "handleScroll", null);
272
+ ], IgcTabsComponent.prototype, "_handleScroll", null);
325
273
  IgcTabsComponent = IgcTabsComponent_1 = __decorate([
326
- themes(all),
327
- blazorAdditionalDependencies('IgcTabComponent, IgcTabPanelComponent')
274
+ themes(all)
328
275
  ], IgcTabsComponent);
329
276
  export default IgcTabsComponent;
330
277
  //# sourceMappingURL=tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport {\n eventOptions,\n property,\n query,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { type Ref, createRef, ref } from 'lit/directives/ref.js';\n\nimport { themes } from '../../theming/theming-decorator.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '../common/controllers/key-bindings.js';\nimport {\n type MutationControllerParams,\n createMutationController,\n} from '../common/controllers/mutation-observer.js';\nimport { blazorAdditionalDependencies } from '../common/decorators/blazorAdditionalDependencies.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { createCounter, getOffset, isLTR, wrap } from '../common/util.js';\nimport type { TabsActivation, TabsAlignment } from '../types.js';\nimport IgcTabPanelComponent from './tab-panel.js';\nimport IgcTabComponent from './tab.js';\nimport { styles as shared } from './themes/shared/tabs/tabs.common.css.js';\nimport { all } from './themes/tabs-themes.js';\nimport { styles } from './themes/tabs.base.css.js';\n\nexport interface IgcTabsComponentEventMap {\n igcChange: CustomEvent<IgcTabComponent>;\n}\n\n/**\n * Represents tabs component\n *\n * @element igc-tabs\n *\n * @fires igcChange - Emitted when the selected tab changes.\n *\n * @slot - Renders the tab header.\n * @slot panel - Renders the tab content.\n *\n * @csspart headers - The wrapper of the tabs including the headers content and the scroll buttons.\n * @csspart headers-content - The container for the tab headers.\n * @csspart headers-wrapper - The wrapper for the tab headers and the selected indicator.\n * @csspart headers-scroll - The container for the headers.\n * @csspart selected-indicator - The selected indicator.\n * @csspart start-scroll-button - The start scroll button displayed when the tabs overflow.\n * @csspart end-scroll-button - The end scroll button displayed when the tabs overflow.\n * @csspart content - The container for the tabs content.\n */\n@themes(all)\n@blazorAdditionalDependencies('IgcTabComponent, IgcTabPanelComponent')\nexport default class IgcTabsComponent extends EventEmitterMixin<\n IgcTabsComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-tabs';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcTabsComponent,\n IgcTabComponent,\n IgcTabPanelComponent,\n IgcIconButtonComponent\n );\n }\n\n private static readonly increment = createCounter();\n\n protected headerRef: Ref<HTMLDivElement> = createRef();\n\n @queryAssignedElements({ selector: IgcTabComponent.tagName })\n protected tabs!: Array<IgcTabComponent>;\n\n @queryAssignedElements({ slot: 'panel' })\n protected panels!: Array<IgcTabPanelComponent>;\n\n @query('[part=\"headers-wrapper\"]')\n protected wrapper!: HTMLElement;\n\n @query('[part=\"headers-content\"]')\n protected container!: HTMLElement;\n\n @query('[part=\"selected-indicator\"]')\n protected selectedIndicator!: HTMLElement;\n\n @state()\n protected showScrollButtons = false;\n\n @state()\n protected disableStartScrollButton = true;\n\n @state()\n protected disableEndScrollButton = false;\n\n @state()\n protected activeTab?: IgcTabComponent;\n\n protected resizeObserver!: ResizeObserver;\n\n private get _closestActiveTabIndex() {\n const root = this.getRootNode() as Document | ShadowRoot;\n const tabs = this.enabledTabs;\n const tab = root.activeElement\n ? root.activeElement.closest(IgcTabComponent.tagName)\n : null;\n\n return tabs.indexOf(tab!);\n }\n\n private _mutationCallback({\n changes: { attributes, added, removed },\n }: MutationControllerParams<IgcTabComponent>) {\n const ownAttributes = attributes.filter(\n (tab) => tab.closest(this.tagName) === this\n );\n const ownAdded = added.filter(\n ({ target }) => target.closest(this.tagName) === this\n );\n const ownRemoved = removed.filter(\n ({ target }) => target.closest(this.tagName) === this\n );\n\n this.setSelectedTab(ownAttributes.find((tab) => tab.selected));\n\n if (ownRemoved.length || ownAdded.length) {\n for (const { node: tab } of ownRemoved) {\n this.resizeObserver?.unobserve(tab);\n if (tab.selected && tab === this.activeTab) {\n this.activeTab = undefined;\n }\n }\n\n for (const { node: tab } of ownAdded) {\n this.resizeObserver?.observe(tab);\n if (tab.selected) {\n this.setSelectedTab(tab);\n }\n }\n\n this.syncAttributes();\n }\n\n this.updateSelectedTab();\n this.activeTab?.scrollIntoView({ block: 'nearest' });\n this.alignIndicator();\n }\n\n protected get enabledTabs() {\n return this.tabs.filter((tab) => !tab.disabled);\n }\n\n /** Returns the currently selected tab. */\n public get selected(): string {\n return this.activeTab?.panel ?? '';\n }\n\n /**\n * Sets the alignment for the tab headers\n * @attr\n */\n @property({ reflect: true })\n public alignment: TabsAlignment = 'start';\n\n /**\n * Determines the tab activation. When set to auto,\n * the tab is instantly selected while navigating with the Left/Right Arrows, Home or End keys\n * and the corresponding panel is displayed.\n * When set to manual, the tab is only focused. The selection happens after pressing Space or Enter.\n * @attr\n */\n @property()\n public activation: TabsActivation = 'auto';\n\n @watch('alignment', { waitUntilFirstUpdate: true })\n protected alignIndicator() {\n const styles: Partial<CSSStyleDeclaration> = {\n visibility: this.activeTab ? 'visible' : 'hidden',\n transitionDuration: '0.3s',\n };\n\n if (this.activeTab && this.wrapper) {\n Object.assign(styles, {\n width: `${this.activeTab.offsetWidth}px`,\n transform: `translate(${\n isLTR(this)\n ? getOffset(this.activeTab, this.wrapper).left\n : getOffset(this.activeTab, this.wrapper).right\n }px)`,\n });\n }\n\n Object.assign(this.selectedIndicator?.style ?? {}, styles);\n }\n\n constructor() {\n super();\n\n addKeybindings(this, {\n ref: this.headerRef,\n bindingDefaults: { preventDefault: true },\n })\n .set(arrowLeft, this.onArrowLeft)\n .set(arrowRight, this.onArrowRight)\n .set(homeKey, this.onHomeKey)\n .set(endKey, this.onEndKey)\n .setActivateHandler(this.onActivationKey);\n\n createMutationController(this, {\n callback: this._mutationCallback,\n config: {\n attributeFilter: ['selected'],\n childList: true,\n subtree: true,\n },\n filter: [IgcTabComponent.tagName],\n });\n }\n\n protected override async firstUpdated() {\n this.showScrollButtons =\n this.container.scrollWidth > this.container.clientWidth;\n\n await this.updateComplete;\n\n this.syncAttributes();\n this.setupObserver();\n this.setSelectedTab(\n this.tabs.filter((tab) => tab.selected).at(-1) ?? this.enabledTabs.at(0)\n );\n this.updateSelectedTab();\n }\n\n public override disconnectedCallback() {\n this.resizeObserver?.disconnect();\n super.disconnectedCallback();\n }\n\n protected updateButtonsOnResize() {\n // Hide the buttons in the resize observer callback and synchronously update the DOM\n // in order to get the actual size\n this.showScrollButtons = false;\n this.performUpdate();\n\n this.showScrollButtons =\n this.container.scrollWidth > this.container.clientWidth;\n\n this.updateScrollButtons();\n }\n\n protected updateScrollButtons() {\n const { scrollLeft, offsetWidth } = this.container;\n const { scrollWidth } = this.wrapper;\n\n this.disableEndScrollButton =\n scrollWidth <= Math.abs(scrollLeft) + offsetWidth;\n this.disableStartScrollButton = scrollLeft === 0;\n }\n\n protected setupObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateButtonsOnResize();\n this.alignIndicator();\n });\n\n [this.container, this.wrapper, ...this.tabs].forEach((element) =>\n this.resizeObserver.observe(element)\n );\n }\n\n protected updateSelectedTab() {\n this.tabs.forEach((tab) => {\n tab.selected = tab === this.activeTab;\n });\n this.panels.forEach((panel) => {\n panel.hidden = panel.id !== this.activeTab?.panel;\n });\n }\n\n protected syncAttributes() {\n const prefix = this.id ? `${this.id}-` : '';\n this.tabs.forEach((tab, index) => {\n if (!tab.panel) {\n tab.panel =\n this.panels.at(index)?.id ??\n `${prefix}tab-${IgcTabsComponent.increment()}`;\n }\n this.panels\n .find((panel) => panel.id === tab.panel)\n ?.setAttribute('aria-labelledby', tab.id);\n });\n }\n\n private setSelectedTab(tab?: IgcTabComponent) {\n if (!tab || tab === this.activeTab) {\n return;\n }\n\n if (this.activeTab) {\n this.activeTab.selected = false;\n }\n\n this.activeTab = tab;\n this.activeTab.selected = true;\n }\n\n protected scrollByTabOffset(direction: 'start' | 'end') {\n const { scrollLeft, offsetWidth } = this.container;\n const LTR = isLTR(this);\n const next = direction === 'end';\n\n const pivot = Math.abs(next ? offsetWidth + scrollLeft : scrollLeft);\n\n let amount = this.tabs\n .map((tab) => ({\n start: LTR\n ? getOffset(tab, this.wrapper).left\n : Math.abs(getOffset(tab, this.wrapper).right),\n width: tab.offsetWidth,\n }))\n .filter((offset) =>\n next ? offset.start + offset.width > pivot : offset.start < pivot\n )\n .at(next ? 0 : -1)!.width;\n\n amount *= next ? 1 : -1;\n this.container.scrollBy({ left: LTR ? amount : -amount });\n }\n\n protected handleClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n const tab = target.closest('igc-tab');\n\n if (!(tab && this.contains(tab)) || tab.disabled) {\n return;\n }\n\n tab.focus();\n this.setSelectedTab(tab);\n this.emitEvent('igcChange', { detail: tab });\n }\n\n private _scrollToAndFocus(tab: IgcTabComponent) {\n tab.scrollIntoView({ behavior: 'auto', block: 'nearest' });\n tab.focus();\n }\n\n private _kbActivateTab(tab: IgcTabComponent) {\n this._scrollToAndFocus(tab);\n\n if (this.activation === 'auto') {\n this.setSelectedTab(tab);\n this.emitEvent('igcChange', { detail: tab });\n }\n }\n\n private onArrowLeft() {\n const tabs = this.enabledTabs;\n const delta = isLTR(this) ? -1 : 1;\n\n this._kbActivateTab(\n tabs[wrap(0, tabs.length - 1, this._closestActiveTabIndex + delta)]\n );\n }\n\n private onArrowRight() {\n const tabs = this.enabledTabs;\n const delta = isLTR(this) ? 1 : -1;\n\n this._kbActivateTab(\n tabs[wrap(0, tabs.length - 1, this._closestActiveTabIndex + delta)]\n );\n }\n\n private onHomeKey() {\n this._kbActivateTab(this.enabledTabs.at(0)!);\n }\n\n private onEndKey() {\n this._kbActivateTab(this.enabledTabs.at(-1)!);\n }\n\n private onActivationKey() {\n const tabs = this.enabledTabs;\n const index = this._closestActiveTabIndex;\n\n this.setSelectedTab(tabs[index]);\n this._kbActivateTab(tabs[index]);\n }\n\n @eventOptions({ passive: true })\n protected handleScroll() {\n this.updateScrollButtons();\n }\n\n /** Selects the specified tab and displays the corresponding panel. */\n public select(name: string) {\n this.setSelectedTab(this.tabs.find((el) => el.panel === name));\n }\n\n protected renderScrollButton(direction: 'start' | 'end') {\n const start = direction === 'start';\n\n return this.showScrollButtons\n ? html`<igc-icon-button\n tabindex=\"-1\"\n aria-hidden=\"true\"\n variant=\"flat\"\n collection=\"default\"\n part=\"${direction}-scroll-button\"\n exportparts=\"icon\"\n name=\"${start ? 'prev' : 'next'}\"\n .disabled=${start\n ? this.disableStartScrollButton\n : this.disableEndScrollButton}\n @click=${() => this.scrollByTabOffset(direction)}\n ></igc-icon-button>`\n : nothing;\n }\n\n protected override render() {\n return html`\n <div part=\"headers\">\n ${this.renderScrollButton('start')}\n <div part=\"headers-content\" @scroll=${this.handleScroll}>\n <div part=\"headers-wrapper\">\n <div\n ${ref(this.headerRef)}\n part=\"headers-scroll\"\n role=\"tablist\"\n @click=${this.handleClick}\n >\n <slot></slot>\n </div>\n <div part=\"selected-indicator\"></div>\n </div>\n </div>\n ${this.renderScrollButton('end')}\n </div>\n <div part=\"content\">\n <slot name=\"panel\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tabs': IgcTabsComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport {\n eventOptions,\n property,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\n\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { themes } from '../../theming/theming-decorator.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '../common/controllers/key-bindings.js';\nimport {\n type MutationControllerParams,\n createMutationController,\n} from '../common/controllers/mutation-observer.js';\nimport { createResizeController } from '../common/controllers/resize-observer.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport {\n findElementFromEventPath,\n first,\n getRoot,\n isEmpty,\n isLTR,\n isString,\n last,\n partNameMap,\n scrollIntoView,\n wrap,\n} from '../common/util.js';\nimport type { TabsActivation, TabsAlignment } from '../types.js';\nimport { createTabHelpers, getTabHeader } from './tab-dom.js';\nimport IgcTabComponent from './tab.js';\nimport { styles as shared } from './themes/shared/tabs/tabs.common.css.js';\nimport { all } from './themes/tabs-themes.js';\nimport { styles } from './themes/tabs.base.css.js';\n\nexport interface IgcTabsComponentEventMap {\n igcChange: CustomEvent<IgcTabComponent>;\n}\n\n/* blazorAdditionalDependency: IgcTabComponent */\n/**\n * Tabs organize and allow navigation between groups of content that are related and at the same level of hierarchy.\n *\n * The `<igc-tabs>` component allows the user to navigate between multiple `<igc-tab>` elements.\n * It supports keyboard navigation and provides API methods to control the selected tab.\n *\n * @element igc-tabs\n *\n * @fires igcChange - Emitted when the selected tab changes.\n *\n * @slot - Renders the `IgcTabComponents` inside default slot.\n *\n * @csspart start-scroll-button - The start scroll button displayed when the tabs overflow.\n * @csspart end-scroll-button - The end scroll button displayed when the tabs overflow.\n * @csspart selected-indicator - The indicator that shows which tab is selected.\n */\n@themes(all)\nexport default class IgcTabsComponent extends EventEmitterMixin<\n IgcTabsComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-tabs';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcTabsComponent,\n IgcTabComponent,\n IgcIconButtonComponent\n );\n }\n\n //#region Private state & properties\n\n private readonly _resizeController = createResizeController(this, {\n callback: this._resizeCallback,\n options: { box: 'border-box' },\n target: null,\n });\n\n /** The tabs container reference holding the tab headers. */\n private readonly _headerRef = createRef<HTMLElement>();\n\n /** The selected tab indicator reference. */\n private readonly _indicatorRef = createRef<HTMLElement>();\n\n private readonly _domHelpers = createTabHelpers(\n this,\n this._headerRef,\n this._indicatorRef\n );\n\n @queryAssignedElements({ selector: IgcTabComponent.tagName })\n private _tabs!: IgcTabComponent[];\n\n protected get _enabledTabs(): IgcTabComponent[] {\n return this._tabs.filter((tab) => !tab.disabled);\n }\n\n @state()\n private _activeTab?: IgcTabComponent;\n\n //#endregion\n\n //#region Public properties\n\n /**\n * Sets the alignment for the tab headers\n * @attr\n */\n @property({ reflect: true })\n public alignment: TabsAlignment = 'start';\n\n /**\n * Determines the tab activation. When set to auto,\n * the tab is instantly selected while navigating with the Left/Right Arrows, Home or End keys\n * and the corresponding panel is displayed.\n * When set to manual, the tab is only focused. The selection happens after pressing Space or Enter.\n * @attr\n */\n @property()\n public activation: TabsActivation = 'auto';\n\n /* blazorSuppress */\n /** Returns the direct `igc-tab` elements that are children of this element. */\n public get tabs(): IgcTabComponent[] {\n return this._tabs;\n }\n\n /** Returns the currently selected tab label or IDREF if no label property is set. */\n public get selected(): string {\n if (this._activeTab) {\n return this._activeTab.label || this._activeTab.id;\n }\n\n return '';\n }\n\n //#endregion\n\n @watch('alignment', { waitUntilFirstUpdate: true })\n protected _alignmentChanged(): void {\n this._domHelpers.setIndicator(this._activeTab);\n }\n\n //#region Life-cycle hooks\n\n constructor() {\n super();\n\n addKeybindings(this, {\n ref: this._headerRef,\n skip: this._skipKeyboard,\n bindingDefaults: { preventDefault: true },\n })\n .set(arrowLeft, () => this._handleArrowKeys(isLTR(this) ? -1 : 1))\n .set(arrowRight, () => this._handleArrowKeys(isLTR(this) ? 1 : -1))\n .set(homeKey, this._handleHomeKey)\n .set(endKey, this._handleEndKey)\n .setActivateHandler(this._handleActivationKeys, {\n preventDefault: false,\n });\n\n createMutationController(this, {\n callback: this._mutationCallback,\n config: {\n attributeFilter: ['selected'],\n childList: true,\n subtree: true,\n },\n filter: [IgcTabComponent.tagName],\n });\n }\n\n protected override async firstUpdated() {\n await this.updateComplete;\n\n const selectedTab =\n this._tabs.findLast((tab) => tab.selected) ?? first(this._enabledTabs);\n\n this._domHelpers.setStyleProperties();\n this._domHelpers.setScrollButtonState();\n this._setSelectedTab(selectedTab, false);\n\n this._resizeController.observe(this._headerRef.value!);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.role = 'tablist';\n }\n\n protected override updated(): void {\n if (this._domHelpers.isLeftToRightChanged) {\n this._domHelpers.setIndicator(this._activeTab);\n }\n }\n\n //#endregion\n\n //#region Observers callbacks\n\n private _resizeCallback(): void {\n this._domHelpers.setStyleProperties();\n this._domHelpers.setScrollButtonState();\n this._domHelpers.setIndicator(this._activeTab);\n }\n\n private _mutationCallback(\n parameters: MutationControllerParams<IgcTabComponent>\n ): void {\n this._selectedAttributeChanged(parameters);\n this._handleTabsRemoved(parameters);\n this._handleTabsAdded(parameters);\n\n this._domHelpers.setStyleProperties();\n this._domHelpers.setScrollButtonState();\n this._domHelpers.setIndicator(this._activeTab);\n }\n\n private _selectedAttributeChanged({\n changes,\n }: MutationControllerParams<IgcTabComponent>): void {\n const selected = changes.attributes.find(\n (tab) => this._tabs.includes(tab) && tab.selected\n );\n this._setSelectedTab(selected, false);\n }\n\n private _handleTabsAdded({\n changes,\n }: MutationControllerParams<IgcTabComponent>): void {\n if (!isEmpty(changes.added)) {\n const lastAdded = changes.added.findLast(\n (change) =>\n change.target.closest(this.tagName) === this && change.node.selected\n )?.node;\n\n this._setSelectedTab(lastAdded, false);\n }\n }\n\n private _handleTabsRemoved({\n changes,\n }: MutationControllerParams<IgcTabComponent>): void {\n if (!isEmpty(changes.removed)) {\n let nextSelectedTab: IgcTabComponent | null = null;\n\n const removed = changes.removed.filter(\n (change) => change.target.closest(this.tagName) === this\n );\n\n for (const each of removed) {\n if (each.node.selected && each.node === this._activeTab) {\n nextSelectedTab = first(this._enabledTabs);\n break;\n }\n }\n\n if (nextSelectedTab) {\n this._setSelectedTab(nextSelectedTab, false);\n }\n }\n }\n\n //#endregion\n\n //#region Private API\n\n private _getClosestActiveTabIndex(): number {\n const active = getRoot(this).activeElement;\n const tab = active ? active.closest(IgcTabComponent.tagName) : null;\n return tab ? this._enabledTabs.indexOf(tab) : -1;\n }\n\n private _setSelectedTab(tab?: IgcTabComponent, shouldEmit = true): void {\n if (!tab || tab === this._activeTab) {\n return;\n }\n\n if (this._activeTab) {\n this._activeTab.selected = false;\n }\n\n tab.selected = true;\n this._activeTab = tab;\n\n scrollIntoView(getTabHeader(tab));\n this._domHelpers.setIndicator(this._activeTab);\n\n if (shouldEmit) {\n this.emitEvent('igcChange', { detail: this._activeTab });\n }\n }\n\n private _keyboardActivateTab(tab: IgcTabComponent) {\n const header = getTabHeader(tab);\n\n this._domHelpers.setScrollSnap();\n scrollIntoView(header);\n header.focus({ preventScroll: true });\n\n if (this.activation === 'auto') {\n this._setSelectedTab(tab);\n }\n }\n\n private _skipKeyboard(node: Element, event: KeyboardEvent): boolean {\n return !(\n this._isEventFromTabHeader(event) &&\n this._tabs.includes(node.closest(IgcTabComponent.tagName)!)\n );\n }\n\n private _isEventFromTabHeader(event: Event) {\n return findElementFromEventPath('[part~=\"tab-header\"]', event);\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleArrowKeys(delta: -1 | 1): void {\n const tabs = this._enabledTabs;\n this._keyboardActivateTab(\n tabs[wrap(0, tabs.length - 1, this._getClosestActiveTabIndex() + delta)]\n );\n }\n\n protected _handleHomeKey(): void {\n this._keyboardActivateTab(first(this._enabledTabs));\n }\n\n protected _handleEndKey(): void {\n this._keyboardActivateTab(last(this._enabledTabs));\n }\n\n protected _handleActivationKeys(): void {\n const tabs = this._enabledTabs;\n const index = this._getClosestActiveTabIndex();\n\n if (index > -1) {\n this._setSelectedTab(tabs[index], false);\n this._keyboardActivateTab(tabs[index]);\n }\n }\n\n protected _handleClick(event: PointerEvent): void {\n if (!this._isEventFromTabHeader(event)) {\n return;\n }\n\n const tab = findElementFromEventPath<IgcTabComponent>(\n IgcTabComponent.tagName,\n event\n );\n\n if (!(tab && this._tabs.includes(tab)) || tab?.disabled) {\n return;\n }\n\n this._domHelpers.setScrollSnap();\n getTabHeader(tab).focus();\n this._setSelectedTab(tab);\n }\n\n @eventOptions({ passive: true })\n protected _handleScroll(): void {\n this._domHelpers.setScrollButtonState();\n }\n\n //#endregion\n\n //#region Public API methods\n\n /** Selects the specified tab and displays the corresponding panel. */\n public select(ref: IgcTabComponent | string): void {\n const tab = isString(ref) ? this._tabs.find((t) => t.id === ref) : ref;\n\n if (tab) {\n this._setSelectedTab(tab, false);\n }\n }\n\n //#endregion\n\n //#region Render\n\n protected _renderScrollButton(direction: 'start' | 'end') {\n const isStart = direction === 'start';\n const { start, end } = this._domHelpers.scrollButtonsDisabled;\n\n return html`${cache(\n this._domHelpers.hasScrollButtons\n ? html`\n <igc-icon-button\n tabindex=\"-1\"\n variant=\"flat\"\n collection=\"default\"\n part=\"${direction}-scroll-button\"\n exportparts=\"icon\"\n name=${isStart ? 'prev' : 'next'}\n ?disabled=${isStart ? start : end}\n @click=${() => this._domHelpers.scrollTabs(direction)}\n >\n </igc-icon-button>\n `\n : nothing\n )}`;\n }\n\n protected override render() {\n const part = partNameMap({\n inner: true,\n scrollable: this._domHelpers.hasScrollButtons,\n });\n\n return html`\n <div\n ${ref(this._headerRef)}\n part=\"tabs\"\n style=${styleMap(this._domHelpers.styleProperties)}\n @scroll=${this._handleScroll}\n >\n <div part=${part}>\n ${this._renderScrollButton('start')}\n <slot @click=${this._handleClick}></slot>\n ${this._renderScrollButton('end')}\n <div part=\"selected-indicator\">\n <span ${ref(this._indicatorRef)}></span>\n </div>\n </div>\n </div>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tabs': IgcTabsComponent;\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  import { css } from 'lit';
2
- export const styles = css `:host{transition:none;border-end-end-radius:0;border-end-start-radius:0}:host(:hover){box-shadow:inset 0 0 0 .0625rem var(--border-color--hover)}:host([selected]){position:relative;box-shadow:inset 0 0 0 .0625rem var(--border-color)}:host([selected])::after{content:"";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--item-background);z-index:1}:host([selected]:hover){color:var(--item-active-color);border-top-color:var(--border-color);border-inline-color:var(--border-color);border-bottom-color:var(--item-background)}:host(:focus-within),:host([selected]:focus-within){border-radius:var(--border-radius);color:var(--item-hover-color);background:var(--item-background);box-shadow:inset 0 0 0 .125rem var(--item-hover-color);z-index:1}:host(:focus-within)::after,:host([selected]:focus-within)::after{display:none}`;
2
+ export const styles = css `:host{border-end-end-radius:0;border-end-start-radius:0}:host [part=tab-header]{transition:none;border-radius:0;padding:.5rem 1rem}:host [part=tab-header]::before{content:"";position:absolute;border-radius:var(--border-radius) var(--border-radius) 0 0;inset:0;z-index:-1}:host [part=tab-header] ::slotted(igc-icon){transition:none}[part~=content]{font-family:var(--ig-button-font-family, var(--ig-font-family));font-size:var(--ig-button-font-size);font-weight:var(--ig-button-font-weight);font-style:var(--ig-button-font-style);line-height:var(--ig-button-line-height);letter-spacing:var(--ig-button-letter-spacing);text-transform:var(--ig-button-text-transform);margin-top:var(--ig-button-margin-top);margin-bottom:var(--ig-button-margin-bottom)}[part=tab-header]:hover::before{box-shadow:inset 0 var(--_border-size) 0 0 var(--border-color--hover),inset calc(var(--_border-size)*-1) 0 0 0 var(--border-color--hover),inset var(--_border-size) 0 0 0 var(--border-color--hover)}[part=tab-header]:focus,[part=tab-header]:focus-within{background:var(--item-hover-background);z-index:1}[part=tab-header]:focus-within::after{content:"";pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:absolute;width:100%;height:100%;box-shadow:inset 0 0 0 .125rem var(--item-hover-color);border-radius:var(--border-radius);z-index:2}:host([selected]) [part=tab-header]{position:relative}:host([selected]) [part=tab-header]::before{box-shadow:inset 0 var(--_border-size) 0 0 var(--border-color),inset calc(var(--_border-size)*-1) 0 0 0 var(--border-color),inset var(--_border-size) 0 0 0 var(--border-color)}:host([selected]) [part=tab-header]:hover{border-top-color:var(--border-color);border-inline-color:var(--border-color);border-bottom-color:var(--item-background)}:host([selected]) [part=tab-header]:focus,:host([selected]) [part=tab-header]:focus-within{background:var(--item-hover-background);z-index:1}:host(:not([selected])) [part=tab-header]{border-radius:0;box-shadow:inset 0 calc(var(--_border-size)*-1) 0 0 var(--border-color)}:host(:not([selected])) [part=tab-header]::before{height:calc(100% - var(--_border-size))}`;
3
3
  //# sourceMappingURL=tab.bootstrap.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab.bootstrap.css.js","sourceRoot":"","sources":["../../../../../../src/components/tabs/themes/shared/tab/tab.bootstrap.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,41BAA41B,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{transition:none;border-end-end-radius:0;border-end-start-radius:0}:host(:hover){box-shadow:inset 0 0 0 .0625rem var(--border-color--hover)}:host([selected]){position:relative;box-shadow:inset 0 0 0 .0625rem var(--border-color)}:host([selected])::after{content:\"\";position:absolute;bottom:0;inset-inline-start:0;width:100%;height:.0625rem;background:var(--item-background);z-index:1}:host([selected]:hover){color:var(--item-active-color);border-top-color:var(--border-color);border-inline-color:var(--border-color);border-bottom-color:var(--item-background)}:host(:focus-within),:host([selected]:focus-within){border-radius:var(--border-radius);color:var(--item-hover-color);background:var(--item-background);box-shadow:inset 0 0 0 .125rem var(--item-hover-color);z-index:1}:host(:focus-within)::after,:host([selected]:focus-within)::after{display:none}`;\n"]}
1
+ {"version":3,"file":"tab.bootstrap.css.js","sourceRoot":"","sources":["../../../../../../src/components/tabs/themes/shared/tab/tab.bootstrap.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,0mEAA0mE,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styles = css`:host{border-end-end-radius:0;border-end-start-radius:0}:host [part=tab-header]{transition:none;border-radius:0;padding:.5rem 1rem}:host [part=tab-header]::before{content:\"\";position:absolute;border-radius:var(--border-radius) var(--border-radius) 0 0;inset:0;z-index:-1}:host [part=tab-header] ::slotted(igc-icon){transition:none}[part~=content]{font-family:var(--ig-button-font-family, var(--ig-font-family));font-size:var(--ig-button-font-size);font-weight:var(--ig-button-font-weight);font-style:var(--ig-button-font-style);line-height:var(--ig-button-line-height);letter-spacing:var(--ig-button-letter-spacing);text-transform:var(--ig-button-text-transform);margin-top:var(--ig-button-margin-top);margin-bottom:var(--ig-button-margin-bottom)}[part=tab-header]:hover::before{box-shadow:inset 0 var(--_border-size) 0 0 var(--border-color--hover),inset calc(var(--_border-size)*-1) 0 0 0 var(--border-color--hover),inset var(--_border-size) 0 0 0 var(--border-color--hover)}[part=tab-header]:focus,[part=tab-header]:focus-within{background:var(--item-hover-background);z-index:1}[part=tab-header]:focus-within::after{content:\"\";pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:absolute;width:100%;height:100%;box-shadow:inset 0 0 0 .125rem var(--item-hover-color);border-radius:var(--border-radius);z-index:2}:host([selected]) [part=tab-header]{position:relative}:host([selected]) [part=tab-header]::before{box-shadow:inset 0 var(--_border-size) 0 0 var(--border-color),inset calc(var(--_border-size)*-1) 0 0 0 var(--border-color),inset var(--_border-size) 0 0 0 var(--border-color)}:host([selected]) [part=tab-header]:hover{border-top-color:var(--border-color);border-inline-color:var(--border-color);border-bottom-color:var(--item-background)}:host([selected]) [part=tab-header]:focus,:host([selected]) [part=tab-header]:focus-within{background:var(--item-hover-background);z-index:1}:host(:not([selected])) [part=tab-header]{border-radius:0;box-shadow:inset 0 calc(var(--_border-size)*-1) 0 0 var(--border-color)}:host(:not([selected])) [part=tab-header]::before{height:calc(100% - var(--_border-size))}`;\n"]}