Podrobný seznam změn
Tato stránka nese detailní popis změn — co se přesně změnilo, jak se komponenta chová po úpravě, proč k opravě došlo a co je potřeba udělat při aktualizaci. Stručný přehled na jeden pohled najdete na stránce Seznam změn.
v4.7.1
Balíčky @gov-design-system-ce/components, styles, icons, templates, react, angular a vue jsou posunuty ze 4.7.0 na 4.7.1; fonts a utils jsou posunuty jen verzí, bez změny obsahu. Změny React balíčku jsou popsány v samostatné části na konci.
Breaking changes a migrace
- Wizard (
gov-wizard-item) – odstraněn propdisabled: Prop byl od začátku implementovaný jen napůl. Ve stylech (gov-wizard-item.scss) pro něj neexistovalo jediné pravidlo, takže zakázaná položka vypadala úplně stejně jako aktivní, a v šabloně se předával jen uvnitř větve pro sbalitelnou položku – u nesbalitelné položky (<div>) neměl žádný efekt. Jediné, co skutečně dělal, bylo nativnídisabledna spouštěcím<button>, které položku vyřadilo z pořadí tabulátoru a znemožnilo její rozbalení; klávesnicí se na krok nedalo dostat a čtečka ho v režimu čtení ohlásila jen jako „nedostupný“ bez jakéhokoli vysvětlení. Stav navíc nemá podobu v designu (v návrhu komponenty žádný zakázaný stav není) a ani sourozenecká komponentagov-stepperho nezná. Místo dodělávání vizuálu, který nikdo nenavrhl, je prop odstraněn: průvodce je seznam kroků (role="list"/role="listitem"), ne sada ovládacích prvků, a „krok, který ještě není na řadě“ už vyjadřuje pořadové číslo ve slotuprefixspolu s barvou (color). Dopad:<gov-wizard-item collapsible disabled>se nově vykreslí bez atributůdisabledaaria-disabled– krok, který dosud rozbalit nešel, se rozbalit dá. Pokud obsah kroku zobrazovat nechcete, položku neoznačujte jakocollapsible; tím zůstane statická a její obsah zůstane skrytý (pokud nenastavíteis-expanded). Žádná jiná změna chování ani vzhledu wizardu. Wrappery: proxy komponenty pro Angular a Vue se generují ze Stencilu, takže vstupdisabledztrácejí. V Angularu vazbu[disabled]nagov-wizard-itemodstraňte (bezCUSTOM_ELEMENTS_SCHEMAmůže šablona s neznámou vlastností skončit chybou kompilace), ve Vue se hodnota nově ignoruje. ReactGovWizardItempropdisabledtaké ztrácí (z typuGovWizardItemPropsi z vykresleného<button>), takže zápis<GovWizardItem disabled>v TypeScriptu nově hlásí chybu. - Informační lišta (
gov-infobar) – odstraněna hodnotasecondarypropucolor: VýčetInfobarColors(gov-infobar/constants.ts) obsahoval isecondary, takže ji kontrakt propucolor, validace i generovaná tabulka propů uváděly jako platnou, ačkoli pro ni neexistovalo žádné pravidlo ve stylech:gov-infobar.scssgeneruje barevné varianty jen z barev toastu, mezi kterýmisecondarynení, a lišta se vykreslila jako bílý pruh. Hodnota je z výčtu odstraněna a typ propu se zužuje naprimary | neutral | error | success | warning. Dopad: vykreslení se nemění, stylovaná variantasecondarynikdy neexistovala. Zápiscolor="secondary"nově zaloguje varování o neplatné hodnotě. Pro TypeScript jde o zúžení typu, takžecolor="secondary"v ReactGovInfobar(typ propu se přebírá zJSX.GovInfobar), ve Stencil JSX nebo v typově kontrolované šabloně Angularu skončí chybou kompilace. Hodnotu nahraďte jednou z podporovaných. Wrappery vlastní změnu nemají, typ se zužuje přes závislost na@gov-design-system-ce/components. - Skeleton (
gov-skeleton, ReactGovSkeleton) – bez přístupného názvu je nově dekorativní: Komponenta dosud napevno nastavovala každé instancirole="progressbar",tabindex="0"aaria-busy/aria-valuemin/aria-valuemax, ale přístupný název nedodávala, takže každý skeleton byl nepojmenovaný progressbar a samostatná zastávka v pořadí tabulátoru. Nově dostanerole="progressbar",aria-busy="true",aria-valuemin="0",aria-valuemax="100"atabindex="0"jen skeleton s neprázdnýmaria-labelneboaria-labelledby; bez názvu se vykreslí saria-hidden="true"a bez těchto atributů. Stejně se nově chová i ReactGovSkeleton, který je samostatnou implementací. Samotná změna přístupnosti nemění propy ani vzhled (opravy stylů skeletonu jsou v části Opravy, předáváníonClickv Reactu v části React wrapper). Dopad: pojmenujte jeden skeleton v každé načítané oblasti (např.aria-label="Načítání výsledků vyhledávání") a ostatní nechte bez názvu. Testy, které hledají skeleton podle role (getByRole('progressbar')), a pořadí fokusu, které skeletony zahrnovalo, je potřeba upravit. Vnitřní načítací řádekgov-form-autocomplete(a tím igov-form-multi-select) je nově skrytý před asistivními technologiemi. Angular a Vue změnu přebírají za běhu přes závislost na@gov-design-system-ce/components. - Barvy – modrá paleta
primarysladěna s brandbookem JVS (viditelná změna): Primitivaprimaryodpovídají webové paletě JVS. Oproti publikované 4.7.0 se mění hodnoty kroků 700 až 1050, kroky 50 až 600 zůstávají (primary-600= JVS Modrá#00469B). Část sémantických tokenů a tokenů šablon se zároveň posunula o krok níž. Názvy tokenů se nemění, žádný token nepřibyl ani neubyl. Dopad: ve světlém režimu mají odkazy a texty v primární barvě (--text-primary-color) JVS Modrou#00469Ba hover/active primárních tlačítek jsou tmavší; v tmavém režimu se mění pozadí primárních ploch, obrysová primární tlačítka a pozadí stránky; v šablonách patička a navigace. Kdo používá--color-primary-700až--color-primary-1050přímo, dostane nové hodnoty. Stránka Barvy v dokumentaci nově uvádí JVS Tmavě modrou u kroku Primary 900 (dříve 1000). Po aktualizaci si překontrolujte dotčené obrazovky. Přehled změn oproti 4.7.0:--color-primary-700:#003E8A→#0E3578--color-primary-800:#06397E→#102657--color-primary-900:#0C3372→#0C1838(JVS Tmavě modrá)--color-primary-950:#0A2450→#091129--color-primary-1000:#0C1838→#060B1B--color-primary-1050:#03070F→#04060E- světlý režim:
--text-primary-colorprimary-700→primary-600(#003E8A→#00469B);--interactive-timer-primary-solidprimary-800→primary-700(#06397E→#0E3578); se stejným krokem, ale novou hodnotou--button-solid-primary-hover(primary-700,#003E8A→#0E3578) a--button-solid-primary-active(primary-800,#06397E→#102657) - tmavý režim:
--background-primary-subtleprimary-950→primary-900(#0A2450→#0C1838);--background-primary-subtlestprimary-900→primary-800(#0C3372→#102657);--button-outlined-primaryprimary-800→primary-700(#06397E→#0E3578);--button-outlined-primary-activeprimary-900→primary-800(#0C3372→#102657);--button-outlined-primary-hoverprimary-950→primary-900(#0A2450→#0C1838);--interactive-timer-primary-solida--interactive-timer-primary-subtleprimary-800→primary-700(#06397E→#0E3578); se stejným krokem, ale novou hodnotou--background-page(primary-1050,#03070F→#04060E) a--button-solid-primary-active(primary-700,#003E8A→#0E3578) - šablony (
templates.cssv balíčkustylesa tokeny v balíčkutemplates): světlý--component-nav-text-linkprimary-900→primary-800(#0C3372→#102657),--component-nav-text-primaryprimary-800→primary-700(#06397E→#0E3578),--component-footer-backgroundprimary-900→primary-800(#0C3372→#102657) a--component-footer-separatorprimary-600→primary-500(#00469B→#3771B8); tmavý--component-footer-backgroundprimary-950→primary-900(#0A2450→#0C1838) a--component-footer-separatorprimary-600→primary-500 - Banner (
gov-bannermimo velikostxl): koncová barva přechodu v pozadí (primary-900)#0C3372→#0C1838
- Hlavička (šablona) – desktopové rozložení až od
lg(1024 px), viditelná změna mezi 768 a 1023 px: Hlavička vtemplates.csssi nově drží mobilní rozložení s hamburgerem až do šířky 1023 px; řádková navigace první úrovně, lišta akcí (__action), oddělovač a desktopové vyhledávání nastupují až od 1024 px. V 4.7.0 se přepínalo na breakpointumd(768 px). Při šířce tabletu se řádek navigace spolehlivě nevešel: položky první úrovně, vyhledávací pole a lišta akcí soupeřily o jeden řádek a přebytek padal do generované položky „Další“. Přepnutímq($from/$until: md)→lgse týkágov-header.scss(včetně varianty--small),gov-header-navigation.scss,gov-header-search.scssagov-header-suggestions.scss. Globální pomocné třídy.gov-mobile-only/.gov-desktop-onlyzůstávají namd; hlavička je pro pásmomd–lgpřepisuje lokálně, aby ovládání jazyka a motivu mezi 768 a 1023 px nezmizelo. Logo má výšku 56 px a 64 px dosáhne až od 1024 px (v 4.7.0 od 768 px); pravidlo 56 / 64 px podle manuálu JVS se nemění, posouvá se jen breakpoint. Stejná změna platí pro vlastní styly balíčku@gov-design-system-ce/templatesi pro jeho skript hlavní navigace (dist/scripts/main-navigation.js,TABLET_SIZE768 → 1024), takže chování menu v JS odpovídá novému breakpointu v CSS. Dopad: kdo používá markup hlavičky se styly šablon, uvidí mezi 768 a 1023 px hamburger místo řádkové navigace a logo 56 px místo 64 px. Komponenty ani API se nemění.
Změny
- Banner (
gov-banner) – volitelná dekorativní ikona přes nový propicon: Dosud se uforeground="icon"vykreslovala jediná, napevno zapsaná grafika (base64 SVG v$shared-foregroundsvgov-banner-variables.scss) a nešla ničím nahradit. Nový propiconpřijímá ikonu jako řetězectyp/název(stejně jako propiconugov-chipnebogov-tag, např.complex/portal) a vykreslí ji přesgov-iconv dekorativní vrstvě.gov-banner__icon(aria-hidden="true") místo původní grafiky; host přitom dostane třídugov-banner--has-icon. Prop je volitelný a beze změny chování, pokud jej neuvedete – bannery beziconse vykreslí přesně jako dosud. Neplatná hodnota (jiný tvar nežtyp/název) se ignoruje a použije se výchozí grafika; název smí obsahovat jen malá písmena a pomlčky, takže ikony s číslicí v názvu (např.globe2,folder2-open,link-45deg) se zatím použít nedají. Prop se uplatní jen proforeground="icon"u velikostís/m/l; uforeground="image"a u velikostixlnemá vliv. Stejně jako dosavadní dekorace se ikona zobrazuje až od breakpointulg. Velikost ikony vychází z velikosti banneru a je přepsatelná CSS proměnnou--icon-size. React implementace (GovBanner) přijímá propiconjakoReactNode(např.<GovIcon/>); protože ReactGovBannernemá výchozíforeground, je nutné uvéstforeground="icon"explicitně. - Ikony – 34 nových ikon v sadě
components:award,buildings,calendar-event,car-front,card-checklist,cash-coin,cash-stack,chat-dots,chat-text,clock,envelope-plus,file-earmark-text-fill,flag,folder2-open,funnel,geo-alt,globe2,heart-pulse,house,houses,link-45deg,map,mortarboard,pencil,person,send,share,shield,sliders,sort-down,star,three-dots-vertical,trashatree. Sadacomponentsroste z 57 na 91 ikon, sadycoloredacomplexse nemění. Zdrojem je Bootstrap Icons (MIT); ikony jsou převedeny do konvence sady (fill="none"/path[fill="currentColor"]). Šablony ve Storybooku i ve Fractalu na tyto ikony dosud odkazovaly přes nikdy nepublikovanou sadutemplates; nově používajítype="components", takže se ikony vykreslují z publikované sady. SeznamcomponentsIconspro galerii ikon ve Storybooku (gov-icon/list.js) je doplněn o stejné položky; komponentagov-iconse nemění. - Pravidla – Jak na tvorbu formuláře: povinná pole se označují hvězdičkou: Stránka dosud uváděla, že se povinná pole hvězdičkou neoznačují, což neodpovídalo chování komponent. Pravidlo je nahrazeno dvěma: povinná pole se označují hvězdičkou, kterou vykreslí komponenta sama, když poli nastavíte atribut
required(do textu popisku ji nepište ručně), a formulář s povinnými poli má nad prvním polem vysvětlivku, například Pole označená hvězdičkou (*) jsou povinná. Ukázky kódu ve Storybooku zároveň vypisují boolean atributy bez hodnoty (requiredmístorequired="true"). - Dokumentace pro vývojáře –
templates.cssnení pro markup šablon volitelný: Oddíl Styly na stránce Pro vývojáře je rozdělen na tři části. Základ pro web-komponenty uvádí pět souborů (tokens.css,styles.css,layout.css,components.css,animations.css), které web-komponentám stačí. Kdy potřebujete další soubory vysvětluje, že markup organismů a šablon a třídy.gov-block,.gov-text-contenta.gov-mb--*vyžadujítemplates.css(bez něj se vykreslí zcela bez stylů),content.cssslouží pro redakční HTML v.gov-contentaprint.cssje volitelný. Import po jednotlivých komponentách popisuje granulární exporty./components/gov-*.cssa./templates/gov-*.css. Dosud stránka označovalacontent.css,templates.cssiprint.csssouhrnně jako volitelné. Návod Použití v čistém HTML v kroku 2 nově jmenuje pět základních souborů i požadavek natemplates.css. - Fractal označen jako deprecated: Fractal (web šablon) už není udržovaný a zdrojem pravdy pro šablony je Storybook. Odkazová tlačítka v dokumentaci se jmenují „Fractal (deprecated)“ (na stránce hlavičky a navigace „Fractal Navigation (deprecated)“ a „Fractal Header (deprecated)“) a nesou vysvětlující
title; úvodní stránky Organismů a Šablon začínají varováním. Fractal sám zobrazuje nad obsahem banner s odkazy na Storybook a na dokumentaci, v titulku má „(deprecated)“ a jeho úvodní stránka začíná upozorněním. Publikovaný balíček@gov-design-system-ce/templatesse tím nemění.
Opravy
- Našeptávač (
gov-form-autocomplete) – seznam návrhů zobrazoval jen první položku: Při asynchronním vyhledávání přessetSearchCallback, kdy komponenta vykresluje načítací řádek, se v seznamu objevila pouze první nalezená položka. Položky seznamu neměly klíč (key), takže Stencil znovu použil načítací<li>jako první výsledek; položka výsledku zároveň nastavovalainnerHTMLa obsahovala slotylist-item-left/list-item-right,innerHTMLpřepsal sledované uzly slotů a vykreslování se po první položce přerušilo. Položky mají nově stabilní klíče (message-empty,loading,item-${index}) a oba sloty jsou odstraněny. Nikdy nic nezobrazily, protože jejich obsah přepsal právěinnerHTML, takže jejich odebrání nemá funkční dopad; ze starších poznámek k migraci v Seznamu změn byla odstraněna zmínka o jejich přidání. Oprava se týká igov-form-multi-select, který vnitřně používágov-form-autocompletese stejným asynchronním vyhledáváním. - Control group (
gov-control-group) –no-border,no-inner-borderafit-contentnefungovaly přes JS property: Styly se řídí atributy hostitele, ale tyto tři propy se na atributy nepropisovaly, takže při nastavení jako property (Angular[noBorder], Vue:no-border,el.noBorder = true) se tiše ignorovaly. Propy se nově reflektují na atributy (reflect: true), stejně jakocolor, který fungoval už dříve přes explicitní propis vrender()a nově se jen reflektuje. Opraveny jsou i popisy propů:no-borderodstraní vnější rámeček celé skupiny,no-inner-borderskryje dělicí čáry mezi prvky a vnější rámeček ponechá afit-contentzúží skupinu na šířku obsahu (dosud chybně popsáno jako plná šířka). Vedlejší efekt: hodnoty nastavené přes property jsou nově vidět jako atributy hostitele. ReactGovControlGroupje samostatná implementace a změna se ho netýká. - Skeleton (
gov-skeleton) – kruh jako elipsa a zamrzlý přechod: (1)shapenení reflektovaný prop, takže při nastavení přes JS property (Vue:shape, Angular[shape], React,el.shape = "circle") na hostiteli nevznikl atributshape="circle"a pravidlo velikosti[size=…]:not([shape="circle"])přepsalo výšku; kruh se vykreslil jako elipsa. Pravidlo nově vylučuje i třídu.circle, kterou nastavuje komponenta i React implementace. (2) Připrefers-reduced-motionse u skeletonu s animacíprogress(výchozí) neodstranil přechodový gradient: pravidlo barev ([color=…].progress) mělo vyšší specifičnost a komponenta i ReactGovSkeletonatributcolorvždy nastavují (výchozíneutral), takže se to týkalo prakticky všech skeletonů a na obrazovce zůstal zamrzlý pruh. Reset je nově až za barevnými pravidly a pokrývá i[color].pulse/[color].progress, takže se zobrazí plochá barva placeholderu. Změna je v globálním CSS komponent i vcomponents.cssbalíčkustylesa v jeho kopii v balíčkutemplates. - Layout (
gov-layout-column) – nezalomitelný obsah vytlačil boční sloupec: Sloupec měl výchozí flexovoumin-width: auto, takže se nemohl zúžit pod šířku nejširšího nezalomitelného obsahu (buňka tabulky snowrap, dlouhý identifikátor) a boční sloupec (aside) se posunul mimo kontejner. Sloupec má nověmin-width: 0a přetečení zůstává uvnitř sloupce s obsahem. Platí pro web-komponentu i třídu.gov-layout-column, kterou vykresluje React, v globálním CSS komponent i vcomponents.css. - Tlačítko (
gov-button) – atributyaria-*zapsané během načítání nebo po přesunu v DOM: Komponenta přenáší atributyaria-*z hostitele na vnitřní<button>jednou vcomponentWillLoada další změny sledujeAttributeObserver, který startoval až vcomponentDidLoada po odpojení z DOM se znovu nespustil. Atribut zapsaný mezi těmito okamžiky nebo po přesunu tlačítka v DOM tak zůstal jen na hostiteli (v hlavičce se kvůli tomu rozcházeloaria-expandedu položek přesunutých do menu „Další“). Atributy se nově převezmou i po startu observeru vcomponentDidLoada vconnectedCallback, který observer po přesunu znovu spustí. Týká se web-komponenty, Angularu a Vue; ReactGovButtonje samostatná implementace. - Hlavička (šablona) – rozbalovací panely a vnořená menu: Tři rozbalovací panely navigace (
.gov-subnavigation,.gov-mega-menua menu „Další“.gov-deferred-navigation) sdílejí nový mixin a mají odlgjednotný vzhled (absolutní pozice pod řádkem navigace, min. šířka 280 px, pozadí--background-block-primary). Megamenu se už neroztahuje na100vws pevným odsazením shora, ale drží se vodorovných okrajů hlavičky. Zarovnání poslední rozbalovací nabídky vpravo pokrývá i:last-childa třída.gov-navigation__last-visible-itemplatí pro podnabídku i pro menu „Další“, takže panely nepřetékají přes pravý okraj stránky. Podnabídky položek přesunutých do menu „Další“ se v něm vykreslují přímo místodisplay: nonea skript hlavní navigace (main-navigation.jsv balíčkutemplates) nově registruje spouštěče i na vnořených úrovních, takže vnořená menu jdou otevřít. Řádek navigace má vodorovný okraj--templates-margin-ljako zbytek hlavičky (ve variantě--smallnulový). - Patička (šablona) – ikony sociálních tlačítek v Reactu: Pravidlo
.gov-footer a, .gov-footer a span { color: var(--component-footer-text-link) !important }vtemplates.csspřebarvovalo i ikonu uvnitř tlačítka, kterou React wrapper vykresluje jako<span class="gov-icon">. Ikony sociálních sítí pak měly barvu odkazů patičky (#CEE3F4) na bílém tlačítku a byly téměř neviditelné. Selektor je zúžen naa span:not(.gov-icon); markup s<gov-icon>se vykresluje beze změny. Týká setemplates.cssv balíčkustylesi jeho kopie v balíčkutemplates; vlastní styly Fractalu se nemění. - Karty – carousel (šablona) – chybějící okrajové přechody: Styly
.gov-carousel__left-shadow/.gov-carousel__right-shadowexistovaly jen ve Fractalu a dotemplates.cssse nepřenesly. Nově jsou jeho součástí: přechod z--background-pagedo průhledna přes okraj carouselu (šířka5.625rem, odsm11.875rem), který funguje ve světlém i tmavém režimu a neblokuje kliknutí (pointer-events: none). Třídy přepíná aplikace vlastním skriptem. Funkční šipky v nadpisu sekce (posun o celé karty, zakázaný stav,aria-controls) jsou zatím jen v ukázce ve Storybooku. - Styly –
templates.css: doplněny.gov-block,.gov-responsive-imga tokeny--templates-width-max-*: Při přenosu z Fractalu chyběly dvě pomocné třídy a sada tokenů šířky..gov-block(pozadí--background-block-primary, vnitřní odsazení--spacing-l, zaoblení--corner-radius-l) je obal obsahu v šablonách stránek,.gov-responsive-imgzaobluje obrázky (--corner-radius-s). Tokeny--templates-width-max-xs(6.25rem) až--templates-width-max-4xl(50rem) platí pro všechny breakpointy,5xlaž8xlmají podsm50rema odsm56.25remaž75rem. Uvnitřtemplates.cssje nic nepoužívá; ve Storybooku ale chybějící token dělal zmax-width: var(--templates-width-max-4xl)neplatnou deklaraci a text šablon běžel přes celou šířku. Týká se balíčkustylesi kopietemplates.cssv balíčkutemplates. - Hlavička stránky (
.gov-page-heading, šablona) – sladění s Figmou: Hero obrázek (picture img) je oříznutý na poměr 128 : 75 (aspect-ratio: 128/75,object-fit: cover, plná šířka), anotace (.gov-text-content) má max. šířku50rem, tlačítka sdílení (.gov-social) nemají mezeru a seznamy.gov-icon-list,.gov-tagsa.gov-socialnemají v hlavičce svislé vnější okraje. Dopad: kdo používá markup hlavičky stránky stemplates.css, uvidí oříznutý obrázek a těsnější rozestupy. - Styly – granulární soubory obsahují i
data-*selektory: Selektory[data-size],[data-disabled]a[data-open], které React implementace používá místo rezervovaných atributů, se dosud doplňovaly jen do souhrnnéhocomponents.css. Nově je build doplňuje do každého souboru@gov-design-system-ce/styles/components/gov-*.css, takže React komponenty mají správné styly i při importu stylů po jednotlivých komponentách. Souhrnnýcomponents.cssse nemění. - Dokumentační web –
gov-dialogse otevíral prázdný: V produkčním (SSR) buildu dokumentace segov-dialogotevřel prázdný a jeho slotovaný obsah se vysypal nad dialog. Web-komponenty se registrovaly už při načtení modulu, před hydratací Vue, a hydratace zahodila pomocný komentář, podle kterého Stencil přesouvá slotovaný obsah komponent bez shadow DOM. Registrace (defineCustomElements()) nově proběhne až po hydrataci (onMounted+nextTick). Knihovna se nemění; stejný problém ale může mít každá Vue nebo Nuxt SSR aplikace, která komponenty registruje před hydratací. - Dokumentační web – levé menu ztrácelo pozici posunu: Na desktopu nemělo menu vlastní posuvnou oblast, takže se po každém přechodu mezi stránkami vrátilo na začátek. Menu je nově lepivé (
sticky) s vlastní posuvnou oblastí, pozici posunu si ukládá dosessionStoragea po načtení ji obnoví, případně posune aktivní položku do viditelné části menu. - Dokumentační web – zvýraznění syntaxe v tmavém režimu: Tmavá paleta ukázek kódu se ve skutečnosti neuplatňovala. Ukázky nově v tmavém režimu (a v režimu auto při tmavém nastavení systému) používají tmavou paletu; palety jsou
github-light-high-contrastagithub-dark-defaulta splňují kontrast WCAG AA (nejméně 4,5 : 1). Uložené téma se nastaví skriptem v hlavičce stránky ještě před prvním vykreslením, takže světlý režim neprobliká, alang="cs"je nově přímo v HTML místo dodatečného nastavení skriptem. - Fractal – písmo a obrázky na webu šablon: Na nasazeném webu Fractalu (
designsystem.gov.cz/templates) minul přepis cest na prefix/templatestři zdroje: místo souboru s písmem Roboto se vracela záložní HTML stránka, ikony PWA zesite.webmanifesta obrázek v ukázce stepperu vracely 404. Cesty jsou nově relativní, případně zapsané tak, aby je přepis zachytil. Publikovaný balíček@gov-design-system-ce/templatesse funkčně nemění.
Přístupnost
- Stránkování (
gov-pagination, ReactGovPagination) – tlačítko aktuální stránky nesearia-current="page"místoaria-current="true", takže čtečka obrazovky ohlásí „aktuální stránka“, ne jen „aktuální“. Ostatní stránkyaria-currentnemají. Styly se nemění (aktuální stránku značí třída.is-active); vlastní CSS nebo testy cílící na[aria-current="true"]je potřeba upravit. - Skeleton (
gov-skeleton, ReactGovSkeleton) – skeleton bez přístupného názvu je dekorativní (aria-hidden="true") a není v pořadí tabulátoru, roliprogressbardostane jen pojmenovaný skeleton. Podrobnosti a migrace viz Breaking changes a migrace. - Šablony stránek ve Storybooku – opravy nalezené novými a11y testy: Dvanáct šablon (Aktuality, Centrum podpory, Článek, Domovská stránka, Kariéra, Kontakty, Mapa webu, O nás, Organizační struktura, Povinně zveřejňované informace, Pro média a Výsledky vyhledávání) má nové testy přístupnosti: axe ve světlém i tmavém režimu a podle šablony i kontrolu landmarků, jedinečnosti id, platnosti ARIA odkazů, fokusu uvnitř
aria-hiddena osnovy nadpisů. Odložené nálezy (např. nadpisyh5ve sloupcích patičky) jsou zapsány vtests/a11y/known-violations.md. Týká se jen ukázek ve Storybooku, publikované balíčky se nemění. Opravy v markupu ukázek:- Hlavička stránky (jednoduchá i komplexní) – drobečková navigace už není skrytá atributem
aria-hidden="true"(obsahovala fokusovatelné odkazy) a neseaccessible-label="Drobečková navigace". - Komplexní hlavička stránky – ikony data a autora jsou dekorativní (
aria-hidden) a popisky „Datum publikace:“ a „Autor článku:“ jsou ve skrytém textugov-sr-only. - Duplicitní id nadpisu obsahu (Povinně zveřejňované informace, Organizační struktura, Článek, Centrum podpory) – mobilní obsah stránky má vlastní prefix id, takže se
idneopakuje a<aside aria-labelledby>se pojmenuje viditelným desktopovým nadpisem. - Úrovně nadpisů – nadpis obsahu v šablonách Článek, Centrum podpory (FAQ bloky) a Kariéra (Detail pozice) je
h2místoh3; desktopový nadpis je holý<h2>bez třídy, takže přebírá větší typografiih2. Nadpisy karet v šabloně Kontakty a karet pozic v šabloně Kariéra jsouh2místoh3beze změny vzhledu (typografii nesegov-card__headline). - O nás – doplněno chybějící uzavření
</main></gov-container>, takže patička už není vnořená v<main>ani v kontejneru a stránka má landmarkcontentinfo. - Kariéra – ikony s
aria-labelve sdíleném seznamu ikon nesourole="img"(týká se všech šablon se seznamem ikon) a vyhledávací formulář má idkariera-searchmísto duplicitníhosearch. - Pro média – karty tiskových zpráv generují platné
<time datetime>i pro datum ve tvaru „10. prosince 2024“ (dosud vznikalodatetime="undefined- prosince 2024-10"). - Výsledky vyhledávání – přístupný název nese jen první skeleton v každé oblasti, popisek prázdného stavu je opraven na „Nebyly nalezeny žádné výsledky“ a dokumentace šablony má sekci Přístupnost.
- Hlavní navigace (skript ve Storybooku) – napojení
aria-controls/aria-expandedčeká na skutečnou hydrataci tlačítka mobilního menu místo pevné prodlevy.
- Hlavička stránky (jednoduchá i komplexní) – drobečková navigace už není skrytá atributem
React wrapper
Balíček @gov-design-system-ce/react je posunut ze 4.7.0 na 4.7.1 souběžně s ostatními balíčky. Odstranění propu disabled u GovWizardItem, zúžení typu color u GovInfobar (bez secondary) a nové chování GovSkeleton bez přístupného názvu jsou popsány v části Breaking changes a migrace, prop icon u GovBanner v části Změny.
Opravy
- ID prvků přes
useId()– nesoulad při SSR hydrataci:GovFormInput,GovFormTextarea,GovFormSelect,GovFormCheckbox,GovFormRadio,GovFormSwitch,GovFormRange,GovFormMessage,GovChip,GovDialog,GovCollapsible,GovTabsaGovPaginationgenerovaly ID prvků přesMath.random()přímo při vykreslení. Při SSR (např. Next.js) se tak ID ze serveru a z klienta lišila, React hlásil nesoulad při hydrataci a vazbyaria-labelledby,aria-describedby,aria-controlsilabel[for]mohly ukazovat na neexistující prvky. ID nově vzniká ze sdíleného hookuuseElementId(prefix, identifier?)nad ReactovýmuseId(), explicitníidentifiermá přednost.GovFormCheckbox,GovFormRadioaGovFormSwitchnově předávají slotovanému popisku výsledné ID včetně explicitníhoidentifier, takželabel[for]odpovídá inputu. Dopad: tvar generovaných ID se mění zPrefix-<náhodné hex skupiny>naPrefix-<výstup useId()>(uGovTabsGovTabContent-<useId>-<index>); formát závisí na verzi Reactu (:r0:v React 18 a 19.0,«r0»v 19.1,_r_0_od 19.2). Na generovaná ID nespoléhejte v CSS; proquerySelectorv Reactu 18 a 19.0 použijteCSS.escape(). Ostatní komponenty (GovBreadcrumbs,GovDropdown,GovFormAutocomplete,GovFormFile,GovFormMultiSelect,GovStepperItem,GovToast,GovTooltip(spouštěč tooltipu),GovUserNavigationaGovWizardItem) zatím generují ID postaru a při SSR mohou nesoulad dál způsobit. GovButton–identifierse vykresluje jakoid: Propidentifierbyl deklarovaný, ale nevykresloval se: propadl do zbylých atributů jako doslovný atributidentifier, takže tlačítko nemělo žádnéid. Tím se rozpadala i vazbaaria-labelledbyvGovCollapsible, který spouštěč vykresluje přesGovButton. Nově se na<button>i na odkazové variantě<a>vykreslíidzidentifier, případně zid; pokud jsou zadány oba, má přednostidentifier.'use client'uGovDialog,GovTabs,GovCollapsible,GovPaginationaGovUserNavigation: Moduly používaly React hooky a API prohlížeče bez direktivy'use client', takže je Next.js App Router považoval za serverové komponenty a jejich vykreslení ze serverové komponenty skončilo chybouTypeError: useState is not a function. Direktivu mají nověGovDialog,GovTabs,GovCollapsibleaGovPaginationi hookuseElementId; kompilace ji vdistzachovává. CI nově kontroluje direktivu ve zdrojích i v sestaveném balíčku. Stejnou direktivu dostala i exportovanáGovUserNavigation, jejíž vykreslení ze serverové komponenty padalo stejně. Pro jistotu ji mají i interní moduly s hooky, které kontrola odhalila (useTooltip,useTooltipState, stav našeptávače a obauseClickOutside); ty se z balíčku neexportují a importují je jen komponenty, které direktivu už mají, takže samy chybu nezpůsobovaly.GovLink–externalnastavujetargetarel: Propexternaldosud jen vykreslil ikonu externího odkazu; odkaz se otevřel ve stejné záložce a cizímu webu poslal hlavičkuReferer. Nově, stejně jako webová komponentagov-link, nastaví na vnitřním<a>target="_blank"arel="noreferrer". Dopad:<GovLink external>se otevírá v nové záložce;targetpředaný spolu sexternalse ignoruje a vlastnírelse přepíše nanoreferrer.GovSkeleton– role a tab stop jen s přístupným názvem, předáváonClick: React implementace je samostatnýdiva nově se chová stejně jako webová komponenta:role="progressbar",aria-busy,aria-valuemin/aria-valuemaxatabIndex={0}dostane jen při neprázdnémaria-labelneboaria-labelledby, jinakaria-hidden="true". Deklarovaný, ale dosud zahazovanýonClickse nově předává.
Přístupnost
GovPagination– tlačítko aktuální stránky nesearia-current="page"místoaria-current="true", shodně s webovou komponentou.
v4.7.0
Balíčky @gov-design-system-ce/core, styles, icons a templates; React balíček (@gov-design-system-ce/react) má vlastní řadu verzí a je popsán v samostatné části na konci.
Breaking changes a migrace
- Cookie lišta (
gov-cookiebar) – zneplatněné propy:label-cookie-details,label-cookie-name,label-cookie-provider,label-cookie-purposealabel-cookie-expirationjsou ponechány pro zpětnou kompatibilitu, ale nic nedělají — všechny patřily k odstraněné tabulce jednotlivých cookies. Pokud je používáte, nahraďte je propylabel-privacy+privacy-url; jinak není potřeba nic měnit. - Chip (
gov-chip) –geRef()→getRef(): imperativní metoda s překlepem v názvu je přejmenována, čímž se komponenta sjednocuje se všemi ostatními (tygetRef()vystavují už dnes). Konzumenti volajícíchipEl.geRef()— přímo nebo přes seznam proxy metod v Angularu — musí přejít nachipEl.getRef(). Signatura a návratová hodnota se nemění (Promise<HTMLLinkElement | HTMLSpanElement | HTMLButtonElement>), změnil se jen název. - React – viditelná změna vzhledu a požadavek na verzi stylů: React implementace nyní vydává atributy, na které
components.cssskutečně cílí, takže se výstup React komponent vykreslí správně — ale viditelně jinak než dosud. Po aktualizaci si překontrolujte dotčené obrazovky. Balíček@gov-design-system-ce/reactzároveň vyžaduje@gov-design-system-ce/stylesve verzi 4.6.4 nebo vyšší; se starší verzí stylů se komponenty vykreslí nesprávně. - Banner (
gov-banner) – odstraněna variantaforeground="logo", výchozí hodnota jeicon: Dekorativní lev v pozadí banneru byl odebrán na základě rozhodnutí UX/UI (banner ho zobrazovat nemá). Hodnotalogoje odstraněna z výčtuBannerForegroundi z SCSS ($shared-foregrounds), takže ji@Watchvalidátor nově odmítne varováním o neplatné hodnotě, a výchozí hodnota propuforegroundse mění zlogonaicon— sourozenecká varianta se stejnou cestou vykreslení a stejným pozicováním u velikostis. Dopad: bannery, kteréforegroundneuvádějí, se vykreslí s dekorativní ikonou místo lva; bannery seforeground="logo"přijdou o dekoraci úplně a je třeba je přepsat naicon(dekorativní grafika bez obrázku) neboimage(vlastní obrázek ve slotuimage). Variantaimagea velikostxl, kteráforegroundvůbec nepoužívá, zasaženy nejsou. - Styly – odebrány varianty
html/*z balíčku@gov-design-system-ce/styles: Soubory@gov-design-system-ce/styles/html/…už balíček neobsahuje a zmizely i z mapyexports(z 204 položek na 97). Vybíraly varianty komponent výhradně přes atributydata-*, které ale žádný z wrapperů nerenderuje — komponenty s nimi měly správné rozměry a žádnou barvu. Dokumentace je přitom pro React doporučovala. Pokud je používáte, přepište importy na kořenové cesty (@gov-design-system-ce/styles/components.cssatd.); do té doby build skončí chybou o nenalezeném modulu. Generátorpackages/styles/attributes.mjsbyl odstraněn z buildu.
Změny
- Cookie lišta (
gov-cookiebar) – redesign: Podrobné nastavení kategorií se přesunulo z rozbalovacího panelu uvnitř lišty do modálního okna (gov-dialog), samotná lišta je nyní plovoucí karta ukotvená vlevo dole a tabulka jednotlivých cookies byla nahrazena jedním odkazem na zásady zpracování osobních údajů. Doplněna podpora tmavého režimu a responzivní chování. Veřejné API zůstává beze změny — metodygetConsent()ashow()i událostgov-consentmají stejné signatury.- Nové propy:
label-settings-title(titulek modálu),accessible-close-label(popisek zavíracího tlačítka modálu),label-always-on(text chipu u zamčené kategorie),label-privacyaprivacy-url(text a cíl odkazu na zásady zpracování). - Odkaz na zásady se vykreslí pouze tehdy, když aplikace dodá neprázdný
privacy-url— komponenta už nevytváří „mrtvý" odkaz na#. - Fokus po otevření: pokud jsou nastavené kategorie, přebírá fokus past fokusu v
gov-dialog; bez kategorií se fokus nastaví na samotnou lištu. - Pozicování je nyní řízené jedním lokálním tokenem
--gov-cookiebar-inset(insetshorthand +max-width: 45rem) místo opakovanýchcalc()řetězců pro každý breakpoint. Vzhled je identický a token lze přepsat z aplikace.
- Nové propy:
- Toast (
gov-toast) – ukazatel odpočtu běží zleva doprava: tmavší překryv (.gov-toast__timer) se plní od levého okraje doprava a plné šířky dosáhne přesně ve chvíli, kdy se toast sám zavře. Dříve začínal na plné šířce a zprava se zkracoval. Ukazatel se navíc vykresluje jen tehdy, když odpočet skutečně běží (time > 0) — trvalé toasty (time = 0) ho neobsahují vůbec. Barvy, tokeny ani levý akcentsubtlese nemění. - Toast (
gov-toast) – odpočet respektujeprefers-reduced-motion: při zapnutém omezení pohybu se animace plnění vypne a překryv se skryje (místo aby nad toastem zamrzl v mezistavu). Toast se přitom stále zavře v naplánovaném čase — časovač v JS je na CSS animaci nezávislý. - Styly – nový opt-in balík
templates.css: styly šablon (header, footer, karty, tabulky, filtry, galerie, obsah stránky, mapa a další, včetně pomocných tříd a tokenů--component-footer-*) jsou nově kompilované do samostatného balíku@gov-design-system-ce/styles/templates.css. Do hlavníhocomponents.cssse nedostanou — kdo šablony nepoužívá, nic navíc nestahuje. Jde o postupný přenos stylů z původního balíčku šablon (Fractal) do design systému. - Tabulka (šablona) – modifikátor
--no-border:gov-table-complexumí vypnout vnější rám obalu tabulky. Součást opt-in balíkutemplates.css, nikoli hlavníhocomponents.css; komponenta se nemění. - Ikony – 15 nových ikon v sadě
components:eye-slash(skryté heslo vgov-form-input),cookie(odznak pro znovuotevření cookie lišty),link,clock-history,arrow-up,envelope,facebook,instagram,linkedin,youtubea pět ikon typů souborů (file-earmark,filetype-pdf,filetype-xls,filetype-png,filetype-jpg). Zdrojem je Bootstrap Icons (MIT), převedeno do konvence sady (fill="none"/path[fill="currentColor"]). Šablony na ně dříve odkazovaly přes neexistující sadutemplates, takže se vykreslovaly prázdné. - Šablony – nová šablona cookie lišty: organismus
cookiebardemonstrující komponentugov-cookiebar, aktualizovaný pro redesign. - Záložky (
gov-tabs) – vyhledávání potomků:gov-tabs-itemse dohledávají filtrem přímých potomků místo kombinátoru:scope >. Chování je identické (stále jen přímí potomci, vnořené záložky vyloučené), odpadá jen závislost na selektoru:scope. - Ukázkové projekty (skeletony): Pro každé prostředí (čisté HTML, React, Angular, Vue) vznikl minimální skeleton — jedna stránka, několik komponent, nic k mazání. Instalují design systém z registru jako běžná aplikace, takže jako první věc v projektu ověřují i obsah publikovaných balíčků. Odkazy najdete na stránce Pro vývojáře.
provideGovDesignSystem()pro Angular: Nová funkce pro standalone aplikace. Dosud bylo jedinou zdokumentovanou cestou naimportovatGovDesignSystemModule, což ve standalone komponentě přinese direktivy, ale zahodí providery — komponenty se nikdy nezaregistrovaly a vykreslily se jako neaktivní elementy s holým textem, bez jakékoli chyby v konzoli.GovDesignSystemModulefunguje beze změny, aplikace založené na NgModulech nemusí nic upravovat.@gov-design-system-ce/vue— mapaexports: PluginComponentLibraryje nově dostupný jako@gov-design-system-ce/vue/plugin. Dosud šel naimportovat jen hlubokou cestou@gov-design-system-ce/vue/dist/plugin, protože balíček nemělexportsaindexplugin nereexportoval. Původní zápis zůstává funkční.- Dokumentace pro vývojáře přepsána do češtiny a doplněna o rozdíly mezi jednotlivými wrappery — mapování slotů na props v Reactu, povinné
isCustomElementve Vue, nastaveníassetsastylesv Angularu. - Odebrány stránky pro Next.js a Nuxt.js: Pro tato prostředí neexistuje skeleton ani ověřený postup, takže návody byly odstraněny místo toho, aby popisovaly nevyzkoušené nastavení. Pro Next.js platí návod pro React, pro Nuxt návod pro Vue.
Opravy
- Rozbalovací seznam (
gov-form-select) – ve Firefoxu byly skryté možnosti: komponenta obsahovala pravidlogov-form-select option:not([selected]) { display: none }, kterým se předstíralo zobrazení vybrané hodnoty. Firefox aledisplayna<option>uvnitř nativního<select>respektuje, takže se v rozbaleném seznamu skryly všechny nevybrané položky a nabídka vypadala jako jednoprvková. CSS hack je odstraněn a vybraná hodnota se nyní synchronizuje imperativně na nativním elementu (syncSelectValue()zconnectedCallbacka z@Watchnadvalue), takže nativní nabídka vykreslí celý seznam ve všech prohlížečích. Veřejné API (propy / události / sloty) se nemění. - Cookie lišta (
gov-cookiebar) – rozpad karty při přepsání pozicování: Kořenové pravidlo komponenty nedeklarovalodisplay, takže blokové zobrazení bylo jen vedlejším efektemposition: fixed. Jakmile aplikace pozicování přepsala (např.position: static, aby se lišta zobrazila v běžném toku stránky), vlastní element se vrátil k výchozímudisplay: inlinea pozadí, zaoblení i stín se vykreslily zvlášť pro každý řádek — karta se opticky rozpadla na barevné fragmenty. Doplněno explicitnídisplay: block; výchozí vykreslení vposition: fixedje beze změny. - Dialog (
gov-dialog) – past fokusu u dialogu otevřeného při načtení: dialog vykreslený hned jako otevřený (open="true"při prvním renderu) nyní nastaví past fokusu — přesune do sebe fokus a nainstaluje obsluhu klávesnice (cykleníTab+ zavřeníEscape). Dříve tato logika žila jen v@Watch('open'), který Stencil spustí při změně propu, ne pro jeho počáteční hodnotu, takže čerstvě otevřený dialog nechal fokus na<body>a neměl klávesovou past. Zároveň byla opravena podmínka vefocusTrap(), která se odkazovala na globálníopen(window.open, vždy truthy) místothis.open. Právě díky tomu funguje u cookie lišty cesta „znovu otevřít z odznaku s kategoriemi" — ta vytvářígov-dialogznovu sopen=true. - Textové pole (
gov-form-input) – tlačítko odhalení hesla ukazuje stav: ikona se přepíná mezieye-slash(skryto) aeye(odhaleno) a tlačítko nesearia-pressedodpovídající stavu. Podle vzoru WAI-ARIA pro přepínací tlačítko jearia-labelnově statický neutrální „Zobrazit heslo" (accessible-show-password-label) místo přepínání mezi dvěma popisky, takže čtečka stav oznámí jednou (přesaria-pressed), ne dvakrát. Propaccessible-hide-password-labelje zachován pro kompatibilitu API. - Našeptávač (
gov-form-autocomplete) –throttle-timese ignoroval: debounce vestavěný do komponenty nefungoval, protože se obsluha vstupu vytvářela znovu vrender()při každé změně stavu a časovač se tím pokaždé resetoval.searchCallbackse nyní volá jednou za nastavené okno, jak dokumentace uvádí, místo při každém stisku klávesy. - Grid item (
gov-grid-item) –col-span/row-spanve frameworcích: propycol-spanarow-span(i responzivní variantycol-span-{sm,md,lg,xl}/row-span-{sm,md,lg,xl}) se nově propisují do atributů hostitele. SCSS na těchto atributech stavígrid-column/grid-row, ale propy se nepropisovaly — takže integrace, které hodnotu nastavují jako property (Vue proxydefineContainer, Angular vazba[column]), atribut nikdy nezapsaly a buňka spadla nagrid-column: autobez rozpětí. Konzumenti pracující s atributy (čisté HTML, ručně psaná React implementace) zasaženi nebyli. Veřejný kontrakt se nemění. - Empty (
gov-empty) – validace propusize:@Watchvalidátor porovnával hodnotu protiAccordionSizes(xs–xl) místo vlastníhoEmptySizes(s/m/l) a varování logoval pod názvem komponentygov-accordion— zbytek po kopírování. Nyní validuje správný výčet a loguje jakogov-empty. - Stránkování (
gov-pagination) – výchozítypese dočasně změnil a je vráceno zpět: mezi verzemi se výchozí hodnota proputypezměnila zbuttonnaselecta přidala se hodnotaclassic; obojí je vráceno —typemá opět výchozíbuttonaclassicje z výčtu (i z React wrapperu, Storybooku, šablon a ukázkových aplikací) odstraněno. Pro konzumenty je čistý dopad nulový; záznam je zde jen kvůli dohledatelnosti a proto, aby bylo zdokumentováno, že hodnotaclassicnikdy nevyšla. @gov-design-system-ce/reactnedeklarovaltslib: Sestavený balíček obsahujeimport { __rest } from "tslib"v deseti souborech (důsledekimportHelpers: true), aletslibnebyl uvedený mezi závislostmi. Instalace z registru tak mohla skončit chybouRolldown failed to resolve import "tslib". Ukázkové aplikace v monorepu problém nezachytily, protože wrapper aliasují na zdrojové soubory.@gov-design-system-ce/vuenedeklaroval@stencil/vue-output-target: Sestavenýdist/index.jsz něj importujedefineContainerza běhu, ale balíček ho neuváděl mezi závislostmi. Stejná příčina zamaskování jako výše —packages/sample-vuesi závislost deklaruje sám.@gov-design-system-ce/vuenedeklarovalvuejako peer dependency: Doplněnovue ^3.4.0. Správci balíčků tak mohou Vue správně deduplikovat a upozornit na nekompatibilní verzi.@gov-design-system-ce/vuese publikoval bez kódu: Balíček deklarujefiles: ["dist"], aledistse nesestavoval, takže archiv obsahoval pouzepackage.jsonaREADME.md. Doplněno sestavenícore-reactacore-vuedo build skriptu.@gov-design-system-ce/styles— chybný klíčpublishConfig: Klíč byl zapsán jakopublishonfig, takže se nastaveníaccess: publicneuplatnilo.- Dokumentace nesprávně doporučovala pro React styly
html/*: Variantahtml/*vybírá varianty komponent výhradně přes atributydata-*, zatímco React wrapper renderuje atributy bez prefixu. Komponenty proto měly správné rozměry a žádnou barvu. Správné jsou kořenové soubory stylů, které používá ipackages/sample-react. - Dokumentace nesprávně popisovala kopírování ikon: Uváděný příklad kopíroval všechny ikony do jediného adresáře (
--flat), alegov-iconje stahuje z cesty${iconsPath}/${type}/${name}.svg. Při zploštění struktury skončí každá ikona chybou 404, aniž by se cokoli objevilo v konzoli. Podadresářecomponents,complexacoloredmusí zůstat zachované. - Dokumentace nesprávně odůvodňovala rozdělení stylů Shadow DOM: Žádná komponenta design systému Shadow DOM nepoužívá.
- Dokumentace neuváděla výchozí hodnotu
iconsPath: Skutečná výchozí hodnota je/assets/icons, nikoli./assets/icons. Doplněny také dosud nezdokumentované volbywarningLog,errorLogalog. - Dokumentace – nefunkční odkazy na stránce Přístupnost webových stránek: Odkazy „Vzorové prohlášení o přístupnosti" a „Jak vyplnit prohlášení o přístupnosti" mířily na PDF v
dia.gov.cz/wp-content/uploads/…, které DIA stáhla (obojí 404). Nahrazeny jedním odkazem na průběžně udržovanou stránku Prohlášení o přístupnosti | DIA. - Dokumentace – odkaz na zákon č. 99/2019 Sb. vedl na stažené PDF: Odkaz v kapitole WCAG mířil na PDF se zněním zákona na
dia.gov.cz(404). Nyní vede do e-Sbírky, tedy na oficiální a aktualizované znění. - Dokumentace – ukázková URL v SEO manuálu se vykreslovala jako odkazy: VitePress má ve výchozím nastavení zapnutý
linkify, takže z placeholderů psaných jako běžný text (https://domena.cz/sitemap.xml,domena.cz/stranka/?utmparametr=1,http://www.example.com/robots.txt) dělal klikatelné odkazy —domena.czpřitom vrací 403. Placeholdery jsou nově zapsané jako inline kód, takže se nelinkují. - Dokumentace – odstraněn odstavec odkazující na ukončený projekt PMA3: Stránka Pravidla pro umisťování loga doporučovala jako vzor web
pma3.gov.cz, který byl po ukončení projektu stažen (502). Odstavec je odstraněn bez náhrady. - Dokumentace – mrtvý odkaz na sadu ikon Material: Stránka Ikony odkazovala v seznamu dalších zdrojů na
material.io/tools/icons/?style=baseline. Adresa přesměrovává nafonts.google.com/icons?selected=Material+Icons, která vrací 404. Nahrazeno odkazem na Material Symbols — sada je dnes distribuovaná právě tam, takže je upraven i název položky. - Dokumentace – zastaralá a zaměněná sekce Google Analytics v SEO manuálu: Text psal v budoucím čase, že „Google však tuto verzi bude vypínat k 1. 7. 2023", ačkoli Universal Analytics je vypnutý; přeformulováno do minulého času s GA4 jako aktuální verzí. Navazující věta „Více o postupu nasazení Google Search Console…" byla navíc v sekci Google Analytics a odkazovala na nápovědu Search Console — zbytek po kopírování, protože identická věta stojí správně i o dvě sekce níž. Nyní odkazuje na nastavení Google Analytics. Odkazy na nápovědu Google samotné funkční byly;
support.google.comjen odpovídá 404 na HTTP metodu HEAD, takže je automatické kontroly odkazů hlásí falešně.
Přístupnost
- Záložky (
gov-tabs) – kontejnerrole="tablist"držel spouštěčerole="tab"uvnitř vloženého<ul>/<li>, čímž se rozpadala povinná vazbatablist→tab(kritické nálezy axearia-required-children/aria-required-parent). Strukturální<ul>/<li>nyní nesourole="presentation", takže semantika seznamu kontrakt tablistu nepřerušuje; vizuálně beze změny. Stejná oprava provedena i v React implementaci. - Informační lišta (
gov-infobar) –aria-hiddenu rozbalovacího obsahu byl invertovaný: ve složeném stavu se obsah asistivním technologiím hlásil jako viditelný a v rozbaleném jako skrytý. Nyní odpovídá skutečnému stavu a atributuhidden. - Zaškrtávací pole (
gov-form-checkbox) – nerozhodnutý (indeterminate) stav nyní hlásíaria-checked="mixed"místo"false", podle vzoru WAI-ARIA pro třístavový checkbox. - Multi-select (
gov-form-multi-select) – seznam vybraných položek je prezentační výčet odebíratelných chipů, ne widget pro výběr. Odstraněny nesprávné rolelistbox/option(každý chip obsahuje tlačítko pro odebrání, což axe hlásil jakonested-interactive, a seznam neměl přístupný název). - Našeptávač (
gov-form-autocomplete) – vnitřní input nyní používárole="combobox"(dřívesearchbox, který nepovolujearia-expanded/aria-owns) a komponenta předává svůjidentifierdoidvnitřního inputu, takže spárovanýgov-form-labelposkytne přístupný název. Týká se igov-form-multi-select, který našeptávač obsahuje. - Range (
gov-form-range) – číselné pole vedle posuvníku (vykreslené při nastavenéminput) nemělo přístupný název, nyní nesearia-label. - Dialog (
gov-dialog) – přístupný popisek zavření se vykresloval jakoaria-label/aria-labelled-bypřímo na hostiteli<gov-backdrop>bez role, místo aby se předal propy komponenty. axe hlásil dva vážné nálezy WCAG 2.1 AA (aria-prohibited-attra překryv srole="button"bez přístupného názvu). Popisek se nyní dostane na vnitřní tlačítko správnou cestou. - Loading (
gov-loading) – překryvgov-backdrop(vykreslující vnitřnírole="button") neměl přístupný název a porušoval pravidlo axearia-command-namena každé stránce s loaderem. Nyní dostáváaccessibleLabel="Loading". - Chip (
gov-chip) a Backdrop (gov-backdrop) –aria-disabledse serializuje na"true"/"false"místo prázdného atributu. Surová boolean hodnota se vázala přímo, což Stencil vykreslil jakoaria-disabled=""; nyní prochází pomocnou funkcí stejně jako u referenčníhogov-button.
React wrapper
Pozor při aktualizaci
Tato verze mění vzhled výstupu React komponent – k lepšímu, ale viditelně. Po aktualizaci si překontrolujte dotčené obrazovky. Balíček @gov-design-system-ce/react zároveň vyžaduje @gov-design-system-ce/styles ve verzi 4.6.4 nebo vyšší; se starší verzí stylů se komponenty vykreslí nesprávně.
Balíček @gov-design-system-ce/react má vlastní řadu verzí – v4.7.0 vyšla souběžně s core / styles v4.6.4.
Upgrade z 3.4.0 na 4.7.0: Balíček je posunut z 3.4.0 (poslední publikovaná verze) na 4.7.0, čímž je zarovnán s verzí zbytku monorepa. Jde o první publish ve 4.x linii — stejný krok, jaký proběhl u @gov-design-system-ce/vue ve verzi 4.6.3. Veřejné API se nemění; verze 3.4.0 už měla stejnou podobu komponent a závisela na @gov-design-system-ce/components@^4.2.9.
Změny
- Odstraněn systematický rozpor mezi React implementací a
components.css: React komponenty nejsou proxy nad Web Componentou, ale samostatná implementace vykreslující light-DOM markup. Ta ale vydávala atributy s prefixemdata-(data-size,data-color,data-invalid…), zatímcocomponents.csscílí na prosté atributy ([size],[color],[invalid]…). Audit všech 48 komponent našel 38 dotčených. Oprava vydává atributy deklarativně přímo na kořenovém elementu: atributy, které React 19 na<div>/<span>zachová, se předávají prostě; tři atributy, které React zahazuje (size,disabled,open), se vydávají jakodata-size/data-disabled/data-openacomponents.cssje od v4.6.4 umí obsloužit také (viz níže). Řešení je SSR-korektní a nezpůsobuje probliknutí při prvním vykreslení. Signatury propů se nemění. components.cssrozšířeno odata-*varianty selektorů (součáststylesv4.6.4): ke každému selektoru cílícímu na rezervovaný atribut ([size],[disabled],[open]) přibyl dvojník sdata-prefixem, takže jedna sada stylů obsluhuje jak Web Componentu / Vue / Angular / čisté HTML (prosté atributy), tak React implementaci. Pouze přidává – stávající selektory jsou beze změny.gov-form-control– nové propyinvalidadisabled: validační a zakázaný stav nešel z Reactu vůbec vyjádřit. Nyní se propisuje do atributů[invalid]/[disabled], které přebarvují popisek a ztlumují ovládací prvek.- Cookie lišta – vlastní React implementace:
gov-cookiebarmá nově React reimplementaci odpovídající redesignu — vestavěné akce, ukládání souhlasu do cookie a nastavení kategorií v modálním okně (gov-dialog).
Opravy
Následující komponenty se v Reactu vykreslovaly nesprávně nebo vůbec:
gov-buttonignorovalosize– každé tlačítko se vykreslilo ve výchozí velikostim.disablednyní prvek jak ztlumí, tak zablokuje interakci (nativnídisabledna vnitřním<button>,aria-disableda zamezená navigace u odkazové varianty). Fungují iexpanded/expanded-mobile(plná šířka) aloading(rotující indikátor).gov-dialogbylo trvale neviditelné – nenastavovalo tříduhydratedani atributopen, na kterýcomponents.cssváže zobrazení.gov-form-input/gov-form-checkboxneaplikovalysize(výchozím) aniinvalid– odtud ~17px vysoký input se zdvojeným rámečkem a zaškrtávací pole o rozměru 0 × 0.gov-theme-switchneaplikovalthemeanisizea smrskl se na ~2 px.gov-form-switchbyl vizuálně nefunkční – nepropisovalsize/checked/invalid/disabledani modifikátor__no-label;sizenavíc nyní defaultuje namjako ve Stencil zdroji (bez velikosti se indikátor nevykreslil vůbec).gov-chipbyl zcela bez stylu (neaplikovalsize/type/color/disabled).gov-tabsneaplikovalosize/type/colora neoznačovalo panely jakohydrated, takže obsah záložek byl skrytý.gov-loading/gov-skeletonnespouštěly animaci (chybné třídy animací).gov-badgenevydávaldata-sizeani prostécontent, takže se neuplatnila ani velikost, ani variantycontent=empty|icon|number.- Slotované ikony a nadpisy se nevykreslovaly se stylem u
gov-empty,gov-error-code,gov-infobar,gov-link,gov-banner,gov-blockquote– chyběl jim atributslot, který CSS selektory vyžadují. - Propis prostých atributů (dříve
data-*) opraven u dalších 31 komponent:gov-accordion,gov-accordion-item,gov-avatar,gov-backdrop,gov-badge,gov-banner,gov-card,gov-collapsible,gov-control-group,gov-empty,gov-flex,gov-form-control,gov-form-group,gov-form-label,gov-form-message,gov-form-password-power,gov-form-radio,gov-form-range,gov-form-search,gov-form-select,gov-form-textarea,gov-grid,gov-grid-item,gov-icon,gov-link,gov-loading,gov-message,gov-pagination,gov-spacer,gov-tag,gov-tile. gov-tile– velikost šipky (chevronu) opravena souběžnou úpravou vcore(gov-tile.scssnyní cílí i na třídní selektor.gov-icon), protože React vykresluje<span class="gov-icon">, na který se elementový selektor nechytil.GovButtonv odkazové variantě nevykresloval atributhref– odkazy neměly cíl.
Přístupnost
gov-collapsible– neplatný atributaria-controlpřejmenován naaria-controls.gov-dialog– překryv pozadí (gov-backdrop, který vykresluje vnitřnírole="button") neměl přístupný název, protože se předával přes chybné názvy propů. Nyní se název odvozuje zaccessibleCloseLabel.gov-loading– vnořenému překryvu se předáváaccessibleLabel="Loading", takže jehorole="button"není bezejmenné.GovSkeleton– přijímá a předáváaria-label/aria-labelledbyna prvek srole="progressbar"; bez přístupného názvu takový prvek neprojde kontrolou přístupnosti.gov-form-range– číselné pole vedle posuvníku dostaloaria-label.gov-tabs– strukturální<ul>/<li>uvnitřrole="tablist"nyní nesourole="presentation", čímž se opravuje porušení vazbytablist→tab(kritické nálezyaria-required-children/aria-required-parent). Stejná oprava provedena i ve Stencil zdroji.