Files
LoreMind/web/src/app/sessions/session-reference-panel/session-reference-panel.component.html
IETM_FIXE\ietm6 75357983a1
All checks were successful
Build & Push Images / build (brain) (push) Successful in 1m29s
Build & Push Images / build (core) (push) Successful in 1m51s
Build & Push Images / build-switcher (push) Successful in 16s
Build & Push Images / build (web) (push) Successful in 1m43s
Plusieurs gros ajouts :
- Possibilité de discuter avec un PDF ; RAG ou analyse approfondie. Enlèvement de l'autre outil PDF de discussion qui analysait d'abord un PDF en proposant directement une intégration sans attendre qu'on pose de question
- Mise en place de l'import directement dans les outils dans la sidebar
- Mise en place d'un outil pour créer des tables aléatoires avec possibilité d'utiliser pendant la partie
- Mise en place d'un outil pour mettre en place des PNJ, scènes, chapitre.... directement à partir de la discussion avec le PDF
- Mise en place RAG avec mistal-embeding ou nomic si on utilise ollama
- Mise en place mistral, google en fournisseurs alternatifs pour l'IA dans le cloud
- version 0.11.0-bêta
2026-06-07 09:52:15 +02:00

137 lines
4.9 KiB
HTML

<div class="reference-panel">
<nav class="ref-tabs">
<button type="button"
class="ref-tab"
[class.ref-tab--active]="activeTab === 'ai'"
(click)="selectTab('ai')">
<lucide-icon [img]="Sparkles" [size]="14"></lucide-icon>
IA
</button>
<button type="button"
class="ref-tab"
[class.ref-tab--active]="activeTab === 'dice'"
(click)="selectTab('dice')">
<lucide-icon [img]="Dices" [size]="14"></lucide-icon>
Dés
</button>
<button type="button"
class="ref-tab"
[class.ref-tab--active]="activeTab === 'tables'"
(click)="selectTab('tables')">
<lucide-icon [img]="Table2" [size]="14"></lucide-icon>
Tables
</button>
<button type="button"
class="ref-tab"
[class.ref-tab--active]="activeTab === 'characters'"
(click)="selectTab('characters')">
<lucide-icon [img]="User" [size]="14"></lucide-icon>
PJ/PNJ
</button>
<button type="button"
class="ref-tab"
[class.ref-tab--active]="activeTab === 'scenes'"
(click)="selectTab('scenes')">
<lucide-icon [img]="Swords" [size]="14"></lucide-icon>
Scènes
</button>
</nav>
<div class="ref-content" [class.ref-content--fill]="activeTab === 'ai'">
<!-- ====== IA ====== -->
<app-session-ai-chat-panel
*ngIf="activeTab === 'ai'"
[sessionId]="sessionId"
[canSaveToJournal]="canAddToJournal"
(saveToJournal)="onAiSaveToJournal($event)">
</app-session-ai-chat-panel>
<!-- ====== Dés ====== -->
<app-session-dice-panel
*ngIf="activeTab === 'dice'"
[canAddToJournal]="canAddToJournal"
(rolled)="onDiceRolled($event)">
</app-session-dice-panel>
<!-- ====== Tables aléatoires ====== -->
<app-session-random-tables-panel
*ngIf="activeTab === 'tables'"
[campaignId]="campaignId"
[canAddToJournal]="canAddToJournal"
(rolled)="onDiceRolled($event)"
(aiReplyToJournal)="onAiSaveToJournal($event)">
</app-session-random-tables-panel>
<!-- ====== Personnages (PJ + PNJ) ====== -->
<div *ngIf="activeTab === 'characters'" class="ref-list">
<p class="loading-hint" *ngIf="loadingChars">Chargement…</p>
<div *ngIf="!loadingChars">
<div class="ref-group" *ngIf="characters.length > 0">
<h4>
<lucide-icon [img]="User" [size]="13"></lucide-icon>
Personnages joueurs
</h4>
<button *ngFor="let c of characters"
type="button"
class="ref-item"
(click)="openInNewTab(['campaigns', campaignId, 'playthroughs', playthroughId!, 'characters', c.id!])">
<span class="ref-item-name">{{ c.name }}</span>
<lucide-icon [img]="ExternalLink" [size]="12" class="ref-item-icon"></lucide-icon>
</button>
</div>
<div class="ref-group" *ngIf="npcs.length > 0">
<h4>
<lucide-icon [img]="Drama" [size]="13"></lucide-icon>
Personnages non-joueurs
</h4>
<button *ngFor="let n of npcs"
type="button"
class="ref-item"
(click)="openInNewTab(['campaigns', campaignId, 'npcs', n.id!])">
<span class="ref-item-name">{{ n.name }}</span>
<lucide-icon [img]="ExternalLink" [size]="12" class="ref-item-icon"></lucide-icon>
</button>
</div>
<p class="empty-hint" *ngIf="characters.length === 0 && npcs.length === 0">
Aucun personnage dans cette campagne.
</p>
</div>
</div>
<!-- ====== Scènes (arborescence aplatie) ====== -->
<div *ngIf="activeTab === 'scenes'" class="ref-list">
<p class="loading-hint" *ngIf="loadingTree">Chargement…</p>
<ng-container *ngIf="!loadingTree && treeData">
<p class="empty-hint" *ngIf="treeData.arcs.length === 0">
Aucun arc narratif. Construis le scénario de ta campagne pour le retrouver ici.
</p>
<div *ngFor="let arc of treeData.arcs" class="ref-group">
<h4>
<lucide-icon [img]="Swords" [size]="13"></lucide-icon>
{{ arc.name }}
</h4>
<div *ngFor="let chapter of chaptersOf(arc)" class="ref-subgroup">
<span class="ref-subgroup-title">{{ chapter.name }}</span>
<button *ngFor="let scene of scenesOf(chapter)"
type="button"
class="ref-item ref-item--nested"
(click)="openInNewTab(['campaigns', campaignId, 'arcs', arc.id!, 'chapters', chapter.id!, 'scenes', scene.id!])">
<span class="ref-item-name">{{ scene.name }}</span>
<lucide-icon [img]="ExternalLink" [size]="12" class="ref-item-icon"></lucide-icon>
</button>
</div>
</div>
</ng-container>
</div>
</div>
</div>