OpenGlass UI to nowoczesna biblioteka komponentów React i webowych, stworzona w celu implementacji estetyki „płynnego szkła” (Liquid Glass) w interfejsach cyfrowych. W odróżnieniu od prymitywnych implementacji CSS opartych na prostym backdrop-filter: blur(), OpenGlass UI łączy prawdziwe fizyczne modele refrakcji światła, obsługę pól odległości znakowanej (SDF, Signed Distance Fields), akcelerację sprzętową przez WebGL2 oraz natywną dostępność zgodną ze standardem WCAG 2.2.
Niniejszy przewodnik obejmuje architekturę biblioteki, zasady trójpoziomowego renderingu, praktyczną integrację z Next.js App Router, system tokenów designu oraz reguły optymalizacji wydajności.
1. Koncepcja Liquid Glass i możliwości OpenGlass UI
1.1. Filozofia płynnego szkła: połączenie natywnego DOM i efektów optycznych
Klasyczny glassmorphism jest często krytykowany za wysokie obciążenie procesora i słabą czytelność tekstu. OpenGlass UI rozwiązuje ten problem dzięki ścisłemu rozdzieleniu warstw:
- Szkielet semantyczny: Wszystkie 40 komponentów biblioteki zostało zbudowanych wyłącznie na natywnych tagach HTML (
<button>,<input>,<dialog>), co zapewnia zachowanie nawigacji klawiaturowej oraz wsparcie dla czytników ekranu. - Materiały optyczne: Warstwa materiału wizualnego dostosowuje się do tła przy użyciu adaptacyjnego kontrastu, tonowania, fazek (bevel) i odbić.
- Hierarchia degradacji (Graceful Degradation): Jeśli urządzenie nie obsługuje obliczeń sprzętowych lub użytkownik włączył tryb zmniejszonej przejrzystości w systemie, biblioteka niezauważalnie przełącza się na nieprzezroczyste materiały CSS bez deformacji markupu.
1.2. Macierz porównawcza trzech rendererów: CSS, refrakcja SVG i WebGL2
OpenGlass UI oferuje trzy uzupełniające się potoki graficzne w zależności od złożoności powierzchni:
| Renderer | Możliwości optyczne | Obciążenie GPU | Obsługa przez przeglądarki | Optymalny zakres zastosowań |
|---|---|---|---|---|
| CSS (Auto) | Tonowanie, rozmycie, obramowania, cienie | Minimalne | 99.8% (Wszystkie współczesne platformy) | Przyciski, pola formularzy, karty, nawigacja, listy |
| SDF / SVG | Refrakcja światła wzdłuż konturu figury (IOR) | Umiarkowane | Wszystkie przeglądarki z obsługą filtrów SVG | Okna modalne, pływające panele Dock, zakładki |
| WebGL2 | Realistyczna dyspersja chromatyczna, soczewki | Wysokie | Wymagana obsługa WebGL2 | Odtwarzacze mediów, interaktywne soczewki nad 3D/wideo |
2. Architektura pakietów i instalacja
2.1. Struktura modułowa: fasada open-glass-ui i wewnętrzne pakiety
Publiczna fasada open-glass-ui łączy cztery wewnętrzne pakiety workspace, wyraźnie rozdzielając obowiązki komponentów:
Bezpośrednie importowanie komponentów z pakietów wewnętrznych (np. @open-glass-ui/core lub @open-glass-ui/recipes) jest surowo zabronione. Korzystaj wyłącznie z publicznych podścieżek fasady:
open-glass-ui— główne komponenty React, providery i hooki.open-glass-ui/webgl— podsystem akcelerowanych sprzętowo powierzchni WebGL2.open-glass-ui/core— czyste utility matematyki motywu, kalkulacji kontrastu i kolorów dla komponentów serwerowych.
2.2. Instalacja zależności i podstawowa konfiguracja stylów
Zainstaluj bibliotekę za pomocą wybranego menedżera pakietów:
Podłącz globalne style w punkcie wejścia aplikacji (np. w src/app/layout.tsx lub src/main.tsx):
3. Konfiguracja systemu motywów: palety, kontrast i tokeny CSS
3.1. Zarządzanie motywami: presety, tryby appearance i promienie zaokrąglenia
Motyw w OpenGlass UI opiera się na trzech powiązanych wymiarach:
- Wygląd (Appearance): Przyjmuje wartości
light,darklubsystem. Dla wartościsystemserwer zwraca bezpiecznydefaultAppearance, a po stronie klienta przechwytywane jest zapytanie mediaprefers-color-scheme. - Paleta kolorów (Presets): Dostępne są gotowe, dopracowane schematy (
neutral,cobalt,teal,violet,coral,amber) lub własne wartości poprzez parametryaccent,secondary,tertiary. - Promień zaokrąglenia (Radius): Warianty
sharp(minimalny),balanced(standardowy, 12–16px) orazsoft(organiczny, 24–28px).
3.2. Macierz semantycznych tokenów --ogui-* i weryfikacja kontrastu (WCAG)
Wszystkie komponenty są stylizowane poprzez stabilne zmienne CSS:
💡 Reguła weryfikacji kontrastu: Używaj eksportowanej funkcji
contrastRatio(colorA, colorB)zopen-glass-ui/core. Kontrast tekstu musi wynosić co najmniej 4.5:1 dla zwykłego tekstu oraz 3:1 dla dużych nagłówków zgodnie ze standardem WCAG 2.2 AA.
4. Katalog komponentów: przegląd 40 przepisów na natywnym DOM
4.1. Kategorie gotowych komponentów: kontrolki, nakładki, nawigacja i formularze
Pakiet zawiera 40 gotowych komponentów z natywnym markupiem:
| Kategoria | Komponenty w składzie biblioteki |
|---|---|
| Elementy akcji i kontrolki | Button, IconButton, ToggleButton, SegmentedControl, Switch, Slider, Stepper |
| Nawigacja i kontenery | Toolbar, Dock, Tabs, Breadcrumbs, Pagination, Menu, MenuItem |
| Nakładki i okna wyskakujące | Dialog, Drawer, Popover, Tooltip, Toast, Alert, Banner |
| Formularze i wprowadzanie danych | TextField, Textarea, NumberField, SearchField, Select, Checkbox, RadioGroup, FileDropzone |
| Prezentacja informacji | Card, Stat, Badge, Avatar, AvatarGroup, Accordion, Progress, Meter, Spinner, Skeleton, MediaControls |
4.2. Standardy dostępności (a11y): etykiety ARIA, zarządzanie fokusem i stanami
Przy korzystaniu z komponentów OpenGlass UI należy bezwzględnie przestrzegać zasad dostępności:
- Obowiązkowy
aria-labeldla ikon:IconButtonorazSegmentedControlwymagają jawnego opis tekstowego dla czytników ekranu. - Zwrot fokusu w dialogach: W
DialogiDrawerfokus przy zamknięciu automatycznie wraca do elementu wywołującego. - Podwójne kodowanie stanów: Nie oznaczaj stanu wyboru, błędu ani blokady wyłącznie przez przezroczystość lub kolor. Zawsze towarzyszy temu zmiana ikony lub tekstowa plakietka (badge).
5. Praca z rendererami: od bazowego CSS do opcjonalnego WebGL2
5.1. Deklaratywna refrakcja SVG/SDF dla zamkniętych figur geometrycznych
Dla pływających kart lub paneli sterowania można włączyć prawdziwą refrakcję światła przy użyciu pól odległości znakowanej (SDF):
5.2. Sprzętowe soczewki optyczne w WebGL2 nad wideo i canvas
Jeśli na stronie odtwarzane jest wideo, grafika interaktywna lub scena 3D, moduł open-glass-ui/webgl pozwala nałożyć sprzętową soczewkę z fizycznym wskaźnikiem refrakcji (IOR):
6. Integracja z Next.js App Router i renderingiem po stronie serwera (SSR)
6.1. Hydratacja bez konfliktów: izolacja granic klienckich i utility core
OpenGlass UI została zaprojektowana z myślą o współczesnym renderingu po stronie serwera. Serwer nigdy nie próbuje odwoływać się do window, document ani kontekstu WebGL.
Utwórz provider korzeniowy w komponencie klienckim:
Czyste funkcje do obliczania kolorów lub schematów motywów importuj w Server Components z open-glass-ui/core:
6.2. Unikanie rozbieżności markupu i praca z prefers-color-scheme
Aby zapobiec ostrzeżeniom o niedopasowaniu hydratacji (Hydration Mismatch):
- Nie używaj operatorów ternarnych zależnych od
window.innerWidthpodczas pierwszego renderu. - Używaj propa
defaultAppearance="dark"w celu stabilizacji początkowego HTML między serwerem a klientem.
7. Wydajność i optymalizacja potoku graficznego
7.1. Redukcja obciążenia GPU: ograniczenie DPR i selektywne stosowanie szkła
Masowe nakładanie warstw z rozmyciem tła może przeciążyć nawet dedykowaną kartę graficzną. Przestrzegaj następujących rekomendacji:
- Ogranicz Device Pixel Ratio: Zawsze ustawiaj
maxDevicePixelRatio={2}w konfiguracjach powierzchni WebGL. Rendering na ekranach Retina z DPR 3+ zużywa czterokrotnie więcej pamięci wideo bez zauważalnej różnicy w jakości. - Punktowe nakładanie materiału: Stosuj szkło tylko dla górnych warstw nawigacji (Header, Dock, Modal). Zwykłe listy treści powinny mieć klasyczne nieprzezroczyste lub półprzezroczyste tło CSS.
- Aktualizacja pozycji kursora: Dla interaktywnych efektów śledzenia myszy zmieniaj zmienne CSS lub
transformprzezref, unikając wywoływaniasetStatedla każdego piksela ruchu.
7.2. Cacheowanie map odległości (SDF) i optymalizacja zmiany rozmiaru (Resize)
Generowanie map SDF dla filtrów SVG jest operacją zasobożerną. Hook useSdfFilter automatycznie cacheuje mapy według hasha parametrów geometrycznych. Przy zmianie rozmiaru okna przeglądarki biblioteka automatycznie przełącza się na niską jakość renderingu, przywracając maksymalną ostrość dopiero po zakończeniu resize’u.
8. Macierz typowych problemów i najczęściej zadawane pytania (FAQ)
8.1. Diagnostyka awarii renderingu, spadku kontrastu i wycieków pamięci
| Objaw / Błąd | Przyczyna źródłowa | Rozwiązanie inżynierskie |
|---|---|---|
| Efekt szkła nieobecny (białe/szare tło) | Nie podłączono pliku stylów styles.css | Dodaj import "open-glass-ui/styles.css"; w katalogu głównym projektu |
| Tekst staje się nieczytelny na jasnych zdjęciach | Użyto zbyt przezroczystego materiału clear | Przełącz prop na material="regular" lub material="frosted", aby utworzyć matowe podłoże |
| Spadek płynności scrollowania na urządzeniach mobilnych | Duża liczba zagnieżdżonych powierzchni z rendererem sdf-svg | Pozostaw renderer="auto" (CSS) dla masowych elementów interfejsu |
Błąd WebGL context lost | Przekroczono limit aktywnych kontekstów canvas | Ogranicz liczbę aktywnych soczewek do 6 na jedno źródło WebGLGlassSurface |
8.2. Odpowiedzi na częste pytania deweloperów dotyczące OpenGlass UI
❓ Czy biblioteka jest kompatybilna z Tailwind CSS?
Tak. OpenGlass UI nie blokuje utilitów Tailwind. Możesz bezpiecznie łączyć klasy typuclassName="flex items-center gap-4 p-6"z propsamimaterialiinteractive.
❓ Czy biblioteka jest gotowa do użycia w środowisku produkcyjnym?
Obecnie biblioteka ma status pre-release. Jej architektura i publiczne API są już ustabilizowane, jednak przed aktualizacją wersji minor zaleca się uważne przeglądanie dziennika zmian (Changelog).
❓ Jak zachowuje się interfejs, jeśli użytkownik ma włączony wymuszony wysoki kontrast w Windows?
Biblioteka wykrywa preferencje systemowe i odpowiednio modyfikuje materiały, zapewniając pełną czytelność i zgodność z normami dostępności, nawet w trybach wysokiego kontrastu.