MCPcopy Index your code
hub / github.com/chartbrew/chartbrew / ColorPickerControl

Function ColorPickerControl

client/src/components/ColorPickerControl.jsx:16–125  ·  view source on GitHub ↗
(props)

Source from the content-addressed store, hash-verified

14import { normalizeColorForPicker, serializeColorForPicker } from "../modules/colorPicker";
15
16function ColorPickerControl(props) {
17 const {
18 ariaLabel,
19 className,
20 fallbackColor = "#000000",
21 onChange,
22 onClear,
23 popoverClassName,
24 presetColors = [],
25 renderTrigger,
26 showClearButton = false,
27 swatchClassName,
28 value,
29 valueFormat = "smart",
30 } = props;
31
32 const pickerColor = normalizeColorForPicker(value, fallbackColor);
33 const cssColor = value || serializeColorForPicker(pickerColor, "smart", fallbackColor);
34
35 const handleChange = (nextColor) => {
36 onChange(serializeColorForPicker(nextColor, valueFormat, fallbackColor), nextColor);
37 };
38
39 const triggerContent = renderTrigger
40 ? renderTrigger({ color: cssColor })
41 : (
42 <div className={cn(
43 "flex min-w-[140px] items-center gap-3 rounded-xl border border-divider bg-content1 px-3 py-2 shadow-sm transition-colors hover:bg-content2",
44 swatchClassName,
45 )}
46 >
47 <ColorSwatch color={pickerColor} size="sm" />
48 <span className="text-sm font-medium text-foreground">{ariaLabel}</span>
49 </div>
50 );
51
52 return (
53 <ColorPicker value={pickerColor} onChange={handleChange}>
54 <ColorPicker.Trigger aria-label={ariaLabel} className={cn("inline-flex cursor-pointer", className)}>
55 {triggerContent}
56 </ColorPicker.Trigger>
57 <ColorPicker.Popover className={cn("w-[280px] gap-3 rounded-2xl p-3", popoverClassName)}>
58 {presetColors.length > 0 && (
59 <ColorSwatchPicker aria-label={`${ariaLabel} presets`} className="flex flex-wrap justify-center gap-1 px-1" size="xs">
60 {presetColors.map((preset) => (
61 <ColorSwatchPicker.Item key={preset} color={preset}>
62 <ColorSwatchPicker.Swatch />
63 </ColorSwatchPicker.Item>
64 ))}
65 </ColorSwatchPicker>
66 )}
67
68 <ColorArea
69 aria-label={`${ariaLabel} color area`}
70 className="max-w-full"
71 colorSpace="hsb"
72 xChannel="saturation"
73 yChannel="brightness"

Callers

nothing calls this directly

Calls 3

normalizeColorForPickerFunction · 0.90
serializeColorForPickerFunction · 0.90
cnFunction · 0.90

Tested by

no test coverage detected