Source code for spaday_webawesome.tabs
"""WebAwesome tab-group convenience component."""
from typing import Any
from spaday.component import Child, Component
from .components import WaTab, WaTabPanel
def _tab_name(label: str) -> str:
return "-".join("".join(c if c.isalnum() else " " for c in label.lower()).split()) or "tab"
[docs]
class Tabs(Component):
"""A ``wa-tab-group`` built from labelled content panels.
Bind ``active`` two-way to keep application state synchronized with user tab selection.
"""
tag = "wa-tab-group"
def __init__(self, *, active: str | None = None, placement: str | None = None, key: str | None = None, **props: Any) -> None:
super().__init__(key=key, props={"active": active, "placement": placement}, **props)
[docs]
def tab(self, label: str, *content: Child, name: str | None = None) -> "Tabs":
"""Add linked ``wa-tab`` and ``wa-tab-panel`` children."""
name = name or _tab_name(label)
self.child_in("nav", WaTab(panel=name).text(label))
self.child(WaTabPanel(name=name).child(*content))
return self
__all__ = ["Tabs"]