{# Panneaux repliables (couleur) + modale (icônes Tabler). Charger {{ asset('js/form-appearance-pickers.js') }} de préféré en defer sur la page. expandable_color_field(form.color, { optional: true }) pour couleur facultative (#RRGGBB ou vide). #} {% macro expandable_color_field(form_field, opts) %} {% set opts = opts|default({}) %} {% set optional = opts.optional|default(false) %} {% set id = form_field.vars.id %} {% set hexVal = form_field.vars.value ?? '' %} {% set hexValStr = hexVal is not null ? hexVal : '' %} {% set err = form_field.vars.errors %} {# Pastille VIIZIA + usages courants ERP / Airbnb-style #} {% set viz_palette = [ '#7C3AED', '#6366F1', '#3B82F6', '#0EA5E9', '#14B8A6', '#10B981', '#84CC16', '#EAB308', '#F59E0B', '#F97316', '#EF4444', '#EC4899', '#A855F7', '#78716C', '#111827', '#6B7280', '#059669' ] %} {% set isValidHex = hexValStr|length == 7 and hexValStr starts with '#' %} {% set previewBg = isValidHex ? hexValStr : ((not optional) ? '#6B7280' : '') %} {# value="" invalide pour {% if form_field.vars.help %}
{{ form_field.vars.help }}
{% endif %}
{{- previewBg ? previewBg ~ '' : '—' -}}
{% for e in err %}{{ e.message }}{% if not loop.last %}
{% endif %}{% endfor %}