# Hub UI — Full documentation index (English) > Generated from the prerendered site. Other locales mirror these paths under /{lang}/. > Docs: https://hubui.dev | Repo: https://github.com/hub-env/hub-ui | License: MIT ## Angular Component Library for Standalone Apps https://hubui.dev/en/ Reusable Angular UI components — standalone, Signals-friendly, CSS-variable theming and accessibility. NPM packages for modals, tables, navigation and more. ## Carlos Morcillo https://hubui.dev/en/about/ Carlos Morcillo builds Angular component libraries, design systems and developer tooling with a focus on accessibility, reusable architecture and production-ready documentation. ## ng-hub-ui-action-sheet — Angular Action Sheet - api: https://hubui.dev/en/action-sheet/api/ - overview: https://hubui.dev/en/action-sheet/overview/ - styles: https://hubui.dev/en/action-sheet/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-action-sheet - Latest release: 22.3.0 (2026-09-21) Angular action sheet opened from a service: actions with roles, grouped or flat, handlers that can refuse to close, and dismissal by backdrop, keyboard or a drag of the sheet. Use ng-hub-ui-action-sheet when a row or a toolbar button has to offer a few actions over the current screen, without a menu component sitting in the page for a sheet nobody has opened yet. ng-hub-ui-action-sheet is a standalone Angular library that opens a sheet from a service and resolves once with what the reader chose. Actions carry a role: `cancel` is set apart at the end wherever it was declared, and `destructive` wears the danger colour. They can be listed flat or under group titles, and a handler can refuse to close, so a confirmation runs before the sheet goes away. There are three ways out — the backdrop, `Escape` and a drag of the sheet downwards — each reporting its own role and each running the cancel action's handler first. The sheet is a `role="dialog"` with `aria-modal`, named by its header, and focus moves into it on open. Key highlights: - Opened From A Service: No markup in the page for a sheet that is closed. open() mounts it, and the call resolves once with the action the reader chose or with how they dismissed it. - Roles And Handlers: Cancel is set apart at the end, destructive reads in the danger colour, and a handler returning false keeps the sheet open when the work behind the action failed. - Accessible And Themed: A modal dialog with trapped focus returned to its opener, and every visual decision behind a --hub-action-sheet-* variable. Frequently asked questions: Q: How do I open an action sheet in Angular? A: Inject HubActionSheet and call open() with a header and a list of buttons. Nothing goes in your template: the service mounts the sheet on document.body itself and hands back a HubActionSheetRef whose result is a promise resolving to the role and data of whatever the user chose. The hub-action-sheet component is still exported, but it is deprecated and goes away in 23.0.0, because mounted by hand it resolves its promise and then stays on screen. Q: How do I define the buttons of an action sheet? A: As plain data, not as projected content: buttons takes an array of objects with text, role, icon, disabled, data, cssClass and handler, and you can nest them in groups to draw separators. A button with role cancel is lifted out of wherever you declared it and rendered in its own footer block, and role destructive styles the dangerous one. A handler that returns false vetoes the close, which is how you keep the sheet open after a failed action. icon is a CSS class string on an empty element, so the icon font is yours to supply. Q: How is the action sheet dismissed? A: Three ways, each of which can be switched off: a click on the backdrop through backdropDismiss, the Escape key through keyboard, and a downward drag on the grip through swipeToClose, which closes once the drag passes 64 pixels or a quarter of the sheet height. Choosing an action closes it too, and ref.dismiss() closes it from your own code. provideHubActionSheet() sets those defaults for the whole application, and a cancel button's handler runs on every dismissal, so one piece of cleanup covers all the exits. Q: Does the action sheet become a popover or a dialog on desktop? A: No. There is not a single breakpoint in its stylesheet: on a wide screen you get the same sheet anchored to the bottom, capped at 34rem and centred horizontally. If you want a menu anchored to the button that opened it, this is the wrong component. Two more things worth knowing before you reach for it: open() touches document straight away, so it has to run in the browser and not during server rendering, and the sheet traps Tab but does not make the page behind it inert, so a screen reader can still wander into it. What changed in 22.3.0 (2026-09-21): - **The sheet animates out, which `animation` already promised.** The option was documented as ## Hub UI for AI Coding Agents https://hubui.dev/en/ai-agents/ Point your AI coding agent at ng-hub-ui: the instruction block to paste, which package covers which component, and the file each agent reads it from. ## ng-hub-ui-avatar — Angular Avatar Component - api: https://hubui.dev/en/avatar/api/ - overview: https://hubui.dev/en/avatar/overview/ - styles: https://hubui.dev/en/avatar/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-avatar - Latest release: 22.12.2 (2026-09-20) Angular avatar component with initials, fallback images, presence badges and CSS variables for reusable user identity interfaces. Choose this Angular avatar component when you need resilient user identity UI with fallbacks, initials, multiple image providers and design-system friendly styling hooks. ng-hub-ui-avatar helps Angular applications display users consistently across menus, profile cards and collaborative interfaces. It covers the common edge cases such as missing images, initials generation, status indicators and shared sizing rules. Key highlights: - Reliable fallback system: Switch between image sources, initials and placeholders without leaving broken avatar states in production. - Presence and status badges: Show online, busy or offline states in chat, admin and team-management interfaces. - Useful in grouped UIs: Build avatar groups, user stacks and compact identity patterns with consistent spacing and sizing. Common use cases: user menus; team lists; activity feeds; profile cards. Frequently asked questions: Q: How do I show a user avatar with initials when there is no picture? A: Install ng-hub-ui-avatar and give both sources at once: [src] for the image and [name] for the person's name. The component builds a fallback chain, so when the image fails to load it marks that source failed and moves to the next one, which is the initials. autoColor derives the background from a hash of the name, so the same person always gets the same colour. Q: Can it pull the picture from Gravatar or GitHub? A: Yes: gravatarId, githubId and facebookId are inputs, and provideAvatar() sets the order the sources are tried in. Know what that means at runtime, though — the browser requests secure.gravatar.com, api.github.com or graph.facebook.com directly, so those services see your visitors' IP addresses and Gravatar receives the hashed email. Q: How do I show a group of overlapping avatars? A: Wrap them in an element with the hub-avatar-group class. The overlap is pure CSS rather than a component: --hub-avatar-group-overlap sets how far each avatar slides over the previous one, and --hub-avatar-group-ring-width with --hub-avatar-group-ring-color draw the ring that separates them. Q: What should I know before choosing it over rolling my own? A: Three things. size takes pixels only — there is no sm/md/lg scale, and the font size, badge and padding are all derived from --hub-avatar-size, so one number resizes everything. Grouping is a CSS class, not a component. And HttpClient has to be available in the injector even when you only ever render initials, because the avatar service asks for it unconditionally. Angular Material has no avatar component to compare with; mat-card-avatar is a styling directive. What changed in 22.12.2 (2026-09-20): - The npm keywords declare `ng-hub-ui`, the family name somebody searching for the ecosystem ## ng-hub-ui-badges — Angular Badges Library - api: https://hubui.dev/en/badges/api/ - overview: https://hubui.dev/en/badges/overview/ - styles: https://hubui.dev/en/badges/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-badges - Latest release: 22.7.3 (2026-09-20) Semantic Angular badges for statuses, counters and removable filter tags, with CSS variables and public SCSS mixins for custom colour families. Use ng-hub-ui-badges when your Angular application needs compact semantic status labels, counters and dismissible filters without falling back to one-off spans or Bootstrap badge classes. ng-hub-ui-badges gives Angular teams a small but complete badge system: semantic colours, multiple visual surfaces, size and shape scales, status dots, optional icons and dismissible tags. Everything is driven by the shared `--hub-sys-color-*` token families and exposed `--hub-badge-*` custom properties, so the component family slots naturally into a design-system-first codebase. Key highlights: - One primitive, many badge patterns: Use the same component for statuses, counters, metadata pills and active-filter tags. - Removable filter tags: Add a keyboard-accessible dismiss action when the badge represents an active filter or scoped token. - Open Semantic Theming: Built-in colours use the design-system tokens and custom semantic names plug in through the public SCSS mixins. Common use cases: workflow statuses; table and card metadata; active filter bars; notification counters. Frequently asked questions: Q: How do I show a badge or a status pill in Angular? A: Online. variant takes solid, soft, outline, ghost, subtle or surface, size runs xs, sm, md, lg, and shape is pill, rounded or square. Setting [dot]="true" drops the text and leaves the marker, and [dotOverlay]="true" with dotPlacement pins that marker to a corner of whatever the badge wraps, which is how the notification dot on an avatar is made. Q: What is the difference between a badge and a chip? A: A badge labels something; a chip is a token the user can pick. hub-chip carries a two-way selected and lives inside hub-chip-set, which is a role=group holding the current value, with selectionMode set to single or multiple. The trade is in the styling axes: hub-badge takes variant, size and shape, while hub-chip takes only color. Both can be removable and both emit removed when the dismiss button is used. Q: Can a badge be clicked or dismissed? A: interactive turns the content into a real button with aria-pressed and Enter and Space handling, emitting selected, and active marks it as chosen. removable adds a separate dismiss button beside it, named by removeLabel and emitting removed, so the two targets never collide. Watch the binding form: dot, removable and disabled take no bare-attribute shorthand, so they need [removable]="true" rather than just removable. Q: Why do the badge styles leak into the rest of the page? A: Because they are meant to. hub-badge and hub-chip render without style encapsulation, so their rules join the global cascade as soon as either component is loaded — which is what lets you restyle them from your own sheet without piercing anything, at the cost of .hub-badge and .hub-chip being shared names. Two other limits worth knowing: hub-chip-set is not a form control, so formControlName does not reach it and it compares values by identity, which objects have to satisfy by reference; and a truncated badge shows the native title attribute unless you register a tooltip adapter. What changed in 22.7.3 (2026-09-20): - The npm keywords name the pieces the package ships — `badges`, `chip`, `chip-set`, ## ng-hub-ui-board — Angular Kanban Board Component - api: https://hubui.dev/en/board/api/ - overview: https://hubui.dev/en/board/overview/ - styles: https://hubui.dev/en/board/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-board - Latest release: 22.6.2 (2026-09-21) Angular Kanban board component with drag and drop, custom card templates, column workflows and CSS variables for business dashboards. This Angular board component helps you ship Kanban-style workflows with drag and drop, flexible templates and scalable interaction patterns for real business tooling. ng-hub-ui-board is designed for Angular products that need more than a static list: task tracking, CRM pipelines, support workflows or internal operations dashboards. It keeps card rendering flexible while preserving a consistent board interaction model. Key highlights: - Drag and drop workflows: Move cards and columns naturally in Angular interfaces used for planning, operations or CRM processes. - Custom card templates: Render rich cards with actions, badges, metadata and domain-specific layouts. - Built for internal tools: Useful for team boards, delivery pipelines and operational back-office experiences. Common use cases: task boards; pipeline tracking; CRM workflows; operations dashboards. Frequently asked questions: Q: How do I build a Kanban board with drag and drop in Angular? A: Install ng-hub-ui-board and bind a Board object describing its columns and cards. Dragging cards between columns and reordering columns works without extra wiring; the drag events return the moved BoardCard along with its source and target BoardColumn, so you persist the change in your own store or API. Q: Can I customise how each Kanban card looks? A: Yes. ng-hub-ui-board renders cards through templates you provide, so a card can contain any markup — avatars, tags, progress, actions. HubBoardColumnHeaderDirective and HubBoardColumnFooterDirective do the same for the top and bottom of each column, leaving the drag-and-drop behaviour untouched. Q: How do I know which column a card was moved to? A: The board emits a BoardDragDropEvent on every drop. It carries the dragged item, the column it came from and the column it landed in, plus the new index. That is the payload you send to your backend; the board does not persist anything by itself. Q: Does the Angular Kanban board work on touch devices? A: Yes. Dragging is built on the Angular CDK drag-and-drop primitives, which handle mouse, touch and pen input, so the board behaves the same on tablets and phones as on desktop. What changed in 22.6.2 (2026-09-21): - **The README says what the board is before it warns about anything.** The page opened on the ## ng-hub-ui-breadcrumbs — Angular Breadcrumbs Component - api: https://hubui.dev/en/breadcrumbs/api/ - overview: https://hubui.dev/en/breadcrumbs/overview/ - styles: https://hubui.dev/en/breadcrumbs/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-breadcrumbs - Latest release: 22.9.0 (2026-09-21) Angular breadcrumbs component with router integration, custom templates, RTL support and flexible styling tokens. Use these Angular breadcrumbs when route context matters and you need a navigation aid that works with the Angular Router, templates and structured navigation paths. ng-hub-ui-breadcrumbs gives Angular applications a route-aware breadcrumb component for admin panels, documentation sites and multi-level products. It is useful when navigation depth grows and users need more orientation than a back button can provide. Key highlights: - Angular Router aware: Generate breadcrumb trails from route structure without maintaining manual labels on every page. - Custom rendering: Replace separators and item templates to match product navigation patterns and brand styles. - Works in complex layouts: Helpful for back offices, knowledge bases and nested application shells. Common use cases: documentation sites; admin panels; multi-level apps; route-aware navigation. Frequently asked questions: Q: How do I add breadcrumbs to an Angular application? A: Put in the layout and add data: { breadcrumb: 'Products' } to the routes that should appear. The component reads the active route tree and builds the trail itself, inside a nav labelled breadcrumb, with aria-current=page on the last crumb. To drive it by hand instead, pass the items input and the router-derived trail steps aside. Q: How do I shorten a long breadcrumb trail? A: maxItems collapses the middle behind a real button, and itemsBeforeCollapse and itemsAfterCollapse decide how many crumbs stay at each end; expanding it emits collapsedClick and moves focus to the first crumb revealed. truncateItems is the other half: it caps each label at --hub-breadcrumb-max-item-width, 12rem by default, and shows the whole text on hover, through ng-hub-ui-utils when you register its tooltip adapter and through the plain title attribute when you do not. Q: How do I change the separator between breadcrumbs? A: Not with an input. The divider is drawn in CSS from --hub-breadcrumb-divider, which defaults to a greater-than sign, and --hub-breadcrumb-divider-flipped covers right-to-left layouts. What a crumb itself looks like is yours through the *hubBreadcrumbItem template, which receives the item and its position, and hubBreadcrumbLabel marks the text that may be truncated. Q: Does it work without the Angular router? A: No. The service injects Router and ActivatedRoute and the crumbs render as routerLink, so a router-less application cannot use the package. Two limits of the automatic trail are worth knowing before you rely on it: only routes that declare data.breadcrumb on their own configuration are picked up, and the walk follows the first child at each level, so sibling and auxiliary outlets are skipped. Pass items yourself when the trail does not match the route tree. What changed in 22.9.0 (2026-09-21): - **A crumb can have no destination.** `url` is optional, and a crumb declaring neither `url` nor - **The declared Angular floor is now 19, which is the one the code can actually run on.** The - **`@angular/router` is declared as a peer dependency.** The service injects `Router` and ## ng-hub-ui-buttons — Angular Button Library - api: https://hubui.dev/en/buttons/api/ - overview: https://hubui.dev/en/buttons/overview/ - styles: https://hubui.dev/en/buttons/styles/ - npm: https://www.npmjs.com/package/ng-hub-ui-buttons - Latest release: 22.12.3 (2026-09-21) Complete Angular 22 button system with signal-based API — standard buttons, FAB, speed dial and overlay dropdown. Zero dependencies beyond ng-hub-ui-utils. Use ng-hub-ui-buttons when you need a unified, themeable button ecosystem that covers every interaction pattern — from inline CTA to floating action overlays — with a single consistent API built on Angular Signals. ng-hub-ui-buttons is a zero-dependency button library for Angular 22+ standalone apps. It ships HubButtonComponent — usable as or as an attribute on a native host (