Componente

Sidebar

Uma casca completa de sidebar de aplicação. Envolva uma sidebar e a área principal num layout, monte a navegação com header, grupos, menus e submenus colapsáveis, colapse para ícones ou off-canvas, escolha um lado e variante, e alterne de qualquer lugar com um gatilho.

Casca de aplicação

Herbst
PhotosPhotosForestsAlerts
Signed in as A. Herbst
Photos
Toggle collapses the sidebar to an icon rail.
import { ChangeDetectionStrategy, Component } from '@angular/core';

import { HbButtonComponent, HbSidebarImports } from '@herbst/ui';
import { NgIcon, provideIcons } from '@ng-icons/core';
import { phosphorBell, phosphorLeaf, phosphorTag } from '@ng-icons/phosphor-icons/regular';

@Component({
  selector: 'hb-demo-sidebar-basic',
  imports: [HbSidebarImports, HbButtonComponent, NgIcon],
  viewProviders: [provideIcons({ phosphorLeaf, phosphorTag, phosphorBell })],
  template: `
    <hb-sidebar-layout class="h-[28rem] w-full overflow-hidden rounded-md border border-border">
      <hb-sidebar hbId="docs-basic" hbCollapsible="icon">
        <hb-sidebar-header>
          <div class="flex items-center gap-2 px-1 py-1.5">
            <ng-icon name="phosphorLeaf" class="text-primary [&>svg]:size-5" />
            <span class="font-medium group-data-[collapsed]/sb:hidden">Herbst</span>
          </div>
        </hb-sidebar-header>

        <hb-sidebar-content>
          <hb-sidebar-group>
            <hb-sidebar-group-label>Photos</hb-sidebar-group-label>
            <hb-sidebar-group-content>
              <hb-sidebar-menu>
                <hb-sidebar-menu-item>
                  <a
                    hbSidebarMenuButton
                    href="#"
                    [hbActive]="true"
                    (click)="$event.preventDefault()"
                  >
                    <ng-icon name="phosphorLeaf" />
                    <span>Photos</span>
                  </a>
                </hb-sidebar-menu-item>
                <hb-sidebar-menu-item>
                  <a hbSidebarMenuButton href="#" (click)="$event.preventDefault()">
                    <ng-icon name="phosphorTag" />
                    <span>Forests</span>
                  </a>
                </hb-sidebar-menu-item>
                <hb-sidebar-menu-item>
                  <a hbSidebarMenuButton href="#" (click)="$event.preventDefault()">
                    <ng-icon name="phosphorBell" />
                    <span>Alerts</span>
                  </a>
                </hb-sidebar-menu-item>
              </hb-sidebar-menu>
            </hb-sidebar-group-content>
          </hb-sidebar-group>
        </hb-sidebar-content>

        <hb-sidebar-footer>
          <div class="px-1 text-xs text-muted-foreground group-data-[collapsed]/sb:hidden">
            Signed in as A. Herbst
          </div>
        </hb-sidebar-footer>
      </hb-sidebar>

      <hb-sidebar-main>
        <div class="flex items-center gap-2 border-b border-border p-3">
          <button hbSidebarTrigger target="docs-basic" hb-button hbType="outline" hbSize="sm">
            Toggle
          </button>
          <span class="text-sm font-medium">Photos</span>
        </div>
        <div class="p-4 text-sm text-muted-foreground">
          Toggle collapses the sidebar to an icon rail.
        </div>
      </hb-sidebar-main>
    </hb-sidebar-layout>
  `,
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class HbDemoSidebarBasicComponent {}

Submenus colapsáveis

Expand the parent items to reveal their sub-menus.

Flutuante, direita e off-canvas

A floating sidebar on the right that slides off-canvas when closed.

Referência de API

hb-sidebar

PropriedadeDescriçãoTipoPadrão
[(hbOpen)] / [hbId] O estado aberto (bidirecional), e um id que o hbSidebarTrigger mira para alternar esta sidebar. boolean / string true / auto
[hbSide] / [hbVariant] A qual borda ancora, e sua aparência. 'left' | 'right' / 'sidebar' | 'floating' | 'inset' 'left' / 'sidebar'
[hbCollapsible] Como colapsa: para um rail de ícones, totalmente off-canvas, ou não colapsa. 'icon' | 'offcanvas' | 'none' 'icon'
[hbWidth] / [hbIconWidth] Largura expandida, e a largura do rail de ícones quando colapsada. string '16rem' / '3rem'
[hbOverlay] / [hbDismissable] / [hbHideOnOutsideClick] Flutua sobre o conteúdo com backdrop (também automático no mobile), fecha no backdrop, e fecha ao clicar fora. boolean false / true / true
[hbOpenOnHover] / [hbHoverOpenDelay] / [hbHoverCloseDelay] Expande uma sidebar colapsada no hover, com atrasos de abrir/fechar em milissegundos. boolean / number false / 50 / 100
(hbOnOpenChange) Emite { value, originalEvent } sempre que o estado aberto muda. HbSidebarOpenChangeEvent

Structure

PropriedadeDescriçãoTipoPadrão
hb-sidebar-layout / hb-sidebar-main A casca flex que envolve a(s) sidebar(s), e a área de conteúdo principal ao lado. component
hb-sidebar-header / -content / -footer As regiões superior, meio rolável e inferior da sidebar. component
hb-sidebar-group / -group-label / -group-content Uma seção titulada da navegação. component
hb-sidebar-menu / -menu-item Uma lista de menu e seus itens. Um item aceita [hbCollapsible], [(hbOpen)], [hbDefaultOpen], [hbDisabled] para hospedar um submenu. component
[hbSidebarMenuButton] / [hbSidebarMenuSubButton] O link clicável dentro de um item (hbActive marca a página atual) e dentro de um subitem. directive
[hbSidebarTrigger] / [hbSidebarRail] Um botão que alterna uma sidebar pelo id target, e um rail de borda que alterna no clique. directive