ant-design/components/color-picker/ColorPickerPanel.tsx
红果汁 25883ca53a
fix: ColorPicker hover boundary issues (#42669)
* fix: fix hover boundary issues

* test: fix test case

* build: modify dependency scope

* Update package.json

Co-authored-by: MadCcc <1075746765@qq.com>

---------

Co-authored-by: afc163 <afc163@gmail.com>
Co-authored-by: MadCcc <1075746765@qq.com>
2023-05-29 16:50:12 +08:00

70 lines
2.1 KiB
TypeScript

import type { HsbaColorType } from '@rc-component/color-picker';
import RcColorPicker from '@rc-component/color-picker';
import type { FC } from 'react';
import React from 'react';
import Divider from '../divider';
import type { Color } from './color';
import ColorClear from './components/ColorClear';
import ColorInput from './components/ColorInput';
import ColorPresets from './components/ColorPresets';
import type { ColorPickerBaseProps } from './interface';
interface ColorPickerPanelProps extends ColorPickerBaseProps {
onChange?: (value?: Color, type?: HsbaColorType, pickColor?: boolean) => void;
onChangeComplete?: (type?: HsbaColorType) => void;
onClear?: (clear?: boolean) => void;
}
const ColorPickerPanel: FC<ColorPickerPanelProps> = (props) => {
const {
prefixCls,
allowClear,
presets,
onChange,
onClear,
onChangeComplete,
color,
...injectProps
} = props;
const colorPickerPanelPrefixCls = `${prefixCls}-inner-panel`;
const extraPanelRender = (panel: React.ReactNode) => (
<div className={colorPickerPanelPrefixCls}>
{allowClear && (
<ColorClear
prefixCls={prefixCls}
value={color}
onChange={(clearColor) => {
onChange?.(clearColor);
onClear?.(true);
}}
{...injectProps}
/>
)}
{panel}
<ColorInput value={color} onChange={onChange} prefixCls={prefixCls} {...injectProps} />
{Array.isArray(presets) && (
<>
<Divider className={`${colorPickerPanelPrefixCls}-divider`} />
<ColorPresets value={color} presets={presets} prefixCls={prefixCls} onChange={onChange} />
</>
)}
</div>
);
return (
<RcColorPicker
prefixCls={prefixCls}
value={color?.toHsb()}
onChange={(colorValue, type) => onChange?.(colorValue, type, true)}
panelRender={extraPanelRender}
onChangeComplete={onChangeComplete}
/>
);
};
if (process.env.NODE_ENV !== 'production') {
ColorPickerPanel.displayName = 'ColorPickerPanel';
}
export default ColorPickerPanel;