{# v21.0.0a6: generic tab strip partial. Presentation-only — the caller's enclosing Alpine scope MUST provide: - `tabs`: array of {id, label, shortcut} - `active`: id of the currently-active tab - `setTab(id)`: switch handler The caller also supplies a stable `tabs_id` (used for the wrapper id so e2e tests + CSS can target it) and an optional `tabs_extra_class` for caller-side style overrides. This is intentionally a thin visual wrapper — keeping state on the caller's factory means the existing tab panels (which already use `x-show="active === 'foo'"`) work unmodified. #}