+ );
+ }
+
+ // --- Render ---
+ return (
+
+ {/* View mode toggle (edit mode only) */}
+ {isEditMode && (
+
+
+
+
+ )}
+
+ {/* Status messages */}
+ {loading && (
+
{t('link.loading')}
+ )}
+ {error && (
+
{error}
+ )}
+
+ {/* Empty state */}
+ {!loading && !link && (
+
{t('link.empty')}
+ )}
+
+ {/* Link display — list (row) view */}
+ {!loading && link && !isEditing && viewMode === 'list' && (
+
+ )}
+
+ {/* Link display — tile (grid) view */}
+ {!loading && link && !isEditing && viewMode === 'grid' && (
+
+ )}
+
+ {/* Inline edit form */}
+ {isEditMode && isEditing && link && renderEditForm()}
+
+ {/* Add form — single-link enforcement: hidden when link exists (D-06) */}
+ {isEditMode && !link && !loading && (
+
+ )}
+
+ );
+}
diff --git a/apps/web/src/messages/de.json b/apps/web/src/messages/de.json
index 374f008..337b8aa 100644
--- a/apps/web/src/messages/de.json
+++ b/apps/web/src/messages/de.json
@@ -215,7 +215,19 @@
},
"link": {
"name": "Link",
- "description": "Einzelner Schnellzugriff-Link"
+ "description": "Einzelner Schnellzugriff-Link",
+ "loading": "Link wird geladen...",
+ "empty": "Noch kein Link gesetzt.",
+ "addTitle": "Titel",
+ "addUrl": "URL",
+ "addButton": "Hinzufuegen",
+ "listView": "Liste",
+ "gridView": "Kachel",
+ "editButton": "Link bearbeiten",
+ "deleteButton": "Link loeschen",
+ "saveButton": "Speichern",
+ "cancelButton": "Abbrechen",
+ "error": "Fehler beim Laden des Links"
},
"stopwatch": {
"name": "Stoppuhr",
diff --git a/apps/web/src/messages/en.json b/apps/web/src/messages/en.json
index 7a4d63f..afb9163 100644
--- a/apps/web/src/messages/en.json
+++ b/apps/web/src/messages/en.json
@@ -215,7 +215,19 @@
},
"link": {
"name": "Link",
- "description": "Single quick-access link"
+ "description": "Single quick-access link",
+ "loading": "Loading link...",
+ "empty": "No link set yet.",
+ "addTitle": "Title",
+ "addUrl": "URL",
+ "addButton": "Add",
+ "listView": "List",
+ "gridView": "Tile",
+ "editButton": "Edit link",
+ "deleteButton": "Delete link",
+ "saveButton": "Save",
+ "cancelButton": "Cancel",
+ "error": "Error loading link"
},
"stopwatch": {
"name": "Stopwatch",