# UI-Komponenten Dokumentation - MYP Platform Diese Dokumentation beschreibt alle verfügbaren UI-Komponenten und Template-Helper der MYP Platform. ## Übersicht Die MYP Platform bietet ein umfassendes UI-Komponenten-System basierend auf: - **Tailwind CSS** für das Styling - **Jinja2 Template-Helper** für einfache Verwendung in Templates - **JavaScript-Utilities** für interaktive Funktionen ## Template-Helper ### Buttons #### `ui_button(text, type, size, classes, icon, onclick, disabled, **attrs)` Erstellt styled Buttons mit verschiedenen Varianten. **Parameter:** - `text` (str): Button-Text - `type` (str): Button-Typ - `"primary"`, `"secondary"`, `"danger"`, `"success"` - `size` (str): Button-Größe - `"sm"`, `"md"`, `"lg"` - `classes` (str): Zusätzliche CSS-Klassen - `icon` (str): SVG-Icon-Code - `onclick` (str): JavaScript-Code für onclick - `disabled` (bool): Button deaktiviert - `**attrs`: Zusätzliche HTML-Attribute **Beispiele:** ```jinja2 {{ ui_button("Speichern", "primary", "md") }} {{ ui_button("Löschen", "danger", "sm", icon=icons.trash) }} {{ ui_button("Bearbeiten", "secondary", onclick="editItem(123)") }} {{ ui_button("Deaktiviert", "primary", disabled=true) }} ``` ### Badges #### `ui_badge(text, type, classes)` Erstellt kleine Label/Tags für Status-Anzeigen. **Parameter:** - `text` (str): Badge-Text - `type` (str): Badge-Typ - `"blue"`, `"green"`, `"red"`, `"yellow"`, `"purple"` - `classes` (str): Zusätzliche CSS-Klassen **Beispiele:** ```jinja2 {{ ui_badge("Neu", "blue") }} {{ ui_badge("Aktiv", "green") }} {{ ui_badge("Fehler", "red") }} ``` #### `ui_status_badge(status, type)` Erstellt spezielle Status-Badges für Jobs und Drucker. **Parameter:** - `status` (str): Status-Wert - `type` (str): Typ - `"job"` oder `"printer"` **Job-Status:** - `queued` → "In Warteschlange" - `printing` → "Wird gedruckt" - `completed` → "Abgeschlossen" - `failed` → "Fehlgeschlagen" - `cancelled` → "Abgebrochen" - `paused` → "Pausiert" **Drucker-Status:** - `ready` → "Bereit" - `busy` → "Beschäftigt" - `error` → "Fehler" - `offline` → "Offline" - `maintenance` → "Wartung" **Beispiele:** ```jinja2 {{ ui_status_badge("printing", "job") }} {{ ui_status_badge("ready", "printer") }} ``` ### Cards #### `ui_card(title, content, footer, classes, hover)` Erstellt Container-Karten für Inhalte. **Parameter:** - `title` (str): Karten-Titel - `content` (str): Karten-Inhalt (HTML möglich) - `footer` (str): Karten-Footer (HTML möglich) - `classes` (str): Zusätzliche CSS-Klassen - `hover` (bool): Hover-Effekt aktivieren **Beispiele:** ```jinja2 {{ ui_card( title="Drucker Status", content="
Ultimaker S3 ist bereit
", footer=ui_button("Details", "primary", "sm"), hover=true ) }} ``` ### Alerts #### `ui_alert(message, type, dismissible)` Erstellt Benachrichtigungen und Warnungen. **Parameter:** - `message` (str): Alert-Nachricht - `type` (str): Alert-Typ - `"info"`, `"success"`, `"warning"`, `"error"` - `dismissible` (bool): Schließbar machen **Beispiele:** ```jinja2 {{ ui_alert("Job erfolgreich erstellt!", "success", dismissible=true) }} {{ ui_alert("Warnung: Drucker offline", "warning") }} ``` ### Modals #### `ui_modal(modal_id, title, content, footer, size)` Erstellt Modal-Dialoge. **Parameter:** - `modal_id` (str): Eindeutige Modal-ID - `title` (str): Modal-Titel - `content` (str): Modal-Inhalt (HTML möglich) - `footer` (str): Modal-Footer (HTML möglich) - `size` (str): Modal-Größe - `"sm"`, `"md"`, `"lg"`, `"xl"` **Beispiele:** ```jinja2 {{ ui_modal( "confirm-delete", "Löschen bestätigen", "Möchten Sie diesen Job wirklich löschen?
", ui_button("Abbrechen", "secondary", onclick="MYP.Modal.close('confirm-delete')") + " " + ui_button("Löschen", "danger"), "sm" ) }} ``` ### Tabellen #### `ui_table(headers, rows, classes, striped)` Erstellt styled Tabellen. **Parameter:** - `headers` (List[str]): Tabellen-Kopfzeilen - `rows` (List[List[str]]): Tabellen-Zeilen - `classes` (str): Zusätzliche CSS-Klassen - `striped` (bool): Zebra-Streifen aktivieren **Beispiele:** ```jinja2 {% set headers = ["Name", "Status", "Aktionen"] %} {% set rows = [ ["Job 1", ui_status_badge("printing", "job"), ui_button("Details", "secondary", "sm")], ["Job 2", ui_status_badge("queued", "job"), ui_button("Details", "secondary", "sm")] ] %} {{ ui_table(headers, rows, striped=true) }} ``` ## Template-Filter ### Datum & Zeit #### `german_datetime` Formatiert Datetime-Objekte für deutsche Anzeige. **Beispiele:** ```jinja2 {{ job.created_at|german_datetime }} {{ job.created_at|german_datetime("%d.%m.%Y") }} {{ job.created_at|german_datetime("%H:%M") }} ``` #### `duration` Formatiert Dauer in Minuten zu lesbarem Format. **Beispiele:** ```jinja2 {{ 30|duration }} {{ 90|duration }} {{ 120|duration }} ``` #### `json` Enkodiert Python-Daten als JSON für JavaScript. **Beispiele:** ```jinja2 ``` ## Globale Variablen ### Icons Verfügbare SVG-Icons über `icons.*`: - `icons.check` - Häkchen - `icons.x` - X/Schließen - `icons.plus` - Plus/Hinzufügen - `icons.edit` - Bearbeiten - `icons.trash` - Löschen - `icons.printer` - Drucker - `icons.dashboard` - Dashboard **Beispiele:** ```jinja2 {{ ui_button("Hinzufügen", "primary", icon=icons.plus) }} {{ ui_button("Löschen", "danger", icon=icons.trash) }} ``` ### Weitere Globale Variablen - `current_year` - Aktuelles Jahr ## JavaScript-Utilities ### Toast-Nachrichten ```javascript // Toast anzeigen MYP.Toast.show('Nachricht', 'success'); // success, error, warning, info // Toast ausblenden MYP.Toast.hide(); ``` ### Modal-Steuerung ```javascript // Modal öffnen MYP.Modal.open('modal-id'); // Modal schließen MYP.Modal.close('modal-id'); ``` ### Dropdown-Steuerung ```javascript // Dropdown umschalten MYP.Dropdown.toggle('dropdown-id'); // Dropdown schließen MYP.Dropdown.close('dropdown-id'); ``` ### Loading-Anzeige ```javascript // Loading anzeigen MYP.Loading.show(); // Loading ausblenden MYP.Loading.hide(); ``` ### Status-Helper ```javascript // CSS-Klassen für Status abrufen const jobClass = MYP.Status.getJobStatusClass('printing'); const printerClass = MYP.Status.getPrinterStatusClass('ready'); // Status-Text formatieren const jobText = MYP.Status.formatJobStatus('printing'); const printerText = MYP.Status.formatPrinterStatus('ready'); ``` ## CSS-Klassen ### Button-Klassen - `.btn` - Basis-Button-Klasse - `.btn-primary` - Primärer Button (blau) - `.btn-secondary` - Sekundärer Button (grau) - `.btn-danger` - Gefahr-Button (rot) - `.btn-success` - Erfolg-Button (grün) - `.btn-sm` - Kleiner Button - `.btn-lg` - Großer Button ### Badge-Klassen - `.badge` - Basis-Badge-Klasse - `.badge-blue`, `.badge-green`, `.badge-red`, `.badge-yellow`, `.badge-purple` ### Status-Klassen **Job-Status:** - `.job-status` - Basis-Klasse - `.job-queued`, `.job-printing`, `.job-completed`, `.job-failed`, `.job-cancelled`, `.job-paused` **Drucker-Status:** - `.printer-status` - Basis-Klasse - `.printer-ready`, `.printer-busy`, `.printer-error`, `.printer-offline`, `.printer-maintenance` ### Card-Klassen - `.card` - Basis-Card-Klasse - `.card-hover` - Card mit Hover-Effekt ### Alert-Klassen - `.alert` - Basis-Alert-Klasse - `.alert-info`, `.alert-success`, `.alert-warning`, `.alert-error` ### Tabellen-Klassen - `.table-container` - Tabellen-Container - `.table-styled` - Styled Tabelle ## Verwendung in Templates ### Basis-Template erweitern ```jinja2 {% extends "base.html" %} {% block content %}Hier ist der Inhalt der Karte.
", footer=ui_button("Aktion", "primary") ) }}