Dziennik zmian
Wszystkie wydania prfct, od najnowszego.
3.0.0 — listopad 2026
Przed tym wydaniem każdy komponent, przykład, strona dokumentacji i skrypt zostały przejrzane linia po linii. Nie usunięto żadnego eksportu, propsa ani data-slot: zmiany to poprawki.
Komponenty
- Calendar. Fokus znów podąża za strzałkami; listy miesiąca i roku pokazują fokus klawiatury; wyłączone dni są przyciemnione raz, nie dwa razy.
- Combobox.
disabledustawione na korzeniu albo na polu dociera do inputu. - Accordion. Wyłączona pozycja jest przyciemniona i nie reaguje na najechanie.
- Carousel i Sidebar. Własne
onKeyDownionClicknie zastępują już wbudowanych handlerów, adirdociera do paska bocznego na desktopie. - Pola. Stany wyłączony i błędny wyglądają tak samo w Input, NativeSelect, InputOTP, chipach Combobox, Switch i Toggle. InputGroup, chipy Combobox i InputOTP pokazują fokus w trybie wymuszonych kolorów.
- Menu. ContextMenu ma takie same wymiary jak DropdownMenu i nie wychodzi poza ekran.
- Nakładki. AlertDialog ma rozmiar tekstu i pasek przewijania jak Dialog, SheetFooter ma tło stopki, a linki w opisach wyglądają wszędzie tak samo.
- Chart. Legenda pokazuje nazwę serii, gdy brakuje etykiety; zawartość tooltipa i legendy przekazuje
id,style,data-*iaria-*do korzenia. - Slider. Obszar dotyku uchwytu ma 32px, zgodnie z dokumentacją.
tabsListVariantsitoggleVariantsmożna wywołać w Server Components. Wariantyghostilinkw Badge reagują na najechanie tylko na linku albo przycisku.
Przykłady
- Zainstalowane szablony pokazują swoje powiadomienia. Strona dodawana przez przykład montuje toaster, gdy przykład używa powiadomień.
- Cofnięcie nie wstawia wiersza dwa razy; w Rezerwacji i Logowaniu nie da się wrócić w trakcie żądania; potwierdzenie usunięcia zeruje się po zamknięciu; zaznaczenie w tabeli podąża za filtrem; daty w tabeli nie zależą od strefy czasowej.
- Formularze w przykładach dokumentacji nie przeładowują już strony, filtry zerują się w całości, a przykład IDE używa kolorów motywu, więc zachowuje je po instalacji.
- Menu i przełączniki segmentowe używają części, które przekazują swój stan technologiom asystującym.
Dokumentacja
- Stwierdzenia poprawione względem kodu: propsy, wartości domyślne, liczby, polecenia i wytyczne, których nie spełniały przykłady.
<kbd>w tekście renderuje się jako komponent Kbd.- Wymagania to Next.js 16 i Node.js 22.
Strona i narzędzia
text-codebyło kolorem na tej stronie, a rolą typografii wszędzie indziej. Teraz wszędzie jest rolą typografii.- Obraz społecznościowy strony głównej nie wymaga już przekierowania.
- Usunięto: dwie nieużywane zależności, martwe komponenty, propsy, komunikaty i CSS.
pnpm checksprawdza też formatowanie, testy, które nie mogły zawieść, zostały przepisane, a wygenerowane pliki tokenów są testowane względem źródła.
2.3.0 — listopad 2026
Przykładowe aplikacje stają się szablonami: ich kod można przeczytać na stronie i zainstalować jednym poleceniem. Strona główna jest teraz jednym z nich.
Przykłady
- Podgląd i Kod. Każdy przykład ma widok Kod z plikami, z których się składa, dokładnie w takiej postaci, w jakiej się instalują.
- Instalacja przykładu.
shadcn addz adresem przykładu zapisuje go wcomponents/, dodaje stronę, która go pokazuje, i instaluje komponenty, których używa. Zobacz Instalację. - Dwie strony główne. Bento ma dwutonowy nagłówek i siatkę, w której każdą cechę pokazuje ona sama; klasyczna ma wyśrodkowane hero i ścianę komponentów. Obie kończą się krokami instalacji, pytaniami i wezwaniem do działania.
- Zainstalowane strony mają tytuł i opis. Strona, którą dodaje przykład, eksportuje
metadata, więc jest gotowa dla wyszukiwarek od pierwszego wdrożenia.
Strona
- Nowa strona główna. To przykład strony głównej w układzie bento, wyrenderowany wewnątrz nagłówka i stopki serwisu. Stara strona główna i jej komponenty zniknęły.
2.2.0 — listopad 2026
Dwie kolejne przykładowe aplikacje, napisane tak, żeby dało się je czytać: każda to jeden plik na kilkaset linii.
Przykłady
- Rezerwacja na stronie /examples/booking: umawianie rozmowy. Kalendarz z niedostępnymi dniami, wolne terminy, krótki formularz z walidacją i potwierdzenie, które przejmuje fokus.
- Zespół na stronie /examples/team: członkowie i zaproszenia. Wyszukiwanie, zmiana roli w miejscu, usuwanie z możliwością cofnięcia i okno zaproszenia. Na telefonie kontrolki każdego członka zajmują osobną linię.
Poprawki
- Przykładowe aplikacje z kalendarzem wczytują lokalizację dat, więc kalendarz mówi językiem strony.
2.1.1 — listopad 2026
Utwardzenie pod produkcję: nic nowego do nauczenia się, mniej sposobów, na które strona może się zepsuć.
Poprawki
- Miniatury nie przesuwają układu. Skala miniatury jest wyliczana w CSS, więc HTML z serwera ma od razu właściwy rozmiar. Na wolnym telefonie galeria przykładów podskakiwała, gdy docierał jej skrypt.
- Strona błędu. Strona, która rzuci wyjątek, pokazuje komunikat w języku odwiedzającego i możliwość ponowienia próby zamiast domyślnego ekranu frameworka.
- Przykłady psują się pojedynczo. Żywy przykład, który rzuci wyjątek, zostaje zastąpiony krótką notką, a ten, którego kod nie dotarł, zachowuje HTML z serwera; strona wokół niego działa dalej.
- Mniej skryptu na stronach dokumentacji. Dane lokalizacji dat kalendarza wczytują się tylko na stronach, które pokazują kalendarz. Każda inna strona dokumentacji jest lżejsza o 12 kB.
Narzędzia
- CI uruchamia kontrole i wszystkie testy end-to-end przy każdym pull requeście, a cotygodniowe zadanie instaluje prfct w świeżym projekcie na najnowszych wydaniach wszystkich zależności.
pnpm typechecknajpierw generuje typy tras Next, więc przechodzi na świeżym klonie.SECURITY.mdmówi, jak zgłosić podatność.
2.1.0 — listopad 2026
Czerń i biel jako ustawienie domyślne, drugi kolor marki oraz każdy komponent sprawdzony z dokumentacją i ze świeżą instalacją.
Fundamenty
- Domyślnie czerń i biel. Kolor marki to teraz
mono: wypełnienia biorą najciemniejszy stopień neutralnej skali, a kolor zostaje dla statusów i dla twojego motywu. Żeby go przywrócić, ustawbrandwthemeConfigna gotową paletę albo własny kolor. - Drugi kolor marki.
brand-secondaryto pełna, 12-stopniowa skala z własnymi rolami, aBadgedostajevariant="brand-secondary". - Pierścień fokusu trzyma 3:1 przy każdym kolorze marki.
ringwskazuje na nowy kolorbrand-focus: wypełnienie, gdy odróżnia się ono od każdej powierzchni, a w przeciwnym razie stopień tekstu marki. Jasna marka, taka jak bursztynowa, rysowała wcześniej pierścień z kontrastem poniżej 2:1 na bieli. - Wymuszone kolory. W trybie wysokiego kontrastu systemu Windows stany: wciśnięty, bieżący, podświetlony i wybrany przyjmują systemowe kolory zaznaczenia, pływające powierzchnie zachowują krawędź, a pozycje menu nie mają już stałego konturu.
- Role typograficzne zamiast rozmiarów wpisanych wprost. Wszędzie tam, gdzie rozmiar 13 px był wpisany na sztywno, czyli w
Button,Badge,InputGroup, w przykładach i w tym serwisie, tekst przyjmuje teraz swoją rolę:text-label-sm,text-body-xsalbotext-code. Wiersze, które miały 19,5 px wysokości, leżą teraz na siatce 4 px. - Kursywa przy pierwszej wizycie. Plik kursywy jest opcjonalny i dopóki nie trafił do pamięci podręcznej, wyróżnienia były rysowane prosto. Teraz przeglądarka może pochylić krój zapasowy; sztuczne pogrubienie pozostaje wyłączone.
- Nowe role interakcji:
secondary-hover,secondary-active,brand-hover,input-hoveriborder-hover. - Skrót D w
ThemeProviderjest opcjonalny i włącza gohotkey.
Komponenty
- Command instaluje się bez błędów. CLI shadcn przepisywało po drodze jeden z jego propsów i zainstalowany plik nie przechodził sprawdzania typów.
- Popover dostaje
PopoverClose, bez którego modalny popover nie zatrzymuje fokusu. Button dostajeicon-xl. Table dostajecontainerClassName. - Kontrolki formularzy: zatrzymanie kursora na kontrolce nie przemalowuje już jej ramki. Aktywny
Input,Textarea,Select,NativeSelect,InputGroupiComboboxzachowuje kolor fokusu, a zaznaczonyCheckboxi przycisk radiowy zachowuje kolor marki. - Checkbox i RadioGroup: niewidoczny obszar kliknięcia ma rzeczywiste 24 px. Wcześniej miał 22 px, bo jego odsunięcia liczą się od wewnętrznej krawędzi obramowania.
- Alert: akcja ma własną kolumnę, więc tekst nigdy pod nią nie wchodzi, niezależnie od jej szerokości.
- ButtonGroup: oba końce zachowują promień właściwy dla swojego rozmiaru, także przy
xsixl. - Calendar: bez ustawionego języka daty są zapisywane po angielsku tak samo na serwerze i w przeglądarce, co usuwa błąd hydratacji u osób korzystających z innych języków. Dni sąsiednich miesięcy są przygaszone, nazwa dostępna dnia zawiera jego numer jako osobne słowo, a numery tygodni są nagłówkami wierszy, zgodnie ze swoimi atrybutami.
- Accordion: pierścień fokusu na samej górze panelu nie jest już przycinany. Progress: przy ograniczonym ruchu pasek o nieokreślonym postępie zatrzymuje się na środku toru, gdzie nie da się go odczytać jako jednej trzeciej.
- Drawer: treść przewija się, gdy jest wyższa, niż szuflada może urosnąć, na przykład na telefonie w orientacji poziomej.
- DropdownMenu: menu rozszerza się do najdłuższej pozycji.
- Toast: typ jest odczytywany razem z komunikatem, a w wąskim powiadomieniu akcja przechodzi pod tekst.
- Sidebar:
isActiveustawiaaria-current="page"; na telefonach propsy takie jakidiaria-labeltrafiają do panelu; przyciski akcji zachowują cel o wielkości 24 px. - Switch: w stanie włączonym uchwyt przyjmuje kolor przeznaczony na wypełnienie marki, więc pozostaje widoczny przy jasnej marce i w domyślnym motywie w trybie ciemnym.
- ScrollArea: uchwyt przyjmuje kolor krawędzi o kontraście 3:1, podobnie jak cienkie natywne paski przewijania.
- Spinner:
label=""czyni go dekoracyjnym. Separator: dekoracyjna linia zachowuje pozostałe propsy. AvatarGroup ma rolęgroup, więc jego etykieta jest odczytywana. - Input przyjmuje propsy Base UI, między innymi
renderionValueChange, a wypełnienie stanu tylko do odczytu nie obejmuje już pól plików. NativeSelect używa na telefonach tekstu 16 px, bo mniejszy powiększa stronę przy fokusie. - NavigationMenu: wyłączony wyzwalacz wygląda na wyłączony. Item: separator poza listą zachowuje swoją rolę. Chart:
idtrafia do elementu, fokus z klawiatury rysuje pierścień wokół wykresu, a długa etykieta w podpowiedzi nie styka się już z wartością. Resizable: uchwyt z fokusem pokazuje pierścień, a nie tylko zmianę koloru. Card: stopka zagnieżdżonej karty nie usuwa już paddingu karty zewnętrznej. Label przygasa w wyłączonymField. - Rozmiary Select, Avatar i AlertDialog to zwykłe klasy, więc rozmiar podany w
classNamewygrywa. ScrollArea opakowuje treść we własny element.
Dokumentacja
- Osiem przykładowych aplikacji na stronie /examples: panel, poczta, asystent, zamówienie, cennik, ustawienia, faktury i logowanie, każda interaktywna.
- Kopiuj stronę zwraca stronę jako Markdown: przykłady stają się kodem, a tabele referencyjne pozostają tabelami.
- Przebudowany kreator motywu: dwa kolory marki z gotowej palety, odcienia albo wartości hex, tabela kontrastu obejmująca pierścień fokusu i arkusz stylów do pobrania.
- Każda strona została sprawdzona z kodem, który opisuje: poprawiono około stu stwierdzeń na mniej więcej pięćdziesięciu stronach, w obu językach.
- Wprowadzenie mówi, czym jest prfct: design systemem dla Next.js zbudowanym na shadcn, i wymienia, co dodaje do komponentów shadcn oraz którą jedną część pomija.
- Instalacja wymienia pytania, które zadaje CLI, i podpowiada, jak na nie odpowiedzieć.
- Diagramy anatomii dla
RadioGroup,InputOTP,Collapsible,ResizableiCarousel; we wszystkich diagramach wskaźnik części tekstowej kończy się obok tekstu, a nie na nim. - Przykłady Checkout i Assistant nie zostawiają już pod stopką pustego miejsca, w które dało się przewinąć: ich przewijane kontenery są pozycjonowane, więc treść ukryta wizualnie zostaje w środku. Z tego samego powodu
Drawerpozycjonuje swoją treść. - Punkty orientacyjne i nagłówki: dwie boczne szyny tego serwisu nie są już nienazwanymi punktami
complementary, a małe tytuły w przykładach nie zaburzają kolejności nagłówków strony, na której się znajdują. - Przykłady dokładniej trzymają się reguł systemu: siatki kart zachowują odstęp wymagany przez regułę odstępów, ramka wideo pozostaje widoczna na ciemnej stronie, a ostatnia gradientowa okładka zniknęła.
- Nowy znak.
Narzędzia
pnpm test:installinstaluje prfct w świeżym projekcie z każdym komponentem i każdym przykładem, na najnowszych wydaniach wszystkich zależności, a potem uruchamia linter, buduje całość i sprawdza typy. Sprawdza też, czy prfct zachowuje każdy eksport i każdydata-slotaktualnych komponentów shadcn, oraz buduje komponenty shadcn, których prfct nie ma, razem z komponentami prfct.- Test rejestru pilnuje, żeby każdy dostarczany plik dało się zainstalować, kontrola stanu stron działa też na ekranie o szerokości 320 px, nowy test sprawdza, że najechanie kursorem nigdy nie przemalowuje ramki zaznaczonej lub aktywnej kontrolki, a żadna strona nie może być wyższa niż jej stopka.
- Zbudowano i przetestowano na Base UI 1.9, Next.js 16.4, React 19.3 i Recharts 3.10.
2.0.0 — październik 2026
Spokojniejszy i precyzyjniejszy prfct. Każda powierzchnia została narysowana od nowa według jednej zasady: strukturę tworzą typografia, odstępy i jedna cienka linia, nigdy dekoracja.
Fundamenty
- Powierzchnie wyniesione są płaskie. Karty, pola, listy wyboru, pola wyboru, przyciski z obramowaniem i przełączniki rysuje samo obramowanie 1 px;
shadow-raisednie daje teraz żadnego cienia. Cienie rzucają tylko warstwy pływające i modalne. - Pełne przyciski tracą fazowanie.
default,brandidestructiveto płaskie wypełnienia; narzędziebevelzostało usunięte. - Typografia ekspozycyjna oddycha. Role display mają grubość 600 i światło zgodne z metryką Intera, od −0,020 do −0,024 em, oraz nieco wyższą interlinię.
- Spokojniejsze kropki statusu.
BadgeDot livełagodnie przygasa zamiast pulsować pierścieniem i służy wyłącznie do trwających czynności. - Poświata fokusu w polach tekstowych to jeden pierścień, bez dodatkowego cienia.
- Awatary w
AvatarGroupzachodzą na siebie o jedną piątą średnicy, więc inicjały pozostają całe. - Narzędzie
bg-gridzostało usunięte.
Dokumentacja
- Podglądy pokazują swój kod. Przykład i jego źródło są razem; dłuższe źródła startują zwinięte. Kropkowane tło zniknęło.
- Tabele rysują same linie. Nagłówki w pasku bocznym, spisie treści i stopce są zapisane zwykłą wielkością liter.
- Strony oznaczone jako stabilne nie mają już odznaki; mają ją tylko nowe, beta i wycofane.
- Wyszukiwarka jest przyciskiem także na telefonach.
- Przełączanie motywu jest natychmiastowe.
- Przegląd komponentów renderuje miniatury na serwerze; kod w przeglądarce wczytuje tylko wykres, który mierzy swój kontener.
- Nowa strona główna: produkt, a po nim specyfikacja fundamentów, komponentów, motywów i kodu.
- Nowa strona: Produkcja.
Produkcja
- Nagłówki bezpieczeństwa w każdej odpowiedzi: Content Security Policy zapisana jako dane w
lib/security.ts, HSTS,X-Frame-Options,Cross-Origin-Opener-Policyi ostrzejszaPermissions-Policy. - Element rejestru
securityinstaluje ten sam zestaw w dowolnym projekcie Next.js:shadcn add https://www.prfct.dev/r/security.json. /.well-known/security.txt, manifest aplikacji, ikony PNG i ICO oraz dyrektywy dla robotów dopuszczające duże podglądy obrazów.- Pliki rejestru i tokenów można odczytywać z dowolnego pochodzenia.
Poprawki
- Żadna strona nie przewija się na boki ani nie ucina treści na ekranie o szerokości 320 px, w żadnym języku.
- Card: tytuł zawija się, zanim
CardActionzostanie ściśnięta, a akcje w stopce się zawijają. - Długie identyfikatory w tekście łamią się, zamiast poszerzać stronę.
- Odnośniki do poprzedniej i następnej strony są przetłumaczone.
- Przykłady używają neutralnych wypełnień zamiast gradientowych grafik.
1.1.0 — wrzesień 2026
prfct mówi nie tylko po angielsku.
Lokalizacja
LocaleProviderprzełącza słowa, które komponenty mówią same od siebie — przyciski zamykania, status spinnera, punkty orientacyjne paginacji, ścieżki nawigacji i karuzeli, mobilny pasek boczny i paletę poleceń — z wbudowanym angielskim i polskim, a każdy inny język to jeden obiekt z komunikatami. Zobacz Lokalizację.- Calendar pobiera lokalizację dat z providera, a podpowiedzi Chart formatują liczby w jego języku.
Dokumentacja
- Po polsku, pod
/pl: każda strona, przykład, opis tokenu i obraz Open Graph, ze wspólnymi kotwicami, alternatywamihreflang, polskim indeksem wyszukiwania i/pl/llms.txt. - Przykłady pisze się raz i tłumaczy z katalogów tekstów podczas budowania, więc kod, który kopiujesz, to kod, który działa.
- Dane strukturalne (ścieżki nawigacji i artykuły) na każdej stronie.
Poprawki
PaginationEllipsisiBreadcrumbEllipsissą odczytywane przez czytniki ekranu, zamiast być przed nimi ukryte.- Opisy w diagramach anatomii wyświetlają kod w tekście.
- Elementy rejestru nie wymieniają już importów samych typów jako zależności.
- Strony nie niosą już indeksu wyszukiwania; paleta pobiera go, gdy za chwilę ma się otworzyć.
1.0.0 — wrzesień 2026
Pierwsze stabilne wydanie.
Fundamenty
- Generowana paleta OKLCH. Dziesięć 12-stopniowych skal — szara, marki, czerwona, bursztynowa, zielona, niebieska, pomarańczowa, morska, fioletowa i różowa — generowanych dla trybu jasnego i ciemnego, ze stopniami tekstu wyliczonymi pod WCAG 2.2 AA.
- Tokeny semantyczne zgodne z nazewnictwem shadcn/ui, a do tego role
brand,surface,field,input,edge,overlay,selectioni role statusów. - Samodzielnie hostowany Inter 4.1 ze wszystkimi funkcjami OpenType i rozmiarem optycznym; Geist Mono do kodu.
- Semantyczne role typograficzne: display, heading, body, label, caption, overline i code.
- Tokeny ruchu ze sprężynami w CSS
linear()oraz wspólne klasy narzędziowe do choreografii popupów i okien modalnych. - Motywy lokalne: dowolne poddrzewo może przełączyć tryb za pomocą klasy.
- Eksport tokenów w formacie DTCG 2025.10 dla narzędzi projektowych.
Komponenty
- 54 komponenty zbudowane na Base UI, ze stylami opracowanymi od podstaw.
Buttonzyskuje stanloading, który zachowuje szerokość i fokus.Input,SelectiNativeSelectzyskują rozmiary zgodne zButton.Tabszyskuje przesuwający się wskaźnik,Sheet— wariant pływający, aCommand— stopkę z podpowiedziami klawiszy.
Dokumentacja
- Strona dla każdego komponentu: przykłady na żywo, wytyczne z przykładami „dobrze” i „źle”, opis obsługi klawiatury dla komponentów interaktywnych i API — a dla 23 z nich także diagramy anatomii mierzone na żywym komponencie.
- Fundamenty, wzorce, kreator motywów i cztery przykładowe aplikacje zbudowane wyłącznie z prfct.
- Wyszukiwanie z rankingiem wyników i synonimami, indeks
/llms.txtdla modeli językowych oraz obrazy Open Graph dla każdej strony.
Narzędzia
- Rejestr ze wszystkimi komponentami i motywem, instalowany przez shadcn CLI i przetestowany na świeżym projekcie.
- Funkcja
cn()rozpoznająca tokeny. - Automatyczne testy każdej strony: axe-core w trybie jasnym i ciemnym, błędy w konsoli, błędy hydratacji i nieprawidłowe zagnieżdżanie elementów na komputerach i urządzeniach mobilnych oraz widoczny fokus na każdym elemencie w kolejności tabulacji na najbardziej interaktywnych stronach.