react-headless-color-picker 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,180 +1,18 @@
1
- // src/hooks/useColorManipulation.ts
2
- import { useState, useEffect, useCallback, useRef as useRef2 } from "react";
1
+ // src/components/Hue.tsx
2
+ import { memo as memo2 } from "react";
3
+
4
+ // src/utils/clamp.ts
5
+ var clamp = (number, min = 0, max = 1) => {
6
+ return number > max ? max : number < min ? min : number;
7
+ };
3
8
 
4
9
  // src/utils/round.ts
5
10
  var round = (number, digits = 0, base = Math.pow(10, digits)) => {
6
11
  return Math.round(base * number) / base;
7
12
  };
8
13
 
9
- // src/utils/convert.ts
10
- var angleUnits = {
11
- grad: 360 / 400,
12
- turn: 360,
13
- rad: 360 / (Math.PI * 2)
14
- };
15
- var hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));
16
- var hexToRgba = (hex) => {
17
- if (hex[0] === "#") hex = hex.substring(1);
18
- if (hex.length < 6) {
19
- return {
20
- r: parseInt(hex[0] + hex[0], 16),
21
- g: parseInt(hex[1] + hex[1], 16),
22
- b: parseInt(hex[2] + hex[2], 16),
23
- a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1
24
- };
25
- }
26
- return {
27
- r: parseInt(hex.substring(0, 2), 16),
28
- g: parseInt(hex.substring(2, 4), 16),
29
- b: parseInt(hex.substring(4, 6), 16),
30
- a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1
31
- };
32
- };
33
- var parseHue = (value, unit = "deg") => {
34
- return Number(value) * (angleUnits[unit] || 1);
35
- };
36
- var hslaStringToHsva = (hslString) => {
37
- const matcher2 = /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
38
- const match = matcher2.exec(hslString);
39
- if (!match) return { h: 0, s: 0, v: 0, a: 1 };
40
- return hslaToHsva({
41
- h: parseHue(match[1], match[2]),
42
- s: Number(match[3]),
43
- l: Number(match[4]),
44
- a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
45
- });
46
- };
47
- var hslStringToHsva = hslaStringToHsva;
48
- var hslaToHsva = ({ h, s, l, a }) => {
49
- s *= (l < 50 ? l : 100 - l) / 100;
50
- return {
51
- h,
52
- s: s > 0 ? 2 * s / (l + s) * 100 : 0,
53
- v: l + s,
54
- a
55
- };
56
- };
57
- var hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));
58
- var hsvaToHsla = ({ h, s, v, a }) => {
59
- const hh = (200 - s) * v / 100;
60
- return {
61
- h: round(h),
62
- s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
63
- l: round(hh / 2),
64
- a: round(a, 2)
65
- };
66
- };
67
- var hsvaToHslString = (hsva) => {
68
- const { h, s, l } = hsvaToHsla(hsva);
69
- return `hsl(${h}, ${s}%, ${l}%)`;
70
- };
71
- var hsvaToHsvString = (hsva) => {
72
- const { h, s, v } = roundHsva(hsva);
73
- return `hsv(${h}, ${s}%, ${v}%)`;
74
- };
75
- var hsvaToHsvaString = (hsva) => {
76
- const { h, s, v, a } = roundHsva(hsva);
77
- return `hsva(${h}, ${s}%, ${v}%, ${a})`;
78
- };
79
- var hsvaToHslaString = (hsva) => {
80
- const { h, s, l, a } = hsvaToHsla(hsva);
81
- return `hsla(${h}, ${s}%, ${l}%, ${a})`;
82
- };
83
- var hsvaToRgba = ({ h, s, v, a }) => {
84
- h = h / 360 * 6;
85
- s = s / 100;
86
- v = v / 100;
87
- const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module = hh % 6;
88
- return {
89
- r: round([v, c, b, b, d, v][module] * 255),
90
- g: round([d, v, v, c, b, b][module] * 255),
91
- b: round([b, b, d, v, v, c][module] * 255),
92
- a: round(a, 2)
93
- };
94
- };
95
- var hsvaToRgbString = (hsva) => {
96
- const { r, g, b } = hsvaToRgba(hsva);
97
- return `rgb(${r}, ${g}, ${b})`;
98
- };
99
- var hsvaToRgbaString = (hsva) => {
100
- const { r, g, b, a } = hsvaToRgba(hsva);
101
- return `rgba(${r}, ${g}, ${b}, ${a})`;
102
- };
103
- var hsvaStringToHsva = (hsvString) => {
104
- const matcher2 = /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
105
- const match = matcher2.exec(hsvString);
106
- if (!match) return { h: 0, s: 0, v: 0, a: 1 };
107
- return roundHsva({
108
- h: parseHue(match[1], match[2]),
109
- s: Number(match[3]),
110
- v: Number(match[4]),
111
- a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
112
- });
113
- };
114
- var hsvStringToHsva = hsvaStringToHsva;
115
- var rgbaStringToHsva = (rgbaString) => {
116
- const matcher2 = /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
117
- const match = matcher2.exec(rgbaString);
118
- if (!match) return { h: 0, s: 0, v: 0, a: 1 };
119
- return rgbaToHsva({
120
- r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
121
- g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
122
- b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
123
- a: match[7] === void 0 ? 1 : Number(match[7]) / (match[8] ? 100 : 1)
124
- });
125
- };
126
- var rgbStringToHsva = rgbaStringToHsva;
127
- var format = (number) => {
128
- const hex = number.toString(16);
129
- return hex.length < 2 ? "0" + hex : hex;
130
- };
131
- var rgbaToHex = ({ r, g, b, a }) => {
132
- const alphaHex = a < 1 ? format(round(a * 255)) : "";
133
- return "#" + format(r) + format(g) + format(b) + alphaHex;
134
- };
135
- var rgbaToHsva = ({ r, g, b, a }) => {
136
- const max = Math.max(r, g, b);
137
- const delta = max - Math.min(r, g, b);
138
- const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
139
- return {
140
- h: round(60 * (hh < 0 ? hh + 6 : hh)),
141
- s: round(max ? delta / max * 100 : 0),
142
- v: round(max / 255 * 100),
143
- a
144
- };
145
- };
146
- var roundHsva = (hsva) => ({
147
- h: round(hsva.h),
148
- s: round(hsva.s),
149
- v: round(hsva.v),
150
- a: round(hsva.a, 2)
151
- });
152
- var rgbaToRgb = ({ r, g, b }) => ({ r, g, b });
153
- var hslaToHsl = ({ h, s, l }) => ({ h, s, l });
154
- var hsvaToHsv = (hsva) => {
155
- const { h, s, v } = roundHsva(hsva);
156
- return { h, s, v };
157
- };
158
- var hsvaToHueHsl = (h) => {
159
- return `hsl(${Math.round(h)}, 100%, 50%)`;
160
- };
161
-
162
- // src/utils/compare.ts
163
- var equalColorObjects = (first, second) => {
164
- if (first === second) return true;
165
- for (const prop in first) {
166
- if (first[prop] !== second[prop])
167
- return false;
168
- }
169
- return true;
170
- };
171
- var equalColorString = (first, second) => {
172
- return first.replace(/\s/g, "") === second.replace(/\s/g, "");
173
- };
174
- var equalHex = (first, second) => {
175
- if (first.toLowerCase() === second.toLowerCase()) return true;
176
- return equalColorObjects(hexToRgba(first), hexToRgba(second));
177
- };
14
+ // src/components/Interactive.tsx
15
+ import { memo, useEffect, useMemo, useRef as useRef2 } from "react";
178
16
 
179
17
  // src/hooks/useEventCallback.ts
180
18
  import { useRef } from "react";
@@ -187,41 +25,7 @@ function useEventCallback(handler) {
187
25
  return fn.current;
188
26
  }
189
27
 
190
- // src/hooks/useColorManipulation.ts
191
- function useColorManipulation(colorModel, color, onChange) {
192
- const onChangeCallback = useEventCallback(onChange);
193
- const [hsva, updateHsva] = useState(() => colorModel.toHsva(color));
194
- const cache = useRef2({ color, hsva });
195
- useEffect(() => {
196
- if (!colorModel.equal(color, cache.current.color)) {
197
- const newHsva = colorModel.toHsva(color);
198
- cache.current = { hsva: newHsva, color };
199
- updateHsva(newHsva);
200
- }
201
- }, [color, colorModel]);
202
- useEffect(() => {
203
- let newColor;
204
- if (!equalColorObjects(hsva, cache.current.hsva) && !colorModel.equal(newColor = colorModel.fromHsva(hsva), cache.current.color)) {
205
- cache.current = { hsva, color: newColor };
206
- onChangeCallback(newColor);
207
- }
208
- }, [hsva, colorModel, onChangeCallback]);
209
- const handleChange = useCallback((params) => {
210
- updateHsva((current) => Object.assign({}, current, params));
211
- }, []);
212
- return [hsva, handleChange];
213
- }
214
-
215
- // src/components/Hue.tsx
216
- import { memo as memo2 } from "react";
217
-
218
- // src/utils/clamp.ts
219
- var clamp = (number, min = 0, max = 1) => {
220
- return number > max ? max : number < min ? min : number;
221
- };
222
-
223
28
  // src/components/Interactive.tsx
224
- import { memo, useEffect as useEffect2, useMemo, useRef as useRef3 } from "react";
225
29
  import { jsx } from "react/jsx-runtime";
226
30
  var isTouch = (e) => "touches" in e;
227
31
  var getParentWindow = (node) => node?.ownerDocument?.defaultView ?? window;
@@ -244,11 +48,11 @@ var Interactive = memo(function Interactive2({
244
48
  style,
245
49
  ...rest
246
50
  }) {
247
- const container = useRef3(null);
51
+ const container = useRef2(null);
248
52
  const onMoveCallback = useEventCallback(onMove);
249
53
  const onKeyCallback = useEventCallback(onKey);
250
- const touchId = useRef3(null);
251
- const hasTouch = useRef3(false);
54
+ const touchId = useRef2(null);
55
+ const hasTouch = useRef2(false);
252
56
  const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {
253
57
  const handleMoveStart2 = ({
254
58
  nativeEvent
@@ -312,7 +116,7 @@ var Interactive = memo(function Interactive2({
312
116
  }
313
117
  return [handleMoveStart2, handleKeyDown2, toggleDocumentEvents2];
314
118
  }, [onKeyCallback, onMoveCallback]);
315
- useEffect2(() => {
119
+ useEffect(() => {
316
120
  return () => toggleDocumentEvents(false);
317
121
  }, [toggleDocumentEvents]);
318
122
  return /* @__PURE__ */ jsx(
@@ -393,6 +197,161 @@ var Hue = memo2(function Hue2({
393
197
 
394
198
  // src/components/Saturation.tsx
395
199
  import { memo as memo3 } from "react";
200
+
201
+ // src/utils/convert.ts
202
+ var angleUnits = {
203
+ grad: 360 / 400,
204
+ turn: 360,
205
+ rad: 360 / (Math.PI * 2)
206
+ };
207
+ var hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));
208
+ var hexToRgba = (hex) => {
209
+ if (hex[0] === "#") hex = hex.substring(1);
210
+ if (hex.length < 6) {
211
+ return {
212
+ r: parseInt(hex[0] + hex[0], 16),
213
+ g: parseInt(hex[1] + hex[1], 16),
214
+ b: parseInt(hex[2] + hex[2], 16),
215
+ a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1
216
+ };
217
+ }
218
+ return {
219
+ r: parseInt(hex.substring(0, 2), 16),
220
+ g: parseInt(hex.substring(2, 4), 16),
221
+ b: parseInt(hex.substring(4, 6), 16),
222
+ a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1
223
+ };
224
+ };
225
+ var parseHue = (value, unit = "deg") => {
226
+ return Number(value) * (angleUnits[unit] || 1);
227
+ };
228
+ var hslaStringToHsva = (hslString) => {
229
+ const matcher2 = /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
230
+ const match = matcher2.exec(hslString);
231
+ if (!match) return { h: 0, s: 0, v: 0, a: 1 };
232
+ return hslaToHsva({
233
+ h: parseHue(match[1], match[2]),
234
+ s: Number(match[3]),
235
+ l: Number(match[4]),
236
+ a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
237
+ });
238
+ };
239
+ var hslStringToHsva = hslaStringToHsva;
240
+ var hslaToHsva = ({ h, s, l, a }) => {
241
+ s *= (l < 50 ? l : 100 - l) / 100;
242
+ return {
243
+ h,
244
+ s: s > 0 ? 2 * s / (l + s) * 100 : 0,
245
+ v: l + s,
246
+ a
247
+ };
248
+ };
249
+ var hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));
250
+ var hsvaToHsla = ({ h, s, v, a }) => {
251
+ const hh = (200 - s) * v / 100;
252
+ return {
253
+ h: round(h),
254
+ s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
255
+ l: round(hh / 2),
256
+ a: round(a, 2)
257
+ };
258
+ };
259
+ var hsvaToHslString = (hsva) => {
260
+ const { h, s, l } = hsvaToHsla(hsva);
261
+ return `hsl(${h}, ${s}%, ${l}%)`;
262
+ };
263
+ var hsvaToHsvString = (hsva) => {
264
+ const { h, s, v } = roundHsva(hsva);
265
+ return `hsv(${h}, ${s}%, ${v}%)`;
266
+ };
267
+ var hsvaToHsvaString = (hsva) => {
268
+ const { h, s, v, a } = roundHsva(hsva);
269
+ return `hsva(${h}, ${s}%, ${v}%, ${a})`;
270
+ };
271
+ var hsvaToHslaString = (hsva) => {
272
+ const { h, s, l, a } = hsvaToHsla(hsva);
273
+ return `hsla(${h}, ${s}%, ${l}%, ${a})`;
274
+ };
275
+ var hsvaToRgba = ({ h, s, v, a }) => {
276
+ h = h / 360 * 6;
277
+ s = s / 100;
278
+ v = v / 100;
279
+ const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module = hh % 6;
280
+ return {
281
+ r: round([v, c, b, b, d, v][module] * 255),
282
+ g: round([d, v, v, c, b, b][module] * 255),
283
+ b: round([b, b, d, v, v, c][module] * 255),
284
+ a: round(a, 2)
285
+ };
286
+ };
287
+ var hsvaToRgbString = (hsva) => {
288
+ const { r, g, b } = hsvaToRgba(hsva);
289
+ return `rgb(${r}, ${g}, ${b})`;
290
+ };
291
+ var hsvaToRgbaString = (hsva) => {
292
+ const { r, g, b, a } = hsvaToRgba(hsva);
293
+ return `rgba(${r}, ${g}, ${b}, ${a})`;
294
+ };
295
+ var hsvaStringToHsva = (hsvString) => {
296
+ const matcher2 = /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
297
+ const match = matcher2.exec(hsvString);
298
+ if (!match) return { h: 0, s: 0, v: 0, a: 1 };
299
+ return roundHsva({
300
+ h: parseHue(match[1], match[2]),
301
+ s: Number(match[3]),
302
+ v: Number(match[4]),
303
+ a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
304
+ });
305
+ };
306
+ var hsvStringToHsva = hsvaStringToHsva;
307
+ var rgbaStringToHsva = (rgbaString) => {
308
+ const matcher2 = /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
309
+ const match = matcher2.exec(rgbaString);
310
+ if (!match) return { h: 0, s: 0, v: 0, a: 1 };
311
+ return rgbaToHsva({
312
+ r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
313
+ g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
314
+ b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
315
+ a: match[7] === void 0 ? 1 : Number(match[7]) / (match[8] ? 100 : 1)
316
+ });
317
+ };
318
+ var rgbStringToHsva = rgbaStringToHsva;
319
+ var format = (number) => {
320
+ const hex = number.toString(16);
321
+ return hex.length < 2 ? "0" + hex : hex;
322
+ };
323
+ var rgbaToHex = ({ r, g, b, a }) => {
324
+ const alphaHex = a < 1 ? format(round(a * 255)) : "";
325
+ return "#" + format(r) + format(g) + format(b) + alphaHex;
326
+ };
327
+ var rgbaToHsva = ({ r, g, b, a }) => {
328
+ const max = Math.max(r, g, b);
329
+ const delta = max - Math.min(r, g, b);
330
+ const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
331
+ return {
332
+ h: round(60 * (hh < 0 ? hh + 6 : hh)),
333
+ s: round(max ? delta / max * 100 : 0),
334
+ v: round(max / 255 * 100),
335
+ a
336
+ };
337
+ };
338
+ var roundHsva = (hsva) => ({
339
+ h: round(hsva.h),
340
+ s: round(hsva.s),
341
+ v: round(hsva.v),
342
+ a: round(hsva.a, 2)
343
+ });
344
+ var rgbaToRgb = ({ r, g, b }) => ({ r, g, b });
345
+ var hslaToHsl = ({ h, s, l }) => ({ h, s, l });
346
+ var hsvaToHsv = (hsva) => {
347
+ const { h, s, v } = roundHsva(hsva);
348
+ return { h, s, v };
349
+ };
350
+ var hsvaToHueHsl = (h) => {
351
+ return `hsl(${Math.round(h)}, 100%, 50%)`;
352
+ };
353
+
354
+ // src/components/Saturation.tsx
396
355
  import { jsx as jsx4 } from "react/jsx-runtime";
397
356
  var Saturation = memo3(function Saturation2({
398
357
  hsva,
@@ -474,56 +433,49 @@ var Alpha = memo4(function Alpha2({
474
433
  );
475
434
  });
476
435
 
477
- // src/components/ColorPicker.tsx
478
- import { Fragment, jsx as jsx6, jsxs } from "react/jsx-runtime";
479
- function ColorPicker({
480
- colorModel,
481
- color,
482
- onChange,
483
- children,
484
- renderSaturationPointer,
485
- renderHuePointer,
486
- ...rest
487
- }) {
488
- const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);
489
- if (children) {
490
- return /* @__PURE__ */ jsx6(Fragment, { children: children({ hsva, updateHsva, Saturation, Hue, Alpha, Pointer }) });
491
- }
492
- return /* @__PURE__ */ jsxs("div", { ...rest, children: [
493
- /* @__PURE__ */ jsx6(
494
- Saturation,
495
- {
496
- hsva,
497
- onChange: updateHsva,
498
- renderPointer: renderSaturationPointer,
499
- style: { width: "100%", aspectRatio: "1", borderRadius: "4px 4px 0 0" }
500
- }
501
- ),
502
- /* @__PURE__ */ jsx6(
503
- Hue,
504
- {
505
- hue: hsva.h,
506
- onChange: updateHsva,
507
- renderPointer: renderHuePointer,
508
- style: { width: "100%", height: 24, borderRadius: "0 0 4px 4px", marginTop: 4 }
509
- }
510
- )
511
- ] });
512
- }
436
+ // src/hooks/useColorManipulation.ts
437
+ import { useState, useEffect as useEffect2, useCallback, useRef as useRef3 } from "react";
513
438
 
514
- // src/components/HexColorPicker.tsx
515
- import { jsx as jsx7 } from "react/jsx-runtime";
516
- var hexColorModel = {
517
- defaultColor: "#ff0000",
518
- toHsva: hexToHsva,
519
- fromHsva: (hsva) => hsvaToHex(hsva),
520
- equal: equalHex
439
+ // src/utils/compare.ts
440
+ var equalColorObjects = (first, second) => {
441
+ if (first === second) return true;
442
+ for (const prop in first) {
443
+ if (first[prop] !== second[prop])
444
+ return false;
445
+ }
446
+ return true;
521
447
  };
522
- function HexColorPicker({
523
- color = "#ff0000",
524
- ...rest
525
- }) {
526
- return /* @__PURE__ */ jsx7(ColorPicker, { colorModel: hexColorModel, color, ...rest });
448
+ var equalColorString = (first, second) => {
449
+ return first.replace(/\s/g, "") === second.replace(/\s/g, "");
450
+ };
451
+ var equalHex = (first, second) => {
452
+ if (first.toLowerCase() === second.toLowerCase()) return true;
453
+ return equalColorObjects(hexToRgba(first), hexToRgba(second));
454
+ };
455
+
456
+ // src/hooks/useColorManipulation.ts
457
+ function useColorManipulation(colorModel, color, onChange) {
458
+ const onChangeCallback = useEventCallback(onChange);
459
+ const [hsva, updateHsva] = useState(() => colorModel.toHsva(color));
460
+ const cache = useRef3({ color, hsva });
461
+ useEffect2(() => {
462
+ if (!colorModel.equal(color, cache.current.color)) {
463
+ const newHsva = colorModel.toHsva(color);
464
+ cache.current = { hsva: newHsva, color };
465
+ updateHsva(newHsva);
466
+ }
467
+ }, [color, colorModel]);
468
+ useEffect2(() => {
469
+ let newColor;
470
+ if (!equalColorObjects(hsva, cache.current.hsva) && !colorModel.equal(newColor = colorModel.fromHsva(hsva), cache.current.color)) {
471
+ cache.current = { hsva, color: newColor };
472
+ onChangeCallback(newColor);
473
+ }
474
+ }, [hsva, colorModel, onChangeCallback]);
475
+ const handleChange = useCallback((params) => {
476
+ updateHsva((current) => Object.assign({}, current, params));
477
+ }, []);
478
+ return [hsva, handleChange];
527
479
  }
528
480
 
529
481
  // src/utils/validate.ts
@@ -552,8 +504,6 @@ var setNonce = (hash) => {
552
504
  var formatClassName = (names) => names.filter(Boolean).join(" ");
553
505
  export {
554
506
  Alpha,
555
- ColorPicker,
556
- HexColorPicker,
557
507
  Hue,
558
508
  Interactive,
559
509
  Pointer,
@@ -564,7 +514,6 @@ export {
564
514
  equalHex,
565
515
  formatClassName,
566
516
  getNonce,
567
- hexColorModel,
568
517
  hexToHsva,
569
518
  hexToRgba,
570
519
  hslStringToHsva,