import { Elena, html, unsafeHTML } from '@elenajs/core';
import type { LitroTabItem } from './litro-tab-item.js';
/**
*
* Content A
* Content B
*
*
* Light DOM tabs — discovers children via querySelectorAll.
*/
export class LitroTabs extends Elena(HTMLElement) {
static tagName = 'litro-tabs';
static props = ['_labels', '_selectedIndex'];
_labels: string[] = [];
_selectedIndex = 0;
private _items(): LitroTabItem[] {
return Array.from(this.querySelectorAll('litro-tab-item')) as LitroTabItem[];
}
override connectedCallback() {
super.connectedCallback();
this._syncItems();
}
private _syncItems() {
const items = this._items();
this._labels = items.map((item, i) => item.label || `Tab ${i + 1}`);
this._selectIndex(this._selectedIndex < items.length ? this._selectedIndex : 0, items);
}
private _selectIndex(index: number, items?: LitroTabItem[]) {
const all = items ?? this._items();
this._selectedIndex = index;
all.forEach((item, i) => {
if (i === index) {
item.setAttribute('selected', '');
item.selected = true;
} else {
item.removeAttribute('selected');
item.selected = false;
}
});
}
_handleTabClick(index: number) {
this._selectIndex(index);
}
render() {
const tabButtons = this._labels.map((label, i) =>
``
).join('');
return html`
${unsafeHTML(tabButtons)}
${unsafeHTML(this.innerHTML)}
`;
}
}
LitroTabs.define();
export default LitroTabs;