Correction bug suppression complète coté lore (et suppression dans tout ce qui est campagne de la partie lore liée).

Améliorations ux :
- Bandeau en haut qui reste accessible lors de la création d'un élément (chapitre, page, scène etc...)
- Mise en place d'un surlignage pour voir su quel élément on est positionné
This commit is contained in:
2026-04-23 14:06:50 +02:00
parent 96bc5de942
commit 8efdf5d0e0
33 changed files with 786 additions and 71 deletions

View File

@@ -17,7 +17,7 @@ export interface BreadcrumbItem {
* Utilisation type :
* <app-breadcrumb [items]="[
* { label: 'Mon Univers', route: ['/lore', loreId] },
* { label: 'PNJ', route: ['/lore', loreId, 'folders', nodeId, 'edit'] },
* { label: 'PNJ', route: ['/lore', loreId, 'folders', nodeId] },
* { label: 'Aldric' }
* ]"></app-breadcrumb>
*/

View File

@@ -131,7 +131,7 @@ export class GlobalSearchComponent implements OnInit, OnDestroy {
title: n.name,
subtitle: '',
tag: 'Dossier',
route: ['/lore', n.loreId, 'folders', n.id, 'edit']
route: ['/lore', n.loreId, 'folders', n.id]
}));
const templateResults: SearchResult[] = templates.map(t => ({
id: t.id,

View File

@@ -43,7 +43,10 @@
</button>
<span *ngIf="item.isAction || !isExpandable(item)" class="chevron-spacer"></span>
<button type="button" class="tree-btn" [class.action]="item.isAction" (click)="clickItem(item)">
<button type="button" class="tree-btn"
[class.action]="item.isAction"
[class.active]="isActive(item)"
(click)="clickItem(item)">
<lucide-icon
*ngIf="iconFor(item) as icon"
[img]="icon"

View File

@@ -129,6 +129,17 @@
&.action { color: #6b7280; font-style: italic; }
&.action:hover { color: #a5b4fc; background: #1f2937; }
// Dossier / page / scène actuellement affichée : surligné avec un accent
// violet et une barre gauche pour repérer instantanément où on se trouve,
// utile quand plusieurs entrées partagent le même label.
&.active {
background: #1e1b4b;
color: white;
font-weight: 500;
box-shadow: inset 3px 0 0 #6c63ff;
}
&.active:hover { background: #2a2558; }
.tree-item-meta {
margin-left: auto;
font-size: 0.72rem;

View File

@@ -188,6 +188,22 @@ export class SecondarySidebarComponent implements OnDestroy {
return this.hasChildren(item);
}
/**
* True si la route du node correspond exactement à l'URL courante. Utilisé
* pour surligner le dossier / page / scène en cours dans l'arbre — utile
* quand plusieurs entrées partagent le même label (ex : deux sous-dossiers
* "test" dans la même arborescence).
*/
isActive(item: TreeItem): boolean {
if (!item.route) return false;
return this.router.isActive(item.route, {
paths: 'exact',
queryParams: 'ignored',
fragment: 'ignored',
matrixParams: 'ignored'
});
}
/**
* Auto-déplie la chaîne d'ancêtres du item dont `route` matche l'URL active.
* Nécessaire car la sidebar est détruite/recréée à chaque navigation (ngIf