import React from 'react' import { usePicker } from '../context.js' import { formatInputValues, low, high } from '../utils/formatters.js' import { controlBtnStyles } from '../styles/styles.js' import TrashIcon, { LinearIcon, RadialIcon, DegreesIcon, StopIcon, } from './icon.js' const GradientType = () => { const { gradientType, onChange, value, defaultStyles, pickerIdSuffix } = usePicker() const isLinear = gradientType === 'linear-gradient' const isRadial = gradientType === 'radial-gradient' const handleLinear = () => { const remaining = value.split(/,(.+)/)[1] onChange(`linear-gradient(90deg, ${remaining}`) } const handleRadial = () => { const remaining = value.split(/,(.+)/)[1] onChange(`radial-gradient(circle, ${remaining}`) } return (
{ return }} >
{ return }} >
) } const StopPicker = () => { const { currentLeft, currentColor, defaultStyles, handleGradient, pickerIdSuffix, } = usePicker() const handleMove = (newVal: string) => { handleGradient(currentColor, formatInputValues(parseInt(newVal), 0, 100)) } return (
handleMove(e.target.value)} style={{ ...defaultStyles.rbgcpControlInput, ...defaultStyles.rbgcpStopInput, }} // className="rbgcp-control-input rbgcp-stop-input" />
) } const DegreePicker = () => { const { degrees, onChange, value, defaultStyles, pickerIdSuffix } = usePicker() const handleDegrees = (e: any) => { const newValue = formatInputValues(e.target.value, 0, 360) const remaining = value.split(/,(.+)/)[1] onChange(`linear-gradient(${newValue ?? 0}deg, ${remaining}`) } return (
handleDegrees(e)} id={`rbgcp-degree-input${pickerIdSuffix}`} // className="rbgcp-control-input rbgcp-degree-input" style={{ ...defaultStyles.rbgcpControlInput, ...defaultStyles.rbgcpDegreeInput, }} />
99 ? 0 : degrees < 10 ? 7 : 3, top: 1, fontWeight: 400, fontSize: 13, }} > °
) } const DeleteBtn = () => { const { colors, selectedColor, createGradientStr, defaultStyles, pickerIdSuffix } = usePicker() const deletePoint = () => { if (colors?.length > 2) { const formatted = colors?.map((fc: any, i: number) => ({ ...fc, value: i === selectedColor - 1 ? high(fc) : low(fc), })) const remaining = formatted?.filter( (_: any, i: number) => i !== selectedColor ) createGradientStr(remaining) } } return (
{ return }} >
) } const GradientControls = ({ hideGradientType, hideGradientAngle, hideGradientStop, }: { hideGradientType?: boolean hideGradientAngle?: boolean hideGradientStop?: boolean }) => { const { gradientType, defaultStyles, pickerIdSuffix } = usePicker() return (
{!hideGradientType && }
{!hideGradientAngle && gradientType === 'linear-gradient' && ( )}
{!hideGradientStop && }
) } export default GradientControls