OpenGlass UI est une bibliothèque de composants React et web moderne, conçue pour implémenter l’esthétique « Liquid Glass » (Verre Liquide) dans les interfaces numériques. Contrairement aux implémentations CSS primitives utilisant un simple backdrop-filter: blur(), OpenGlass UI combine de véritables modèles physiques de réfraction lumineuse, la prise en charge des Signed Distance Fields (SDF), une accélération matérielle via WebGL2 et une accessibilité native conforme au standard WCAG 2.2.
Ce guide couvre l’architecture de la bibliothèque, les principes du rendu à trois niveaux, l’intégration pratique dans Next.js App Router, le système de design tokens ainsi que les règles d’optimisation des performances.
1. Concept du Liquid Glass et capacités d’OpenGlass UI
1.1. Philosophie du verre liquide : combinaison du DOM natif et des effets optiques
Le glassmorphism classique est souvent critiqué pour sa forte charge processeur et sa mauvaise lisibilité du texte. OpenGlass UI résout ce problème grâce à une séparation stricte des couches :
- Structure sémantique : Les 40 composants de la bibliothèque sont construits exclusivement sur des balises HTML natives (
<button>,<input>,<dialog>), préservant la navigation au clavier et la compatibilité avec les lecteurs d’écran. - Matériaux optiques : La couche de matériau visuel s’adapte au fond sous-jacent grâce à un contraste adaptatif, une teinte, des biseautages (bevel) et des reflets.
- Hiérarchie de dégradation (Graceful Degradation) : Si l’appareil ne prend pas en charge les calculs matériels ou si l’utilisateur a activé le mode réduction de transparence dans son système, la bibliothèque bascule discrètement vers des matériaux CSS opaques sans altérer la mise en page.
1.2. Matrice comparative des trois moteurs de rendu : CSS, réfraction SVG et WebGL2
OpenGlass UI propose trois pipelines graphiques complémentaires selon la complexité de la surface :
| Moteur de rendu | Capacités optiques | Charge GPU | Compatibilité navigateur | Cas d’usage optimal |
|---|---|---|---|---|
| CSS (Auto) | Teinte, flou, bordures, ombres | Minimale | 99,8 % (Toutes plateformes modernes) | Boutons, champs de formulaire, cartes, navigation, listes |
| SDF / SVG | Réfraction lumineuse le long du contour (IOR) | Modérée | Tous navigateurs supportant les filtres SVG | Fenêtres modales, panneaux Dock flottants, onglets |
| WebGL2 | Dispersion chromatique réaliste, lentilles | Élevée | Support WebGL2 requis | Lecteurs multimédias, lentilles interactives sur 3D/vidéo |
2. Architecture des paquets et installation
2.1. Structure modulaire : façade open-glass-ui et paquets internes
La façade publique open-glass-ui regroupe quatre paquets internes workspace, délimitant clairement les responsabilités des composants :
L’importation directe de composants depuis les paquets internes (par exemple, @open-glass-ui/core ou @open-glass-ui/recipes) est strictement interdite. Utilisez uniquement les sous-chemins publics de la façade :
open-glass-ui— Composants React principaux, providers et hooks.open-glass-ui/webgl— Sous-système des surfaces matérielles WebGL2.open-glass-ui/core— Utilitaires purs de mathématiques thématiques, calcul de contraste et couleur pour les composants serveur.
2.2. Installation des dépendances et configuration de base des styles
Installez la bibliothèque à l’aide du gestionnaire de paquets de votre choix :
Importez les styles globaux au point d’entrée de votre application (par exemple, dans src/app/layout.tsx ou src/main.tsx) :
3. Configuration du système de thèmes : palettes, contraste et tokens CSS
3.1. Gestion des thèmes : presets, modes d’apparence et rayons d’arrondi
Le thème dans OpenGlass UI repose sur trois dimensions interdépendantes :
- Apparence (Appearance) : Accepte les valeurs
light,darkousystem. Avec la valeursystem, le serveur renvoie undefaultAppearancesûr, tandis que le client récupère la media queryprefers-color-scheme. - Palette de couleurs (Presets) : Des schémas pré-calibrés sont disponibles (
neutral,cobalt,teal,violet,coral,amber) ou des valeurs personnalisées via les paramètresaccent,secondary,tertiary. - Rayon d’arrondi (Radius) : Variantes
sharp(minimal),balanced(standard, 12–16px) etsoft(organique, 24–28px).
3.2. Matrice des tokens sémantiques --ogui-* et vérification du contraste (WCAG)
Tous les composants sont stylisés via des variables CSS stables :
💡 Règle de vérification du contraste : Utilisez la fonction exportée
contrastRatio(colorA, colorB)issue deopen-glass-ui/core. Le contraste du texte doit être d’au moins 4.5:1 pour le texte normal et de 3:1 pour les grands titres selon le standard WCAG 2.2 AA.
4. Catalogue de composants : aperçu des 40 recettes sur DOM natif
4.1. Catégories de composants prêts à l’emploi : contrôles, overlays, navigation et formulaires
Le paquet contient 40 composants prêts à l’emploi avec une structure native :
| Catégorie | Composants inclus dans la bibliothèque |
|---|---|
| Éléments d’action et contrôles | Button, IconButton, ToggleButton, SegmentedControl, Switch, Slider, Stepper |
| Navigation et conteneurs | Toolbar, Dock, Tabs, Breadcrumbs, Pagination, Menu, MenuItem |
| Overlays et fenêtres surgissantes | Dialog, Drawer, Popover, Tooltip, Toast, Alert, Banner |
| Formulaires et saisie de données | TextField, Textarea, NumberField, SearchField, Select, Checkbox, RadioGroup, FileDropzone |
| Affichage d’informations | Card, Stat, Badge, Avatar, AvatarGroup, Accordion, Progress, Meter, Spinner, Skeleton, MediaControls |
4.2. Standards d’accessibilité (a11y) : étiquettes ARIA, gestion du focus et des états
Lors de l’utilisation des composants OpenGlass UI, respectez impérativement les règles d’accessibilité :
aria-labelobligatoire pour les icônes :IconButtonetSegmentedControlexigent une description textuelle explicite pour les lecteurs d’écran.- Retour du focus dans les dialogues : Dans
DialogetDrawer, le focus revient automatiquement à l’élément déclencheur lors de la fermeture. - Double codage des états : N’indiquez pas un état sélectionné, d’erreur ou désactivé uniquement par la transparence ou la couleur. Accompagnez toujours cela d’un changement d’icône ou d’un badge textuel.
5. Travail avec les moteurs de rendu : du CSS de base au WebGL2 optionnel
5.1. Réfraction SVG/SDF déclarative pour les formes géométriques fermées
Pour les cartes flottantes ou les panneaux de contrôle, vous pouvez activer une véritable réfraction lumineuse à l’aide des Signed Distance Fields (SDF) :
5.2. Lentilles optiques matérielles en WebGL2 sur vidéo et canvas
Si la page affiche une vidéo, des graphismes interactifs ou une scène 3D, le module open-glass-ui/webgl permet de superposer une lentille matérielle avec un indice de réfraction physique (IOR) :
6. Intégration dans Next.js App Router et rendu côté serveur (SSR)
6.1. Hydratation sans conflits : isolation des limites client et utilitaires core
OpenGlass UI est conçue en tenant compte du rendu serveur moderne. Le serveur ne tente jamais d’accéder à window, document ou au contexte WebGL.
Créez le provider racine dans un composant client :
Et importez les fonctions pures pour le calcul des couleurs ou des schémas de thème dans les Server Components depuis open-glass-ui/core :
6.2. Éviter les divergences de markup et gérer prefers-color-scheme
Pour prévenir les avertissements d’hydratation (Hydration Mismatch) :
- N’utilisez pas d’opérateurs ternaires dépendant de
window.innerWidthlors du premier rendu. - Utilisez la prop
defaultAppearance="dark"pour stabiliser le HTML initial entre le serveur et le client.
7. Performance et optimisation du pipeline graphique
7.1. Réduction de la charge GPU : limitation du DPR et usage sélectif du verre
L’application massive de couches avec flou d’arrière-plan peut saturer même une carte graphique dédiée. Suivez ces recommandations :
- Limitez le Device Pixel Ratio : Définissez toujours
maxDevicePixelRatio={2}dans les paramètres des surfaces WebGL. Le rendu sur écrans Retina avec un DPR ≥ 3 consomme quatre fois plus de mémoire vidéo sans différence perceptible de qualité. - Application ciblée du matériau : Appliquez le verre uniquement aux couches supérieures de navigation (Header, Dock, Modal). Les listes de contenu standard doivent conserver un fond CSS opaque ou semi-transparent classique.
- Mise à jour de la position du curseur : Pour les effets interactifs de suivi de souris, modifiez les variables CSS ou
transformviaref, en évitant d’appelersetStateà chaque pixel de mouvement.
7.2. Mise en cache des cartes de distance (SDF) et optimisation du redimensionnement (Resize)
La génération de cartes SDF pour les filtres SVG est une opération coûteuse. Le hook useSdfFilter met automatiquement en cache les cartes selon le hash des paramètres géométriques. Lors du redimensionnement de la fenêtre du navigateur, la bibliothèque bascule automatiquement vers une qualité de rendu inférieure, restaurant la netteté maximale uniquement après la fin du resize.
8. Matrice des problèmes courants et questions fréquentes (FAQ)
8.1. Diagnostic des échecs de rendu, chute de contraste et fuites de mémoire
| Symptôme / Erreur | Cause racine | Solution technique |
|---|---|---|
| Effet verre absent (fond blanc/gris) | Fichier de styles styles.css non importé | Ajoutez import "open-glass-ui/styles.css"; à la racine du projet |
| Texte illisible sur photos claires | Matériau clear trop transparent utilisé | Changez la prop pour material="regular" ou material="frosted" afin de créer un fond mat |
| Ralentissement du scroll sur mobile | Nombreuses surfaces imbriquées avec le moteur sdf-svg | Gardez renderer="auto" (CSS) pour les éléments d’interface massifs |
Erreur WebGL context lost | Limite de contextes canvas actifs dépassée | Limitez le nombre de lentilles actives à 6 par source WebGLGlassSurface |
8.2. Réponses aux questions fréquentes des développeurs concernant OpenGlass UI
❓ La bibliothèque est-elle compatible avec Tailwind CSS ?
Oui. OpenGlass UI n’entre pas en conflit avec les utilitaires Tailwind. Vous pouvez combiner en toute sécurité des classes commeclassName="flex items-center gap-4 p-6"avec les propsmaterialetinteractive.
❓ La bibliothèque est-elle prête pour la production ?
Actuellement, la bibliothèque est en statut pre-release. Son architecture et son API publique sont stabilisées, mais il est recommandé de consulter attentivement le Changelog avant les mises à jour mineures.
❓ Comment se comporte l’interface si l’utilisateur a activé le contraste élevé forcé sous Windows ?
La bibliothèque détecte cette préférence système et applique automatiquement des matériaux opaques à fort contraste, garantissant la lisibilité tout en conservant la structure sémantique.