// ============================================================================ // settings.jsx — Modale Paramètres globaux du coffre. // Les préférences sont stockées dans vault.settings, donc chiffrées avec le // reste du coffre (zero-knowledge). // ============================================================================ (function (global) { 'use strict'; const { useState, useEffect } = React; // ─── Confirmation suppression totale (15s avant que le bouton soit actif) ─ const WipeConfirmModal = ({ onConfirm, onCancel }) => { const [countdown, setCountdown] = useState(15); const [busy, setBusy] = useState(false); useEffect(() => { if (countdown <= 0) return; const id = setInterval(() => setCountdown(c => Math.max(0, c - 1)), 1000); return () => clearInterval(id); }, [countdown]); const submit = async () => { if (countdown > 0 || busy) return; setBusy(true); try { await onConfirm(); } catch { setBusy(false); } }; return (
e.stopPropagation()}> {!busy && }

Suppression totale du coffre

Cette action est définitive et ne peut pas être annulée.

Tous vos mots de passe, codes 2FA, réseaux Wi-Fi {' '}et notes seront effacés du coffre. Les dossiers seront réinitialisés (Personnel, Travail). Vos préférences sont conservées.

{countdown > 0 ? <>Le bouton de confirmation deviendra actif dans {countdown} seconde{countdown > 1 ? 's' : ''}. : <>Vous pouvez maintenant confirmer la suppression.}

); }; const SettingsModal = ({ settings, onSave, onWipe, onCancel }) => { const merged = CPCrypto.mergeSettings(settings); const [defaultAvatarType, setDefaultAvatarType] = useState(merged.defaultAvatarType); const [defaultIconName, setDefaultIconName] = useState(merged.defaultIconName); const [forceAvatarType, setForceAvatarType] = useState(merged.forceAvatarType || ''); const [forceAvatarIconName, setForceAvatarIconName] = useState(merged.forceAvatarIconName || 'key'); const [autoLockMinutes, setAutoLockMinutes] = useState(merged.autoLockMinutes); const [autoExpandFolders, setAutoExpandFolders] = useState(merged.autoExpandFolders !== false); const [autoCollapseFolders, setAutoCollapseFolders] = useState(merged.autoCollapseFolders !== false); const [showSubfolderEntries, setShowSubfolderEntries] = useState(merged.showSubfolderEntries !== false); const [autoExpandAccounts, setAutoExpandAccounts] = useState(merged.autoExpandAccounts !== false); const [autoCollapseAccounts, setAutoCollapseAccounts] = useState(merged.autoCollapseAccounts !== false); const [showStrengthDots, setShowStrengthDots] = useState(merged.showStrengthDots !== false); const [busy, setBusy] = useState(false); const [error, setError] = useState(''); const [wipeOpen, setWipeOpen] = useState(false); const submit = async (e) => { e.preventDefault(); setError(''); setBusy(true); try { await onSave({ defaultAvatarType, defaultIconName: defaultAvatarType === 'icon' ? (defaultIconName || 'key') : merged.defaultIconName, forceAvatarType: forceAvatarType || '', forceAvatarIconName: forceAvatarType === 'icon' ? (forceAvatarIconName || 'key') : merged.forceAvatarIconName, autoLockMinutes: Number(autoLockMinutes) || 15, autoExpandFolders, autoCollapseFolders, showSubfolderEntries, autoExpandAccounts, autoCollapseAccounts, showStrengthDots, }); } catch (err) { setError(err.message || 'Échec de la sauvegarde'); setBusy(false); } }; const icons = window.AVATAR_ICONS || []; return (
e.stopPropagation()}>

Paramètres

Préférences pour ce coffre. Stockées chiffrées comme le reste.

Nouveaux mots de passe

Avatar par défaut
{defaultAvatarType === 'icon' && (
Icône
{icons.map(name => ( ))}
)} {defaultAvatarType === 'logo' && (
Le logo est récupéré depuis icons.duckduckgo.com à chaque affichage. Cela révèle au CDN les domaines de votre coffre.
)}
Forcer un type d'avatar pour toutes les entrées
{forceAvatarType === 'icon' && (
Icône forcée
{icons.map(name => ( ))}
)} {forceAvatarType && (
L'apparence est forcée visuellement. Les valeurs par entrée {' '}restent stockées et seront restaurées si vous repassez sur « Aucun ».
)}

Comportement de la sidebar

Déplier les dossiers au clic
Replier le dossier précédent à la sélection
Afficher les entrées des sous-dossiers Ex : « SAPI » montre aussi les entrées de « SAPI / Office BOITE »

Comportement de la liste

Déplier les comptes multiples au clic
Replier l'ancienne sélection au changement
Afficher la pastille de force du mot de passe Le petit point coloré (rouge / orange / vert) à gauche de l'identifiant

Sécurité

{error &&
{error}
} {/* Zone de danger */} {onWipe && (

Zone de danger

Supprimer toutes les données
Efface mots de passe, codes 2FA, Wi-Fi et notes. Le coffre reste utilisable, les dossiers sont réinitialisés.
)}
{wipeOpen && ( { await onWipe(); setWipeOpen(false); }} onCancel={() => setWipeOpen(false)} /> )}
); }; global.SettingsModal = SettingsModal; })(window);