@nuralyui/tabs 0.0.13 → 0.0.16

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/tabs.component.js CHANGED
@@ -1,232 +1,299 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ */
1
6
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
7
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
8
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
9
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
10
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
11
  };
7
- /* eslint-disable @typescript-eslint/no-explicit-any */
8
- import { LitElement, html, nothing } from 'lit';
9
- import { property } from 'lit/decorators.js';
10
- import { styles } from './tabs.style.js';
12
+ import { html, LitElement, nothing } from 'lit';
13
+ import { customElement, property } from 'lit/decorators.js';
11
14
  import { classMap } from 'lit/directives/class-map.js';
12
- import { NOTHING_STRING, TabEvent, TabOrientation, TabsAlign } from './tabs.constant.js';
15
+ import { styles } from './tabs.style.js';
16
+ import { EMPTY_STRING, DEFAULT_ACTIVE_TAB } from './tabs.types.js';
17
+ import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
18
+ // Import icon component
19
+ import '../icon/icon.component.js';
20
+ // Import controllers
21
+ import { TabsKeyboardController, TabsDragDropController, TabsEditableController, TabsEventController } from './controllers/index.js';
13
22
  /**
14
- * `hy-tabs` is a LitElement that provides a customizable tabs.
15
- * @customElement 'hy-tabs'
23
+ * Versatile tabs component with support for multiple orientations, editable tabs, and drag & drop.
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <!-- Basic usage -->
28
+ * <nr-tabs .tabs=${tabs} activeTab="0"></nr-tabs>
29
+ *
30
+ * <!-- With editing capabilities -->
31
+ * <nr-tabs .tabs=${tabs} .editable=${{canAddTab: true, canDeleteTab: true}}></nr-tabs>
32
+ *
33
+ * <!-- Vertical orientation -->
34
+ * <nr-tabs .tabs=${tabs} orientation="vertical" align="left"></nr-tabs>
35
+ * ```
16
36
  *
17
- * Attributes
18
- * @attr activeTab
19
- * @attr orientation
20
- * @attr tabsAlign
21
- * @attr editable
22
- * Events
23
- * @fires tabEdited - Indicates when tab edited
24
- * @fires removeTab - Indicates when tab removed
25
- * @fires addTab - Indicates when tab added
37
+ * @fires nr-tab-click - Tab clicked
38
+ * @fires nr-tab-change - Active tab changed
39
+ * @fires nr-tab-add - New tab requested
40
+ * @fires nr-tab-remove - Tab removal requested
41
+ * @fires nr-tab-edit - Tab edited
42
+ * @fires nr-tab-order-change - Tab order changed via drag & drop
43
+ *
44
+ * @slot default - Tab content
26
45
  */
27
- export class TabsComponent extends LitElement {
46
+ let NrTabsElement = class NrTabsElement extends NuralyUIBaseMixin(LitElement) {
28
47
  constructor() {
29
- super();
30
- this.activeTab = 0;
31
- this.orientation = TabOrientation.Horizontal;
48
+ super(...arguments);
49
+ /** Currently active tab index */
50
+ this.activeTab = DEFAULT_ACTIVE_TAB;
51
+ /** Tab orientation (horizontal, vertical) */
52
+ this.orientation = "horizontal" /* TabOrientation.Horizontal */;
53
+ /** Tab alignment (left, center, right) */
54
+ this.align = "left" /* TabsAlign.Left */;
55
+ /** Tab size (small, medium, large) */
56
+ this.tabSize = "medium" /* TabSize.Medium */;
57
+ /** Tab type/variant */
58
+ this.variant = "default" /* TabType.Default */;
59
+ /** Array of tab items */
60
+ this.tabs = [];
61
+ /** Whether tabs are animated */
62
+ this.animated = true;
63
+ /** Whether to destroy inactive tab content */
64
+ this.destroyInactiveTabPane = false;
65
+ /** Custom aria-label for the tabs container */
66
+ this.tabsAriaLabel = EMPTY_STRING;
67
+ this.requiredComponents = ['nr-icon'];
68
+ // Controllers - automatically connected via Lit's reactive controller system
69
+ this.keyboardController = new TabsKeyboardController(this);
70
+ this.dragDropController = new TabsDragDropController(this);
71
+ this.editableController = new TabsEditableController(this);
72
+ this.eventController = new TabsEventController(this);
73
+ }
74
+ connectedCallback() {
75
+ super.connectedCallback();
76
+ this.validateDependencies();
77
+ this.observeChildrenChanges();
78
+ // Ensure controllers are properly referenced for TypeScript
79
+ void this.keyboardController;
80
+ void this.dragDropController;
81
+ void this.editableController;
82
+ void this.eventController;
32
83
  }
33
84
  render() {
34
85
  return html `
35
86
  <div
36
87
  class=${classMap({
37
88
  'tabs-container': true,
38
- 'vertical-align': this.orientation === TabOrientation.Vertical,
39
- 'horizontal-align': this.orientation === TabOrientation.Horizontal,
40
- 'right-align': this.tabsAlign === TabsAlign.Right,
41
- 'left-align': this.tabsAlign === TabsAlign.Left,
42
- 'center-align': this.tabsAlign === TabsAlign.Center,
89
+ 'vertical-align': this.orientation === "vertical" /* TabOrientation.Vertical */,
90
+ 'horizontal-align': this.orientation === "horizontal" /* TabOrientation.Horizontal */,
91
+ 'right-align': this.align === "right" /* TabsAlign.Right */,
92
+ 'left-align': this.align === "left" /* TabsAlign.Left */,
93
+ 'center-align': this.align === "center" /* TabsAlign.Center */,
43
94
  })}
95
+ role="tablist"
96
+ aria-label="${this.tabsAriaLabel || nothing}"
97
+ data-theme="${this.currentTheme}"
98
+ data-size="${this.tabSize}"
99
+ data-type="${this.variant}"
44
100
  >
45
101
  <div
46
102
  class="tab-labels"
47
- style="flex-direction: ${this.orientation === TabOrientation.Vertical ? 'column' : 'row'}"
103
+ style="flex-direction: ${this.orientation === "vertical" /* TabOrientation.Vertical */ ? 'column' : 'row'}"
48
104
  >
49
105
  <div></div>
50
-
51
106
  ${this.renderTabs()}
52
107
  <div></div>
53
108
  </div>
54
- <div class="tab-content">${this.renderActiveTab()}</div>
109
+ <div class="tab-content" role="tabpanel">
110
+ ${this.renderActiveTab()}
111
+ </div>
55
112
  </div>
56
113
  `;
57
114
  }
58
- connectedCallback() {
59
- super.connectedCallback();
60
- this.observeChildrenChanges();
61
- this.addEventListener('dragover', this.handleDragOver);
62
- }
63
115
  observeChildrenChanges() {
64
116
  const mutationObserver = new MutationObserver(() => {
65
- // this.requestUpdate();
117
+ // Handle dynamic tab changes if needed
118
+ this.requestUpdate();
66
119
  });
67
120
  mutationObserver.observe(this, { childList: true });
68
121
  }
69
- handleDragStart(event) {
70
- event.dataTransfer.setData('text/plain', event.currentTarget.dataset.index);
71
- event.dataTransfer.effectAllowed = 'move';
72
- event.target.closest('.tab-label').classList.add('dragging-start');
73
- }
74
- handleDragOver(event) {
75
- event.preventDefault();
76
- event.dataTransfer.dropEffect = 'move';
77
- }
78
- handleDragEnter(event) {
79
- event.preventDefault();
80
- if (event.currentTarget.contains(event.relatedTarget)) {
81
- return;
122
+ renderDeleteIcon(tab, tabIndex) {
123
+ if (!this.editableController.canDeleteTab(tab))
124
+ return nothing;
125
+ if (!this.isComponentAvailable('nr-icon')) {
126
+ console.warn('[nr-tabs] Icon component not available. Delete icon will not render.');
127
+ return nothing;
82
128
  }
83
- event.currentTarget.classList.add('dragging');
84
- }
85
- handleDragLeave(event) {
86
- event.preventDefault();
87
- if (event.currentTarget.contains(event.relatedTarget)) {
88
- return;
89
- }
90
- if (event.currentTarget.classList.contains('dragging')) {
91
- event.currentTarget.classList.remove('dragging');
92
- }
93
- }
94
- handleDrop(event) {
95
- var _a, _b;
96
- event.preventDefault();
97
- const sourceIndex = event.dataTransfer.getData('text/plain');
98
- const targetIndex = event.currentTarget.dataset.index;
99
- if (sourceIndex !== targetIndex) {
100
- const tabs = Array.from(this.children || []);
101
- const sourceTab = tabs[sourceIndex];
102
- const targetTab = tabs[targetIndex];
103
- this.dispatchEvent(new CustomEvent(TabEvent.tabOrderChange, {
104
- detail: { sourceTab, targetTab, sourceIndex: parseInt(sourceIndex), targetIndex: parseInt(targetIndex) },
105
- }));
106
- }
107
- (_a = this.shadowRoot.querySelector('.dragging')) === null || _a === void 0 ? void 0 : _a.classList.remove('dragging');
108
- event.target.classList.remove('dragging');
109
- (_b = this.shadowRoot.querySelector('.dragging-start')) === null || _b === void 0 ? void 0 : _b.classList.remove('dragging-start');
110
- }
111
- renderDeleteIcon(tab) {
112
- var _a;
113
- // if the tab does not gave edibale propetry and canDeleteTab is true
114
- // then render the delete icon
115
- if (!tab.editable && ((_a = this.editable) === null || _a === void 0 ? void 0 : _a.canDeleteTab)) {
116
- return html `<hy-icon
117
- @mousedown=${() => {
118
- this.dispatchEvent(new CustomEvent(TabEvent.removeTab, {
119
- detail: { index: tab.index },
120
- }));
121
- }}
122
- name="window-close"
123
- class="close-icon"
124
- ></hy-icon>`;
125
- }
126
- return nothing;
129
+ return html `
130
+ <nr-icon
131
+ name="window-close"
132
+ class="close-icon"
133
+ @mousedown=${(e) => {
134
+ e.stopPropagation();
135
+ this.editableController.handleRemoveTab(tabIndex);
136
+ }}
137
+ ></nr-icon>
138
+ `;
127
139
  }
128
140
  renderTabs() {
129
- var _a, _b, _c, _d, _e, _f;
130
141
  const tabs = [];
131
- const children = this.tabs || [];
132
- for (let tabIndex = 0; tabIndex < children.length; tabIndex++) {
133
- const tab = html `
142
+ for (let tabIndex = 0; tabIndex < this.tabs.length; tabIndex++) {
143
+ const tab = this.tabs[tabIndex];
144
+ const isActive = tabIndex === this.activeTab;
145
+ // Determine tab position for border radius
146
+ const isFirstTab = tabIndex === 0;
147
+ const isLastTab = tabIndex === this.tabs.length - 1;
148
+ const isSingleTab = this.tabs.length === 1;
149
+ const isMiddleTab = !isFirstTab && !isLastTab && !isSingleTab;
150
+ const tabElement = html `
134
151
  <div
135
152
  data-index=${tabIndex}
136
- draggable=${(_a = this.editable) === null || _a === void 0 ? void 0 : _a.canMove}
137
- @dragenter=${this.handleDragEnter}
138
- @dragleave=${this.handleDragLeave}
139
- @dragstart=${(e) => this.handleDragStart(e)}
140
- @drop=${(event) => this.handleDrop(event)}
141
- class=${tabIndex === this.activeTab ? 'tab-label active' : 'tab-label'}
142
- @mousedown=${(e) => this.setActiveTab(tabIndex, children[tabIndex], e)}
153
+ draggable=${this.dragDropController.getDraggableState() ? 'true' : 'false'}
154
+ @dragenter=${(e) => this.dragDropController.handleDragEnter(e)}
155
+ @dragleave=${(e) => this.dragDropController.handleDragLeave(e)}
156
+ @dragstart=${(e) => this.dragDropController.handleDragStart(e)}
157
+ @drop=${(e) => this.dragDropController.handleDrop(e)}
158
+ class=${classMap({
159
+ 'tab-label': true,
160
+ 'active': isActive,
161
+ 'disabled': !!tab.disabled,
162
+ 'first-tab': isFirstTab && this.orientation === "horizontal" /* TabOrientation.Horizontal */,
163
+ 'middle-tab': isMiddleTab && this.orientation === "horizontal" /* TabOrientation.Horizontal */,
164
+ 'last-tab': isLastTab && this.orientation === "horizontal" /* TabOrientation.Horizontal */,
165
+ 'single-tab': isSingleTab && this.orientation === "horizontal" /* TabOrientation.Horizontal */
166
+ })}
167
+ role="tab"
168
+ aria-selected=${isActive ? 'true' : 'false'}
169
+ aria-disabled=${tab.disabled ? 'true' : 'false'}
170
+ tabindex=${isActive ? '0' : '-1'}
171
+ @click=${(e) => this.eventController.handleTabClick(tabIndex, e)}
143
172
  >
144
- <hy-label
145
- contenteditable=${((_b = this.editable) === null || _b === void 0 ? void 0 : _b.canEditTabTitle) ? true : nothing}
146
- @blur=${(event) => {
147
- var _a;
148
- this.dispatchEvent(new CustomEvent(TabEvent.tabEdited, {
149
- detail: {
150
- tab: {
151
- label: (_a = event.target) === null || _a === void 0 ? void 0 : _a.textContent,
152
- index: tabIndex,
153
- },
154
- },
155
- }));
156
- }}
157
- >${children[tabIndex].label}</hy-label
158
- >
159
- ${((_d = (_c = children[tabIndex].editable) === null || _c === void 0 ? void 0 : _c.canDeleteTab) !== null && _d !== void 0 ? _d : (_e = this.editable) === null || _e === void 0 ? void 0 : _e.canDeleteTab)
160
- ? html `<hy-icon
161
- @mousedown=${() => {
162
- this.dispatchEvent(new CustomEvent(TabEvent.removeTab, {
163
- detail: { index: tabIndex },
164
- }));
165
- }}
166
- name="window-close"
167
- class="close-icon"
168
- ></hy-icon>`
169
- : NOTHING_STRING}
173
+ ${tab.icon && this.isComponentAvailable('nr-icon')
174
+ ? html `<nr-icon name=${tab.icon} class="tab-icon"></nr-icon>`
175
+ : nothing}
176
+
177
+ <span class="tab-text"
178
+ contenteditable=${this.editableController.getContentEditableAttribute(tab) || nothing}
179
+ @blur=${(event) => this.editableController.handleTabTitleBlur(event, tabIndex)}
180
+ @keydown=${(event) => this.editableController.handleTabTitleKeyDown(event, tabIndex)}
181
+ >${tab.label}</span>
182
+
183
+ ${this.renderDeleteIcon(tab, tabIndex)}
170
184
  </div>
171
185
  `;
172
- tabs.push(tab);
186
+ tabs.push(tabElement);
173
187
  }
174
- if ((_f = this.editable) === null || _f === void 0 ? void 0 : _f.canAddTab) {
175
- const tab = html `
188
+ // Add tab button
189
+ if (this.editableController.canAddTab()) {
190
+ const addTabElement = html `
176
191
  <div
177
192
  class="tab-label add-tab-label"
193
+ role="button"
194
+ aria-label="Add new tab"
195
+ tabindex="0"
178
196
  @mousedown=${() => {
179
- this.dispatchEvent(new CustomEvent(TabEvent.addTab));
197
+ this.editableController.handleAddTab();
198
+ }}
199
+ @keydown=${(e) => {
200
+ if (e.key === 'Enter' || e.key === ' ') {
201
+ e.preventDefault();
202
+ this.editableController.handleAddTab();
203
+ }
180
204
  }}
181
205
  >
182
- <hy-icon name="plus" class="add-tab-icon"></hy-icon>
206
+ ${this.isComponentAvailable('nr-icon')
207
+ ? html `<nr-icon name="plus" class="add-tab-icon"></nr-icon>`
208
+ : html `<span>+</span>`}
183
209
  </div>
184
210
  `;
185
- tabs.push(tab);
211
+ tabs.push(addTabElement);
186
212
  }
187
213
  return tabs;
188
214
  }
189
215
  updated(changedProperties) {
190
216
  super.updated(changedProperties);
191
- if (!this.tabs[this.activeTab]) {
192
- if (!this.tabs[this.activeTab - 1]) {
193
- this.activeTab++;
194
- }
195
- else {
196
- this.activeTab--;
197
- }
217
+ // Validate active tab index
218
+ if (this.activeTab >= this.tabs.length) {
219
+ this.activeTab = Math.max(0, this.tabs.length - 1);
220
+ }
221
+ else if (this.activeTab < 0) {
222
+ this.activeTab = 0;
198
223
  }
199
224
  }
200
225
  renderActiveTab() {
201
- const children = this.tabs ? [...this.tabs] : [];
202
- if (children.length > 0 && this.activeTab >= 0 && this.activeTab < children.length) {
203
- return html `${children[this.activeTab].content}`;
226
+ if (this.tabs.length === 0 || this.activeTab < 0 || this.activeTab >= this.tabs.length) {
227
+ return nothing;
204
228
  }
205
- return html `${NOTHING_STRING}`;
229
+ const activeTab = this.tabs[this.activeTab];
230
+ return html `${activeTab.content || nothing}`;
206
231
  }
207
- setActiveTab(index, _element, event) {
208
- event.preventDefault();
232
+ setActiveTab(index, event) {
233
+ var _a, _b;
234
+ // Handle MouseEvent specifically for drag behavior
235
+ if (event instanceof MouseEvent) {
236
+ // For click events when drag is enabled, we don't need to prevent default
237
+ // as the drag operation should take precedence over click for dragging
238
+ const canMove = (_b = (_a = this.editable) === null || _a === void 0 ? void 0 : _a.canMove) !== null && _b !== void 0 ? _b : false;
239
+ if (!canMove) {
240
+ event.preventDefault();
241
+ }
242
+ }
243
+ if (index < 0 || index >= this.tabs.length || this.tabs[index].disabled) {
244
+ return;
245
+ }
246
+ const previousIndex = this.activeTab;
247
+ const tab = this.tabs[index];
209
248
  this.activeTab = index;
210
- this.dispatchEvent(new CustomEvent(TabEvent.tabTilteClick, {
211
- detail: { index },
212
- }));
249
+ // Dispatch events
250
+ this.dispatchEventWithMetadata("nr-tab-click" /* TabEvent.TabClick */, {
251
+ index,
252
+ tab,
253
+ previousIndex
254
+ });
255
+ if (previousIndex !== index) {
256
+ this.dispatchEventWithMetadata("nr-tab-change" /* TabEvent.TabChange */, {
257
+ index,
258
+ tab,
259
+ previousIndex
260
+ });
261
+ }
213
262
  }
214
- }
215
- TabsComponent.styles = styles;
263
+ };
264
+ NrTabsElement.styles = styles;
216
265
  __decorate([
217
266
  property({ type: Number })
218
- ], TabsComponent.prototype, "activeTab", void 0);
267
+ ], NrTabsElement.prototype, "activeTab", void 0);
219
268
  __decorate([
220
269
  property({ type: String })
221
- ], TabsComponent.prototype, "orientation", void 0);
270
+ ], NrTabsElement.prototype, "orientation", void 0);
222
271
  __decorate([
223
272
  property({ type: String })
224
- ], TabsComponent.prototype, "tabsAlign", void 0);
273
+ ], NrTabsElement.prototype, "align", void 0);
274
+ __decorate([
275
+ property({ type: String, attribute: 'size' })
276
+ ], NrTabsElement.prototype, "tabSize", void 0);
277
+ __decorate([
278
+ property({ type: String, attribute: 'type' })
279
+ ], NrTabsElement.prototype, "variant", void 0);
225
280
  __decorate([
226
281
  property({ type: Object })
227
- ], TabsComponent.prototype, "editable", void 0);
282
+ ], NrTabsElement.prototype, "editable", void 0);
228
283
  __decorate([
229
284
  property({ type: Array })
230
- ], TabsComponent.prototype, "tabs", void 0);
231
- customElements.define('hy-tabs', TabsComponent);
285
+ ], NrTabsElement.prototype, "tabs", void 0);
286
+ __decorate([
287
+ property({ type: Boolean })
288
+ ], NrTabsElement.prototype, "animated", void 0);
289
+ __decorate([
290
+ property({ type: Boolean })
291
+ ], NrTabsElement.prototype, "destroyInactiveTabPane", void 0);
292
+ __decorate([
293
+ property({ type: String })
294
+ ], NrTabsElement.prototype, "tabsAriaLabel", void 0);
295
+ NrTabsElement = __decorate([
296
+ customElement('nr-tabs')
297
+ ], NrTabsElement);
298
+ export { NrTabsElement };
232
299
  //# sourceMappingURL=tabs.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.component.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.component.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { LitElement, PropertyValueMap, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { styles } from './tabs.style.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { NOTHING_STRING, TabEditable, TabEvent, TabOrientation, TabsAlign } from './tabs.constant.js';\n/**\n * `hy-tabs` is a LitElement that provides a customizable tabs.\n * @customElement 'hy-tabs'\n *\n * Attributes\n * @attr activeTab\n * @attr orientation\n * @attr tabsAlign\n * @attr editable\n * Events\n * @fires tabEdited - Indicates when tab edited\n * @fires removeTab - Indicates when tab removed\n * @fires addTab - Indicates when tab added\n */\nexport class TabsComponent extends LitElement {\n @property({type: Number})\n activeTab!: number;\n\n @property({type: String})\n orientation!: TabOrientation;\n\n @property({type: String})\n tabsAlign!: TabsAlign;\n\n @property({type: Object})\n editable!: TabEditable;\n\n @property({type: Array})\n tabs!: any[];\n\n static override styles = styles;\n\n constructor() {\n super();\n this.activeTab = 0;\n this.orientation = TabOrientation.Horizontal;\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n 'tabs-container': true,\n 'vertical-align': this.orientation === TabOrientation.Vertical,\n 'horizontal-align': this.orientation === TabOrientation.Horizontal,\n 'right-align': this.tabsAlign === TabsAlign.Right,\n 'left-align': this.tabsAlign === TabsAlign.Left,\n 'center-align': this.tabsAlign === TabsAlign.Center,\n })}\n >\n <div\n class=\"tab-labels\"\n style=\"flex-direction: ${this.orientation === TabOrientation.Vertical ? 'column' : ('row' as any)}\"\n >\n <div></div>\n\n ${this.renderTabs()}\n <div></div>\n </div>\n <div class=\"tab-content\">${this.renderActiveTab()}</div>\n </div>\n `;\n }\n override connectedCallback() {\n super.connectedCallback();\n this.observeChildrenChanges();\n this.addEventListener('dragover', this.handleDragOver);\n }\n\n private observeChildrenChanges() {\n const mutationObserver = new MutationObserver(() => {\n // this.requestUpdate();\n });\n\n mutationObserver.observe(this, {childList: true});\n }\n\n private handleDragStart(event: any) {\n event.dataTransfer.setData('text/plain', event.currentTarget.dataset.index);\n event.dataTransfer.effectAllowed = 'move';\n event.target.closest('.tab-label').classList.add('dragging-start');\n }\n\n private handleDragOver(event: any) {\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n }\n\n private handleDragEnter(event: any) {\n event.preventDefault();\n if (event.currentTarget.contains(event.relatedTarget)) {\n return;\n }\n event.currentTarget.classList.add('dragging');\n }\n\n private handleDragLeave(event: any) {\n event.preventDefault();\n if (event.currentTarget.contains(event.relatedTarget)) {\n return;\n }\n if (event.currentTarget.classList.contains('dragging')) {\n event.currentTarget.classList.remove('dragging');\n }\n }\n\n private handleDrop(event: any) {\n event.preventDefault();\n const sourceIndex = event.dataTransfer.getData('text/plain');\n const targetIndex = event.currentTarget.dataset.index;\n if (sourceIndex !== targetIndex) {\n const tabs = Array.from(this.children || []);\n const sourceTab = tabs[sourceIndex];\n const targetTab = tabs[targetIndex];\n this.dispatchEvent(\n new CustomEvent(TabEvent.tabOrderChange, {\n detail: {sourceTab, targetTab, sourceIndex: parseInt(sourceIndex), targetIndex: parseInt(targetIndex)},\n })\n );\n }\n this.shadowRoot!.querySelector('.dragging')?.classList.remove('dragging');\n event.target.classList.remove('dragging');\n this.shadowRoot!.querySelector('.dragging-start')?.classList.remove('dragging-start');\n }\n\n renderDeleteIcon(tab :any){\n // if the tab does not gave edibale propetry and canDeleteTab is true\n // then render the delete icon\n if(!tab.editable && this.editable?.canDeleteTab){\n return html`<hy-icon\n @mousedown=${() => {\n this.dispatchEvent(\n new CustomEvent(TabEvent.removeTab, {\n detail: {index: tab.index},\n })\n );\n }}\n name=\"window-close\"\n class=\"close-icon\"\n ></hy-icon>`\n ;\n }\n return nothing;\n\n }\n private renderTabs() {\n const tabs = [];\n const children = this.tabs || [];\n for (let tabIndex = 0; tabIndex < children.length; tabIndex++) {\n const tab = html`\n <div\n data-index=${tabIndex}\n draggable=${this.editable?.canMove}\n @dragenter=${this.handleDragEnter}\n @dragleave=${this.handleDragLeave}\n @dragstart=${(e: any) => this.handleDragStart(e)}\n @drop=${(event: Event) => this.handleDrop(event)}\n class=${tabIndex === this.activeTab ? 'tab-label active' : 'tab-label'}\n @mousedown=${(e: Event) => this.setActiveTab(tabIndex, children[tabIndex], e)}\n >\n <hy-label\n contenteditable=${this.editable?.canEditTabTitle ? true : nothing}\n @blur=${(event: Event) => {\n this.dispatchEvent(\n new CustomEvent(TabEvent.tabEdited, {\n detail: {\n tab: {\n label: (event.target as HTMLElement)?.textContent,\n index: tabIndex,\n },\n },\n })\n );\n }}\n >${children[tabIndex].label}</hy-label\n >\n ${children[tabIndex].editable?.canDeleteTab ?? this.editable?.canDeleteTab\n ? html`<hy-icon\n @mousedown=${() => {\n this.dispatchEvent(\n new CustomEvent(TabEvent.removeTab, {\n detail: {index: tabIndex},\n })\n );\n }}\n name=\"window-close\"\n class=\"close-icon\"\n ></hy-icon>`\n : NOTHING_STRING}\n </div>\n `;\n tabs.push(tab);\n }\n if (this.editable?.canAddTab) {\n const tab = html`\n <div\n class=\"tab-label add-tab-label\"\n @mousedown=${() => {\n this.dispatchEvent(new CustomEvent(TabEvent.addTab));\n }}\n >\n <hy-icon name=\"plus\" class=\"add-tab-icon\"></hy-icon>\n </div>\n `;\n tabs.push(tab);\n }\n return tabs;\n }\n\n override updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n super.updated(changedProperties);\n if (!this.tabs[this.activeTab]) {\n if (!this.tabs[this.activeTab - 1]) {\n this.activeTab++;\n } else {\n this.activeTab--;\n }\n }\n }\n\n private renderActiveTab() {\n const children = this.tabs ? [...this.tabs] : [];\n if (children.length > 0 && this.activeTab >= 0 && this.activeTab < children.length) {\n return html`${children[this.activeTab].content}`;\n }\n return html`${NOTHING_STRING}`;\n }\n\n private setActiveTab(index: number, _element: Element, event: Event) {\n event.preventDefault();\n this.activeTab = index;\n this.dispatchEvent(\n new CustomEvent(TabEvent.tabTilteClick, {\n detail: {index},\n })\n );\n }\n}\n\ncustomElements.define('hy-tabs', TabsComponent);\n"]}
1
+ {"version":3,"file":"tabs.component.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAoB,MAAM,KAAK,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EASL,YAAY,EACZ,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,wBAAwB;AACxB,OAAO,2BAA2B,CAAC;AAEnC,qBAAqB;AACrB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EAKpB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,iBAAiB,CAAC,UAAU,CAAC;IAAhE;;QAOE,iCAAiC;QAEjC,cAAS,GAAG,kBAAkB,CAAC;QAE/B,6CAA6C;QAE7C,gBAAW,gDAA6C;QAExD,0CAA0C;QAE1C,UAAK,+BAA6B;QAElC,sCAAsC;QAEtC,YAAO,iCAA2B;QAElC,uBAAuB;QAEvB,YAAO,mCAA4B;QAMnC,yBAAyB;QAEzB,SAAI,GAAc,EAAE,CAAC;QAErB,gCAAgC;QAEhC,aAAQ,GAAG,IAAI,CAAC;QAEhB,8CAA8C;QAE9C,2BAAsB,GAAG,KAAK,CAAC;QAE/B,+CAA+C;QAE/C,kBAAa,GAAG,YAAY,CAAC;QAEpB,uBAAkB,GAAG,CAAC,SAAS,CAAC,CAAC;QAE1C,6EAA6E;QACrE,uBAAkB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtD,uBAAkB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtD,uBAAkB,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtD,oBAAe,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAmN1D,CAAC;IAjNU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,4DAA4D;QAC5D,KAAK,IAAI,CAAC,kBAAkB,CAAC;QAC7B,KAAK,IAAI,CAAC,kBAAkB,CAAC;QAC7B,KAAK,IAAI,CAAC,kBAAkB,CAAC;QAC7B,KAAK,IAAI,CAAC,eAAe,CAAC;IAC5B,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA;;gBAEC,QAAQ,CAAC;YACf,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI,CAAC,WAAW,6CAA4B;YAC9D,kBAAkB,EAAE,IAAI,CAAC,WAAW,iDAA8B;YAClE,aAAa,EAAE,IAAI,CAAC,KAAK,kCAAoB;YAC7C,YAAY,EAAE,IAAI,CAAC,KAAK,gCAAmB;YAC3C,cAAc,EAAE,IAAI,CAAC,KAAK,oCAAqB;SAChD,CAAC;;sBAEY,IAAI,CAAC,aAAa,IAAI,OAAO;sBAC7B,IAAI,CAAC,YAAY;qBAClB,IAAI,CAAC,OAAO;qBACZ,IAAI,CAAC,OAAO;;;;mCAIE,IAAI,CAAC,WAAW,6CAA4B,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;;;YAGtF,IAAI,CAAC,UAAU,EAAE;;;;YAIjB,IAAI,CAAC,eAAe,EAAE;;;KAG7B,CAAC;IACJ,CAAC;IAEO,sBAAsB;QAC5B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACjD,uCAAuC;YACvC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAEO,gBAAgB,CAAC,GAAY,EAAE,QAAgB;QACrD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QAE/D,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACrF,OAAO,OAAO,CAAC;SAChB;QAED,OAAO,IAAI,CAAA;;;;qBAIM,CAAC,CAAa,EAAE,EAAE;YAC7B,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;;KAEJ,CAAC;IACJ,CAAC;IAEO,UAAU;QAChB,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC;YAE7C,2CAA2C;YAC3C,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAG,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC;YAE9D,MAAM,UAAU,GAAG,IAAI,CAAA;;uBAEN,QAAQ;sBACT,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;uBAC7D,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;uBAC5D,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;uBAC5D,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;kBACjE,CAAC,CAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;kBACvD,QAAQ,CAAC;gBACf,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;gBAC1B,WAAW,EAAE,UAAU,IAAI,IAAI,CAAC,WAAW,iDAA8B;gBACzE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,iDAA8B;gBAC3E,UAAU,EAAE,SAAS,IAAI,IAAI,CAAC,WAAW,iDAA8B;gBACvE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,WAAW,iDAA8B;aAC5E,CAAC;;0BAEc,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;0BAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;qBACpC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;mBACvB,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;;YAE1E,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBAChD,CAAC,CAAC,IAAI,CAAA,iBAAiB,GAAG,CAAC,IAAI,8BAA8B;gBAC7D,CAAC,CAAC,OAAO;;;kCAGa,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,OAAO;wBAC7E,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;2BAC1E,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;aACtG,GAAG,CAAC,KAAK;;YAEV,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;;OAEzC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACvB;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE;YACvC,MAAM,aAAa,GAAG,IAAI,CAAA;;;;;;uBAMT,GAAG,EAAE;gBAChB,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACzC,CAAC;qBACU,CAAC,CAAgB,EAAE,EAAE;gBAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACtC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;iBACxC;YACH,CAAC;;YAEC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBACpC,CAAC,CAAC,IAAI,CAAA,sDAAsD;gBAC5D,CAAC,CAAC,IAAI,CAAA,gBAAgB;;OAE3B,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,OAAO,CAAC,iBAAoE;QACnF,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEjC,4BAA4B;QAC5B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACpD;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACpB;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACtF,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAA,GAAG,SAAS,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,KAAa;;QACvC,mDAAmD;QACnD,IAAI,KAAK,YAAY,UAAU,EAAE;YAC/B,0EAA0E;YAC1E,uEAAuE;YACvE,MAAM,OAAO,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,mCAAI,KAAK,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;aACxB;SACF;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;YACvE,OAAO;SACR;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,kBAAkB;QAClB,IAAI,CAAC,yBAAyB,yCAAoB;YAChD,KAAK;YACL,GAAG;YACH,aAAa;SACS,CAAC,CAAC;QAE1B,IAAI,aAAa,KAAK,KAAK,EAAE;YAC3B,IAAI,CAAC,yBAAyB,2CAAqB;gBACjD,KAAK;gBACL,GAAG;gBACH,aAAa;aACS,CAAC,CAAC;SAC3B;IACH,CAAC;CACF,CAAA;AAnQiB,oBAAM,GAAG,MAAO,CAAA;AAIhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDACI;AAI/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAC6B;AAIxD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CACO;AAIlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;8CACZ;AAIlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;8CACX;AAInC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACJ;AAIvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;2CACL;AAIrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CACZ;AAIhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6DACG;AAI/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDACE;AA7ClB,aAAa;IADzB,aAAa,CAAC,SAAS,CAAC;GACZ,aAAa,CAwQzB;SAxQY,aAAa","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { html, LitElement, nothing, PropertyValueMap } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styles } from './tabs.style.js';\nimport {\n TabOrientation,\n TabsAlign,\n TabSize,\n TabType,\n TabEditable,\n TabEvent,\n TabItem,\n TabClickEventDetail,\n EMPTY_STRING,\n DEFAULT_ACTIVE_TAB\n} from './tabs.types.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\n\n// Import icon component\nimport '../icon/icon.component.js';\n\n// Import controllers\nimport {\n TabsKeyboardController,\n TabsDragDropController,\n TabsEditableController,\n TabsEventController,\n type TabsKeyboardHost,\n type TabsDragDropHost,\n type TabsEditableHost,\n type TabsEventHost\n} from './controllers/index.js';\n\n/**\n * Versatile tabs component with support for multiple orientations, editable tabs, and drag & drop.\n * \n * @example\n * ```html\n * <!-- Basic usage -->\n * <nr-tabs .tabs=${tabs} activeTab=\"0\"></nr-tabs>\n * \n * <!-- With editing capabilities -->\n * <nr-tabs .tabs=${tabs} .editable=${{canAddTab: true, canDeleteTab: true}}></nr-tabs>\n * \n * <!-- Vertical orientation -->\n * <nr-tabs .tabs=${tabs} orientation=\"vertical\" align=\"left\"></nr-tabs>\n * ```\n * \n * @fires nr-tab-click - Tab clicked\n * @fires nr-tab-change - Active tab changed\n * @fires nr-tab-add - New tab requested\n * @fires nr-tab-remove - Tab removal requested\n * @fires nr-tab-edit - Tab edited\n * @fires nr-tab-order-change - Tab order changed via drag & drop\n * \n * @slot default - Tab content\n */\n@customElement('nr-tabs')\nexport class NrTabsElement extends NuralyUIBaseMixin(LitElement) implements \n TabsKeyboardHost,\n TabsDragDropHost,\n TabsEditableHost,\n TabsEventHost {\n static override styles = styles;\n \n /** Currently active tab index */\n @property({ type: Number })\n activeTab = DEFAULT_ACTIVE_TAB;\n\n /** Tab orientation (horizontal, vertical) */\n @property({ type: String })\n orientation: TabOrientation = TabOrientation.Horizontal;\n\n /** Tab alignment (left, center, right) */\n @property({ type: String })\n align: TabsAlign = TabsAlign.Left;\n\n /** Tab size (small, medium, large) */\n @property({ type: String, attribute: 'size' })\n tabSize: TabSize = TabSize.Medium;\n\n /** Tab type/variant */\n @property({ type: String, attribute: 'type' })\n variant: TabType = TabType.Default;\n\n /** Editable configuration */\n @property({ type: Object })\n editable?: TabEditable;\n\n /** Array of tab items */\n @property({ type: Array })\n tabs: TabItem[] = [];\n\n /** Whether tabs are animated */\n @property({ type: Boolean })\n animated = true;\n\n /** Whether to destroy inactive tab content */\n @property({ type: Boolean })\n destroyInactiveTabPane = false;\n\n /** Custom aria-label for the tabs container */\n @property({ type: String })\n tabsAriaLabel = EMPTY_STRING;\n\n override requiredComponents = ['nr-icon'];\n\n // Controllers - automatically connected via Lit's reactive controller system\n private keyboardController = new TabsKeyboardController(this);\n private dragDropController = new TabsDragDropController(this);\n private editableController = new TabsEditableController(this);\n private eventController = new TabsEventController(this);\n\n override connectedCallback() {\n super.connectedCallback();\n this.validateDependencies();\n this.observeChildrenChanges();\n \n // Ensure controllers are properly referenced for TypeScript\n void this.keyboardController;\n void this.dragDropController;\n void this.editableController;\n void this.eventController;\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n 'tabs-container': true,\n 'vertical-align': this.orientation === TabOrientation.Vertical,\n 'horizontal-align': this.orientation === TabOrientation.Horizontal,\n 'right-align': this.align === TabsAlign.Right,\n 'left-align': this.align === TabsAlign.Left,\n 'center-align': this.align === TabsAlign.Center,\n })}\n role=\"tablist\"\n aria-label=\"${this.tabsAriaLabel || nothing}\"\n data-theme=\"${this.currentTheme}\"\n data-size=\"${this.tabSize}\"\n data-type=\"${this.variant}\"\n >\n <div\n class=\"tab-labels\"\n style=\"flex-direction: ${this.orientation === TabOrientation.Vertical ? 'column' : 'row'}\"\n >\n <div></div>\n ${this.renderTabs()}\n <div></div>\n </div>\n <div class=\"tab-content\" role=\"tabpanel\">\n ${this.renderActiveTab()}\n </div>\n </div>\n `;\n }\n\n private observeChildrenChanges() {\n const mutationObserver = new MutationObserver(() => {\n // Handle dynamic tab changes if needed\n this.requestUpdate();\n });\n\n mutationObserver.observe(this, { childList: true });\n }\n\n private renderDeleteIcon(tab: TabItem, tabIndex: number) {\n if (!this.editableController.canDeleteTab(tab)) return nothing;\n\n if (!this.isComponentAvailable('nr-icon')) {\n console.warn('[nr-tabs] Icon component not available. Delete icon will not render.');\n return nothing;\n }\n\n return html`\n <nr-icon\n name=\"window-close\"\n class=\"close-icon\"\n @mousedown=${(e: MouseEvent) => {\n e.stopPropagation();\n this.editableController.handleRemoveTab(tabIndex);\n }}\n ></nr-icon>\n `;\n }\n\n private renderTabs() {\n const tabs = [];\n \n for (let tabIndex = 0; tabIndex < this.tabs.length; tabIndex++) {\n const tab = this.tabs[tabIndex];\n const isActive = tabIndex === this.activeTab;\n \n // Determine tab position for border radius\n const isFirstTab = tabIndex === 0;\n const isLastTab = tabIndex === this.tabs.length - 1;\n const isSingleTab = this.tabs.length === 1;\n const isMiddleTab = !isFirstTab && !isLastTab && !isSingleTab;\n \n const tabElement = html`\n <div\n data-index=${tabIndex}\n draggable=${this.dragDropController.getDraggableState() ? 'true' : 'false'}\n @dragenter=${(e: DragEvent) => this.dragDropController.handleDragEnter(e)}\n @dragleave=${(e: DragEvent) => this.dragDropController.handleDragLeave(e)}\n @dragstart=${(e: DragEvent) => this.dragDropController.handleDragStart(e)}\n @drop=${(e: DragEvent) => this.dragDropController.handleDrop(e)}\n class=${classMap({\n 'tab-label': true,\n 'active': isActive,\n 'disabled': !!tab.disabled,\n 'first-tab': isFirstTab && this.orientation === TabOrientation.Horizontal,\n 'middle-tab': isMiddleTab && this.orientation === TabOrientation.Horizontal,\n 'last-tab': isLastTab && this.orientation === TabOrientation.Horizontal,\n 'single-tab': isSingleTab && this.orientation === TabOrientation.Horizontal\n })}\n role=\"tab\"\n aria-selected=${isActive ? 'true' : 'false'}\n aria-disabled=${tab.disabled ? 'true' : 'false'}\n tabindex=${isActive ? '0' : '-1'}\n @click=${(e: MouseEvent) => this.eventController.handleTabClick(tabIndex, e)}\n >\n ${tab.icon && this.isComponentAvailable('nr-icon') \n ? html`<nr-icon name=${tab.icon} class=\"tab-icon\"></nr-icon>` \n : nothing}\n \n <span class=\"tab-text\" \n contenteditable=${this.editableController.getContentEditableAttribute(tab) || nothing}\n @blur=${(event: Event) => this.editableController.handleTabTitleBlur(event, tabIndex)}\n @keydown=${(event: KeyboardEvent) => this.editableController.handleTabTitleKeyDown(event, tabIndex)}\n >${tab.label}</span>\n \n ${this.renderDeleteIcon(tab, tabIndex)}\n </div>\n `;\n tabs.push(tabElement);\n }\n\n // Add tab button\n if (this.editableController.canAddTab()) {\n const addTabElement = html`\n <div\n class=\"tab-label add-tab-label\"\n role=\"button\"\n aria-label=\"Add new tab\"\n tabindex=\"0\"\n @mousedown=${() => {\n this.editableController.handleAddTab();\n }}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.editableController.handleAddTab();\n }\n }}\n >\n ${this.isComponentAvailable('nr-icon') \n ? html`<nr-icon name=\"plus\" class=\"add-tab-icon\"></nr-icon>`\n : html`<span>+</span>`}\n </div>\n `;\n tabs.push(addTabElement);\n }\n\n return tabs;\n }\n\n override updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n super.updated(changedProperties);\n \n // Validate active tab index\n if (this.activeTab >= this.tabs.length) {\n this.activeTab = Math.max(0, this.tabs.length - 1);\n } else if (this.activeTab < 0) {\n this.activeTab = 0;\n }\n }\n\n private renderActiveTab() {\n if (this.tabs.length === 0 || this.activeTab < 0 || this.activeTab >= this.tabs.length) {\n return nothing;\n }\n\n const activeTab = this.tabs[this.activeTab];\n return html`${activeTab.content || nothing}`;\n }\n\n setActiveTab(index: number, event?: Event) {\n // Handle MouseEvent specifically for drag behavior\n if (event instanceof MouseEvent) {\n // For click events when drag is enabled, we don't need to prevent default\n // as the drag operation should take precedence over click for dragging\n const canMove = this.editable?.canMove ?? false;\n if (!canMove) {\n event.preventDefault();\n }\n }\n \n if (index < 0 || index >= this.tabs.length || this.tabs[index].disabled) {\n return;\n }\n\n const previousIndex = this.activeTab;\n const tab = this.tabs[index];\n \n this.activeTab = index;\n \n // Dispatch events\n this.dispatchEventWithMetadata(TabEvent.TabClick, {\n index,\n tab,\n previousIndex\n } as TabClickEventDetail);\n \n if (previousIndex !== index) {\n this.dispatchEventWithMetadata(TabEvent.TabChange, {\n index,\n tab,\n previousIndex\n } as TabClickEventDetail);\n }\n }\n}\n"]}
@@ -1,26 +1,20 @@
1
- export declare type TabEditable = {
2
- canDeleteTab: boolean;
3
- canEditTabTitle: boolean;
4
- canAddTab: boolean;
5
- canMove: boolean;
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ *
6
+ * @deprecated This file is deprecated. Please import types from './tabs.types.js' instead.
7
+ * This file will be removed in the next major version.
8
+ */
9
+ export { TabOrientation, TabsAlign, TabEditable, TabEvent, EMPTY_STRING, NOTHING_STRING, LABEL_ATTRIBUTES } from './tabs.types.js';
10
+ /**
11
+ * @deprecated Use TabEvent from tabs.types.js instead
12
+ */
13
+ export declare const TabEvent_DEPRECATED: {
14
+ readonly removeTab: "removeTab";
15
+ readonly tabEdited: "tabEdited";
16
+ readonly tabTilteClick: "tabTilteClick";
17
+ readonly tabOrderChange: "tabOrderChange";
18
+ readonly addTab: "addTab";
6
19
  };
7
- export declare enum TabOrientation {
8
- Horizontal = "horizontal",
9
- Vertical = "vertical"
10
- }
11
- export declare enum TabsAlign {
12
- Right = "right",
13
- Left = "left",
14
- Center = "center"
15
- }
16
- export declare enum TabEvent {
17
- removeTab = "removeTab",
18
- tabEdited = "tabEdited",
19
- tabTilteClick = "tabTilteClick",
20
- tabOrderChange = "tabOrderChange",
21
- addTab = "addTab"
22
- }
23
- export declare const NOTHING_STRING = "";
24
- export declare const EMPTY_STRING = "";
25
- export declare const LABEL_ATTRIBUTES = "label";
26
20
  //# sourceMappingURL=tabs.constant.d.ts.map
package/tabs.constant.js CHANGED
@@ -1,23 +1,21 @@
1
- export var TabOrientation;
2
- (function (TabOrientation) {
3
- TabOrientation["Horizontal"] = "horizontal";
4
- TabOrientation["Vertical"] = "vertical";
5
- })(TabOrientation || (TabOrientation = {}));
6
- export var TabsAlign;
7
- (function (TabsAlign) {
8
- TabsAlign["Right"] = "right";
9
- TabsAlign["Left"] = "left";
10
- TabsAlign["Center"] = "center";
11
- })(TabsAlign || (TabsAlign = {}));
12
- export var TabEvent;
13
- (function (TabEvent) {
14
- TabEvent["removeTab"] = "removeTab";
15
- TabEvent["tabEdited"] = "tabEdited";
16
- TabEvent["tabTilteClick"] = "tabTilteClick";
17
- TabEvent["tabOrderChange"] = "tabOrderChange";
18
- TabEvent["addTab"] = "addTab";
19
- })(TabEvent || (TabEvent = {}));
20
- export const NOTHING_STRING = '';
21
- export const EMPTY_STRING = '';
22
- export const LABEL_ATTRIBUTES = 'label';
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Nuraly, Laabidi Aymen
4
+ * SPDX-License-Identifier: MIT
5
+ *
6
+ * @deprecated This file is deprecated. Please import types from './tabs.types.js' instead.
7
+ * This file will be removed in the next major version.
8
+ */
9
+ // Re-export from the new types file for backward compatibility
10
+ export { EMPTY_STRING, NOTHING_STRING, LABEL_ATTRIBUTES } from './tabs.types.js';
11
+ /**
12
+ * @deprecated Use TabEvent from tabs.types.js instead
13
+ */
14
+ export const TabEvent_DEPRECATED = {
15
+ removeTab: 'removeTab',
16
+ tabEdited: 'tabEdited',
17
+ tabTilteClick: 'tabTilteClick',
18
+ tabOrderChange: 'tabOrderChange',
19
+ addTab: 'addTab',
20
+ };
23
21
  //# sourceMappingURL=tabs.constant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.constant.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.constant.ts"],"names":[],"mappings":"AAOA,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,2CAAyB,CAAA;IACzB,uCAAqB,CAAA;AACvB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AACD,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,4BAAa,CAAA;IACb,0BAAY,CAAA;IACZ,8BAAgB,CAAA;AAClB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,mCAAuB,CAAA;IACvB,mCAAuB,CAAA;IACvB,2CAA+B,CAAA;IAC/B,6CAAiC,CAAA;IACjC,6BAAiB,CAAA;AACnB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC","sourcesContent":["export type TabEditable = {\n canDeleteTab: boolean;\n canEditTabTitle: boolean;\n canAddTab: boolean;\n canMove: boolean;\n};\n\nexport enum TabOrientation {\n Horizontal = 'horizontal',\n Vertical = 'vertical',\n}\nexport enum TabsAlign{\n Right='right',\n Left ='left',\n Center ='center'\n}\n\nexport enum TabEvent {\n removeTab = 'removeTab',\n tabEdited = 'tabEdited',\n tabTilteClick = 'tabTilteClick',\n tabOrderChange = 'tabOrderChange',\n addTab = 'addTab',\n}\n\nexport const NOTHING_STRING = '';\nexport const EMPTY_STRING = '';\n\nexport const LABEL_ATTRIBUTES = 'label';\n"]}
1
+ {"version":3,"file":"tabs.constant.js","sourceRoot":"","sources":["../../../src/components/tabs/tabs.constant.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+DAA+D;AAC/D,OAAO,EAKL,YAAY,EACZ,cAAc,EACd,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;CACR,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n * \n * @deprecated This file is deprecated. Please import types from './tabs.types.js' instead.\n * This file will be removed in the next major version.\n */\n\n// Re-export from the new types file for backward compatibility\nexport {\n TabOrientation,\n TabsAlign,\n TabEditable,\n TabEvent,\n EMPTY_STRING,\n NOTHING_STRING,\n LABEL_ATTRIBUTES\n} from './tabs.types.js';\n\n/**\n * @deprecated Use TabEvent from tabs.types.js instead\n */\nexport const TabEvent_DEPRECATED = {\n removeTab: 'removeTab',\n tabEdited: 'tabEdited',\n tabTilteClick: 'tabTilteClick',\n tabOrderChange: 'tabOrderChange',\n addTab: 'addTab',\n} as const;\n"]}