LegbaAudioLevel
expérimentaldepuis 0.1.0@legba-core/ui
Aperçu en direct — vrai composant, pas une image
LegbaAudioLevel
Ce que ça fait
Mètre visuel de niveau audio (<legba-audio-level>, role="meter"). Purement synchrone (pas d’état chargement). level (attendu entre 0 et 1) est toujours clampé silencieusement — hors bornes ou NaN retombent sur une valeur sûre, jamais une exception. active=false (aucune source) reste visuellement distinct d’un niveau à 0 avec source active.
Signature
class LegbaAudioLevel extends LegbaElement {
level: number; // attendu 0–1, clampé sinon
active: boolean;
}
Tag : legba-audio-level.
Paramètres
| Propriété | Type | Requis | Défaut | Description |
|---|---|---|---|---|
level | number | non | 0 | Niveau attendu entre 0 et 1 ; toute autre valeur (hors bornes, NaN) est clampée à une valeur sûre sans erreur |
active | boolean | non | false | false = aucune source (état vide), visuellement distinct d’un niveau à 0 actif |
Retour
N/A — un élément DOM. Aucun événement émis.
Erreurs
Aucune : level invalide (hors bornes, NaN, non numérique) est toujours clampé silencieusement, jamais une exception.
Exemple minimal
import type { LegbaAudioLevel } from "@legba-core/ui";
function showAudioLevel(meter: LegbaAudioLevel, level: number): void {
meter.active = true;
meter.level = level;
}
Exemple complet
import type { LegbaAudioLevel } from "@legba-core/ui";
function wireAudioAnalyser(meter: LegbaAudioLevel, analyser: AnalyserNode): void {
const data = new Uint8Array(analyser.frequencyBinCount);
meter.active = true;
function tick(): void {
analyser.getByteFrequencyData(data);
const average = data.reduce((sum, value) => sum + value, 0) / data.length;
meter.level = average / 255; // hors bornes possible, le composant clampe
window.requestAnimationFrame(tick);
}
window.requestAnimationFrame(tick);
}
Pièges
- Pas d’état “chargement” :
levelest toujours une valeur déjà connue, jamais en cours d’obtention — genuinely pas applicable à ce composant. active=falsen’est pas équivalent àlevel=0: ce sont deux états visuellement distincts (repli hachuré/atténué pouractive=false), une UI d’appel doit poseractiveexplicitement selon qu’une source existe.levelhors bornes ouNaNne lève jamais — vérifier la source du calcul en amont si le mètre semble bloqué à 0, ce n’est pas un bug du composant.- Consomme les jetons
--legba-*comme tout composant@legba-core/ui: ne redéclare jamais un jeton public directement, voirLegbaElement.