Sur cette page

Accessibilité

#Lien direct vers cette section

Pris en charge automatiquement

#Lien direct vers cette section

ar-charcounter gère les annonces et états sémantiques sans intervention de votre part :

  • Le composant ajoute automatiquement son id à l’attribut aria-describedby du champ observé — et le retire au disconnectedCallback. Si le composant ne possède pas d’id, un identifiant unique est généré. Les ids déjà présents sur le champ sont préservés.
  • Une région aria-live="polite" annonce le passage en état warning avec le nombre de caractères restants et le label pluralisé — par exemple “1 caractère restant” ou “12 caractères restants”.
  • Une région aria-live="assertive" annonce le dépassement avec son ampleur dès que l’état error est atteint — par exemple “Limite dépassée de 1 caractère” ou “Limite dépassée de 3 caractères”.
  • Les régions aria-live sont vidées au retour à l’état normal (ou lors de la transition error → warning), ce qui garantit la ré-annonce si l’utilisateur repasse dans le même état.
  • L’attribut data-ar-char-state ("warning" ou "error") est posé sur le champ observé et sur ses <label> liés — retiré automatiquement au retour à l’état normal. Il vous permet de styler le champ en réponse à l’état sans JavaScript supplémentaire.

Les critères WCAG suivants sont implémentés :

  • le compteur est lié programmatiquement au champ via aria-describedby géré automatiquement (WCAG 1.3.1 (ouvre dans un nouvel onglet)Info and Relationships : le compteur lié via aria-describedby est disponible programmatiquement pour les technologies d'assistance.)
  • les régions aria-live annoncent le passage en avertissement et le dépassement de limite sans déplacer le focus (WCAG 4.1.3 (ouvre dans un nouvel onglet)Status Messages : les régions aria-live annoncent warning et error sans déplacer le focus.)

À votre charge

#Lien direct vers cette section
  • ar-charcounter ne pose pas aria-invalid sur le champ. Ce comportement est laissé à votre charge car l’invalidité sémantique doit généralement être déclenchée à des moments précis — au blur ou à la soumission du formulaire — et non en temps réel. Pour signaler l’erreur à la soumission :
form.addEventListener('submit', (e) => {
    if (textarea.value.length > max) {
        e.preventDefault();
        textarea.setAttribute('aria-invalid', 'true');
    }
});
  • L’état warning et error ne doivent pas être communiqués uniquement par la couleur (WCAG 1.4.1 (ouvre dans un nouvel onglet)Use of Color : la couleur n'est pas utilisée comme le seul moyen de transmettre de l'information.) : les slots warning-icon et error-icon permettent d’insérer un signal visuel supplémentaire. Les icônes doivent porter aria-hidden="true" pour éviter un doublon d’annonce — l’information est déjà transmise par aria-live.

Exemples

#Lien direct vers cette section

Les exemples de cette page sont affichés avec le thème neutre du starter-kit.

Par défaut

#Lien direct vers cette section

Compteur lié à un champ texte via `for`. Affiche le nombre de caractères restants. Passe en état `warning` quand il reste ≤ 20 % de la limite (seuil par défaut), puis en état `error` quand la limite est dépassée.

Voir le code
<div class="ar-field-group" style="max-width:400px;">
    <label class="ar-label" for="cc-default">Message</label>
    <textarea class="ar-input" id="cc-default" rows="3"></textarea>
    <ar-charcounter id="cc-default-counter" for="cc-default" max="100"></ar-charcounter>
</div>

Seuil d'avertissement personnalisé

#Lien direct vers cette section

`warn-threshold="15"` déclenche l'état `warning` quand il reste ≤ 15 caractères. La zone de texte est pré-remplie pour illustrer l'état d'avertissement (45 caractères sur 60).

Voir le code
<div class="ar-field-group" style="max-width:400px;">
    <label class="ar-label" for="cc-warn">Description</label>
    <textarea class="ar-input" id="cc-warn" rows="3">Voici un exemple de texte assez long pour déclencher</textarea>
    <ar-charcounter id="cc-warn-counter" for="cc-warn" max="60" warn-threshold="15"></ar-charcounter>
</div>

Icônes dans les slots

#Lien direct vers cette section

Les slots `warning-icon` et `error-icon` permettent d'ajouter un signal non-couleur conforme WCAG 1.4.1. Le contenu du slot est rendu à côté du compteur dans l'état correspondant.

Voir le code
<div class="ar-field-group" style="max-width:400px;">
    <label class="ar-label" for="cc-icon">Commentaire</label>
    <textarea class="ar-input" id="cc-icon" rows="3"></textarea>
    <ar-charcounter id="cc-icon-counter" for="cc-icon" max="80">
        <span slot="warning-icon" aria-hidden="true">⚠️</span>
        <span slot="error-icon" aria-hidden="true">❌</span>
    </ar-charcounter>
</div>

Label personnalisé

#Lien direct vers cette section

La prop `label` accepte la syntaxe `"singulier|pluriel"` — le composant choisit automatiquement la forme selon le nombre de caractères restants. Le même label est utilisé dans les annonces `aria-live` : l'annonce de passage en avertissement dit par exemple _"1 caractère restant"_ ou _"12 caractères restants"_. Sans pipe, le label est utilisé tel quel, quel que soit le nombre.

Voir le code
<div class="ar-field-group" style="max-width:400px;">
    <label class="ar-label" for="cc-label">Bio</label>
    <textarea class="ar-input" id="cc-label" rows="3"></textarea>
    <ar-charcounter id="cc-label-counter" for="cc-label" max="150" label="character remaining|characters remaining"></ar-charcounter>
</div>

Démo interactive

#Lien direct vers cette section

Manipulez les attributs pour voir le code et la preview se mettre à jour.

<div class="ar-field-group" style="max-width:400px;">
    <label class="ar-label" for="pg-cc-default">Message</label>
    <textarea class="ar-input" id="pg-cc-default" rows="3"></textarea>
    <ar-charcounter id="pg-cc-default-counter" for="pg-cc-default" max="100"></ar-charcounter>
</div>

Référence API

#Lien direct vers cette section

Import

#Lien direct vers cette section

Si vous utilisez l'autoloader, les composants détectés dans la pages sont chargés automatiquement, donc pas besoin de les importer individuellement.
Pour un import manuel, voici comment vous y prendre.

CDNnpm

Importez ce composant depuis le CDN.

<script type="module" src="https://unpkg.com/@ariane-ui/core/dist/components/charcounter/index.js"></script>

Après avoir installé le paquet via npm, vous pouvez importer le composant ainsi :

import '@ariane-ui/core/dist/components/charcounter/index.js';

Configuration

#Lien direct vers cette section
Attributs et propriétés 4Slots 2Méthodes 1

Attributs et propriétés

1 sur 4
htmlForreflètefor

ID du champ observé. Requis.

Type string | undefined

2 sur 4
maxreflète

Limite de caractères. Requis.

Type number | undefined

3 sur 4
warnThresholdreflètewarn-threshold

Nombre de caractères restants déclenchant l'état warning.

Type numberDéfaut 20

4 sur 4
labelreflète

Texte affiché après le chiffre. Accepte "singulier|pluriel". Traduit automatiquement selon `lang` si non personnalisé.

Type string | undefinedDéfaut undefined

Slots

1 sur 2warning-icon

Icône affichée en état warning.

2 sur 2error-icon

Icône affichée en état error.

Méthodes

1 sur 1
refresh()retour : void

Relit le champ observé et met à jour le décompte. Rarement utile : le compteur suit déjà la saisie, `value` et `form.reset()`. À appeler après un texte inséré par `setRangeText()`, ou si un framework remplace l'élément du champ (même `id`, nouvel élément).

Personnalisation

#Lien direct vers cette section
CSS Parts 6CSS Custom States 2CSS Custom Properties 2

CSS Parts

Utilisez ::part(name) pour styler ces éléments depuis l'extérieur.
Certaines parts indiquent un rôle transverse, partagé avec d'autres composants — voir Personnalisation avancée.
Certaines parts portent un modificateur d'état (--) — voir Personnalisation avancée.

1 sur 6charcounter

Racine du composant.

2 sur 6count

Le bloc chiffre + label.

3 sur 6count--warning

Le bloc chiffre + label en état warning (variante d'état de `count`).

4 sur 6count--error

Le bloc chiffre + label en état error (variante d'état de `count`).

5 sur 6remaining

Le chiffre des caractères restants.

6 sur 6label

Le texte après le chiffre (ex: "restants").

CSS Custom States

Utilisez le sélecteur :state(name) sur le tag pour styler ce composant en fonction de son état.
Composable avec ::part() pour cibler un élément interne (ar-charcounter:state(name)::part(x)).
Sous Chrome et Edge 125, l'état est exposé avec le préfixe -- (:--name) : voir Compatibilité.

1 sur 2:state(warning)

Le nombre de caractères restants approche la limite.

2 sur 2:state(error)

La limite de caractères est dépassée.

CSS Custom Properties

1 sur 2--ar-charcounter-warning-weight

Graisse du texte en état warning. Repli `700` si aucun thème n'est chargé — seul signal garanti d'état en l'absence des slots d'icône.

2 sur 2--ar-charcounter-error-weight

Graisse du texte en état error. Repli `700` si aucun thème n'est chargé.

Traduction

#Lien direct vers cette section

La langue de ce composant suit l'attribut lang de la page (<html lang>).
Vous pouvez appliquer une langue différente à une instance donnée en posant l'attribut lang directement dessus.
Voir la page Traductions pour le détail du mécanisme et la liste des traductions disponibles.

lang étant un attribut HTML natif, il n'apparaît pas dans le tableau « Attributs & Propriétés ».