{# # ============================================================================ # ATOM: RADIO # ============================================================================ # # Bouton radio paramétrable utilisant 100% Tailwind CSS. # # ============================================================================ # PARAMÈTRES # ============================================================================ # # | Paramètre | Type | Défaut | Description | # |-------------|---------|-----------|------------------------------------------| # | label | string | null | Label du radio | # | checked | bool | false | État sélectionné | # | name | string | null | Attribut name (groupe) | # | id | string | null | Attribut id | # | value | string | '' | Valeur du radio | # | disabled | bool | false | Désactivé | # | required | bool | false | Obligatoire | # | error | string | null | Message d'erreur | # | hint | string | null | Texte d'aide | # | size | string | 'md' | Taille: sm, md, lg | # | variant | string | 'default' | Style: default, card | # | class | string | '' | Classes additionnelles | # | attr | object | {} | Attributs HTML additionnels | # # ============================================================================ # EXEMPLES D'UTILISATION # ============================================================================ # # Radio simple: # {% include '_atoms/form/radio.html.twig' with { # label: 'Option 1', # name: 'choix', # value: 'option1' # } %} # # Groupe de radios: # {% for option in options %} # {% include '_atoms/form/radio.html.twig' with { # label: option.label, # name: 'selection', # value: option.value, # checked: option.value == selectedValue # } %} # {% endfor %} # # Radio style card: # {% include '_atoms/form/radio.html.twig' with { # label: 'Plan Pro', # hint: '29€/mois - Toutes les fonctionnalités', # name: 'plan', # value: 'pro', # variant: 'card' # } %} # # ============================================================================ #} {# ============================================================================ CONFIGURATION DES VALEURS PAR DÉFAUT ============================================================================ #} {% set label = label ?? null %} {% set checked = checked ?? false %} {% set name = name ?? null %} {% set id = id ?? (name ? 'radio-' ~ name ~ '-' ~ random() : 'radio-' ~ random()) %} {% set value = value ?? '' %} {% set disabled = disabled ?? false %} {% set required = required ?? false %} {% set error = error ?? null %} {% set hint = hint ?? null %} {% set size = size ?? 'md' %} {% set variant = variant ?? 'default' %} {% set class = class ?? '' %} {% set attr = attr ?? {} %} {# ============================================================================ CLASSES TAILWIND - TAILLES RADIO ============================================================================ #} {% set radioSizeClasses = { 'sm': 'w-4 h-4', 'md': 'w-5 h-5', 'lg': 'w-6 h-6' } %} {% set dotSizeClasses = { 'sm': 'w-2 h-2', 'md': 'w-2.5 h-2.5', 'lg': 'w-3 h-3' } %} {% set labelSizeClasses = { 'sm': 'text-sm', 'md': 'text-base', 'lg': 'text-lg' } %} {# ============================================================================ CLASSES TAILWIND - VARIANTES ============================================================================ #} {% set wrapperVariantClasses = { 'default': '', 'card': 'p-4 bg-white border border-gray-200 rounded-lg hover:border-primary/30 hover:bg-primary/5 transition-all cursor-pointer has-[:checked]:border-primary has-[:checked]:bg-primary/5' } %} {# ============================================================================ CLASSES TAILWIND - ÉTATS ============================================================================ #} {% set disabledClasses = disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer' %} {% set errorBorderClasses = error ? 'border-error' : 'border-gray-300' %} {# ============================================================================ RENDU HTML ============================================================================ #}
{{ error }}
{% endif %}