Timeline
Obsah
Úvod
Účel
Timeline (časová osa) zobrazuje postup nebo proces jako číslovanou posloupnost kroků rozdělenou do kategorií (fází). Kroky mohou probíhat ve dvou souběžných stopách – typicky „Musí“ (povinné kroky) a „Může“ (volitelné kroky) – a dva kroky mohou sdílet jedno pořadí. Boční navigace „Obsah“ ukazuje, ve které fázi se uživatel právě nachází, a umožňuje mezi fázemi přeskakovat.
Kde se používá
Komponenta je vhodná tam, kde uživatel potřebuje pochopit celý průběh vyřízení věci dřív, než začne. Typicky pro:
- postupy vyřízení žádostí (co musím udělat, co můžu udělat, v jakém pořadí),
- návody a metodiky s několika fázemi,
- harmonogramy projektů a připojování systémů (např. připojení AIS k ISZR).

Anatomie
- Začátek a konec (volitelné) – nadpis celého procesu („Podání žádosti“, „Vyřízeno“) se značkou na ose: šipka, tečka, vlastní ikona, nebo bez značky.
- Kategorie (fáze) – nadpis fáze („1. Příprava“) a nad osou volitelně názvy stop („Musí“ / „Může“). Osa fáze může končit šipkou dolů, nahoru, nebo bez šipky.
- Osa – tečkovaná svislá linka, na které leží číslované uzly kroků. Číslování pokračuje napříč kategoriemi.
- Krok – číslovaný uzel a karta (
gov-timeline-card) napojená na osu tečkovaným „kolínkem“. Karta obsahuje nadpis s ikonou, štítky (gov-tag), popis a volitelně jednu akci: buď tlačítko (gov-button) ve slotufooter, nebo je klikací celá karta (href) – nikdy obojí. - Sdílený krok – krok se dvěma kartami (jedna v každé stopě) má jeden uzel s kolínky na obě strany.
- Navigace „Obsah“ – seznam odkazů na začátek, všechny kategorie a konec. Aktuální sekce je zvýrazněná; zvýraznění sleduje posun stránky i posun obsahu, který roluje uvnitř vlastní oblasti (např. obsahová část aplikace s vlastním scrollováním).
Varianty
Výchozí varianta (columns="2"). Kroky leží vlevo a vpravo od osy podle stopy, do které patří; nad osou jsou názvy stop. Sdílený krok má jeden uzel s kartami po obou stranách. Varianta vyžaduje šíři obrazovky alespoň xl (1280 px), na užších obrazovkách se osa automaticky sbalí (viz Responzivita).

Pro procesy s jedinou stopou (columns="1"). Všechny karty leží vpravo od osy, nad osou je nejvýše jeden název stopy a karty nemají štítek stopy. Sdílené kroky jednosloupcová varianta nezná – každý krok má vlastní pořadové číslo. Karty jsou na širokých obrazovkách širší a celý blok je vycentrovaný.

S numbered="false" se uzly kroků zobrazí jako malé tečky bez čísel. Vhodné tam, kde na pořadí kroků nezáleží – pořadí pak nehlásí ani čtečka obrazovky.
Responzivita a mobile specifika
Timeline používá standardní breakpointy design systému:
| Šířka | Osa | Navigace „Obsah“ |
|---|---|---|
| xl (od 1280 px) | dvousloupcová osa se stopami vlevo a vpravo | boční panel vpravo, při scrollování zůstává viditelný |
| lg (992–1279 px) | dvousloupcová osa se sbalí do jednoho sloupce, karty mají pevnou šířku 490 px | boční panel |
| md (768–991 px) | sbalená osa, karty přiléhají k uzlům bez kolínka | boční panel |
| sm a menší (do 767 px) | sbalená osa | akordeon „Obsah“ nad osou |
Ve sbalené ose se každý krok zobrazí pod sebou a vpravo od osy. Protože poloha už nerozlišuje stopu, zobrazí se u každé karty její štítek („MUSÍ“ / „MŮŽE“). Ze sdíleného kroku se stanou dva samostatné uzly s čísly „N/1“ a „N/2“.


Přístupnost
- Struktura – časová osa je seznam (
role="list"), každá kategorie je jeho položka (role="listitem") s nadpisem (ve výchozím stavu<h2>, úroveň nastavíte atributemheadline-tag). - Kroky pro čtečky obrazovky – čísla v uzlech jsou čistě vizuální (
aria-hidden). Čtečka místo nich přečte skrytý text „Krok N:“ přímo v nadpisu karty (u sdíleného kroku „Krok N/1:“ a „Krok N/2:“), takže pořadí zazní spolu s obsahem kroku. Dekorativní prvky osy (linka, kolínka, šipky, značky začátku a konce) jsou před čtečkou skryté. Snumbered="false"se pořadí nehlásí vůbec. - Navigace – odkazy „Obsah“ jsou v landmarku
<nav>s přístupným názvem (accessible-nav-label, výchozí „Kategorie časové osy“) – na desktopu kolem seznamu odkazů, na mobilu kolem celého akordeonu, takže landmark je dostupný i se zavřeným akordeonem. Aktuální sekci označujearia-current="location"; první odkaz je aktuální už v serverově vykresleném markupu. - Ovládání klávesnicí – po aktivaci odkazu v navigaci se stránka posune na vybranou sekci, fokus se přesune na tuto sekci (
tabindex="-1") a aktualizuje se adresa (#kotva) – cesta stránky zůstane zachovaná i na stránce s<base href>(např. v Angularu). Uživatel klávesnice nebo čtečky tak pokračuje od vybrané sekce, ne znovu od navigace. - Omezení pohybu – při nastavení
prefers-reduced-motion: reducese stránka na sekci přesune bez animace a odkazy v navigaci mění stav bez přechodu. - Vysoký kontrast (Windows,
forced-colors) – prohlížeč v tomto režimu zahodí barvy pozadí, proto uzly kroků dostanou obrys, tečkovaná osa, spojnice a značky začátku a konce se kreslí systémovou barvou textu a aktuální odkaz v navigaci je zvýrazněný systémovou barvou výběru. - Interaktivní karty – karta je klikací buď celá (
href), nebo obsahuje akci ve slotufooter. Klikací karta nikdy neobsahuje další interaktivní prvek (odkaz, tlačítko,gov-button,gov-link, pole formuláře…). Pokud ho obsahuje, komponenta to oznámí varováním (viz Varování).
Pro vývojáře
Timeline tvoří čtyři webové komponenty: gov-timeline (osa, navigace), gov-timeline-category (kategorie, začátek a konec), gov-timeline-step (krok s jedním uzlem) a gov-timeline-card (karta kroku). Číslování, pozice v mřížce i odkazy v navigaci komponenta odvozuje z markupu, nic z toho nepíšete ručně.
Styly
Komponenta je stylovaná globálně ze styles.css / components.css balíčku @gov-design-system-ce/styles, žádný další stylopis (ani templates.css) nepotřebuje.
Vnější odsazení si komponenta nenastavuje, patří layoutu stránky (např. gov-container). Číslo kroku obklopuje prstenec v barvě pozadí, který zakrývá tečkovanou osu. Výchozí barva je --background-page. Když timeline leží na jiném pozadí (bílá sekce, karta, tmavý panel), nastavte na ni nebo na předka custom property --gov-timeline-surface na barvu tohoto pozadí:
.my-section {
--gov-timeline-surface: var(--background-block-primary);
}Použití
<gov-timeline columns="2">
<!-- Začátek procesu -->
<gov-timeline-category cap="start" headline="Podání žádosti" marker="arrow"></gov-timeline-category>
<gov-timeline-category headline="1. Příprava" nav-label="Příprava" label-left="Musí" label-right="Může">
<!-- Krok s jednou kartou (strana podle atributu side kroku) -->
<gov-timeline-step side="left">
<gov-timeline-card headline="Podat žádost o připojení">
<gov-icon slot="icon" type="complex" name="cactus" aria-hidden="true"></gov-icon>
<div class="gov-timeline-item__tags">
<gov-tag color="secondary" type="subtle" size="xs">povinné</gov-tag>
</div>
<p class="gov-timeline-item__annotation">Vyplňte formulář žádosti.</p>
<gov-button slot="footer" color="primary" type="solid" size="s" href="#">Otevřít formulář</gov-button>
</gov-timeline-card>
</gov-timeline-step>
<!-- Sdílený krok: dvě karty, první vlevo, druhá vpravo, jeden uzel -->
<gov-timeline-step>
<gov-timeline-card headline="Zaplatit správní poplatek"></gov-timeline-card>
<gov-timeline-card headline="Zvolit elektronickou platbu" href="/platba"></gov-timeline-card>
</gov-timeline-step>
</gov-timeline-category>
<!-- Konec procesu -->
<gov-timeline-category cap="end" headline="Vyřízeno"></gov-timeline-category>
</gov-timeline>- Krok (
gov-timeline-step) obsahuje jednu nebo dvěgov-timeline-card. Jedna karta leží na straně dané atributemsidekroku (jen ve dvousloupcové ose). Dvě karty leží vždy první vlevo a druhá vpravo a sdílejí jeden uzel „N“. Po sbalení osy se uzel rozdělí na „N/1“ a „N/2“. Třetí a další karta kroku se nezobrazí a komponenta to ohlásí varováním. - Číslování je průběžné napříč kategoriemi. Začátek a konec (kategorie s
cap) se nečíslují a nesmí obsahovat kroky (kroky v nich se nevykreslí a komponenta to ohlásí varováním). - Začátek a konec jsou kategorie s
cap="start"nebocap="end"a značkoumarker(dot,arrow,icon,none). Promarker="icon"vložte ikonu do slotumarker, např.<gov-icon slot="marker" type="components" name="…"></gov-icon>. - Štítky stop z
label-left/label-rightkategorie jsou nad osou. Jakmile se dvousloupcová osa sbalí, zobrazí se jako štítek na každé kartě příslušné strany. Vcolumns="1"se na kartách nepoužijí. - Navigace se sestaví z nadpisů kategorií (odkaz používá
nav-label, pokud je zadaný). Začátek nebo konec bezheadline(a beznav-label) odkaz v navigaci nedostane. Kategorii bezidkomponentaidvygeneruje (unikátní na stránce, nikdy se neopakuje ani po přidání, odebrání či přesunu kategorií), vlastníidzůstane zachované. Vygenerovanéidale závisí na stránce a pořadí kategorií, proto pro stálé odkazy na sekci (/stranka#priprava) zadejte kategoriím vlastníid– v Reactu propidkomponentyGovTimelineCategory.
gov-timeline
| Atribut | Hodnoty | Výchozí | Význam |
|---|---|---|---|
columns | 2, 1 | 2 | dvousloupcová / jednosloupcová osa |
numbered | boolean | true | číslované uzly a skrytý text „Krok N:“ / malé tečky bez čísel |
nav-title | text | Obsah | viditelný nadpis navigace |
accessible-nav-label | text | Kategorie časové osy | přístupný název navigace (aria-label) |
accessible-step-label | text | Krok | slovo skrytého prefixu nadpisu karty pro čtečky („Krok 3:“), např. Step na anglické stránce |
no-nav | boolean | false | bez navigace „Obsah“ (např. má-li stránka vlastní obsah) |
headline-tag | h2 – h6 | h2 | úroveň nadpisů kategorií a nadpisu navigace |
action-align | left, right | left | zarovnání tlačítka (slot footer) ve všech kartách osy najednou |
| Událost | Detail | Popis |
|---|---|---|
gov-change | {component, ref, currentId, trigger} | změna aktuální sekce; ref je kategorie, currentId její id, trigger je "scroll" při posunu stránky a "click" po kliknutí na odkaz v navigaci. Při prvním měření po načtení se nevyvolá. Událost neprobublává, takže gov-change formulářového pole v kartě (nebo vnořené osy) posluchač na časové ose nezachytí. |
| Metoda | Popis |
|---|---|
refresh() | znovu spočítá rozložení (čísla, řádky, odkazy v navigaci) a přeměří aktuální sekci. Běžně ji volat nemusíte, komponenta reaguje na přidání, odebrání i přesun potomků a na změnu atributů sama. |
gov-timeline-category
| Atribut | Hodnoty | Výchozí | Význam |
|---|---|---|---|
headline | text | nadpis kategorie a text odkazu v navigaci | |
nav-label | text | headline | kratší text odkazu v navigaci |
label-left, label-right | text | názvy stop nad osou (a štítky karet po sbalení osy) | |
spine-end | down, up, none | down | šipka na konci osy kategorie |
cap | start, end | z kategorie se stane začátek / konec procesu | |
marker | dot, arrow, icon, none | dot | značka začátku / konce; icon zobrazí obsah slotu marker |
gov-timeline-step
| Atribut | Hodnoty | Výchozí | Význam |
|---|---|---|---|
side | left, right | left | strana osy u kroku s jednou kartou |
gov-timeline-card
| Atribut | Hodnoty | Význam |
|---|---|---|
headline | text | nadpis kroku |
href | URL | celá karta je odkaz |
target | _blank, _self, _new | cíl odkazu |
| Slot | Obsah |
|---|---|
icon | ikona v nadpisu karty |
| výchozí | štítky (<div class="gov-timeline-item__tags">), popis (<p class="gov-timeline-item__annotation">) |
footer | akce karty (např. gov-button); nepoužívejte spolu s href |
Varování
Chybné použití komponenta hlásí přes govWarningLog: neplatná hodnota atributu, třetí karta v kroku, kroky uvnitř začátku nebo konce a interaktivní prvek uvnitř klikací karty. Varování se vypisují do konzole, jen když je zapnuté warningLog v GOV_DS_CONFIG (viz Začínáme pro vývojáře).
Práce s DOM, SSR a frameworky
- Přidání a odebrání potomků dělejte přes
appendChild,insertBeforearemoveChild. Ty komponenty na hostitelských prvcích přesměrují na správné místo, takže fungují i React, Vue a Angular.append,prepend,replaceChildainsertAdjacent*na hostitelích přesměrované nejsou, proto je pro ruční práci s DOM nepoužívejte. - SSR přes Stencil hydrate: při serverovém vykreslení balíčkem
hydrate(renderToString) je markup (osa, uzly, navigace) hotový už ze serveru a první odkaz navigace máaria-current. Sledování scrollu a přesun fokusu se spustí až v prohlížeči. - React:
GovTimeline,GovTimelineCategory,GovTimelineStepaGovTimelineCardz@gov-design-system-ce/reactjen vykreslují webové komponenty, takže je nutné jednou zavolatdefineCustomElements()(viz README balíčkucore-react).refnaGovTimelineje prvek (ref.current.refresh()) a událostgov-changečasové osy přichází jakoonGovChange. Wrappery předávají prvku iid,style,aria-*adata-*. - React SSR (Next.js apod.): server vykreslí jen prvky
gov-timeline*s atributy a potomky – osu, uzly a navigaci doplní až webová komponenta v prohlížeči.defineCustomElements()proto volejte až po hydrataci, např. vuseEffectkořenové komponenty. Kdyby se webové komponenty zaregistrovaly dřív, upravily by DOM ještě před hydratací Reactu a ta by skončila chybou nesouladu (hydration mismatch). - Vue a Angular: proxy komponenty se generují z webových komponent (
GovTimeline,GovTimelineCategory,GovTimelineStep,GovTimelineCard), atributy se zapisují stejně jako u ostatních komponent a událost se odebírá přes@gov-change(Vue) nebo(gov-change)(Angular). - Odkazy v navigaci po kliknutí zapíší hash do adresy přes
history.pushState, který nevyvoláhashchange– router s hash strategií (např. AngularHashLocationStrategy) o změně neví. Kliknutí s Ctrl/Cmd/Shift (otevření v novém panelu či okně) komponenta nechává prohlížeči. - Vlastní obalové prvky: kategorie, krok i karta mohou ležet uvnitř vlastního prvku (hostitel Angular komponenty,
<x-faze>) – komponenta je přiřadí nejbližšímu nadřazenému prvku rodiny Timeline. Obalový prvek ale nesmí vytvářet vlastní box, jinak rozbije mřížku osy: dejte mudisplay: contents(v Angularu:host { display: contents; }). Obalená kategorie je posledním potomkem svého obalu, proto pod ní odpadne mezera mezi kategoriemi (--spacing-s).
Doporučení
Fáze pojmenujte podle toho, co v nich uživatel dělá
Nadpisy kategorií číslujte („1. Příprava“) a v navigaci použijte kratší název bez čísla („Příprava“). Uživatel tak z navigace hned pozná, kde v procesu je.
Stopy používejte jen tehdy, když se kroky skutečně liší
Dvousloupcovou variantu použijte, pokud proces obsahuje povinné i volitelné kroky (nebo jinak odlišené souběžné stopy). Pokud mají všechny kroky stejnou váhu, zvolte jednosloupcovou variantu.
Jeden krok, jedna akce
Karta kroku má mít nejvýše jednu akci – tlačítko (např. „Otevřít formulář“), nebo odkaz na celé kartě. Více akcí patří až na cílovou stránku kroku.
Udržujte karty krátké
Nadpis kroku by měl být krátké sloveso s předmětem („Podat žádost o připojení“), popis maximálně dvě věty. Podrobnosti patří na detail kroku.
Další doporučení
- Štítky (
gov-tag) používejte pro stav nebo typ kroku („povinné“, „nepovinné“), ne pro dlouhý text. idsekcí musí být na stránce unikátní – při více časových osách na jedné stránce jim dejte prefix.- Dlouhé procesy rozdělte do více kategorií; navigace „Obsah“ pak lépe slouží k orientaci.