All checks were successful
Corrections fonctionnelles - order initialisé à la création des pages et dossiers de lore (nextOrderFor) : un nouvel élément se place désormais en dernier de sa fratrie au lieu de 0 - storePortrait : type MIME canonique dérivé de l'extension du fichier (un data URL "image/jpg" n'est plus rejeté silencieusement) - takeUntilDestroyed ajouté sur les abonnements paramMap de arc-view, folder-view et campaign-detail (fuites mémoire) Factorisation (suppression de duplication) - shared/folder-grouping.util.ts : groupByFolder + byOrder + byFolderName mutualisés entre npc-list, enemy-list, campaign-detail et la sidebar (folderChildren). Le tri des dossiers est désormais cohérent entre la sidebar et les vues cartes (insensible casse/accents partout) - DataSyncService.onChange()/persist() remplacent le câblage changed$ + reorder recopié dans 5 vues - campaign-detail : loadCampaignBundle()/applyCampaignBundle() éliminent le forkJoin dupliqué entre ngOnInit et reload - ReorderSupport (domain/shared) : squelette générique remplaçant les 8 boucles de réordonnancement copiées dans les services - FoundryExportService : GameSystem résolu une seule fois dans buildBundle - module Foundry : walkScalars mutualise la récursion de flattenStats et flattenStructure (comportements préservés) ; esc() de l'importer aligné sur foundry.utils.escapeHTML Suppression de code mort - characterService/characters retirés de loadCampaignTreeData et de ses 16 appelants (arguments, injections, imports et littéraux CampaignTreeData) - CSS orphelin : .tree-row.cdk-drop-list-receiving et .btn-back - BottomPanel.initiallyOpen (jamais lu) retiré de l'interface et de l'appelant - commentaire trompeur du PDF corrigé Tests - mise à jour de 3 tests obsolètes de campaign-tree.helper.spec qui vérifiaient encore l'ancien comportement (tri alphabétique, non-classés en enfants directs) → alignés sur le modèle actuel (tri par order + pseudo-dossier "Sans dossier")
67 lines
2.6 KiB
SCSS
67 lines
2.6 KiB
SCSS
// ==========================================================================
|
|
// Feuille de style globale — point d'entrée unique pour les règles partagées
|
|
// ==========================================================================
|
|
// Les partials dans @app/../styles/ contiennent les patterns réutilisés par
|
|
// plusieurs composants (boutons, champs de formulaire, etc.). Extraits ici
|
|
// pour éliminer la duplication qui existait dans 16+ fichiers SCSS.
|
|
@use './styles/buttons';
|
|
@use './styles/forms';
|
|
@use './styles/view';
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
background: #0a0a14;
|
|
color: #e0e0e0;
|
|
}
|
|
|
|
/* ===== Glisser-déposer (Angular CDK) — retours visuels GLOBAUX =====
|
|
Globaux car l'aperçu (cdk-drag-preview) est déplacé dans <body> : les styles
|
|
encapsulés des composants ne s'y appliquent pas. */
|
|
|
|
/* Aperçu qui suit le curseur : ligne compacte et opaque (jamais transparente). */
|
|
.cdk-drag-preview {
|
|
box-sizing: border-box;
|
|
border-radius: 6px;
|
|
background: #1b1b2b;
|
|
box-shadow: 0 8px 22px rgba(0, 0, 0, 0.55);
|
|
color: #e0e0e0;
|
|
font-size: 0.9rem;
|
|
padding: 2px 6px;
|
|
}
|
|
/* Ne pas traîner tout un sous-arbre déplié quand on déplace un dossier/arc/quête. */
|
|
.cdk-drag-preview .tree-children,
|
|
.cdk-drag-preview .node-actions { display: none; }
|
|
|
|
/* Emplacement cible : on GARDE la hauteur de la ligne (visibility, pas display) pour
|
|
qu'un vrai trou s'ouvre, et on affiche une barre d'insertion en pointillés. */
|
|
.cdk-drag-placeholder {
|
|
opacity: 1;
|
|
background: rgba(138, 123, 200, 0.18);
|
|
border: 1px dashed #8a7bc8;
|
|
border-radius: 4px;
|
|
box-sizing: border-box;
|
|
}
|
|
/* On masque le contenu (visibility = on garde la hauteur d'UNE ligne) mais on REPLIE
|
|
le sous-arbre (display:none) pour que le trou d'insertion fasse une seule ligne. */
|
|
.cdk-drag-placeholder > * { visibility: hidden; }
|
|
.cdk-drag-placeholder .tree-children { display: none; }
|
|
|
|
/* Les voisins glissent pour ouvrir/refermer l'espace pendant le déplacement. */
|
|
.cdk-drag-animating { transition: transform 180ms cubic-bezier(0, 0, 0.2, 1); }
|
|
.cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder) {
|
|
transition: transform 180ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
/* Curseurs de préhension (le drag part de la poignée). */
|
|
[cdkDrag] { cursor: default; }
|
|
.cdk-drag-handle, [cdkDragHandle] { cursor: grab; }
|
|
.cdk-drag-handle:active, [cdkDragHandle]:active { cursor: grabbing; }
|
|
/* Surbrillance d'une zone de dépôt qui reçoit un élément (ex: page sur dossier). */
|
|
.cdk-drop-list-receiving { outline: 2px dashed #6c63ff; outline-offset: 2px; }
|