Übersicht aller UI-Komponenten
Typografie-Klassen für Schriftfamilien, Grössen, Headings, Fliesstext und Gewichte. Keine Props — Nutzung über Tailwind-Klassen.
Comfortaa — Das ist ein Beispieltext
Serif — Das ist ein Beispieltext
Mono — Das ist ein Beispieltext
Tailwind-Skala
Fluide Typografie mit clamp (Mobile → Desktop)
Paragraph — Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Spacing-Klassen von xs bis xxl. Keine Props — Nutzung über Tailwind-Klassen wie p-m oder gap-xl.
Farbklassen inkl. Opacity-Varianten. Keine Props — Nutzung über Tailwind-Klassen wie bg-primary oder text-foreground.
PWA- und Browser-Icons aus public/icons/.
Texteingabefeld mit Label und optionalem Fehlerzustand.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | string | nein | '' | Aktueller Eingabewert | |
| label | string | nein | — | Optionales Feld-Label | |
| placeholder | string | nein | — | Platzhalter im Eingabefeld | |
| type | string | nein | 'text' | HTML-Input-Typ | |
| disabled | boolean | nein | false | Deaktiviert das Eingabefeld | |
| error | boolean | nein | false | Fehlerzustand mit Icon | |
| autocomplete | string | nein | — | HTML-autocomplete-Attribut | |
| name | string | nein | — | HTML-name-Attribut |
Checkbox mit optionalem Label.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | boolean | nein | false | Angehakt oder nicht angehakt | |
| label | string | nein | — | Beschriftung neben der Checkbox | |
| disabled | boolean | nein | false | Deaktiviert die Checkbox | |
| name | string | nein | — | HTML-name-Attribut | |
| default (slot) | slot | nein | — | — | Label-Inhalt, Fallback ist label |
Radio-Button für eine Auswahl innerhalb einer Gruppe.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | string | nein | '' | Aktuell ausgewählter Wert der Gruppe | |
| value | string | ja | — | — | Wert dieser Radio-Option |
| label | string | nein | — | Beschriftung neben dem Radio | |
| name | string | nein | — | HTML-name für die Radio-Gruppe | |
| disabled | boolean | nein | false | Deaktiviert diese Option | |
| default (slot) | slot | nein | — | — | Label-Inhalt, Fallback ist label |
Auswahlfeld für Einzel- oder Mehrfachauswahl.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | string | string[] | ja | — | — | Aktuell ausgewählter Wert bzw. Werte |
| options | DropdownOption[] | ja | — | — | Auswahloptionen mit value, label und optional disabled |
| label | string | nein | — | Optionales Feld-Label oberhalb | |
| placeholder | string | nein | — | Platzhaltertext bei leerer Auswahl | |
| multiple | boolean | nein | false | Aktiviert Mehrfachauswahl | |
| disabled | boolean | nein | false | Deaktiviert das Dropdown |
Vertikaler Abstandshalter mit optionaler horizontaler Trennlinie.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| line | boolean | nein | true | Zeigt die horizontale Trennlinie | |
| spacing | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl' | nein | 'xl' | Vertikaler Abstand um den Divider (ohne Linie = Höhe) | |
| mtAuto | boolean | nein | false | Aktiviert mt-auto (schiebt Divider nach unten in Flex-Layouts) |
Abschnitt oben
Abschnitt unten
Schliessbarer Info-Hinweis mit optionalem Icon.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | boolean | nein | true | Steuert die Sichtbarkeit des Dialogs | |
| showIcon | boolean | nein | false | Zeigt das Info-Icon links neben dem Inhalt | |
| closeAriaLabel | string | ja | — | ARIA-Label für den Schliessen-Button | |
| default (slot) | slot | nein | — | Dialog-Inhalt |
Tab-Navigation mit Mobile-Select und benannten Slots für Panel-Inhalte.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| v-model | string | ja | — | Wert des aktiven Tabs | |
| options | TabOption[] | ja | — | — | Tab-Definitionen mit value, label, optional href und disabled |
| ariaLabel | string | nein | 'Tabs' | ARIA-Label der Desktop-Tab-Navigation | |
| selectAriaLabel | string | nein | 'Select a tab' | ARIA-Label des mobilen Selects | |
| #[value] (slot) | slot | nein | — | — | Panel-Inhalt pro Tab, Slot-Name entspricht option.value |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Fortschrittsbalken für eine Reise mit Start-/Zielort und Zug-Indikator.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| start | string | ja | — | Startort-Label links unter dem Balken | |
| destination | string | ja | — | Zielort-Label rechts unter dem Balken | |
| progress | number | ja | — | Fortschritt von 0 bis 100, intern geklemmt | |
| markers | { id: string, progress: number }[] | nein | [] | — | Primary-Striche für Trigger auf der Strecke, inklusive bereits passierter |
Kleines Label/Badge in verschiedenen Farbvarianten.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| variant | 'primary' | 'outline' | 'secondary' | 'dark' | nein | 'primary' | Farbvariante des Tags | |
| default (slot) | slot | nein | — | Tag-Text bzw. Inhalt |
Pill-Badge mit Info-Icon und Geschwindigkeitsangabe in km/h. Klick öffnet Bottom-Sheet mit Livegeschwindigkeit und GPX-Distanzen.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| speed | number | ja | — | Geschwindigkeit in km/h ab 0, ohne Obergrenze |
Zweifarbiger Lade-Spinner mit Primary- und Secondary-Farbe.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| size | 'sm' | 'md' | 'lg' | nein | 'md' | Grösse des Spinners |
Farbige Sender-Kanal-Karte mit Titel, Beschreibung, Geschichten-Badge und Info-Link.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| title | string | ja | — | Channel-Titel | |
| slug | string | ja | — | URL-Slug (Prefix lokalisiert: sender/station/stazione) | |
| description | string | nein | — | Kurzbeschreibung unter dem Titel | |
| storyCount | number | nein | 0 | Anzahl Geschichten (Trigger) | |
| variant | 'primary' | 'green' | 'secondary' | 'accent' | nein | 'primary' | Hintergrundfarbe der Karte |
Liste von ChannelCards für die Senderauswahl einer Strecke.
Sprachumschalter über @nuxtjs/i18n (de-CH, fr, it, en).
Audio-Wiedergabe mit Wellenform, «Hören»-Badge, Titel, Beschreibung und Transkription. Prop: media: MediaItem (type audio).
Beispiel-Audio für den Trigger an der Kante Fust.
Video- oder Bild-Wiedergabe mit «Sehen»-Badge, Zeitanzeige, Beschreibung und Transkription. Video kann optionales Begleitaudio parallel abspielen.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| media | MediaItem | ja | — | — | CMS-Medium mit type video oder image |
| type (Demo) | 'video' | 'image' | nein | 'video' | Wechselt zwischen Video- und Bild-Mock | |
| @complete | emit | nein | — | — | Video ended bzw. Bild nach 5s |
Kreuzung Kaufmannstrasse, aufgenommen im Sommer 2024.
Beispiel-Video für die Kreuzung Kaufmannstrasse – Quaderstrasse.
Slideshow-Carousel mit Swipe, Thumbnails, optionalem Begleitaudio und Transkript. Prop: media: MediaItem (type slideshow).
Einfahrt in den Bahnhof Chur, Aufnahme 2024.
Test-Slideshow mit Video, Audio und Bildern für die Quaderstrasse.
Dispatcher für Audio-, Video-, Bild- und Slideshow-Player inkl. MediaFooterSheet.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| media | MediaItem | ja | — | — | Beliebiges CMS-Medium (audio/video/image/slideshow) |
| type (Demo) | MediaType | nein | 'audio' | Wechselt den Demo-Medientyp | |
| default (slot) | slot | nein | — | — | Inhalt im MediaFooterSheet |
| @complete | emit | nein | — | — | Weitergeleitet vom Sub-Player |
i-Icon zur Quellenangabe eines Trigger- oder Puffer-Inhalts. Öffnet einen Dialog mit dem formatierten Quelltext. Die Caption steht kursiv direkt unter dem Medium und dient zugleich als Alternativtext.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| source | string | null | nein | null | Quellenangabe als WYSIWYG-HTML; ohne Inhalt bleibt das Icon verborgen | |
| tone | 'on-dark' | 'on-light' | nein | 'on-dark' | Farbgebung des i-Icons je nach Hintergrund |
Blick über die Quaderstrasse Richtung Altstadt.
Blick über die Quaderstrasse Richtung Altstadt.
Beispiel-Bild entlang der Quaderstrasse.
Oranger Channel-Header mit Titel, Beschreibung, Story-Badge und animierten Punkten.
| Prop | Typ | Required | Default | Wert | Beschreibung |
|---|---|---|---|---|---|
| title | string | ja | — | Channel-Name als h1 | |
| description | string | null | nein | null | Kurzbeschreibung unter dem Titel | |
| storyCount | number | nein | 0 | Anzahl Geschichten im Badge |
Canale
Über Viadukte und dessen Ingenieurskunst
12 storieTimeline der Trigger-Stationen mit Verbindungslinien und GSAP-Reveal.
| Prop | Typ | Required | Default | Beschreibung |
|---|---|---|---|---|
| stations | ChannelStation[] | ja | — | Liste mit id, name und optional duration (Sekunden) |
Animierter Lade-Indikator mit pulsierenden Ringen für Channel-Live. Keine Props.
Standort-Pill mit Bahnhofs-Dropdown und Live-Verbindungen via transport.opendata.ch. Verbindungs-Klick speichert Session und navigiert zur Senderauswahl.
| Prop | Typ | Required | Default | Beschreibung |
|---|---|---|---|---|
| stations | StationOption[] | ja | — | Bahnhöfe mit trackIds und destinations (id, name, trackId) |