Files
sliding-automation/archive/v1_pipeline/components.yaml
T

1267 lines
43 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# components.yaml — Composants atomiques Pernod Ricard Sliding
# Projet : Sliding Design System
# Usage : lu par render_engine.py pour assembler les layouts
# Source : PR Template officiel + galerie 28 layouts
# =============================================================================
# PRINCIPE
# Chaque composant est une brique réutilisable positionnée par render_engine.py.
# Un layout (layouts.yaml) est un assemblage de composants + règles de placement.
# Un composant déclare :
# - ses champs JSON attendus (requis / optionnels)
# - ses contraintes (min/max items, longueurs de texte)
# - ses paramètres visuels (couleurs, tailles, positions relatives)
# - ses références theme.yaml
# =============================================================================
meta:
version: "1.0"
date: "2026-05-14"
total_components: 22
categories:
- structure # titre, sous-titre, barre d'accent, footer, fond
- texte # bullets, paragraphe, citation, message clé
- donnees # kpi_card, big_stat, tableau, chart
- visuel # formes, diagrammes, pyramide, circulaire
- process # étapes, chevrons, gantt, timeline
- acteurs # orgchart node, raci cell, decision node
# =============================================================================
# CATÉGORIE : STRUCTURE
# Composants présents sur (presque) tous les slides
# =============================================================================
components:
# ---------------------------------------------------------------------------
# C01 — slide_background
# Fond coloré du slide. Toujours le premier composant instancié.
# ---------------------------------------------------------------------------
slide_background:
id: C01
category: structure
description: "Fond plein ou dégradé du slide. Définit le contexte visuel global."
used_by_layouts:
- tous
fields:
required:
color:
type: string
description: "Couleur de fond — référencer theme.colors"
examples: ["#ffffff", "#000a32", "#d9d9c4"]
optional:
color_right:
type: string
description: "Couleur du panneau droit pour les splits diagonaux"
default: null
diagonal_split:
type: boolean
description: "Active la partition diagonale (cover, section_divider)"
default: false
diagonal_angle_deg:
type: integer
description: "Angle de la diagonale en degrés"
default: 15
render:
type: rectangle_fill
position: full_slide
z_index: 0
# ---------------------------------------------------------------------------
# C02 — slide_title
# Titre principal du slide. Présent sur tous les layouts sauf cover (traitement spécial).
# ---------------------------------------------------------------------------
slide_title:
id: C02
category: structure
description: "Titre action du slide (formulation So What). 2 lignes max."
used_by_layouts:
- default_bullets
- two_cols_text
- key_message
- executive_summary
- kpi_grid
- big_stat
- comparison_table
- chart_callout
- benchmark
- matrix_2x2
- pyramid
- circular_diagram
- from_to
- boxes_grid
- numbered_steps
- process_arrow
- gantt_timeline
- yearly_timeline
- phases_timeline
- org_chart
- raci_table
- decision_tree
- recommendation_card
fields:
required:
text:
type: string
max_chars: 80
description: "Titre du slide — formulation affirmative, jamais thématique"
optional:
subtitle:
type: string
max_chars: 60
description: "Sous-titre ou date"
default: null
constraints:
max_lines: 2
max_chars_per_line: 45
render:
font: "theme.typography.display"
size_pt: "theme.typography.sizes.slide_title"
color_on_white: "theme.colors.text.on_white"
color_on_dark: "theme.colors.text.on_dark"
position_left_cm: 1.8 # décalé pour laisser place à la barre d'accent
position_top_cm: 0.5
width_cm: 27.0
bold: true
subtitle_font: "theme.typography.body"
subtitle_size_pt: "theme.typography.sizes.slide_subtitle"
subtitle_color: "theme.colors.text.subtitle"
subtitle_margin_top_cm: 0.15
z_index: 2
# ---------------------------------------------------------------------------
# C03 — accent_bar
# Barre verticale rose à gauche du titre. Signature PR.
# ---------------------------------------------------------------------------
accent_bar:
id: C03
category: structure
description: "Barre verticale rose, signature graphique PR. Alignée à gauche du titre."
used_by_layouts: "voir theme.signature.accent_bar.visible_on"
fields: {} # aucun champ JSON — paramètres fixes dans theme.yaml
render:
color: "theme.colors.primary.rose"
width_cm: "theme.signature.accent_bar.width_cm"
position_left_cm: "theme.signature.accent_bar.position_left_cm"
# hauteur = hauteur du titre (calculée dynamiquement)
height_dynamic: true
z_index: 2
# ---------------------------------------------------------------------------
# C04 — pr_footer
# Footer bas de slide : numéro, séparateur, logo, "Pernod Ricard", tagline.
# ---------------------------------------------------------------------------
pr_footer:
id: C04
category: structure
description: "Footer standard PR. Numéro de slide + logo + DATA GOVERNANCE DATA MANAGEMENT."
fields:
auto:
slide_number:
type: integer
description: "Injecté automatiquement par render_engine.py"
render:
height_cm: "theme.signature.footer.height_cm"
position_bottom: true
background: "theme.signature.footer.background"
border_top_color: "theme.signature.footer.border_top_color"
elements: "theme.signature.footer.elements"
z_index: 10
# ---------------------------------------------------------------------------
# C05 — pr_logo_topbar
# Logo soleil Pernod Ricard, top-left, slides à fond clair.
# ---------------------------------------------------------------------------
pr_logo_topbar:
id: C05
category: structure
description: "Logo PR (icône soleil) top-left. Slides fond blanc/clair uniquement."
fields: {}
render:
file: "theme.assets.logo_sun"
position_left_cm: "theme.signature.logo_topbar.position_left_cm"
position_top_cm: "theme.signature.logo_topbar.position_top_cm"
height_cm: "theme.signature.logo_topbar.height_cm"
z_index: 3
# =============================================================================
# CATÉGORIE : TEXTE
# =============================================================================
# ---------------------------------------------------------------------------
# C06 — bullet_list
# Liste à puces hiérarchisée, 3 niveaux. Composant texte le plus fréquent.
# ---------------------------------------------------------------------------
bullet_list:
id: C06
category: texte
description: "Liste à puces 1 à 3 niveaux. Bullet L1 gros, L2/L3 réduits et indentés."
used_by_layouts:
- default_bullets
- two_cols_text
- process_arrow # sous les chevrons
fields:
required:
items:
type: array
min_items: 1
max_items: 10
item_schema:
texte:
type: string
max_chars: 120
niveau:
type: integer
values: [1, 2, 3]
sous_items:
type: array
optional: true
max_items: 4
constraints:
max_total_lines: 14 # au-delà, render_engine tronque avec "…"
max_chars_l1: 100
max_chars_l2: 90
max_chars_l3: 80
render:
l1:
marker: "theme.bullets.level_1.marker"
indent_cm: "theme.bullets.level_1.indent_cm"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.bullet_l1"
color: "theme.colors.text.on_white"
space_before_pt: "theme.bullets.level_1.space_before_pt"
l2:
marker: "theme.bullets.level_2.marker"
indent_cm: "theme.bullets.level_2.indent_cm"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.bullet_l2"
color: "theme.colors.text.body"
space_before_pt: "theme.bullets.level_2.space_before_pt"
l3:
marker: "theme.bullets.level_3.marker"
indent_cm: "theme.bullets.level_3.indent_cm"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.bullet_l3"
color: "theme.colors.text.body"
space_before_pt: "theme.bullets.level_3.space_before_pt"
# ---------------------------------------------------------------------------
# C07 — text_paragraph
# Bloc de texte libre (non structuré en bullets). Usage : executive_summary,
# from_to description, org_chart légendes.
# ---------------------------------------------------------------------------
text_paragraph:
id: C07
category: texte
description: "Bloc de texte libre. Titre de bloc optionnel en couleur accent."
used_by_layouts:
- executive_summary
- two_cols_text
- from_to
fields:
optional:
titre_bloc:
type: string
max_chars: 40
description: "Titre de bloc (Situation / Complication / Résolution…)"
default: null
titre_couleur:
type: string
description: "Couleur du titre de bloc — hex ou référence theme"
default: "theme.colors.primary.dark_blue"
required:
contenu:
type: string
max_chars: 400
constraints:
max_lines: 8
render:
titre_font: "theme.typography.body"
titre_size_pt: "theme.typography.sizes.heading_1"
titre_bold: true
body_font: "theme.typography.body"
body_size_pt: "theme.typography.sizes.body"
body_color: "theme.colors.text.body"
line_spacing: "theme.typography.line_spacing.normal"
# ---------------------------------------------------------------------------
# C08 — quote_block
# Citation pleine slide. Fond crème, guillemet serif décoratif, attribution.
# ---------------------------------------------------------------------------
quote_block:
id: C08
category: texte
description: "Citation isolée. Fond crème, guillemets Cormorant bleu, attribution discrète."
used_by_layouts:
- key_message
fields:
required:
citation:
type: string
max_chars: 220
description: "Texte de la citation ou du message clé"
optional:
auteur:
type: string
max_chars: 60
default: null
fonction:
type: string
max_chars: 60
default: null
render:
background: "theme.colors.backgrounds.slide_warm"
guillemet_font: "theme.typography.display"
guillemet_size_pt: 72
guillemet_color: "theme.colors.primary.bright_blue"
text_font: "theme.typography.display"
text_size_pt: 22
text_color: "theme.colors.primary.dark_blue"
text_style: "normal"
attribution_font: "theme.typography.body"
attribution_size_pt: 10
attribution_color: "theme.colors.text.body"
accent_bar_left: true # barre rose verticale à gauche du bloc
# =============================================================================
# CATÉGORIE : DONNÉES
# =============================================================================
# ---------------------------------------------------------------------------
# C09 — kpi_card
# Carte KPI individuelle : header coloré + gros chiffre + label + sous-titre.
# Instanciée N fois par kpi_grid selon le nombre d'items.
# ---------------------------------------------------------------------------
kpi_card:
id: C09
category: donnees
description: "Carte KPI unitaire. Header couleur cycle, valeur en rose, label, sous-titre."
used_by_layouts:
- kpi_grid
fields:
required:
titre:
type: string
max_chars: 30
description: "Label de l'indicateur (header de la carte)"
valeur:
type: string
max_chars: 12
description: "Valeur affichée en gros (ex: 78%, +25M€, -30%)"
optional:
sous_titre:
type: string
max_chars: 60
description: "Contexte de la valeur"
default: null
couleur:
type: string
description: "Couleur du header — si null, utilise theme.colors.cycle"
default: null
render:
header:
height_cm: 0.6
color: "cycle_auto" # tourne dans theme.colors.cycle si couleur=null
text_font: "theme.typography.body"
text_size_pt: "theme.typography.sizes.body_small"
text_color: "#ffffff"
text_bold: true
body:
background: "theme.colors.backgrounds.content_area"
valeur_font: "theme.typography.display"
valeur_size_pt: "theme.typography.sizes.kpi_value"
valeur_color: "theme.colors.primary.rose"
valeur_bold: true
label_font: "theme.typography.body"
label_size_pt: "theme.typography.sizes.body_small"
label_color: "theme.colors.text.body"
grid_rules:
# render_engine calcule position/taille de chaque carte selon le total
2: { cols: 2, rows: 1 }
3: { cols: 3, rows: 1 }
4: { cols: 2, rows: 2 }
5: { cols: 3, rows: 2 } # 5e carte centrée sur la 2e ligne
6: { cols: 3, rows: 2 }
# ---------------------------------------------------------------------------
# C10 — big_stat_display
# Chiffre unique très grand, centré. Contexte sous le chiffre.
# ---------------------------------------------------------------------------
big_stat_display:
id: C10
category: donnees
description: "Un seul chiffre en très grand format centré. Impact maximal."
used_by_layouts:
- big_stat
fields:
required:
valeur:
type: string
max_chars: 10
description: "Chiffre à afficher (ex: 85%, 2.4Bn€, ×3)"
optional:
label:
type: string
max_chars: 80
description: "Phrase de contexte sous le chiffre"
default: null
source:
type: string
max_chars: 60
description: "Source de la donnée"
default: null
render:
valeur_font: "theme.typography.display"
valeur_size_pt: "theme.typography.sizes.big_stat"
valeur_color: "theme.colors.primary.rose"
valeur_bold: true
valeur_align: center
label_font: "theme.typography.body"
label_size_pt: "theme.typography.sizes.body"
label_color: "theme.colors.text.body"
label_align: center
source_size_pt: "theme.typography.sizes.body_small"
source_color: "theme.colors.text.caption"
vertical_center: true
# ---------------------------------------------------------------------------
# C11 — data_table
# Tableau structuré : header bleu foncé, lignes alternées clair/blanc.
# Usage : comparison_table, raci_table (en mode texte).
# ---------------------------------------------------------------------------
data_table:
id: C11
category: donnees
description: "Tableau générique. Header dark blue, lignes alternées, bordures fines."
used_by_layouts:
- comparison_table
- benchmark
fields:
required:
headers:
type: array
min_items: 2
max_items: 6
item_type: string
max_chars_each: 30
rows:
type: array
min_items: 1
max_items: 8
item_type: array # chaque row = liste de cellules
max_cols: 6
max_chars_cell: 60
optional:
col_widths:
type: array
description: "Largeurs relatives des colonnes (somme = 1.0)"
default: null # si null → répartition automatique égale
highlight_col:
type: integer
description: "Index de colonne à surligner (ex: notre offre)"
default: null
constraints:
max_cols: 6
max_rows: 8
render:
header:
background: "theme.colors.primary.dark_blue"
text_color: "#ffffff"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
bold: true
height_cm: 0.65
rows:
odd_background: "#ffffff"
even_background: "theme.colors.backgrounds.content_area"
text_color: "theme.colors.text.body"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
row_height_cm: 0.55
border_color: "theme.signature.footer.border_top_color"
border_width: 0.02
highlight_col_background: "theme.colors.backgrounds.highlight_box"
# ---------------------------------------------------------------------------
# C12 — chart_placeholder
# Zone réservée pour un graphique (bar/line/pie). render_engine génère
# un graphique python-pptx ou insère une image si fournie.
# ---------------------------------------------------------------------------
chart_placeholder:
id: C12
category: donnees
description: "Zone graphique. Bar chart par défaut. Accompagné d'un callout."
used_by_layouts:
- chart_callout
fields:
required:
chart_type:
type: string
values: [bar, line, pie, donut]
default: bar
data:
type: array
description: "Séries de données [{label, valeur}] ou [{label, serie1, serie2}]"
min_items: 2
max_items: 8
optional:
axis_x_label:
type: string
default: null
axis_y_label:
type: string
default: null
couleurs:
type: array
description: "Couleurs des séries — si null, utilise theme.colors.cycle"
default: null
render:
bar_color_default: "theme.colors.cycle"
bar_gap_pct: 20
axis_font_size: "theme.typography.sizes.body_small"
axis_color: "theme.colors.text.body"
gridlines_color: "theme.signature.footer.border_top_color"
# ---------------------------------------------------------------------------
# C13 — callout_box
# Encadré d'insight (fond jaune wheat, bordure maize). Accompagne chart_placeholder.
# ---------------------------------------------------------------------------
callout_box:
id: C13
category: donnees
description: "Boîte d'insight jaune. Titre en rose, corps en texte normal."
used_by_layouts:
- chart_callout
fields:
required:
insight:
type: string
max_chars: 200
description: "Message clé de l'insight"
optional:
titre_insight:
type: string
max_chars: 40
default: null
render:
background: "theme.colors.backgrounds.highlight_box"
border_color: "theme.colors.secondary.maize_yellow"
border_width: "theme.shapes.callout_box.border_width"
padding_cm: "theme.shapes.callout_box.padding_cm"
titre_font: "theme.typography.body"
titre_size_pt: "theme.typography.sizes.heading_2"
titre_color: "theme.colors.primary.rose"
titre_bold: true
body_font: "theme.typography.body"
body_size_pt: "theme.typography.sizes.body"
body_color: "theme.colors.text.body"
# =============================================================================
# CATÉGORIE : VISUEL (frameworks)
# =============================================================================
# ---------------------------------------------------------------------------
# C14 — benchmark_bar
# Barre horizontale graduée pour un critère/acteur. Instanciée N×M fois.
# ---------------------------------------------------------------------------
benchmark_bar:
id: C14
category: donnees
description: "Barre horizontale pour benchmark. Étiquette critère à gauche, barres acteurs."
used_by_layouts:
- benchmark
fields:
required:
critere:
type: string
max_chars: 40
valeurs:
type: array
min_items: 2
max_items: 4
item_schema:
acteur:
type: string
max_chars: 20
score:
type: number
min: 0
max: 100
optional:
couleurs_acteurs:
type: array
description: "Couleurs pour chaque acteur — si null, cycle auto"
default: null
constraints:
max_criteres: 6
max_acteurs: 4
render:
critere_width_cm: 4.0
bar_height_cm: 0.35
bar_gap_cm: 0.15
bar_colors_default:
- "theme.colors.primary.bright_blue"
- "theme.colors.primary.rose"
- "theme.colors.secondary.barley_green"
- "theme.colors.secondary.maize_yellow"
critere_font_size: "theme.typography.sizes.body_small"
critere_color: "theme.colors.text.body"
# ---------------------------------------------------------------------------
# C15 — matrix_bubble
# Bulle positionnée sur une matrice 2×2. Instanciée N fois.
# ---------------------------------------------------------------------------
matrix_bubble:
id: C15
category: visuel
description: "Bulle sur matrice. Position (x,y) normalisée [0-100]. Taille optionnelle."
used_by_layouts:
- matrix_2x2
fields:
required:
label:
type: string
max_chars: 25
x:
type: number
min: 0
max: 100
description: "Position axe X normalisée (0 = low, 100 = high)"
y:
type: number
min: 0
max: 100
description: "Position axe Y normalisée (0 = low, 100 = high)"
optional:
taille:
type: number
min: 1
max: 5
default: 2
description: "Taille relative de la bulle (1=petite, 5=grande)"
couleur:
type: string
default: null
constraints:
max_bubbles: 8
render:
bubble_min_diameter_cm: 0.5
bubble_max_diameter_cm: 1.4
bubble_opacity: 0.75
label_font_size: "theme.typography.sizes.body_small"
label_color: "theme.colors.primary.dark_blue"
axis_color: "theme.colors.primary.dark_blue"
axis_stroke: 0.06
quadrant_line_color: "theme.colors.text.body"
quadrant_line_dash: [0.15, 0.1]
# ---------------------------------------------------------------------------
# C16 — pyramid_level
# Niveau de pyramide. Instancié N fois du haut vers le bas.
# ---------------------------------------------------------------------------
pyramid_level:
id: C16
category: visuel
description: "Un niveau de pyramide. Largeur proportionnelle au rang. Callout latéral optionnel."
used_by_layouts:
- pyramid
fields:
required:
label:
type: string
max_chars: 30
description: "Texte inscrit dans le niveau"
rang:
type: integer
min: 1
description: "1 = sommet (le plus petit), N = base (le plus large)"
optional:
description:
type: string
max_chars: 80
description: "Callout latéral explicatif"
default: null
couleur:
type: string
default: null
constraints:
min_levels: 3
max_levels: 5
render:
colors_default:
- "theme.colors.primary.bright_blue" # rang 1 — sommet
- "theme.colors.primary.dark_blue" # rang 2
- "theme.colors.secondary.cool_blue" # rang 3
- "theme.colors.secondary.maize_yellow" # rang 4
- "theme.colors.bright_warm" # rang 5 — base
label_font: "theme.typography.body"
label_size_pt: "theme.typography.sizes.body_small"
label_bold: true
callout_line_color: "theme.colors.text.body"
callout_font_size: "theme.typography.sizes.body_small"
callout_color: "theme.colors.text.body"
level_height_cm: 0.8
# ---------------------------------------------------------------------------
# C17 — circular_segment
# Segment de diagramme circulaire + entrée de légende. Instancié N fois.
# ---------------------------------------------------------------------------
circular_segment:
id: C17
category: visuel
description: "Segment du diagramme circulaire. Logo PR en médaillon central."
used_by_layouts:
- circular_diagram
fields:
required:
label:
type: string
max_chars: 30
description:
type: string
max_chars: 80
optional:
couleur:
type: string
default: null
poids:
type: number
min: 1
max: 10
default: 1
description: "Poids relatif du segment (1 = égal aux autres)"
constraints:
min_segments: 3
max_segments: 6
render:
colors_default:
- "theme.colors.primary.bright_blue"
- "theme.colors.secondary.maize_yellow"
- "theme.colors.primary.dark_blue"
- "theme.colors.primary.bright_warm"
- "theme.colors.secondary.cool_blue"
- "theme.colors.secondary.barley_green"
center_logo: true
center_logo_file: "theme.assets.logo_sun"
center_circle_color: "#ffffff"
center_circle_diameter_cm: 1.5
donut_outer_cm: 3.5
legend_font_size: "theme.typography.sizes.body_small"
legend_dot_diameter_cm: 0.3
legend_position: right
# ---------------------------------------------------------------------------
# C18 — from_to_pair
# Une paire FROM → TO. Instanciée N fois dans le layout from_to.
# ---------------------------------------------------------------------------
from_to_pair:
id: C18
category: visuel
description: "Une ligne de transformation FROM (atténué) → TO (affirmé). Flèche cuivre."
used_by_layouts:
- from_to
fields:
required:
from:
type: string
max_chars: 60
description: "État actuel / situation de départ"
to:
type: string
max_chars: 60
description: "État cible / situation d'arrivée"
constraints:
min_pairs: 2
max_pairs: 5
render:
from_font: "theme.typography.body"
from_size_pt: "theme.typography.sizes.body"
from_color: "theme.colors.semantic.from_color"
from_opacity: 0.6
arrow_char: ""
arrow_color: "theme.colors.semantic.arrow_color"
arrow_size_pt: 14
to_font: "theme.typography.body"
to_size_pt: "theme.typography.sizes.body"
to_color: "theme.colors.semantic.to_color"
to_bold: true
row_height_cm: 0.55
separator_color: "theme.signature.footer.border_top_color"
# =============================================================================
# CATÉGORIE : PROCESS
# =============================================================================
# ---------------------------------------------------------------------------
# C19 — step_item
# Étape numérotée verticale. Badge carré bleu + titre + description.
# ---------------------------------------------------------------------------
step_item:
id: C19
category: process
description: "Étape numérotée. Badge carré dark blue, titre bold, description corps."
used_by_layouts:
- numbered_steps
fields:
required:
numero:
type: integer
min: 1
max: 6
titre:
type: string
max_chars: 50
optional:
description:
type: string
max_chars: 120
default: null
constraints:
min_steps: 2
max_steps: 6
render:
badge:
size_cm: "theme.shapes.step_badge.size_cm"
fill: "theme.shapes.step_badge.fill"
text_color: "theme.shapes.step_badge.text_color"
font: "theme.shapes.step_badge.font"
size_pt: "theme.shapes.step_badge.font_size_pt"
titre_font: "theme.typography.body"
titre_size_pt: "theme.typography.sizes.heading_2"
titre_color: "theme.colors.primary.dark_blue"
titre_bold: true
desc_font: "theme.typography.body"
desc_size_pt: "theme.typography.sizes.body"
desc_color: "theme.colors.text.body"
row_height_cm: 0.75
separator: true
separator_color: "theme.signature.footer.border_top_color"
# ---------------------------------------------------------------------------
# C20 — chevron_step
# Chevron horizontal de process. 2 à 5 chevrons + triangle terminal.
# ---------------------------------------------------------------------------
chevron_step:
id: C20
category: process
description: "Chevron process. Actif = dark blue / rose. Inactif = hague grey. Dernier = triangle."
used_by_layouts:
- process_arrow
fields:
required:
label:
type: string
max_chars: 20
rang:
type: integer
min: 1
description: "Position dans la séquence"
optional:
duree:
type: string
max_chars: 15
default: null
actif:
type: boolean
default: false
description: "Phase courante — mise en avant visuelle"
bullets:
type: array
max_items: 4
item_type: string
max_chars_each: 60
default: null
terminal:
type: boolean
default: false
description: "Si true → forme triangle fermé (dernier chevron)"
constraints:
min_steps: 2
max_steps: 5
render:
fill_inactive: "theme.shapes.chevron.fill_default"
fill_active: "theme.shapes.chevron.fill_active"
text_inactive: "theme.shapes.chevron.text_default"
text_active: "theme.shapes.chevron.text_active"
height_cm: "theme.shapes.chevron.height_cm"
tip_width_cm: "theme.shapes.chevron.tip_width_cm"
label_font: "theme.typography.display"
label_size_pt: 14
label_bold: true
duree_size_pt: "theme.typography.sizes.body_small"
bullet_size_pt: "theme.typography.sizes.body_small"
bullet_color: "theme.colors.text.body"
# ---------------------------------------------------------------------------
# C21 — gantt_bar
# Barre de tâche Gantt. Position et largeur calculées depuis start/end.
# ---------------------------------------------------------------------------
gantt_bar:
id: C21
category: process
description: "Barre de tâche Gantt. Couleur par workstream. Décalage double-ligne possible."
used_by_layouts:
- gantt_timeline
fields:
required:
start:
type: string
format: "YYYY-MM"
description: "Mois de début (ex: 2026-05)"
end:
type: string
format: "YYYY-MM"
description: "Mois de fin (ex: 2026-08)"
optional:
label:
type: string
max_chars: 30
default: null
couleur:
type: string
default: null
description: "Couleur de la barre — si null, couleur du workstream parent"
row:
type: integer
values: [1, 2]
default: 1
description: "Ligne 1 (principale) ou 2 (décalée) dans le workstream"
render:
bar_height_cm: 0.28
bar_radius: 0
row_gap_cm: 0.08
label_inside: false # texte affiché sous la barre si trop court
label_font_size: "theme.typography.sizes.body_small"
# ---------------------------------------------------------------------------
# C22 — timeline_milestone
# Jalon sur une timeline horizontale (yearly ou phases).
# ---------------------------------------------------------------------------
timeline_milestone:
id: C22
category: process
description: "Jalon sur axe temporel. Cercle sur l'axe, année au-dessus, description dessous."
used_by_layouts:
- yearly_timeline
fields:
required:
annee:
type: string
max_chars: 10
description: "Label de date (ex: 2025, Q1 2026)"
label:
type: string
max_chars: 40
optional:
description:
type: string
max_chars: 80
default: null
actif:
type: boolean
default: false
description: "Jalon courant — cercle en rose"
constraints:
min_milestones: 3
max_milestones: 6
render:
circle_diameter_cm: 0.28
circle_fill_default: "theme.colors.primary.dark_blue"
circle_fill_active: "theme.colors.primary.rose"
axis_color: "theme.colors.text.body"
axis_stroke_cm: 0.04
arrow_tip: true # flèche → à droite de l'axe
annee_font: "theme.typography.display"
annee_size_pt: 13
annee_color_default: "theme.colors.primary.bright_blue"
annee_color_active: "theme.colors.primary.rose"
annee_bold: true
label_font: "theme.typography.body"
label_size_pt: "theme.typography.sizes.body_small"
label_color: "theme.colors.primary.dark_blue"
desc_font: "theme.typography.body"
desc_size_pt: "theme.typography.sizes.body_small"
desc_color: "theme.colors.text.body"
# =============================================================================
# CATÉGORIE : ACTEURS
# =============================================================================
# ---------------------------------------------------------------------------
# C23 — org_node
# Nœud d'organigramme. Couleur selon niveau hiérarchique.
# ---------------------------------------------------------------------------
org_node:
id: C23
category: acteurs
description: "Box d'organigramme. Couleur par niveau. Connexions orthogonales auto."
used_by_layouts:
- org_chart
fields:
required:
label:
type: string
max_chars: 35
niveau:
type: integer
min: 1
max: 4
description: "1 = racine, 2 = managers, 3 = équipe, 4 = sous-équipe"
optional:
sous_label:
type: string
max_chars: 30
default: null
constraints:
max_total_nodes: 20
render:
colors_by_level:
1: "theme.colors.primary.dark_blue" # racine
2: "theme.colors.secondary.barley_green" # niveau 2
3: "theme.colors.secondary.cool_blue" # niveau 3
4: "theme.colors.primary.bright_warm" # niveau 4
text_colors_by_level:
1: "#ffffff"
2: "#ffffff"
3: "theme.colors.primary.dark_blue"
4: "theme.colors.primary.dark_blue"
box_height_cm: 0.65
box_min_width_cm: 2.5
box_radius: 0
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
bold: true
connector_color: "theme.colors.text.body"
connector_width_cm: 0.03
connector_style: orthogonal
# ---------------------------------------------------------------------------
# C24 — raci_cell
# Cellule de matrice RACI. Pastille colorée selon le rôle (R/A/C/I).
# ---------------------------------------------------------------------------
raci_cell:
id: C24
category: acteurs
description: "Cellule RACI. Pastille circulaire : R/A en vert, C/I en bleu clair."
used_by_layouts:
- raci_table
fields:
required:
role:
type: string
values: ["R", "A", "C", "I", ""]
description: "R=Responsible, A=Accountable, C=Consulted, I=Informed, ''=vide"
render:
R:
fill: "theme.colors.semantic.responsible"
opacity: 1.0
text_color: "#ffffff"
A:
fill: "theme.colors.semantic.accountable"
opacity: 1.0
text_color: "#ffffff"
C:
fill: "theme.colors.semantic.consulted"
opacity: 1.0
text_color: "theme.colors.primary.dark_blue"
I:
fill: "theme.colors.semantic.informed"
opacity: 0.45
text_color: "theme.colors.primary.dark_blue"
empty:
fill: "transparent"
text_color: "transparent"
circle_diameter_cm: 0.35
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
bold: true
row_header:
background: "theme.colors.backgrounds.content_area"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
color: "theme.colors.text.body"
col_header:
background: "theme.colors.primary.dark_blue"
text_color: "#ffffff"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
bold: true
height_cm: 0.65
row_separator_color: "theme.signature.footer.border_top_color"
# ---------------------------------------------------------------------------
# C25 — decision_node
# Nœud d'arbre de décision. Question (rect arrondi), options (rect clair).
# Connexions avec labels YES/NO.
# ---------------------------------------------------------------------------
decision_node:
id: C25
category: acteurs
description: "Nœud d'arbre de décision. Question centrale, branches YES/NO, options terminales."
used_by_layouts:
- decision_tree
fields:
required:
type:
type: string
values: [question, branch, option]
description: "question = nœud racine, branch = nœud intermédiaire, option = feuille"
label:
type: string
max_chars: 80
optional:
branch_label:
type: string
values: ["YES", "NO", null]
default: null
description: "Label sur le connecteur entrant"
actif:
type: boolean
default: false
description: "Branche recommandée — mise en avant en rose"
render:
question:
fill: "theme.colors.backgrounds.content_area"
border_color: "theme.colors.text.body"
border_width: 0.03
radius: 0.15
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
color: "theme.colors.primary.dark_blue"
branch:
fill: "theme.colors.primary.bright_warm"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
color: "theme.colors.primary.dark_blue"
radius: 0.15
branch_actif:
fill: "theme.colors.primary.rose"
opacity: 0.7
option:
fill: "theme.colors.backgrounds.content_area"
font: "theme.typography.body"
size_pt: "theme.typography.sizes.body_small"
color: "theme.colors.primary.dark_blue"
radius: 0.15
connector_color: "theme.colors.text.body"
connector_width: 0.03
branch_label_font_size: "theme.typography.sizes.body_small"
branch_label_bold: true
branch_label_color: "theme.colors.text.body"
# ---------------------------------------------------------------------------
# C26 — recommendation_sidebar
# Panneau gauche jaune de recommendation_card.
# Numéro circulaire + titre vertical + résumé + flèche + CTA.
# ---------------------------------------------------------------------------
recommendation_sidebar:
id: C26
category: acteurs
description: "Sidebar jaune de carte recommandation. Numéro, titre, résumé, CTA."
used_by_layouts:
- recommendation_card
fields:
required:
numero:
type: integer
min: 1
max: 9
titre:
type: string
max_chars: 30
description: "Intitulé court de la recommandation"
optional:
resume:
type: string
max_chars: 120
description: "Résumé en 1-2 phrases"
default: null
cta:
type: string
max_chars: 30
description: "Call to action — texte du bouton bas"
default: null
render:
background: "theme.shapes.recommendation_sidebar.fill"
width_cm: "theme.shapes.recommendation_sidebar.width_cm"
numero_circle:
fill: "theme.colors.primary.dark_blue"
diameter_cm: 0.9
text_color: "#ffffff"
font: "theme.typography.display"
size_pt: 18
titre_font: "theme.typography.display"
titre_size_pt: "theme.typography.sizes.heading_1"
titre_color: "theme.colors.primary.dark_blue"
titre_bold: true
resume_font: "theme.typography.body"
resume_size_pt: "theme.typography.sizes.body_small"
resume_color: "theme.colors.text.body"
arrow_color: "theme.colors.primary.dark_blue"
cta_fill: "theme.colors.primary.dark_blue"
cta_text_color: "#ffffff"
cta_font_size: "theme.typography.sizes.body_small"
cta_bold: true
# =============================================================================
# INDEX DE RÉFÉRENCE CROISÉE
# layouts → composants utilisés
# =============================================================================
layout_to_components:
cover_split: [C01, C04] # pas de C02/C03 — traitement spécial cover
section_divider: [C01, C04]
agenda: [C01, C02, C03, C04, C05]
content_marker: [C01, C04]
end_slide: [C01, C04]
default_bullets: [C01, C02, C03, C04, C05, C06]
two_cols_text: [C01, C02, C03, C04, C05, C06, C07]
key_message: [C01, C02, C03, C04, C08]
executive_summary: [C01, C02, C03, C04, C05, C07]
kpi_grid: [C01, C02, C03, C04, C05, C09]
big_stat: [C01, C02, C03, C04, C05, C10]
comparison_table: [C01, C02, C03, C04, C05, C11]
chart_callout: [C01, C02, C03, C04, C05, C12, C13]
benchmark: [C01, C02, C03, C04, C05, C14]
matrix_2x2: [C01, C02, C03, C04, C05, C15]
pyramid: [C01, C02, C03, C04, C05, C16]
circular_diagram: [C01, C02, C03, C04, C05, C17]
from_to: [C01, C02, C03, C04, C05, C07, C18]
boxes_grid: [C01, C02, C03, C04, C05, C11]
numbered_steps: [C01, C02, C03, C04, C05, C19]
process_arrow: [C01, C02, C03, C04, C05, C20]
gantt_timeline: [C01, C02, C03, C04, C05, C21]
yearly_timeline: [C01, C02, C03, C04, C05, C22]
phases_timeline: [C01, C02, C03, C04, C05, C22]
org_chart: [C01, C02, C03, C04, C05, C23]
raci_table: [C01, C02, C03, C04, C05, C24]
decision_tree: [C01, C02, C03, C04, C05, C25]
recommendation_card: [C01, C02, C04, C06, C26]