import React, { useCallback } from 'react'; import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, labelValue, ariaDescribedByIds, } from '@rjsf/utils'; import { ColorInput } from '@mantine/core'; import { cleanupOptions } from '../utils'; /** The `ColorWidget` component uses the `ColorInput` from Mantine, allowing users to pick a color. * * @param props - The `WidgetProps` for this component */ export default function ColorWidget( props: WidgetProps ) { const { id, name, value, placeholder, required, disabled, readonly, autofocus, label, hideLabel, rawErrors, options, onChange, onBlur, onFocus, } = props; const emptyValue = options.emptyValue || ''; const themeProps = cleanupOptions(options); const handleChange = useCallback( (nextValue: string) => { onChange(nextValue); }, [onChange, emptyValue] ); const handleBlur = useCallback( ({ target }: React.FocusEvent) => { if (onBlur) { onBlur(id, target && target.value); } }, [onBlur, id] ); const handleFocus = useCallback( ({ target }: React.FocusEvent) => { if (onFocus) { onFocus(id, target && target.value); } }, [onFocus, id] ); return ( 0 ? rawErrors.join('\n') : undefined} {...themeProps} aria-describedby={ariaDescribedByIds(id)} popoverProps={{ withinPortal: false }} /> ); }