feat: add mobile project editor with worktree reorder and delete

Replace the up/down arrows in the mobile project reorder list (drag already
covers reordering) with an edit button that opens a dedicated project editor
surface: rename, pick icon and color, and discover a favicon (no upload).

The editor lists the project's worktrees with drag-to-reorder (persisted per
project, like project order) and a delete button that opens a mobile
confirmation built on the shared worktree primitives — archiving attached
sessions and optionally removing the local/remote branch.
This commit is contained in:
Bohdan Triapitsyn
2026-06-02 16:10:20 +03:00
parent 51682dc7af
commit 79d68ba583
12 changed files with 822 additions and 34 deletions
+13
View File
@@ -68,6 +68,19 @@ export const dict: Record<I18nKey, string> = {
'mobile.sessions.confirmRemoveProject': 'Usuń',
'mobile.sessions.confirmRemoveProjectAria': 'Potwierdź usunięcie {label}',
'mobile.sessions.toast.projectRemoved': 'Usunięto {label}',
'mobile.sessions.editProjectAria': 'Edytuj {label}',
'mobile.projectEdit.worktreesTitle': 'Worktree',
'mobile.projectEdit.worktreesEmpty': 'Ten projekt nie ma jeszcze worktree.',
'mobile.projectEdit.reorderHint': 'Przeciągnij, aby zmienić kolejność worktree.',
'mobile.projectEdit.dragWorktreeAria': 'Przeciągnij {label}, aby zmienić kolejność',
'mobile.projectEdit.deleteWorktreeAria': 'Usuń worktree {label}',
'mobile.projectEdit.deleteWorktreeTitle': 'Usuń worktree',
'mobile.projectEdit.deleteWorktreeConfirmButton': 'Usuń',
'mobile.projectEdit.deleteWorktreeConfirm': 'Usunąć worktree „{name}”? Tej operacji nie można cofnąć.',
'mobile.projectEdit.deleteWorktreeDirty': 'Ten worktree ma niezatwierdzone zmiany, które zostaną utracone.',
'mobile.projectEdit.deleteWorktreeArchiveNote': 'Powiązane sesje ({count}) zostaną zarchiwizowane.',
'mobile.projectEdit.deleteLocalBranch': 'Usuń także gałąź lokalną',
'mobile.projectEdit.deleteRemoteBranch': 'Usuń także gałąź zdalną',
'mobile.sessions.showMore': 'Pokaż jeszcze {count}',
'mobile.sessions.search.section.sessions': 'Sesje',
'mobile.sessions.search.section.archived': 'Zarchiwizowane',