Evolutions :
Some checks failed
Build & Push Images / build (brain) (push) Successful in 55s
Build & Push Images / build (core) (push) Successful in 1m35s
E2E Tests / e2e (push) Failing after 4m10s
Build & Push Images / build (web) (push) Successful in 2m0s

- Ajout d'icônes dans la scène, chapitre et arc
- Possibilité de bouger les cases dans la partie graphe et les textes associés si ces derniers ne sont pas visibles
- Changement sur le thème du graphe : mode sombre et plus blanc
- Barre d'action en haut, même pour la partie scène
- Mode sticky corrigé : plus de trou entre le haut du navigateur web et de la barre d'action

Passage version 0.6.5
This commit is contained in:
2026-04-25 11:41:14 +02:00
parent 0582690dca
commit 550078268c
54 changed files with 620 additions and 92 deletions

View File

@@ -0,0 +1,66 @@
import {
Bookmark,
Theater, Drama, Compass, Flag, Calendar, Map, Castle, Tent,
Swords, Skull, Crown, Heart, Eye, Footprints, Dice5, Hourglass,
Flame, Snowflake, Cloud, Sun, Moon, Star, Zap, Target,
Music, MessageCircle, Lock, Key as KeyIcon, Coins, Gift,
LucideIconData
} from 'lucide-angular';
// Type local equivalent a IconOption de lore-icons. Duplique volontairement
// pour eviter une dependance circulaire (lore-icons importe ce fichier).
export interface CampaignIconOption {
key: string;
icon: LucideIconData;
}
/**
* Banque d'icones dediee aux entites narratives d'une campagne (arc, chapitre, scene).
*
* Pourquoi separe de LORE_ICON_OPTIONS ? Les icones lore sont plutot orientees
* "objets de monde" (chateau, foret, dragon...). Ici on est sur du sequencement
* narratif et de la mise en scene : ambiances, actes, decisions. Cles uniques
* (prefixees `c-` quand un nom existerait deja dans le lore) pour eviter les
* collisions avec LORE_ICON_OPTIONS — le resolver consulte les deux registres.
*/
export const CAMPAIGN_ICON_OPTIONS: CampaignIconOption[] = [
{ key: 'c-theater', icon: Theater },
{ key: 'c-drama', icon: Drama },
{ key: 'c-compass', icon: Compass },
{ key: 'c-flag', icon: Flag },
{ key: 'c-calendar', icon: Calendar },
{ key: 'c-map', icon: Map },
{ key: 'c-castle', icon: Castle },
{ key: 'c-tent', icon: Tent },
{ key: 'c-swords', icon: Swords },
{ key: 'c-skull', icon: Skull },
{ key: 'c-crown', icon: Crown },
{ key: 'c-heart', icon: Heart },
{ key: 'c-eye', icon: Eye },
{ key: 'c-footprints', icon: Footprints },
{ key: 'c-dice', icon: Dice5 },
{ key: 'c-hourglass', icon: Hourglass },
{ key: 'c-flame', icon: Flame },
{ key: 'c-snowflake', icon: Snowflake },
{ key: 'c-cloud', icon: Cloud },
{ key: 'c-sun', icon: Sun },
{ key: 'c-moon', icon: Moon },
{ key: 'c-star', icon: Star },
{ key: 'c-zap', icon: Zap },
{ key: 'c-target', icon: Target },
{ key: 'c-music', icon: Music },
{ key: 'c-message', icon: MessageCircle },
{ key: 'c-lock', icon: Lock },
{ key: 'c-key', icon: KeyIcon },
{ key: 'c-coins', icon: Coins },
{ key: 'c-gift', icon: Gift },
];
/** Icone par defaut quand une entite narrative n'en a pas. */
export const DEFAULT_CAMPAIGN_ICON: LucideIconData = Bookmark;
/** Resolveur dedie. Prefere passer par `resolveIcon` dans lore-icons qui consulte les deux. */
export function resolveCampaignIcon(key: string | null | undefined): LucideIconData {
if (!key) return DEFAULT_CAMPAIGN_ICON;
return CAMPAIGN_ICON_OPTIONS.find(o => o.key === key)?.icon ?? DEFAULT_CAMPAIGN_ICON;
}