SaturationSlider
SaturationSlider
は、ユーザーが色の彩度を選択するために使用されるコンポーネントです。
インポート
import { SaturationSlider } from "@yamada-ui/react"
使い方
編集可能な例
<SaturationSlider />
サイズを変更する
編集可能な例
<VStack> <For each={[ { size: "sm", defaultValue: [120, 0.33, 0.33], }, { size: "md", defaultValue: [180, 0.66, 0.66], }, { size: "lg", defaultValue: [240, 1, 1], }, ]} > {({ size, defaultValue }, index) => ( <SaturationSlider key={index} size={size} defaultValue={defaultValue} /> )} </For> </VStack>
ステップ値を設定する
ステップ値を設定する場合は、step
に数値を設定します。
編集可能な例
const [value, onChange] = useState<Hsv>([180, 1, 1]) return ( <VStack> <Text>Value: {JSON.stringify(value)}</Text> <SaturationSlider value={value} step={0.1} onChange={onChange} /> </VStack> )
外部からの制御のみにする
外部からの制御のみにする場合は、focusThumbOnChange
をfalse
にします。
編集可能な例
const [value, setValue] = useState<Hsv>([180, 1, 1]) const [, s, v] = value const onChange = (space: "s" | "v", type: "increment" | "decrement") => { const i = space === "s" ? 1 : 2 setValue((prev) => { if (type === "increment") { if (prev[i] !== 1) prev[i] = Math.round((prev[i] + 0.1) * 10) / 10 } else { if (prev[i] !== 0) prev[i] = Math.round((prev[i] - 0.1) * 10) / 10 } return [...prev] }) } return ( <VStack> <Text>Value: {JSON.stringify(value)}</Text> <SaturationSlider value={value} step={10} focusThumbOnChange={false} /> <Wrap gap="md"> <VStack w="auto" gap="sm"> <Text>Saturation</Text> <Wrap gap="md"> <Button isDisabled={s === 0} onClick={() => onChange("s", "decrement")} > -0.1 </Button> <Button isDisabled={s === 1} colorScheme="blue" onClick={() => onChange("s", "increment")} > +0.1 </Button> </Wrap> </VStack> <VStack w="auto" gap="sm"> <Text>Brightness</Text> <Wrap gap="md"> <Button isDisabled={v === 0} onClick={() => onChange("v", "decrement")} > -0.1 </Button> <Button isDisabled={v === 1} colorScheme="blue" onClick={() => onChange("v", "increment")} > +0.1 </Button> </Wrap> </VStack> </Wrap> </VStack> )
無効化する
無効化する場合は、isDisabled
をtrue
に設定します。
編集可能な例
<VStack> <SaturationSlider isDisabled /> <Fieldset isDisabled legend="Pick color" helperMessage="Please select your favorite color" > <SaturationSlider /> </Fieldset> </VStack>
読み取り専用にする
読み取り専用にする場合は、isReadOnly
をtrue
に設定します。
編集可能な例
<VStack> <SaturationSlider isReadOnly /> <Fieldset isReadOnly legend="Pick color" helperMessage="Please select your favorite color" > <SaturationSlider /> </Fieldset> </VStack>
変更の開始と終了のイベントをハンドルをする
変更の開始と終了のイベントをハンドルをする場合は、onChangeStart
やonChangeEnd
を使用します。
編集可能な例
const [value, onChange] = useState<number>([180, 1, 1]) const [startValue, onChangeStart] = useState<number>([180, 1, 1]) const [endValue, onChangeEnd] = useState<number>([180, 1, 1]) return ( <VStack> <Text> Value: {JSON.stringify(value)}, Start Value: {JSON.stringify(startValue)}, End Value: {JSON.stringify(endValue)} </Text> <SaturationSlider value={value} onChange={onChange} onChangeStart={onChangeStart} onChangeEnd={onChangeEnd} /> </VStack> )
React Hook Form
を使う
編集可能な例
type Data = { saturationSlider: Hsv } const defaultValues: Data = { saturationSlider: [180, 1, 1], } const { control, handleSubmit, watch, formState: { errors }, } = useForm<Data>({ defaultValues }) const onSubmit = (data) => console.log("submit:", data) console.log("watch:", watch()) return ( <VStack as="form" onSubmit={handleSubmit(onSubmit)}> <Fieldset isInvalid={!!errors.saturationSlider} legend="Pick color" errorMessage={ errors.saturationSlider ? errors.saturationSlider.message : undefined } > <Controller name="saturationSlider" control={control} render={({ field }) => <SaturationSlider {...field} />} /> </Fieldset> <Button type="submit" alignSelf="flex-end"> Submit </Button> </VStack> )
GitHubでこのページを編集する