v4: the playlist and dump edit forms end in one bar of actions, a panel of its own — the playlist editor drew rules between its fields and its actions, and on a phone its Delete, Cancel and Save wrapped into a staircase, then stacked (a0c8b1d), neither of which held together. Both forms are now built as DumpEdit was: surface panels 3px apart (.form-panel, from .dump-edit-panel), the last a bar (.form-panel--bar, from .dump-edit-footer) holding Delete on the left and Cancel and Save on the right, compact (btn-sm), on one line. The new DeleteButton says "Delete" and names what goes to assistive tech ("Delete playlist", "Delete dump"); in a bar too narrow for the three labels in every face and language (a container query, under 18rem), it shows 🗑 instead. While edited, the playlist's header drops its own card for the form's panels. The phone stacking rule is gone. An auto-sized editor also re-fits when its width changes with its text unchanged: opening the form makes the page tall enough for a scrollbar, which narrowed the description after it was measured, so it overflowed; and it hides its overflow below its max-height, where a scrollbar could only come of rounding, and drops the resize grip, which the next keystroke would undo. 669 frontend tests pass, and tsc, eslint, deno fmt, doc:lint and i18n:compile --strict are clean; checked in screenshots in Kanagawa dark (French, 385 and 360px), Smooth light at 1000px and DumpEdit in Smooth at 390px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-08 22:05:43 +00:00
parent b9281da9c9
commit 5acdf79c8d
9 changed files with 313 additions and 224 deletions

View File

@@ -427,7 +427,7 @@ msgstr "← Retour"
#: src/pages/Dump.tsx:326
#: src/pages/Dump.tsx:568
#: src/pages/DumpEdit.tsx:231
#: src/pages/DumpEdit.tsx:232
msgid "← Back to all dumps"
msgstr "← Retour à toutes les recos"
@@ -589,12 +589,12 @@ msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les vo
#: src/components/comment/CommentForm.tsx:127
#: src/components/dump/create/DumpCreateModal.tsx:752
#: src/components/form/FormActions.tsx:42
#: src/components/playlist/PlaylistEditForm.tsx:194
#: src/components/playlist/PlaylistEditForm.tsx:199
#: src/components/profile/DescriptionEditor.tsx:97
#: src/components/profile/EmailEditor.tsx:83
#: src/components/shared/ConfirmModal.tsx:63
#: src/pages/Dump.tsx:445
#: src/pages/DumpEdit.tsx:570
#: src/pages/DumpEdit.tsx:565
msgid "Cancel"
msgstr "Annuler"
@@ -607,7 +607,7 @@ msgstr "Annuler la suppression"
msgid "Cancel reply"
msgstr "Annuler la réponse"
#: src/components/layout/AppHeader.tsx:164
#: src/components/layout/AppHeader.tsx:190
msgid "Cancel search"
msgstr "Annuler la recherche"
@@ -642,13 +642,13 @@ msgid "Change skin tone"
msgstr "Changer la couleur de peau"
#: src/components/chat/ChatModal.tsx:716
#: src/components/layout/ChatButton.tsx:27
#: src/components/layout/ChatButton.tsx:30
#: src/components/layout/ChatFab.tsx:54
#: src/components/layout/ChatFab.tsx:55
msgid "Chat"
msgstr "Tribune"
#: src/components/layout/ChatButton.tsx:26
#: src/components/layout/ChatButton.tsx:29
#: src/components/layout/ChatFab.tsx:53
msgid "Chat ({unreadChatCount} unread)"
msgstr "{unreadChatCount} messages non lus"
@@ -712,7 +712,7 @@ msgid "Could not connect to the server. Check your connection and try again."
msgstr "Impossible de joindre le serveur. Vérifiez votre connexion et réessayez."
#: src/components/profile/ProfilePlaylistsTab.tsx:126
#: src/pages/DumpEdit.tsx:558
#: src/pages/DumpEdit.tsx:559
msgid "Could not delete"
msgstr "Suppression impossible"
@@ -720,7 +720,7 @@ msgstr "Suppression impossible"
msgid "Could not rename"
msgstr "Renommage impossible"
#: src/pages/DumpEdit.tsx:511
#: src/pages/DumpEdit.tsx:512
msgid "Could not save"
msgstr "Sauvegarde impossible"
@@ -740,7 +740,7 @@ msgstr "Désabonnement impossible"
msgid "Couldn't update. Try again."
msgstr "La mise à jour a échoué. Réessayez."
#: src/components/playlist/PlaylistEditForm.tsx:133
#: src/components/playlist/PlaylistEditForm.tsx:135
msgid "Cover"
msgstr "Couverture"
@@ -775,7 +775,7 @@ msgstr "Onglet par défaut"
#: src/components/chat/ChatMessageItem.tsx:214
#: src/components/comment/CommentNode.tsx:265
#: src/components/comment/CommentNode.tsx:271
#: src/components/playlist/PlaylistEditForm.tsx:190
#: src/components/form/DeleteButton.tsx:36
#: src/components/shared/ConfirmModal.tsx:34
msgid "Delete"
msgstr "Supprimer"
@@ -789,19 +789,20 @@ msgstr "Supprimer la catégorie"
msgid "Delete category \"{0}\"? This cannot be undone."
msgstr "Supprimer la catégorie \"{0}\" ? Cette action est irréversible."
#: src/pages/DumpEdit.tsx:313
#: src/pages/DumpEdit.tsx:566
#: src/pages/DumpEdit.tsx:314
#: src/pages/DumpEdit.tsx:562
msgid "Delete dump"
msgstr "Supprimer la reco"
#. placeholder {0}: res.status
#: src/pages/DumpEdit.tsx:192
#: src/pages/DumpEdit.tsx:193
msgid "Delete failed ({0})"
msgstr "Échec de la suppression ({0})"
#: src/components/playlist/PlaylistCard.tsx:142
#: src/components/playlist/PlaylistEditForm.tsx:190
#: src/components/profile/ProfilePlaylistsTab.tsx:156
#: src/pages/PlaylistDetail.tsx:136
#: src/pages/PlaylistDetail.tsx:141
msgid "Delete playlist"
msgstr "Supprimer la collection"
@@ -809,7 +810,7 @@ msgstr "Supprimer la collection"
msgid "Delete this comment?"
msgstr "Supprimer ce commentaire ?"
#: src/pages/DumpEdit.tsx:312
#: src/pages/DumpEdit.tsx:313
msgid "Delete this dump? This cannot be undone."
msgstr "Supprimer cette reco ? Cette action est irréversible."
@@ -818,7 +819,7 @@ msgid "Delete this message?"
msgstr "Supprimer ce message ?"
#: src/components/profile/ProfilePlaylistsTab.tsx:155
#: src/pages/PlaylistDetail.tsx:135
#: src/pages/PlaylistDetail.tsx:140
msgid "Delete this playlist? This cannot be undone."
msgstr "Supprimer cette collection ? Cette action est irréversible."
@@ -826,7 +827,7 @@ msgstr "Supprimer cette collection ? Cette action est irréversible."
msgid "deleted message"
msgstr "message supprimé"
#: src/components/playlist/PlaylistEditForm.tsx:173
#: src/components/playlist/PlaylistEditForm.tsx:175
msgid "Description"
msgstr "Description"
@@ -864,11 +865,11 @@ msgstr "Déposez un fichier ici"
msgid "Drop a file here, or paste one"
msgstr "Déposez un fichier ici, ou collez-en un"
#: src/pages/DumpEdit.tsx:502
#: src/pages/DumpEdit.tsx:503
msgid "Drop a replacement here"
msgstr "Déposez un fichier de remplacement ici"
#: src/components/layout/AppHeader.tsx:203
#: src/components/layout/AppHeader.tsx:209
msgid "Dump"
msgstr "Reco"
@@ -946,12 +947,12 @@ msgstr "modifié {0}"
msgid "Edited {0}"
msgstr "Modifié le {0}"
#: src/pages/DumpEdit.tsx:256
#: src/pages/DumpEdit.tsx:257
msgid "Editing"
msgstr "Modification"
#. placeholder {0}: state.dump.title
#: src/pages/DumpEdit.tsx:79
#: src/pages/DumpEdit.tsx:80
msgid "Editing {0}"
msgstr "Édition de {0}"
@@ -1005,7 +1006,7 @@ msgstr "Impossible de publier le commentaire"
msgid "Failed to post reply"
msgstr "Impossible de publier la réponse"
#: src/components/playlist/PlaylistEditForm.tsx:182
#: src/components/playlist/PlaylistEditForm.tsx:184
#: src/components/profile/DescriptionEditor.tsx:99
#: src/components/profile/EmailEditor.tsx:86
msgid "Failed to save"
@@ -1113,8 +1114,8 @@ msgstr "image"
msgid "In collections"
msgstr "Dans les collections"
#: src/components/editor/TextEditor.tsx:544
#: src/components/editor/TextEditor.tsx:546
#: src/components/editor/TextEditor.tsx:573
#: src/components/editor/TextEditor.tsx:575
msgid "Insert emoji"
msgstr "Insérer un emoji"
@@ -1175,7 +1176,7 @@ msgstr "Lien ou fichier"
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…"
#: src/components/layout/AppHeader.tsx:238
#: src/components/layout/AppHeader.tsx:242
msgid "Live updates unavailable."
msgstr "Mises à jour en direct indisponibles."
@@ -1188,7 +1189,7 @@ msgid "Load older messages"
msgstr "Charger les messages plus anciens"
#: src/pages/Dump.tsx:302
#: src/pages/DumpEdit.tsx:207
#: src/pages/DumpEdit.tsx:208
msgid "Loading dump…"
msgstr "Chargement de la reco…"
@@ -1218,7 +1219,7 @@ msgstr "Chargement du profil…"
msgid "Loading…"
msgstr "Chargement…"
#: src/components/layout/AppHeader.tsx:211
#: src/components/layout/AppHeader.tsx:216
#: src/pages/UserLogin.tsx:41
#: src/pages/UserLogin.tsx:67
#: src/pages/UserLogin.tsx:86
@@ -1366,14 +1367,14 @@ msgstr "Aucun abonnement pour le moment."
msgid "Nothing here yet."
msgstr "Rien ici pour l'instant."
#: src/components/layout/NotificationBell.tsx:55
#: src/components/layout/NotificationBell.tsx:57
#: src/pages/Notifications.tsx:376
#: src/pages/Notifications.tsx:494
#: src/pages/Settings.tsx:128
msgid "Notifications"
msgstr "Notifications"
#: src/components/layout/NotificationBell.tsx:54
#: src/components/layout/NotificationBell.tsx:56
msgid "Notifications ({unreadNotificationCount} unread)"
msgstr "Notifications ({unreadNotificationCount} non lues)"
@@ -1385,11 +1386,11 @@ msgstr "Désactivés"
msgid "On"
msgstr "Activés"
#: src/components/editor/TextEditor.tsx:359
#: src/components/editor/TextEditor.tsx:385
msgid "Only images can be dropped here."
msgstr "Seules les images peuvent être déposées ici."
#: src/pages/DumpEdit.tsx:117
#: src/pages/DumpEdit.tsx:118
msgid "Only its poster or a moderator can edit this dump."
msgstr "Seuls son auteur et les modérateurs peuvent modifier ce dump."
@@ -1463,7 +1464,7 @@ msgid "Play"
msgstr "Lecture"
#: src/components/dump/create/StepIndicator.tsx:21
#: src/components/layout/AppHeader.tsx:184
#: src/components/layout/AppHeader.tsx:178
#: src/components/layout/UserMenu.tsx:81
#: src/components/profile/ProfileFollowTab.tsx:167
#: src/components/profile/ProfilePlaylistsTab.tsx:118
@@ -1512,7 +1513,7 @@ msgstr "public"
msgid "Public"
msgstr "Public"
#: src/pages/DumpEdit.tsx:289
#: src/pages/DumpEdit.tsx:290
msgid "Refresh metadata"
msgstr "Actualiser les métadonnées"
@@ -1520,7 +1521,7 @@ msgstr "Actualiser les métadonnées"
msgid "Refreshing stream…"
msgstr "Actualisation du flux…"
#: src/pages/DumpEdit.tsx:288
#: src/pages/DumpEdit.tsx:289
msgid "Refreshing…"
msgstr "Actualisation…"
@@ -1566,7 +1567,7 @@ msgstr "Renommer"
msgid "Renaming…"
msgstr "Renommage…"
#: src/pages/DumpEdit.tsx:494
#: src/pages/DumpEdit.tsx:495
msgid "Replace file"
msgstr "Remplacer le fichier"
@@ -1592,8 +1593,8 @@ msgstr "Échec de la réinitialisation"
msgid "Reset password"
msgstr "Réinitialiser le mot de passe"
#: src/pages/DumpEdit.tsx:470
#: src/pages/DumpEdit.tsx:525
#: src/pages/DumpEdit.tsx:471
#: src/pages/DumpEdit.tsx:526
msgid "Reset to default"
msgstr "Réinitialiser par défaut"
@@ -1604,7 +1605,7 @@ msgstr "Rétablir le titre suggéré"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:319
#: src/pages/DumpEdit.tsx:224
#: src/pages/DumpEdit.tsx:225
msgid "Retry"
msgstr "Réessayer"
@@ -1615,16 +1616,16 @@ msgstr "Rôle"
#: src/components/category/CategoryManager.tsx:216
#: src/components/chat/ChatEditBox.tsx:85
#: src/components/comment/CommentNode.tsx:216
#: src/components/playlist/PlaylistEditForm.tsx:200
#: src/components/playlist/PlaylistEditForm.tsx:206
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:437
#: src/pages/DumpEdit.tsx:573
#: src/pages/DumpEdit.tsx:568
msgid "Save"
msgstr "Enregistrer"
#: src/components/comment/CommentNode.tsx:217
#: src/components/playlist/PlaylistEditForm.tsx:197
#: src/components/playlist/PlaylistEditForm.tsx:203
#: src/components/profile/ChangePasswordModal.tsx:119
#: src/components/profile/DescriptionEditor.tsx:86
#: src/components/profile/EmailEditor.tsx:72
@@ -1633,7 +1634,7 @@ msgstr "Enregistrer"
msgid "Saving…"
msgstr "Enregistrement…"
#: src/components/layout/AppHeader.tsx:164
#: src/components/layout/AppHeader.tsx:190
#: src/components/layout/SearchBar.tsx:83
#: src/pages/Search.tsx:69
msgid "Search"
@@ -1676,7 +1677,7 @@ msgstr "Envoyer le lien de réinitialisation"
msgid "Sending…"
msgstr "Envoi…"
#: src/components/layout/AppHeader.tsx:200
#: src/components/layout/AppHeader.tsx:206
msgid "Server unreachable"
msgstr "Serveur inaccessible"
@@ -1704,14 +1705,14 @@ msgstr "Usage unique, valable 7 jours."
msgid "slug"
msgstr "identifiant"
#: src/components/editor/TextEditor.tsx:317
#: src/components/editor/TextEditor.tsx:343
msgid "Some images couldn't be uploaded."
msgstr "Certaines images n'ont pas pu être envoyées."
#: src/components/form/FormError.tsx:31
#: src/components/layout/PageError.tsx:29
#: src/contexts/ws/WSProvider.tsx:729
#: src/pages/PlaylistDetail.tsx:119
#: src/pages/PlaylistDetail.tsx:124
msgid "Something went wrong"
msgstr "Une erreur est survenue"
@@ -1743,7 +1744,7 @@ msgstr "la tribune"
msgid "The dump couldn't be removed. Try again."
msgstr "Le dump n'a pas pu être retiré. Réessayez."
#: src/components/editor/TextEditor.tsx:318
#: src/components/editor/TextEditor.tsx:344
msgid "The image couldn't be uploaded."
msgstr "L'image n'a pas pu être envoyée."
@@ -1779,14 +1780,14 @@ msgstr "Ce site n'envoie pas d'e-mails, aucun résumé ne part donc."
msgid "This unsubscribe link is missing or malformed."
msgstr "Ce lien de désabonnement est absent ou mal formé."
#: src/pages/DumpEdit.tsx:454
#: src/pages/DumpEdit.tsx:455
msgid "Thumbnail"
msgstr "Miniature"
#: src/components/dump/create/TitleField.tsx:45
#: src/components/playlist/PlaylistCreateForm.tsx:96
#: src/components/playlist/PlaylistEditForm.tsx:157
#: src/pages/DumpEdit.tsx:515
#: src/components/playlist/PlaylistEditForm.tsx:159
#: src/pages/DumpEdit.tsx:516
msgid "Title"
msgstr "Titre"
@@ -1861,7 +1862,7 @@ msgstr "Envoi échoué"
msgid "Uploading {0}%"
msgstr "Envoi {0} %"
#: src/components/editor/TextEditor.tsx:566
#: src/components/editor/TextEditor.tsx:595
msgid "Uploading image…"
msgstr "Envoi de l'image…"
@@ -1883,7 +1884,7 @@ msgstr "Voté"
msgid "Upvoted ({0})"
msgstr "Voté ({0})"
#: src/pages/DumpEdit.tsx:486
#: src/pages/DumpEdit.tsx:487
msgid "URL"
msgstr "URL"
@@ -1933,7 +1934,7 @@ msgid "Volume"
msgstr "Volume"
#: src/components/dump/create/DumpCreateModal.tsx:712
#: src/pages/DumpEdit.tsx:543
#: src/pages/DumpEdit.tsx:544
msgid "What makes it worth it?"
msgstr "Pourquoi on en voudrait ?"
@@ -1951,7 +1952,7 @@ msgid "Why & where"
msgstr "Pourquoi & où"
#: src/components/dump/create/DumpCreateModal.tsx:711
#: src/pages/DumpEdit.tsx:542
#: src/pages/DumpEdit.tsx:543
msgid "Why?"
msgstr "Pourquoi ?"