/v1.0

ColorField

ColorField muestra un botón cuadrado de color (o un placeholder vacío "toca para seleccionar" cuando no hay color). Al hacer clic abre un popover con:

  • Una grilla de 10 colores base × 5 niveles de sombra
  • Tonos neutros complementarios
  • Colores semánticos del tema (primary, danger, warning, success, info)
  • Un input hexadecimal libre para colores arbitrarios

Hacer clic en la muestra de color cuando ya hay un color seleccionado lo borra.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | value | string | Sí | — | Color actual (cadena CSS hexadecimal o nombre de color del tema). | | onChange | (color?: string \| null) => void | Sí | — | Llamado con el nuevo color, o null al borrar. | | label | string | No | — | Etiqueta mostrada sobre el campo. | | description | string | No | — | Texto de ayuda mostrado debajo del campo. | | disablePrimary | boolean | No | — | Si es true, la muestra de color semántico "primary" se deshabilita y no puede seleccionarse. | | containerStyle | React.CSSProperties | No | — | Estilos del FieldContainer exterior. | | headerStyle | React.CSSProperties | No | — | Estilos del área de encabezado del campo. | | bodyStyle | React.CSSProperties | No | — | Estilos del área de cuerpo del campo. | | labelStyle | React.CSSProperties | No | — | Estilos del elemento de etiqueta. | | descriptionStyle | React.CSSProperties | No | — | Estilos del párrafo de descripción. | | className | string | No | — | Clase CSS del contenedor exterior. | | id | string | No | — | Atributo id del contenedor. |

Uso

Básico

import React, { useState } from 'react';
import ColorField from '@/components/fields/ColorField';

export default function Example() {
  const [color, setColor] = useState('');

  return (
    <ColorField
      label="Color de marca"
      value={color}
      onChange={(c) => setColor(c ?? '')}
    />
  );
}

Deshabilitando el color primario

<ColorField
  label="Color de acento"
  value={accentColor}
  onChange={(c) => setAccentColor(c ?? '')}
  disablePrimary={true}
  description="Selecciona cualquier color excepto el primario."
/>