/* eslint-disable react/jsx-no-leaked-render */
/* eslint-disable jsx-a11y/no-static-element-interactions */
import React, { useState } from 'react'
import { SlidersIcon, InputsIcon, PaletteIcon } from './icon.js'
import { usePicker } from '../context.js'
import EyeDropper from './EyeDropper.js'
import AdvancedControls from './AdvancedControls.js'
import ComparibleColors from './ComparibleColors.js'
import GradientControls from './GradientControls.js'
import { LocalesProps } from '../shared/types.js'
import { colorTypeBtnStyles, controlBtnStyles, modalBtnStyles } from '../styles/styles.js'
const ColorTypeBtns = ({
hideColorTypeBtns,
setGradient,
isGradient,
setSolid,
locales,
}: {
hideColorTypeBtns?: boolean
isGradient?: boolean
setSolid: () => void
setGradient: () => void
locales?: LocalesProps
}) => {
const { defaultStyles, pickerIdSuffix } = usePicker()
if (hideColorTypeBtns) {
return
} else {
return (
{locales?.CONTROLS?.SOLID}
{locales?.CONTROLS?.GRADIENT}
)
}
}
const InputTypeDropdown = ({
openInputType,
setOpenInputType,
}: {
openInputType?: boolean
setOpenInputType: (arg0: boolean) => void
}) => {
const { inputType, setInputType, defaultStyles, pickerIdSuffix } = usePicker()
const vTrans = openInputType
? 'visibility 0ms linear'
: 'visibility 100ms linear 150ms'
const zTrans = openInputType
? 'z-index 0ms linear'
: 'z-index 100ms linear 150ms'
const oTrans = openInputType
? 'opacity 120ms linear'
: 'opacity 150ms linear 50ms'
const handleInputType = (e: any, val: string) => {
if (openInputType) {
e.stopPropagation()
setInputType(val)
setOpenInputType(false)
}
}
return (
handleInputType(e, 'rgb')}
style={modalBtnStyles(inputType === 'rgb', defaultStyles)}
>
RGB
handleInputType(e, 'hsl')}
style={modalBtnStyles(inputType === 'hsl', defaultStyles)}
>
HSL
handleInputType(e, 'hsv')}
style={modalBtnStyles(inputType === 'hsv', defaultStyles)}
>
HSV
handleInputType(e, 'cmyk')}
style={modalBtnStyles(inputType === 'cmyk', defaultStyles)}
>
CMYK
)
}
const Controls = ({
locales,
hideEyeDrop = false,
hideAdvancedSliders = false,
hideColorGuide = false,
hideInputType = false,
hideColorTypeBtns = false,
hideGradientControls = false,
hideGradientType = false,
hideGradientAngle = false,
hideGradientStop = false,
}: {
locales?: LocalesProps
hideEyeDrop?: boolean
hideAdvancedSliders?: boolean
hideColorGuide?: boolean
hideInputType?: boolean
hideColorTypeBtns?: boolean
hideGradientControls?: boolean
hideGradientType?: boolean
hideGradientAngle?: boolean
hideGradientStop?: boolean
}) => {
const { config, onChange, isGradient, handleChange, previous, defaultStyles, pickerIdSuffix } =
usePicker()
const { defaultColor, defaultGradient } = config
const [openComparibles, setOpenComparibles] = useState(false)
const [openInputType, setOpenInputType] = useState(false)
const [openAdvanced, setOpenAdvanced] = useState(false)
const noTools =
hideEyeDrop && hideAdvancedSliders && hideColorGuide && hideInputType
const solidColor = previous?.color ?? defaultColor
const gradientColor = previous?.gradient ?? defaultGradient
const setSolid = () => {
onChange(solidColor)
}
const setGradient = () => {
onChange(gradientColor)
}
const allRightControlsHidden =
hideEyeDrop && hideAdvancedSliders && hideColorGuide && hideInputType
const allControlsHidden = allRightControlsHidden && hideColorTypeBtns
if (allControlsHidden) {
if (isGradient && !hideGradientControls) {
return (
)
} else {
return null
}
} else {
return (
{!allRightControlsHidden && (
{!hideEyeDrop &&
}
{!hideAdvancedSliders && (
setOpenAdvanced(!openAdvanced)}
// className="rbgcp-control-btn rbgcp-advanced-btn"
style={controlBtnStyles(openAdvanced, defaultStyles)}
>
)}
{!hideColorGuide && (
setOpenComparibles(!openComparibles)}
// className="rbgcp-control-btn rbgcp-comparibles-btn"
id={`rbgcp-comparibles-btn${pickerIdSuffix}`}
>
)}
{!hideInputType && (
setOpenInputType(!openInputType)}
// className="rbgcp-control-btn rbgcp-color-model-btn"
style={controlBtnStyles(openInputType, defaultStyles)}
>
)}
)}
{!hideAdvancedSliders && (
)}
{!hideColorGuide && (
)}
{isGradient && !hideGradientControls && (
)}
)
}
}
export default Controls;