diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index f061845..6d16842 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1970,6 +1970,8 @@ function App() { const target = persons.find((candidate) => String(candidate.id) === String(personId)) const name = target ? firstNameLabel(target) : '' + // Accordé quand le sexe est connu, « supprimé·e » seulement quand il ne l'est pas + const sex = target?.sex const snapshot = removePersonFromGraph(personId) tree.setSelectedPerson(null) tree.bumpGraphRevision() @@ -1977,7 +1979,13 @@ function App() { const treeId = ownTree ? tree.treeContext.treeId : null undoable.start({ - message: name ? t("{name} est supprimé·e de l'arbre.", { name }) : t("La personne est supprimée de l'arbre."), + message: !name + ? t("La personne est supprimée de l'arbre.") + : sex === 'female' + ? t("{name} est supprimée de l'arbre.", { name }) + : sex === 'male' + ? t("{name} est supprimé de l'arbre.", { name }) + : t("{name} est supprimé·e de l'arbre.", { name }), reapply: () => Boolean(removePersonFromGraph(personId)), commit: async ({ keepalive = false } = {}) => { if (!treeId) return @@ -1987,7 +1995,11 @@ function App() { } catch { if (keepalive) return await refreshKeepingSelection({ relayout: true }) - setDraftNotice(t("{name} n'a pas pu être supprimé·e. Réessayez.", { name })) + setDraftNotice(sex === 'female' + ? t("{name} n'a pas pu être supprimée. Réessayez.", { name }) + : sex === 'male' + ? t("{name} n'a pas pu être supprimé. Réessayez.", { name }) + : t("{name} n'a pas pu être supprimé·e. Réessayez.", { name })) } }, undo: async () => { diff --git a/frontend/src/components/SettingsPanels.css b/frontend/src/components/SettingsPanels.css index 7afe13b..34ede7f 100644 --- a/frontend/src/components/SettingsPanels.css +++ b/frontend/src/components/SettingsPanels.css @@ -293,6 +293,9 @@ .undo-toast-btn:hover { background: color-mix(in srgb, var(--pz-bg) 26%, transparent); } .undo-toast-btn:focus-visible { outline: 2px solid var(--pz-bg); outline-offset: 2px; } @media (max-width: 768px) { .contrib-success-toast { bottom: 78px; padding: 11px 16px; border-radius: 16px; font-size: 13px; } } +/* Sous 768 px, la réglette de zoom reste ouverte en bas à gauche (ZoomControl.css, de 8 à 60 px du bord) : + la notification commence après elle au lieu de passer dessus */ +@media (max-width: 768px) { .contrib-success-toast { left: 72px; right: 12px; width: auto; max-width: none; transform: none; } } @media (max-width: 560px) { .contrib-invite-link { flex-wrap: wrap; border-radius: var(--pz-r-m); padding: 10px; } diff --git a/frontend/src/components/ZoomControl.css b/frontend/src/components/ZoomControl.css index 782fee9..8d03433 100644 --- a/frontend/src/components/ZoomControl.css +++ b/frontend/src/components/ZoomControl.css @@ -11,6 +11,12 @@ animation: zoomControlSlideIn 0.6s cubic-bezier(0.22, 1, 0.36, 1); } +/* Fiche ouverte sur ordinateur : elle recouvre le bouton, dont le bord dépassait en bas à gauche (fiche à 25 px + du bord, bouton à 20 px). Il revient quand la fiche se ferme. */ +@media (min-width: 769px) { + body:has(.person-card) .zoom-control { visibility: hidden; } +} + @keyframes zoomControlSlideIn { from { opacity: 0; diff --git a/frontend/src/i18n/en/fiche.js b/frontend/src/i18n/en/fiche.js index 791f6e4..61867ee 100644 --- a/frontend/src/i18n/en/fiche.js +++ b/frontend/src/i18n/en/fiche.js @@ -93,8 +93,12 @@ export default { 'Ajouter un enfant': 'Add a child', 'Rechercher un enfant': 'Search for a child', "{name} est supprimé·e de l'arbre.": '{name} was deleted from the tree.', + "{name} est supprimée de l'arbre.": '{name} was deleted from the tree.', + "{name} est supprimé de l'arbre.": '{name} was deleted from the tree.', "La personne est supprimée de l'arbre.": 'The person was deleted from the tree.', "{name} n'a pas pu être supprimé·e. Réessayez.": '{name} could not be deleted. Try again.', + "{name} n'a pas pu être supprimée. Réessayez.": '{name} could not be deleted. Try again.', + "{name} n'a pas pu être supprimé. Réessayez.": '{name} could not be deleted. Try again.', 'Annuler (Ctrl+Z)': 'Undo (Ctrl+Z)', 'Le souvenir est supprimé.': 'The memory was deleted.', 'Le moment est supprimé.': 'The moment was deleted.',