Correction de plusieurs anomalies : problème de switch entre 2 templates (par exemple si on était sur un template 1 et qu'on voulait passer directement au 2, ce dernier ne chargeait pas) ; correction du soucis d'apparition de la sidebar à gauche qui disparaissait sans explication ; problème de redirection : lorsqu'on terminait de créer un PJ / PNJ ; on arrivait sur l'accueil de la campagne au lieu de voir le résultat de la création. Problème de redirection également lors du clique sur un PNJ / PJ sur le coté : on arrivait sur l'édition au lieu de la présentation. Correction de la première lettre stylisée : tout est au même style comme ça plus de probleme de lecture. Nouveautées : stylisation des modales (notamment suppression, warning.....) avec en prime l'ajout d'un warning lors du changement de système pour avertir que les fiches persos ne sont pas conservées. Ajout d'une option pour créer un game system directement à la création d'une campagne afin de faciliter la mise en place de cette dernière. Ajout d'un bouton pour créer un nouveau template directement lorsqu'on créer une page : ça permet de créer un template et de revenir sur la page qu'on était en train de créer sans perdre le titre. Passage en bêta 0.8.4
130 lines
4.7 KiB
HTML
130 lines
4.7 KiB
HTML
<div class="gse-page">
|
|
|
|
<div class="gse-header">
|
|
<button class="btn-back" (click)="back()">
|
|
<lucide-icon [img]="ArrowLeft" [size]="14"></lucide-icon>
|
|
Retour à la liste
|
|
</button>
|
|
<h1>
|
|
<lucide-icon [img]="Dices" [size]="22"></lucide-icon>
|
|
{{ id ? 'Éditer le système' : 'Nouveau système de JDR' }}
|
|
</h1>
|
|
</div>
|
|
|
|
<div class="gse-form">
|
|
|
|
<div class="field">
|
|
<label for="gs-name">Nom *</label>
|
|
<input id="gs-name" type="text" [(ngModel)]="name" name="name" placeholder="Ex: Nimble, D&D 5.1 SRD, Mon Homebrew..." />
|
|
</div>
|
|
|
|
<div class="field">
|
|
<label for="gs-description">Description courte</label>
|
|
<textarea id="gs-description" [(ngModel)]="description" name="description" rows="2" placeholder="En une ligne, de quoi parle ce système ?"></textarea>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<label for="gs-author">Auteur</label>
|
|
<input id="gs-author" type="text" [(ngModel)]="author" name="author" placeholder="Ex: Hasbro, Homebrew, moi-même..." />
|
|
</div>
|
|
|
|
<!-- Sections de règles -->
|
|
<div class="sections-area">
|
|
<h2 class="sections-title">Règles du système</h2>
|
|
<p class="sections-hint">
|
|
Une section = un thème. L'IA injectera automatiquement les sections pertinentes
|
|
selon ce qu'elle génère (combat → Combat/Monstres, PNJ → Classes, arc → Lore/Factions).
|
|
</p>
|
|
|
|
<div class="section-list">
|
|
<div class="section-card" *ngFor="let section of sections; let i = index" [class.collapsed]="section.collapsed">
|
|
|
|
<div class="section-head">
|
|
<button type="button" class="btn-collapse" (click)="toggleCollapse(section)">
|
|
<lucide-icon [img]="section.collapsed ? ChevronRight : ChevronDown" [size]="16"></lucide-icon>
|
|
</button>
|
|
<input
|
|
type="text"
|
|
class="section-title-input"
|
|
[(ngModel)]="section.title"
|
|
[name]="'title-' + i"
|
|
placeholder="Nom de la section (ex: Combat)"
|
|
/>
|
|
<button type="button" class="btn-remove" (click)="removeSection(i)" title="Supprimer cette section">
|
|
<lucide-icon [img]="Trash2" [size]="14"></lucide-icon>
|
|
</button>
|
|
</div>
|
|
|
|
<textarea
|
|
*ngIf="!section.collapsed"
|
|
class="section-content"
|
|
[(ngModel)]="section.content"
|
|
[name]="'content-' + i"
|
|
rows="6"
|
|
placeholder="Décrivez les règles de cette section..."
|
|
></textarea>
|
|
|
|
</div>
|
|
|
|
<div *ngIf="sections.length === 0" class="empty-hint">
|
|
Aucune section pour l'instant — ajoutez-en une avec les boutons ci-dessous.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="add-row">
|
|
<span class="add-label">Ajouter une section :</span>
|
|
<button
|
|
type="button"
|
|
*ngFor="let name of suggestedSections"
|
|
class="chip"
|
|
[class.disabled]="isSectionUsed(name)"
|
|
(click)="addSuggested(name)"
|
|
[disabled]="isSectionUsed(name)">
|
|
<lucide-icon [img]="Plus" [size]="12"></lucide-icon>
|
|
{{ name }}
|
|
</button>
|
|
<button type="button" class="chip chip-custom" (click)="addBlank()">
|
|
<lucide-icon [img]="Plus" [size]="12"></lucide-icon>
|
|
Autre…
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Templates de fiches PJ/PNJ -->
|
|
<div class="templates-area">
|
|
<h2 class="sections-title">Fiches de personnages</h2>
|
|
<p class="sections-hint">
|
|
Definissez la structure des fiches PJ et PNJ pour ce systeme. Les champs
|
|
universels (nom, portrait, header) sont automatiques — ne rajoutez ici
|
|
que les champs specifiques au systeme (Histoire, PV, Stats…).
|
|
</p>
|
|
|
|
<app-template-fields-editor
|
|
label="Champs de la fiche PJ"
|
|
hint="Affiches lors de la creation/edition d'un personnage joueur."
|
|
[fields]="characterTemplate"
|
|
[suggestions]="characterFieldSuggestions"
|
|
(fieldsChange)="characterTemplate = $event">
|
|
</app-template-fields-editor>
|
|
|
|
<app-template-fields-editor
|
|
label="Champs de la fiche PNJ"
|
|
hint="Affiches lors de la creation/edition d'un personnage non-joueur."
|
|
[fields]="npcTemplate"
|
|
[suggestions]="npcFieldSuggestions"
|
|
(fieldsChange)="npcTemplate = $event">
|
|
</app-template-fields-editor>
|
|
</div>
|
|
|
|
<div class="actions">
|
|
<button type="button" class="btn-primary" [disabled]="!name.trim()" (click)="submit()">
|
|
<lucide-icon [img]="Save" [size]="16"></lucide-icon>
|
|
{{ id ? 'Enregistrer' : 'Créer' }}
|
|
</button>
|
|
<button type="button" class="btn-secondary" (click)="back()">Annuler</button>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|