import { Form, Switch, Button, Popover, Select } from 'antd'; import hljs from 'highlight.js/lib/core'; import { useEffect, useState } from 'react'; import { ChromePicker } from 'react-color'; import styled from 'styled-components'; import shallow from 'zustand/shallow'; import { rgbToString } from './Output'; import { SectionTitle } from './SectionTitle'; import SliderInput from './SliderInput'; import { useInputStore } from '~/components/store'; export const CssControls = () => { const [setCssProps, filterProps] = useInputStore( (state) => [state.setCssProps, state.filterProps], shallow ); const { brightness, contrast } = filterProps; const [angle, setAngle] = useState(112); const [posX, setPosX] = useState(50); const [posY, setPosY] = useState(50); const [showTransparency, setShowTransparency] = useState(true); const [gradientType, setGradientType] = useState('linear'); const [color1, setColor1] = useState({ r: 0, g: 0, b: 255, a: 1 }); const [color2, setColor2] = useState({ r: 0, g: 0, b: 255, a: 0 }); useEffect(() => { setCssProps({ gradientType, color1: color1, color2: color2, angle, showTransparency, posX, posY, }); }, [ setCssProps, showTransparency, contrast, brightness, angle, gradientType, color1, color2, posX, posY, ]); const gradientFirstParam = gradientType === 'linear' ? `${angle}deg` : gradientType === 'radial' ? `circle at ${posX}% ${posY}%` : `from ${angle}deg at ${posX}% ${posY}%`; const gradientCss = `/* css gradient: second layer */ { width: 250px; height: 250px; background: ${gradientType}-gradient(${gradientFirstParam}, ${rgbToString(color1)}, ${rgbToString( color2 )})${showTransparency ? ', url(/checkers.png)' : ''}; /* filter: contrast(${contrast}%) brightness(${brightness}%); */ }`; return (
        
      
setColor1(c.rgb)} />} trigger="click" > setColor2(c.rgb)} />} trigger="click" >
{['linear', 'conic'].includes(gradientType) && ( `${v}°`} onChange={(val: number) => setAngle(val)} value={typeof angle === 'number' ? angle : 0} /> )} {['radial', 'conic'].includes(gradientType) && ( <> setPosX(val)} value={typeof posX === 'number' ? posX : 0} /> setPosY(val)} value={typeof posY === 'number' ? posY : 0} /> )} setShowTransparency(e)} />
); }; const GradientControls = styled.div` display: flex; `; const ColorPick = styled.div` margin-left: 15px; `;