@shoelace-style/shoelace
Version:
A forward-thinking library of web components.
123 lines (120 loc) • 2.97 kB
JavaScript
import {
tab_styles_default
} from "./chunk.DK6N4THU.js";
import {
SlIconButton
} from "./chunk.MXRX25LY.js";
import {
LocalizeController
} from "./chunk.NH3SRVOC.js";
import {
e
} from "./chunk.UZVKBFXH.js";
import {
watch
} from "./chunk.SJGTYGCD.js";
import {
component_styles_default
} from "./chunk.K23QWHWK.js";
import {
ShoelaceElement,
e as e2,
n
} from "./chunk.QAHCGRIS.js";
import {
x
} from "./chunk.CXZZ2LVK.js";
import {
__decorateClass
} from "./chunk.625AWUY7.js";
// src/components/tab/tab.component.ts
var id = 0;
var SlTab = class extends ShoelaceElement {
constructor() {
super(...arguments);
this.localize = new LocalizeController(this);
this.attrId = ++id;
this.componentId = `sl-tab-${this.attrId}`;
this.panel = "";
this.active = false;
this.closable = false;
this.disabled = false;
this.tabIndex = 0;
}
connectedCallback() {
super.connectedCallback();
this.setAttribute("role", "tab");
}
handleCloseClick(event) {
event.stopPropagation();
this.emit("sl-close");
}
handleActiveChange() {
this.setAttribute("aria-selected", this.active ? "true" : "false");
}
handleDisabledChange() {
this.setAttribute("aria-disabled", this.disabled ? "true" : "false");
if (this.disabled && !this.active) {
this.tabIndex = -1;
} else {
this.tabIndex = 0;
}
}
render() {
this.id = this.id.length > 0 ? this.id : this.componentId;
return x`
<div
part="base"
class=${e({
tab: true,
"tab--active": this.active,
"tab--closable": this.closable,
"tab--disabled": this.disabled
})}
>
<slot></slot>
${this.closable ? x`
<sl-icon-button
part="close-button"
exportparts="base:close-button__base"
name="x-lg"
library="system"
label=${this.localize.term("close")}
class="tab__close-button"
=${this.handleCloseClick}
tabindex="-1"
></sl-icon-button>
` : ""}
</div>
`;
}
};
SlTab.styles = [component_styles_default, tab_styles_default];
SlTab.dependencies = { "sl-icon-button": SlIconButton };
__decorateClass([
e2(".tab")
], SlTab.prototype, "tab", 2);
__decorateClass([
n({ reflect: true })
], SlTab.prototype, "panel", 2);
__decorateClass([
n({ type: Boolean, reflect: true })
], SlTab.prototype, "active", 2);
__decorateClass([
n({ type: Boolean, reflect: true })
], SlTab.prototype, "closable", 2);
__decorateClass([
n({ type: Boolean, reflect: true })
], SlTab.prototype, "disabled", 2);
__decorateClass([
n({ type: Number, reflect: true })
], SlTab.prototype, "tabIndex", 2);
__decorateClass([
watch("active")
], SlTab.prototype, "handleActiveChange", 1);
__decorateClass([
watch("disabled")
], SlTab.prototype, "handleDisabledChange", 1);
export {
SlTab
};