{#
# ============================================================================
# ATOM: TAG
# ============================================================================
#
# Étiquette supprimable utilisant 100% Tailwind CSS.
# Similaire au Badge mais avec possibilité de suppression (filtres, tags).
#
# ============================================================================
# PARAMÈTRES
# ============================================================================
#
# | Paramètre | Type | Défaut | Description |
# |----------------|---------|-----------|------------------------------------------|
# | label | string | (requis) | Texte du tag |
# | color | string | 'gray' | Couleur: gray, primary, success, etc. |
# | size | string | 'md' | Taille: sm, md, lg |
# | removable | bool | false | Afficher le bouton de suppression |
# | icon | string | null | Icône avant le texte |
# | href | string | null | Lien (rend le tag cliquable) |
# | selected | bool | false | État sélectionné (style différent) |
# | disabled | bool | false | État désactivé |
# | id | string | null | ID pour le JavaScript |
# | class | string | '' | Classes additionnelles |
#
# ============================================================================
# EXEMPLES D'UTILISATION
# ============================================================================
#
# Tag simple:
# {% include '_atoms/tag/tag.html.twig' with {
# label: 'JavaScript'
# } %}
#
# Tag supprimable:
# {% include '_atoms/tag/tag.html.twig' with {
# label: 'React',
# color: 'primary',
# removable: true
# } %}
#
# Tag sélectionnable:
# {% include '_atoms/tag/tag.html.twig' with {
# label: 'Moodia',
# color: 'moodia',
# selected: true,
# icon: 'bubul-moodia'
# } %}
#
# ============================================================================
#}
{# ============================================================================
CONFIGURATION DES VALEURS PAR DÉFAUT
============================================================================ #}
{% set label = label ?? '' %}
{% set color = color ?? 'gray' %}
{% set size = size ?? 'md' %}
{% set removable = removable ?? false %}
{% set icon = icon ?? null %}
{% set href = href ?? null %}
{% set selected = selected ?? false %}
{% set disabled = disabled ?? false %}
{% set id = id ?? null %}
{% set class = class ?? '' %}
{# ============================================================================
CLASSES TAILWIND - TAILLES
============================================================================ #}
{% set sizeClasses = {
'sm': 'text-xs px-2 py-0.5 gap-1',
'md': 'text-sm px-2.5 py-1 gap-1.5',
'lg': 'text-sm px-3 py-1.5 gap-2'
} %}
{% set iconSizes = {
'sm': 'xs',
'md': 'xs',
'lg': 'sm'
} %}
{% set closeSizes = {
'sm': 'w-3 h-3',
'md': 'w-3.5 h-3.5',
'lg': 'w-4 h-4'
} %}
{# ============================================================================
CLASSES TAILWIND - COULEURS (non sélectionné)
============================================================================ #}
{% set colorClasses = {
'gray': 'bg-gray-100 text-gray-700 hover:bg-gray-200',
'primary': 'bg-primary/10 text-primary hover:bg-primary/20',
'success': 'bg-success/10 text-success hover:bg-success/20',
'warning': 'bg-warning/10 text-warning-dark hover:bg-warning/20',
'error': 'bg-error/10 text-error hover:bg-error/20',
'info': 'bg-info/10 text-info hover:bg-info/20',
'moodia': 'bg-[var(--color-moodia)]/10 text-[var(--color-moodia)] hover:bg-[var(--color-moodia)]/20',
'serenia': 'bg-[var(--color-serenia)]/10 text-[var(--color-serenia)] hover:bg-[var(--color-serenia)]/20',
'slidia': 'bg-[var(--color-slidia)]/10 text-[var(--color-slidia)] hover:bg-[var(--color-slidia)]/20',
'sam': 'bg-[var(--color-sam)]/10 text-[var(--color-sam)] hover:bg-[var(--color-sam)]/20'
} %}
{# ============================================================================
CLASSES TAILWIND - COULEURS (sélectionné)
============================================================================ #}
{% set selectedColorClasses = {
'gray': 'bg-gray-700 text-white hover:bg-gray-800',
'primary': 'bg-primary text-white hover:bg-primary-dark',
'success': 'bg-success text-white hover:bg-success/90',
'warning': 'bg-warning text-white hover:bg-warning/90',
'error': 'bg-error text-white hover:bg-error/90',
'info': 'bg-info text-white hover:bg-info/90',
'moodia': 'bg-[var(--color-moodia)] text-white hover:bg-[var(--color-moodia)]/90',
'serenia': 'bg-[var(--color-serenia)] text-white hover:bg-[var(--color-serenia)]/90',
'slidia': 'bg-[var(--color-slidia)] text-white hover:bg-[var(--color-slidia)]/90',
'sam': 'bg-[var(--color-sam)] text-white hover:bg-[var(--color-sam)]/90'
} %}
{# ============================================================================
CLASSES TAILWIND - ÉTATS
============================================================================ #}
{% set disabledClasses = disabled ? 'opacity-50 cursor-not-allowed pointer-events-none' : '' %}
{# ============================================================================
ASSEMBLAGE DES CLASSES
============================================================================ #}
{% set baseClasses = 'inline-flex items-center font-medium rounded-full transition-colors' %}
{% set currentColorClasses = selected ? (selectedColorClasses[color] ?? selectedColorClasses['gray']) : (colorClasses[color] ?? colorClasses['gray']) %}
{% set tagClasses = [
baseClasses,
sizeClasses[size] ?? sizeClasses['md'],
currentColorClasses,
disabledClasses,
href ? 'cursor-pointer' : '',
class
]|join(' ')|trim %}
{# ============================================================================
RENDU HTML
============================================================================ #}
{% set tagContent %}
{# Icône #}
{% if icon %}
{% include '_atoms/icon/icon.html.twig' with {
name: icon,
size: iconSizes[size] ?? 'xs'
} only %}
{% endif %}
{# Label #}
{{ label }}
{# Bouton de suppression #}
{% if removable and not disabled %}
{% endif %}
{% endset %}
{% if href and not disabled %}
{{ tagContent }}
{% else %}
{{ tagContent }}
{% endif %}