feat: card checklists (#141)

* feat: setup checklist schema

* feat: scaffold checklist router

* feat: add create new checklist modal

* feat: create new checklist item

* feat: toggle checklist item completed state

* feat: update checklist name

* feat: delete checklist

* feat: show checklists progress on cards

* feat: tweak light mode styling

* feat: focus item form on creation of new checklist

* feat: tweak new checklist item form styling

* feat: add checklist activity

* feat: show checklist progress on public board page

* feat: display checklist items on public card modal

* chore: add translations
This commit is contained in:
Henry
2025-08-14 19:59:36 +01:00
committed by GitHub
parent 80d1c5f805
commit 13b10471ec
45 changed files with 8171 additions and 684 deletions

View File

@@ -23,7 +23,7 @@ msgstr ", oder besuche unsere"
#. placeholder {0}: card?.title ?? "Card"
#. placeholder {1}: board?.name ?? "Board"
#: src/views/card/index.tsx:189
#: src/views/card/index.tsx:214
msgid "{0} | {1}"
msgstr "{0} | {1}"
@@ -48,8 +48,8 @@ msgstr "Eine leistungsstarke, flexible Kanban-App, die dir hilft, Arbeit zu orga
msgid "Account deleted"
msgstr "Konto gelöscht"
#: src/views/public/board/CardModal.tsx:128
#: src/views/card/index.tsx:256
#: src/views/public/board/CardModal.tsx:136
#: src/views/card/index.tsx:287
msgid "Activity"
msgstr "Aktivität"
@@ -66,10 +66,22 @@ msgstr "Karte hinzufügen"
msgid "Add a comment..."
msgstr "Kommentar hinzufügen..."
#: src/components/Editor.tsx:303
#: src/views/card/components/NewChecklistItemForm.tsx:140
msgid "Add an item..."
msgstr "Element hinzufügen..."
#: src/views/card/components/Dropdown.tsx:18
msgid "Add checklist"
msgstr "Checkliste hinzufügen"
#: src/components/Editor.tsx:308
msgid "Add description... (type '/' to open commands)"
msgstr "Beschreibung hinzufügen... (tippe '/' um Befehle zu öffnen)"
#: src/views/card/components/ChecklistItemRow.tsx:172
msgid "Add details..."
msgstr "Details hinzufügen..."
#: src/views/card/components/LabelSelector.tsx:110
#: src/views/card/components/LabelSelector.tsx:118
msgid "Add label"
@@ -80,17 +92,36 @@ msgstr "Label hinzufügen"
msgid "Add member"
msgstr "Mitglied hinzufügen"
#: src/views/card/components/ActivityList.tsx:56
#: src/views/card/components/ActivityList.tsx:69
msgid "added a checklist"
msgstr "hat eine Checkliste hinzugefügt"
#: src/views/card/components/ActivityList.tsx:72
msgid "added a checklist item"
msgstr "hat ein Checklistenelement hinzugefügt"
#: src/views/card/components/ActivityList.tsx:65
msgid "added a label to the card"
msgstr "hat ein Label zur Karte hinzugefügt"
#: src/views/card/components/ActivityList.tsx:58
#: src/views/card/components/ActivityList.tsx:67
msgid "added a member to the card"
msgstr "hat ein Mitglied zur Karte hinzugefügt"
#: src/views/card/components/ActivityList.tsx:110
msgid "added label <0>{label}</0>"
msgstr "hat Label <0>{label}</0> hinzugefügt"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:146
msgid "added checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> hinzugefügt"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:170
msgid "added checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> hinzugefügt"
#. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:130
msgid "added label <0>{0}</0>"
msgstr "hat Label <0>{0}</0> hinzugefügt"
#: src/views/home/components/Pricing.tsx:55
msgid "Admin roles"
@@ -141,6 +172,10 @@ msgstr "Bist du sicher, dass du den Workspace {0} löschen möchtest?"
msgid "Are you sure you want to delete this card?"
msgstr "Bist du sicher, dass du diese Karte löschen möchtest?"
#: src/views/card/components/DeleteChecklistConfirmation.tsx:55
msgid "Are you sure you want to delete this checklist?"
msgstr "Sind Sie sicher, dass Sie diese Checkliste löschen möchten?"
#: src/views/card/components/DeleteCommentConfirmation.tsx:65
msgid "Are you sure you want to delete this comment?"
msgstr "Bist du sicher, dass du diesen Kommentar löschen möchtest?"
@@ -153,9 +188,10 @@ msgstr "Sind Sie sicher, dass Sie dieses Label löschen möchten?"
msgid "Are you sure you want to delete your account?"
msgstr "Bist du sicher, dass du dein Konto löschen möchtest?"
#: src/views/card/components/ActivityList.tsx:92
msgid "assigned <0>{memberName}</0> to the card"
msgstr "hat <0>{memberName}</0> der Karte zugewiesen"
#. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:110
msgid "assigned <0>{0}</0> to the card"
msgstr "hat <0>{0}</0> der Karte zugewiesen"
#: src/views/boards/components/TemplateBoards.tsx:46
msgid "Awaiting Customer"
@@ -182,7 +218,7 @@ msgstr "Abrechnungsportal"
msgid "Blog Post"
msgstr "Blogbeitrag"
#: src/views/board/index.tsx:332
#: src/views/board/index.tsx:331
msgid "Board"
msgstr "Board"
@@ -195,7 +231,7 @@ msgid "Board name is required"
msgstr "Boardname ist erforderlich"
#: src/views/public/board/index.tsx:143
#: src/views/board/index.tsx:358
#: src/views/board/index.tsx:357
msgid "Board not found"
msgstr "Board nicht gefunden"
@@ -250,13 +286,14 @@ msgstr "Fehlerbericht"
#: src/views/settings/components/CustomURLConfirmation.tsx:50
#: src/views/members/components/DeleteMemberConfirmation.tsx:55
#: src/views/card/components/DeleteCommentConfirmation.tsx:76
#: src/views/card/components/DeleteChecklistConfirmation.tsx:63
#: src/views/card/components/DeleteCardConfirmation.tsx:86
#: src/views/card/components/Comment.tsx:158
#: src/components/DeleteLabelConfirmation.tsx:47
msgid "Cancel"
msgstr "Abbrechen"
#: src/views/card/index.tsx:234
#: src/views/card/index.tsx:259
msgid "Card not found"
msgstr "Karte nicht gefunden"
@@ -273,6 +310,10 @@ msgstr "Ändere die Sprache der App."
msgid "Check your inbox"
msgstr "Überprüfe deinen Posteingang"
#: src/views/card/components/NewChecklistForm.tsx:118
msgid "Checklist name"
msgstr "Checklistenname"
#: src/views/board/components/Filters.tsx:155
msgid "Clear filters"
msgstr "Filter löschen"
@@ -310,6 +351,15 @@ msgstr "Abgeschlossen"
msgid "Complete control and ownership:"
msgstr "Vollständige Kontrolle und Eigentum:"
#: src/views/card/components/ActivityList.tsx:74
msgid "completed a checklist item"
msgstr "hat ein Checklistenelement abgeschlossen"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:187
msgid "completed checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> abgeschlossen"
#: src/views/settings/components/CustomURLConfirmation.tsx:42
msgid "Confirm URL change"
msgstr "URL-Änderung bestätigen"
@@ -366,6 +416,10 @@ msgstr "Board erstellen"
msgid "Create card"
msgstr "Karte erstellen"
#: src/views/card/components/NewChecklistForm.tsx:134
msgid "Create checklist"
msgstr "Checkliste erstellen"
#: src/components/LabelForm.tsx:236
msgid "Create label"
msgstr "Label erstellen"
@@ -387,7 +441,7 @@ msgstr "Neuen Schlüssel erstellen"
msgid "Create new label"
msgstr "Neues Label erstellen"
#: src/views/board/index.tsx:426
#: src/views/board/index.tsx:425
msgid "Create new list"
msgstr "Neue Liste erstellen"
@@ -396,7 +450,7 @@ msgstr "Neue Liste erstellen"
msgid "Create workspace"
msgstr "Arbeitsbereich erstellen"
#: src/views/card/components/ActivityList.tsx:52
#: src/views/card/components/ActivityList.tsx:61
msgid "created the card"
msgstr "hat die Karte erstellt"
@@ -421,6 +475,7 @@ msgid "Dark"
msgstr "Dunkel"
#: src/views/card/components/DeleteCommentConfirmation.tsx:82
#: src/views/card/components/DeleteChecklistConfirmation.tsx:66
#: src/views/card/components/DeleteCardConfirmation.tsx:92
#: src/components/LabelForm.tsx:226
#: src/components/DeleteLabelConfirmation.tsx:49
@@ -437,7 +492,7 @@ msgstr "Konto löschen"
msgid "Delete board"
msgstr "Board löschen"
#: src/views/card/components/Dropdown.tsx:14
#: src/views/card/components/Dropdown.tsx:25
msgid "Delete card"
msgstr "Karte löschen"
@@ -455,6 +510,24 @@ msgstr "Liste löschen"
msgid "Delete workspace"
msgstr "Workspace löschen"
#: src/views/card/components/ActivityList.tsx:71
msgid "deleted a checklist"
msgstr "hat eine Checkliste gelöscht"
#: src/views/card/components/ActivityList.tsx:76
msgid "deleted a checklist item"
msgstr "hat ein Checklistenelement gelöscht"
#. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:162
msgid "deleted checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> gelöscht"
#. placeholder {0}: truncate(fromTitle)
#: src/views/card/components/ActivityList.tsx:205
msgid "deleted checklist item <0>{0}</0>"
msgstr "hat Checklistenelement <0>{0}</0> gelöscht"
#: src/views/boards/components/TemplateBoards.tsx:32
msgid "Design"
msgstr "Design"
@@ -692,7 +765,7 @@ msgstr "Loslegen"
msgid "Get started by creating a new board"
msgstr "Beginne, indem du ein neues Board erstellst"
#: src/views/board/index.tsx:418
#: src/views/board/index.tsx:417
msgid "Get started by creating a new list"
msgstr "Beginne mit dem Erstellen einer neuen Liste"
@@ -849,7 +922,7 @@ msgstr "Kanban neu gedacht"
msgid "Keep in mind that this action is irreversible."
msgstr "Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann."
#: src/views/card/index.tsx:113
#: src/views/card/index.tsx:118
#: src/views/board/components/NewCardForm.tsx:358
#: src/views/board/components/Filters.tsx:101
msgid "Labels"
@@ -883,7 +956,7 @@ msgstr "Hell"
msgid "Link copied"
msgstr "Link kopiert"
#: src/views/card/index.tsx:105
#: src/views/card/index.tsx:110
msgid "List"
msgstr "Liste"
@@ -911,12 +984,21 @@ msgstr "Niedrige Priorität"
msgid "magic link"
msgstr "Magic Link"
#: src/views/card/components/ActivityList.tsx:75
msgid "marked a checklist item as incomplete"
msgstr "hat ein Checklistenelement als unvollständig markiert"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:196
msgid "marked checklist item <0>{0}</0> as incomplete"
msgstr "hat Checklistenelement <0>{0}</0> als unvollständig markiert"
#: src/views/boards/components/TemplateBoards.tsx:17
msgid "Medium Priority"
msgstr "Mittlere Priorität"
#: src/views/members/index.tsx:161
#: src/views/card/index.tsx:121
#: src/views/card/index.tsx:126
#: src/views/board/components/NewCardForm.tsx:317
#: src/views/board/components/Filters.tsx:93
#: src/components/SideNavigation.tsx:73
@@ -932,11 +1014,13 @@ msgstr "Mitglieder | {0}"
msgid "Monthly"
msgstr "Monatlich"
#: src/views/card/components/ActivityList.tsx:81
msgid "moved the card from <0>{fromList}</0> to<1>{toList}</1>"
msgstr "hat die Karte von <0>{fromList}</0> nach <1>{toList}</1> verschoben"
#. placeholder {0}: truncate(fromList)
#. placeholder {1}: truncate(toList)
#: src/views/card/components/ActivityList.tsx:98
msgid "moved the card from <0>{0}</0> to<1>{1}</1>"
msgstr "hat die Karte von <0>{0}</0> nach <1>{1}</1> verschoben"
#: src/views/card/components/ActivityList.tsx:55
#: src/views/card/components/ActivityList.tsx:64
msgid "moved the card to another list"
msgstr "hat die Karte in eine andere Liste verschoben"
@@ -961,6 +1045,10 @@ msgstr "Neues Board"
msgid "New card"
msgstr "Neue Karte"
#: src/views/card/components/NewChecklistForm.tsx:102
msgid "New checklist"
msgstr "Neue Checkliste"
#: src/views/boards/components/ImportBoardsForm.tsx:322
msgid "New import"
msgstr "Neuer Import"
@@ -969,7 +1057,7 @@ msgstr "Neuer Import"
msgid "New label"
msgstr "Neues Label"
#: src/views/board/index.tsx:395
#: src/views/board/index.tsx:394
#: src/views/board/components/NewListForm.tsx:112
msgid "New list"
msgstr "Neue Liste"
@@ -1002,7 +1090,7 @@ msgstr "Keine Boards gefunden"
msgid "No credit card required"
msgstr "Keine Kreditkarte erforderlich"
#: src/views/board/index.tsx:415
#: src/views/board/index.tsx:414
msgid "No lists"
msgstr "Keine Listen"
@@ -1085,17 +1173,23 @@ msgstr "Bitte wähle eine Datei zum Hochladen aus."
#: src/views/settings/components/Avatar.tsx:98
#: src/views/members/components/InviteMemberForm.tsx:64
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/card/index.tsx:159
#: src/views/card/index.tsx:173
#: src/views/card/components/NewCommentForm.tsx:31
#: src/views/card/components/NewChecklistItemForm.tsx:89
#: src/views/card/components/NewChecklistForm.tsx:70
#: src/views/card/components/MemberSelector.tsx:80
#: src/views/card/components/ListSelector.tsx:53
#: src/views/card/components/LabelSelector.tsx:73
#: src/views/card/components/DeleteCommentConfirmation.tsx:45
#: src/views/card/components/DeleteChecklistConfirmation.tsx:37
#: src/views/card/components/DeleteCardConfirmation.tsx:52
#: src/views/card/components/Comment.tsx:64
#: src/views/card/components/ChecklistNameInput.tsx:46
#: src/views/card/components/ChecklistItemRow.tsx:60
#: src/views/card/components/ChecklistItemRow.tsx:88
#: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/board/index.tsx:135
#: src/views/board/index.tsx:191
#: src/views/board/index.tsx:134
#: src/views/board/index.tsx:190
#: src/views/board/components/VisibilityButton.tsx:53
#: src/views/board/components/UpdateBoardSlugForm.tsx:72
#: src/views/board/components/NewListForm.tsx:78
@@ -1168,17 +1262,32 @@ msgstr "Entfernen"
msgid "Remove member"
msgstr "Mitglied entfernen"
#: src/views/card/components/ActivityList.tsx:57
#: src/views/card/components/ActivityList.tsx:66
msgid "removed a label from the card"
msgstr "hat ein Label von der Karte entfernt"
#: src/views/card/components/ActivityList.tsx:59
#: src/views/card/components/ActivityList.tsx:68
msgid "removed a member from the card"
msgstr "hat ein Mitglied von der Karte entfernt"
#: src/views/card/components/ActivityList.tsx:118
msgid "removed label <0>{label}</0>"
msgstr "hat Label <0>{label}</0> entfernt"
#. placeholder {0}: truncate(label)
#: src/views/card/components/ActivityList.tsx:138
msgid "removed label <0>{0}</0>"
msgstr "hat Label <0>{0}</0> entfernt"
#: src/views/card/components/ActivityList.tsx:70
msgid "renamed a checklist"
msgstr "hat eine Checkliste umbenannt"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:154
msgid "renamed checklist <0>{0}</0>"
msgstr "hat Checkliste <0>{0}</0> umbenannt"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:178
msgid "renamed checklist item to <0>{0}</0>"
msgstr "hat Checklistenelement in <0>{0}</0> umbenannt"
#: src/views/boards/components/TemplateBoards.tsx:76
msgid "Research"
@@ -1241,7 +1350,7 @@ msgstr "Selbst hosten"
msgid "Self host with Github"
msgstr "Selbst hosten mit Github"
#: src/views/card/components/ActivityList.tsx:89
#: src/views/card/components/ActivityList.tsx:107
msgid "self-assigned the card"
msgstr "hat sich selbst die Karte zugewiesen"
@@ -1360,6 +1469,7 @@ msgid "They won't be able to access this workspace."
msgstr "Sie werden keinen Zugriff mehr auf diesen Workspace haben."
#: src/views/card/components/DeleteCommentConfirmation.tsx:68
#: src/views/card/components/DeleteChecklistConfirmation.tsx:58
#: src/views/card/components/DeleteCardConfirmation.tsx:78
#: src/components/DeleteLabelConfirmation.tsx:42
msgid "This action can't be undone."
@@ -1410,6 +1520,10 @@ msgstr "Trello-importe"
msgid "Triaging"
msgstr "Priorisierung"
#: src/views/card/components/NewChecklistItemForm.tsx:88
msgid "Unable to add checklist item"
msgstr "Checklistenelement kann nicht hinzugefügt werden"
#: src/views/card/components/NewCommentForm.tsx:30
msgid "Unable to add comment"
msgstr "Kommentar konnte nicht hinzugefügt werden"
@@ -1418,6 +1532,10 @@ msgstr "Kommentar konnte nicht hinzugefügt werden"
msgid "Unable to create card"
msgstr "Karte konnte nicht erstellt werden"
#: src/views/card/components/NewChecklistForm.tsx:69
msgid "Unable to create checklist"
msgstr "Checkliste kann nicht erstellt werden"
#: src/views/board/components/NewListForm.tsx:77
msgid "Unable to create list"
msgstr "Liste konnte nicht erstellt werden"
@@ -1430,6 +1548,14 @@ msgstr "Workspace konnte nicht erstellt werden"
msgid "Unable to delete card"
msgstr "Karte konnte nicht gelöscht werden"
#: src/views/card/components/DeleteChecklistConfirmation.tsx:36
msgid "Unable to delete checklist"
msgstr "Checkliste kann nicht gelöscht werden"
#: src/views/card/components/ChecklistItemRow.tsx:87
msgid "Unable to delete checklist item"
msgstr "Checklistenelement kann nicht gelöscht werden"
#: src/views/card/components/DeleteCommentConfirmation.tsx:44
msgid "Unable to delete comment"
msgstr "Kommentar konnte nicht gelöscht werden"
@@ -1450,11 +1576,19 @@ msgstr "Board-URL kann nicht aktualisiert werden"
msgid "Unable to update board visibility"
msgstr "Board-Sichtbarkeit konnte nicht aktualisiert werden"
#: src/views/card/index.tsx:158
#: src/views/board/index.tsx:190
#: src/views/card/index.tsx:172
#: src/views/board/index.tsx:189
msgid "Unable to update card"
msgstr "Karte konnte nicht aktualisiert werden"
#: src/views/card/components/ChecklistNameInput.tsx:45
msgid "Unable to update checklist"
msgstr "Checkliste kann nicht aktualisiert werden"
#: src/views/card/components/ChecklistItemRow.tsx:59
msgid "Unable to update checklist item"
msgstr "Checklistenelement kann nicht aktualisiert werden"
#: src/views/card/components/Comment.tsx:63
msgid "Unable to update comment"
msgstr "Kommentar konnte nicht aktualisiert werden"
@@ -1464,7 +1598,7 @@ msgid "Unable to update labels"
msgstr "Labels konnten nicht aktualisiert werden"
#: src/views/card/components/ListSelector.tsx:52
#: src/views/board/index.tsx:134
#: src/views/board/index.tsx:133
msgid "Unable to update list"
msgstr "Liste konnte nicht aktualisiert werden"
@@ -1472,11 +1606,12 @@ msgstr "Liste konnte nicht aktualisiert werden"
msgid "Unable to update members"
msgstr "Mitglieder konnten nicht aktualisiert werden"
#: src/views/card/components/ActivityList.tsx:102
msgid "unassigned <0>{memberName}</0> from the card"
msgstr "<0>{memberName}</0> von der Karte entfernt"
#. placeholder {0}: truncate(memberName)
#: src/views/card/components/ActivityList.tsx:121
msgid "unassigned <0>{0}</0> from the card"
msgstr "hat <0>{0}</0> von der Karte entfernt"
#: src/views/card/components/ActivityList.tsx:99
#: src/views/card/components/ActivityList.tsx:118
msgid "unassigned themselves from the card"
msgstr "hat sich selbst von der Karte entfernt"
@@ -1516,17 +1651,22 @@ msgstr "Aktualisieren"
msgid "Update label"
msgstr "Label aktualisieren"
#: src/views/card/components/ActivityList.tsx:54
#: src/views/card/components/ActivityList.tsx:73
msgid "updated a checklist item"
msgstr "hat ein Checklistenelement aktualisiert"
#: src/views/card/components/ActivityList.tsx:63
msgid "updated the description"
msgstr "hat die Beschreibung aktualisiert"
#: src/views/card/components/ActivityList.tsx:53
#: src/views/card/components/ActivityList.tsx:62
msgid "updated the title"
msgstr "hat den Titel aktualisiert"
#: src/views/card/components/ActivityList.tsx:73
msgid "updated the title to <0>{toTitle}</0>"
msgstr "hat den Titel zu <0>{toTitle}</0> aktualisiert"
#. placeholder {0}: truncate(toTitle)
#: src/views/card/components/ActivityList.tsx:90
msgid "updated the title to <0>{0}</0>"
msgstr "hat den Titel in <0>{0}</0> geändert"
#: src/views/settings/components/CustomURLConfirmation.tsx:52
msgid "Upgrade"
@@ -1621,7 +1761,7 @@ msgstr "Als Trello 2011 auf den markt kam, beeindruckte es alle mit seiner sorgf
msgid "Why make an open source Trello?"
msgstr "Warum ein open source Trello entwickeln?"
#: src/views/board/index.tsx:332
#: src/views/board/index.tsx:331
msgid "Workspace"
msgstr "Arbeitsbereich"