"use client"; import { HsvaColor } from "@noya-app/noya-color"; import { useDeepMemo } from "@noya-app/react-utils"; import React, { ReactNode, useCallback, useMemo, type JSX } from "react"; import { ColorPickerContextValue, ColorPickerProvider, } from "../contexts/ColorPickerContext"; import { AnyColor, ColorModel, ColorPickerBaseProps } from "../types"; interface Props extends Partial> { colorModel: ColorModel; children?: ReactNode; } export default function ColorPicker({ colorModel, color = colorModel.defaultColor, onChange, children, style, className, }: Props): JSX.Element { const hsva = useDeepMemo(colorModel.toHsva(color)); const handleChange = useCallback( (params: Partial) => { onChange?.(colorModel.fromHsva({ ...hsva, ...params })); }, [colorModel, hsva, onChange] ); const contextValue = useMemo( (): ColorPickerContextValue => [hsva, handleChange], [handleChange, hsva] ); return (
{children}
); }