feat: add WebDAV file browser with auth improvements

Add a new Files section powered by WebDAV for browsing, uploading,
downloading, renaming, and deleting files and folders.

New features:
- WebDAV file browser with grid/list views and breadcrumb navigation
- File upload (drag-and-drop and button), folder creation, rename, delete
- File preview modals for images and other file types
- WebDAV proxy API route to handle authentication
- Navigation rail entry for Files (auto-hidden when WebDAV is unsupported)

Auth improvements:
- Fix premature redirects on calendar, contacts, and settings pages by
  adding explicit auth check on mount before redirecting to login
- Persist active settings tab in localStorage

Other:
- Expose getAuthHeader() and getServerUrl() on JMAPClient
- Add WebDAV store with connection testing and capability detection
- Add i18n translations for file browser in all 8 locales (de, en, es,
  fr, it, ja, nl, pt)
This commit is contained in:
Linus Rath
2026-03-15 05:24:27 +01:00
parent cb74e3bf73
commit 1f1db8fac8
23 changed files with 4179 additions and 12 deletions
+79
View File
@@ -61,6 +61,7 @@
"contacts": "連絡先",
"calendar": "カレンダー",
"settings": "設定",
"files": "ファイル",
"loading_mailboxes": "メールボックスを読み込み中...",
"push_connected": "リアルタイム更新が有効",
"push_disconnected": "リアルタイム更新が無効",
@@ -1692,5 +1693,83 @@
"got_it": "了解",
"settings": "設定",
"dismiss": "閉じる"
},
"files": {
"title": "ファイル",
"search_placeholder": "ファイルを検索...",
"empty_state_title": "ファイルがありません",
"empty_state_description": "ファイルをアップロードするかフォルダーを作成して始めましょう",
"upload": "アップロード",
"upload_files": "ファイルをアップロード",
"new_folder": "新しいフォルダー",
"new_folder_name": "フォルダー名",
"rename": "名前を変更",
"rename_title": "名前を変更",
"new_name": "新しい名前",
"delete": "削除",
"delete_confirm_title": "リソースを削除",
"delete_confirm_message": "\"{name}\"を削除してもよろしいですか?この操作は元に戻せません。",
"download": "ダウンロード",
"name": "名前",
"size": "サイズ",
"modified": "更新日時",
"type": "種類",
"folder": "フォルダー",
"file": "ファイル",
"parent_directory": "親ディレクトリ",
"breadcrumb_root": "ホーム",
"drop_files_here": "ここにファイルをドロップしてアップロード",
"uploading": "アップロード中...",
"upload_success": "{count, plural, other {#件のファイルをアップロードしました}}",
"upload_error": "ファイルのアップロードに失敗しました",
"create_folder_success": "フォルダーを作成しました",
"create_folder_error": "フォルダーの作成に失敗しました",
"delete_success": "正常に削除しました",
"delete_error": "削除に失敗しました",
"rename_success": "正常に名前を変更しました",
"rename_error": "名前の変更に失敗しました",
"download_error": "ダウンロードに失敗しました",
"not_available": "WebDAVファイルストレージはこのサーバーで利用できません",
"cancel": "キャンセル",
"create": "作成",
"save": "保存",
"no_results": "検索に一致するファイルがありません",
"batch_delete_confirm_message": "{count, plural, other {#件のアイテム}}を削除してもよろしいですか?この操作は元に戻せません。",
"batch_delete_success": "{count, plural, other {#件のアイテムを削除しました}}",
"grid_view": "グリッド表示",
"list_view": "リスト表示",
"details": "詳細",
"path": "パス",
"preview": "プレビュー",
"preview_error": "プレビューの読み込みに失敗しました",
"cut": "切り取り",
"copy": "コピー",
"paste": "貼り付け",
"move_success": "{count, plural, other {#件のアイテムを移動しました}}",
"move_error": "移動に失敗しました",
"paste_success": "正常に貼り付けました",
"paste_error": "貼り付けに失敗しました",
"new_text_file": "新規テキストファイル",
"file_name": "ファイル名",
"retry": "再試行",
"refresh": "更新",
"toggle_favorite": "お気に入り切替",
"duplicate": "複製",
"duplicate_success": "正常に複製しました",
"duplicate_error": "複製に失敗しました",
"create_file_success": "ファイルを作成しました",
"create_file_error": "ファイルの作成に失敗しました",
"favorites": "お気に入り",
"recent": "最近のファイル",
"properties": "プロパティ",
"open_folder": "フォルダを開く",
"upload_folder": "フォルダをアップロード",
"file_too_large": "\"{name}\" がファイルサイズの上限を超えています({max})",
"undo": "元に戻す",
"undo_success": "操作を元に戻しました",
"undo_error": "元に戻すのに失敗しました",
"toolbar": "ファイル操作",
"file_list": "ファイルとフォルダ",
"context_menu": "操作"
}
}