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/README.md +251 -0
- package/dist/index.d.mts +2 -25
- package/dist/index.d.ts +2 -25
- package/dist/index.js +216 -270
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +209 -260
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21,8 +21,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
Alpha: () => Alpha,
|
|
24
|
-
ColorPicker: () => ColorPicker,
|
|
25
|
-
HexColorPicker: () => HexColorPicker,
|
|
26
24
|
Hue: () => Hue,
|
|
27
25
|
Interactive: () => Interactive,
|
|
28
26
|
Pointer: () => Pointer,
|
|
@@ -33,7 +31,6 @@ __export(index_exports, {
|
|
|
33
31
|
equalHex: () => equalHex,
|
|
34
32
|
formatClassName: () => formatClassName,
|
|
35
33
|
getNonce: () => getNonce,
|
|
36
|
-
hexColorModel: () => hexColorModel,
|
|
37
34
|
hexToHsva: () => hexToHsva,
|
|
38
35
|
hexToRgba: () => hexToRgba,
|
|
39
36
|
hslStringToHsva: () => hslStringToHsva,
|
|
@@ -68,183 +65,21 @@ __export(index_exports, {
|
|
|
68
65
|
});
|
|
69
66
|
module.exports = __toCommonJS(index_exports);
|
|
70
67
|
|
|
71
|
-
// src/
|
|
72
|
-
var
|
|
68
|
+
// src/components/Hue.tsx
|
|
69
|
+
var import_react3 = require("react");
|
|
70
|
+
|
|
71
|
+
// src/utils/clamp.ts
|
|
72
|
+
var clamp = (number, min = 0, max = 1) => {
|
|
73
|
+
return number > max ? max : number < min ? min : number;
|
|
74
|
+
};
|
|
73
75
|
|
|
74
76
|
// src/utils/round.ts
|
|
75
77
|
var round = (number, digits = 0, base = Math.pow(10, digits)) => {
|
|
76
78
|
return Math.round(base * number) / base;
|
|
77
79
|
};
|
|
78
80
|
|
|
79
|
-
// src/
|
|
80
|
-
var
|
|
81
|
-
grad: 360 / 400,
|
|
82
|
-
turn: 360,
|
|
83
|
-
rad: 360 / (Math.PI * 2)
|
|
84
|
-
};
|
|
85
|
-
var hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));
|
|
86
|
-
var hexToRgba = (hex) => {
|
|
87
|
-
if (hex[0] === "#") hex = hex.substring(1);
|
|
88
|
-
if (hex.length < 6) {
|
|
89
|
-
return {
|
|
90
|
-
r: parseInt(hex[0] + hex[0], 16),
|
|
91
|
-
g: parseInt(hex[1] + hex[1], 16),
|
|
92
|
-
b: parseInt(hex[2] + hex[2], 16),
|
|
93
|
-
a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
r: parseInt(hex.substring(0, 2), 16),
|
|
98
|
-
g: parseInt(hex.substring(2, 4), 16),
|
|
99
|
-
b: parseInt(hex.substring(4, 6), 16),
|
|
100
|
-
a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
var parseHue = (value, unit = "deg") => {
|
|
104
|
-
return Number(value) * (angleUnits[unit] || 1);
|
|
105
|
-
};
|
|
106
|
-
var hslaStringToHsva = (hslString) => {
|
|
107
|
-
const matcher2 = /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
108
|
-
const match = matcher2.exec(hslString);
|
|
109
|
-
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
110
|
-
return hslaToHsva({
|
|
111
|
-
h: parseHue(match[1], match[2]),
|
|
112
|
-
s: Number(match[3]),
|
|
113
|
-
l: Number(match[4]),
|
|
114
|
-
a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
var hslStringToHsva = hslaStringToHsva;
|
|
118
|
-
var hslaToHsva = ({ h, s, l, a }) => {
|
|
119
|
-
s *= (l < 50 ? l : 100 - l) / 100;
|
|
120
|
-
return {
|
|
121
|
-
h,
|
|
122
|
-
s: s > 0 ? 2 * s / (l + s) * 100 : 0,
|
|
123
|
-
v: l + s,
|
|
124
|
-
a
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
var hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));
|
|
128
|
-
var hsvaToHsla = ({ h, s, v, a }) => {
|
|
129
|
-
const hh = (200 - s) * v / 100;
|
|
130
|
-
return {
|
|
131
|
-
h: round(h),
|
|
132
|
-
s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
|
|
133
|
-
l: round(hh / 2),
|
|
134
|
-
a: round(a, 2)
|
|
135
|
-
};
|
|
136
|
-
};
|
|
137
|
-
var hsvaToHslString = (hsva) => {
|
|
138
|
-
const { h, s, l } = hsvaToHsla(hsva);
|
|
139
|
-
return `hsl(${h}, ${s}%, ${l}%)`;
|
|
140
|
-
};
|
|
141
|
-
var hsvaToHsvString = (hsva) => {
|
|
142
|
-
const { h, s, v } = roundHsva(hsva);
|
|
143
|
-
return `hsv(${h}, ${s}%, ${v}%)`;
|
|
144
|
-
};
|
|
145
|
-
var hsvaToHsvaString = (hsva) => {
|
|
146
|
-
const { h, s, v, a } = roundHsva(hsva);
|
|
147
|
-
return `hsva(${h}, ${s}%, ${v}%, ${a})`;
|
|
148
|
-
};
|
|
149
|
-
var hsvaToHslaString = (hsva) => {
|
|
150
|
-
const { h, s, l, a } = hsvaToHsla(hsva);
|
|
151
|
-
return `hsla(${h}, ${s}%, ${l}%, ${a})`;
|
|
152
|
-
};
|
|
153
|
-
var hsvaToRgba = ({ h, s, v, a }) => {
|
|
154
|
-
h = h / 360 * 6;
|
|
155
|
-
s = s / 100;
|
|
156
|
-
v = v / 100;
|
|
157
|
-
const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module2 = hh % 6;
|
|
158
|
-
return {
|
|
159
|
-
r: round([v, c, b, b, d, v][module2] * 255),
|
|
160
|
-
g: round([d, v, v, c, b, b][module2] * 255),
|
|
161
|
-
b: round([b, b, d, v, v, c][module2] * 255),
|
|
162
|
-
a: round(a, 2)
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
var hsvaToRgbString = (hsva) => {
|
|
166
|
-
const { r, g, b } = hsvaToRgba(hsva);
|
|
167
|
-
return `rgb(${r}, ${g}, ${b})`;
|
|
168
|
-
};
|
|
169
|
-
var hsvaToRgbaString = (hsva) => {
|
|
170
|
-
const { r, g, b, a } = hsvaToRgba(hsva);
|
|
171
|
-
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
172
|
-
};
|
|
173
|
-
var hsvaStringToHsva = (hsvString) => {
|
|
174
|
-
const matcher2 = /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
175
|
-
const match = matcher2.exec(hsvString);
|
|
176
|
-
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
177
|
-
return roundHsva({
|
|
178
|
-
h: parseHue(match[1], match[2]),
|
|
179
|
-
s: Number(match[3]),
|
|
180
|
-
v: Number(match[4]),
|
|
181
|
-
a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
182
|
-
});
|
|
183
|
-
};
|
|
184
|
-
var hsvStringToHsva = hsvaStringToHsva;
|
|
185
|
-
var rgbaStringToHsva = (rgbaString) => {
|
|
186
|
-
const matcher2 = /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
187
|
-
const match = matcher2.exec(rgbaString);
|
|
188
|
-
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
189
|
-
return rgbaToHsva({
|
|
190
|
-
r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
|
|
191
|
-
g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
|
|
192
|
-
b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
|
|
193
|
-
a: match[7] === void 0 ? 1 : Number(match[7]) / (match[8] ? 100 : 1)
|
|
194
|
-
});
|
|
195
|
-
};
|
|
196
|
-
var rgbStringToHsva = rgbaStringToHsva;
|
|
197
|
-
var format = (number) => {
|
|
198
|
-
const hex = number.toString(16);
|
|
199
|
-
return hex.length < 2 ? "0" + hex : hex;
|
|
200
|
-
};
|
|
201
|
-
var rgbaToHex = ({ r, g, b, a }) => {
|
|
202
|
-
const alphaHex = a < 1 ? format(round(a * 255)) : "";
|
|
203
|
-
return "#" + format(r) + format(g) + format(b) + alphaHex;
|
|
204
|
-
};
|
|
205
|
-
var rgbaToHsva = ({ r, g, b, a }) => {
|
|
206
|
-
const max = Math.max(r, g, b);
|
|
207
|
-
const delta = max - Math.min(r, g, b);
|
|
208
|
-
const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
|
|
209
|
-
return {
|
|
210
|
-
h: round(60 * (hh < 0 ? hh + 6 : hh)),
|
|
211
|
-
s: round(max ? delta / max * 100 : 0),
|
|
212
|
-
v: round(max / 255 * 100),
|
|
213
|
-
a
|
|
214
|
-
};
|
|
215
|
-
};
|
|
216
|
-
var roundHsva = (hsva) => ({
|
|
217
|
-
h: round(hsva.h),
|
|
218
|
-
s: round(hsva.s),
|
|
219
|
-
v: round(hsva.v),
|
|
220
|
-
a: round(hsva.a, 2)
|
|
221
|
-
});
|
|
222
|
-
var rgbaToRgb = ({ r, g, b }) => ({ r, g, b });
|
|
223
|
-
var hslaToHsl = ({ h, s, l }) => ({ h, s, l });
|
|
224
|
-
var hsvaToHsv = (hsva) => {
|
|
225
|
-
const { h, s, v } = roundHsva(hsva);
|
|
226
|
-
return { h, s, v };
|
|
227
|
-
};
|
|
228
|
-
var hsvaToHueHsl = (h) => {
|
|
229
|
-
return `hsl(${Math.round(h)}, 100%, 50%)`;
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
// src/utils/compare.ts
|
|
233
|
-
var equalColorObjects = (first, second) => {
|
|
234
|
-
if (first === second) return true;
|
|
235
|
-
for (const prop in first) {
|
|
236
|
-
if (first[prop] !== second[prop])
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
return true;
|
|
240
|
-
};
|
|
241
|
-
var equalColorString = (first, second) => {
|
|
242
|
-
return first.replace(/\s/g, "") === second.replace(/\s/g, "");
|
|
243
|
-
};
|
|
244
|
-
var equalHex = (first, second) => {
|
|
245
|
-
if (first.toLowerCase() === second.toLowerCase()) return true;
|
|
246
|
-
return equalColorObjects(hexToRgba(first), hexToRgba(second));
|
|
247
|
-
};
|
|
81
|
+
// src/components/Interactive.tsx
|
|
82
|
+
var import_react2 = require("react");
|
|
248
83
|
|
|
249
84
|
// src/hooks/useEventCallback.ts
|
|
250
85
|
var import_react = require("react");
|
|
@@ -257,41 +92,7 @@ function useEventCallback(handler) {
|
|
|
257
92
|
return fn.current;
|
|
258
93
|
}
|
|
259
94
|
|
|
260
|
-
// src/hooks/useColorManipulation.ts
|
|
261
|
-
function useColorManipulation(colorModel, color, onChange) {
|
|
262
|
-
const onChangeCallback = useEventCallback(onChange);
|
|
263
|
-
const [hsva, updateHsva] = (0, import_react2.useState)(() => colorModel.toHsva(color));
|
|
264
|
-
const cache = (0, import_react2.useRef)({ color, hsva });
|
|
265
|
-
(0, import_react2.useEffect)(() => {
|
|
266
|
-
if (!colorModel.equal(color, cache.current.color)) {
|
|
267
|
-
const newHsva = colorModel.toHsva(color);
|
|
268
|
-
cache.current = { hsva: newHsva, color };
|
|
269
|
-
updateHsva(newHsva);
|
|
270
|
-
}
|
|
271
|
-
}, [color, colorModel]);
|
|
272
|
-
(0, import_react2.useEffect)(() => {
|
|
273
|
-
let newColor;
|
|
274
|
-
if (!equalColorObjects(hsva, cache.current.hsva) && !colorModel.equal(newColor = colorModel.fromHsva(hsva), cache.current.color)) {
|
|
275
|
-
cache.current = { hsva, color: newColor };
|
|
276
|
-
onChangeCallback(newColor);
|
|
277
|
-
}
|
|
278
|
-
}, [hsva, colorModel, onChangeCallback]);
|
|
279
|
-
const handleChange = (0, import_react2.useCallback)((params) => {
|
|
280
|
-
updateHsva((current) => Object.assign({}, current, params));
|
|
281
|
-
}, []);
|
|
282
|
-
return [hsva, handleChange];
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// src/components/Hue.tsx
|
|
286
|
-
var import_react4 = require("react");
|
|
287
|
-
|
|
288
|
-
// src/utils/clamp.ts
|
|
289
|
-
var clamp = (number, min = 0, max = 1) => {
|
|
290
|
-
return number > max ? max : number < min ? min : number;
|
|
291
|
-
};
|
|
292
|
-
|
|
293
95
|
// src/components/Interactive.tsx
|
|
294
|
-
var import_react3 = require("react");
|
|
295
96
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
296
97
|
var isTouch = (e) => "touches" in e;
|
|
297
98
|
var getParentWindow = (node) => node?.ownerDocument?.defaultView ?? window;
|
|
@@ -307,19 +108,19 @@ var getRelativePosition = (node, event, touchId) => {
|
|
|
307
108
|
)
|
|
308
109
|
};
|
|
309
110
|
};
|
|
310
|
-
var Interactive = (0,
|
|
111
|
+
var Interactive = (0, import_react2.memo)(function Interactive2({
|
|
311
112
|
onMove,
|
|
312
113
|
onKey,
|
|
313
114
|
children,
|
|
314
115
|
style,
|
|
315
116
|
...rest
|
|
316
117
|
}) {
|
|
317
|
-
const container = (0,
|
|
118
|
+
const container = (0, import_react2.useRef)(null);
|
|
318
119
|
const onMoveCallback = useEventCallback(onMove);
|
|
319
120
|
const onKeyCallback = useEventCallback(onKey);
|
|
320
|
-
const touchId = (0,
|
|
321
|
-
const hasTouch = (0,
|
|
322
|
-
const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = (0,
|
|
121
|
+
const touchId = (0, import_react2.useRef)(null);
|
|
122
|
+
const hasTouch = (0, import_react2.useRef)(false);
|
|
123
|
+
const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = (0, import_react2.useMemo)(() => {
|
|
323
124
|
const handleMoveStart2 = ({
|
|
324
125
|
nativeEvent
|
|
325
126
|
}) => {
|
|
@@ -382,7 +183,7 @@ var Interactive = (0, import_react3.memo)(function Interactive2({
|
|
|
382
183
|
}
|
|
383
184
|
return [handleMoveStart2, handleKeyDown2, toggleDocumentEvents2];
|
|
384
185
|
}, [onKeyCallback, onMoveCallback]);
|
|
385
|
-
(0,
|
|
186
|
+
(0, import_react2.useEffect)(() => {
|
|
386
187
|
return () => toggleDocumentEvents(false);
|
|
387
188
|
}, [toggleDocumentEvents]);
|
|
388
189
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -433,7 +234,7 @@ var Pointer = function Pointer2({
|
|
|
433
234
|
|
|
434
235
|
// src/components/Hue.tsx
|
|
435
236
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
436
|
-
var Hue = (0,
|
|
237
|
+
var Hue = (0, import_react3.memo)(function Hue2({
|
|
437
238
|
hue,
|
|
438
239
|
onChange,
|
|
439
240
|
renderPointer,
|
|
@@ -462,9 +263,164 @@ var Hue = (0, import_react4.memo)(function Hue2({
|
|
|
462
263
|
});
|
|
463
264
|
|
|
464
265
|
// src/components/Saturation.tsx
|
|
465
|
-
var
|
|
266
|
+
var import_react4 = require("react");
|
|
267
|
+
|
|
268
|
+
// src/utils/convert.ts
|
|
269
|
+
var angleUnits = {
|
|
270
|
+
grad: 360 / 400,
|
|
271
|
+
turn: 360,
|
|
272
|
+
rad: 360 / (Math.PI * 2)
|
|
273
|
+
};
|
|
274
|
+
var hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));
|
|
275
|
+
var hexToRgba = (hex) => {
|
|
276
|
+
if (hex[0] === "#") hex = hex.substring(1);
|
|
277
|
+
if (hex.length < 6) {
|
|
278
|
+
return {
|
|
279
|
+
r: parseInt(hex[0] + hex[0], 16),
|
|
280
|
+
g: parseInt(hex[1] + hex[1], 16),
|
|
281
|
+
b: parseInt(hex[2] + hex[2], 16),
|
|
282
|
+
a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
r: parseInt(hex.substring(0, 2), 16),
|
|
287
|
+
g: parseInt(hex.substring(2, 4), 16),
|
|
288
|
+
b: parseInt(hex.substring(4, 6), 16),
|
|
289
|
+
a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
var parseHue = (value, unit = "deg") => {
|
|
293
|
+
return Number(value) * (angleUnits[unit] || 1);
|
|
294
|
+
};
|
|
295
|
+
var hslaStringToHsva = (hslString) => {
|
|
296
|
+
const matcher2 = /hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
297
|
+
const match = matcher2.exec(hslString);
|
|
298
|
+
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
299
|
+
return hslaToHsva({
|
|
300
|
+
h: parseHue(match[1], match[2]),
|
|
301
|
+
s: Number(match[3]),
|
|
302
|
+
l: Number(match[4]),
|
|
303
|
+
a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
var hslStringToHsva = hslaStringToHsva;
|
|
307
|
+
var hslaToHsva = ({ h, s, l, a }) => {
|
|
308
|
+
s *= (l < 50 ? l : 100 - l) / 100;
|
|
309
|
+
return {
|
|
310
|
+
h,
|
|
311
|
+
s: s > 0 ? 2 * s / (l + s) * 100 : 0,
|
|
312
|
+
v: l + s,
|
|
313
|
+
a
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
var hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));
|
|
317
|
+
var hsvaToHsla = ({ h, s, v, a }) => {
|
|
318
|
+
const hh = (200 - s) * v / 100;
|
|
319
|
+
return {
|
|
320
|
+
h: round(h),
|
|
321
|
+
s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),
|
|
322
|
+
l: round(hh / 2),
|
|
323
|
+
a: round(a, 2)
|
|
324
|
+
};
|
|
325
|
+
};
|
|
326
|
+
var hsvaToHslString = (hsva) => {
|
|
327
|
+
const { h, s, l } = hsvaToHsla(hsva);
|
|
328
|
+
return `hsl(${h}, ${s}%, ${l}%)`;
|
|
329
|
+
};
|
|
330
|
+
var hsvaToHsvString = (hsva) => {
|
|
331
|
+
const { h, s, v } = roundHsva(hsva);
|
|
332
|
+
return `hsv(${h}, ${s}%, ${v}%)`;
|
|
333
|
+
};
|
|
334
|
+
var hsvaToHsvaString = (hsva) => {
|
|
335
|
+
const { h, s, v, a } = roundHsva(hsva);
|
|
336
|
+
return `hsva(${h}, ${s}%, ${v}%, ${a})`;
|
|
337
|
+
};
|
|
338
|
+
var hsvaToHslaString = (hsva) => {
|
|
339
|
+
const { h, s, l, a } = hsvaToHsla(hsva);
|
|
340
|
+
return `hsla(${h}, ${s}%, ${l}%, ${a})`;
|
|
341
|
+
};
|
|
342
|
+
var hsvaToRgba = ({ h, s, v, a }) => {
|
|
343
|
+
h = h / 360 * 6;
|
|
344
|
+
s = s / 100;
|
|
345
|
+
v = v / 100;
|
|
346
|
+
const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module2 = hh % 6;
|
|
347
|
+
return {
|
|
348
|
+
r: round([v, c, b, b, d, v][module2] * 255),
|
|
349
|
+
g: round([d, v, v, c, b, b][module2] * 255),
|
|
350
|
+
b: round([b, b, d, v, v, c][module2] * 255),
|
|
351
|
+
a: round(a, 2)
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
var hsvaToRgbString = (hsva) => {
|
|
355
|
+
const { r, g, b } = hsvaToRgba(hsva);
|
|
356
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
357
|
+
};
|
|
358
|
+
var hsvaToRgbaString = (hsva) => {
|
|
359
|
+
const { r, g, b, a } = hsvaToRgba(hsva);
|
|
360
|
+
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
361
|
+
};
|
|
362
|
+
var hsvaStringToHsva = (hsvString) => {
|
|
363
|
+
const matcher2 = /hsva?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
364
|
+
const match = matcher2.exec(hsvString);
|
|
365
|
+
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
366
|
+
return roundHsva({
|
|
367
|
+
h: parseHue(match[1], match[2]),
|
|
368
|
+
s: Number(match[3]),
|
|
369
|
+
v: Number(match[4]),
|
|
370
|
+
a: match[5] === void 0 ? 1 : Number(match[5]) / (match[6] ? 100 : 1)
|
|
371
|
+
});
|
|
372
|
+
};
|
|
373
|
+
var hsvStringToHsva = hsvaStringToHsva;
|
|
374
|
+
var rgbaStringToHsva = (rgbaString) => {
|
|
375
|
+
const matcher2 = /rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i;
|
|
376
|
+
const match = matcher2.exec(rgbaString);
|
|
377
|
+
if (!match) return { h: 0, s: 0, v: 0, a: 1 };
|
|
378
|
+
return rgbaToHsva({
|
|
379
|
+
r: Number(match[1]) / (match[2] ? 100 / 255 : 1),
|
|
380
|
+
g: Number(match[3]) / (match[4] ? 100 / 255 : 1),
|
|
381
|
+
b: Number(match[5]) / (match[6] ? 100 / 255 : 1),
|
|
382
|
+
a: match[7] === void 0 ? 1 : Number(match[7]) / (match[8] ? 100 : 1)
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
var rgbStringToHsva = rgbaStringToHsva;
|
|
386
|
+
var format = (number) => {
|
|
387
|
+
const hex = number.toString(16);
|
|
388
|
+
return hex.length < 2 ? "0" + hex : hex;
|
|
389
|
+
};
|
|
390
|
+
var rgbaToHex = ({ r, g, b, a }) => {
|
|
391
|
+
const alphaHex = a < 1 ? format(round(a * 255)) : "";
|
|
392
|
+
return "#" + format(r) + format(g) + format(b) + alphaHex;
|
|
393
|
+
};
|
|
394
|
+
var rgbaToHsva = ({ r, g, b, a }) => {
|
|
395
|
+
const max = Math.max(r, g, b);
|
|
396
|
+
const delta = max - Math.min(r, g, b);
|
|
397
|
+
const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;
|
|
398
|
+
return {
|
|
399
|
+
h: round(60 * (hh < 0 ? hh + 6 : hh)),
|
|
400
|
+
s: round(max ? delta / max * 100 : 0),
|
|
401
|
+
v: round(max / 255 * 100),
|
|
402
|
+
a
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
var roundHsva = (hsva) => ({
|
|
406
|
+
h: round(hsva.h),
|
|
407
|
+
s: round(hsva.s),
|
|
408
|
+
v: round(hsva.v),
|
|
409
|
+
a: round(hsva.a, 2)
|
|
410
|
+
});
|
|
411
|
+
var rgbaToRgb = ({ r, g, b }) => ({ r, g, b });
|
|
412
|
+
var hslaToHsl = ({ h, s, l }) => ({ h, s, l });
|
|
413
|
+
var hsvaToHsv = (hsva) => {
|
|
414
|
+
const { h, s, v } = roundHsva(hsva);
|
|
415
|
+
return { h, s, v };
|
|
416
|
+
};
|
|
417
|
+
var hsvaToHueHsl = (h) => {
|
|
418
|
+
return `hsl(${Math.round(h)}, 100%, 50%)`;
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
// src/components/Saturation.tsx
|
|
466
422
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
467
|
-
var Saturation = (0,
|
|
423
|
+
var Saturation = (0, import_react4.memo)(function Saturation2({
|
|
468
424
|
hsva,
|
|
469
425
|
onChange,
|
|
470
426
|
style,
|
|
@@ -500,9 +456,9 @@ var Saturation = (0, import_react5.memo)(function Saturation2({
|
|
|
500
456
|
});
|
|
501
457
|
|
|
502
458
|
// src/components/Alpha.tsx
|
|
503
|
-
var
|
|
459
|
+
var import_react5 = require("react");
|
|
504
460
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
505
|
-
var Alpha = (0,
|
|
461
|
+
var Alpha = (0, import_react5.memo)(function Alpha2({
|
|
506
462
|
hsva,
|
|
507
463
|
onChange,
|
|
508
464
|
renderPointer,
|
|
@@ -544,56 +500,49 @@ var Alpha = (0, import_react6.memo)(function Alpha2({
|
|
|
544
500
|
);
|
|
545
501
|
});
|
|
546
502
|
|
|
547
|
-
// src/
|
|
548
|
-
var
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
...rest
|
|
557
|
-
}) {
|
|
558
|
-
const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);
|
|
559
|
-
if (children) {
|
|
560
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: children({ hsva, updateHsva, Saturation, Hue, Alpha, Pointer }) });
|
|
503
|
+
// src/hooks/useColorManipulation.ts
|
|
504
|
+
var import_react6 = require("react");
|
|
505
|
+
|
|
506
|
+
// src/utils/compare.ts
|
|
507
|
+
var equalColorObjects = (first, second) => {
|
|
508
|
+
if (first === second) return true;
|
|
509
|
+
for (const prop in first) {
|
|
510
|
+
if (first[prop] !== second[prop])
|
|
511
|
+
return false;
|
|
561
512
|
}
|
|
562
|
-
return
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
),
|
|
572
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
573
|
-
Hue,
|
|
574
|
-
{
|
|
575
|
-
hue: hsva.h,
|
|
576
|
-
onChange: updateHsva,
|
|
577
|
-
renderPointer: renderHuePointer,
|
|
578
|
-
style: { width: "100%", height: 24, borderRadius: "0 0 4px 4px", marginTop: 4 }
|
|
579
|
-
}
|
|
580
|
-
)
|
|
581
|
-
] });
|
|
582
|
-
}
|
|
513
|
+
return true;
|
|
514
|
+
};
|
|
515
|
+
var equalColorString = (first, second) => {
|
|
516
|
+
return first.replace(/\s/g, "") === second.replace(/\s/g, "");
|
|
517
|
+
};
|
|
518
|
+
var equalHex = (first, second) => {
|
|
519
|
+
if (first.toLowerCase() === second.toLowerCase()) return true;
|
|
520
|
+
return equalColorObjects(hexToRgba(first), hexToRgba(second));
|
|
521
|
+
};
|
|
583
522
|
|
|
584
|
-
// src/
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
})
|
|
596
|
-
|
|
523
|
+
// src/hooks/useColorManipulation.ts
|
|
524
|
+
function useColorManipulation(colorModel, color, onChange) {
|
|
525
|
+
const onChangeCallback = useEventCallback(onChange);
|
|
526
|
+
const [hsva, updateHsva] = (0, import_react6.useState)(() => colorModel.toHsva(color));
|
|
527
|
+
const cache = (0, import_react6.useRef)({ color, hsva });
|
|
528
|
+
(0, import_react6.useEffect)(() => {
|
|
529
|
+
if (!colorModel.equal(color, cache.current.color)) {
|
|
530
|
+
const newHsva = colorModel.toHsva(color);
|
|
531
|
+
cache.current = { hsva: newHsva, color };
|
|
532
|
+
updateHsva(newHsva);
|
|
533
|
+
}
|
|
534
|
+
}, [color, colorModel]);
|
|
535
|
+
(0, import_react6.useEffect)(() => {
|
|
536
|
+
let newColor;
|
|
537
|
+
if (!equalColorObjects(hsva, cache.current.hsva) && !colorModel.equal(newColor = colorModel.fromHsva(hsva), cache.current.color)) {
|
|
538
|
+
cache.current = { hsva, color: newColor };
|
|
539
|
+
onChangeCallback(newColor);
|
|
540
|
+
}
|
|
541
|
+
}, [hsva, colorModel, onChangeCallback]);
|
|
542
|
+
const handleChange = (0, import_react6.useCallback)((params) => {
|
|
543
|
+
updateHsva((current) => Object.assign({}, current, params));
|
|
544
|
+
}, []);
|
|
545
|
+
return [hsva, handleChange];
|
|
597
546
|
}
|
|
598
547
|
|
|
599
548
|
// src/utils/validate.ts
|
|
@@ -623,8 +572,6 @@ var formatClassName = (names) => names.filter(Boolean).join(" ");
|
|
|
623
572
|
// Annotate the CommonJS export names for ESM import in node:
|
|
624
573
|
0 && (module.exports = {
|
|
625
574
|
Alpha,
|
|
626
|
-
ColorPicker,
|
|
627
|
-
HexColorPicker,
|
|
628
575
|
Hue,
|
|
629
576
|
Interactive,
|
|
630
577
|
Pointer,
|
|
@@ -635,7 +582,6 @@ var formatClassName = (names) => names.filter(Boolean).join(" ");
|
|
|
635
582
|
equalHex,
|
|
636
583
|
formatClassName,
|
|
637
584
|
getNonce,
|
|
638
|
-
hexColorModel,
|
|
639
585
|
hexToHsva,
|
|
640
586
|
hexToRgba,
|
|
641
587
|
hslStringToHsva,
|