npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

a11y-dropdown-component

v1.2.0

Published

Accessible Dropdown Component in Vanilla JS

Downloads

15,250

Readme


Introduction

a11y-dropdown-component est une librairie écrite en JavaScript natif permettant de configurer facilement des menus déroulants accessibles.

Cette librairie respecte l'ensemble des critères d'accessibilité définis par WAI-ARIA tout en étant très légère (1.1 Ko minifiée et gzippée) et simple à configurer.

Fonctionnalités

  • Presser la touche Enter ou Space sur le bouton d'appel d'un menu replié, déplie le menu déroulant.
  • Presser la touche Enter ou Space sur le bouton d'appel d'un menu déplié, ferme le menu déroulant.
  • Presser la touche Escape, ferme le menu déroulant et déplace le focus clavier sur le bouton d'appel. (Un clic en dehors du menu déroulant, ferme également celui-ci).
  • Presser la touche Up Arrow sur le bouton d'appel ou sur un élément du menu, déplace le focus clavier sur l'élément précédent s'il existe, sinon sur le dernier élément du menu déroulant.
  • Presser la touche Down Arrow sur le bouton d'appel ou sur un élément du menu, déplace le focus clavier sur l'élément suivant s'il existe, sinon sur le premier élément du menu déroulant.
  • Presser la touche Home sur le bouton d'appel ou sur un élément du menu, déplace le focus clavier sur le premier élément du menu déroulant.
  • Presser la touche End sur le bouton d'appel ou sur un élément du menu, déplace le focus clavier sur le dernier élément du menu déroulant.

Installation

  • via npm : npm install a11y-dropdown-component
  • via yarn : yarn add a11y-dropdown-component
  • via jsDelivr : <script src="https://cdn.jsdelivr.net/npm/a11y-dropdown-component/dist/a11y-dropdown-component.min.js"></script>

Utilisation

1. Structure HTML du bouton d'appel

L'attribut de données data-component="dropdown" permet d'instancier un nouveau menu déroulant :

<button type="button" id="trigger" data-component="dropdown" data-target="dropdown-menu">...</button>

Attributs obligatoires :

  • id="trigger-ID" : Identifie le bouton d'appel.
  • data-target="dropdown-ID" : Associe le bouton d'appel à son menu déroulant.

Attribut facultatif :

  • data-open="true" : Ouvre le menu déroulant lors de son initialisation.
    Cet attribut de données générera l'attribut ARIA aria-expanded="true"

2. Structure HTML du menu déroulant

La librairie génère à la volée les attributs nécessaires afin de répondre aux critères d'accessibilité définis par WAI-ARIA.

Structure initiale :

<ul id="dropdown-menu" class="c-dropdown__menu">
  <li data-item><a href="#">Link 1</a></li>
  <li data-item><a href="#">Link 2</a></li>
  <li data-item><a href="#">Link 3</a></li>
</ul>

Structure finale (après le chargement du script) :

<ul id="dropdown-menu" class="c-dropdown__menu" role="menu" aria-labelledby="trigger" tabindex="-1">
  <li data-item role="none"><a href="#" role="menuitem" tabindex="-1">Link 1</a></li>
  <li data-item role="none"><a href="#" role="menuitem" tabindex="-1">Link 2</a></li>
  <li data-item role="none"><a href="#" role="menuitem" tabindex="-1">Link 3</a></li>
</ul>

3. Ajout de la librairie JavaScript

Vous pouvez importer directement a11y-dropdown-component dans votre projet JavaScript en utilisant une syntaxe ES6 (ES2015) ou CommonJS :

import Dropdowns from 'a11y-dropdown-component'; // es6 module
const Dropdowns = require('a11y-dropdown-component').default; // commonjs module

4. Instanciation JavaScript

L'instanciation de tous les menus déroulants possédant l'attribut de données data-component="dropdown" se fait simplement par la méthode init() :

Dropdowns.init();

5. Événements JavaScript

En cas de besoin, vous pouvez déclencher le rendu d'un ou plusieurs menus déroulants directement en JavaScript grâce à la méthode render('trigger-ID') :

Dropdowns.render('trigger-js');

Paramètre facultatif :

  • isOpen: true : Déclenche l'ouverture du menu déroulant.
Dropdowns.render('trigger-js', {
  isOpen: true,
});

Suppression d'un menu déroulant instancié :

Vous pouvez supprimer le rendu d'un ou plusieurs menus déroulants grâce à la méthode destroy('trigger-ID') :

Dropdowns.destroy('trigger-js');

6. Styles CSS

a11y-dropdown-component a fait le choix de ne pas embarquer de styles CSS par défaut.
Vous êtes donc libres d'utiliser les styles que vous souhaitez !

Néanmoins, nous recommandons au minimum ce style nécessaire à l'ouverture et à la fermeture d'un menu déroulant :

.c-dropdown__menu[aria-hidden="true"] {
  display: none;
}

Si vous désirez utiliser des styles CSS par défaut, vous pouvez consulter le fichier main.css de la démo disponible ici

Contribution

Si vous désirez contribuer à ce projet, rien de plus simple, suivez ces quelques étapes ! :kissing_closed_eyes:
a11y-dropdown-component suit les standards de développement JavaScript ES2015.

Environnement de développement

  1. Clonez le dépôt GitHub : $git clone https://github.com/jonathanlevaillant/a11y-dropdown-component.git
  2. Installez le gestionnaire de packages yarn
  3. Installez les dépendances de développement : yarn start
  4. Lancez le projet (watch) : yarn dev
  5. Créez une pull-request :ok_hand:

D'autres librairies accessibles ?

Créateur

Jonathan Levaillant

Licence

Ce projet est sous licence MIT.