Angular Tabs, Pills & Accordion Component | ng-hub-ui-panels
Angular content-panels component that renders as tabs, pills or an accordion, with routing, reactive forms, keyboard navigation and CSS variables.
Overview
Why teams search for this library
Use this Angular panels component when you need tabs, pills and accordion patterns from a single API, with routed panels, reactive-forms binding, keyboard navigation and CSS-variable theming.
Install
npm install ng-hub-ui-panelsJump to
Ideal for
- settings pages
- product detail tabs
- FAQ accordions
- dashboard sections
About panels
ng-hub-ui-panels unifies tabs, pills and accordion into one standalone Angular component built on Signals. It supports routed panels, ControlValueAccessor form binding, scrollable and vertical strips, and full --hub-panels-* theming. It supersedes ng-hub-ui-accordion, whose accordion view it replaces while keeping the --hub-accordion-* token contract.
Feature guides
Visualizations
One component, three views: classic underlined tabs, rounded pills and stacked accordion disclosure panels — switchable through a single `type` input.
Examples:
Basic Tabs
Basic Tabs
Pills
Pills
Accordion View
Accordion View
Card & Content Slots
Card & Content Slots
hubPanelHeader / hubPanelFooter slots work in tabs, pills and accordion too. A single standalone <hub-panel> (no container):
hub-panel renders as a card by itself. Semantic Alerts
Semantic Alerts
An alert can use the same header/footer slots as a card:
Semantic Strip Accent
Semantic Strip Accent
Strip Layout
Lay out the header strip to fit any shell: stack it vertically beside the content, stretch headers to fill the width, or make an overflowing strip scrollable.
Examples:
Vertical Tabs
Vertical Tabs
Justified Tabs
Justified Tabs
Scrollable Tabs
Scrollable Tabs
Panel Management
Disable individual panels and let users add or remove panels on the fly with the ✕ affordance and the Delete key.
Examples:
Disabled Panels
Disabled Panels
Removable & Dynamic Panels
Removable & Dynamic Panels
Custom Templates
Replace the plain-text header with any Angular template — icons, badges or interactive controls — via the `hubPanelHeading` directive.
Examples:
Custom Heading Templates
Custom Heading Templates
Form Integration
First-class ControlValueAccessor support binds the active panel(s) to Angular's reactive and template-driven forms.
Examples:
Reactive Forms Integration
Reactive Forms Integration
Multiple Selection
With `multiple`, several panels can be open at once. In the accordion view they all expand; in the tabs/pills views every active header starts its own visible panel while the following inactive headers stay grouped above that panel until the next active header starts a new block.
Examples:
Multiple Selection
Multiple Selection
Click an inactive tab to split the layout into a new panel block. Click an active tab to merge that block back.
Multiple Vertical Headers
Multiple Vertical Headers
Each active header starts a new row-like vertical block. The blocks stack top-to-bottom, and the whole layout scrolls horizontally only when one row needs more width.
Tabs
Pills
Accordion Options
The accordion view supports multiple simultaneously expanded panels and an edge-to-edge `flush` layout without outer chrome.
Examples:
Accordion Multiple & Flush
Accordion Multiple & Flush
Accessibility
Full keyboard navigation (arrows, Home, End, Delete), roving tabindex, and correct ARIA roles for both the tablist and accordion disclosure patterns.
Examples:
Keyboard Navigation
Keyboard Navigation
Focus a tab, then use ← → Home End. Press Delete on a removable tab to close it.
Key features
Recent changes
Version 22.1.0 - 6/22/26, 12:00 AM
added: New variant input on <hub-panels> selecting the semantic accent of the navigation strip (active/hover tab, active pill, active accordion header). Built-in variants (primary | success | danger | warning | info) use the exact design-system tints; any custom string is also accepted and derived with color-mix. Defaults to primary.
added: New group-accent tokens --hub-panels-accent, --hub-panels-accent-emphasis and --hub-panels-accent-subtle; the strip active/hover affordances now resolve through this single accent instead of being hard-wired to --hub-sys-color-primary*.
changed: The outer container chrome now inherits from the --hub-container-* base layer (re-base hook), so overriding a container token on a subtree re-bases the panels chrome. No visual change with default tokens.
Version 21.3.0 - 6/16/26, 12:00 AM
added: New alert appearance for a standalone <hub-panel>: appearance="alert" with a variant renders a semantic callout (role="alert").
added: New variant input (primary | success | danger | warning | info) selecting the alert colour; omit it for a neutral alert. Exported HubPanelAppearance and HubPanelVariant types.
added: New alert tokens (--hub-panels-alert-*); each variant re-points them at the --hub-sys-color-<variant>-{subtle,border-subtle,emphasis} family, so the alert inherits every theme and dark mode automatically.
Version 21.2.0 - 6/14/26, 12:00 AM
added: New card visualization (type="card"): a chromeless format with no navigation strip where every <hub-panel> is always visible and styled as a card.
added: A <hub-panel> can now be used standalone, outside any <hub-panels> container, rendering as a card on its own.
added: New content-slot directives hubPanelHeader and hubPanelFooter, rendering header/footer bands in every view, distinct from the navigational hubPanelHeading.
Version 21.1.1 - 6/12/26, 12:00 AM
added: New token: --hub-panels-header-bg, used by the tabs/pills strip background while defaulting to the panel surface.
added: New token: --hub-panels-pill-content-border-width, which controls the bordered card chrome in the pills content area.
changed: The active header background now defaults to --hub-panels-content-bg so the active tab/panel fusion stays aligned when themes retint the content surface.
changed: The pills content area is borderless by default; themes can opt back into a bordered card by overriding --hub-panels-pill-content-border-width.
Version 21.1.0 - 6/11/26, 12:00 AM
added: Multiple selection in the tabs/pills views: each open pane becomes its own bordered box placed next to the others (side by side when horizontal, stacked when vertical), with a per-pane minimum and scroll on overflow.
added: New tokens: --hub-panels-pane-min-width, --hub-panels-pane-min-height, --hub-panels-pane-gap, --hub-panels-nav-content-gap, --hub-panels-pill-gap.
fixed: Accordion content was always empty (two unselected ng-content slots); replaced with a single projection slot.
fixed: tabs and vertical tabs now render as a single bordered box around the strip and content together (not two boxes); pills gain spacing before a bordered content card.
changed: Smooth strip scrolling, not-allowed cursor on disabled headers, and full-width container.
Version 21.0.0 - 6/11/26, 12:00 AM
added: Initial release of ng-hub-ui-panels with tabs, pills and accordion visualizations.
added: ControlValueAccessor integration with single and multiple selection, bindValue and compareWith.
added: Routed panels via routerLink with route/full pathMatch and a <router-outlet> content area.
added: Keyboard navigation (arrows/Home/End/Delete), scrollable, vertical and justified strips.
added: Accordion view with multiple expansion, flush layout and an animated grid-based collapse.
added: Custom header templates through the hubPanelHeading directive and full --hub-panels-* theming.
changed: Supersedes ng-hub-ui-accordion; the accordion view honours the --hub-accordion-* token contract for theme compatibility.