{# # ============================================================================ # MOLECULE: MEMBER SLIDER # ============================================================================ # # Slider de contrôle avec input numérique synchronisé. # Utilisé pour l'allocation de tokens, quotas, etc. # # ============================================================================ # COMPOSITION (Atomes utilisés) # ============================================================================ # # - Aucun atome direct (composant autonome) # # ============================================================================ # PARAMÈTRES # ============================================================================ # # | Paramètre | Type | Défaut | Description | # |---------------|---------|-------------|-----------------------------------| # | value | number | 0 | Valeur actuelle | # | min | number | 0 | Valeur minimum | # | max | number | 100 | Valeur maximum | # | step | number | 1 | Pas d'incrémentation | # | unit | string | null | Unité affichée (ex: 'tokens/mois')| # | name | string | null | Nom du champ pour formulaire | # | disabled | bool | false | Désactiver le slider | # | variant | string | 'primary' | Couleur: primary, success, warning| # | class | string | '' | Classes additionnelles | # # ============================================================================ # EXEMPLES D'UTILISATION # ============================================================================ # # Simple: # {% include '_molecules/member-slider/member-slider.html.twig' with { # value: 50000, # max: 500000, # unit: 'tokens/mois' # } %} # # Avec nom de champ: # {% include '_molecules/member-slider/member-slider.html.twig' with { # value: 75, # max: 100, # step: 5, # unit: '%', # name: 'quota' # } %} # # ============================================================================ #} {# ============================================================================ CONFIGURATION DES VALEURS PAR DÉFAUT ============================================================================ #} {% set value = value ?? 0 %} {% set min = min ?? 0 %} {% set max = max ?? 100 %} {% set step = step ?? 1 %} {% set unit = unit ?? null %} {% set name = name ?? null %} {% set disabled = disabled ?? false %} {% set variant = variant ?? 'primary' %} {% set class = class ?? '' %} {# Calcul du pourcentage pour le fill #} {% set percentage = max > 0 ? ((value - min) / (max - min)) * 100 : 0 %} {# Configuration des variantes de couleur #} {% set variantConfig = { 'primary': { 'gradient': 'from-[#0A6BC4] via-primary to-[#3D9EEB]', 'border': 'border-primary', 'focus': 'focus:border-primary focus:ring-primary/15' }, 'success': { 'gradient': 'from-success-dark via-success to-success-light', 'border': 'border-success', 'focus': 'focus:border-success focus:ring-success/15' }, 'warning': { 'gradient': 'from-warning-dark via-warning to-warning-light', 'border': 'border-warning', 'focus': 'focus:border-warning focus:ring-warning/15' } } %} {% set vConfig = variantConfig[variant] ?? variantConfig['primary'] %} {# ============================================================================ RENDU HTML ============================================================================ #}