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.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ě. - 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.
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.