DIANA

Diseño Aplicaciones Navarra

Toolbar

Barra de acciones en línea para agrupar botones relacionados con navegación por teclado accesible.

Estado: review

1. Acciones básicas (ghost)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del documento">
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Copiar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Editar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Eliminar</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

2. Variante mixta (ghost + secondary + primary)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del registro">
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Duplicar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Exportar</button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--secondary gn-button--md">Cancelar</button>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Guardar</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

3. Con icono y texto (iconos del sistema)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del archivo">
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M7.975 17.75H16.025V16.25H7.975V17.75ZM7.975 13.5H16.025V12H7.975V13.5ZM4 22V2H14.525L20 7.475V22H4ZM13.775 8.15V3.5H5.5V20.5H18.5V8.15H13.775Z" fill="currentColor"/>
    </svg>
    Copiar
  </button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M2 24V20.975H22V24H2ZM5.5 16.475H6.6L16.375 6.7L15.825 6.15L15.275 5.6L5.5 15.375V16.475ZM4 17.975V14.775L17.4 1.375L20.6 4.575L7.2 17.975H4ZM16.375 6.7L15.825 6.15L15.275 5.6L16.375 6.7Z" fill="currentColor"/>
    </svg>
    Editar
  </button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M5.025 21V5.25H4V3.75H8.7V3H15.3V3.75H20V5.25H18.975V21H5.025ZM6.525 19.5H17.475V5.25H6.525V19.5ZM9.175 17.35H10.675V7.375H9.175V17.35ZM13.325 17.35H14.825V7.375H13.325V17.35Z" fill="currentColor"/>
    </svg>
    Eliminar
  </button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M16.45 7.8V4.5H7.55V7.8H6.05V3H17.95V7.8H16.45ZM18.475 11.675C18.675 11.675 18.85 11.6 19 11.45C19.15 11.3 19.225 11.125 19.225 10.925C19.225 10.725 19.15 10.55 19 10.4C18.85 10.25 18.675 10.175 18.475 10.175C18.275 10.175 18.1 10.25 17.95 10.4C17.8 10.55 17.725 10.725 17.725 10.925C17.725 11.125 17.8 11.3 17.95 11.45C18.1 11.6 18.275 11.675 18.475 11.675ZM16.45 19.5V14.7H7.55V19.5H16.45ZM17.95 21H6.05V16.6H2V7.8H22V16.6H17.95V21ZM20.5 15.1V9.3H3.5V15.1H6.05V13.2H17.95V15.1H20.5Z" fill="currentColor"/>
    </svg>
    Imprimir
  </button>
  <button type="button" class="gn-button gn-button--primary gn-button--md gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M7.975 17.75H16.025V16.25H7.975V17.75ZM7.975 13.5H16.025V12H7.975V13.5ZM4 22V2H14.525L20 7.475V22H4ZM13.775 8.15H18.5L13.775 3.5V8.15Z" fill="currentColor"/>
    </svg>
    Guardar
  </button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

4. Solo iconos (icon-only)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del documento">
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-only" aria-label="Editar">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M2 24V20.975H22V24H2ZM5.5 16.475H6.6L16.375 6.7L15.825 6.15L15.275 5.6L5.5 15.375V16.475ZM4 17.975V14.775L17.4 1.375L20.6 4.575L7.2 17.975H4ZM16.375 6.7L15.825 6.15L15.275 5.6L16.375 6.7Z" fill="currentColor"/>
    </svg>
  </button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-only" aria-label="Imprimir">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M16.45 7.8V4.5H7.55V7.8H6.05V3H17.95V7.8H16.45ZM18.475 11.675C18.675 11.675 18.85 11.6 19 11.45C19.15 11.3 19.225 11.125 19.225 10.925C19.225 10.725 19.15 10.55 19 10.4C18.85 10.25 18.675 10.175 18.475 10.175C18.275 10.175 18.1 10.25 17.95 10.4C17.8 10.55 17.725 10.725 17.725 10.925C17.725 11.125 17.8 11.3 17.95 11.45C18.1 11.6 18.275 11.675 18.475 11.675ZM16.45 19.5V14.7H7.55V19.5H16.45ZM17.95 21H6.05V16.6H2V7.8H22V16.6H17.95V21ZM20.5 15.1V9.3H3.5V15.1H6.05V13.2H17.95V15.1H20.5Z" fill="currentColor"/>
    </svg>
  </button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-only" aria-label="Ver documento">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M5.625 22C4.89583 22 4.27608 21.7447 3.76575 21.2342C3.25525 20.7239 3 20.1042 3 19.375V16H6V2H21V19.375C21 20.1042 20.7449 20.7239 20.2345 21.2342C19.724 21.7447 19.1042 22 18.375 22H5.625ZM18.3727 20.5C18.6909 20.5 18.9583 20.3922 19.175 20.1765C19.3916 19.9608 19.5 19.6936 19.5 19.375V3.5H7.5V16H17.25V19.375C17.25 19.6936 17.3576 19.9608 17.5728 20.1765C17.7879 20.3922 18.0546 20.5 18.3727 20.5ZM9 8V6.5H18V8H9ZM9 11V9.5H18V11H9ZM5.6 20.5H15.75V17.5H4.5V19.375C4.5 19.6936 4.60833 19.9608 4.825 20.1765C5.04165 20.3922 5.3 20.5 5.6 20.5ZM5.6 20.5H4.5H15.75H5.6Z" fill="currentColor"/>
    </svg>
  </button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-only" aria-label="Eliminar">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M5.025 21V5.25H4V3.75H8.7V3H15.3V3.75H20V5.25H18.975V21H5.025ZM6.525 19.5H17.475V5.25H6.525V19.5ZM9.175 17.35H10.675V7.375H9.175V17.35ZM13.325 17.35H14.825V7.375H13.325V17.35Z" fill="currentColor"/>
    </svg>
  </button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

5. Con botón deshabilitado

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del documento (con elemento deshabilitado)">
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Copiar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md" disabled>Editar</button>
  <button type="button" class="gn-button gn-button--secondary gn-button--md">Cancelar</button>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Guardar</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

6. Tamaño SM

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones compactas">
  <button type="button" class="gn-button gn-button--ghost gn-button--sm gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M2 24V20.975H22V24H2ZM5.5 16.475H6.6L16.375 6.7L15.825 6.15L15.275 5.6L5.5 15.375V16.475ZM4 17.975V14.775L17.4 1.375L20.6 4.575L7.2 17.975H4ZM16.375 6.7L15.825 6.15L15.275 5.6L16.375 6.7Z" fill="currentColor"/>
    </svg>
    Editar
  </button>
  <button type="button" class="gn-button gn-button--ghost gn-button--sm gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M5.025 21V5.25H4V3.75H8.7V3H15.3V3.75H20V5.25H18.975V21H5.025ZM6.525 19.5H17.475V5.25H6.525V19.5ZM9.175 17.35H10.675V7.375H9.175V17.35ZM13.325 17.35H14.825V7.375H13.325V17.35Z" fill="currentColor"/>
    </svg>
    Eliminar
  </button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--secondary gn-button--sm">Cancelar</button>
  <button type="button" class="gn-button gn-button--primary gn-button--sm gn-button--icon-left">
    <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
      <path d="M7.975 17.75H16.025V16.25H7.975V17.75ZM7.975 13.5H16.025V12H7.975V13.5ZM4 22V2H14.525L20 7.475V22H4ZM13.775 8.15H18.5L13.775 3.5V8.15Z" fill="currentColor"/>
    </svg>
    Guardar
  </button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

7. Con aria-labelledby (título visible)

Acciones del documento

Mostrar HTML
<div>
  <h2 id="toolbar-doc-label" style="margin: 0 0 12px; font-size: var(--gn-text-p-sm);">Acciones del documento</h2>
  <div class="gn-toolbar" role="toolbar" aria-labelledby="toolbar-doc-label">
    <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
      <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
        <path d="M7.975 17.75H16.025V16.25H7.975V17.75ZM7.975 13.5H16.025V12H7.975V13.5ZM4 22V2H14.525L20 7.475V22H4ZM13.775 8.15V3.5H5.5V20.5H18.5V8.15H13.775Z" fill="currentColor"/>
      </svg>
      Exportar
    </button>
    <button type="button" class="gn-button gn-button--ghost gn-button--md gn-button--icon-left">
      <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
        <path d="M16.45 7.8V4.5H7.55V7.8H6.05V3H17.95V7.8H16.45ZM18.475 11.675C18.675 11.675 18.85 11.6 19 11.45C19.15 11.3 19.225 11.125 19.225 10.925C19.225 10.725 19.15 10.55 19 10.4C18.85 10.25 18.675 10.175 18.475 10.175C18.275 10.175 18.1 10.25 17.95 10.4C17.8 10.55 17.725 10.725 17.725 10.925C17.725 11.125 17.8 11.3 17.95 11.45C18.1 11.6 18.275 11.675 18.475 11.675ZM16.45 19.5V14.7H7.55V19.5H16.45ZM17.95 21H6.05V16.6H2V7.8H22V16.6H17.95V21ZM20.5 15.1V9.3H3.5V15.1H6.05V13.2H17.95V15.1H20.5Z" fill="currentColor"/>
      </svg>
      Imprimir
    </button>
    <button type="button" class="gn-button gn-button--primary gn-button--md gn-button--icon-left">
      <svg class="gn-button__icon" aria-hidden="true" focusable="false" viewBox="0 0 24 24" fill="none">
        <path d="M7.975 17.75H16.025V16.25H7.975V17.75ZM7.975 13.5H16.025V12H7.975V13.5ZM4 22V2H14.525L20 7.475V22H4ZM13.775 8.15H18.5L13.775 3.5V8.15Z" fill="currentColor"/>
      </svg>
      Guardar
    </button>
  </div>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

8. Con dropdown de acciones (Más opciones)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del documento">
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Editar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Imprimir</button>
  <div class="gn-dropdown-menu">
    <button type="button" class="gn-dropdown-menu__trigger gn-dropdown-menu__trigger--ghost" aria-haspopup="menu" aria-expanded="false" id="toolbar-ex8-more">
      <span class="gn-dropdown-menu__trigger-text">Más opciones</span>
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 9.40039L12 15.4004L6 9.40039L7.0752 8.3252L12 13.25L16.9248 8.3252L18 9.40039Z" fill="currentColor"/>
      </svg>
    </button>
    <div class="gn-dropdown-menu__panel" role="menu" aria-labelledby="toolbar-ex8-more">
      <ul class="gn-dropdown-menu__list" role="none">
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Duplicar</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Archivar</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Compartir</button>
        </li>
      </ul>
    </div>
  </div>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Guardar</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

9. Acciones secundarias en dropdown (icon-only "···")

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Acciones del registro">
  <button type="button" class="gn-button gn-button--secondary gn-button--md">Cancelar</button>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Guardar</button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <div class="gn-dropdown-menu">
    <button type="button" class="gn-dropdown-menu__trigger gn-dropdown-menu__trigger--ghost gn-dropdown-menu__trigger--icon-only" aria-haspopup="menu" aria-expanded="false" id="toolbar-ex9-sec" aria-label="Acciones secundarias">
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <circle cx="12" cy="5" r="2" fill="currentColor"/>
        <circle cx="12" cy="12" r="2" fill="currentColor"/>
        <circle cx="12" cy="19" r="2" fill="currentColor"/>
      </svg>
    </button>
    <div class="gn-dropdown-menu__panel" role="menu" aria-labelledby="toolbar-ex9-sec">
      <ul class="gn-dropdown-menu__list" role="none">
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Exportar</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Duplicar</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Archivar</button>
        </li>
      </ul>
    </div>
  </div>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

10. Con dropdown de selección (vista y ordenación)

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Controles de visualización">
  <div class="gn-dropdown-menu gn-dropdown-menu--selector">
    <button type="button" class="gn-dropdown-menu__trigger" aria-haspopup="listbox" aria-expanded="false" aria-controls="toolbar-ex10-view-lb" id="toolbar-ex10-view">
      <span class="gn-dropdown-menu__trigger-text">Vista tabla</span>
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 9.40039L12 15.4004L6 9.40039L7.0752 8.3252L12 13.25L16.9248 8.3252L18 9.40039Z" fill="currentColor"/>
      </svg>
    </button>
    <ul id="toolbar-ex10-view-lb" class="gn-dropdown-menu__panel" role="listbox" aria-labelledby="toolbar-ex10-view">
      <li class="gn-dropdown-menu__option" role="option" aria-selected="true" tabindex="0">Vista tabla</li>
      <li class="gn-dropdown-menu__option" role="option" aria-selected="false" tabindex="-1">Vista lista</li>
      <li class="gn-dropdown-menu__option" role="option" aria-selected="false" tabindex="-1">Vista tarjetas</li>
    </ul>
  </div>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <div class="gn-dropdown-menu gn-dropdown-menu--filters">
    <button type="button" class="gn-dropdown-menu__trigger gn-dropdown-menu__trigger--ghost" aria-haspopup="true" aria-expanded="false" id="toolbar-ex10-sort">
      <span class="gn-dropdown-menu__trigger-text">Ordenar por</span>
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 9.40039L12 15.4004L6 9.40039L7.0752 8.3252L12 13.25L16.9248 8.3252L18 9.40039Z" fill="currentColor"/>
      </svg>
    </button>
    <div class="gn-dropdown-menu__panel" role="group" aria-label="Opciones de ordenación">
      <ul class="gn-dropdown-menu__list">
        <li class="gn-dropdown-menu__item">
          <button type="button" class="gn-dropdown-menu__filter-option gn-dropdown-menu__filter-option--checked" aria-pressed="true">Nombre</button>
        </li>
        <li class="gn-dropdown-menu__item">
          <button type="button" class="gn-dropdown-menu__filter-option" aria-pressed="false">Fecha</button>
        </li>
        <li class="gn-dropdown-menu__item">
          <button type="button" class="gn-dropdown-menu__filter-option" aria-pressed="false">Estado</button>
        </li>
      </ul>
    </div>
  </div>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Nueva entrada</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});

11. Completa: grupos de botones, dropdown de acciones y selector

Mostrar HTML
<div class="gn-toolbar" role="toolbar" aria-label="Barra de herramientas principal">
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Copiar</button>
  <button type="button" class="gn-button gn-button--ghost gn-button--md">Editar</button>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <div class="gn-dropdown-menu gn-dropdown-menu--selector">
    <button type="button" class="gn-dropdown-menu__trigger" aria-haspopup="listbox" aria-expanded="false" aria-controls="toolbar-ex11-view-lb" id="toolbar-ex11-view">
      <span class="gn-dropdown-menu__trigger-text">Vista tabla</span>
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 9.40039L12 15.4004L6 9.40039L7.0752 8.3252L12 13.25L16.9248 8.3252L18 9.40039Z" fill="currentColor"/>
      </svg>
    </button>
    <ul id="toolbar-ex11-view-lb" class="gn-dropdown-menu__panel" role="listbox" aria-labelledby="toolbar-ex11-view">
      <li class="gn-dropdown-menu__option" role="option" aria-selected="true" tabindex="0">Vista tabla</li>
      <li class="gn-dropdown-menu__option" role="option" aria-selected="false" tabindex="-1">Vista lista</li>
    </ul>
  </div>
  <div class="gn-dropdown-menu">
    <button type="button" class="gn-dropdown-menu__trigger gn-dropdown-menu__trigger--ghost" aria-haspopup="menu" aria-expanded="false" id="toolbar-ex11-more">
      <span class="gn-dropdown-menu__trigger-text">Más opciones</span>
      <svg focusable="false" class="gn-dropdown-menu__trigger-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
        <path d="M18 9.40039L12 15.4004L6 9.40039L7.0752 8.3252L12 13.25L16.9248 8.3252L18 9.40039Z" fill="currentColor"/>
      </svg>
    </button>
    <div class="gn-dropdown-menu__panel" role="menu" aria-labelledby="toolbar-ex11-more">
      <ul class="gn-dropdown-menu__list" role="none">
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Exportar</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Imprimir</button>
        </li>
        <li class="gn-dropdown-menu__item" role="none">
          <button type="button" class="gn-dropdown-menu__action" role="menuitem">Archivar</button>
        </li>
      </ul>
    </div>
  </div>
  <span class="gn-toolbar__divider" aria-hidden="true"></span>
  <button type="button" class="gn-button gn-button--secondary gn-button--md">Cancelar</button>
  <button type="button" class="gn-button gn-button--primary gn-button--md">Guardar</button>
</div>
Mostrar JS
document.addEventListener('DOMContentLoaded', () => {
  window.GNDS.initToolbars();
});