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.)
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 :
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.
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.
`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>
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.
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.
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.
Nombre de caractères restants déclenchant l'état warning.
TypenumberDéfaut20
4 sur 4
labelreflète
Texte affiché après le chiffre. Accepte "singulier|pluriel". Traduit automatiquement selon
`lang` si non personnalisé.
Typestring | undefinedDéfautundefined
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).
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é.
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 ».